`

tcp头部选项

 
阅读更多
 
TCP Option Numbers
The Transmission Control Protocol (TCP) has provision for optional header fields identified by an option kind field.  Options 0 and 1 are exactly one octet which is their kind field.  All other options have their one octet kind field, followed by a one octet length field, followed by length-2 octets of option data.
Kind   Meaning                               Reference
----   -------------------------------   ---------
  0      End of Option List                 [RFC793]
  1      No-Operation                       [RFC793]
  2      Maximum Segment Size        [RFC793]
  3      WSOPT - Window Scale        [RFC1323]
  4      SACK Permitted                    [RFC2018]
  5      SACK                                     [RFC2018]
  6      Echo (obsoleted by option 8)      [RFC1072]
  7      Echo Reply (obsoleted by option 8)[RFC1072]
  8      TSOPT - Time Stamp Option         [RFC1323]
  9      Partial Order Connection Permitted[RFC1693]
10     Partial Order Service Profile     [RFC1693]
11      CC                                      [RFC1644]
12      CC.NEW                            [RFC1644]
13      CC.ECHO                           [RFC1644]
14      TCP Alternate Checksum Request    [RFC1146]
15       TCP Alternate Checksum Data       [RFC1146]
16       Skeeter                           [Knowles]
17       Bubba                             [Knowles]
18       Trailer Checksum Option    [Subbu & Monroe]
19       MD5 Signature Option              [RFC2385]
20       SCPS Capabilities                   [Scott]
21       Selective Negative Acknowledgements [Scott]
22       Record Boundaries                   [Scott]
23       Corruption experienced              [Scott]
24       SNAP                         [Sukonnik]
25       Unassigned (released 12/18/00)
26       TCP Compression Filter           [Bellovin]

头部选项结构

TCP头部的最后一个选项字段(options)是可变长的可选信息。这部分最多包含40字节,因为TCP头部最长是60字节(其中还包含20字节的固定部分)。典型的TCP头部选项结构如图3-4所示:

选项的第一个字段kind说明选项的类型。有的TCP选项没有后面两个字段,仅包含1字节的kind字段。第二个字段length(如果有的话)指定该选项的总长度,该长度包括kind字段和length字段占据的2字节。第三个字段info(如果有的话)是选项的具体信息。

 

常见选项

常见的TCP选项有7种,如图3-5所示: 

1.kind=0是选项表结束选项

2.kind=1是空操作(nop)选项,没有特殊含义,一般用于将TCP选项的总长度填充为4字节的整数倍。

3.kind=2是最大报文段长度选项。TCP连接初始化时,通信双方使用该选项来协商最大报文段长度(Max Segment Size,MSS)。TCP模块通常将MSS设置为(MTU-40)字节(减掉的这40字节包括20字节的TCP头部和20字节的IP头部)。这样携带TCP报文段的IP数据报的长度就不会超过MTU(假设TCP头部和IP头部都不包含选项字段,并且这也是一般情况),从而避免本机发生IP分片。对以太网而言,MSS值是1460(1500-40)字节。

4.kind=3是窗口扩大因子选项。TCP连接初始化时,通信双方使用该选项来协商接收通告窗口的扩大因子。在TCP的头部中,接收通告窗口大小是用16位表示的,故最大为65?535字节,但实际上TCP模块允许的接收通告窗口大小远不止这个数(为了提高TCP通信的吞吐量)。窗口扩大因子解决了这个问题。假设TCP头部中的接收通告窗口大小是N,窗口扩大因子(移位数)是M,那么TCP报文段的实际接收通告窗口大小是N乘2M,或者说N左移M位。注意,M的取值范围是0~14。我们可以通过修改/proc/sys/net/ipv4/tcp_window_scaling内核变量来启用或关闭窗口扩大因子选项。

和MSS选项一样,窗口扩大因子选项只能出现在同步报文段中,否则将被忽略。但同步报文段本身不执行窗口扩大操作,即同步报文段头部的接收通告窗口大小就是该TCP报文段的实际接收通告窗口大小。当连接建立好之后,每个数据传输方向的窗口扩大因子就固定不变了。关于窗口扩大因子选项的细节,可参考标准文档RFC 1323。

5.kind=4是选择性确认(Selective Acknowledgment,SACK)选项。TCP通信时,如果某个TCP报文段丢失,则TCP模块会重传最后被确认的TCP报文段后续的所有报文段,这样原先已经正确传输的TCP报文段也可能重复发送,从而降低了TCP性能。SACK技术正是为改善这种情况而产生的,它使TCP模块只重新发送丢失的TCP报文段,不用发送所有未被确认的TCP报文段。选择性确认选项用在连接初始化时,表示是否支持SACK技术。我们可以通过修改/proc/sys/net/ipv4/tcp_sack内核变量来启用或关闭选择性确认选项。

6.kind=5是SACK实际工作的选项。该选项的参数告诉发送方本端已经收到并缓存的不连续的数据块,从而让发送端可以据此检查并重发丢失的数据块。每个块边沿(edge of block)参数包含一个4字节的序号。其中块左边沿表示不连续块的第一个数据的序号,而块右边沿则表示不连续块的最后一个数据的序号的下一个序号。这样一对参数(块左边沿和块右边沿)之间的数据是没有收到的。因为一个块信息占用8字节,所以TCP头部选项中实际上最多可以包含4个这样的不连续数据块(考虑选项类型和长度占用的2字节)。

7.kind=8是时间戳选项。该选项提供了较为准确的计算通信双方之间的回路时间(Round Trip Time,RTT)的方法,从而为TCP流量控制提供重要信息。我们可以通过修改/proc/sys/net/ipv4/tcp_timestamps内核变量来启用或关闭时间戳选项。

 

分享到:
评论

相关推荐

    TCP头部选项功能详解.pdf

    TCP头部选项功能详解.pdf

    计算机网络课程设计报告-TCP数据包的发送与接收.doc

    6. **TCP头部选项和填充**:可变长度,用于扩展TCP头部,以支持更多功能。 在实现TCP数据包的发送程序时,通常涉及以下步骤: 1. **构建原始套接字**:创建网络连接的基础,允许数据发送和接收。 2. **填充IP头部...

    Linux高性能服务器编程清晰PDF+源码

    3.2.2 TCP头部选项 3.2.3 使用tcpdump观察TCP头部信息 3.3 TCP连接的建立和关闭 3.3.1 使用tcpdump观察TCP连接的建立和关闭 3.3.2 半关闭状态 3.3.3 连接超时 3.4 TCP状态转移 3.4.1 TCP状态转移总图...

    tcp选项介绍

    在TCP头部,除了固定的20字节头部外,还可以包含可选字段,即TCP选项。这些选项提供了额外的功能,例如最大分段大小(MSS)、窗口扩展(Window Scale)、时间戳(Timestamps)和选择性确认(SACK)等。下面我们将...

    高级tcp-IP高级编程

    例如,TCP头部选项可以用来定制连接特性,如时间戳有助于解决回荡问题;TCP的性能优化可能涵盖减少延迟、提高吞吐量的策略;而网络安全方面,可能会讨论如何防止中间人攻击、确保数据加密传输等。 总之,通过深入...

    基于Linux的TCP_IP协议栈安全性研究.pdf

    此外,IP选项和TCP头部选项有时会被用于执行中间人攻击或注入恶意数据。 Linux系统提供了Netfilter框架,这是一个强大的包过滤和防火墙机制,用于增强TCP/IP协议栈的安全性。Netfilter允许设置规则来过滤进出的...

    TCP头信息详解(英文版 pdf)

    TCP头的长度字段指示了TCP头部的字节数,不包括可选字段。标准TCP头是20字节,但可以扩展到60字节,以包含额外的选项。 **TCP头选项**: TCP头可以包含可选的扩展选项,如最大段大小(MSS)、选择性确认(SACK)、...

    Linux高性能服务器编程

    2.6.2 主机重定向实例 2.7 IPv6头部结构 2.7.1 IPv6固定头部结构 2.7.2 IPv6扩展头部 第3章 TCP协议详解 3.1 TCP服务的特点 3.2 TCP头部结构 3.2.1 TCP固定头部结构 3.2.2 TCP头部选项 3.2.3 使用tcpdump...

    nl_strncmp.rar_The Chain

    然而,"mbuf opt, if present, will not be freed."表明如果mbuf中包含一些额外的选项(如TCP头部选项或IP选项),这些选项不会随着mbuf链的释放而被释放。这可能是为了保持这些信息可供后续处理或者是因为它们存储...

    redbearder#Understanding-The-TCP-Protocol#12-时光机 —— TCP 头部时间戳选项1

    发送方发送数据时,将一个发送时间戳 1734581141 放在发送方时间戳TSval中接收方收到数据包以后,将收到的时间戳 1734581141 原封不动的返回

    Windows Socket 网络编程简介-网页形式

    `sendmsg`和`recvmsg`函数可以传递控制信息,如TCP头部选项。 总结,Windows Socket为开发者提供了一套完整的网络编程工具,通过学习和理解其基本原理和API,可以构建功能强大的网络应用。无论是在客户端还是服务器...

    TCP调试助手源码_tcp助手源码_TCP助手源代码_TCP助手源码_

    8. **选项与标志**:TCP头部包含各种选项和标志位,如Nagle算法、TCP窗口缩放、时间戳等,这些可以优化协议性能或提供额外的功能。 通过TCP调试助手源码,你可以看到如何实现这些功能的具体代码,包括如何创建...

    TCP/IP校验和计算小工具

    1. IP头部的所有16位字被加在一起,包括IP头部选项字段,如果头部长度不是4的倍数,可以填充0来完成16位字的对齐。 2. 如果总和超过65535,同样将高位截断,只保留低位。 3. IP头部校验和字段设置为这个求和结果的...

    精品资料(2021-2022年收藏)计算机网络课程设计发送TCP数据包.doc

    首先,需要创建一个原始套接字,并设置IP头部和TCP头部的选项。然后,填充数据字段,并计算校验和。最后,发送数据包并输出结果。 程序流程图 程序流程图如下所示: 1. 构造原始套接字 2. 初始化IP头部和TCP头部 ...

    发送TCP数据包设计报告

    为了构造并发送包含TCP头部的IP数据包,还需要设置`IP_HDRINCL`选项,表明TCP头部将由程序自定义。注意,这需要管理员权限,或者可以通过修改注册表来允许非管理员用户执行此操作。 在填充TCP头部时,除了基本的源...

    tcp/ip协议之 Nagle算法 TCP_NODELAY和TCP_CORK.zip

    在TCP_CORK模式下,系统会尽可能地积累数据,直到达到一个较大的块或者超过特定的时间阈值,再一次性发送,这样可以减少频繁的TCP头部开销,提高网络效率。与Nagle算法不同的是,TCP_CORK通常在文件传输等需要高吞吐...

    TCP保活定时器的使用

    IP选项是TCP/IP头部的一部分,允许传递额外的信息,如记录路由(IP_OPTIONS=RR)、源路由选择(IP_OPTIONS=SO)、时间戳(IP_OPTIONS=TS)等。然而,出于安全和性能考虑,许多现代网络环境已经限制或禁用了这些选项...

    TCP模拟调试工具

    8. **协议解析**:能够解析TCP头部信息,展示TCP选项,序列号,确认号等,帮助理解TCP协议细节。 在提供的文件列表中,我们可以推测一些可能的组件: - `TCPUDPDbg.exe`:这是可能的主程序文件,用于运行TCP/UDP...

Global site tag (gtag.js) - Google Analytics