传输层协议分析实验报告(传输层协议分析实验报告总结)

http://www.itjxue.com  2023-02-15 17:12  来源:未知  点击次数: 

【网络协议笔记】第四层:传输层(Transport)TCP协议简介(1)

TCP有以下几个知识点。

图片备用地址

图片备用地址

TCP的几个要点:可靠传输、流量控制、拥塞控制、连接管理(建立和释放连接)。

也正因为这几点使得首部变得很复杂。

占4位,取值范围是0x0101 ~ 0x1111。

乘以4就是首部长度(Header Length)。所以取值范围是5 ~ 60字节,由于首部固定部分占用20字节,所以可选部分至多占用40字节(和网络层首部一样)。

为什么叫数据偏移?因为相对TCP报文向右偏移首部长度后就是数据部分。

UDP的首部中有个16位的字段记录了整个UDP报文段的长度(首部 + 数据)。

但是,TCP的首部中仅仅有个4位的字段记录了TCP报文段的首部长度,并没有字段记录TCP报文段的数据长度。

分析:UDP首部中占16位的长度字段是冗余的,纯粹是为了保证首部是32bit对齐。

TCP/UDP的数据长度,完全可以由IP数据包的首部推测出来,传输层的数据长度 = 网络层的总长度 - 网络层的首部长度 - 传输层的首部长度。

占6位,目前全为0。

与UDP一样,TCP检验和的计算内容:伪首部 + 首部 + 数据。伪首部占用12字节,仅在计算检验和时起作用,并不会传递给网络层。

图片备用地址

一共占6位或9位。

有些资料中,TCP首部的保留(Reserved)字段占3位,标志(Flags)字段占9位。Wireshark中也是如此。是因为标志位中的前3位是无用的,所以两种说法都不能说是错的。

图片备用地址

图片备用地址

意思:紧急。当URG=1时,紧急指针字段才有效。表明当前报文段中有紧急数据,应优先尽快传送。

紧急指针存放的是长度值,表示TCP的前多少字节是需要紧急优先处理的。

意思:确认。当ACK=1时,确认号字段才有效。

意思:推。一般用在交互式网络中。PUSH标志位所表达的是发送方通知接收方传输层应该尽快的将这个报文段交给应用层。

意思:重置。当RST=1时,表明连接中出现严重差错,必须释放连接,然后再重新建立连接。

意思:同步。当SYN=1 ACK=0时,表明这是一个建立连接的请求。若对方同意建立连接,则回复SYN=1 ACK=1。

请求方再发送SYN=0 ACK=1时表明开始传输数据。这也是三次握手的流程。

意思:完成。表明数据已经发送完毕,要求释放连接。

占4字节。首先,传输的每一个字节都会有一个编号(连续的字节编号也是连续的)。

在建立连接后,序号代表这一次传给对方的TCP数据部分的第一个字节的编号。

占4字节。在建立连接后,确认号代表期望对方下一次传过来的TCP数据部分的第一个字节的编号。

占2字节。这个字段有流量控制功能,用以告知对方下一次允许发送的数据大小(字节为单位)。

ARQ(Automatic Repeat-reQuest), 自动重传请求。

图片备用地址

无差错情况

A发送数据M1到B,B收到数据M1后向A发送确认信号M1;

A收到确认信号M1后,继续向B发送数据M2,B接收后向A发送确认信号M2。

超时重传

A发送数据M1到B,A在发送数据途中丢包或B发现数据M1有错误直接丢掉,导致B无法向A发送确认信号M1;

A在一定时间间隔后发现没有收到B发送的确认信号M1,A会继续向B发送数据M1;

B收到数据M1后向A发送确认信号M1,A收到确认信号M1后,继续向B发送M2数据。

通过确认与超时重传机制实现可靠传输,在发送完一个分组后,必须暂时保留已发送的分组的副本。

分组和确认分组都必须进行编号。超时计时器的重传时间应当比数据在分组传输的平均往返时间更长一些。

图片备用地址

确认丢失

A发送数据M1到B,B接收到数据M1后,向A发送确认信号M1;

B在向A发送确认信号M1中途丢包,此时A在一定时间间隔后发现没有收到B发送的确认信号M1,A会继续向B发送数据M1;

B收到数据M1后会丢弃重复的数据M1(之前已经收到数据M1,只是A不知道),继续向A发送确认信号M1;

A收到确认信号M1后,继续开始发送M2数据。

确认迟到

A发送数据M1到B,B接收到数据M1后,向A发送确认信号M1;

B在向A发送确认信号M1时,由于网络延迟等原因导致A在一定时间段内未收到确认信号;

A会继续向B发送数据M1,B收到数据M1后丢弃重复的数据M1,并向A发送确认信号M1;

A收到确认信号M1后,继续开始发送M2数据,M2数据刚发送出去,此时A刚好接收到B在第一次发送的确认信号M1,

