labs.beatcraft.com
OpenFlow とは、ネットワークをその構成要素から分離し抽象化して再構成する
SDN (Software Defined Network)を実現する技術の一つです。
ネットワークを抽象化することでネットワーク全体がプログラムの対象となり、
集中管理、構成の自動変更、最適化といったことをプログラミンで行うことが可能になります。
OpenFlow はOpenFlowスイッチとOpenFlowコントローラーから構成されます。
OpenFlowスイッチはフローテーブルに従ってパケットを転送し、
フローテーブルにないパケットが来た場合はOpenFlowコントローラーに処理方法を問い合わせます。
OpenFlowコントローラーは経路計算をしたり、パケットの扱いのルールをフローテーブルの書き込むことで
OpenFlowスイッチに動作の指示をしたりしてネットワークを管理します。
OpenFlowコントローラーからの指示によってOpenFlowスイッチは
スイッチにもルーターにもロードバランサーにもなります。
このスイッチとコントローラー間の通信仕様はOpenFlowプロトコルとして標準化されています。
OpenFlow 1.1 まではスタンフォード大学の研究チームを中心にしたOpenFlowスイッチングコンソーシアムによって策定され
http://www.openflow.org/wp/documents/
で公開されていましたが、
現在は Open Networking Foundation という組織で仕様が策定されています。
2013年3月末現在 1.3.1 まで仕様が出ています。
https://www.opennetworking.org/sdn-resources/onf-specifications/openflow
OpenFlow は同じ version のプロトコルに対応したスイッチとコントローラーの間でしか
通信を行うことはできません。
OpenFlow対応スイッチの製品の多くは1.0や1.1までの対応だったのですが、
最近になって急速に 1.3.1 への対応が進んできています。
Version ごとの特徴は以下のようになっています。
- 1.0
2010年1月
キャンパスネットワークやデータセンターを意識したプロトコル
- 1.1
2011年2月
広域ネットワークを意識した機能拡張
複数フローテーブル
- 1.2
2011年12月
IPv6対応
拡張マッチング記述方式 TLV 導入
複数コントローラー対応
- 1.3
2012年3月
制御プレーンのIPv6対応
データセンター内VPNでのトンネリング対応
プロバイダバックボーン間ブリッジ
QoS対応
など
スイッチとコントローラー †
OpenFlowスイッチにはソフトウェアによる実装と機器ベンダーによる装置としての実装があります。
OpenFlowコントローラーはスイッチを制御するコントローラーのルールをどの言語で書けるかによって
それぞれ以下のような実装があります。
- OpenFlow リファレンス実装
http://www.openflow.org/wk/index.php/OpenFlow_Releases
仕様策定のため作成されたユーザー空間で動作するリファレンスの実装で OpenFlow 1.0、1.1 に対応。
以下の要素から構成されます。
- ofdatapath
ユーザー空間上に実装されたフローテーブル
- ofprotocol
リファレンス実装スイッチのセキュアチャンネル通信用部分
- dpctl
リファレンス実装スイッチの設定コマンド
- Open vSwitch
http://www.openvswitch.org/
オープンソースのソフトウェア仮想スイッチ。
様々な仮想化プラットフォームで使用されており、また様々な管理用インタフェースに対応しています。
Linux 2.6.18 以降対応で 3.3 からは Linux kernel に同梱されています。
設定によってOpenFlowスイッチとしても動作します。OpenFlow 1.0 仕様ベース。
装置としての実装には
NEC Univerge PF5240、PF5820、IBM G8264 switch、HP Procurve 5400zl シリーズ、6600 シリーズ、
pica8 Pronto 3290、3780、といったものがあります。
OpenFlow はどんなものなのか、上に挙げたスイッチとコントローラーの組み合わせを実際に動作させて試してみます。
mininet †
minninet は一つの Linux 環境上にOpenFlow スイッチ、OpenFlow コントローラー、スイッチに接続するホスト
から成る仮想ネットワークを構築して OpenFlow の開発やテストを行うことができる環境です。
OpenFlow/mininetを参照してください。
OpenFlow Tutorialを参照し、OpenFlowの各動作を確認しています。
http://www.openflow.org/wk/index.php/OpenFlow_Tutorial
OpenFlow/OpenFlow Tutorial 1
OpenFlow/OpenFlow Tutorial 2
を参照してください。
Open vSwitch_x86 †
mininet環境を導入したLinux PC2台を使用してOpenFlow コントローラ、OpenFlowスイッチを各々作成、
OpenFlow Tutorial 1,2で行った動作確認をしています。
OpenFlow スイッチはOpen vSwitchをベースに設定しています。
OpenFlow/OpenvSwitch_x86 を参照してください。
Open vSwitch_bc10 †
bc10上で、Open vSwitchを使ってOpenFlowスイッチを設定します。
mininetでのOpenFlowコントローラは、Linux PCで行います。
OpenFlow Tutorial 1、2で行った動作か確認を行います。
OpenFlow/Open vSwitch_bc10を参照して下さい。
更新履歴 †
2013/08/29 OpenFlow/Open vSwitch_bc10を追加