TCP的阻塞处理

前言

TCP采用基于窗口的方法进行拥塞控制——闭环控制方法

本篇讨论 出现阻塞的情况 与 解决阻塞情况的办法

拥塞窗口

发送方让自己的发送窗口等于拥塞窗口,不是一直都等于:网络情况好的时候,窗口会增大,但是接收方的能力有限,窗口也有个限制

真正的发送窗口值 = Min(公告窗口值,拥塞窗口值)

当发送方发送报文段时,发送方没有在时间间隔内收到接收方的确认报文段,就认为发生了拥塞

控制拥塞窗口的原则

  • 只要网络没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多的分组发送出去,这样就可以提高网络的利用率
  • 只要网络出现拥塞或有可能出现拥塞,就必须把拥塞窗口减小一些,以减少注入到网络中的分组数,以便缓解网络出现的拥塞

阻塞的情况

  • 重传定时器超时
    • 因为现在通信线路传输质量一般都很好,因传输出差错而丢弃分组的概率很小。所以只要出现了超时,可以猜想网络可能出现了拥塞
  • 收到三个相同(重复)的ACK(接收确认)
    • 个别报文段 在网络中丢失,预示可能会出现拥塞,需要尽快采取控制措施,避免拥塞

四种算法

算法 描述
慢开始 主机刚开始发送数据的时候,先探测网络状况,如果网络状况良好,即每次发送的报文段都能正确接收到正确的 确认报文段,那么从小到大增加拥塞窗口,这里是指数增加,比如发送1个,接收到后,就增加到2个,又接收到,增加4个…
拥塞避免 让拥塞窗口缓慢增加,一次只加一个,有加法增大的特点
快重传 接收方收到一个失序报文段,立马发送重复确认,比如收到了M1 M2 M4 M5,没有m3,那么会重复确认M2 3次
快恢复 把慢开始门限设置为发送窗口的一半
把拥塞窗口设置成之前拥塞窗口的一半
执行拥塞避免算法(加法增大),使拥塞窗口缓慢增大
乘法减小的特点

AIMD 算法

  • 加法增大—AI (Additive Increase)
    • 拥塞避免算法:拥塞窗口是按照线性规律增大的
  • 乘法减小—MD(Multiplicative Decrease)
    • 快恢复算法:当出现超时或3个重复的确认时,就要把拥塞窗口设置为当前拥塞窗口值的一半,并大大减小拥塞窗口的数值

解决阻塞的方法

  • 重传定时器超时

    • 一般采取的措施是慢开始和拥塞避免算法
    • 一开始是慢开始算法,从1以指数增长(也就是1,2,4,8,16……)增长到慢开始门限,转换为拥塞避免算法(也就是逐步加一17,18,19,20,21….)
    • 如果碰到重传计时器溢出的情况,就立刻把阻塞窗口变成一,然后慢开始门槛变成出现阻塞时候的窗口值的一半
    • 重新执行慢开始和阻塞避免算法
  • 收到三个相同(重复)的ACK(接收确认)

    • 采用快重传和快恢复算法
    • 一开始也是慢开始算法和拥塞避免算法
    • 如果碰到收到三个相同(重复)的ACK(接收确认)的情况, 把慢开始门限设置为发送窗口的一半拥塞窗口设置成之前拥塞窗口的一半,执行拥塞避免算法(加法增大),使拥塞窗口缓慢增大