ネットワーク仮想化まとめ: VLANとオーバーレイ方式とホップバイホップ方式

# Overview
コンテナオーバレイネットワークについての論文を読んでいたところ、VLAN，VXLANについての理解が浅く再度調べ直すことがあった。そこで改めて自分で頭の中を整理する目的でQiitaに記事を書くことにした。

# VLANとは
VLAN (Virtual LAN)とは[ネットワークエンジニア御用達のサイト](https://www.infraexpert.com/study/vlanz1.html)にはこう書いてあった。
>VLAN（ Virtual LAN ）とは、物理的な接続形態とは独立して、仮想的なLANセグメントを作る技術です｡
>VLANはスイッチ内部で論理的にLANセグメントを分割するために使用されます。
>VLANを使用することでルータやL3スイッチと同じようにL2スイッチでもブロードキャストドメインの分割を行うことができます。

これを自分のような初学者でもわかりやすいように具体的に書き直してみる。
例えば以下のように会社のネットワーク10.0.0.0/8を小さなサブネットに分割する。
これにより4つの部署(営業部,、人事部、総務部、技術部)はそれぞれ10.0.0.0/10、10.64.0.0/10、10.128.0.0/10、10.192.0.0/10に分割される。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287300/d2594e32-ffd2-14e8-3f68-a2eeeab614d8.png">

これは県の行政区分を市区町村に分けるイメージである。この分割のメリットは2つある。1つ目はブロードキャストの領域(ドメイン)を小さくすることで余計な通信を防止し、フラッディングを防ぐことが出来る点である．フラッディングとはネットワーク機器のデータ転送方式の一種や、システムに許容量を超えるデータや処理要求が届き麻痺状態に陥る現象である。2つ目は他のサブネットからのアクセスを遮断しセキュリティを向上させることが出来る点である。

しかし、VLANには（1）スイッチの設定を手動で変更する必要があるなど設定作業が複雑，（2）VLANでは最大で約4000のネットワークしか構成できず，パブリッククラウドのような大規模環境での運用に向いていない、という制約があった。このような制約に対処するために新たなネットワーク仮想化技術が現れた。第一に仮想サーバを稼働するPCサーバにソフトを追加しVLANを使わない手法でネットワーク仮想化するオーバーレイ方式である。第二にOpenFlowに対応した物理/仮想スイッチを使うことで、VLANに代わる新しいネットワーク仮想化を実現できるようにしたものである。

# オーバーレイ方式
オーバーレイ方式は仮想スイッチとトンネル通信を利用して仮想ネットワークを作る技術である。これはIPのネットワーク上をL2のパケットをカプセル化して既存のネットワークに流す方式である。このプロトコルとして有名なものとしてVXLANがあげられる。本項ではVXLANを例にとって説明する。
これを以下のコンテナネットワークを用いて具体的に説明する。ホスト(10.1.2.3)上でコンテナA, Bが動いていて、ホスト(10.1.2.4)上でコンテナが動いていて、ホスト(10.1.2.3)とホスト(10.1.2.4)間にネットワークが存在する。コンテナに馴染みがない人は、この記事に限り、コンテナをVMと置き換えて考えてほしい。
本項ではコンテナA(1.2.3.4)からコンテナD(1.2.3.7)にパケットを送信することを考える。まず、コンテナAからホスト(10.1.2.3)にデータを送る際、イーサーネットフレームを送信する。
<img width="700" alt="スクリーンショット 2020-05-29 17.46.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287300/89b89514-8bfe-8c4b-7eac-04a1723330d1.png">
送信したイーサーネットフレームを仮想SwitchでVXLAN IDをつけ、UDP/IPヘッダでカプセル化し、ホスト(10.1.2.4)に送信する。
<img width="700" alt="スクリーンショット 2020-05-29 17.46.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287300/29bfa709-6914-1f19-ea46-37b4a2d0e030.png">
その後、逆の手順でデカプセル化することでコンテナDへのデータの送信が完了する。
<img width="700" alt="スクリーンショット 2020-05-29 17.46.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287300/c7f6c5b7-8e15-d8c5-8524-23dff7ad6f9d.png">
VXLANでは、24ビットのVXLAN IDによって、最大で約1600万のネットワークを構成することができる。
これによって、大規模な複数のデータセンターにまたがった仮想データセンターを構築することができるという利点がある。
オーバーレイ方式は物理ネットワークの設定を変更せずに利用することが出来る。しかしながら、仮想ネットワーク上のパケット処理にホストのリソースを消費して行うため、大規模な仮想環境のオーバーレイになるとパケット転送時のパフォーマンスが懸念されるという問題点もある。

# ホップバイホップ方式
ホップバイホップ方式にはOpenFlowが用いられる。これは全てのネットワーク機器にフローごとにパケットの処理ルールを設定することで従来の宛先IPアドレスベースの配送方式と異なる独自の方式でパケット転送を実現することが出来る技術である。やり方としてはパケットが経由する一つ一つを設定するので、ホップバイホップと呼ばれる。また、OpenFlowのもう一つの大きな特徴として従来のネットワーク機器では内部にある経路制御とデータ転送をC-PlaneとD-Planeに分離していることである。下図がその詳細である。
<img width="700" src="https://i.imgur.com/oIbOzN6.png">
ホップバイホップだと、複数ホップバイホップを作って、それらを網のようにしてオーバーレイネットワークを構築するなら複数のネットワーク機器の設定が必要となる。それぞれを設定しに行くのは大変であるのでC-Planeという統一された機能から集中管理するというものである。所謂オーバーレイ方式が「面を作る」ネットワーク仮想化機構なのに対し、ホップバイホップは「網を作る」ネットワーク仮想化機構である。オーバーレイネットワークに比べて、各リンクに流れるトラフィックの詳細な制御が可能である一方で、全てのノードに一貫性のあるルール設定が必要で設定管理が大変であったり、OpenFlowに対応したネットワークスイッチを利用する必要があるのでコストが掛かるという問題もある。

# オーバーレイ方式、ホップバイホップ方式まとめ
| |オーバーレイ方式|ホップバイホップ方式|
|:----|:----|:----|
|特徴|物理マシンをIPトンネリングでつなぎパケットの転送先を制御|ネットワークの各ノードに転送ルールを設定することでパケットの流れを制御|
|長所|簡単な制御のみで柔軟にネットワークを構築可能|各リンクに流れるトラフィックの詳細な制御が可能|
|短所|IPネットワーク上でトンネルの中身を見ることが出来ないため詳細なトラフィック制御が困難|全てのノードに一貫性のあるルール設定が必要で設定管理が大変|