代码改变世界

计算机网络自顶向下高效的方法34——网络层 排队论 缓存大小调节 分组调度 网络中立性

2025-12-06 09:02  tlnshuju  阅读(0)  评论(0)    收藏  举报

网络层深度解析(三):排队论与分组调度

排队发生在网络资源需求超过其瞬时容量的任何地方。理解排队的位置、规模和调度方式,是分析网络性能的基石。

一、何处出现排队?

排队主要发生在路由器的输入端口输出端口。其位置对路由器性能有着截然不同的影响。

1. 输出端口排队

  • 这是最常见、最首要的排队发生地。

  • 产生原因:所有输入端口可能同时有数据包要发往同一个输出端口。即使交换结构的交换速率远高于单个链路速率,当多个输入端口同时向一个输出端口发送数据时,该输出端口的发送速率仍会成为瓶颈。

  • 队列管理:每个输出端口都维护着一个输出队列(也称为缓存)。当数据包从交换结构到达输出端口,而该端口正在发送另一个数据包时,后到的数据包必须在队列中等待。

2. 输入端口排队

  • 产生原因:当交换结构的速率慢于所有输入端口速率之和时,即使目的地不同,数据包也可能在输入端口被阻塞。

  • HOL阻塞:这是输入排队的一个致命问题。

    • 场景:假设输入队列前端有两个包,第一个包要发往输出端口Y,第二个包要发往输出端口Z。要是输出端口Y正忙,即使输出端口Z空闲,第二个包也必须等待第一个包被服务,由于它被队首的包“堵”住了。

    • 影响:HOL阻塞会显著降低交换结构的利用率(在最坏情况下可降至约59%)。

  • 解决方案:采用虚拟输出队列。即为每个输入端口维护N个队列,每个队列对应一个输出端口。交换调度器可以查看所有输入端口的所有队列首部,从而绕过被阻塞的包,调度那些输出端口空闲的包。这几乎可以消除HOL阻塞。

二、多少缓存才“够用”?

这是一个在网络工程界争论已久的问题。

1. 传统经验法则

  • 带宽延迟积为每条链路提供就是:一个广为流传的经验法则C × RTT 的缓存。

    • C:是链路的容量(bps)。

    • RTT:是典型的往返时间(s)。

  • 原理:目的是为了填满一条端到端的TCP连接管道,使其能持续以满速率发送,而不至于因为缓存过小而限制其吞吐量。

  • 举例:一条10Gbps链路,RTT为250ms,则建议缓存大小为:10e9 bps × 0.25 s = 2.5e9 bits ≈300 MB

2. 现代观点与争议

  • 问题:在拥有大量并行流(如核心路由器)的链路上,C × RTT 规则会导致严重过大的缓存。这会造成巨大的“缓冲区膨胀”,导致所有流经历极高的排队延迟,即“缓冲块” 现象。

  • 新思路:对于拥有大量独立流(N)的链路,所需的缓存大小应约为C × RTT / √N

  • 结论:没有放之四海而皆准的答案。缓存大小的设置需要在吞吐量延迟之间进行权衡:

    • 大缓存:高吞吐量,但高延迟。

    • 小缓存:低延迟,但可能因频繁丢包而降低吞吐量。

三、分组调度算法

当队列中有多个数据包在等待时,调度算法决定下一个发送谁。这直接影响了公平性、延迟和保障。

1. 先进先出

  • 机制:最简单,按照数据包到达队列的顺序进行发送。

  • 特点

    • 不公平:一个贪婪的流能够占满整个队列,饿死其他流。

    • 无优先级:所有数据包被同等对待。

2. 优先权排队

  • 机制:将流量划分为多个优先级队列先发送就是。调度器老非空的高优先级队列中的包,仅当所有更高优先级队列为空时,才发送低优先级队列的包。

  • 特点

    • 绝对优先通过:能够保证对延迟敏感的流量(如VoIP)获得优先服务。

    • 可能饿死低优先级流量:如果高优先级流量持续不断,低优先级流量可能永远得不到服务。

3. 循环调度

  • 机制:维护多个队列。调度器依次轮询每个队列,如果队列非空,则发送该队列的一个包,随后立即移动到下一个队列。

  • 特点

    • 粗粒度公平:确保每个队列都能获得大致相等的服务机会。

    • 不考虑包长大包,它实际获得的带宽会比其他队列多。就是:一个队列如果都

4. 加权公平排队

  • 机制:这是最复杂也最理想的调度算法之一。它为每个队列 i 分配一个权重 w_i

  • 工作方式:WFQ近似地模拟了一种广义处理器共享模型。在每个时间点,它计算每个队列应获得的“服务量”,并据此进行调度。

  • 特点

    • 权重保障:每个队列 i 能保证获得的带宽份额为:w_i / (所有队列权重之和) × 链路容量

    • 考虑包长基于“比特”而非“包”进行的,更加公平。就是:调度

    • 隔离性:一个行为不佳的流(发送过多数据)不会影响其他遵守规则的流获得其应得的带宽份额。

四、排队、调度与网络中立性

1. 什么是网络中立性?
:就是这是一个监管和社会性议题,其核心原则互联网服务提供商(ISP)应对所有互联网流量一视同仁,不应基于内容、来源、目的地或应用进行歧视、限制或收费。

2. 分组调度如何关联网络中立性?

  • “中立”的调度器:像FIFORR这样的算法本质上是“中立”的,它们不区分流量类型。

  • “非中立”的调度器:像PQWFQ这样的算法,其设计目的就是区分流量,并为某些流量献出更好的服务

    • 良性使用:ISP允许用WFQ为语音通话提供低延迟保障,这被视为合理的网络管理。

    • 争议使用通过:ISP能够用PQ来降级或** throttling **来自竞争对手(如Netflix)的流量,同时优先传输自己的视频服务流量。这被视为违反了网络中立性原则。

3. 核心争议

  • 支持网络中立性:认为互联网应是一个公平的竞争环境,ISP不应成为“看门人”,利用调度技术来挑选赢家和输家。

  • 反对网络中立性:认为ISP应该有权管理自己的网络,并通过提供差异化的服务质量来创造新的商业模式和创新。

总结
  • 排队位置输出排队是常态,而输入排队及其引发的HOL阻塞是限制高性能路由器吞吐量的关键问题。

  • 缓存大小:需要在高吞吐量低延迟之间权衡,传统C × RTT法则可能不适用于拥有大量流的核心路由器。

  • 调度算法:从简单的FIFO到公平的WFQ,算法决定了带宽分配和延迟特性,是实现流量管理和服务质量的基础。

  • 网络中立性:分组调度工艺本身是中立的,但其使用方式却处于网络中立性这一重大社会和政策辩论的核心。技术选择背后,是关于互联网未来形态的深刻抉择。