zeroman0 2013-12-18 09:21 采纳率: 100%
浏览 2075
已采纳

nagle算法疑问 tcp/ip nagle 网络

最近在学习tcp/ip,在拥塞控制部分出现了nagle算法,网上看了一些资料
http://b.baidu.com/view/2468335.htm

Nagle算法的基本定义是任意时刻,最多只能有一个未被确认的小段。 所谓“小段”,指的是小于MSS尺寸的数据块,所谓“未被确认”,是指一个数据块发送出去后,没有收到对方发送的ACK确认该数据已收到。
 Nagle算法的规则(可参考tcp_output.c文件里tcp_nagle_check函数注释):
(1)如果包长度达到MSS,则允许发送;
(2)如果该包含有FIN,则允许发送;
(3)设置了TCP_NODELAY选项,则允许发送;
(4)未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;
(5)上述条件都未满足,但发生了超时(一般为200ms),则立即发送。

问题:
关于nagle算法的第五点,假设有如下场景
client发送第一个字节package1(200ms超时)后,产生了第一个未确认ack,现假设网络异常,client迟迟未收到对package1的ack,但同时client这边产生了第二个字节需要发送,现在client端总共有2字节的待发送数据<mss(1500),经过一段时间后,package1的ack还未到达,但此时tcp缓冲区的2字节已经再次触发条件5,现在client端会发送新的package吗?如果发送后,未确认的ack数会变成2吗(违反nagle算法)?或者是进行了 tcp重新分组后,即使发送了这个两个字节的package未被确认ack仍然为1(怎么感觉这就是答案呢)?求大神解答,3Q

  • 写回答

1条回答 默认 最新

  • leehark 2014-02-05 06:07
    关注

    这个应该会触发TCP重传计时器超时而把第一个和第二个放在同一个包里重新传输吧?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误