Linuxの仮想ネットワーク-概要

18137 ワード

テキストhttps://sheepbao.github.io/post/virtual_network_in_linux/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
Linuxの仮想ネットワーク-概要
Posted on August 26, 2017
Linuxの仮想ネットワーク-概要
引用する
クラウドコンピューティングの勃興に伴い、コンピュータの仮想化は空前の熱に達し、コンピュータの仮想化はサーバー負荷の能力を強化し、コンピュータ資源をより効果的に利用した.
Linuxの実際のネットワークデバイス
Linuxのネットワークデバイスは双方向のパイプのようで、データは一方から入って、もう一方から出て、肝心なのはこの2つのパイプが何なのかを見ますか?実際のネットワークデバイスでは、下の図のeth 0のように、1つはネットワークプロトコルスタックであり、もう1つはネットワークカードである.ユーザがデータを送信する際にsocket api呼び出しを経てLinuxネットワークプロトコルスタック処理に入り,Linuxネットワークデバイスに入り,最後にネットワークカードに入り,受信データであれば逆になる.
+-------------------------------------------+
|                                           |
|        +-------------------+              |
|        | User Application  |              |
|        +-------------------+              |   
|                 |                         |     
|.................|.........................|
|                 ↓                         |     
|           +----------+                    |     
|           | socket   |                    |     
|           +----------+                    |     
|                 |                         |     
|.................|.........................|
|                 ↓                         |     
|      +------------------------+           |     
|      | Newwork Protocol Stack |           |     
|      +------------------------+           |     
|                 |                         |     
|.................|.........................|
|                 ↓                         |     
|        +----------------+                 |     
|        |      eth0      |                 |     
|        +----------------+                 |     
|  192.168.0.11   |                         |
|                 |                         |
|                 |                         |
+-----------------|-------------------------+
                  ↓
          Physical Network

Linuxの仮想ネットワークデバイス
TAPデバイス、TUNデバイス、VETHデバイス、Bridgeデバイス、Bondデバイス、VLANデバイス、MACVTAPデバイス、
TAP/TUN設備
TAP/TUNデバイスは、ユーザ状態プログラムをカーネルプロトコルスタックにデータを注入するデバイスであり、TAPは2層で動作し、TUNは3層で動作し、TAP/TUNの両端はそれぞれカーネルネットワークプロトコルスタックとユーザ層であり、プロトコルスタックの一部のパケットをユーザ空間のアプリケーションに転送し、ユーザ空間のプログラムにパケットを処理する機会を与える役割を果たす.TAPデバイスが作成されると、Linuxデバイスファイルディレクトリの下に対応するcharデバイスが生成され、ユーザプログラムは通常のファイルを開くようにこのファイルを開いて読み書きすることができる.write()操作を実行すると、データはTAPデバイスに入り、Linuxネットワーク層にとって、TAPデバイスがパケットデータを受信したことに相当し、カーネルにそれを受け入れるように要求し、通常の物理ネットワークカードが外部からパケットデータを受信したように、実際にはLinux上のユーザプログラムからデータが受信されている.Linuxはこのデータを受信すると、ネットワーク構成に従って後続処理を行い、ユーザープログラムがLinuxカーネルネットワーク層にデータを注入する機能を完了します.ユーザプログラムがread()要求を実行すると、TAPデバイスに送信される必要があるデータがあるか否かをカーネルに問い合わせることに相当し、ユーザプログラムに取り出してTAPデバイスの送信データ機能を完了する場合がある.TAPデバイスの1つのイメージに対する比喩は、TAPデバイスを使用するアプリケーションが別のコンピュータに相当し、TAPデバイスは自機のネットワークカードであり、彼らの間に接続されていることである.アプリケーションはread()/write()操作により、ネイティブネットワークコアと通信します.
 User Application     :1->2->3->4->5-6->7->8
+----------------------------------------------------------------+
|                                                                |
|  +--------------------+      +--------------------+            |
|  | User Application A |      | User Application B |1                    | 5                 |     |
|...............|......................|...................|.....|
|               ↓                      ↓                   |     |
|         +----------+           +----------+              |     |
|         | socket A |           | socket B |              |     |
|         +----------+           +----------+              |     |
|                 | 2               | 6                    |     |
|.................|.................|......................|.....|
|                 ↓                 ↓                      |     |
|             +------------------------+                 4 |     |
|             | Newwork Protocol Stack |                   |     |
|             +------------------------+                   |     |
|                | 7                 | 3                   |     |
|................|...................|.....................|.....|
|                ↓                   ↓                     |     |
|        +----------------+    +-----------------+         |     |
|        |      eth0      |    | tun/tap char dev|         |     |
|        +----------------+    +-----------------+         |     |
|    10.32.0.11  |                   |   192.168.3.11      |     |
|                | 8                 +---------------------+     |
|                |                                               |
+----------------|-----------------------------------------------+
                 ↓
         Physical Network

