拥塞控制
因出现过量的分组而引起网络性能下降的现象称为拥塞。本节只给概念框架:怎样判断拥塞、拥塞控制与流量控制的区别、开环与闭环两类方法。具体的拥塞控制算法(慢开始、拥塞避免、快重传、快恢复)在第 5 章 TCP 部分展开(5.3.6 TCP 拥塞控制)。
判断拥塞看的是”吞吐量随负载怎样变”,而不是分组多少;分析一条链路会不会拥塞,看的是汇入它的流量能否超过它的带宽。 本页的错题属于后一种。
机制
怎样判断网络进入了拥塞
判断网络是否进入拥塞状态的方法是,观察网络的吞吐量与网络负载的关系:
- 若随着网络负载的增加,网络的吞吐量明显小于正常的吞吐量,则网络就可能已进入轻度拥塞状态;
- 若网络的吞吐量随着网络负载的增大而下降,则网络就可能已进入拥塞状态;
- 严重时吞吐量降为零,网络通信业务陷入停顿,即出现死锁。
拥塞控制主要解决的问题是如何获取网络中发生拥塞的信息,从而利用这些信息进行控制,以避免因拥塞而出现分组的丢失。
拥塞控制与流量控制
拥塞控制的作用是确保网络能够承载所达到的流量,这是一个全局性的过程,涉及网络中所有的主机、路由器及导致网络传输能力下降的所有因素。
流量控制往往是指在发送方和接收方之间的点对点通信量的控制,所要做的是抑制发送方发送数据的速率,以便使接收方来得及接收。
两者的外在表现可能相同——都是让发送方减速——但原因不同:流量控制是因为接收方来不及收,拥塞控制是因为网络承载不了。
单一地增加资源并不能解决拥塞。 拥塞是网络中多个资源之间不平衡造成的:例如只把某个路由器的缓存加大,分组在它的队列里排得更久,到达时可能已经超时,发送方重传,反而向网络注入了更多分组。
开环控制与闭环控制
| 方法 | 做法 | 性质 |
|---|---|---|
| 开环控制 | 在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞;手段包括确定何时可接收新流量、何时可丢弃分组及丢弃哪些分组、确定何种调度策略等,做决定时不考虑当前网络的状态 | 静态的预防方法,系统启动并运行后中途不再修改 |
| 闭环控制 | 事先不考虑有关发生拥塞的各种因素,采用监测网络系统去监视,及时检测哪里发生了拥塞,然后将拥塞信息传到合适的地方,以便调整网络系统的运行 | 基于反馈环路,是一种动态的方法 |
TCP 的拥塞控制属于闭环控制:发送方把超时和重复确认当作拥塞的反馈信号,据此调整拥塞窗口。
边界
吞吐量随负载增加而上升,说明网络没有拥塞。 节点收发的分组越来越多或越来越少,也不能说明拥塞,因为分组数量与吞吐量不成正比;判断依据只能是”负载增加、吞吐量反而下降”(王道 4.1.6 第 2 题)。
分析某条链路会不会拥塞,比较的是”最多能涌进来多少”与”它能送出去多少”。 路由器处理速度足够快时,瓶颈只在链路:一条链路的所有上游输入加起来,若可能超过这条链路的带宽,分组就会在它前面的输出队列里积压。全双工链路两个方向各自独立计算。
错题复盘:一条链路会不会拥塞,看所有可能汇入它的流量之和
王道 4.7.4 第 18 题:如上图所示,用 7 个相同的路由器与 8 台主机相连。链路带宽分为三种,最上层的最快,最下层的最慢,都是全双工方式,图中标注了各层链路带宽的数值(4Mb/s、2Mb/s、1Mb/s)。所有路由器的处理速度都很快,远超链路带宽。下列关于网络拥塞分析的说法中,正确的是(A. R1-R2 链路和 R2-R4 链路都不可能发生拥塞 B. R1-R2 链路可能发生拥塞,R2-R4 链路不可能发生拥塞 C. R1-R2 链路不可能发生拥塞,R2-R4 链路可能发生拥塞 D. R1-R2 链路和 R2-R4 链路都可能发生拥塞)。答案 C。
R1-R2 链路:从 R2 到 R1 方向的数据只能来自 H1~H4,每台主机最快 1Mb/s,合计不超过 4Mb/s;反方向的数据只能来自 H5~H8,同样不超过 4Mb/s。R1-R2 链路上的数据率在任何时候都不可能超过 4Mb/s,因此不可能发生拥塞。
R2-R4 链路:考虑这种情况——H5 和 H6 同时以 1Mb/s 的速率向 H1 发送数据,H7 和 H8 同时以 1Mb/s 的速率向 H2 发送数据。此时 R1 右边的所有链路和 R1-R2 链路都在带宽之内正常工作,但这些数据全部要经 R2 转发,再通过带宽为 2Mb/s 的 R2-R4 链路分别发送给 H1 和 H2,显然不可能。于是在 R2 的缓存中,进来的数据比出去的多,数据堆积得越来越多,发送不出去,产生拥塞。
判断的依据不是”哪条链路慢”,而是上游流量能否超过它:R1-R2 的上游被 4 条 1Mb/s 的主机链路限死;R2-R4 的上游却可以是 R4 以外的全部 6 台主机。
拥塞控制是全局性的,流量控制是点对点的。 链路层的滑动窗口(3.4.1)只做流量控制;本章的网络层在教材中负责讨论拥塞,第 5 章的 TCP 两者都做。
口径差异:互联网的拥塞控制到底由哪一层做
教材口径:拥塞控制列在网络层的功能中(4.1.5)。
工程口径:IP 本身几乎不做拥塞控制。路由器在队列满时丢弃分组,或者在支持显式拥塞通知(ECN)时给分组打上标记;真正调整发送速率的是端系统里的 TCP。这符合 4.1.1 的设计思想——网络层尽最大努力交付,复杂的控制交给端系统。
考试问”哪一层的功能”时按考纲答网络层;问”TCP 的拥塞控制”时按第 5 章的算法作答。
对照速查
| 说法 | 对错 |
|---|---|
| 随着负载增加吞吐量反而下降,网络发生了拥塞 | ✅ |
| 网络节点接收和发出的分组越来越多,说明发生了拥塞 | ❌ |
| 拥塞控制是全局性的过程 | ✅ |
| 流量控制是为了防止网络过载 | ❌(防止接收方来不及收) |
| 增加路由器的缓存就能解决拥塞 | ❌ |
| 开环控制在做决定时要考虑当前网络状态 | ❌ |
| 闭环控制基于反馈环路,是动态方法 | ✅ |
考点
- 拥塞的判断:负载增加、吞吐量下降
- 拥塞控制(全局)vs 流量控制(点对点、接收方)
- 开环(静态预防、不看当前状态)vs 闭环(反馈、动态)
- 链路是否可能拥塞:上游输入总和 vs 链路带宽
链接
- 🏠 返回总览:计算机网络第 4 章:网络层总览
- ⬅️ 上一节:4.1.4 SDN 的基本概念
- ➡️ 下一节:4.2.1 IPv4 分组
- 🔗 3.4.1 流量控制与滑动窗口机制
- 🔗 5.3.6 TCP 拥塞控制:TCP 拥塞控制
- 📖 名词库:第 4 章名词库
