TCP/IP学习笔记10-Nagle算法和延迟确认

背景

TCP/IP协议是当前网络时代的基础,所有的网络产品,或者是开发语言、开发框架都是基于tcp/ip协议的,所以说,学好tcp/ip对个人以后从事互联网行业会有巨大的帮助。

但是这是一个基础理论课程,就像操作系统这门课一样,学完之后可能不会对你产生太大的影响,不会让你立马拥有能够投入工作中的技能。但正是因为这是一个基础理论课,所有的互联网技术都是基于它的。所以如果你了解tcp/ip协议,将会对你未来发展或者在工作中排查问题产生积极的作用。

Nagle算法

试想这样一个场景,发送端不停地给接收端发很小的包,一次只发1个字节,那么发送1000字节需要发1000次。这种频繁的发送是存在问题的,不光是传输时延消耗,发送和确认本身也是需要消耗时间的,频繁的发送接收带来了巨大的时延。

Nagle算法就是为了解决上述的情况,具体规则如下:

  1. 当第一次发送数据时不用等待,就算是1字节的包也立即发送
  2. 后面发送需要满足下面条件
    Nagle要求,一个tcp连接最多只能有1个未被确认的未完成小分组,在该分组确认到达之前,不能发送其他小分组。

注意:

  • Nagle算法针对于发送端

延迟确认

试想这样一个场景,当我收到了发送端的一个包,然后在极短的时间内又收到了第二个包,那我是一个个回复,还是稍微等一下,把2ACK合并之后一起回复呢?

延迟确认(delayed ack)所做的事情就是后者,稍稍延迟,然后合并ACK,最后回复给发送端。tcp要求这个延迟的时间必须小于500ms,一半的操作系统实现都不会超过200ms

但是有些场景不能延迟确认,必须马上回复。如下:

  1. 接收到一个大于frame的报文,且需要调整窗口大小
  2. tcp处于quick ack模式(tcp_in_quickack_mode设置)
  3. 发现乱序包

注意:

  • 延迟确认针对的是接收端
  • Nagle算法和延迟确认不建议一起使用,因为会造成更大的延迟

总结

这是tcp/ip系列的第十篇,主要讲解了Nagle算法延迟确认,两者均为理论知识,只需了解下有这个即可。后面还有更深入、更多使用的场景讲解,这个系列的文章会很长。
开始下一篇吧。

猜你喜欢

转载自blog.csdn.net/Free_time_/article/details/107447268