Nagle算法的基本定义是任意时刻,最多只能有一个未被确认的小段。 所谓“小段”,指的是小于MSS尺寸的数据块,所谓“未被确认”,是指一个数据块发送出去后,没有收到对方发送的ACK确认该数据已收到。
Nagle算法的规则(可参考tcp_output.c文件里tcp_nagle_check函数注释):
以上来自百度;
上周组内分享的时候发现,对于一个很小的http请求(返回值只有10字节以内),耗时始终都在200ms以上,而且是每次都出现的问题。经过定位最后发现是nagle算法引致的。
HTTP/TCP:
此时,应用程序向内核递交的每个数据包都会立即发送出去。需要注意的是,虽然禁止了Nagle 算法,但网络的传输仍然受到TCP确认延迟机制的影响。
通过设置TCP_NODELAY参数,就能避免发送小包出现200ms的延迟。是否启用nagle算法,这个就要根据具体的业务去选择了,很多公司会选择搭建多套服务器,提供不同的服务,各个服务器根据业务需求确定是否采用nagle算法