TCP连包问题解决:Nagle算法

在使用LWIP创建TCP时,发送比较快时发现出现连包现象,同样的发送速度UDP却没有出现。这是为什么呢?

最终定位的Nagle算法:
TCP/IP协议中,Nagle算法是默认开启的。那么什么是Nagle算法呢?Nagle算法通过减少需要传输的数据包,来优化网络。在内核实现中,数据包的发送和接受会先做缓存。启动TCP_NODELAY,就意味着禁用了Nagle算法。当我们不设置TCP_NODELAY时,就默认打开了Nagle算法。这个时候,我们发送的数据将会在写缓存中保存,直到保存到一定量之后,数据才会被发送。

怎么关闭Nagle算法:
在创建TCP时
int chOpt=1;//1 立即发送单个tcp包 0组包延迟发送tcp包
int nErr=setsockopt(*fd,IPPROTO_TCP,TCP_NODELAY,&chOpt,sizeof(int));

OVER

猜你喜欢

转载自blog.csdn.net/qq_43448742/article/details/107314650