TcpSocket发送延时,Nagle算法

1 篇文章 0 订阅

1. Nagle算法:

是为了减少广域网的小分组数目,从而减小网络拥塞的出现;
该算法要求一个tcp连接上最多只能有一个未被确认的未完成的小分组,在该分组ack到达之前不能发送其他的小分组,tcp需要收集这些少量的分组,并在ack到来时以一个分组的方式发送出去;其中小分组的定义是小于MSS的任何分组;
该算法的优越之处在于它是自适应的,确认到达的越快,数据也就发哦送的越快;而在希望减少微小分组数目的低速广域网上,则会发送更少的分组.


2. 禁止Nagle和开启Nagle算法发送数据与确认示意图:



开启Nagle算法会导致TCP发送数据必须满足2个条件中的任意一个才会将数据发送出去:
1、达到TCP最大包长度(1500字节)
2、达到时间(测试下来是200ms)

这样在实时控制系统中,实时性不能得到满足,因此必须关闭Nagle算法。

关闭Nagle算法
Qt
TcpSocket tcpSocket;
tcpSocket.setSocketOption(QAbstractSocket::LowDelayOption, 1);


Linux
#include <netinet/tcp.h>
int on = 1; 
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void *)&on, sizeof(int));  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值