SDNとは何か
SDN(Software Defined Networking、ソフトウェア定義ネットワーク)とは、ネットワーク機器の動作を一元的に管理・制御する仕組みのことを指します。これまでのネットワークは、ルータやスイッチ、ファイアウォールといった機器ごとに個別設定を行い、場合によってはケーブルの抜き差しなど物理的な作業も必要でした。しかし、SDNでは専用のソフトウェア(SDNコントローラ)が全体をまとめて制御するため、物理的な作業なしにネットワークの設定や構成を動的に変更できます。
イメージとしては、家中の電気を各部屋のスイッチで操作する従来の方法と、スマホのアプリからまとめて操作できるスマートホームの違いに近いものです。ネットワークを「ソフトウェアで定義」することで、効率的で柔軟な運用が可能になります。
なお、一部では「SDN=ネットワーク仮想化」と説明されることもありますが、厳密には両者は同じものではありません。ネットワーク仮想化はSDNを活用して実現できる一手段であり、SDNそのものはあくまで「制御をソフトウェアで集約する技術の総称」と覚えておくのが正確です。試験でもこの違いを問う問題が出るため、しっかり区別して理解する必要があります。
データプレーンとコントロールプレーン
SDNの根幹にあるのが「データ転送機能」と「制御機能」の分離です。これをそれぞれ以下のように呼びます。
- データプレーン:実際にデータを受け取り、宛先へ転送する処理を担う部分
- コントロールプレーン:どの経路でデータを転送するかといった制御情報を作成・管理する部分
従来のネットワーク機器には、この2つの機能が両方とも組み込まれていました。そのため、ルータやスイッチごとに個別に設定を加える必要があり、規模が大きくなるほど管理が煩雑になりました。
一方、SDNではコントロールプレーンを機器から切り離し、SDNコントローラに集中させます。これにより、ネットワーク全体の制御を一元化でき、各機器にはデータプレーンだけを残して動作させる仕組みになります。これがSDNの大きな特徴であり、試験でも「プレーンの分離」と「集中制御」というキーワードが重要になります。
SDNのアーキテクチャ
SDNは大きく3つの層に分けられます。これらの関係性を押さえることが、全体像を理解するうえで欠かせません。
インフラストラクチャ層
ここは実際にデータ転送を行うルータやスイッチなどの機器が属する層です。これらの機器を制御する際には、OpenFlowやNETCONFといった標準プロトコル、またはベンダーごとに用意されたAPIを使います。この層で使われるAPIを Southbound API(サウスバウンドAPI) と呼びます。別名で SBI(Southbound Interface) とも表現されます。
コントロール層
この層はSDNの頭脳部分であり、インフラストラクチャ層の機器をSouthbound API経由で制御します。さらに、抽象化されたネットワーク機能をアプリケーション層に提供する役割も持ちます。この層とアプリケーション層をつなぐAPIを Northbound API(ノースバウンドAPI) と言い、別名 NBI(Northbound Interface) とも呼ばれます。
アプリケーション層
ここでは、ネットワークを操作するアプリケーションが稼働します。例えば「トラフィックを最適化するアプリ」や「セキュリティポリシーを管理するアプリ」などです。これらはNorthbound APIを通じてSDNコントローラに指示を送り、ネットワーク全体を柔軟に制御します。
SDNの方式:ホップバイホップとオーバーレイ
SDNにはいくつかの実装方式がありますが、代表的なのは ホップバイホップ方式 と オーバーレイ方式 の2つです。両者は仕組みや用途が大きく異なるため、試験でも比較を意識して学ぶ必要があります。
ホップバイホップ方式
ホップバイホップ方式のSDNは、OpenFlowというプロトコルを前提に設計されています。ここでの「ホップ」とは、パケットが通過するスイッチやルータといった中継点のことを指します。この方式では、パケットがスイッチを通過するたびに、そのスイッチはSDNコントローラから与えられたルールに従って転送を行います。
つまり、ネットワークを構成するすべてのスイッチの転送動作をSDNコントローラが一元的に決定し、各スイッチはその指示どおりにデータを運ぶだけの存在になります。これにより、非常に細かい制御が可能となり、経路選択や帯域管理なども正確に行えます。
オーバーレイ方式
一方、オーバーレイ方式は既存の物理ネットワークの上に「仮想的なネットワーク(オーバーレイ)」を構築する方法です。サーバに導入されているハイパーバイザーに組み込まれた仮想スイッチを活用し、仮想スイッチ間をトンネリングで結ぶことで、物理ネットワークを直接変更せずに仮想ネットワークを実現します。
この方式の特徴は、物理ネットワークを大幅に作り直さなくても導入できる点です。すでにサーバ仮想化環境が整っている場合、新しい機器をほとんど追加せずに運用を始められるメリットがあります。ただし、ホップバイホップ方式と比べると、経路制御や帯域制御などの細かな調整は苦手です。代表例として VMware NSX があり、仮想ネットワークをコントローラからまとめて管理できる仕組みを提供しています。
オーバーレイ方式では、イーサネットフレームをIPパケットの中に「カプセル化」して送ります。これにより、通常のIPパケットとして既存のルータやスイッチを通過できるため、既存機器を流用できるのです。
このカプセル化に使われる代表的なプロトコルが VXLAN(Virtual Extensible LAN) です。VXLANではUDPパケットの中にイーサネットフレームを入れ込み、仮想的にL2ネットワークを延長します。他にも NVGRE や STT といったプロトコルが存在し、いずれも「仮想ネットワークを物理ネットワーク上に重ねて展開する」仕組みを担います。
OpenFlowとは
OpenFlowはSDNを実現するための代表的な技術のひとつであり、ネットワーク機器を中央のコントローラから一括して制御できる仕組みを提供します。これにより、従来は機器ごとに個別設定していた転送制御や経路の変更を、集中管理のもとで柔軟に行えるようになります。標準化は ONF(Open Networking Foundation) という団体によって進められており、GoogleやFacebookなどの大手企業も参加しています。
OpenFlowの基本的な考え方は、従来のネットワーク機器に内蔵されていた 制御機能(コントロールプレーン) と 転送機能(データプレーン) を分離することです。具体的には、制御は「OpenFlowコントローラ」が担い、データの転送は「OpenFlowスイッチ」が行います。
OpenFlowの仕組み
OpenFlowコントローラは複数のOpenFlowスイッチを統括し、ネットワーク全体の制御を行います。管理者はスイッチの動作を記述した フローテーブル を作成し、コントローラがOpenFlowプロトコルを用いて各スイッチに配布します。スイッチは受け取ったフローテーブルに従い、データ転送・破棄・宛先書き換えなどを実行します。
フローテーブルに記述できる条件は幅広く、以下のような情報を組み合わせて細かな転送制御が可能です。
- 物理ポート番号
- 送信元・宛先MACアドレス
- VLAN ID
- MPLSラベル
- 送信元・宛先IPアドレス
- TCP/UDPポート番号
このように「フロー単位で柔軟に制御できる」点が、従来のルーティングやスイッチングと異なる特徴です。なお、文献や試験問題では OFC(OpenFlow Controller)、OFS(OpenFlow Switch) と略されることもあります。
OpenFlowによるネットワーク機器の拡張
OpenFlowスイッチは単なるL2スイッチではありません。プログラマブルであるため、従来はファイアウォールやロードバランサといった専用アプライアンスで実現していた機能も、ソフトウェア的に実装できます。この柔軟性こそがOpenFlowの強みです。
OpenFlowとSouthbound/Northbound API
OpenFlowはSDNアーキテクチャの中で Southbound API(サウスバウンドAPI) として機能します。具体的には、OpenFlowコントローラとスイッチ間で通信する際にOpenFlowプロトコルが使われます。
一方で、Northbound API(ノースバウンドAPI) はコントローラとSDNアプリケーション間で用いられるAPIであり、ネットワーク管理や制御を実現するための仕組みを提供します。
OpenFlow導入における課題とNFV・SFCの活用
OpenFlowを導入するには、対応機能を持つスイッチに置き換える必要があり、コストが高いという課題があります。また、複雑なフロールールを設定すると、フローテーブルの処理に負荷がかかり、性能低下の原因となる場合もあります。
この解決策の一つが、NFV(Network Function Virtualization) と SFC(Service Function Chaining) の活用です。ネットワーク機器の機能を仮想マシン(VM)上に実装し、必要に応じて柔軟に起動・停止させながら、OpenFlowやオーバーレイ技術を用いて機器間のパケット転送を制御します。これにより、専用機器への依存を減らし、より柔軟で効率的な運用が可能になります。
OpenFlowで利用されるメッセージ
OpenFlowでは、コントローラとスイッチ間で様々なメッセージがやり取りされます。代表的なものを以下に整理します。
| 送信元 | メッセージ | 説明 |
|---|---|---|
| コントローラ → スイッチ | Packet Out | スイッチから特定のパケットを出力させる |
| Flow Mod | 新しいフローをスイッチへ送信 | |
| Port Mod | ポート状態を変更 | |
| Set Config | コンフィグパラメータを設定 | |
| コントローラ ⇄ スイッチ | Features Request/Reply | スイッチの機能情報を取得 |
| Stats Request/Reply | 統計情報を取得 | |
| Get Config Request/Reply | コンフィグパラメータを取得 | |
| Barrier Request/Reply | 要求処理の完了を確認 | |
| Queue Get Config Request/Reply | キュー設定を取得 | |
| スイッチ → コントローラ | Packet In | 受信したパケットを送信 |
| Flow Removed | フローが削除されたことを通知 | |
| Port Status | ポート状態の変化を通知 | |
| 双方 | Hello | 接続開始時のメッセージ |
| Echo Request/Reply | 接続の死活監視 | |
| Error | エラー通知 | |
| Vendor | ベンダー独自定義の拡張メッセージ |