计算机网络 什么是拥塞,何为网络的拥塞现象?

前言

拥塞控制是很难设计的,它与流量控制不同,网络拥塞是个 全面的,动态的 问题。

这里的话假如面试官问到拥塞控制,一般都会先问什么是TCP的拥塞控制吧?没道理上来就问你TCP的几种拥塞控制的方法呀,我认为如果你真的理解了什么是拥塞,什么情况下会造成网络的拥塞,那么几种拥塞控制的方法就自然而然地可以简单的说出来了。所以我希望可以先理解,何为拥塞?而网络的拥塞来源到底是什么?它与上一篇 TCP的流量控制 又有什么区别?

嗯,所以这里主要说一下,网络中拥塞控制涉及到的一般原理。

拥塞控制

一般原理

在计算机网络中的链路容量(带宽)、交换节点中的缓存和处理机等,都是网络的资源。

拥塞(congestion) :在某段时间,若对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变差,这种情况就叫拥塞。

很难理解没关系,细品一品,继续往下看会细讲。

可以把出现网络拥塞的条件写成下面的关系式:

∑对资源的需求 > 可用资源

若网络中有许多资源同时呈现 供应不足 ,网络的 性能 就要明显 变差 ,整个网络的 吞吐量将随输入负荷的增大而下降 。

那么这里有 路人 会讲,“这怕啥?只要任意增加一点资源,例如,把节点缓存的储存空间扩大,或者把链路更换为更高速率的链路,或者把节点处理机的运算速度提高,就可以解决网络拥塞的问题了”。其实不然,因为网络拥塞是一个非常复杂的问题。简单采取上面的做法,在许多情况下非但无法解决问题,而且还可能使得网络性能更差。

引起拥塞的因素

网络拥塞往往是由许多因素引起的。例如

当某个节点缓存的容量太小时,到达该节点的分组因无存储空间暂存而不得不被丢弃。

好的,现在我们看看上述路人的说法,设想我们将节点的缓存容量扩展到非常大。于是凡到达该节点的分组均可在节点的缓存队列中排队,不受任何限制。

由于输出链路的容量和处理机的速度并未提高,因此在这队列中的绝大多数分组的排队等待时间将会大大增加,结果上层软件只好把它们进行重传(早就超时了)。

由此可见,简单的扩大缓存的存储空间同样会造成网络资源的严重浪费,因此解决不了网络拥塞的问题。

处理机的速率太慢而引起的网络拥塞。

简单地处理机速率提高,可能会使上述情况缓解一些,但往往又会将瓶颈转移到其它地方。问题的实质往往是整个系统的各个部分不匹配。只有所有的部分都平衡了,网络拥塞的问题才会得到解决。

拥塞往往是 趋于恶化 的,当某一个环节开始拥塞,其它的环节就会慢慢的拥塞了起来。

如果一个路由器没有足够的缓存空间,它就会丢弃一些新到的分组。但当分组被丢弃时,发送这一分组的源点没有收到确认,认为超时了,它就会重传这一分组,甚至还有可能要重传多次。这样会引起更多的分组流入网络和被网络中的路由器丢弃。可见拥塞引起的重传并不会缓解网络的拥塞,反而会加剧网络的拥塞。

总结一下:

单纯的增加接收节点缓存无法解决拥塞。

增加处理机的速率,可以缓解拥塞的情况,但最终也无法解决问题。

普通的超时重传无法解决拥塞。

拥塞控制与流量控制(重)

没了解过 TCP的流量控制 的老铁可以先看看 TCP的流量控制。

拥塞控制和流量控制的关系十分密切,十分容易弄混淆,它们之间也存在着一些差别。

所谓的 拥塞控制 就是 防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载 。拥塞控制所要做的都有一个前提,就是 网络能够承受现有的网络负荷 。拥塞控制是一个 全局性的控制过程 。

拥塞控制涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。当 TCP 连接的端点只要迟迟不能收到对方的确认信息,就猜想在当前网络中的某处很可能发生了拥塞,但这是却无法知道拥塞到底发生在网络的何处,也无法确认拥塞的具体原因(是访问某个服务器的通信量过大?还是在某个地区出现了自然灾害)。

相反, 流量控制往往指点对点通信量的控制 ,是个 端到端 的问题(接收端控制发送端)。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

用一个简单的例子说明 流量控制 和 拥塞控制 的区别。

例1: 假设某个光纤网络的链路传输速率为 1000 GB/s。 有一个巨型计算机向一个 PC机以 1GB/s 的速率传输文件。显然,网络本身的带宽是足够大的,因而不存在产生拥塞的问题。但流量控制是必须的,因为巨型计算机必须经常停下来,以便 PC机来得及接收。

例2: 如果有另一个网络,其链路传输速率为 1MB/s,而有 1000 台大型计算机连接在这个网络上。假定其中 500 台计算机分别向其余 500 台计算机以 100kb/s 的速率发送文件。那么现在的问题已不是接收端的大型计算机是否来得及接收,而是整个网络的输入负载是否超过网络所能承受的。

