-1

只是问,有谁知道 Nagle 算法是否是唯一用于数据包发送的算法?是否还有其他与 Nagle 相同的算法?如果没有,这些年来 Nagle 算法是否得到了改进?谢谢并向我发送资源将非常有帮助。

4

1 回答 1

1

与任何重要的程序一样,TCP 堆栈采用了大量的“算法”。可能最有趣的是拥塞避免算法,这些算法经过多年改进,但本质上仍然基于Van Jacobson慢启动算法。

Nagle 的算法——实际上更像是一种启发式算法——试图通过延迟发送小数据包直到可以发送合理数量的数据来提高 TCP 流量的效率。“写得不好”的应用程序可能一次发送几个字节,这会导致 TCP 连接上的大量开销,因为每个 TCP 数据包都包含一个 TCP 标头以及一个 IP 标头和一个用于底层网络的标头。有线传输协议。所有这些标头加起来,在数据包仅包含几个字节的情况下,标头加起来远远超过数据。

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

TCP 的经典参考资料是Richard Stevens在 1990 年代撰写的TCP Illustrated系列。尽管随着时间的流逝,这些书对于任何有兴趣了解互联网传输协议的人来说仍然是必不可少的读物,我认为这表明基本算法大多保持不变。

于 2014-08-31T06:30:36.173 回答