解决拥塞有这几种方法:1.慢启动 2.拥塞避免 3.快速重传 4.快速恢复(一些Linux内核版本没有)
TCP使用一系列的算法来进行拥塞控制,其中包括慢启动、拥塞避免、快速重传和快速恢复。这些算法共同协作,以确保在网络拥塞情况下,TCP连接可以维持良好的性能和可靠性。
- 慢启动(Slow Start):(指数增长阶段)
- 当一个新的TCP连接建立时,TCP会以慢启动的方式发送数据。
- 发送方会初始将拥塞窗口(Congestion Window,cwnd)设置为一个较小的值,通常为一个报文段的大小。
- 每当收到对方的确认 ACK 包时,拥塞窗口大小就会加倍(指数增长)。
- 因此,随着时间的推移,拥塞窗口的大小会迅速增长,使得发送方可以逐渐发送更多的数据。
- 拥塞避免(Congestion Avoidance):(线性增长阶段)
- 一旦拥塞窗口的大小达到了一个阈值(慢启动阈值),TCP算法会切换到拥塞避免模式。
- 在拥塞避免模式下,拥塞窗口的增长不再是指数级的,而是线性增长。
- 这样可以使得发送方对网络拥塞的响应更为平缓,减少对网络的压力。
- 快速重传(Fast Retransmit):
- 当发送方连续收到相同的 ACK 包(即对同一个序列号的数据的重复确认)时,它会认为某个报文段丢失,并立即重传该报文段,而不是等待超时。
- 这样可以更快地发现丢失的数据包,并加快恢复速度,提高网络利用率。
- 快速恢复(Fast Recovery):(超时后窗口从阈值开始增长而不是1)
- 当发送方收到三个重复确认时,它会认为某个报文段丢失,并将慢启动阈值设置为当前拥塞窗口的一半,并将拥塞窗口的大小设置为新的阈值。
- 然后,TCP算法会进入快速恢复状态,继续以线性增长的方式增加拥塞窗口的大小。
- 这样可以避免立即返回慢启动阶段,并且提供了一种更快的恢复丢失数据包的方法。
通过这些拥塞控制算法,TCP能够在网络拥塞的情况下自适应地调整发送速率,保证连接的可靠性和性能。