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
6. **TCP头部选项和填充**:可变长度,用于扩展TCP头部,以支持更多功能。 在实现TCP数据包的发送程序时,通常涉及以下步骤: 1. **构建原始套接字**:创建网络连接的基础,允许数据发送和接收。 2. **填充IP头部...
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头部,除了固定的20字节头部外,还可以包含可选字段,即TCP选项。这些选项提供了额外的功能,例如最大分段大小(MSS)、窗口扩展(Window Scale)、时间戳(Timestamps)和选择性确认(SACK)等。下面我们将...
例如,TCP头部选项可以用来定制连接特性,如时间戳有助于解决回荡问题;TCP的性能优化可能涵盖减少延迟、提高吞吐量的策略;而网络安全方面,可能会讨论如何防止中间人攻击、确保数据加密传输等。 总之,通过深入...
此外,IP选项和TCP头部选项有时会被用于执行中间人攻击或注入恶意数据。 Linux系统提供了Netfilter框架,这是一个强大的包过滤和防火墙机制,用于增强TCP/IP协议栈的安全性。Netfilter允许设置规则来过滤进出的...
TCP头的长度字段指示了TCP头部的字节数,不包括可选字段。标准TCP头是20字节,但可以扩展到60字节,以包含额外的选项。 **TCP头选项**: TCP头可以包含可选的扩展选项,如最大段大小(MSS)、选择性确认(SACK)、...
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...
然而,"mbuf opt, if present, will not be freed."表明如果mbuf中包含一些额外的选项(如TCP头部选项或IP选项),这些选项不会随着mbuf链的释放而被释放。这可能是为了保持这些信息可供后续处理或者是因为它们存储...
发送方发送数据时,将一个发送时间戳 1734581141 放在发送方时间戳TSval中接收方收到数据包以后,将收到的时间戳 1734581141 原封不动的返回
`sendmsg`和`recvmsg`函数可以传递控制信息,如TCP头部选项。 总结,Windows Socket为开发者提供了一套完整的网络编程工具,通过学习和理解其基本原理和API,可以构建功能强大的网络应用。无论是在客户端还是服务器...
8. **选项与标志**:TCP头部包含各种选项和标志位,如Nagle算法、TCP窗口缩放、时间戳等,这些可以优化协议性能或提供额外的功能。 通过TCP调试助手源码,你可以看到如何实现这些功能的具体代码,包括如何创建...
1. IP头部的所有16位字被加在一起,包括IP头部选项字段,如果头部长度不是4的倍数,可以填充0来完成16位字的对齐。 2. 如果总和超过65535,同样将高位截断,只保留低位。 3. IP头部校验和字段设置为这个求和结果的...
首先,需要创建一个原始套接字,并设置IP头部和TCP头部的选项。然后,填充数据字段,并计算校验和。最后,发送数据包并输出结果。 程序流程图 程序流程图如下所示: 1. 构造原始套接字 2. 初始化IP头部和TCP头部 ...
为了构造并发送包含TCP头部的IP数据包,还需要设置`IP_HDRINCL`选项,表明TCP头部将由程序自定义。注意,这需要管理员权限,或者可以通过修改注册表来允许非管理员用户执行此操作。 在填充TCP头部时,除了基本的源...
在TCP_CORK模式下,系统会尽可能地积累数据,直到达到一个较大的块或者超过特定的时间阈值,再一次性发送,这样可以减少频繁的TCP头部开销,提高网络效率。与Nagle算法不同的是,TCP_CORK通常在文件传输等需要高吞吐...
IP选项是TCP/IP头部的一部分,允许传递额外的信息,如记录路由(IP_OPTIONS=RR)、源路由选择(IP_OPTIONS=SO)、时间戳(IP_OPTIONS=TS)等。然而,出于安全和性能考虑,许多现代网络环境已经限制或禁用了这些选项...
8. **协议解析**:能够解析TCP头部信息,展示TCP选项,序列号,确认号等,帮助理解TCP协议细节。 在提供的文件列表中,我们可以推测一些可能的组件: - `TCPUDPDbg.exe`:这是可能的主程序文件,用于运行TCP/UDP...