第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:慢启动门限
算法
- 初始化:cwnd=1段,ssthresh=65535
- 拥塞发生时:ssthresh=cwnd/2,cwnd=1
- 慢启动:cwnd ≤ ssthresh,每ACK增加1段
- 拥塞避免: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测量、指数退避、慢启动和拥塞避免实现可靠传输。