21.10 ICMP 差错报告
本章探讨了 TCP 如何处理连接过程中收到的 ICMP 差错。常见的 ICMP 差错包括源站抑制、主机不可达和网络不可达。基于伯克利的 TCP 实现对这些错误的处理方式如下:
- 源站抑制: 收到源站抑制消息时,拥塞窗口 (cwnd) 会被设置为 1 个报文段大小,以启动慢启动算法。但是,慢启动阈值 (ssthresh) 保持不变。这意味着窗口将持续增长,直到达到最大值(受窗口大小和往返时间限制)或再次出现拥塞。
- 主机/网络不可达: 主机不可达和网络不可达错误通常会被忽略。这是因为这两种错误通常是暂时性的,忽略它们可以减少不必要的连接重置和延迟。
上述处理方式并非 TCP 规范的强制要求,不同操作系统和网络协议栈的实现可能有所差异。
21.9 基于路由的度量
较新的 TCP 实现会在路由表项中维护多个本章讨论过的指标。当 TCP 连接关闭时,如果已传输足够的数据(例如 16 个窗口的数据,足以进行 16 次 RTT 采样,使平滑 RTT 过滤器误差在 5% 以内),并且目标主机的路由表项不是默认表项,则以下信息会被保存到路由表项中,供将来使用:
- 平滑 RTT (Smoothed RTT)
- 平滑均值偏差 (Mean Deviation)
- 慢启动阈值 (Slow Start Threshold)
此外,管理员可以使用 route(8) 命令为特定路由设置以下指标:
- 上述三个指标
- 平均往返时间 (Mean RTT)
- 输出带宽时延积
- 输入带宽时延积
当建立新的连接时(无论主动还是被动),如果所用路由表项已经包含上述指标,则使用这些指标初始化相应的变量,从而更快地建立连接并提高性能。
暂无评论