网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

TCP头部中的选项字段

更新时间:2026年03月27日   作者:spoto   标签(Tag):

TCP用户通过发送数据包来相互通信。 该数据包中包含有关源地址、目标地址以及其他TCP相关变量的数据和其他信息。 这些详细信息存储在TCP头部中,而TCP头部正是数据包的最顶端部分。 当数据包通过不同的网络设备传输时,每次都会对头部信息进行处理,之后数据包才会被继续转发。 在数据包传输过程中,数据本身不会发生改变。不过,通过NAT设备的传输过程时,数据包中的某些详细信息可能会发生变化,比如IP地址和端口号。

TCP头部

在“Header”之后,还有一个“Options”字段。该对象的最大尺寸为 “选项”字段的大小为40字节。它的大小是可变的;会不断根据数据包的不同而发生变化。

期权领域的重要性:

在TCP协议最初被开发出来的时候,互联网、内存以及相关技术都还并不发达,而且成本也相当高。 在那个时代,使用基本的头部信息就足以实现两个计算机节点之间的有效通信了。 但是,随着互联网的普及,传统的TCP协议逐渐变得过时了。因此,需要对头部结构进行相应的修改,以适应互联网和内存方面的变化。 但是,一旦TCP技术在全球范围内变得如此流行,那么对TCP进行任何新的修改或将其应用于各种设备就几乎是不可能的了。 那么,TCP和互联网又是如何找到解决方案的呢?

他们把选项字段留到了主标题下方的位置。当时,选项字段的使用范围非常有限,但现在,每一个新的改进或优化措施都是通过这个选项字段来实现的。35项优化措施从今天开始,这些功能是通过TCP头部中的选项字段来实现的。由于“kind”变量的大小为1字节,因此它可以表示256个不同的数值。除了35种优化之外,其他的值都是被预留出来的。这个字段是可选的,因为它只在非常特殊的情况下才会被使用,而且并不是每个数据包都会用到这个字段。许多优化措施都是利用这个选项字段来实现的。SYN在网络拥塞的情况下,数据包以及其他数据都会使用它。

多种选择:

最大段大小(MSS):

Kind = 2
Length = 4
MSS

客户端会说明它能够从服务器接收到的数据包大小。当客户端与服务器建立连接时,这个选项字段会在SYN数据包中被使用。

“Kind=2”需要1个字节的空间;“length=4”也需要1个字节的空间;而“MSS”则需要2个字节的空间。因此,使用“MSS”选项时,总共占用的空间为4个字节。

最大段大小(MSS)

窗口缩放:

Kind = 3
Length = 3
Window Scaling: shift.cnt

“窗口大小”字段的长度为16位,可以表示的最大值为2^16 = 65,536。客户端可以通过TCP头部中的“窗口大小”字段来声明其缓冲区的最大容量,该容量可达64KB。利用窗口缩放选项,客户端还可以指定缩放因子,这样发送方就可以声明其缓冲区的大小达到2^30 = 1GB。shift.cnt的取值范围是0到14之间。因此,用于声明缓冲区大小的最大位数就是16 + 14 = 30位。

窗口缩放

选择性确认:

Kind=4
Length=2
SACK Permitted

Kind=5
Length= 8n
SACK

SACK机制会向发送方报告所有丢失的数据包的情况,这样发送方就可以尽快恢复这些丢失的数据。在SYN数据包中,发送方可以通过使用“允许SACK”选项来表明其支持SACK机制。

当接收端出现数据包传输出错的情况时,接收方会发送SACK消息来通知丢失的数据包。一个SACK消息占用8个字节,因此,SACK消息的大小必须是8字节的整数倍。

选择性确认

时间戳:

Kind=8
Length=10
Timestamps

“Kind”和“Length”这两个变量各占用1个字节。而时间戳则包含两个部分:发送时间和接收时间,每部分都占用4个字节。因此,这个选项字段总共占用了10个字节的空间。

时间戳的使用方式包括:RTTM(往返时间测量)、PAWS(针对序列号缠绕问题的防护机制)。

时间戳

TCP FastOpen:

Kind=34
Length=18
TCP Fast Open Cookie

客户端首先通过SYN数据包向服务器表明其支持TCP FastOpen功能。之后,服务器会在SYN+ACK数据包中发送加密后的信息。Kind和Length这两个字段总共占用2个字节。而整个cookie的大小则约为16字节。因此,这个选项总共会占用18个字节的空间。

在客户端向服务器发起连接请求时,TFO可以避免进行三次握手过程。使用TFO的客户端可以直接向服务器发送GET请求。

TCP FastOpen

NOP:

Kind=1

这个选项字段用于连接两个选项之间。它用来表示下一个选项字段的起始位置。发送方可能会使用这个选项,也可能不会使用。因此,接收方必须准备好处理带有或不带有这个NOP的选项。这个选项只占用1个字节的空间,而且没有其他选项那样具有明确的长度或重要信息。

NOP

选项列表结束:

Kind=0

这个选项位于选项列表的末尾。 该数值为0,但它被用在所有选项的末尾。 需要注意的是,这种用法只会在列出所有标题中的选项之后才使用一次而已。与NOP不同的是,它不会在每个选项之后都出现。 如果头部字段已经完全被填充,并且占用了所有可用的空间,那么这个选项就不是必需的。 如果头部仍然有一些空闲空间,那么这个选项就会被明确插入到列表中。不过,发送者会把这个选项放在选项列表的末尾。

选项列表结束

需要注意的是,MSS、窗口缩放以及TCP FastOpen这些功能仅会在SYN数据包中使用。除此之外,它们几乎不会在其他数据包中被使用。而本文中提到的其他选项则可以根据实际需求,被用于通信过程中发送的任何类型的数据包中。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

上一篇: AIMD算法

下一篇: IPv4头部中的选项字段

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料