2

TCPをオーバーレイするカスタムプロトコルがあります。これは次のように説明できます。-

クライアントはパケットAをサーバーに送信します。サーバーはパケットAをACKSします。クライアントはパケットBを送信します。

つまり、どの時点でも、未確認のパケットは1つだけです。したがって、メッセージをできるだけ速く送信するために考慮される要素は次のとおりです。

  1. パケットが宛先に到着するまでの時間。これは、TCPによって実行される断片化の量が最小であることを意味します。パケットが5つのセグメントではなく単一のセグメントに到着できる場合、サーバーはより迅速に応答できます。

  2. そのパケットに対してサーバーによって実行される作業の単位。現時点では、この点に焦点を当てていませんが、最終的にはそれに触れます。

  3. また、損失率はごくわずかであると仮定します。

  4. Nagleは無効になっています。

  5. 通常のパケットサイズは1KBから3KBまでさまざまです。

  6. 帯域幅は1Gb/秒です

最大のメッセージサイズ(3KB +ヘッダー)に等しいMTUを構成すると、1秒間に送信できるメッセージの数に影響するはずだと思います。私の質問は、MTUの変更に悪影響があるかどうかです。このアプリケーションは、管理された環境のLAN内で実行されます。

または、フラグメント化しないフラグを設定した場合、上記の変更と同等ですか?

4

2 に答える 2

4

まず、MTUとMSSの違いを明確にしましょう。これらはスタックの異なるレイヤー(2と3)に属しています。

TCP / IPは非常に残念なレイヤードケーキであり、どちらも断片化をサポートしますが、異なる方法であり、この問題については協力していません。

IPフラグメンテーションは、TCPが認識していないものです。実際、IPフラグメントの1つが失われた場合、シリーズ全体が失われたと宣言されます。TCPの場合はそうではありません。同じTCPストリームの一部であるIPデータグラムの1つが失われ、それらがTCPによってフラグメント化された場合、失われた部分の再送信のみが必要です。

この混乱の主な理由は、ルーターが、上位(TCP)プロトコルを理解していなくても、 MTUが異なる2つの物理ネットワーク間でインピーダンス整合できる必要があるためです。

現在、すべての最新のネットワークは「ジャンボフレーム」をサポートしています(ジャンボフレームを送信できるようにNICを構成する必要があります。すべての最新のNICは、常に最大90xxバイトのフレームを受信できます)。

いつものようにMTUを増やすと、

  • MSSを増やさない限り役に立たない
  • パフォーマンス(帯域幅)を向上させ、
  • パフォーマンスを損なう(最初のバイトまでのゼロロードレイテンシ)

たとえば、Gigalinxの実装やGigEビジョンなどの一部のアプリケーションでは、MTUを増やす必要があります。高速ネットワークでは、1500バイトのMTUのオーバーヘッドは耐えられません。

アーキテクトとして、自分自身に問うことは、アプリケーションが実際に何をしているのかということです。「関連するパケットサイズ」がある場合、「最初の3kBのデータが受信されるまでは、残りのデータとは何の関係もありません」という意味で、この小さなパフォーマンスエッジが本当に必要な場合は、MTUを増やします。その前に、よりイーサネットに適したプロトコルを優先してTCPを完全に削除することを検討してください。もちろん、自分で実装するのではなく、ZeroMQのような適切に機能するものを選択してください。

2番目の質問:断片化しないでくださいはIP設定です。通常、異なるMTUのネットワークと一致することが期待されるルーターでのみ役立ちます。「他のネットワークに中継できない限り、パケットを破棄する」という意味です。これが時々当てはまる場合、TCPはこの層を越えて機能することができません。再送信を試みて何度も失敗し、最終的には切断され、それ以降の動作はアプリケーションの実行内容によって異なります。これはインターネット上の典型的な状況であり、公共の誤って構成されたWi-Fiネットワークとホームネットワークがあります。Facebookを閲覧することはできますが、実際にはYouTubeで何も見ることができません。これが理由です。ネットワーク管理者はその理由を知ることは決してありません。

于 2012-11-10T22:27:15.420 に答える
1

MSS = 最大セグメント サイズ = 1 つの TCP パケットで送信されるデータの量。

MSS を下げると、データがより多くの TCP パケットに断片化されるため、パフォーマンスが低下します。

MSS を正しい値よりも大きくすると、リンク層 (イーサネット) でフラグメンテーションが発生します。

TCP はすでに (接続ごとに) フラグメンテーションを引き起こさない最大の MSS を見つけようとしています。これが失敗しない限り (失敗しない限り)、この値をオーバーライドする必要はありません。リンク層の断片化は避けるべきです。節約できることはほとんどなく、パフォーマンスも簡単に低下する可能性があります。

何をしているのかわからない限り、MSS に触れないでください。それには正当な理由があります。

于 2012-11-10T21:35:25.067 に答える