ページの先頭です
OpenFlowは2008年にスタンフォード大学で策定され、その後仕様の拡張・修正がなされ、現在はONFによって定義されているオープンな技術仕様です。仕様にはバージョンが振られていて、現在最も多く使われているのはOpenFlow 1.0です。その後いくつかの拡張がなされ、1.1や1.2が策定されましたが、普及前にバージョン更新されたためにあまり使われず、長期サポートが謳われているOpenFlow 1.3の実装がよく見られます。執筆時点での最新バージョンはOpenFlow 1.4ですが、仕様の複雑化による実装の困難さから、対応した実装はほとんどないというのが現状です。OpenFlowでは、バージョン間の互換性を考慮しない仕様となっているために、コントローラとスイッチの間で利用するバージョンが一致していなければなりません。
OpenFlowの考え方は、制御プレーンとデータプレーンを分離するところから始まっています。データプレーンは、与えられたルールに従ってパケットを高速に処理・転送する役割、制御プレーンはルールを与える役割になります。この場合のルールとは、受信したパケットがどのようなものかを判別するものであり、OpenFlowでは1つのルールとそれに対応した処理を一組として、フローエントリと呼んでいます。例えば、「LANポート1で受信した、宛先IPアドレス192.168.0.1の、TCP80番ポート宛のパケット」といったルールを与えることができます。複数のフローエントリをまとめたものをフローテーブルと呼び、OpenFlowで処理されるパケットはフローテーブルの中から該当するフローエントリ1つを見つけ出し、関連付けられているアクションを実行することになります。アクションには、単純に指定されたLANポートへパケットを送信するといったもののほか、宛先IPアドレスの書き換え、VLANタグの挿入といったパケットヘッダの変更などもあり、これらは仕様に定められた範囲で自由に指定することが可能です。フローテーブルを複数用意しておき、アクションとして次のフローテーブルの処理をせよ、と指定することもできます。
また、アクションにはパケットを制御プレーンつまりコントローラに送信するという指定が可能です。コントローラはパケットをスイッチから受け取り、より複雑な処理を実行することができます。更に、コントローラはスイッチに対して、任意のパケットを送出させることもできます。これらをまとめると図-2のようになります。
このように、OpenFlowではコントローラとスイッチの連携によって、高速性を保ったまま複雑なパケット処理を実現することを考慮して考案されました。しかし、OpenFlow仕様自体の拡張によって、データプレーンは複雑化の一途をたどっています。
ページの終わりです