不清楚Nagle的算法

时间:2009-06-24 19:31:49

标签: algorithm networking tcp

我一直在闲着好奇地研究Nagle的算法。我理解它背后的基本概念(TCP数据包包含大量的开销,特别是在处理小的有效负载时),但我不确定我是否实现了实现。

我正在维基百科上阅读this article,但我仍然不清楚它是如何工作的。我们以Telnet连接为例。建立连接,然后我开始输入。假设我输入三个字符(例如cat)并点击返回。现在我们正在谈论cat\r\n,它仍然只有5个字节。我认为这不会被发送,直到我们排队足够的字节发送 - 然而,确实立即发送(从用户的角度来看),因为cat立即被执行回击。

我认为我对这个算法是如何工作有一个基本的误解,特别是关于“如果管道中仍有未经证实的数据,入队,否则立即发送”的位。

2 个答案:

答案 0 :(得分:5)

仅当服务器已经响应您之前的任何消息(或者这是您在此会话中首次与其联系)时,才会立即发送数据。因此,当服务器变得更加繁忙且响应速度变慢时,为了避免使用过多的数据包淹没它,数据在发送之前会排队到最大数据包大小。

因此,无论是否立即发送数据,都可以在之前的消息(如果有)中确定。

答案 1 :(得分:0)

阅读this post,这是非常深入的,并为我澄清了许多事情。