Nagle算法

Nagle算法

Content #

仔细看图1和图2( 延迟确认(Delayed Acknowledgment)),会发现每个SSH Request都是52字节,这表明它只包含了一个加密的字符。虽然在图1的12号到18 号包之间的100毫秒里(还不到一个往返时间),我一共输入了7个字符,但这些字符也被逐个打成小包了。能不能设计一个缓冲机制,把一个往返时间里生成的小数据收集起来,合并成一个大包呢?

Nagle算法就实现了这个功能。这个算法的原理是:在发出去的数据还没有被确认之前,假如又有小数据生成,那就把小数据收集起来,凑满一个MSS或者等收到确认后再发送。

下图是启用Nagle之后的新实验,第一个包把输入的第一个字符发出去了。在收到确认包之前的150毫秒里,又输入6个字符。这6个字符并没有被逐个发送,而是被收集起来,等收到2 号包之后,从3 号包里一起发送。这就是为什么3号包携带的数据长度是312字节。 和延迟确认一样,Nagle 也没有直接提高性能,启用它的作用只是提高传输效率,减轻网络负担。在某些场合,比如和延迟确认一起使用时甚至会降低性能。

From #

Wireshark网络分析就这么简单