2009-06-24 14 views
1

私は、アイドルな興味からNagleのアルゴリズムを研究してきました。私はそれの背後にある基本的なコンセプトを理解しています(TCPパケットには、特に小さなペイロードを扱うときにかなりのオーバーヘッドが含まれます)。Nagleのアルゴリズムについて不明確

私はウィキペディアでthis articleを読んでいましたが、私はまだそれがどのように動作するかは不明です。 Telnet接続の例を考えてみましょう。接続が確立され、入力を開始します。たとえば、3文字(たとえばcat)とヒットリターンを入力したとします。今私達はまだわずか5バイトであるcat\r\nを話している。私たちが送信するのに十分なバイトを待ち行列に入れるまで、このメッセージは送信されないと思うでしょう。は直ちに(ユーザーの視点から)送信されます。catはすぐに返されます。

ここでは、アルゴリズムがどのように動作するかについての基本的な誤解があります。具体的には、「確認されていないデータがパイプに残っていれば、すぐにエンキューします。

+0

この記事では、問題になっているtelnetセッションについて説明しているので、すぐに送信されます。 – cloudhead

答えて

5

サーバからの前回のメッセージにサーバがすでに応答している場合(または、このセッションで初めてサーバにコンタクトした場合)にのみ、データがすぐに送信されます。したがって、サーバーが頻繁に応答して応答が遅くなると、あまりにも多くのパケットでそれを避けるために、データは送信される前に最大パケットサイズまでキューに入れられます。

したがって、データがすぐに送信されるかどうかは、以前のメッセージのコンテキストで判断できます(存在する場合)。

+0

NagleのアルゴリズムはSYN/ACKパケットには適用されないと思います。つまり、遅延なしで送信しますか? – FreeMemory

+0

setsockoptの呼び出しでTCP_NODELAYオプションを使用してnagleアルゴリズムを無効にすることができます。 – bill

0

this postを読んで、それはかなり深く、私にとって多くのことを明らかにしました。

関連する問題