第21章 TCP的超时与重传

21.1 引言

TCP提供可靠传输,超时与重传是关键机制。

21.2 超时与重传的简单例子

  • 重传间隔:1.5、3、6、12、24、48、64秒
  • 指数退避
  • 总时间约9分钟

21.3 往返时间测量

基本公式

Err = M - A A ← A + g × Err D ← D + h × (|Err| - D) RTO = A + 4 × D

text

  • g = 1/8(均值增益)
  • h = 1/4(偏差增益)
  • RTO:重传超时时间

Karn算法

  • 重传后不更新RTT估计器
  • 使用退避后的RTO

21.4 往返时间(RTT)的例子

  • 每个连接只测量一个RT T值
  • RT T以500ms为单位
  • 示例显示18次RT T测量

21.5 拥塞举例

  • 3个重传发生在10、14、21秒
  • 每个重传由3个重复ACK触发
  • 快速重传算法

21.6 拥塞避免算法

两个关键变量

  • cwnd:拥塞窗口
  • ssthresh:慢启动门限

算法

  1. 初始化:cwnd=1段,ssthresh=65535
  2. 拥塞发生时:ssthresh=cwnd/2,cwnd=1
  3. 慢启动:cwnd ≤ ssthresh,每ACK增加1段
  4. 拥塞避免:cwnd > ssthresh,每ACK增加1/cwnd

21.7 快速重传与快速恢复

快速重传

  • 连续3个重复ACK
  • 重传丢失报文段(不等超时)

快速恢复

  • 不执行慢启动
  • 设置 cwnd = ssthresh + 3×MSS
  • 每个重复ACK增加1段

21.8 拥塞举例(续)

  • cwnd和ssthresh的详细跟踪
  • 3个重传点显示快速恢复算法

21.9 按每条路由进行度量

  • 路由表保存RTT、偏差、ssthresh
  • 新连接使用保存的度量初始化

21.10 ICMP的差错

处理方式

  • 源站抑制:cwnd=1段,ssthresh不变
  • 主机/网络不可达:忽略(软错误)
  • 最终超时时返回ICMP差错

21.11 重新分组

  • 重传时可发送更大的报文段
  • 合并多个发送操作的数据

21.12 小结

TCP通过RTT测量、指数退避、慢启动和拥塞避免实现可靠传输。