欢迎光临
我们一直在努力

《计算机网络》深入学:拥塞控制

引言

在计算机网络中,网络层的主要任务是将数据包从源主机路由到目的主机。然而,当子网中存在的全部数据包数量过多时,网络的性能就会下降。这种情况称为拥塞(Congestion)。

虽然现代互联网的拥塞控制主要由传输层(如 TCP 协议)主导,但网络层(路由器与 IP 协议)作为数据传输的“基础设施”,在检测拥塞、流量整形以及主动队列管理方面发挥着不可替代的作用。本章将深入探讨网络层拥塞控制的成因、基本原理、经典算法及其在现代网络中的演进。


1 拥塞的成因与代价

1.1 什么是拥塞?

从本质上讲,拥塞发生的需求超过了网络资源的供给。我们可以用一个简单的数学关系来描述: 若网络中某一资源的负载(Load)超过了该资源的容量(Capacity),即:

Load

>

Capacity

\\sum \\text{Load} > \\text{Capacity}

Load>Capacity 此时,该链路或路由器就会发生拥塞。这里的资源包括链路带宽、路由器的缓存队列(Buffer)以及处理器的处理能力。

1.2 拥塞与流量控制的区别

初学者常将**拥塞控制(Congestion Control)与流量控制(Flow Control)**混淆,两者虽然都涉及降低发送速率,但目标完全不同:

  • 拥塞控制:是一个全局性的过程,涉及网络中所有的主机、所有的路由器以及降低网络传输性能的所有因素。其目的是防止子网被过多的数据注入,导致整个网络瘫痪。
  • 流量控制:是点对点(端到端)的通信量控制。其目的是抑制发送端发送数据的速率,以便接收端来得及接收。
1.3 拥塞的代价