但由于之前已经成功接收并处理了第二次的确认信号M1,所以A在收到确认信号后什么也不做。

出现差错或丢失的时候,发送方会将自己备份的副本再重传一次,直到收到接收的确认信息。

当接收方收到重复的数据时,会直接丢弃,但是会给发送方请确认自己已经收到了。

上面的停止等待协议每发送一组数据就必须等到接收方回复确认后,再发起第二组数据,如果出现超时重传的话,效率更低。

因此为了提高传输的效率,改进了等待传输协议。

连续ARQ协议和滑动窗口协议的机制是以接收方回复确认为单位,每次连续发送一个滑动窗口指定的数据组。

图片备用地址

A发送数据给B时,一次性发送M1~M4(A和B建立连接时,B告诉A自己的缓存池可以容纳多少字节数据,

A根据这个缓存池的大小构建一个同大小的发送窗口–也可以理解为发送缓存池),此时A开始等待确认,B收到全部数据后会向A发送确认信号M4(以最后一个编号为准);

A收到确认信号后,继续向B发送M5 M8(A把之前构建的窗口滑动并锁定到对应大小的数据段上,即M5 M8),以此往复直到数据传输完毕。

如果接收窗口最多能接收4个包(窗口大小),但发送方只发了2个包,接收方如何确定后面还有没有2个包?

答案:接收方会在等待一定时间后发现没有第3个包,就会返回收到2个包的确认信号给发送方。

滑动窗口是由发送方维护的类似指针的变量,在每收到一个接收方的确认消息后,

该指针向前移动并发送数据,到窗口指定大小的数据组时停下,等待接收方的确认。

图片备用地址

累积确认机制: 发送方不对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,

这样就表示:到这个分组为止的所有分组都已正确收到了。

优点:容易实现,即使确认丢失也不必重传。

缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。

Go-back-N(回退 N): 为了解决上述同一窗口中数据组不能完整确认的问题,连续ARQ协议采用了回退机制。

比如说:发送方发送了前5个分组,而中间的第3个分组丢失了。这时接收方只能对前两个分组发出确认。

发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。这就叫做 Go-back-N(回退 N),表示需要再退回来重传已发送过的N个分组。

结论:当通信线路质量不好时,连续ARQ协议会带来负面的影响。可能还不如传统的停止等待协议。

TCP连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口。

TCP的可靠传输机制用字节的序号进行控制。TCP所有的确认都是基于序号而不是基于报文段。

TCP两端的四个窗口经常处于动态变化之中。

TCP连接的往返时间RTT也不是固定不变的。需要使用特定的算法估算较为合理的重传时间。

滑动窗口是面向字节流的,为了方便记住每个分组的序号,

现在假设有一个1200字节的数据,分12组,每一组数据是100个字节,代表一个数据段的数据(每一个数据都有自己的TCP首部),每一组给一个编号(1~12)。

图片备用地址

图片备用地址

TCP通信时,如果发送序列中间某个数据包丢失,TCP会通过重传最后确认的分组后续的分组,这样原先已经正确传输的分组也可能重复发送,降低了TCP性能。

SACK(Selective Acknowledgment,选择确认)技术 ,使TCP只重新发送丢失的包,不用发送后续所有的分组,

而且提供相应机制使接收方能告诉发送方哪些数据丢失,哪些数据已经提前收到等。

在建立TCP连接时,就要在TCP首部的选项中加上“允许SACK”的选项,而双方必须都事先商定好。

原来首部中的“确认号字段”的用法仍然不变。只是以后在TCP报文段的首部中都增加了SACK选项,以便报告收到的不连续的字节块的边界。

图片备用地址

Kind:占1个字节,值为5代表这是SACK选项。

Length:占1个字节,表明SACK选项一共占用多少字节。

Left Edge:占4个字节,左边界。

Right Edge:占4个字节,右边界。

图片备用地址

上图的着色模块代表已接收数据,空白代表未接收数据。左右边界意思是会把未接收完毕的TCP数据包的已接收数据进行左右标记。

由于TCP的选项不能超过40个字节,去除Kind和Length占用的2个字节,还剩下38个字节给左右边界使用。

一组边界占用8个字节(左右边界各占4个字节),所以边界不能超过4组。也能够因此推断出SACK选项的最大占用字节数是4 * 8 + 2 = 34。

思考:超过选项边界的数据怎么办?

超过边界的数据需要重新传输,但这已经很大程度提高了传输效率。

重传机制是TCP中最重要和最复杂的问题之一。TCP每发送一个报文段,就对这个报文段设置一次计时器。

只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。那么这个重传时间到底应该设置多少呢?建议跳过,有兴趣的可以去查阅相关资料。

图片备用地址

为什么选择在传输层就将数据分割成多个段,而不是等到网络层再分片传递给数据链路层?

--网络层没有可靠传输协议,丢包无法只发送一个报文段,所以需要分割成多个段。

