首页 理论教育 TCP报文格式-《计算机网络》

TCP报文格式-《计算机网络》

时间:2023-11-09 理论教育 版权反馈
【摘要】:关于TCP,首先来介绍其数据段的报文格式。前面介绍过,TCP的协议数据单元被称为报文段。TCP的首部分为固定部分和可选部分。TCP首部的序号,代表着该报文段所发送的数据中的第一个字节的编号。图5-8TCP报文段结构示意确认号。保留用于以后扩展TCP功能使用,目前设置为零。TCP规定,在连接建立后,所有的传输报文段必须把该比特设置为1。当该比特为1时,表明TCP连接中出现了严重的错误,此时需要释放本次连接。

TCP报文格式-《计算机网络》

关于TCP,首先来介绍其数据段的报文格式。

TCP虽然是面向字节流的,但字节必然要组成协议数据单元(PDU)才能进行传输。前面介绍过,TCP的协议数据单元被称为报文段。一个TCP报文段也同样分为首部和数据两个部分,其控制信息和管理信息都在首部。了解TCP首部各个字段的作用,是掌握TCP工作原理的基础。

TCP的首部分为固定部分和可选部分。固定部分一共20 Byte,这一部分的各个字段是一定要有的,这也意味着TCP首部长度最小是20 Byte。可变部分被用于传递更多的扩展控制信息,由用户依据数据传输时的需要灵活添加。协议规定,TCP首部的长度必须是4 Byte的整数倍,当可变部分增加的内容不足4 Byte的整数倍时,需要增加填充字段。TCP报文段结构示意如图5-8所示。

TCP首部各个字段意义如下:

(1)源端口和目的端口。这两个字段各占2 Byte,分别用于记录源端口号和目的端口号。和前面UDP首部的同一字段功能相同,源端口号和目的端口号是用来标识主机上参与TCP通信的进程的。联合IP地址,就可以在互联网上唯一确定参与本通信的一对进程。

(2)序号。占4 Byte,TCP作为可靠传输协议,需要为传输的数据进行编号。TCP是面向字节流的协议,是对字节进行编号的。就是说,每个字节都会获得一个编号。TCP首部的序号,代表着该报文段所发送的数据中的第一个字节的编号。TCP的字节编号在TCP连接建立时初始化,但初始编号不是从0或1开始的,它是在TCP连接建立时随机生成的。序号的表示范围一共232个,即4 GB。这对于一次TCP连接需要传输的数据量来说并不能算作特别的长。所以,编号可以循环使用,当字节编号到达最大数值232-1之后,会从0重新开始编号。后文将用“seq”代表该字段。

图5-8 TCP报文段结构示意

(3)确认号。此字段也占4 Byte,其取值也是一个字节的编号。当该字段有效的时候,就是要向对方表示:“编号小于本字段数值的那些字节都被我正确接收了。”从这里我们也可以明确,TCP采用的是积累确认。这对于按字节进行数据编号的TCP来说,可以大大降低确认数据的传输量。从另一个角度来看,确认号也代表了接下来预期收到的下一个报文段的第一个字节的序号,也就是对方发过来的报文段的“序号”字段应该取什么值。当然在实际传输中,这个段往往已经被发出,正在网络中传输呢。在后面的一些内容中用“ACK”代表该字段。

(4)数据偏移量。这个字段只占4 bit。它的含义是TCP报文段的数据起始位置距离报文段起始位置有多远。实际上这就是代表报文段首部的长度。前面说过,TCP的报文段首部必须是4 Byte的整数倍。这个偏移量的计量单位就是4 Byte的整数倍。它只有4 bit,取值范围是0~15,所表示的首部大小范围是0~60 Byte。当然,TCP首部的固定部分有20 Byte,所以本字段的最小取值是5,代表首部有5×4=20(Byte)。这也意味着,TCP首部的可选项最大可以有40 Byte。

(5)保留字段。本字段占6 bit。保留用于以后扩展TCP功能使用,目前设置为零。

以下的6个控制比特用来说明报文段的一些性质:

(1)紧急比特(URG)。该比特为1时,表明首部中的紧急指针字段有效。它告诉系统,此报文段中有紧急数据,此部分数据应尽快传送并交付给接收方进程。紧急数据都是要放在报文段数据的开始部分的。

