关于Nagle算法的问题

HymanLiuTS 2016-10-18 07:49:55

上图是我画的一个简单的socket的Nagle算法开启和关闭时的主机A向主机B发送数据“Hello”时的对比图,其中开启Nagle算法时会收到主机B发送过来的ACK消息后,主机A才会发送剩下的数据;不开启Nagle算法时,不管主机B有没有发送ACK数据回来,主机A都会直接向主机B发送剩下的数据。

我的问题是接受ACK后再发送剩下的数据难道不是TCP有连接的可靠传输的特性吗,为什么收Nagel算法的控制,如果Nagle算法关闭了难道TCP就变成不可靠的传输了?求解惑,不要再沉了。。。。有没有大神研究过。。。
...全文
260 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
HymanLiuTS 2016-10-20
  • 打赏
  • 举报
回复
既然没人回答,我对这几天我对Nagle算法的思考进行结贴,我主要的疑问是: 使用Nagle算法是不是TCP可靠传输的基础,禁用了Nagle算法TCP就变成不可靠传输了? 答案是否定的,TCP的可靠传输和Nagle算法没有关系,它是: 当发送数据包后,未收到该包的ACK时,发送端会重新发送该包。 不是: 当发送数据包后,只有收到该包的ACK时,才会发送下一个包。 TCP的包与包之间是相互独立的。
codingMozart 2016-10-19
  • 打赏
  • 举报
回复
图1画错了,Nagle在接收到2个MSS后(或者对端有数据要发送)会发送一个ack,nagle的理解有问题,再看看吧
HymanLiuTS 2016-10-19
  • 打赏
  • 举报
回复
引用 1 楼 codingMozart 的回复:
图1画错了,Nagle在接收到2个MSS后(或者对端有数据要发送)会发送一个ack,nagle的理解有问题,再看看吧
图1是我对Nagle算法的一个简单解释,只是说明接受到对端的ACK后会发送下一个数据包,我知道Nagle算法还有很多触发包发送的条件,比如包长度大于MSS,等待ACK超时等等。 Nagle在接收到2个MSS后(或者对端有数据要发送)会发送一个ack?这句话不是很理解?能否解释下。。。。

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