TcpSocket发送延时,Nagle算法
2016-12-27 12:30
417 查看
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));
是为了减少广域网的小分组数目,从而减小网络拥塞的出现;
该算法要求一个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));
相关文章推荐
- GCDAsyncSocket实现TCP连接怎么设置发送数据延时
- 高级UIKit-09(TCPSocket发送文件、上传和下载)
- socket 发送 TCP和UDP方式
- 13-socket的实践到内核--TCP的socket数据的发送
- Socket编程 (连接,发送消息) (Tcp、Udp) ,这个是同步,跟上一篇差不多
- 黑马程序员--Java基础学习之网络编程(TCP、UDP、Socket、模拟发送和接收数据)
- C#.net同步异步SOCKET通讯和多线程总结(5)tcp发送和接受的代码
- C#异步SOCKET发送帮肋类,支持UDP,TCP
- java 网络 TCP客户端 发送数据 Socket
- tcp socket发送缓冲区、接受缓冲区、滑动窗口协议之间的关系
- tcp socket的发送与接收缓冲区 .
- TCP socket的发送与接收缓冲区
- C# Socket tcp 发送数据大小问题
- QT tcpsocket 发送/接收数据
- TCP确认延时和Nagle算法
- tcp socket客户端发送请求连接http服务
- socket 编程入门教程(一)TCP server 端:7、接收与发送
- socket 编程入门教程(一)TCP server 端:7、接收与发送
- TCP-socket发送结构体类型数据
- MFC中CAsyncSocket实现TCP socket发送消息