1: MSS (Maximum Segment Size)
最常见的可选字段是最长报文大小,又称为 MSS (Maximum Segment Size)。每个连接方
通常都在通信的第一个报文段(为建立连接而设置 S Y N标志的那个段)中指明这个选项。它
指明本端所能接收的最大长度的报文段. M S S通常的默认值为 5 3 6
将它看作可“协商”选项。它并不是任何条件下都可协商。当建立一个连
接时,每一方都有用于通告它期望接收的 M S S选项(M S S选项只能出现在 S Y N报文段中) 。如
果一方不接收来自另一方的 M S S值,则M S S就定为默认值 5 3 6字节(这个默认值允许 2 0字节的
I P首部和2 0字节的T C P首部以适合 5 7 6字节I P数据报
2: 重传定时器使用于当希望收到另一端的确认
3: 坚持( p e r s i s t )定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口
4: 保活( k e e p a l i v e )定时器可检测到一个空闲连接的另一端何时崩溃或重启
5: 重传超时时间RTO (Retransmission Ti m e O u t)
6: SACK (Selective Acknowledgment), 选择性确认 RFC2018
7: RTT(Round-Trip Times) T C P超时与重传中最重要的部分就是对一个给定连接的往返时间( RTT)的测量。由于路
由器和网络流量均会变化,因此我们认为这个时间可能经常会发生变化, T C P应该跟踪这些变化并相应地改变其超时时间
TCP拥塞状态的变迁
8: CWR(Congestion Window Reduced ) 拥塞窗口减小,且没有明显的重传
9: Open 初始状态,也是正常的状态
10: Disorder 拥塞窗口恒定,网络中数据包守恒
11: ECN (Explicit Congestion Notification) 直接拥塞上报
12: TSO(TCP Segment Offload)
是一种利用网卡的少量处理能力,降低CPU发送数据包负载的技术,需要网卡硬件及驱动的支持。
编辑在不支持TSO的网卡上,TCP层向IP层发送数据会考虑mss,使得TCP向下发送的数据可以包含在一个IP分组中而不会造成分片,
mss是在TCP初始建立连接时由网卡MTU确定并和对端协商的,所以在一个MTU=1500的网卡上,TCP向下发送的数据不会大于min(mss_local, mss_remote)-ip头-tcp头。
而当网卡支持TSO时,TCP层会逐渐增大mss(总是整数倍数增加),当TCP层向下发送大块数据时,仅仅计算TCP头,网卡接到到了IP层传下的大数 据包后自己重新分成若干个IP数据包,
添加IP头,复制TCP头并且重新计算校验和等相关数据,这样就把一部分CPU相关的处理工作转移到由网卡来处理。 内核TCP/IP协议栈也必须考虑下发包数和实际包数不一致的情况,
例如处理拥塞控制算法时必须做一些特殊的处理等等。
14: GSO是TSO的增强 http://lwn.net/Articles/188489/ ,GSO不只针对TCP,而是对任意协议,尽可能把segmentation推后到交给网卡那一刻,
此时会判断下网卡是否支持SG和GSO,如果不支持则在协议栈里做segmentation;如果支持则把payload直接发给网卡
15: GSO是TSO的增强 http://lwn.net/Articles/188489/ ,GSO不只针对TCP,而是对任意协议,尽可能把segmentation推后到交给网卡那一刻,
此时会判断下网卡是否支持SG和GSO,如果不支持则在协议栈里做segmentation;如果支持则把payload直接发给网卡
16: FACK (Forward Acknowledgment) 启用转发应答(Forward Acknowledgment),这可以进行有选择应答(SACK)从而减少拥塞情况的发生;这个选项也应该启用。
17: RTO (Retransmission TimeOut) 即重传超时时间