TCP报文段的首部格式

一---导读

  我们知道TCP相对于UDP来说多了很多,那么多的这些功能是如何实现,靠什么来承载的呢?这就是TCP首部,接下来我们介绍TCP首部格式

二---图解TCP首部

序号:占32个比特,用来指出本TCP报文段数据部分的第一个字节的序号。


确认号:占32比特,取值范围[0-2的32次方减1].确认号增加到最后一个后,下一个确认号就又回到了0.指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。若确认号为n,表示n-1之前的数据已经收到了,你发序号为n的来吧。

确认标志位ACK:取值为1的时候确认号字段才有效,取值为0的时候确认号字段无效。
TCP规定:在连接建立后,所有传输完的字段ACK都必须设置为1.

数据偏移:占4个比特,并以4字节为单位。用来指出TCP报文段的数据载荷的部分距离TCP首部有多远。这个字段实际上就是TCP报文段首部的长度。首部固定的字节为20,因此数据偏移字段的最小值为(0101)2.
首部最大的字节为60字节,因此数据偏移字段的最大值为(1111)

保留字段占6比特,为以后使用,目前应置为0。

窗口字段占16比特,指出发送本报文段的一方的接收窗口。窗口值作为接收方让发送方设置其发送窗口的依据。这个是以接收方的能力来控制发送的发送能力,称为流量控制。注意发送窗口的大小应该从接收窗口和拥塞窗口中取小点的一个。

校验和字段占16比特:
用来检验传输过程中是否出现了误码。在计算校验和的时候,要在TCP报文段的前面加上12字节的伪首部。

同步标志位SYN
在TCP连接建立的时候用来同步序号。

终止标志位FIN:
用来释放TCP连接。FIN=1表明是TCP连接释放报文段

复位标志位RST:
用来复位TCP连接,当RST=1的时候,表明TCP连接出现异常,必须释放连接,然后再重新建立连接。RST=1还可以用来拒绝一个非法的报文段或拒绝打开一个TCP连接。

推送标志位PSH:
用来实现推送操作,当接收方的TCP收到标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付。

紧急标志位URG和紧急指针字段用来实现紧急操作。当URG为1的时候,紧急指针字段有效,当URG为0的时候,紧急指针字段无效。

紧急指针:
占16比特,以字节为单位,用来指明紧急数据的长度。
当发送有紧急数据的时候,可以插队到 发送缓存的最前面,然后封装成TCP报文段进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据。

接收方收到URG为1的报文段的时候,,直接将紧急数据上交给应用进程,而不必在接收缓存中排队。

选项占40个字节:
增加选项可以增加TCP的功能。目前有以下选项:
最大报文段长度MSS选项:TCP报文段数据在和部分的最大长度。
窗口扩大选项:为了扩大窗口(提高吞吐率)
时间戳选项
用来计算往返时间RTT,
用于处理序号超范围的情况,又称为防止序号绕回PAWS。
选择确认选项:用来实现选择确认功能。

填充:
由于选项的长度可变,因此使用填充来确保报文段首部能被4整除(因为数据偏移字段,是以4字节为单位的)

原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14266324.html