前两天看一些关于网络编程的博客,提到了长连接时小数据包发送出现的延时问题。今天打算把这块大概整理梳理一下。
TCP_NODELAY与Nagle算法
问题描述:在tcp长连接时出现发送延时,且延时基本固定在40ms上。那么最有可能的问题就是没有设置TCP_NODELAY参数。关于这个参数,我们要先了解一下Nagle算法。Nagle算法是拥塞避免相关的算法,在tcp中默认启用,目的是解决大量小数据包造成的带宽浪费。
我们知道,tcp数据包的结构是至少20字节的TCP头+传送内容,当然,还有更前面的20字节的IP头部。显而易见的,当包中传输内容越少,头部占的比重就越大,当出现大量有效报文长度很小(如1字节)的包时,便会造成网络拥塞。于是我们便需要一个解决方案,就是Nagle算法。