TCP首部

TCP的数据被封装在一个IP数据报中:


TCP首部例如以下图所看到的:


以下以此解说这些字段的含义。

16位源port号、16位目的port号。用于寻找发送端和接收端应用进程。一个IP地址(IP首部)加一个port号(TCP首部)称为一个套接字。一对套接字可唯一确定一个TCP连接。

32位序号。

用来标识数据字节流中的字节,它的值表示该报文段中第一个数据字节的序号。当建立TCP连接时,发送主机选择一个初始序号ISN作为该字段的基准值。如果该值为x。那么发送SYN标识时的序号字段就为x。

当建立连接后,发送数据的第一个字节的序号为x+1。

也就是说发送SYN标识消耗了一个序号。


32位确认序号。表示接收端希望下一次接受到的序号。该字段必须在ACK标志为1时(连接建立后。ACK标识总是为1)才有效。


TCP能够表述为一个没有选择确认或否认的滑动窗体协议,什么意思呢,以下逐一解释:
  • 没有选择确认:当接收端成功收到序号为1-1024字节的数据后。发送一个确认序号为1025的ACK,期待下一次收到1025開始的数据。但如果下一次实际收到的却是2049-3072,那么接收端不正确这个报文段进行确认,而是继续发送确认序号为1025的ACK。也就是说,接收端必须按序确认,无法跳跃式的确认。
  • 无法对一个报文段否认:还是上述样例,如果接收端收到了1025-2048字节的报文段,但校验出错,那么接收端仅仅能继续发送确认序号为1025的ACK。而不能告诉发送方其他出错信息。

4位首部长度。

表示首部中32bit字的数目,假设首部为20字节(选项字段为空的情况下),该字段的值就为5。看了这么多的协议。能够得出规律:凡是长度可变的数据包中一般都包括长度字段。


6位标志比特:
  • URG:紧急指针有效
  • ACK:确认序号有效
  • PSH:接收方应该尽快将这个报文段交给应用层
  • RST:重建连接
  • SYN:用来发起一个连接
  • FIN:完毕发送任务
16位窗体大小。它的值表示用于TCP流量控制的窗体大小。

以后会具体说明。


16位检验和。强制性字段。

16位紧急指针。仅仅有URG标志置1时才有效,暂不讨论。

选项字段。最常见的选项字段是最长报文大小MSS,通常在建立连接时的SYN中设置这个选项,指明本端所能接收的最大长度的报文段。

最后的TCP数据部分是可选的。比如,在建立和断开连接的时候两方仅仅传送了TCP首部。

參考:
《TCP/IP具体解释》 P170-P173.
posted @ 2017-05-24 13:48  mfmdaoyou  阅读(293)  评论(0编辑  收藏  举报