TcpSocket发送延时,Nagle算法

1. Nagle算法:

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


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

TcpSocket发送延时,Nagle算法_第1张图片

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

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

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


Linux
#include
int on = 1; 
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void *)&on, sizeof(int));  

你可能感兴趣的:(Qt,Linux)