码迷,mamicode.com
首页 > 其他好文 > 详细

TCP首部

时间:2017-05-24 14:35:40      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:tcp连接   data-   套接字   content   water   大小   div   users   出错   

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.

TCP首部

标签:tcp连接   data-   套接字   content   water   大小   div   users   出错   

原文地址:http://www.cnblogs.com/mfmdaoyou/p/6898570.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!