当前位置:   article > 正文

TCP头部详解

tcp头部

1. TCP的定义

TCP提供一种面向连接的、可靠的字节流服务。

面向连接: 两个使用TCP的应用(通常是一个客户和一个服务)在彼此交换数据之前必须建立一个TCP连接

TCP提供可靠性的方式:

1)应用数据被分割成TCP认为最适合发送的数据块;

2)当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;

3)当TCP收到来自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;(Delayed-ACK)

4)TCP将保持它首部和数据的校验和;

5)既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能失序,因此TCP报文段的到达也可能失序。如果有必要,TCP将对收到的数据进行重新排序;

6)IP数据报可能会发生重复,TCP的接收端必须丢弃重复的数据;

7)TCP提供流量控制;TCP连接的每一方都有固定大小的缓冲控件,TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这将防止较快主机致使减慢主机的缓冲区溢出;

TCP的字节流:

两个应用程序通过TCP连接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符,这就是字节流服务。

2. TCP头部详解

1)源端口和目的端口:用于寻找发端和收端的应用程序。这两个值加上IP首部的源端IP和目的端IP唯一确定一个TCP连接;

2)序号(Seq):标识从TCP发端向TCP收端发送的数据字节流,它标识在这个报文段中的第一个数据字节的序号。如果将字节流看作在两个应用程序间的单向流动,

则TCP用序号对每个字节进行计数。序号是32bit的无符号数,序号到达2的32次方减一后又从0开始。SYN标志消耗一个序号;

3)确认序号(ACK):如果上次成功收到数据字节序号加一。只有ACK标志为1时确认序号才有效,ACK = Seq + 1

4)数据偏移:标识该TCP头部有多少个32bit(4字节),4比特最大表示15,TCP头部最长为60字节

5)窗口:TCP流量控制的手段,告诉对方,我的TCP接收端缓冲区还能容纳多少个字节,这样对方能控制发送数据的速度;

6)校验和:由发送端填充,接收端对TCP报文执行CRC算法,以检验TCP报文段是否损毁。不仅校验头部,还包括数据部分;

7)紧急指针:也称为紧急偏移。紧急指针是一个正的偏移量,和序号字段的值相加表示最后一个紧急指针的下一字节的序号。是相对于当前序号的偏移。紧急指针

是发送端向接收端发送紧急数据的方法;

8)六个标志位:

        a)URG:表示紧急指针是否有效;

        b)ACK:表示确认号是否有效,携带ACK标志的数据报文段为确认报文段

        c)PSH:提示接收端的应用程序应该立即从TCP接受缓冲区中读走数据,为接受后数据腾出空间;

        d)RST:表示要求对方重新建立连接,携带RST标志位的TCP报文段称为复位报文段

        e)SYN:  表示请求建立一个连接,携带SYN标志的TCP报文段称为同步报文段

        f)FIN:通知对方本端要关闭了,带FIN标志的TCP报文段称为结束报文段

9)TCP头部选项:头部选项是一个可变长的信息,这部分最多包含40个字节(前面20字节是固定的)

头部选项的实际运用:

        a)最大报文传输段(Maxinum Segment Size——MSS,后续进行详解

        b)窗口扩大选项(window scaling)

        c)选择确认选项(Selective Acknowledgements——SACK)

        d)NOP

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/749754
推荐阅读
相关标签
  

闽ICP备14008679号