计算机网络自顶向下方法34——网络层 排队论 缓存大小调节 分组调度 网络中立性
网络层深度解析(三):排队论与分组调度
排队发生在网络资源需求超过其瞬时容量的任何地方。理解排队的位置、规模和调度方式,是分析网络性能的基石。
一、何处出现排队?
排队主要发生在路由器的输入端口和输出端口。其位置对路由器性能有着截然不同的影响。
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,算法决定了带宽分配和延迟特性,是实现流量管理和服务质量的基础。
网络中立性:分组调度技术本身是中立的,但其使用方式却处于网络中立性这一重大社会和政策辩论的核心。技术选择背后,是关于互联网未来形态的深刻抉择。