拥塞控制和流量控制之所以会被弄混,是因为 某些拥塞控制算法是向发送端发送控制报文,并告诉发送端,网络出现麻烦,必须放慢发送速率 。这点又和流量控制很相似。

拥塞控制的理想,实际和无拥塞机制的情况

原谅我,这里的标题真的很难取,大概就这个意思把,下面给大家看看 拥塞控制各种状态 下 网络吞吐量大小 的图:

92825cb134c6

拥塞控制所引起的作用

横坐标为 提供的负载(offered load), 代表单位时间内输入的网络的分组数目。因此提供的负载又为 输入负载 和 网络负载。

纵坐标是 吞吐量(throughput), 代表单位时间内从网络输出的分组数目。

具有理想拥塞控制的网络 ,在吞吐量饱和之前,网络吞吐量应等于提供的负载,故曲线呈 45° 的斜线。但当提供的负载超过某一限度时,由于网络资源受限,吞吐量不再增长而保持为水平线,即吞吐量达到饱和。

这意味着提供的负载又一部分损失掉了(例如,输入到网络的某些分组被某个结点丢弃了)。尽管如此,网络的吞吐量仍然维持在其所能达到的最大值。

实际网络拥塞控制情况 ,从图中可看出,随着提供的负载增大,网络吞吐量的增长速率逐渐缩小。

这意味着,在网络吞吐量还未达到饱和时,就已经有一部分的输入分组被丢弃了。即网络的吞吐量明显的小于理想理想吞吐量时,网络就会进入 轻度拥塞 的状态。

无拥塞控制的情况,可以看出,当提供的负载达到某一数值时,网络的吞吐量反而随着提供的负载的增大而下降,这时 网络就进入了拥塞的状态。

提供的负载继续增大到某一数值时,网络的吞吐量就下降到零,网络已无法工作。这就是所谓的 死锁(deadlock)。

从原理上讲,寻找拥塞机制的方案无非就是寻找使不等式 ∑对资源的需求 > 可用资源 不再成立的条件。

或是增大网络的某些可用资源(如业务繁忙时增加一些链路,增大链路带宽,或使额外的信号量从另外的通路分流)。

或减少一些用户对某些资源的需求(如拒绝接受新的建立连接的请求,或要求用户减轻其负荷,这属于降低服务质量)。

但正如上面所讲过的,在采用某种措施时,还必须考虑到该措施所带来的其他影响。

目前随着网络朝着高速化的方向发展,很容易出现 缓存不够大而造成分组的丢失 。但分组的丢失是网络发生拥塞的征兆,而不是原因。甚至在许多情况下,正式拥塞机制本身成为引起网络性能恶化甚至发生死锁的原因,这点很重要。

由于计算机网络是一个很复杂的系统,因此可以从控制理论的角度来看拥塞控制这个问题。这样,从大的方面看,可以分为 开环控制 和 闭环控制 两种方法。

开环控制: 在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。但一旦整个系统运转起来,就不在中途进行改正了。

闭环控制: 是基于反馈环路的概念。属于闭环控制的有以下几种措施。

监测网络系统以便检测到拥塞在何时、何处发生。

把拥塞发生的信息传送到可采取行动的地方。

调整网络系统的运行以解决出现的问题。

有很多种方法来监测网络的拥塞。主要的一些指标是:由于缺少缓存空间而被丢弃的分组的百分数、平均队列长度、超时重传的分组数、平均分组时延、分组时延的标准差,等等。上述这些指标的上升标志着拥塞的增长。

一般发生拥塞时,要将拥塞发生的信息传送到产生分组的源站。当然,通知拥塞发生的分组同样会使网络更加拥塞。

另一种方法是在路由器转发的分组中保留一个比特或者字段,用该比特或者字段的值表示网络没有拥塞或产生了拥塞。也可以由一些主机或路由器周期性的发出探测分组,以询问拥塞是否发生。

此外,过于频繁的采取行动以缓和网络的拥塞,会使系统产生不稳定的振荡。但过于迟缓地采取行动又不具有任何实用价值。因此,要采取折中的方法。但选择正确的时间常数是很困难的。

总结

先不说别的,我个人感觉拥塞,其实就是接收方没办法处理掉发送方发送的那么多数据了,也就是不等式 ∑对资源的需求 > 可用资源 成立的情况。

理解一下,也就是 接收方系统可用资源 不够了。

可用资源不够会导致什么?

导致发送方的数据发送过来,接收方的路由器缓存逐渐增大直到满了。(啥情况?就是意味着发送方后续发送的数据,都塞在网络的链路中)。

然后呢?

然后发送方发现发送的数据没有响应,直至超时,重新发送数据,网络的链路就持续阻塞,越来越多,这就是 拥塞(congestion) 的现象。

所以才会有拥塞导致网络越来越差的现象,假如不处理拥塞,甚至会导致网络无法工作的现象。

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值