Nagel算法和CORK算法的定义
- tcp_nodelay:
禁止nagle算法 - TCP_COKR:
在收到的TCP报文不足一个MSS时等待应用层的更多数据,并把这些数据组合到同一个TCP报文中发送的算法。
Nagel算法和CORK算法的相同点
- 二种算法都是在TCP发送端设置的选项,
- 二种算法默认都是开启的,
- 二种算法的目标都是减少网络上的小报文的数量
Nagel算法和CORK算法的区别
- Nagel算法的核心是:
保持网络上没有收到应答的小报文分组的数量<=1 - TCP_CORK算法的核心是:
即使已经收到了所有小报文分组的应答,TCP发送方也会等待,直到超时(200ms)或者等待发送的数据长度超过1个MSS才发送数据 - 减少网络上小报文的数量的方法不同:
Nagle算法主要避免网络因为太多的小包而拥塞,而CORK算法则是通过增加报文的平均有效载荷数据的长度来为了提高网络的利用率,使总体上协议头占用的比例尽可能的小
测试场景建议
综上所述,在进小分组报文的测试时,一般需要同时关闭以下4个选项,以保证所有TCP报文能及时发送并被及时应答
-
TCP发送端
a) Nagle算法, TCP_NODELAY-------------默认关闭TCP_NODELAY,就是说默认开启了Nagle算法
b) TCP_CORK----------------------------------默认关闭TCP_CORK,就是说默认来一个包发一个包,不会等待着去合并多个包 -
TCP接收端
a) 延时应答
b) 稍带应答