这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
本堂课重点内容
1.TCP拥塞控制之快速重传和快速恢复
2.Nagle算法和延迟确认
详细知识点介绍
快速重传和快速恢复也是拥塞控制的算法
快速重传
当在TCP传输过程中发生了丢包,接收端发现数据段不是按序到达的时候,接收端的处理是重复发送之前的 ACK。然后当发送端收到未丢包返回到的重复ACK时,就意识到丢包了,于是马上重传,不用等到一个 RTO 的时间到了才重传。
选择性重传
发送端意识到丢包重传时,不会把已经传到的包重传,这个得益于报文首部的可选项SACK,通过left edge和right edge告知发送端已经收到了哪些区间的数据报。这样就完成了发送端的选择性重传。
快速重传和选择性重传分别解决了是否重传和如何重传的问题,他们共同了解决了重传的问题
快速恢复
发送端发现丢包之后觉得现在的网络已经有些堵塞,自己会进入快速恢复阶段。
在快速恢复阶段,发送端会做出如下改变:
- 拥塞阈值降低为 cwnd 的一半
- cwnd 的大小变为拥塞阈值
- cwnd 线性增加
Nagle算法
当发送端不停地发送很小的包的时候,就需要用到Nagle算法了,下面是Nagle算法的规则:
- 当第一次发送数据时不用等待,就算是 1byte 的小包也立即发送
- 后面发送满足下面条件之一就可以发了:
- 数据包大小达到最大段大小(Max Segment Size, 即 MSS)
- 之前所有包的 ACK 都已接收到
延迟确认
在极短时间内收到多个包,可以延迟确认来将多个ack合并回复。
Nagle算法延迟了发包,而延迟确认延迟了返回ACK。如果一起使用,会产生更大的延迟。
课后个人总结
TCP拥塞控制是通过慢启动、拥塞避免、快速重传和快速恢复算法实现的。
Nagle算法和延迟确认前者是延迟了发包,后者是延迟了返回ACK。