- 从lwip的
tcp_enqueue_flags()
函数看,如果对端不支持SACK,本地也不会支持SACK 。
TCP Header的Window Size字段长度为16bit,因而正常情况下,Window Advertisement最大只能是65535 Bytes 。
Window Scale Option用于将TCP Header的Window Size字段从16bit扩展至最多30bit,格式如下所示:
kindLengthshift.cnt(3)(3)(范围0~14)
- shift.cnt的取值范围为0~14,表示将Window Advertisement的值扩展至“WindowSize × 2^shift.cnt , 这就是最终的窗口值 。
- 取值范围[0, 14]的原因:最大TCP序号限定为2^16 * 2^14= 2^30 < 2^31 。该限制用于防止字节序列号溢出 。
- WSopt只能出现在SYN Segment或SYN+ACK Segment中 , 因此shift.cnt在三次握手之后就会固定下来 。
- 另外,WSopt是双向独立的,因此连接的两个方向可以有不同的Shift.cnt 。但是,WSopt必须双向同时启用,也就是说,如果SYN中不带有WSopt,SYN+ACK中也不能出现WSopt;同样,如果SYN+ACK中不带有WSopt,那么发起SYN的一端就会当作自己也不曾发送过WSopt 。
- shift.cnt根据接收Buffer的大?。蒚CP自动选取 。接收Buffer由系统或程序设定 。
- Timestamps:时间戳 。
- PAWS:Protect Against Wrapped Sequence Numbers:防止序列号回绕 。
- 回绕:就是序列号溢出 , 重新从起点计算 。
启用Timestamp Option后,每个TCP Segment中都会带有Timestamp Option , 其中包含了两个32bit的Timestamp(TSval和TSecr) 。
具体格式如下所示:
Kind(8)Length(10)imestamp value(TSval)Timestamp Echo Reply(TSecr)
- TSval指明了发送端在发送TCP Segment时的Timestamp;接收端在对该TCP Segment做ACK时,将TSval值回显在TSecr字段中 。
- 注意:由于TCP连接是双向的,接收端在ACK中回显TSecr时,也会把自己当前的Timestamp放入TSval字段 。
- Timestamp是一个随时间单调递增的值,由于TCP接收端只需要在ACK中将TSval简单地回显,因此通信双方并不需要进行时间同步等操作 。
- 通过Timestamp Option,发送端再也不需要在内存中保存发送Segment的时间了,只需要将其放入TSval,然后接收端将其回显在ACK Segment即可 。当发送端收到ACK Segment后,取出TSscr,和当前时间做算术差,即可完成一次RTT的测量 。
- 若非通过Timestamp Option来计算RTT,大部分TCP实现只会以“每个Window采样一次”的频率来测算RTT 。因此通过Timestamp Option,可以实现更密集的RTT采样 , 使RTT的测算更精确 。
序列号回绕冲突只会出现在高速连接上 。
序列号回绕冲突是指序列号seq[0,2^32],即是最大4G 。如果在高速的连接中,某段数据A因为路由问题出现重传(此时网络是可能出现2个以上时间段A) , 收到一个时间段A后继续接收 。seq溢出,轮回第二次序列号seq[0,2^32],如果此时上一轮回重传的数据段A也到达了,那怎么判断当前序列号seq是本次轮回的还是上次轮回的?(当然,一次seq的轮回需要在MSL内,否则这个报文段在它的TTL到期时会被某个路由器丢弃)
Timestamp Option能解决这个冲突 。
参考以下例子来理解:
- 假设TCP Window Size为1GB(使用Window Scale) , 发送者每发送一个Window的数据Timestamp值加100,数据的发送情况如下所示:
在时间点5 , 序列号开始回绕 。
在时间点6,已经被认为“丢包”的Segment延迟到达了 。
那怎么判断这个序列号seq为[1G:2G]的报文是上一轮回的还是现在需要接收的?
推荐阅读
- vulnhub靶场之DOUBLETROUBLE: 1
- 亚索怎么玩呢(亚索大招怎么才能释放)
- 如何打好亚索(亚索的打法技巧)
- 无期迷途钻石获取途径有哪些
- 传奇九层妖塔祖玛阁怎么走(传奇祖玛阁攻略)
- 【深入浅出 Yarn 架构与实现】2-4 Yarn 基础库 - 状态机库
- 【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败
- DNF里浓缩的异界精髓怎么获得(浓缩的异界精髓作用)
- 小孩沉迷手机网络游戏怎么办(儿童玩手机游戏沉迷怎么办)
- 带你了解NLP的词嵌入