【TCP/IP】Nagle算法

Nagle算法

1、为什么要引入Nagle算法

Nagle算法主要是为了防止网络连接中充斥着<MSS的分组。小的分组一方面会造成网络拥塞,另外一方面由于网络传输过程中,用户程序需要传递的内容需要附上TCP头和IP头封装成为TCP包/IP包,会造成资源浪费。为了解决这个问题,Nagle就提出一种算法(Nagle算法)。

2、Nagle算法的原理

该算法要求在TCP连接中,如果还有未被确认的分组,在收到ACK确认包之前禁止发送其他小的分组。

该算法的伪码如下:


if there is new data to send
  if the window size >= MSS and available data is >= MSS
    send complete MSS segment now
  else
    if there is unconfirmed data still in the pipe
      enqueue data in the buffer until an acknowledge is received
    else
      send data immediately
    end if
  end if
end if

由以上可以看出,Nagle算法适用于:发送发存在许多小的分组需要发送,接收方又能够及时发送ACK的场景。默认的TCP连接中,Nagle算法是打开的,为了能够禁止使用Nagle算法,你可以设置socket为TCP_NODELAY,从而能够保证,发送方的包及时地发送给接收方。

3、Nagle算法的利弊分析

利:很明显,可以减少网络中的小分组,保持较高的网络资源利用率。

弊:由于发送方会控制小的分组,并期望合并成为较大的分组一起发送给接收方,因此实时的单向的发送数据并及时获取响应的场景需要谨慎。另外,如果接收方设置了DELAY ACK,情况可能会比较糟糕:因为如果接收方设置了DELAY ACK,接收方接收到发送方发过来的小分组后,并不及时发送ACK,只有等到Delay ACK的Timer到期后,才会给发送方回ACK。

 

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bible_reader

如果觉得文章有用,欢迎打赏支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值