网络层深度解析(三):排队论与分组调度
排队发生在网络资源需求超过其瞬时容量的任何地方。理解排队的位置、规模和调度方式,是分析网络性能的基石。
一、何处出现排队?
排队主要发生在路由器的输入端口 和输出端口。其位置对路由器性能有着截然不同的影响。
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. 分组调度如何关联网络中立性?
-
"中立"的调度器 :像FIFO 和RR这样的算法本质上是"中立"的,它们不区分流量类型。
-
"非中立"的调度器 :像PQ 和WFQ 这样的算法,其设计目的就是区分 流量,并为某些流量提供更好的服务。
-
良性使用:ISP可以用WFQ为语音通话提供低延迟保障,这被视为合理的网络管理。
-
争议使用 :ISP可以用PQ来降级或** throttling **来自竞争对手(如Netflix)的流量,同时优先传输自己的视频服务流量。这被视为违反了网络中立性原则。
-
3. 核心争议
-
支持网络中立性:认为互联网应是一个公平的竞争环境,ISP不应成为"看门人",利用调度技术来挑选赢家和输家。
-
反对网络中立性:认为ISP应该有权管理自己的网络,并通过提供差异化的服务质量来创造新的商业模式和创新。
总结
-
排队位置 :输出排队 是常态,而输入排队 及其引发的HOL阻塞是限制高性能路由器吞吐量的关键问题。
-
缓存大小 :需要在高吞吐量 和低延迟 之间权衡,传统
C × RTT法则可能不适用于拥有大量流的核心路由器。 -
调度算法 :从简单的FIFO 到公平的WFQ,算法决定了带宽分配和延迟特性,是实现流量管理和服务质量的基础。
-
网络中立性:分组调度技术本身是中立的,但其使用方式却处于网络中立性这一重大社会和政策辩论的核心。技术选择背后,是关于互联网未来形态的深刻抉择。