美文网首页网络
网络知识体系(四) —— TCP 拥塞控制

网络知识体系(四) —— TCP 拥塞控制

作者: Vic_wkx | 来源:发表于2021-05-26 10:20 被阅读0次

    转自 HuanBlog:这一篇 TCP 总结请收下

    拥塞控制用来避免网络过分拥挤导致的丢包严重、网络效率降低的问题。

    以交通为例:高速公路同一时间可通行的汽车数量是一定的,当节假日时,会发生严重的堵车。在 TCP 中,数据包超时会进行重传。就像是本就堵车的公路进入了更多的汽车,导致的结果是网络中不断地 丢包 - 重传 - 丢包 - 重传。直至网络瘫痪。

    拥塞控制通过限制发送方的滑动窗口大小来限制流量。当然,拥塞控制的手段不只是流量控制,导致拥塞的因素有:路由器缓存、带宽、处理器处理速度等等。提升硬件能力(四车道改成八车道)是其中一个方法,但毕竟硬件提升是有瓶颈的,没办法不断提升,还是需要从 TCP 本身来增加算法,解决拥塞。

    拥塞控制的重点有四个:慢开始、快恢复、快重传、拥塞避免。

    慢开始和拥塞避免算法

    Y 轴表示的是发送方窗口大小,X 轴表示的是发送的轮次(不是字节编号)。

    • 最开始的时候,拥塞窗口的值较小,然后每轮变为原来的两倍,这是慢开始
    • 当窗口值达到 ssthresh(slow start threshold)时,开始进入拥塞避免,每轮把窗口值提升 1,慢慢试探网络的底线。ssthresh 是根据实时网络情况设置的一个窗口限制值
    • 如果发生了数据超时,表示极可能发生了拥塞,此时回到慢开始,重复上面的步骤
    • 如果收到三个相同的确认回复,表示现在的网络情况不太好,把 ssthresh 值设置为原来的一半,继续拥塞避免。这部分称为快恢复
    • 如果收到丢包信息,应该尽快把丢失的包重传一次,这是快重传
    • 窗口的最终上限是不能无限上涨的,他不能超过接收方的缓存区大小

    通过这个算法,可以在很大程度上避免网络拥挤。

    除此之外,还可以让路由器在缓存即将满的时候,通知发送方我快满了,而不是等到出现了超时再进行处理,这被称为主动队列管理 AQM(Active Queue Management)。

    相关文章

      网友评论

        本文标题:网络知识体系(四) —— TCP 拥塞控制

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