如果不对拥塞进行控制,网络性能将经历两个阶段的恶化:

  • 膝点(Knee):随着负载增加,吞吐量增长变缓,延迟开始显著增加。
  • 崖点(Cliff):负载继续增加超过某一极限,吞吐量急剧下降至零,延迟趋于无穷大,网络进入死锁状态。
  • 在这里插入图片描述


    2 拥塞控制的基本原理

    拥塞控制算法主要分为两大类:开环控制(Open Loop)和闭环控制(Closed Loop)。

    2.1 开环控制(预防为主)

    开环控制试图通过良好的设计来避免拥塞发生。它在系统启动前就决定何时接受新流量、何时丢弃分组,不依赖于当前网络的动态反馈。

    • 应用场景:由虚电路(Virtual Circuit)网络中的准入控制实现,或者是现代网络中的服务质量(QoS)预留。
    2.2 闭环控制(反馈调节)

    闭环控制基于反馈环路概念:

  • 监测:系统监视拥塞发生的位置和时间。
  • 反馈:将拥塞信息传递给能够采取行动的地方(通常是源主机)。
  • 调整:调整系统运行以消除拥塞。

  • 3 流量整形(Traffic Shaping)

    在网络层入口处,为了防止突发流量冲击核心网络,通常会使用流量整形技术。其核心思想是强制要求数据包按照某种规定的速率发送。

    3.1 漏桶算法(Leaky Bucket)

    想象一个底部有孔的桶。无论上方水龙头(主机)注水的速率多么不稳定(忽快忽慢),水都以恒定的速率从底部流出。

    • 如果桶满了,新注入的水(数据包)就会溢出(被丢弃)。
    • 特点:强制输出速率恒定,适合平滑流量,但无法处理突发数据。
    3.2 令牌桶算法(Token Bucket)

    为了允许一定程度的突发传输,令牌桶算法被提出。

    • 系统以恒定速率产生“令牌”放入桶中。
    • 发送一个数据包需要消耗一个令牌。
    • 如果桶中有积累的令牌,主机可以瞬间发送多个数据包(突发)。
    • 特点:既限制了平均速率,又允许一定量的突发传输。

    在这里插入图片描述


    4 网络层的拥塞控制机制

    在数据报子网(如 IP 网络)中,路由器无法提前预知路径,因此主要依赖闭环控制机制。

    4.1 抑制分组(Choke Packets)

    这是一种古老的机制。当路由器发现拥塞时,它会向发送该数据包的源主机发送一个特定的“抑制分组”(在 ICMP 协议中称为 Source Quench)。

    • 原理:源主机收到抑制分组后,按一定比例降低发送速率。
    • 现状:由于抑制分组本身也会消耗带宽,加剧拥塞,现代高速网络中已基本不再使用 ICMP Source Quench。
    4.2 负载脱落(Load Shedding)

    当路由器缓存溢出无法处理时,最直接的方法就是丢包。

    • 尾部丢弃(Tail Drop):最简单的策略,新来的包直接丢弃。
    • 问题:这会导致TCP 全局同步(Global Synchronization)。即多个 TCP 连接同时检测到丢包,同时减速,然后又同时加速,导致网络利用率震荡。
    4.3 主动队列管理(AQM)与随机早期检测(RED)

    为了解决尾部丢弃的问题,网络层引入了主动队列管理(Active Queue Management, AQM),其中最著名的是 RED(Random Early Detection)。

    • 基本原理: 路由器维持一个“平均队列长度”变量。

    • 若平均队列长度 < 最小阈值:正常排队,不丢包。
    • 若最小阈值 < 平均队列长度 < 最大阈值:以某种概率

      p

      p

      p 随机丢弃新到达的数据包。

    • 若平均队列长度 > 最大阈值:丢弃所有新包。
    • 作用:通过在缓冲区填满之前“随机”丢弃少数包,提前向发送端(TCP)发出拥塞信号。这使得不同的 TCP 连接在不同时间减速,避免了全局同步,稳定了网络负载。

    4.4 显式拥塞通知(ECN)

    丢包毕竟是一种浪费。ECN (Explicit Congestion Notification) 允许路由器在不丢包的情况下通知源主机网络发生拥塞。

    • 实现:利用 IP 首部中的两个位(ECN bits)。
    • 流程:当路由器检测到拥塞(例如根据 RED 算法判定),它不再丢包,而是将 IP 包头中的 ECN 位标记为“拥塞经历(CE)”。接收端收到后,在传输层向发送端回送信号,通知其降低速率。

    5 历史发展与现代应用

    5.1 历史演变
    • 1980年代前:ARPANET 时期,主要依赖简单的链路层重传和源抑制(Source Quench)。
    • 1986年互联网拥塞崩溃:网络负载过高导致整个互联网吞吐量降至 1/1000。这促使了 Van Jacobson 改进 TCP 拥塞控制。此时重点在传输层。
    • 1990年代:研究发现单纯依靠 TCP 不够,路由器也就是网络层必须参与。RED 算法被提出并标准化(RFC 2309)。
    • 2000年代至今:ECN 逐渐普及,成为 Windows 和 Linux 的默认开启选项。
    5.2 现代数据中心与 QoS

    在现代云计算和数据中心网络中,网络层的拥塞控制变得更加精细:

    • DCTCP (Data Center TCP):结合网络层的 ECN 标记,在数据中心内部实现极低的延迟和高吞吐量。
    • DiffServ (区分服务):网络层通过识别 IP 包头的 DSCP 字段,对不同优先级的业务(如视频会议 vs 文件下载)应用不同的丢包策略(加权 RED),保障关键业务不被拥塞影响。

    本章小结

    网络层的拥塞控制是保障互联网稳定运行的基石之一。虽然端到端的 TCP 协议承担了主要的速率调节任务,但网络层通过流量整形(令牌桶)、主动队列管理(RED)以及显式信号(ECN),为上层协议提供了准确的反馈和物理基础。

    理解拥塞控制,关键在于理解“延迟”与“吞吐量”的权衡,以及如何通过反馈机制防止网络进入“崖点”后的崩溃状态。

    赞(0)
    未经允许不得转载:171主机测评 » 《计算机网络》深入学:拥塞控制
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址