Nagle算法

Nagle算法简介

只有收到前一数据的ACK消息时,Nagle算法才发送下一数据。
在这里插入图片描述
TCP默认开启Nagle算法进行数据传输,因此最大限度地进行缓冲,直到收到ACK。 如上图所示,为了发送字符串"Nagle",将其传递到输出缓冲,此时第一个字母"N"之前没有其他数据(没有需接收的ACK),因此立即传输。之后开始等待字母"N"的ACK消息,等待过程中,剩下的"agle"填入输出缓冲。接下来,收到字母"N"的ACK消息后,将输出缓冲的"agle"装入一个数据包发送。也就是说共需传递4个数据包以传输1个字符串。
未开启Nagle算法时,假设字母"N"到"e"依序传到输出缓冲,此时的发送过程与ACK接收与否无关,因此数据到达输出缓冲后将立即被发送出去。也就是说共需传递10个数据包以传输1个字符串。
由此可知,不使用Nagle算法将对网络流量产生负面影响,即使只传输一个字节的数据,其头信息都有可能是几十个字节。因此,为了提高网络传输效率,必须使用Nagle算法。

何时不采用Nagle算法

当网络流量未受太大影响时,不使用Nagle算法要比使用它时传输速度快。

最典型的是"传输大文件数据",将文件数据传入输出缓冲不会花太多时间,因此,即使不使用Nagle算法,也会在装满输出缓冲时传输数据包,这不仅不会增加数据包的数量,反而会在无需等待ACK的前提下连续传输,因此可以大大提高传输速度。

禁用Nagle算法

Nagle算法使用与否在网络流量上差别不大,使用Nagle算法的传输速度更慢。

禁用方法:将套接字可选项中的TCP_NODELAY改为1(真)即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值