Skip navigation.
主页

TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery

droplet 的图片

什么情况下,可以认为网络丢包了?
1:重传定时器超时,需要重传包。
2:收到重复的ACK。ACK是由packet触发的,如果后面的包收到了,而前面的包没收到,就会发重复的ACK,这种情况下,有可能中间的包丢了(也有可能是没到),所以ACK时就需要有个选择,是每个包都ACK,还是延迟ACK。

如果是重传定时器超时,就需要slow start。TCP connect刚开始发送数据的时候,也是slow start,这里面有几个参数。
1:rwnd:receiving window,就是接收方通告给发送方的window,告诉发送方本方能收多少字节。
2:cwnd: congest window, 发送方为避免引起拥塞而引入的window,控制发送方的速率。
3: ssthresh: slow start threshold size,slow start到达这个threshold后进入congest avoidance状态。
发送方的窗口取rwnd和cwnd里面的小的那个。
slow start:每个ACK都会cwnd都会加ACK的segment的大小,所以slow start增加是很快的,所以引入congest avoid,避免cwnd过快增长。

如果重传定时器超时,cwnd减到1个MSS,ssthreshold减到原来cwnd的一半,开始slow start。
如果是收到三个重复的ACK:
1:fast retransmit,快速重传,不要等重传定时器超时。
2:减小cwnd,ssthreshold,但不是进入slow start状态,而是有所保留。这应该是根据实际情况优化的,提高tcp的throughput。
3:如果重传包被ACK,则进入congest avoid状态。

附件大小
slow_start.png107.58 千字节