OpenFlowは、当初のバージョン1.0から始まり、最新のバージョン1.3までいくつかの仕様がリリースされています。ここで単純に「新しいバージョンを選択すべきだ」と考えてはいけません。というのも、1.0、1.1、1.2、1.3(1.3.1)の各バージョンで互換性が考慮されたプロトコルではないからです。
従って、ユーザーがOpenFlowを利用して実現したい内容に基づいて、利用するバージョンを決めていく必要があります。例えば「グループ」を利用したい場合は1.1以降、「IPv6」を利用したい場合は1.2以降といった具合になります。
バージョン | 機能 |
---|---|
1.0 | ベースと考えるバージョンなので省略 |
1.1 | Multiple Tables Groups Tags : MPLS & VLAN Virtual ports Controller connection failure |
1.2 | Extensible match support Extensible 'set_field' packet rewriting support Extensible context expression in 'packet-in' Extensible Error messages via experimenter error type IPv6 support added Simplified behaviour of flow-mod request Removed packet parsing specification Controller role change mechanism |
1.3 | Refactor capabilities negotiation More exible table miss support IPv6 Extension Header handling support Per flow meters Per connection event filtering Auxiliary connections MPLS BoS matching Provider Backbone Bridging tagging Rework tag order Tunnel-ID metadata Cookies in packet-in Duration for stats On demand ow counters |
1.3.1 | Improved version negotiation |
また、OpenFlowプログラミングフレームワークによっても、利用できるバージョンは制約を受けます。もちろん、ユーザー側が一からプログラムを書けば制限はありませんが、開発の効率化などを狙ってフレームワークを利用する場合は、どうしても制約を受けることになります。
これ以外にもまだ、バージョンによる制約はあります。例えば、現時点では物理スイッチ側の対応が遅れている状況です。従って物理スイッチを用いる場合、利用できるバージョンはさらに限られることになります。
これら制限を考慮した上で利用するバージョンを選択していく必要がありますが、まずOpenFlowを初めていじる場合には、基礎となる1.0を利用するのがよいでしょう。
OpenFlowはとかく「複雑」だというイメージを持たれがちです。しかし、OpenFlowが仕様として定義しているのは、「OpenFlowコントローラとOpenFlowスイッチ間のプロトコル」と「フローエントリに対するOpenFlowスイッチのアクション」になります。
OpenFlowの仕様については、openflow.orgで公開されている「OpenFlow Switch Specification」を確認することになります。公開されているPDFファイルの内容はわずか42ページで、非常に小さな仕様(=簡潔な仕様)であることが分かるかと思います。
このファイルをすべて読み解いていくのも良いですが、今回は、その中からOpenFlowをいじる時に使う要所をかいつまんで紹介します。
OpenFlowの動作は、以下のようにまとめることが可能です。
1. OpenFlowスイッチにアクション方法の分からないパケットが入ってきた時には、OpenFlowコントローラに「Packet In」メッセージが送られます。
2. OpenFlowコントローラからOpenFlowスイッチに対し「Flow Mod」メッセージを送り、OpenFlowスイッチのフローエントリを更新します。フローエントリは、「どのようなパケットに対し、どのようなアクションを取るか」という処理内容をまとめた一覧表と考えると分かりやすいでしょう。
3. OpenFlowコントローラからOpenFlowスイッチに対し、「Packet Out」メッセージを送り、パケットを転送します。
……と、このようにわずか3枚の絵でOpenFlowの動作紹介が終わってしまいました。OpenFlowは一般に思われているほど複雑ではないのです。
先に、OpenFlowプログラミングフレームワークが複数存在することを紹介しましたが、ここからは、扱いやすさに定評のある「Trema」について紹介していきます。
Tremaの特徴としては、以下の点が挙げられます。
1. は、Rubyの採用により簡潔にプログラミング可能ということを意味します。4.と5.は、Trema開発メンバーの努力の成果といったところでしょうか。6.は文字通り、オープンソースソフトウェアとして開発、公開されているということですね。
注目すべきポイントは2.と3.になります。
3.については、ネットワーク分野における世界最大規模のイベント、Interop Tokyo 2012でのShowNetで構築されたOpenFlowネットワーク(多種多様なベンダのOpenFlowスイッチの相互接続環境)でも利用された実績があり、信頼ある実装だといえるでしょう。
2.は、Tremaが「アジャイルなOpenFlowプログラミングフレームワーク」だといわれるゆえんです。Tremaは他のOpenFlowプログラミングフレームワークとは異なり、テスト用にOpenFlowネットワークをシミュレートする機能も備えており、ノートPC 1台でのアジャイルな開発が可能となっています。
つまり、Tremaは単なるOpenFlowプログラミングフレームワークではなく、OpenFlow開発のための統合開発環境とも表現できるものです。この点も、多くのエンジニアがOpenFlow開発にTremaを利用する理由ではないでしょうか。
Interop Tokyo 2012で見えたOpenFlowのこれから
http://www.atmarkit.co.jp/ait/articles/1207/25/news139.html
今回はSDN/OpenFlowをいじっていく上で押さえておきたい情報を紹介しました。
これであなたもSDN/OpenFlowをいじりたくなったに違いありません。次回は、アジャイルなOpenFlowプログラミングフレームワークであるTremaの導入から、実際にOpenFlowをいじっていく方法について紹介する予定です。
Copyright © ITmedia, Inc. All Rights Reserved.