2016年2月6日土曜日

NSX for vSphereを見てみよう(6) VXLANを学ぼう(その1)

さて、ここまで来たら少しプロトコルの話をしたいと思います。
VXLANの仕様について見ていきましょう。

VXLANは、VLANの4096枯渇問題を解決するものだとお伝えをしました。
となると、イメージするのはQinQのような、VLANを更に上位で拡張するような仕組みにイメージするかもしれませんが、これは違います。

その鍵は、「VXLANを使うとL3 over L2でL2延伸が可能」という点にあります。
VXLANには、
  • VLANの4096枯渇問題を解決
  • VXLANを使うとL3 over L2でL2延伸が可能
この2つを同時に解決するのがVXLANです。

つまりL2のフレームをL3パケットに包んで通信をするというのがVXLANの仕様です。


以下は、VXLANのパケット構造です
これを見るとわかるのですが、元のL2フレームをそのままカプセル化して、VXLANの必要ヘッダーを追加した上で、UDPパケットに変換されていることがわかります。IPSECのように暗号化などはされずそのまま包んでいるだけです。

だいたい見当が付いてきたと思います。
L2のフレームをUDPパケットに変換するのが、VXLANの仕様で有り、このVNIに16bitの保有が有り、VLANのように4Bitではないところが特徴です。

そう考えると、じゃあ、L2フレームでVLANIDが付与したパケットを流せば、4096×1677のネットワークが構成できるじゃないかと思いますが、それは基本しないようにというRFCの指針が記載されています。

この構造で、QinQのようなVLANをカプセル化するものではなく、このカプセル化する際のVLAN-IDのような役割をはたすVNI(VXLAN Network Informatio)が、1677万程度の付与できるというのがポイントになります。

では、ここでVXLANにおけるポイントをさらに押さえていきましょう。

<Point>
  1. UDPで利用するポートは8472(RFCで定義される4789ではない)
  2. VXLAN通信を行う通信機器は、MTUが1600以上(JumboFrame)対応の機器が必要
  3. VXLANパケットは、フラグメントできません。(DFビットが立っています)

まず1つめですが、NSX for vSphereは、RFC準拠のポート4789ではなく、まだドラフト時代に利用していた、8472/UDPを利用しています。

続いて2つめですが、VXLANは、普段のL2フレームをそのままカプセル化するというお話をしました。 通常、L2のフレームは1518byteですので、これに約40byteが付加されます。
そのため、VXLANを転送するネットワーク物理層が、1500Byteまでしか転送できないとなると、既存L2フレームにVXLANヘッダーが乗ったパケットはそのままでは送信できません。

ここで3つめです。サイズの大きなパケットの場合、フラグメントという形でパケットを分割する仕組みが有りますがVXLANパケットは、DFビットが立っているためフラグメントつまり分割は許可されていません。
仮に分割ができた場合の話しですが、VXLANパケットが任意の場所で分割されると、元のL2フレームが意図されない形で分割され、UDPでカプセル化されたます。UDPは、TCPのように完全性がないため、VXLANパケットの複合化をするときに、正しく複合できない可能性が出てくるためです。

ここで、わかったこととして、L2のフレームをL3に変換してくれるものが必要になると言うことですね。この変換する仕組みをVTEPといいます。VTEPで変換されUDPになったパケットは、NSX for vSphereで設定した、ESXiのVMKernelポートを利用して、外に出て行くことになります。


VXLANの構造は、わかりましたね。
次は、カプセル化した際におけるMACテーブルやARPテーブルについて考えてみましょう。





0 件のコメント:

コメントを投稿