面试题答案
一键面试慢启动(Slow Start)
- 原理:
- 初始时,拥塞窗口(cwnd)设置为一个最大段大小(MSS)。每收到一个对新数据的确认(ACK),cwnd就增加一个MSS大小。
- 这种方式使得cwnd在开始时以指数方式增长。例如,最初cwnd = 1MSS,收到第一个ACK后,cwnd = 2MSS,收到第二个ACK后,cwnd = 4MSS,以此类推。
- 作用:在网络空闲或刚开始传输数据时,快速探测网络的承载能力,尽快使发送方能够充分利用网络带宽。
拥塞避免(Congestion Avoidance)
- 原理:
- 当cwnd增长到慢启动门限(ssthresh)时,进入拥塞避免阶段。此时,cwnd的增长方式变为线性增长,即每收到所有已发送段对应的ACK,cwnd增加1。例如,若一次发送了10个段,收到这10个段的ACK后,cwnd增加1。
- 这样可以避免cwnd增长过快导致网络拥塞。
- 作用:在网络接近拥塞状态时,以较为平缓的方式增加发送速率,维持网络的稳定传输。
快重传(Fast Retransmit)
- 原理:
- 接收方如果收到乱序的数据包,会立即发送重复ACK给发送方,告知发送方期望接收的下一个数据包序号。
- 当发送方收到三个或以上相同的重复ACK时,就认为该重复ACK对应的数据包可能丢失了,于是在定时器超时之前,就重传该数据包。
- 作用:快速重传丢失的数据包,避免因等待定时器超时才重传而造成的长时间数据传输停顿,提高数据传输的效率。
快恢复(Fast Recovery)
- 原理:
- 当发送方执行快重传后,会进入快恢复阶段。此时,ssthresh设置为当前cwnd的一半,cwnd设置为ssthresh加上3倍的MSS(因为收到了三个重复ACK,意味着至少有三个数据包离开了网络)。
- 然后开始执行拥塞避免算法,即每收到所有已发送段对应的ACK,cwnd增加1。
- 作用:在快速重传数据包后,以一种较为平缓的方式恢复发送速率,避免网络再次陷入拥塞,同时也能尽快恢复到较高的传输效率。
协同工作机制
- 初始阶段:TCP连接开始时,先通过慢启动快速增加cwnd,探测网络的承载能力。
- 接近拥塞:当cwnd达到ssthresh时,切换到拥塞避免阶段,线性增加cwnd,防止网络拥塞。
- 数据包丢失检测:如果收到三个或以上重复ACK,触发快重传和快恢复机制。快重传立即重传可能丢失的数据包,快恢复调整ssthresh和cwnd,以平稳的方式恢复传输速率。
- 超时处理:若发生超时(即没有及时收到ACK且定时器超时),ssthresh会设置为当前cwnd的一半,cwnd重新设置为1MSS,重新进入慢启动阶段。这种机制确保了在网络出现严重拥塞(超时)时,能迅速降低发送速率,重新探测网络状况。
通过这些机制协同工作,TCP协议能够在不同的网络状况下,动态调整发送方的传输速率,既充分利用网络带宽,又能避免网络拥塞,确保网络的稳定性和高效性。