传输层 TCP首部-数据偏移字段/标记位

- 数据偏移指的是TCP报文段的数据起始处距离TCP报文段的起始处有多远。
- 6个控制位介绍如下

| 控制位 | **作用**                                                     |
| ------ | :----------------------------------------------------------- |
| ACK    | 置1时表示确认号合法,为0的时候表示数据段不包含确认信息,确认号被忽略 |
| PSH    | 置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送 |
| RST    | 置1时重建连接。如果接收到RST位时候,通常发生了某些错         |
| SYN    | 置1时用来发起一个连接                                        |
| FIN    | 置1时表示发端完成发送任务。用来释放连接,表明发送方已经没有数据发送了 |
| URG    | 紧急指针,告诉接收TCP模块紧要指针域指着紧要数据              | 

TCP常规报文段的长度为20个字节,20个字节之后还要tcp选项,这是一个可选的数据。

数据偏移。占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。 “数据偏移”的单位为4字节。由于4位二进制数能够表示的最大十进制数是15,因此数据偏移的最大值是60字节

因为TCP首部的长度不是固定的,接收端收到之后必须得知道哪部分是首部,偏移指的是首部的偏移是多少。

最大值是1111,即15,首部固定的长度是20个字节,15 *4 =60个字节,也就是选项部分,也就是上面最后一行有40个字节。

可以看到首部长度是32个字节,同时还有些选项如下:比如最大报文段为1460 bytes,窗口大小,是否支持选择性确认,这些都是建立TCP连接的时候协商参数的时候使用的,

(5)保留。占6位,保留为今后使用,但目前应置为0。 

 下面都是标记位 代表0或者1,每一位代表一定的功能 

(6)紧急URG(URGent)。当URG=l时,表明紧急指针字段有效。

(7)确认ACK(ACKnowlegment)。仅当ACK=1时确认号字段才有效。(序号里面的字段才有意义,接收端就读取这里面的内容,如果ACK为0,那么接收端是不看这个序号这个字段)

(8)推送PSH(PuSH)。当两个应用进程进行交互式的通信时,有时一端的应用进程希望在键入一个命令后立即就能收到对方的响应。在这种情况下,TCP就可以使用推送(Push)操作。 (9)复位RST(ReSeT)。当RST=l时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。

(10)同步SYN(SYNchronization)。在连接建立时用来同步序号。 

(11)终止FIN(FINish意思是“完”“终”)。用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据己发送完毕,并要求释放传输连接。 

(12)窗口。占2字节。窗口值是[0,216-1]之间的整数。TCP协议有流量控制功能,窗口值用来告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(单位是字节)。 (13)检验和。占2字节。检验和 字段检验的范围包括首部和数据这两部分。

(14)紧急指针。占2字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。

(15)选项。长度可变,最长可达40字节。当没有使用选项时,TCP的首部长度是20字节。TCP最初只规定了一种选项,即最大报文段长度(Maximum Segment Size,MSS)。 

紧急指针标记位,还有push标记位经常成对使用,当URG=l时,表明紧急指针字段有效。

举个例子:ftp客户端在向服务端上传文件,客户端发送一个停止上传,这个停止上传的命令在数据段中插入,同时将PUSH位设置为1,告诉ftp收到之后赶紧处理,就不需要排队了,因为URG=l。

紧急指针标记位用来指明这个字段有效。

ftp正往上传东西,突然想结束传输,客户端就会发送ftp命令,删除要传的东西,这个时候tcp里面的push标记位就是1。

下面模拟传文件的时候中途取消,取消的时候就会立马的发送push。

可以看到push位,告诉对方快速的响应我。

如果要产生紧急指针的,那么必须有命令,客户端向服务端发一个命令,有紧急指针的,那么push一般也为1,

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/125404400