2011-09-12 6 views
0

関連するすべてのインターフェイス(ルータおよびブリッジ)がLRO/TSOのテクニックをサポートする必要があるのはなぜですか?TCP-LRO/TSOのテクニック

+0

私はそれが必要であるかどうかわかりません。そのような要件への参照を提供できますか? –

答えて

2

ルーターはありません。橋があります。

ネットワークに外部接続されている外部ルーター、ハブ、スイッチ、またはその他のものはTSOの影響を見ることはできません。TSOのデバイス内のインターフェイスのみが影響を受けます。

ルーターは、イーサネットケーブル、光ファイバーケーブル、ワイヤレス通信などでネットワークに接続された外部デバイスです。これらの通信メディアは、イーサネットの場合は803.2、ワイヤレスの場合は803.11などの国際標準に準拠していますハードウェアデバイスは、通信方法について非常に厳しい規則を持っています。

ブリッジは内部ソフトウェア構成であり、お使いのOSに固有のものです。

803.2(イーサネット)とLinuxホストを例に挙げてみましょう。

アプリケーションは、ソケットの作成を要求してから、大きなデータチャンクをソケットにプッシュします。 Linuxカーネルは、このデータをどのインタフェースで転送すべきかを決定します。カーネルは、このインタフェースのドライバを調べてその能力を判断します。インタフェースがTSO対応の場合、カーネルは単一の "テンプレート"ヘッダと膨大なデータ(1パケット以上)を持つs​​k_buffをインタフェースに渡しますドライバ。

のストレート最初のハードウェアのNICに標準インターフェースを考えてみましょう:

一部のインターフェイスが持っている偽のTSO(彼らセグメントドライバにおけるパケット)と、いくつかは、真のTSO(テンプレートヘッダとデータが渡されています最小限の変更でハードウェア)。この時点で、ドライバまたはNICハードウェアは、この大量のデータを複数の標準準拠の803.2イーサネットフレームに変換します。これは、ルータ、ハブ、スイッチ、モデム、または他のホストなどの外部デバイスワイヤー上に表示されます。

今度は、ソフトウェアブリッジの背後にあるいくつかのNICを考えてみましょう:

カーネルは、低レベルで各NICを認識しているものの、ネットワークスタックは、花嫁のだけ認識している、すべてのためだけの機能基盤となるNICはブリッジに渡されなければなりません。 sk_buffがブリッジに渡された場合、ブリッジ内のすべてのインタフェースは同じsk_buffを受け取ります。私たちはカーネルがもう一度大きなTSO sk_buffをブリッジに渡したと仮定します。基礎となるインターフェースのどれかがTSOをサポートしていない場合、そのパケットは問題のハードウェアNICによって破棄される可能性が非常に高いでしょう。要約すると

最悪のシナリオは、ブリッジは、繰り返し壊れたインターフェイスで同じデータチャンクを送信するために再試行されますされ、アプリケーションがあきらめることを決定するまで、ブリッジ全体がロックされます。最良の場合のシナリオでは、非TSO NICは単に死んでいるように見えます。つまり、NICがドライバに安全でないコードを持っていると、システム全体を停止させる可能性のあるセグメンテーションフォルトが発生する可能性があります。

関連する問題