Nagle算法是唯一具有相同用途的算法吗?

时间:2014-08-31 03:40:37

标签: algorithm packet nagle

只是问,有没有人知道Nagle的算法是否是唯一用于数据包发送的算法?还有其他算法和Nagle一样吗?如果没有,那么Nagle的算法多年来一直在改进?谢谢并向我发送消息来源非常有帮助。

1 个答案:

答案 0 :(得分:1)

与任何非平凡程序一样,TCP堆栈使用大量“算法”。可能最有趣的是congestion-avoidance algorithms,这些已经过多年改进,但仍基本上基于Van Jacobson慢启动算法。

Nagle算法 - 实际上更像是一种启发式算法 - 是通过延迟小数据包的发送直到可以发送合理数量的数据来使TCP流量更高效的尝试。 “写得不好”的应用程序可能一次发送几个字节,这会导致TCP连接上的大量开销,因为每个TCP数据包都包含一个TCP报头以及一个IP报头和一个低级别的报头。 - 线路传输协议。所有这些标题都会相加,而对于只包含几个字节的数据包,标题的总和远远超过数据。

不幸的是,不仅写得不好的应用程序会出现这种行为。一大类应用程序需要处理人类以及我们对看到我们正在做什么的不耐烦。当您在ssh会话中键入几个字符时,您希望远程计算机将立即接收字符并开始处理它们。如果输入的字符是中断字符,这尤其重要。因此,在这些情况下,即使存在传输开销,立即发送数据也很重要。因此,可以通过设置TCP_NODELAY选项在连接上禁用Nagle算法。 (除非你需要,否则不要这样做。)

关于TCP的经典参考是由Richard Stevens在20世纪90年代编写的 TCP Illustrated 系列。尽管时间已经过去,但对于任何有兴趣了解互联网传输协议的人来说,这些书仍然是必不可少的阅读材料,我认为这表明基本算法大部分都是完整的。