Summary

  • RFC 970 推导出:在无限存储、先进先出、有限包寿命、至少两台交换机这组条件下,持续过载会让所有数据包遭到丢弃。
  • 实验中,以太网通向一条 9600 波特线路,峰值有 916 个 IP 数据报排队;TCP 在达到理论稳态前便超时,因此实验并未直接观察到“全部丢弃”。

仓库可以无限大,出口却只有一条窄门。包进入得比线路发出得快,队列就会越来越长;等待还在消耗每个包的剩余寿命。John Nagle 在 1985 年 12 月发表的 RFC 970 中指出,在他的设定里,第一台交换机最终只能放行寿命剩一格的包;第二台再扣掉这一格,立刻丢弃。仓库没有爆满,交付却归零。

这是一个刻意剥离变量的思想实验,不是某次全网事故报告。当时谈拥塞,常把焦点放在缓冲区耗尽。Nagle 给交换机无限内存,保留先进先出队列、有限的包寿命、至少两台交换机以及持续超过出口能力的流量。由这些规则推演出全丢弃,说明容量可以排除一种故障,却无法替代出队次序和时效。

他给出的有限规模例子更有杀伤力:四条各 56 千比特每秒的链路,包寿命上限 15 秒,最大队列需求按其计算为 420 千字节。配足这些内存,在该例中可以避免因缓冲区不足而丢包;却不能保证包离开队列时仍然有用。RFC 当时按“剩余秒数”描述生存时间。不能把今天常见的跳数含义倒灌进这道 1985 年的算术题。

Nagle 还做了硬件实验:一侧为以太网,另一侧为 9600 波特线路,交换机有数兆字节内存。峰值 916 个 IP 数据报在里面等候。TCP 连接因往返时间过长先超时,队列还没长到理论上由寿命限定的稳态。观测结果是长队列和传输连接失效;“所有包都在下一跳死亡”是模型推导,不是那次试验直接拍到的画面。

问题随即从“装多少”转到“谁先走”。单条先进先出队列会让发送最多的主机占据更多位置,也可能拿到更多线路时间。每个发送者都有冲动多发,合起来却能把整条线路的有效交付拖垮。Nagle 建议按源主机分队列,轮流从每个非空队列送出一个尚未过期的包。继续往自己的队列里塞包,买不到额外轮次,只会让自己的包等得更久。他还提议队列超过约两个包时向该主机发 Source Quench,提醒收敛;这是历史方案,不是当前网络普遍部署情况的声明。

这套分配也有漏洞:伪造许多源地址,便能冒充许多主机领取多份轮次。单台交换机公平,不等于整张网公平。Nagle 把它放在高速局域网进入受限广域链路的入口或瓶颈处。 RFC 官方记录保留了它作为讨论备忘录的身份;正文明确说这些方案当时并非互联网标准。它留下的经营问题很直白:线路一次只能送一个包,决定下一个轮次的规则,比仓库大小更像权力。

Sources