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 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