背景
TCP/IP协议是当前网络时代的基础,所有的网络产品,或者是开发语言、开发框架都是基于tcp/ip协议的,所以说,学好tcp/ip对个人以后从事互联网行业会有巨大的帮助。
但是这是一个基础理论课程,就像操作系统这门课一样,学完之后可能不会对你产生太大的影响,不会让你立马拥有能够投入工作中的技能。但正是因为这是一个基础理论课,所有的互联网技术都是基于它的。所以如果你了解tcp/ip协议,将会对你未来发展或者在工作中排查问题产生积极的作用。
Nagle算法
试想这样一个场景,发送端不停地给接收端发很小的包,一次只发1个字节,那么发送1000字节需要发1000次。这种频繁的发送是存在问题的,不光是传输时延消耗,发送和确认本身也是需要消耗时间的,频繁的发送接收带来了巨大的时延。
Nagle算法就是为了解决上述的情况,具体规则如下:
- 当第一次发送数据时不用等待,就算是
1字节的包也立即发送 - 后面发送需要满足下面条件
Nagle要求,一个tcp连接最多只能有1个未被确认的未完成小分组,在该分组确认到达之前,不能发送其他小分组。
注意:
Nagle算法针对于发送端
延迟确认
试想这样一个场景,当我收到了发送端的一个包,然后在极短的时间内又收到了第二个包,那我是一个个回复,还是稍微等一下,把2个ACK合并之后一起回复呢?
延迟确认(delayed ack)所做的事情就是后者,稍稍延迟,然后合并ACK,最后回复给发送端。tcp要求这个延迟的时间必须小于500ms,一半的操作系统实现都不会超过200ms
但是有些场景不能延迟确认,必须马上回复。如下:
- 接收到一个大于
frame的报文,且需要调整窗口大小 tcp处于quick ack模式(tcp_in_quickack_mode设置)- 发现乱序包
注意:
- 延迟确认针对的是接收端
Nagle算法和延迟确认不建议一起使用,因为会造成更大的延迟
总结
这是tcp/ip系列的第十篇,主要讲解了Nagle算法和延迟确认,两者均为理论知识,只需了解下有这个即可。后面还有更深入、更多使用的场景讲解,这个系列的文章会很长。
开始下一篇吧。
本文探讨TCP/IP协议中的Nagle算法和延迟确认技术,解释它们如何解决网络传输中的延迟问题,以及在实际应用中应注意的事项。
1632

被折叠的 条评论
为什么被折叠?