如果在传输层不分段,一旦出现数据丢失,整个传输层的数据都得重传

如果在传输层分段了,一旦出现数据丢失,只需要重传丢失的那些段即可

欢迎大家的意见和交流

email: li_mingxie@163.com

【网络协议笔记】第四层:传输层(Transport)以及UPD协议简介

TCP和UDP的区别:

图片备用地址

TCP是面向连接,也就是说TCP传输必须先要建立连接才能通信,建立连接就是我们熟知的“三次握手”。

TCP在数据传输完毕后需要断开连接,因为服务器会有端口不断的监听本次连接的状态,如果不断开就会一直占用资源,断开连接需要“四次挥手”。

UDP是无连接,通信时不需要建立连接,发送方直接发送数据,不关心接收方的接收状态。

TCP:可靠传输,不丢包。只要发现丢包就会重新发送,会保证数据是准确的。

UDP:不可靠传输,可能丢包。只管发送,不管接收方的是否接收到。

TCP:由于是建立连接的可靠传输,所以首部会比较复杂,占用空间也就会比较大。

UDP:几乎是无脑传输,所以只需要知道源和目标信息就可以了。相比TCP就会小很多。

UDP的特点使得其传输速率比TCP快。

TCP由于需要建立连接,所以会比较消耗资源。

UDP资源消耗就比较小。

浏览器、文件传输、邮件发送等都需要保证数据的完整性,所以使用TCP比较合适。

音视频通话、直播等对时效性要求较高,所以使用UDP更佳。

如果使用TCP就会发生数据混乱,比如3s前的音/影由于丢包原因在2min后才成功发送到接收方。

浏览器:HTTP、HTTPS

文件传输:FTP

邮件:SMTP

DNS

UDP(User Datagram Protocol):用户数据报协议。

UDP是无连接的,减少了建立和释放连接的开销。

UDP尽最大能力交付,不保证可靠交付,因此不需要维护一些复杂的参数,首部只有8个字节(TCP的首部至少20个字节)。

图片备用地址

图片备用地址

占16位,首部的长度 + 数据的长度。

检验和的计算内容:伪首部 + 首部 + 数据。

图片备用地址

伪首部是固定的12字节,

由源IP地址(4个字节) + 目的IP地址(4个字节) + 保留位(1个字节,默认是0) + 协议代表值(1个字节,UDP固定值17) + UDP长度(2个字节)组成。

仅在计算检验和时起作用,并不会传递给网络层,目的是为了增强检验功能。

UDP首部中端口占用2字节。可以推测出端口号的取值范围是:0 ~ 65535。

客户端的源端口是临时开启的随机端口。

防火墙可以设置开启/关闭某些端口来提供安全性。

图片备用地址

常用命令行:

查看被占用的端口: lsof -i 80 或 lsof -i tcp:80

telnet 主机 端口:查看是否可以访问主机的某个端口。

欢迎大家的意见和交流

email: li_mingxie@163.com

试分析TCP/IP协议的体系结构和特点

1、TCP/IP体系结构

TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输层服务,而IP则是提供网络层服务。TCP/IP包括以下协议:

IP: 网间协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储。同时为ICMP,TCP,UDP提供分组发送服务。用户进程通常不需要涉及这一层。

ARP: 地址解析协议(Address Resolution Protocol),此协议将网络地址映射到硬件地址。

RARP: 反向地址解析协议(Reverse Address Resolution Protocol),此协议将硬件地址映射到网络地址。

ICMP: 网间报文控制协议(Internet Control Message Protocol),此协议处理信关和主机的差错和传送控制。

TCP: 传送控制协议(Transmission Control Protocol),这是一种提供给用户进程的可靠的全双工字节流面向连接的协议。它要为用户进程提供虚电路服务,并为数据可靠传输建立检查。(注:大多数网络用户程序使用TCP)

UDP: 用户数据报协议(User Datagram Protocol),这是提供给用户进程的无连接协议,用于传送数据而不执行正确性检查。

FTP: 文件传输协议(File Transfer Protocol),允许用户以文件操作的方式(文件的增、删、改、查、传送等)与另一主机相互通信。

SMTP: 简单邮件传送协议(Simple Mail Transfer Protocol),SMTP协议为系统之间传送电子邮件。

TELNET:终端协议(Telnet Terminal Procotol),允许用户以虚终端方式访问远程主机。

HTTP: 超文本传输协议(Hypertext Transfer Procotol)。

TFTP: 简单文件传输协议(Trivial File Transfer Protocol)。

2、TCP/IP特点:

TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现。因此用户一般不涉及。编程时,编程界面有两种形式:

(1)是由内核心直接提供的系统调用;

(2)使用以库函数方式提供的各种函数。前者为核内实现,后者为核外实现。用户服务要通过核外的应用程序才能实现,所以要使用套接字(socket)来实现。

(责任编辑:IT教学网)

更多

推荐Flash教程文章