(2)确认比特(ACK)。当该比特为1时,首部中的确认号字段才有效。TCP规定,在连接建立后,所有的传输报文段必须把该比特设置为1。一般只有在试图建立连接时,才会有该比特为0的报文段。

(3)推送比特(PSH)。当两个通信进程进行交互式通信时,有时希望输入的一个命令能立即收到对方的响应。此种情况可以使用推送操作。这时,发送方将该比特设置为1并立即创建一个报文段将数据发送出去。接收方接收到这样的报文段后,也会尽快将其交付给应用程序。此种操作相对很少使用。(www.xing528.com)

(4)复位比特(RST)。当该比特为1时,表明TCP连接中出现了严重的错误,此时需要释放本次连接。若需要继续通信,则要重新建立TCP连接。本比特也被称为重建比特或重置比特。

(5)同步比特(SYN)。本比特在建立TCP连接时使用。当一个TCP数据段的SYN=1而ACK=0时,就代表它是一个连接请求报文。若对方同意建立连接,则在响应报文中设置SYN=1,ACK=1。这部分内容将在5.5中进行详细讨论。

(6)终止比特(FIN)。当该比特为1时,表明要发送的数据已发送完毕,向对方发送释放TCP连接的请求。就是说该比特仅在释放TCP连接时使用,详细内容请参阅5.5节。

(7)窗口。本字段占2 Byte。可以这样来理解这个字段:一个进程告诉对方:“从本报文段中的确认号算起,我还允许你发送多少字节的数据量。”本字段的这个数值,一般被称作接收窗口(Receiver Window,RWND),用以表示接收方接收数据的能力。接收方所拥有的缓存空间的大小是有限的,通过接收窗口字段的数值,可以确保对方发送的数据不会超出本方接收缓存空间的大小。如此就保证了数据肯定不会因为缓存溢出而丢失(本字段用在TCP的流量控制中)。

另外还应该注意的是,窗口字段长度比较小。由于只有2 Byte,所以接收窗口最大值只能表示“我还能再接收65 535 Byte”。随着网络速度的不断增加,这个数值显然是不够大的。所以,一般会在首部的可选项中增加窗口大小设置的内容。

(1)校验和。本字段占2 Byte。与UDP首部的校验和类似,校验和用于校验整个数据段的全部内容,包括首部和数据这两部分。本字段在发送方生成,在接收方用于校验数据段是否在传输中发生过错误。

(2)紧急指针。本字段占2 Byte。紧急指针只在紧急比特URG=1时才被视为有意义的数据。它指出,本报文段中紧急数据的字节数。

(3)可选项。可选项的长度是可变的,最长可以达到40 Byte。

TCP最初只规定了一种选项,即最大报文段长度(Maximum Segment Size,MSS)。最大报文段长度规定的是一个TCP报文段中数据部分的最大长度。注意,这个长度只是数据部分的长度,是不包括首部的。设置MSS的大小,首先就是希望封装TCP数据段的IP数据报,在其传输时不需要再分片,但是,因为互联网的各网络异构的特点,最佳MSS值是很难确定的。这个数据值一般是在建立TCP连接时,通信双方彼此通知给对方的。如果这个项目没有填写,那么MSS将取默认值536 Byte。

随着网络技术的不断发展,可选项又陆续增加了几项:

(1)窗口扩大选项。前面介绍过,TCP首部中窗口字段长度只有2 Byte,接收窗口最大只能设置到64 KB,这对于早期的网络还是够用的。但是,一方面网络速度在不断提升,另一方面又有卫星线路这样传输时延比较长的网络,64 Byte的窗口大小是远远不够用的。窗口扩大选项就是为了应对这样的情况而提出的。窗口扩大选项占3 Byte,其中有一个为移位值S,其最大的允许值是14。另外两个字节存放窗口扩展数据。有了窗口扩大选项,接收窗口值从原来的16 bit增加到(16+S[1])bit,最大可以达到16+14=30(bit)。

(2)时间戳选项。这个选项占10 Byte,其中主要包括两个长度为4 Byte的时间信息:一个是时间戳值字段;另一个是时间戳回送回答字段。这个选项的数值最重要的工作就是为计算极为重要的超时重传等待时间提供采样数据。

(3)选择确认选项。TCP除了通常使用的积累确认外,还提供选择确认。下面就关于选择确认进行简单介绍。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