拥塞控制原理
讲拥塞控制原理之前,我们需要知道,拥塞是由什么引起的?
拥塞主要是因为网络层的丢包过程引起,丢包出现的原因就是因为路由器的缓存有限,但发送方的发送速率又太高,导致分组在路由器上被丢弃
现在我们假设路由器有无限制的缓存,两个主机仅通过一个单跳路由器,两主机之间的链路的容量为R,两个主机的发送速率都为v,因此我们知道,该连接的吞吐量就是:
R/2 当v>R/2时,
吞吐量随着v的增长而增长,当v<=R/2时
当实际的情况是如何的呢?
当两个主机的发送速率逼近于R/2时,连接的时延趋于无穷大,因为实际中的路由器的缓存是有限的,因此会出现丢包现象,出现丢包之后发送方就会重传,重传又会占据发送方发送的速率,因此发送方的分组就会出现无穷大的排队时延
现在我们假设两个主机之间的路由器的缓存是有限的,并且设主机向套接字发送字节的速率为v,运输层向网络层发送字节的速率为v’
假设每台主机能够知道路由器的缓存为多少(不可思议的),那么主机只要在路由器缓存不为空时发送分组就可以了,这样v=v’,且不会出现丢包现象
但是实际情况却是,主机没办法知道路由器的缓存是否为空,这种情况下,性能可能如下图所示
接收方接收到的实际速率为R/3,因为有一部分速率被用来重传分组了
我们刚才考虑的都是两个主机之间只有一跳路由器,现在当有多个主机和路由器时,会出现什么情况?
当每一个发送方的速率都特别大时,我们假设
- 主机A和主机C通过两个路由器x,y连接
- 主机B和主机C通过一个路由器y连接
- 三个主机的发送速率都相同为v,链路的容量都为R
这样我们可以预想到,当BC之间的发送速率很大时,y作为BC之间的单跳路由器,它的缓存将被BC所争夺完,而AC经过第x路由器的分组因为在y路由器得不到缓存而被丢弃,因此x路由器所做的分组转发将都是无用功
讲了这么多引起拥塞的原因,我们有必要了解以下拥塞控制的方法
-
端到端的拥塞控制,该方法主要是由TCP来实现的,因为IP网际协议并不会向端系统提供有关拥塞控制的反馈,根据前面讲到的可靠数据传输中,我们知道,TCP可以通过三个冗余ACK来判断拥塞
-
网络辅助的拥塞控制,该方法主要是网络层构件来为发送方提供拥塞消息,有直接由交换机发送给发送方,也有通过将分组标记,然后接收方通过该标记得知拥塞消息并向发送方提供该拥塞信息,后者至少需要经过一个往返时延RTT
网络辅助的拥塞控制例子: ATM ABR拥塞控制
ATM主要用于虚电路,因为虚电路中有一条明确的路径,路由器可以跟踪发送方的行为
在ATM中我们将分组称为数据信元,将路由器称为交换机
在ATM中,在数据信元里夹杂着一些资源管理信元(RM信元),这些信元可以被用来主机和交换机传递拥塞相关的信息,RM信元在到达目的地之后可以被调转方向向发送方传输,交换机也可以自己产生一个RM信元
ATM ABR拥塞控制是一种基于速率的方法,发送方明确的计算出所能发送的最大发送速率并根据拥塞信息来调整,ABR提供三种机制用于从交换机向接收方发送于拥塞相关信息的信令信息
- 每个数据信元都会有一个EFCI比特,当链路拥塞时,交换机就将数据信元的EFCI比特置为1,当接收方收到的多数数据信元的EFCI比特都为1,就将RM信元的CI比特置为1,因此发送方就知道链路出现了拥塞
- CI和NI比特,RM信元是夹杂在发送方发送的数据信元里边的,夹杂比例默认值为1/32,CI(拥塞指令比特)和NI(无增长比特)分别对应着严重拥塞和轻微拥塞,接收方收到该RM信元便将其发送到发送方,保持这两个比特不变(CI比特可能由于EFCI而变化)
- ER的设置,每一个RM信元还包括一个两字节的显式速率字段,一个拥塞的交换机可能会降低经过的RM信元的ER字段的值,以这种方法,ER字段将被设置为在源到目的地的路径上的所有交换机中的最小可支持速率
参考:
的ER字段的值,以这种方法,ER字段将被设置为在源到目的地的路径上的所有交换机中的最小可支持速率
参考:
《计算机网络自顶向下方法》