传输层的拥塞控制
一、拥塞的成因1.1、2个发送方2个接收方和一台具有无穷大缓存的路由器假设主机A和主机B都经过同一个路由器且路由器有无限缓存路由器的链路容量是R如下图所示主机A中的应用程序以λin 字节/秒的平均发送速率将数据从应用层发送到传输层中默认这些数据都是初始数据每个数据单元仅通过分组发送一次不会执行差错恢复重传不会执行流量控制和拥塞控制同时忽略传输层和传输层以下网络层数据链路层物理层添加的额外头部信息此时主机A向路由器发送流量的速率就是λin 字节/秒由于主机B与主机A相同并且共享一段容量为R的链路则主机A和主机B的最大发送速率都是R/2。当主机A的发送速率接近于R/2时主机A的发送速率与接收方的吞吐量的函数关系主机A的发送速率与时延的函数关系如下所示1.2、2个发送方2个接收方和一台具有有限缓存的路由器假设主机A和主机B都经过同一个路由器且路由器的缓存是有限的路由器的链路容量是R如下图所示主机A的 λin 应用层向传输层发送数据的发送速率、主机B、链路容量R 都与1.1相同由于路由器的缓存是有限时那么缓存已满时多余的分组必定会被丢弃在可靠连接中被丢弃的分组将会发生重传这会导致传输层向网络层发送数据的发送速率λin’ ≠ λin 假设有以下三种情形①、发送方能够通过某种机制获知路由器缓存buffer信息并且在路由器有空闲缓存时才发送数据此时λin’ λin λout主机A的发送速率与接收方的吞吐量的函数关系与1.1相同如下图a所示②、发送方不能获知路由器缓存buffer信息发送方定时器的时间设置为无限长由于发送方的定时器并不会超时当发送方确认分组丢弃后才会重发分组此时λin’λinλin’ λout发送方必须重传丢弃的分组当发送的0.5R的数据时其中有0.333R是初始数据有0.166R是重传数据造成资源的浪费如下图b所示③、发送方不能获知路由器缓存buffer信息发送方定时器的时间有限发送方在发生超时时重传在队列中已被推迟但还未丢弃的分组此时λin’λinλin’ λout发送方必须重传丢弃的分组和超时的分组当发送的0.5R的数据时其中有0.25R是初始数据有0.25R是重传数据造成资源的浪费如下图c所示1.3、4个发送方4个接收方和多台具有有限缓存的路由器及多跳路径假设主机A、主机B、主机C、主机D都通过交叠的两跳路径传输假设每台主机都采用超时/重传机制来实现可靠数据传输所有的主机都有相同的 λin路由器的链路容量都是R如下图所示路由器R2同时承载着主机A→主机C、主机D→主机B的数据发送当网络拥塞形成时会发生1.2中所出现的情况 主机A和主机D的发送速率会接近于R/2R/3直到接近于R/4造成分组成不断的丢失。与1.2不同的是当路由器R2将主机A→主机C的分组丢弃后会导致之前的路由器R1对于R2丢弃的分组做的存储和转发都是“劳而无功”的因此在多跳网络中当分组被drop时任何用于该分组的“上游”传输能力全都被浪费掉了导致整个网络的吞吐率变的更差如下图所示二、网络辅助的拥塞控制和端到端的拥塞控制拥塞控制的原理可以根据网络层是否为传输层拥塞控制提供了显示的帮助来区分如下①、端到端的拥塞控制网络层没有为传输层拥塞控制提供显示支持即使网络中存在拥塞发送方也必须通过对网络行为的观察来推断比如分组丢失和分组时延TCP的拥塞控制就属于端到端的拥塞控制详细内容请查看本章2.2②、网络辅助的拥塞控制网络层为传输层的拥塞控制提供显示支持网络层或者核心的网络设备会向发送方显示的反馈网络拥塞信息发送方就可以利用这个信息调整信息发送这种方式通常需要依靠简单的拥塞指示来避免overload简单的拥塞指示如SNA、DECbit、TCP/IP ECN、ATM...其中ATM拥塞控制机制中的ABRavailable bit rate服务的详细内容请查看本章2.12.1、ATM拥塞控制机制中的ABRavailable bit rate服务网络辅助的拥塞控制ABR服务是一种“弹性服务”工作逻辑大致如下①、如果发送方发现网络路径的负载比较低underloaded那么发送方会使用可用带宽来发送数据②、如果发送方发现网络路径出现拥塞那么发送方的发送速率会降低到最低保障速率。在ATM网络中除了有data cell在ATM网络中data cell表示分组还有RM cell也是一种分组这种RM cell是穿插在data cell中间的发送方一般在发送若干个data cell后会发送一个RM cellRM cell在整个网络传输过程中网络设备会修改RM cell中的数据主要修改的RM cell中的数据有以下2种①、NI bit是否允许传输速率继续增长②、CI bit当前网络中是否拥塞。当RM cell通过整个网络传输给接收方时接收方会将RM cell返回给发送方此时发送方就可以利用RM cell了解整个网络的拥塞情况整个过程如下图所示2.2、TCP的拥塞控制的基本原理端到端的拥塞控制Tahoe算法和Reno算法的详细细节请查看7.3、传输层的拥塞控制算法—Tahoe算法和Reno算法TCP拥塞控制的主要措施是限制发送方的发送速率与TCP协议的流量控制不同流量控制是在接收方设置一个RevBuffer大小的内存空间TCP协议的拥塞控制是在发送方设置一个拥塞窗口——窗口大小为CongWinCongWin满足以下公式−LastByteSent 表示最后一个发送的分组的序列号LastByteAcked 表示最后一个确认接收的分组的序列号rate发送速率≈ CongWin/Rtt此时我们通过改变CongWin的大小就可以间接的改变发送速率。当网络拥塞程度比较严重时将CongWin的值调整的较小一些即可当网络中不存在拥塞或者网络拥塞的程度比较小时将CongWin的值调整的较大一些即可。对于网络拥塞的感知TCP协议主要通过loss事件来进行判断loss事件可以分为以下2种①、发送方的发送窗口出现timeout②、发送方的收到3个重复的ACK。当发送方出现loss事件时发送方判定为网络拥塞此时发送方需要降低发送速率当发送速率成功降低后发送方又要合理的调整CongWin的大小使发送速率恢复到一个较大的值来进行网络传输整个CongWin的调整逻辑如下图所示TCP协议控制CongWin的策略主要有以下3种①、加性增乘性减的AIMD机制AIMD的原则是逐渐增加发送速率谨慎探测可用带宽直到发生loss事件。其中加性增Additive Increase策略指的是在每个RTT后将CongWin增大一个MSS最大段的长度乘性减Multiplicative Decrease指的是发生loss事件后将CongWin减半。整个过程中拥塞窗口大小CongWin的变化如下图所示②、慢启动ss慢启动的原则是当TCP连接开始时CongWin可以指数性增长。慢启动的原则解决了AIMD机制中加性增Additive Increase的线性增长问题因为在网络初始阶段可用带宽可能远远高于初始发送速率此时我们希望的是发送速率可以快速增长。如下图所示③、Threshold变量。通过AIMD中的加性增Additive Increase和慢启动ss可以实现CongWin的线性增长和指数增长但是在切换CongWin的线性增长和指数增长时需要依靠Threshold变量。一般系统会有一个初始的Threshold变量当拥塞窗口的大小CongWinThreshold时CongWin为指数增长当拥塞窗口的大小CongWinThreshold时CongWin由指数增长变为线性增长。无论CongWin使用哪种增长方式当前网络都有可能发生loss事件当loss事件发生时CongWin和Threshold有以下2种变化方式a、loss事件为发送方的收到3个重复的ACK时此时CongWinCongWin/2ThresholdCongWin/2修改后CongWin等于ThresholdCongWin继续线性增长b、loss事件为发送方的发送窗口出现timeout时此时CongWin1个MSSMSS表示最大分组的长度的大小ThresholdCongWin/2修改后CongWinThresholdCongWin变为指数增长当CongWin等于Threshold时CongWin由指数增长变为线性增长以上ab这两种变化方式如下图所示因此通过Threshold变量来控制AIMD机制和慢启动ss机制总结如下2.2.1、TCP拥塞控制算法伪代码如下Threshold 根据主机和当前网络设置一个合理的值 CongWin 1 MSS /*指数增长slow start or exponential increase */ While (No Packet Loss and CongWin Th) { send CongWin TCP segments for each ACK increase CongWin by 1//每个RTT都会增长 } /*线性增长congestion avoidance or linear increase */ While (No Packet Loss) { send CongWin TCP segments for CongWin ACKs, increase CongWin by 1//整个拥塞窗口RRT才会增长 } Threshold CongWin/2 //无论哪种lossThreshold都减半 //CongWin 需要根据loss事件来确定CongWinCongWin/2 或 CongWin1 If (3 Dup ACKs) CongWin Threshold;