視点: どこまでも仮想ネットワーク

パケット交換ネットワークが考案されたのとほぼ時を同じくして、仮想回線をはじめとする仮想化 (virtualization) のアイデアが生まれた。しかしネットワークを仮想化するとは正確に何を意味しているのだろうか?

理解を助ける例として仮想メモリ (virtual memory) を考えよう。仮想メモリは大きくてプライベートなメモリプールという抽象化を提供するが、実際の物理メモリは多くのアプリケーションによって共有され、仮想メモリで見えるようになるプールと比べてはるかに小さい。この抽象化があるおかげで、プログラマーは十分な量なメモリが存在し、他に誰もメモリを使っていないという錯覚の元でプログラムを書けるようになる。一方で「縁の下」ではメモリ管理システムが仮想メモリと物理リソースの対応付けや衝突の回避といった処理を行う。

これと同様に、サーバーの仮想化は物理マシンと同じ機能を持つ VM (virtual machine, 仮想マシン) を提供する。ここでも、単一の物理サーバーで複数の VM をサポートでき、VM 上のオペレーティングシステムとユーザーは VM が物理リソースにマップされていることを知らずに幸せに時を過ごす。

仮想化では、計算リソースが仮想化される前と同じ抽象化とインターフェースを持つことが重要となる。なぜ重要かと言えば、この条件が成り立つとき仮想化された計算リソースのユーザーは何も変えないで済むからである ── 計算リソースの忠実な複製がユーザーに渡される。また、仮想化は異なるテナント (tenant, ユーザーの別名) が互いに干渉できないことも意味する。では、ネットワークの仮想化ですべきことは何だろうか?

第 3.3.9 項で説明したように、VPN は仮想回線の初期の成功例だった。キャリアは VPN を用いることで、実際には内部の回線とスイッチを他の多くのユーザーと共有するにもかかわらず、企業顧客に独自のプライベートネットワークを持っていると錯覚させることができる。しかし VPN はアドレス方式とルーティングテーブルといった一部のリソースだけを仮想化する。現在「ネットワークの仮想化」として一般に理解されている技術はさらに進み、ネットワークの全ての要素を仮想化する。これは仮想ネットワークが物理ネットワークの基本的な抽象化を全てサポートするべきであることを意味する。この意味でネットワークの仮想化はマシンの仮想化と同義語であり、CPU、ストレージ、I/O といったサーバーのリソースを全てサポートする。

ネットワークの (完全な) 仮想化において、L2 ネットワークの仮想化には第 3.2.5 項で説明した VLAN が通常使われる。VLAN は企業が一部のグループ (部署や研究所) を隔離するための非常に優れた手段であることが判明している。VLAN は各グループに見かけ上の専用プライベート LAN を提供する。VLAN はクラウドデータセンターにおける L2 ネットワークの仮想化手法としても有望視されていた。しかし問題が一つある: VLAN は 4096 個しか作ることができず、これではクラウドがホストする全てのテナントに対応できない。さらに、クラウド内の仮想化された L2 ネットワークは VM を実行する物理マシンではなく VM を接続しなければならず、事態は複雑になる。

この問題を解決するために、VXLAN (Virtual eXtensible LAN, 拡張可能仮想 LAN) と呼ばれる規格が策定された。拡張されたイーサネットフレームを仮想イーサネットフレームとする VLAN のアプローチと異なり、VXLAN は仮想イーサネットフレームを UDP パケット中に入れてカプセル化する。これは VXLAN ベースの仮想ネットワークが IP ベースのネットワークの上で実行されることを意味する。このため VXLAN ベースの仮想ネットワークはオーバーレイネットワーク (overlay network) と呼ばれる。VXLAN では一つのクラウドテナントが独自に複数の VLAN を持つこともできるので、テナントは内部トラフィックを分離できる。なお、IP ベースのネットワークは下位のイーサネット (あるいは下位のイーサネットの VLAN の一つ) の上で実行されるので、「VLAN にカプセル化された VXLAN オーバーレイにカプセル化された VLAN」が存在できる。

仮想化に関する強力な事実として、仮想化を正しく行えば、ある仮想化リソースを別の仮想化リソースの中に入れ子にできることがある。なぜなら、仮想化リソースは物理リソースと同じように振る舞い、その物理リソースは仮想化できるのだから! 言い換えれば、仮想リソースを仮想化できたなら、それは最初の物理リソースを上手く仮想化できていることの何よりの証明となる。世界を支える亀の神話を思い出せば: どこまでも仮想ネットワークがあるIt's virtual networks all the way down.

UDP/IP パケットにカプセル化される VXLAN ヘッダー
図 96.
UDP/IP パケットにカプセル化される VXLAN ヘッダー

図 96 に示すように、実際の VXLAN ヘッダーは単純である。ヘッダーには 24 ビットの VNI (virtual network identifier, 仮想ネットワーク識別子) と数個のフラグおよび予約ビットが含まれる。加えて UDP (第 5.1 節) の送信元と宛先ポートフィールドに特別な設定が必要になる。宛先ポート 4789 は公式に VXLAN 用に予約されている。仮想 LAN と仮想ネットワークを一意に識別する方法 (それぞれ VLAN タグと VXLAN VID) を用意するのは難しくない: カプセル化は仮想化の最も基本的な機能である。カプセル化されたパケットがどのユーザーに属するかを伝える識別子を追加するだけで済む。

難しいのは、仮想ネットワークが仮想ネットワークの中に入れ子になる (カプセル化される) という考え方を理解することである。これはネットワークにおける再帰と言える。また、仮想ネットワークの作成、管理、移管、削除を自動化することも課題であり、この部分に関しては改善できる部分が現在でも多くある。この課題に対する取り組みは今後十年間のネットワーク研究における中心的な話題になるだろう。その研究の一部がプロプライエタリな場所で起こることは間違いないと考えられるものの、オープンソースのネットワーク仮想化プラットフォーム (Linux Foundation の Tungsten Fabric プロジェクトなど) も登場している。

さらに広い視点

次章の視点: クラウドに呑み込まれるインターネットを読めば、インターネットのクラウド化についてさらに知ることができる。

仮想ネットワークの変貌について学びたい場合は、次の文献を勧める:

広告