SDNって何?OpenFlowとの違いは?

「OpenFlowは、クラウド時代の新ネットワークアーキテクチャだ!」「これからの時代はOpenFlowスイッチが必ず来る!」
と、今から10年ぐらい前は、OpenFlowへの期待がその界隈で非常に高まっていたように思えます。しかし、2021年現在、いつの間にか誰も話題にすることがなくなってしまいました。

私も日経PCか何かの雑誌でOpenFlowないしはSDNの記事を読んだとき、当初こそは「ふーん」としか思いませんでしたが、関連記事を読み進めるうちに「おもしろい!」と思うようになっていきました。ただ、仕事でそういったものを使う機会にめぐり合わず、その手の雑誌でも記事を見かけることが少なくなっていき、今では影が薄れてしまったように思えます。

この記事を書く上で、SE仲間に「OpenFlowスイッチ入れたことある?」と聞いてみたのですが、私の界隈では誰一人いなかったです。ただ、そのOpenFlow技術はネットワークの分野における仮想化技術の集大成であり進化版のように思えます。

プログラミング次第では、Proxyやファイアウォール(FW)のような通信制御装置、あるいは、ネットワーク帯域に応じたロードバランサ(LB)に化けさせることができます。そして何より、自分自身で自由にデザインできるので、ネットワーク機器ベンダーに振り回されることもなくなります。

ただ、色々なことができるということは、その反面、中身が複雑に見えて、苦手意識を持ってしまうエンジニアも多いようです。今回の記事では、そんなOpenFlowないしはSDN技術について、まずはその概要をまとめています。

ネットワーク機器の基本機能

SDN、OpenFlowについて考えていく前に、ネットワーク機器の基本機能について考えてみましょう。

一般的にネットワーク機器は二つの機能要素から構成されます。ひとつは単純にデータを右から左側へ流すだけの純粋にデータパケットを受け渡しするフォワーディング機能です。ハードウェアの進化に伴ってどんどん高速になっていますね。
もうひとつは頭脳に相当するところです。例えば、隣接にどのようなルータが存在していて、どの経路でパケットを流せば、どのようにパケットが届くだろうという、ネットワーク転送をコントロールする非常に重要な部分です。

これまでは、後者の頭脳の部分に、各ネットワーク機器ひとつひとつに対して指示(設定)することで、ネットワーク全体を制御していました。しかし、SDNの登場により、この様相が一変します。

SDNとは

SDN(Souftware Defined Network)とは、ソフトウェアによりネットワーク機器を集中制御して、ネットワーク構成や設定などを柔軟に動的に変更することができる「技術の総称」のことです。

SDNでは管理ツールを用いて事前に設定するだけで、ネットワーク構成、性能、機能を動的に変更できます。

うーん、これまでもルータやスイッチなどをソフトウェアで制御してたと思います。何が違うんですか?

SDNコントローラと呼ばれる装置がたくさんのネットワーク機器を集中的に制御する点が違うよ。これまではルータやスイッチなどそれぞれひとつずつにログインして設定していたけど、SDNではSDNコントローラに全ての設定を入れて、全てのネットワーク機器を制御するんだ。

うーん、一か所で制御できるから設定がラクってことですか?でも今の時代、ネットワーク経由で遠隔でログインして操作できるからそこまで大きなメリットのようには思えません。

確かに今はデータセンター内の執務室などに設置してあるひとつの端末から全ての機器を遠隔操作できて、集中制御は当たり前になってるね。でもSDNでいう「集中制御」はそれとはまったく別の意味なんだ。

何を言ってるのかサッパリわかりません。

二人の会話の内容が発散してきましたので、一旦、ここでSDNについてまとめます。

ここまでではまず、SDNを使用することのメリットを抑えておきましょう。それは、ソフトウェアによってネットワークを制御することができ、簡単かつ迅速にネットワーク構成を大幅に変更することができるという点です。

例えば、社内ネットワークで使用するアプリケーションを新しく導入したとき、ネットワーク構成の変更も必要となるケースが多いです。そんなとき、人が手作業で行うと手間がかかりすぎて、工数も膨れ上がってしまうことが往々にしてあります。

確かに、新しいアプリケーションがこれまで社内で使用してないプロトコルを使っていたらFWの穴あけが必要になったり、サーバーを負荷分散するならLBの設定追加も必要ですね。

SDNにより、ネットワーク管理をソフトウェアによって効率化することで、その手間を減らそうというのが目的と言えます。

SDNのメリットはそれだけですか?確かに手間が減るのはうれしいですが…。

リソースを有効活用できる点もメリットとして挙げられます。
ネットワーク機器をサイジングする際、最もトラフィック量が多くなるケースで想定される負荷を前提に見積もることが多いです。その最大負荷を処理するのに十分な性能があり、かつ、冗長性も考慮して、もう一台追加といったように機器を用意することになります。
しかしそのようなサイジングでは、サーバー台数を増やせば、SWやLBもとなり、内外部からのリクエスト数が増えればFWやリバプロ装置もと、どんどん機器台数が増えていってしまうことになります。
それらの機器がいつも忙しくしているなら良いのですが、最大負荷がかかるケースは稀で、そのほとんどの機器でリソースを持て余していることが非常に多いです。全ての機器がフル回転するなんてことは実際ありません。

