【lwip】12-一文解决TCP原理( 九 )


通过Timestamp Option字段的时间戳去区别 。由于最近生效的时间戳都超500了 。所以比这个时间戳前的字段都视为过期字段,PAWS机制将其丢弃 。

  • 注意理解这句话 。窗口1GB,说明没有收到确认的数据后面最多能发送不超过1GB的数据 。看上表,时间点5都已经接收完毕了,说明时间点5之前的数据都已经全部接收完了 。后面重传只会出现在[5G:6G]中间 。如果这里收到的数据的时间戳比时间点5的时间戳500还要少,说明是过期重传的数据,我们不需要 。
  • 最近有效的时间戳:参考下图理解 。所以只要收到的数据的时间戳少于有效时间戳,就视为过期数据 。

【lwip】12-一文解决TCP原理

文章插图
12.10.5 UTOUTO:User Timeout (UTO) Option
UserTimeout值表明了TCP发送者等待ACK的时间,如果在指定时间内没收到ACK,就会认为对端挂掉 。
对于传统TCP(RFC 793)而言,UserTimeout是本地配置的 。
RFC 1122建议,当TCP重传3次后,应该通知应用程序,100s后 , 应该删除连接 。
通过UTO,可以让TCP将UserTimeout值“告知”给对端,UTO格式如下所示:
Kind(28)Length(4)G bit(Granularity bit)UserTimeout
  1. G bit = 1 , 表示UserTimeout的单位为分钟;G bit = 0 , 表示UserTimeout的单位为秒 。
  2. 通过UTO,TCP接收者可以根据“对端的UserTimeout”来调整自己的行为 。UserTimeout建议取值为:min(U_Limit,max(Adv_UTO,Remot_UTO,L_Limit)) 。
    1. U_Limit是本地UserTimeout的最高限制;
    2. Adv_UTO是通告出去的UserTimeout;
    3. Remot_UTO是对端的UserTimeout;
    4. L_Limit是本地UserTimeout的最低限制 。
  3. 要注意的是,UTO只是用于“告知”,TCP接收者却不一定要根据对端的UTO值来调整自己的行为 。
  4. 此外,NAT设备也可以根据UTO来调整连接保活计时器 。
  5. 若使用 = min(U_LIMIT, max(ADV_UTO, REMOTE_UTO, L_LIMIT)) 。
12.10.6 TCP-AOTCP-AO:Authentication Option (TCP-AO)and TCP MD5 Signature Option(TCP-MD5)
TCP-MD5和TCP-AO主要用于防止TCP欺骗攻击(TCP Spoofing Attacks) 。
TCP-MD5是旧标准(RFC 2385),例如BGP、LDP等协议就是以TCP-MD5作为认证手段的 。2010年后 , IETF建议使用TCP-AO去取代TCP-MD5,然而TCP-AO当前的普及率还很低 。
TCP-MD5和TCP-AO的格式如下:
【lwip】12-一文解决TCP原理

文章插图
TCP-MD5 Option的MD5 Hash根据以下信息计算:
  1. TCP伪头部 。
  2. TCP头部(包括Option , checksum设为0) 。
  3. TCP Segment Data 。
  4. 密钥 。
相对于TCP-MD5 , TCP-AO的主要改进之处在于:
  1. 支持多种MAC算法
  2. 支持带内的密钥变更操作
注意:TCP-AO与TCP-MD5一样,都不包含密钥分发机制 。因此在密钥分发方面都存在一定风险 。

推荐阅读