VETHデバイス
VETHデバイスは、通信データの方向を反転させ、送信する必要があるデータをカーネルネットワーク層に再送り込んで処理し、間接的にデータの注入を完了するように変換する役割を果たす.その2つのヘッダは、それぞれカーネルネットワークプロトコルスタックと別のVETHデバイスである.VETHデバイスは常にペアで現れ、一方の端に送られて送信を要求するデータは常に他方の端から要求を受け入れる形で現れる.この装置はユーザプログラムによって直接操作されることはできないが,使用は比較的簡単である.正しく作成して構成した後、その一端にデータを入力すると、VETHはデータの方向を変えてカーネルネットワークコアに送り込み、データの注入を完了します.反対側でこのデータを読むことができます.
+----------------------------------------------------------------+
|                                                                |
|       +------------------------------------------------+       |
|       |             Newwork Protocol Stack             |       |
|       +------------------------------------------------+       |
|              ↑               ↑               ↑                 |
|..............|...............|...............|.................|
|              ↓               ↓               ↓                 |
|        +----------+    +-----------+   +-----------+           |
|        |   eth0   |    |   veth0   |   |   veth1   |           |
|        +----------+    +-----------+   +-----------+           |
|192.168.1.11  ↑               ↑               ↑                 |
|              |               +---------------+                 |
|              |         192.168.2.11     192.168.2.1            |
+--------------|-------------------------------------------------+
               ↓
         Physical Network

Bridgeデバイス
まず、bridgeは仮想ネットワーク装置であるため、ネットワーク装置の特徴を有し、IP、MACアドレスなどを構成することができる.次にbridgeは仮想スイッチであり、物理スイッチと同様の機能を有する.通常のネットワークデバイスでは、両端のみが、一端から入ってきたデータが他端から出てきます.例えば、物理ネットワークカードが外部ネットワークから受け取ったデータはカーネルプロトコルスタックに転送され、プロトコルスタックから来たデータは外部の物理ネットワークに転送されます.bridgeとは異なり、bridgeには複数のポートがあり、データは任意のポートから入ることができ、入ってからどのポートから出るかと物理スイッチの原理の差は多くなく、macアドレスを見なければならない.
+----------------------------------------------------------------+
|                                                                |
|       +------------------------------------------------+       |
|       |             Newwork Protocol Stack             |       |
|       +------------------------------------------------+       |
|              ↑                                ↑                |
|..............|................................|................|
|              ↓                                ↓                |
|        +----------+                     +------------+         |
|        |   eth0   |                     |     br0    |         |
|        +----------+                     +------------+         |
| 192.168.3.21 ↑                                                 |
|              |                                                 |
|              |                                                 |
+--------------|-------------------------------------------------+
               ↓
         Physical Network

ここでは、前述したVETHデバイスを接続し、2つのVETHデバイスを起動し、図に示すようにBridgeデバイスに接続します.このとき、eth 0とveth 1はbr 0仮想ブリッジを介して接続されます.
+----------------------------------------------------------------+
|                                                                |
|       +------------------------------------------------+       |
|       |             Newwork Protocol Stack             |       |
|       +------------------------------------------------+       |
|            ↑            ↑                           ↑          |
|............|............|...........................|..........|
|            ↓            ↓                           ↓          |
|        +------+     +--------+     +-------+    +-------+      |
|        | .3.21|     | .3.101 |     |       |    | .3.102|      |
|        +------+     +--------+     +-------+    +-------+      |
|        | eth0 |     |   br0  || veth0 |    | veth1 |      |
|        +------+     +--------+     +-------+    +-------+      |
|            ↑                           ↑            ↑          |
|            |                           |            |          |
|            |                           +------------+          |
|            |                                                   |
+------------|---------------------------------------------------+
             ↓
     Physical Network

        ,   IP      192.168,  .3.21     192.168.3.21

eth 0とbr 0のIPを単純なスイッチとして削除することもできます.下図のように.
+----------------------------------------------------------------+
|                                                                |
|       +------------------------------------------------+       |
|       |             Newwork Protocol Stack             |       |
|       +------------------------------------------------+       |
|                                                     ↑          |
|.....................................................|..........|
|                                                     ↓          |
|        +------+     +--------+     +-------+    +-------+      |
|        |      |     |        |     |       |    | .3.102|      |
|        +------+     +--------+     +-------+    +-------+      |
|        | eth0 ||   br0  || veth0 |    | veth1 |      |
|        +------+     +--------+     +-------+    +-------+      |
|            ↑                           ↑            ↑          |
|            |                           |            |          |
|            |                           +------------+          |
|            |                                                   |
+------------|---------------------------------------------------+
             ↓
     Physical Network