SDNは、上記のような無駄も解決することができます。

OpenFlowとは

OpenFlowとは、ソフトウェアによりネットワーク機器を集中制御して、ネットワーク構成や設定などを柔軟に動的に変更することができる技術のことです。

その説明、さっきのSDNと同じです。何が違うんですか?

OpenFlowは、SDNを実現する技術の1つであり、OpenFlowはIPやTCPなどと同じ標準化されたプロトコルの一つです。 GoogleやFacebook、NTTコミュニケーションズなどが参加している団体であるONF(Open Networking Foundation)が標準化を推進しており、仕様が明確に決められていて、各種ベンダーとの相互接続試験も 実施されています。

OpenFlowとSDNとの違いは

OpenFlowとSDNの違いがよくわからないかもしれませんが、違いは単純です。

OpenFlowは前述のとおり、仕様が明確に決められていますが、SDNは仕様が決められているわけではなく、あくまで概念に過ぎません。そのため、SDNはエンジニアによって考え方にずれがあるようで、書籍やエンジニアのブログなどで書かれている内容が微妙に違ったりしているようです。

SDNが目指すものを実現する方法はひとつではありません。OpenFlowはそのひとつということです。

SDNの方式

ここでもう一度、話をSDNに戻します。SDNには大きく2つの方式に分けられます。

SDNの方式
  • オーバレイ方式
  • ホップバイホップ方式

なぜ方式が複数あるんですか?

SDNが目指すところは、ソフトウェアによりネットワーク機器を集中制御することです。その実現方法として複数の方式があっても不思議ではありません。

オーバレイ方式

レイヤ3ネットワーク上で、イーサネットフレームをカプセル化(トンネリング)することでネットワーク仮想化を実現する方式です。
代表的なトンネリングプロトコルとしてVXLANがあります。

VXLANはカプセル化によってオーバレイネットワークを実現する技術です。

カプセル化って何ですか?オーバレイネットワークって何ですか?次々に新しい用語を出さないでください!

まず、オーバレイネットワークとは、ピアツーピアを実現する場合のように、既存のIPネットワーク上に目的に合わせて構築する仮想ネットワークです。

オーバーレイネットワークの代表例として、インターネットVPNが挙げられます。IPsecなどのプロトコルを用いてインターネット上に仮想的な閉域ネットワークを構築することにより、本来インターネット経由では不可能なプライベートIPアドレスを用いた通信を可能にしています。

例えば、拠点間でネットワークをつなぐ場合、IPsecのトンネルモードを使用しますが、その際、オリジナルのIPヘッダの上に、新しいIPヘッダを付与します。これがカプセル化です。

つまりカプセル化とは、封筒に入った手紙を、さらに新しい封筒の中に入れること、ネットワークの言葉で言い換えると、送信しようとしているパケット全体を、そのパケットのものとは別の通信プロトコルのペイロードに埋込んで通信する技術のことです。よく、IPsecを使うとき、「トンネルを張る」や「トンネルを構築する」という表現をしますが、実際にトンネルを作っているわけではなく、ただ単にカプセル化しているだけです。

ホップバイホップ方式

ホップバイホップ方式は全てのネットワーク機器にフローごとにパケットの処理ルールを設定することで従来の宛先IPアドレスベースの配送方式と異なる独自の方式でパケット転送を実現することができる技術のことです。

OpenFlowはこのホップバイホップ方式になります。単にSDNというと、このホップバイホップ方式のことを指すことが多いです。

SDNは仮想化技術なのか

SDNは、物理的な制約にとらわれず、ソフトウェアにより目的に応じた複数の仮想的なネットワークを構築することができます。そのことから、SDNは仮想化技術の一種だと捉えることができると思います。一方、ネットワークの仮想化は、別の技術で実現するものであり、「SDN=ネットワーク仮想化技術」と定義するのに違和感を抱くエンジニアもいるようです。確かに、VLAN等で構築した仮想的なネットワークと、SDNで構築したネットワークを同じ枠に当てはめるのは強引な気がします。

そういった意味で、SDNは仮想化技術というより、Software Defined Networkという用語どおり、「ソフトウェアで定義するネットワーク」という新しい概念と言えるでしょう。

まとめ

今回は、SDNとOpenFlowの概要について見てきました。SDNはソフトウェアにより全てのネットワーク機器を集中制御する、OpenFlowはそのSDNを実現する技術のひとつということ。この点が今回の記事のポイントになります。

SDNは概念であるため、その説明をすると人によって内容が微妙に違ってしまい、混乱してしまうことが多々あります。その一方、OpenFlowは標準化されたプロトコルであり、仕様も明確なため、そうした混乱に陥ることは少ないです。

次回の記事では、OpenFlowについて詳しく考えていきます。OpenFlowの理解を深めることで、SDNが目指すものが見えてくると思います。