[[labs.beatcraft.com]] #contents ** OpenFlow とは? [#q44a214d] OpenFlow とは、ネットワークをその構成要素から分離し抽象化して再構成する~ SDN (Software Defined Network)を実現する技術の一つです。~ ネットワークを抽象化することでネットワーク全体がプログラムの対象となり、~ 集中管理、構成の自動変更、最適化といったことをプログラミンで行うことが可能になります。~ ~ OpenFlow はOpenFlowスイッチとOpenFlowコントローラーから構成されます。~ OpenFlowスイッチはフローテーブルに従ってパケットを転送し、~ フローテーブルにないパケットが来た場合はOpenFlowコントローラーに処理方法を問い合わせます。~ OpenFlowコントローラーは経路計算をしたり、パケットの扱いのルールをフローテーブルの書き込むことで~ OpenFlowスイッチに動作の指示をしたりしてネットワークを管理します。~ OpenFlowコントローラーからの指示によってOpenFlowスイッチは~ スイッチにもルーターにもロードバランサーにもなります。~ ~ *** OpenFlowの標準化 [#d74f3c46] このスイッチとコントローラー間の通信仕様は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対応~ など~ ** スイッチとコントローラー [#q66fad8d] OpenFlowスイッチにはソフトウェアによる実装と機器ベンダーによる装置としての実装があります。~ OpenFlowコントローラーはスイッチを制御するコントローラーのルールをどの言語で書けるかによって~ それぞれ以下のような実装があります。 *** OpenFlow Switch [#jececf81] -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 Controller [#ucf71eb3] -Beacon~ https://openflow.stanford.edu/display/Beacon/Home~ スタンフォード大のJavaベースOpenFlowコントローラー。~ OpenFlow 1.0 対応。~ ~ -Floodlight~ http://floodlight.openflowhub.org/~ big switch networkのJavaベースOpenFlowコントローラー。~ Vesion 0.90 は OpenFlow 1.0 に対応。次のリリースで OpenFlow 1.2/1.3 に対応。~ ~ -NOX~ http://www.noxrepo.org/nox/about-nox/~ スタンフォード大とNicira NetworkがOpenFlow仕様策定と並行して作成しオープンソース化したC++ベースのOpenFlow コントローラー。~ OpenFlow 1.0 対応。~ 2012年中ごろからあまりメンテナンスされていない。 OpenFlow 1.1 に対応した nox11oflib など様々な派生versionが存在する。~ 古いversionのNOXはC++/Pythonベースで~ NOX classicにリネームされた。~ http://www.noxrepo.org/nox/versions-downloads/~ ~ -POX~ http://www.noxrepo.org/pox/about-pox/~ POXから派生したPythonベースのOpenFlowコントローラー。 OpenFlow 1.0 対応。~ ~ -Trema~ http://trema.github.com/trema/~ CとRubyベースのOpenFlow コントローラー。~ OpenFlow 1.0 対応。OpenFlow 1.3 対応の trema-edge ブランチも存在する。~ https://github.com/trema/trema-edge~ ~ -Ryu~ http://osrg.github.com/ryu/~ NTTラボラトリーOpen Source Software Computing GroupのPythonベースOpenFlowコントローラー。~ OpenFlow 1.0、1.2、1.3 に対応。~ ~ ** OpenFlow を試してみる。 [#pcdad6b6] OpenFlow はどんなものなのか、上に挙げたスイッチとコントローラーの組み合わせを実際に動作させて試してみます。~ *** mininet [#n9c73506] minninet は一つの Linux 環境上にOpenFlow スイッチ、OpenFlow コントローラー、スイッチに接続するホスト~ から成る仮想ネットワークを構築して OpenFlow の開発やテストを行うことができる環境です。~ [[OpenFlow/mininet]]を参照してください。 ~ *** OpenFlow Tutorial [#sb27180a] OpenFlow Tutorialを参照し、OpenFlowの各動作を確認しています。~ http://www.openflow.org/wk/index.php/OpenFlow_Tutorial ~ ~ [[OpenFlow/OpenFlow Tutorial 1]] ~ [[OpenFlow/OpenFlow Tutorial 2]] ~ を参照してください。~ *** Open vSwitch_x86 [#hf933ed0] mininet環境を導入したLinux PC2台を使用してOpenFlow コントローラ、OpenFlowスイッチを各々作成、~ OpenFlow Tutorial 1,2で行った動作確認をしています。~ OpenFlow スイッチはOpen vSwitchをベースに設定しています。~ ~ [[OpenFlow/OpenvSwitch_x86]] を参照してください。~ *** Open vSwitch_bc10 [#y48254ef] bc10上で、Open vSwitchを使ってOpenFlowスイッチを設定します~ bc10上で、Open vSwitchを使ってOpenFlowスイッチを設定します。~ mininetでのOpenFlowコントローラは、Linux PCで行います。~ OpenFlow Tutorial 1、2で行った動作か確認を行います。~ ~ [[OpenFlow/Open vSwitch_bc10]]を参照して下さい。~ * 更新履歴 [#t754fa1f] 2013/08/29 [[OpenFlow/Open vSwitch_bc10]]を追加