s6-8 TCP 拥塞控制

TCP 拥塞控制


 虽然网络层也试图管理拥塞,但是,大多数繁重的任务是由TCP来完成的,因为针对拥塞的真正解决方案是减慢数据率
 分组守恒:当有一个老的分组离开之后才允许新的分组注入网络
 TCP希望通过动态维护窗口大小来实现这个目标


拥塞检测 (Congestion detection)
 所有的互联网TCP算法都假定超时是由拥塞引起的,并且通过监视超时的情况来判断是否出现问题
拥塞控制 (Congestion prevention)
 当一个连接建立的时候,双方选择一个合适的窗口大小,接收方根据自己的缓冲区大小来指定窗口的大小。
 如果发送者遵守此窗口大小的限制,则接收端不会出现缓冲区溢出的问题,但可能由于网络内部的拥塞而发生问题


image


互联网解决方案应该是认识到两个潜在的问题的:网络容量,接收者容量,然后单独地处理这两个问题
   为此,每个发送者维护两个窗口:

接收者窗口 大小反映了目前窗口的容量 (容易控制)
拥塞窗口 大小反映了网络目前的容量(难于控制)
发送者发送的数据字节数是两个窗口中小的那个窗口数


决定拥塞窗口的大小


慢启动算法(Slow Start) (尝试的过程):
当连接建立的时候,发送者用当前使用的最大数据段长度初始化拥塞窗口,然后发送一个最大的数据段
如果在定时器超期之前收到确认,则将拥塞窗口翻倍,然后发送两个数据段……直至超时(或达到接收方窗口的大小)
确定出拥塞窗口的大小
     如:如果试图发送 4096 字节没有问题,但是发送8192字节的时候,超时没有收到应答,则拥塞窗口设为4096个字节


慢速启动算法
按指数增长趋势定义拥塞窗口大小cwnd
初始:cwnd0 = MaxSegL(当前数据段长度)
增长:cwnd1 = 2 cwnd0
      cwnd2 = 2 cwnd1
        • • •
截止:达到接收窗口大小或超时


慢速启动算法图例

image


TCP 拥塞控制



 除了使用接收者窗口和拥塞窗口,TCP拥塞控制还是用了第三个参数,阈值(threshold),初始化为64K
 当一个超时发生的时候,阈值降为当前拥塞窗口的一半,同时将拥塞窗口设为一个最大数据段的长度
 使用慢启动算法来决定网络的容量,拥塞窗口增长到阈值时停止指数增长
 从这个点开始,每次成功的传输都会让拥塞窗口线性增长(即每次仅增长一个最大的数据段长度)


拥塞控制算法-CWin指数增长

image

拥塞控制算法- cwnd线性增长

image


拥塞控制算法-重新慢速启动

image


注意
 快速恢复

image


拥塞控制算法


定义初始拥塞窗口阈值和窗口大小
Threshold 0 和 cwnd 0
初始超时
    拥塞窗口阈值减半:Threshold1 = CWND / 2
cwnd二进制指数增长至确认超时


cwnd线性增长至确认超时
 拥塞窗口值减半:Threshold n = CWND n / 2
 定义窗口大小:cwnd = cwnd 0
重新开始慢速启动过程


注意
 如果收到一个ICMP抑制分组( ICMP source quench)并被送给TCP传输实体 ,则这个事件被当作超时对待


小结:

 TCP拥塞控制遵循分组守恒定律
 两种因素引起拥塞警报
接收方处理不过来
通信子网中出现拥塞
 处理拥塞的具体方法
Window size
Congestion window
 CWND通过慢起动方法尝试而来
 通过阈值调节CWND尝试的精度

posted @ 2019-04-07 14:55  Fadewalk  阅读(327)  评论(0编辑  收藏  举报