美文网首页计算机网络以及面试相关
TCP的流量控制与拥塞控制

TCP的流量控制与拥塞控制

作者: NetCedar | 来源:发表于2018-10-30 15:41 被阅读0次

    TCP的流量控制
    如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失

    TCP的流量控制是利用滑动窗口机制实现的,接收方在返回的ACK中会包含自己的接收窗口的大小,以控制发送方的数据发送。
    滑动窗口

    image.png

    TCP的拥塞控制
    慢开始(Slow-Start)和拥塞避免(Congestion Avoidance)结合
    在这种机制中,发送方维护一个叫做拥塞窗口的变量,只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的数据发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的数据

    慢开始算法是指开始发送数据时,并不清楚网络的负荷情况,会先发送一个1字节的试探报文,当收到确认后,就发送2个字节的报文,继而4个,8个以此指数类推。

    慢开始的“慢”并不是指拥塞窗口的增长速率慢,而是指在TCP开始发送报文时先设置拥塞窗口=1。

    拥塞避免算法是让拥塞窗口缓慢地增大,即cwnd加1,而不是如慢开始算法一样加倍

    image.png

    一开始的慢开始算法的指数增长是很恐怖的,所以为了防止拥塞窗口cwnd增长过快需要设置一个门限ssthresh,这里是16。
    (1)当 cwnd < ssthresh 时,使用上述的慢开始算法。
    (2)当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
    (3)当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。

    无论在慢开始阶段还是在拥塞避免阶段,只要发送方没有收到确认,就认为这时候拥塞了,就要把慢开始门限ssthresh设置为此时发送方窗口值的一半(上例中是把发送方窗口值24修改为12)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。

    快重传(Fast Retransmit)和快恢复(Fast Recovery)结合

    快重传
    快重传是指,如果发送端接收到3个以上的重复ACK,不需要等到重传定时器溢出就重新传递,所以叫做快速重传,而快速重传以后,因为走的不是慢启动而是拥塞避免算法,所以这又叫做快速恢复算法

    如果没有快速重传和快速恢复,TCP将会使用定时器来要求传输暂停。在暂停这段时间内,没有新的数据包被发送。所以快速重传和快速恢复旨在快速恢复丢失的数据包。

    image.png
    如图所示,接收方发现M3丢失,则立即发送对M2的重复确认。一旦发送方一连收到三个M2的重复确认就应当立即重传M3,也就是发送方收到第四个对M2的确认时

    快恢复

    image.png

    (1)当发送方在cwnd=24时连续收到三个重复确认,就把慢开始门限ssthresh减半(就是上图中的24修改为12)。
    (2)接下来不执行慢开始算法,而是把cwnd值设置为门限ssthresh减半后的数值(即cwnd不是设置为1而是设置为12),然后开始执行的是拥塞避免算法,使拥塞窗口缓慢地线性增大。

    相关文章

      网友评论

        本文标题:TCP的流量控制与拥塞控制

        本文链接:https://www.haomeiwen.com/subject/goegtqtx.html