TCP 拥塞控制

为了面试大厂,回顾tcp协议的细节。我用我自己的话来梳理tcp的拥塞控制。当然可能会有一些细节上不是那么到位。

TCP 拥塞的算法:

  1. 慢启动

    网络的带宽上总是有限的,所有的连接都想尽量的抢占带宽。

    形象的场景,比如想要通过tcp连接发送一个1G的文件。假设双方资源都充足,tcp 一开始就以最大的带宽来传输吗?当然不是的。tcp协议会从逐渐增大拥塞窗口的大小,来试探到合适的拥塞窗口大小。

    Chandler: 什么是拥塞窗口呢?可以简单理解为一次连续发送多少个报文。拥塞窗口,会根据网络情况不停的调节,比如出现了丢包重传,那么拥塞窗口就会变小,如果连续没有丢包,就假设网络还有空间,拥塞窗口就会上调。

  2. 拥塞避免

    报文开始传输的时候,会按照指数来增长,比如第一次1个报文,第二次2个报文,第三次4个报文,第四次8个报文,直到数量到了初始门限值,就不再是指数增长,而会改为每次增加一个,来避免拥塞。这个数值会逐个增长,直到出现丢包重传。

  3. 快重传与快回复

    假设发送方传输了24个数据包,却只收到20个回应报文,此时网络并不是拥塞,而是传输中的超时或丢包。那么发送方等到数据包的发送计时器超时,再改用拥塞避免算法补发,这样处理传输效率不高。快重新与快恢复便是为了解决这种场景的。

    • 快重传是指,接受方接受到第1,第2个的数据包,却没有等来后面的第3个数据包,而是来了第四个,第五个,第六个。那么此时接受方会连续发出对第2个数据包的ack。发送方收到后,进而补发。

    • 快恢复是指,在这种场景中,初始门限值不是变回1,而是发送窗口和初始门限值都下调为当前拥塞窗口的一半。

Author: Chandler Kwok
Link: http://yoursite.com/2020/04/03/tcp-%E6%8B%A5%E5%A1%9E/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.