拥塞控制的一般原理
什么是拥塞控制,举个中国人都懂得例子,春节火车站,拥塞的很。为啥?中国人多呗,如果不进行拥塞控制(人流量控制),火车站就没法运转了。总结为:需要的资源大于了可用资源,若出现这种情况,最坏的结果就是整个系统瘫痪了。
那么在网络传输数据中,我们可以简单理解数据将经过大量的数据链路和交换机。数据链路是物理设备,这里就不讨论。讨论一下交换机吧。如图所示
当网络拥塞时候,路由器缓存中容量数据特别多。由于路由器分组转发路由器是需要时间的(本质上也是计算机程序,计算需要时间),则可能出现以下情况
- 路由器缓存的容量太小,造成发送数据方丢数据,不断丢包重传,造成本来就很拥塞的网络更拥塞了。
- 路由器处理机处理的速率太慢,导致接收数据量大于处理数据,造成发送数据方丢数据
- 由于数据包在经过路由器排队太久,导致造成发送数据超时重传(数据还在路上,并没有丢)
增加资源能解决拥塞吗?
不能。
互联网网络是由许许多多路由器构成的,若只是增大一些路由器增大缓存,没什么用,木桶效应,取短板。同样会出现上述问题。
同样是火车站例子,根本不是扩建的问题了,因为永远不知道人有多少,超出你的想象。那火车站/地跌站是如何解决的呢?限流;也就是说从流量源头控制,当开始发生拥塞的时候,就控制一下发送的数据量。
拥塞控制与流量控制的区别
|-拥塞控制-|-流量控制-|
|防止过多的数据注入到网络中,使网络中的路由器或链路不致过载|抑制发送端发送数据的速率,以使接收端来得及接收|
|是一个全局性的过程,涉及到与降低网络传输性能有关的所有因素。|是点对点通信量的控制,是端到端的问题|
TCP采取减少用户对资源的需求
来解决阻塞问题。
TCP拥塞控制方法
TCP拥塞控制也是窗口控制的,这里在讨论TCP拥塞控制时,我们假设有两个前提
1)数据是单向传送的,对方只传送确认报文
2)接收方有足够大的缓存接收空间,也就是不会影响到发送方滑动窗口大小
假设TCP发送数据的单位为最大发送报文段SMSS,也就是作为窗口大小的基本单位,使用较小的数字来说明。当前的窗口大小记为cwnd
-
慢开始
开始为1个SMSS单位数据量,cwnd=1。之后未2倍的增长速度,到最大阀门值ssthresh后停止慢开始算法(阀门值ssthress动态计算的,这里假设起始为16) -
拥塞避免
数据量达到阀门值ssthress后,开始线性增长,+1方式。直到出现超时
超时
一旦出现超时,又回到慢开始,发送数据量又从cwnd=1开始,同时最大阀门值ssthresh=最大的窗口值wnd减半=24/2=12
下面来讨论一种情况,如果包是因为传输导致丢包了,而不是网络拥塞
如何避免这种情况呢?快重传
- 快重传
加入传递了M1,M2,M3,M4,M5。其中收到了M1,M2,M4,M5。没有收到M3。立即发送三个对M2的确认,对方就会知道包丢了,但是不是网络的原因
- 快恢复
对应出现快重传,做出相应的策略:最大阀门值ssthresh=最大的窗口值wnd减半=16/2=8。同时cwnd=ssthresh=8,执行拥塞避免
完整的流程