OpenFlowの勉強 その2 OpenFlowの各バージョンの仕様概要

前回の続きです。

OpenFlowのバージョンごとの仕様に関して整理した。

まとめてみると、バージョンによってかなり仕様ががなりと異なる。
また各仕様でも必須とされている項目と、オプションとなっている項目があり、後者は必ずしも実装されているとは限らない。

自分のさわった範囲ではOpenFlow1.0と1.2では互換性がなかったし、OpenFlow1.0と1.2のスイッチが混在している状態だと、コントローラの動作がおかしくなった。これらは実装依存の項目だと思うが、運用する際には注意する必要がある。

OpenFlow1.0

2009年12月に策定
・複数のフローテーブルを定義できるが、実際にはそのうちの最初のテーブルにしかマッチしない。そのためテーブル間をまたいだフローエントリーのマッチングはできない。
・アクションとして、ForwardとDropは必須。Enqueu及びModify-Fieldはオプション(対応していないOpenFlowスイッチも存在する)。

OpenFlow1.1

2011年2月に策定。
期間が短かったため対応する実装があまりないまま終わる可能性がある。

・Gotoインストラクションを用いることで、複数のフローテーブルにかかれたフローエントリーに対して、パケットのマッチングが利用可能になった(以降のバージョンでも同様)。
・パケットのマッチングに対して、パイプライン処理が適用される。
・パケットのマッチングフィールドに、使用上使途の限定されていないメタデータが追加された。
・ヘッダフィールドがマッチフィールドに改名され、アクションを包含するインストラクションが追加された。
・Modify-FieldアクションはSet-Fieldアクションに改名された。
・MPLS(広域ネットワークで利用される)およびSCTP(モバイル通信で利用される)に対応した。
・緊急事態フローキャッシュが削除されて、代わりにfail-secureモードとfail-standaloneモードが採用された。
・OpenFlowコントローラとOpenFlowスイッチの間の通信であるセキュアチャネルが、OpenFlowチャネルに改名された。TLSが必須でなくなり、TCPでも可能となった。

OpenFlow1.2

2011年12月に策定。
期間が短かったため対応する実装があまりないまま終わる可能性がある。

・仕様1.0,仕様1.1であったヘッダフィールド解析の仕様が廃止された。
・従来の固定長のマッチフィールドの代わりに、可変長のOXM(OpenFlow eXtensible Matchフィールド)が用いられるようになった。
・パケットを書き換える場合に、OXMマッチフィールドに存在するフィールドはset-fieldで書き換え、それ以外は従来のアクションで対応する。
・OpenFlowコントローラ同士が通信することで、一つのOpenFlowスイッチに対して複数のOpenFlowコントローラが接続するマルチコントローラに対応した。

OpenFlow1.3

2012年6月に策定。
1.1や1.2での仕様の変更が急激すぎるために、安定版として一時的に新仕様の策定・採用が停止されたバージョンである。後続の1.3xではマイナーバージョンアップにとどまる。そのためベンダーとしては1.1や1.2はスキップして1.3から実装するところもある。

・フローの計測を行うためのメータテーブルが実装された。
・テーブルミス時のデフォルトの仕様が、パケットインから破棄になった。
・1つのOpenFlowスイッチ、コントローラ間で、複数本のOpenFlowチャネルが張れる。
・(コントロールプレーンの?)IPv6に対応