以前只是看过Nagle算法,知道在TCP和SCTP中有这个东西。没想到今天真的在产品中碰到了,而且是产品的正式测试中发现的。Nagle算法主要是为了避免给网络上发生大量的小包数据而采用的算法,以SCTP为例,就是在发生小包数据时,SCTP底层并不是直接发送,而是放到一个发生队列中,这个发送队列什么时候被调呢?一是前面数据的DACK返回了,二是有多个小包数据积攒起来了,达到链路发生的最大值了,就可以发送了;三就是前面数据发送超时了,需要重发时;四就是其他的控制数据需要进行发生时。
SCTP中默认是采用Nagle算法的,但是今天的产品测试中需要数据包之间时序非常及时,因此需要将其关闭掉,使用setsockopt关掉就可以了。定位解决问题还是需要仔细分析,这样才能及时地找到问题的所在,并且采用合理的方式方法。