运输层:拥塞控制原理
禁止码迷,布布扣,豌豆代理,码农教程,爱码网等第三方爬虫网站爬取!
拥塞的引发与影响
在实践中,丢包一般是当网络变得拥塞时,由路由器缓存溢出引起的。分组重传可以作为网络拥塞的征兆,但是却无法分析导致网络拥塞的根源,在实际网络中有太多的源想尽可能快地传输数据。下面分析 3 个情景:
两个发送方和一台无穷大缓存的路由器
首先是最简单的拥塞情况,有两条这样的连接,且只经过单跳路由(无限缓存),设主机在一段容量为 R 的共享室输出链路上传输。
当主机的发送速率在 0 ~ R/2 之间时,接收方的吞吐量等于发送方的发送速率,即发送方发送的所有数据经有限的时延后到达接收方。当发送速率超过 R/2 时,它的吞吐量只能到达 R/2,这是两条链接之间的共享链路容量的限制造成的。
虽然 R/2 的吞吐量表明分组交付过程中的链路被充分利用了,但是当发送速率越接近 R/2 时,平均时延就会不断增大。当发送速率超过 R/2 时,路由器中的平均排队分组数就会无限增长,源和目的之间的平均时延也会变得无穷大。
由此可见网络拥塞会导致:当分组的到达速率接近链路容量时,分组将经历巨大的排队时延。
两个发送方和一台具有有限缓存的路由器
现在假设上述情景中路由器缓存的容量有限,且这时当报文段被丢包时需要重传。此时传输层向网络中发送的报文段,可能是应用层交付的数据,也有可能是重传的数据,此时的发送速率也被称之为供给载荷。
当发送方确定一个分组已经丢失时会发生重传,因此当网络拥塞时发送方必须执行重传以补偿因缓存溢出而丢弃的分组。由于此时考虑定时器超时重传,因此发送方也有可能会提前发生超时并重传在队列中已被推迟但还未丢失的分组。发送方将收到因为重传带来的冗余分组,因此路由器重传冗余分组时就是在做无用功。假定每个分组都因为拥塞重传一次,因此当供给载荷接近 R/2 时,吞吐量将接近于 R/4。
由此可见拥塞控制会导致:当发送方在遇到大时延时会进行不必要的重传,这会引起路由器利用其链路带宽来转发不必要分组副本。
4 个发送方和具有具有有限缓存的多台路由器及多跳路径
现在考虑有 4 台主机发送分组,每台都通过交叠的两条路径传输,假设每台主机都采用超时/重传机制。
不同的传输经同一路由器时会引发竞争,每当有一个分组在第二跳路由器上被丢弃时,第一跳路由器所做的工作就是无用功。当主机以较快速度速率发送报文段时,不仅会引发大量的重传,更会导致链路的资源被严重浪费。
由此可见拥塞控制会导致:当一个分组沿一条路径被丢弃是,每个上游路由器用于转发该分组到丢弃该分组而是用的传输容量最终都被浪费掉了。
网络拥塞
在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就会受到影响,这种现象称为拥塞 (congestion)。若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。网络拥塞的条件可以由下列关系式体现:
网络拥塞是一个非常复杂的问题,从上文可见,简单地增加一些资源在许多情况下不但不能解决拥塞问题,而且还可能使网络的性能更坏。实践证明,拥塞控制是很难设计的,因为它是一个动态的(而不是静态的)问题。当前网络正朝着高速化的方向发展,这很容易出现缓存不够大而造成分组的丢失。但分组的丢失是网络发生拥塞的征兆而不是原因,在许多情况下,甚至正是拥塞控制本身成为引起网络性能恶化甚至发生死锁的原因。
理论上拥塞控制有两种思路,分别是开环控制和闭环控制。开环控制方法就是在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。闭环控制方法是基于反馈环路的概念,属于闭环控制的有以下几种措施:
- 监测网络系统以便检测到拥塞在何时、何处发生。
- 将拥塞发生的信息传送到可采取行动的地方。
- 调整网络系统的运行以解决出现的问题。
实践中拥塞控制的实现就是基于闭环控制,监测主要指标有:由于缺少缓存空间而被丢弃的分组的百分数、平均队列长度、超时重传的分组数、平均分组时延和分组时延的标准差等等。
拥塞控制的方法
实践中采用的拥塞控制方法主要用两种,可以根据网络层是否为传输层的拥塞控制提供显式帮助来区分。
端到端拥塞控制
当网络层没有为运输层提供显式支持是,端系统需要通过对网络行为的观察来确定是否存在拥塞,丢包和时延是重要的参考。由于 IP 协议不会像端系统提供任何有关网络拥塞的反馈信息,因此 TCP 就是采用该方法进行拥塞控制。
网络辅助拥塞控制
此方法中路由器将向发送方发送网络拥塞状态的显示反馈信息,早期的拥塞控制体系中经常使用这类方法。例如 ATM 可用比特率拥塞控制机制中,路由器可以显式地通知发送方,路由器在输出链路上支持的最大主机的发送速率。现在的 IP 和 TCP 也可以选择性地实现网络辅助控制。
和流量控制的区别
拥塞控制就是防止过多的数据注入到网络中,使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。这是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
流量控制往往指点对点通信量的控制,是个端到端的问题(接收端控制发送端)。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
参考资料
《计算机网络(第七版)》 谢希仁 著,电子工业出版社
《计算机网络 自顶向下方法》 [美] James F.Kurose,Keith W.Ross 著,陈鸣 译,机械工业出版社