仮想ブリッジはhostと仮想マシンの1つの配置で、このように実際のスイッチと同じ効果を達成して、仮想マシンが送ったパケットは先にbr 0に着いて、それからbr 0からeth 0に渡して送信して、パケットはすべてhostマシンのプロトコルスタックを通過する必要がなくて、効率が高いです.
+----------------------------------------------------------------+-----------------------------------------+-----------------------------------------+
|                          Host                                  |              VirtualMachine1            |              VirtualMachine2            |
|                                                                |                                         |                                         |
|       +------------------------------------------------+       |       +-------------------------+       |       +-------------------------+       |
|       |             Newwork Protocol Stack             |       |       |  Newwork Protocol Stack |       |       |  Newwork Protocol Stack |       |
|       +------------------------------------------------+       |       +-------------------------+       |       +-------------------------+       |
|                          ↑                                     |                   ↑                     |                    ↑                    |
|..........................|.....................................|...................|.....................|....................|....................|
|                          ↓                                     |                   ↓                     |                    ↓                    |
|                     +--------+                                 |               +-------+                 |                +-------+                |
|                     | .3.101 |                                 |               | .3.102|                 |                | .3.103|                |
|        +------+     +--------+     +-------+                   |               +-------+                 |                +-------+                |
|        | eth0 ||   br0  ||tun/tap|                   |               | eth0  |                 |                | eth0  |                |
|        +------+     +--------+     +-------+                   |               +-------+                 |                +-------+                |
|            ↑             ↑             ↑                       |                   ↑                     |                    ↑                    |
|            |             |             +-------------------------------------------+                     |                    |                    |
|            |             ↓                                     |                                         |                    |                    |
|            |         +-------+                                 |                                         |                    |                    |
|            |         |tun/tap|                                 |                                         |                    |                    |
|            |         +-------+                                 |                                         |                    |                    |
|            |             ↑                                     |                                         |                    |                    |
|            |             +-------------------------------------------------------------------------------|--------------------+                    |
|            |                                                   |                                         |                                         |
|            |                                                   |                                         |                                         |
|            |                                                   |                                         |                                         |
+------------|---------------------------------------------------+-----------------------------------------+-----------------------------------------+
             ↓
     Physical Network  (192.168.3.0/24)

Bondデバイス
仮想ネットワークカードbondは、複数のネットワークカードを1つの論理ネットワークカードにバインドすることによって、ローカルネットワークカードの冗長性、帯域幅拡張、負荷等化を実現し、生産シーンでよく使われる技術である.その動作原理は簡単で、仮想ネットワークカードがハイブリッドモードをオンにし、複数のネットワークカードのデータを受信し、同じmacアドレスに変更することです.
+----------------------------------------------------------------+
|                                                                |
|       +------------------------------------------------+       |
|       |             Newwork Protocol Stack             |       |
|       +------------------------------------------------+       |
|                              ↑                                 |
|                              |                                 |
|       +------------------------------------------------+       |
|       |                    eth2 (one mac)              |       |
|       +------------------------------------------------+       |
|              ↑                                ↑                |
|..............|................................|................|
|              ↓                                ↓                |
|        +----------+                     +------------+         |
|        |   eth0   |                     |    eth1    |         |
|        +----------+                     +------------+         |
|              ↑                                 ↑               |
|              |                                 |               |
|              |                                 |               |
+--------------|---------------------------------|---------------+
               ↓                                 ↓
         Physical Network 1              Physical Network 2

VLANデバイス
VLANの概念に対する理解1.VLANはブロードキャストドメインを分離した.2.個別のVLANは、従来の交換イーサネットをシミュレートするので、VLANは1つの物理スイッチを1つ以上の論理スイッチに分割する.3.異なるVLAN間の通信には3層の参加が必要である.4.複数のスイッチがカスケード接続されている場合、VLANはVIDによって識別され、このIDは標準的なイーサフレームに挿入され、tagと呼ばれる.5.ほとんどのtagはエンドツーエンドではなく、一般的に上りの最初のVLANスイッチでtagを打って、下りの最後のVLANスイッチでtagを除去します.6.1つのデータフレームにtagを打たないとどのVLANに属するか区別できない場合にのみtagを打つことができ、取れる場合はできるだけ早くtagを取り除く.7.最終的にIEEE 802.1 qはVLANのtag問題を解決した.IEEE 802.1 qを除いて、残りは実装に関連しているが、CiscoとH 3 Cの実装は類似しているが、Linuxはそれらと大きく異なることができる.
##リファレンスリンクhttps://www.ibm.com/developerworks/cn/linux/l-virtual-networking/https://www.ibm.com/developerworks/cn/linux/1312_xiawc_linuxvirtnet/index.htmlhttps://segmentfault.com/a/1190000009491002https://wiki.linuxfoundation.org/networking/bonding