質問ですが、ネーグルのアルゴリズムがパケット送信で使用される唯一のアルゴリズムかどうか知っている人はいますか? Nagle のアルゴリズムと同じアルゴリズムは他にありますか? 何もない場合、Nagle のアルゴリズムは何年にもわたって改善されてきましたか? 感謝し、ソースを私に送ってくれるととても助かります。
1 に答える
重要なプログラムと同様に、TCP スタックは多数の「アルゴリズム」を採用しています。おそらく最も興味深いのは、何年にもわたって改良されてきた輻輳回避アルゴリズムですが、基本的にはヴァン ジェイコブソンスロースタート アルゴリズムに基づいています。
Nagle のアルゴリズム (実際にはヒューリスティックに近い) は、妥当な量のデータが送信されるまで小さなパケットの送信を遅らせることで、TCP トラフィックをより効率的にしようとするものです。「不適切に作成された」アプリケーションは一度に数バイトを送信する可能性があり、TCP 接続に大量のオーバーヘッドが発生します。これは、すべての TCP パケットに TCP ヘッダーだけでなく、IP ヘッダーと低レベルのヘッダーが含まれているためです。 -有線伝送プロトコル。これらのヘッダーはすべて合計され、数バイトしか含まれていないデータ パケットの場合、ヘッダーはデータよりもはるかに多くなります。
残念ながら、不適切に作成されたアプリケーションだけがこの動作を示すわけではありません。アプリケーションの大部分は、人間と、自分が何をしているかを知りたくないという焦りに対処する必要があります。ssh セッションにいくつかの文字を入力すると、リモート マシンがすぐに文字を受け取り、作業を開始することが期待されます。これは、入力された文字が割り込み文字である場合に特に重要です。したがって、そのような場合、伝送のオーバーヘッドが発生しますが、すぐにデータを送信することが重要です。したがって、このオプションを設定することにより、接続で Nagle アルゴリズムを無効にすることができTCP_NODELAYます。(必要でない限り、これを行わないでください。)
TCP に関する古典的なリファレンスは、1990 年代にRichard Stevensによって書かれたTCP Illustratedシリーズです。時間の経過にもかかわらず、本は依然としてインターネット伝送プロトコルを理解することに関心のある人にとって不可欠な読書であり、これは基本的なアルゴリズムがほとんど損なわれていないことを示していると思います.