web-dev-qa-db-ja.com

Linuxの仮想ネットワーキングデバイス

誰かがvethペアとタップインターフェイスの違いは何か、そしてこれらのデバイスがどのようにLinuxブリッジまたはopenvswitchに接続するかを詳細に説明できますか?.

私はこれを見つけました:「Vethはペアで作成された特別なネットデバイスです。トラフィックの方向を変更する方法と考えています。つまり、アウト方向のトラフィックがLinuxプロトコルスタックからvethデバイスに送信されると、送信されました。別のミラーvethデバイスに送信するため、ミラー1はインダイレクショントラフィックとして扱い、Linuxプロトコルスタックに戻してさらに使用します。

タップデバイスは論理ネットデバイスですが、他のデバイスとは異なります。これにより、ユーザースペースプログラムがトラフィックをLinuxプロトコルスタックに直接注入し、スタックからトラフィックを取得できます。ユーザー空間のレベル2(またはレベル3のtunデバイス)でLinuxプロトコルスタックへのトンネルを開きます。スタックは、方向トラフィックと同様にユーザー空間からのデータを考慮します。

しかしそれは私に全体像を与えませんでした。

前もって感謝します!

20
paraflou

Ip tuntapを使用して作成されたLinuxタップインターフェイスは、linuxbridgesまたはopenvswitchにネットワーク名前空間をアタッチするために使用できないため、vethペアに依存する必要があります。

仮想イーサネットインターフェイスはペアで提供され、それらはチューブのように接続されます。1つのvethインターフェイスに含まれるものはすべて、他のピアvethインターフェイスから出てきます。その結果、vethインターフェースネットワーク名前空間に接続するを使用して、物理インターフェースが存在する「デフォルト」または「グローバル」名前空間を介して外部に接続できます。

Vnet0などのTAPデバイスは、KVMおよびXenのようなハイパーバイザーが仮想ネットワークインターフェイスカード(通常はVIFまたはvNICと呼ばれる)を実装する方法です。) TAPデバイスへのゲストオペレーティングシステムによって受信されます。

16
Viswesn

これらの仮想ネットワークアーティファクトの目的は同じです。ただし、微妙な違いがあるため、さまざまな状況で使用されます。

  1. [〜#〜] tap [〜#〜]:ユーザー空間のアプリケーション/ VMはイーサネットインターフェイスをタップインターフェイスに読み書きでき、ホストカーネルに到達して処理されます物理(eth0など)ポート経由でカーネルに到達した他のイーサネットフレームと同様に。ソフトウェアブリッジに追加することもできます(例:linux-bridge)

  2. [〜#〜] veth [〜#〜]:通常、転送するインターフェースを「把握する」(より適切なフレーズがないため)2つのエンティティを接続しようとする場合に使用されます。フレームを受信します。これらのエンティティーは、コンテナー/ブリッジ/ ovs-switchなどです。docker/ lxcコンテナーをOVSに接続するとします。 vethペアを作成して、最初のインターフェースをdocker/lxcに(たとえば、physインターフェースとして)プッシュし、他のインターフェースをOVSにプッシュできます。 TAPではこれを行うことはできません。

OVSを使用する場合、VETHを使用し、タップしない必要があると誤解しないでください。 OVSでは、tapインターフェイスとまったく同じように動作する内部ポートをいつでも作成できます。しかし、これは常に可能であるとは限りません。たとえば、タップのようなインターフェースを合成できないエンティティに接続する場合などです。つまり:

$ ovs-vsctl add-port ovs-switch-name tap0

これで、タップインターフェイスと同じようにtap0を使用できます。

14