摘要

  • RFC 7141 区分两个决定:网络设备不应按每个包的大小调整标记或丢弃概率;传输层则应按丢失或被标记包的字节数理解拥塞信号的强度。
  • 这种分工避免网络人为奖励小包,却不替传输层决定如何响应,不承诺相同比特率,也不能证明建议已普遍部署。

比特率相同,包数相差二十五倍

对路由器而言,一个包是一份处理工作;对链路而言,它装载了一定数量的字节。主动队列管理(AQM)要在队列塞满前发出拥塞信号,这种差异便变得重要。20 世纪 90 年代末,Random Early Detection(RED)成为讨论中心。RFC 2309 曾讨论按字节丢包,希望丢包情况更接近带宽占用。但如果小包因此更不容易被丢弃,包大小本身就会带来优势。

RFC 7141 于 2014 年以 Best Current Practice 发布,重新划定了问题。它比较两个 48 Mbit/s 流:一个发送 60 字节包,另一个发送 1,500 字节包。小包数量是大包的 25 倍。若每个包都以 0.1% 的概率被丢弃,小包流丢失的包更多,但在这个算例中两流损失的比特数相同。按字节丢弃会把小包的丢弃概率降低 25 倍,于是丢失包数趋同,小包流损失的比特却少得多。这是算例的结果,不是对真实网络的测量。

RFC 的处理分两层。网络中,单个包被丢弃或被 ECN 标记的概率不应取决于其大小。对 RED,RFC 不建议采用按字节丢弃:小包更少被标记,可能鼓励拆分数据,也可能让大量微小包形成洪泛。但它并未反对按字节测量队列。受比特率限制的链路应以字节测量队列;受包处理能力限制的资源则可能需要计数包。测量单位与标记概率偏向是不同的问题。

到了传输层,RFC 建议按丢失或被标记包的字节数理解信号强度——概念上,好像该包的每一个字节都带有一份拥塞指示。端点因此可以加权解读信号,而不必让共享网络设备替不同传输协议规定何谓公平。RFC 将此称为长期的解释目标;它没有要求所有传输协议改变算法,也明确没有主张 TCP 流应达到相同比特率。若需要比特率相同,应修改 TCP,而非网络设备。

ECN 标记包被拆分或合并时也要区分计量单位:RFC 建议变换前后的被标记字节总数保持一致,但允许既有协议兼容性成为例外。此后 RFC 7567 取代 RFC 2309 的通用 AQM 建议,并引用 RFC 7141 的区分。RFC 7141 的 RED 调查明确承认样本有限,并报告当时按字节丢弃的安装基础似乎很少,甚至可能没有。这些文件证明了一项工程建议和一段标准演进史,不能据此断言普遍采用、发生过具体攻击或当前设备采用何种配置。

来源:RFC 7141 · RFC 编辑器记录 · RFC 2309 · RFC 2914 · RFC 3168 · RFC 7567 · RFC 5681 · RFC 6679 · RFC 3550 · RFC 2474