开启Nagle算法后,如果输出缓冲区满了,会不会发送数据包

HymanLiuTS 2016-10-20 02:32:55
有没有谁研究过TCP中的Nagle算法,一直在找资料解决这个疑问:
开启Nagle算法后,如果输出缓冲区满了,会不会发送数据包?
...全文
247 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-10-20
  • 打赏
  • 举报
回复
一切以源代码为准。 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
eastfriendwu 2016-10-20
  • 打赏
  • 举报
回复
你这个问题跟tcp滑动窗口和流量控制有关吧。
如果接收方太忙,导致自己的接收缓冲区满了,
那发送方只能等待了。
HymanLiuTS 2016-10-20
  • 打赏
  • 举报
回复
引用 1 楼 eastfriendwu 的回复:
这是百度百科的 Nagle算法的规则(可参考tcp_output.c文件里tcp_nagle_check函数注释): (1)如果包长度达到MSS,则允许发送; (2)如果该包含有FIN,则允许发送; (3)设置了TCP_NODELAY选项,则允许发送; (4)未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;
我知道这个规则,我纠结的是对于输出IO一般输出缓冲区满了就会在屏幕打印,难道对于TCP通信不适合IO这个规则?
eastfriendwu 2016-10-20
  • 打赏
  • 举报
回复
这是百度百科的
Nagle算法的规则(可参考tcp_output.c文件里tcp_nagle_check函数注释):
(1)如果包长度达到MSS,则允许发送;
(2)如果该包含有FIN,则允许发送;
(3)设置了TCP_NODELAY选项,则允许发送;
(4)未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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