网络学习笔记(网络传输)(4) | 青训营笔记

105 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

本堂课重点内容

1.TCP拥塞控制之快速重传和快速恢复
2.Nagle算法和延迟确认

详细知识点介绍

快速重传和快速恢复也是拥塞控制的算法

快速重传

当在TCP传输过程中发生了丢包,接收端发现数据段不是按序到达的时候,接收端的处理是重复发送之前的 ACK。然后当发送端收到未丢包返回到的重复ACK时,就意识到丢包了,于是马上重传,不用等到一个 RTO 的时间到了才重传。

选择性重传

发送端意识到丢包重传时,不会把已经传到的包重传,这个得益于报文首部的可选项SACK,通过left edgeright edge告知发送端已经收到了哪些区间的数据报。这样就完成了发送端的选择性重传。
快速重传和选择性重传分别解决了是否重传和如何重传的问题,他们共同了解决了重传的问题

快速恢复

发送端发现丢包之后觉得现在的网络已经有些堵塞,自己会进入快速恢复阶段。
在快速恢复阶段,发送端会做出如下改变:

  • 拥塞阈值降低为 cwnd 的一半
  • cwnd 的大小变为拥塞阈值
  • cwnd 线性增加

Nagle算法

当发送端不停地发送很小的包的时候,就需要用到Nagle算法了,下面是Nagle算法的规则:

  • 当第一次发送数据时不用等待,就算是 1byte 的小包也立即发送
  • 后面发送满足下面条件之一就可以发了:
    • 数据包大小达到最大段大小(Max Segment Size, 即 MSS)
    • 之前所有包的 ACK 都已接收到

延迟确认

在极短时间内收到多个包,可以延迟确认来将多个ack合并回复。
Nagle算法延迟了发包,而延迟确认延迟了返回ACK。如果一起使用,会产生更大的延迟。

课后个人总结

TCP拥塞控制是通过慢启动、拥塞避免、快速重传和快速恢复算法实现的。
Nagle算法和延迟确认前者是延迟了发包,后者是延迟了返回ACK。