OpenFlowのアーキテクチャと仕様・機能

2012年2月9日(木)
前田 繁章

2.3 NETCONFとの違い

少し話が逸れますが、OpenFlowとNetconfとでアーキテクチャとしてどのような違いがあるか、疑問を持つ読者も少なくないと思います。そこでこの両者について比較したいと思います。これとOpenFlowとNetconfのアーキテクチャを図で示すと以下のようになります。

図5:OpenFlowとNetconfのアーキテクチャ

この場合、あくまでソフトウェアは各ネットワーク機器に存在しており、その設定のみをネットワーク機器の外側から行う形になっています。そのためNetconfは近年言われているSDNというコンセプトとは完全には一致しないと言えます。

2.4 動作例

これまでの内容を踏まえ、イメージをつかみやすくするため、以下のような構成の場合にどのような形で通信が行われるか、順を追って説明します。なお、OpenFlowスイッチとコントローラの間の制御用の通信路はすでに確立済みであるものとします。

図6:OpenFlowサンプル構成
  • (1) サーバAがサーバBに対してパケットaを送信する
  • (2) OpenFlowスイッチはサーバAからパケットを受け取り、受信したパケットに対応するフローが自身の保持するフローテーブルに存在するか確認する。
  • (3) 受信したパケットに対応するフローがフローテーブルに存在していない場合、OpenFlowスイッチは受信したパケットaをバッファに保存するとともに、OpenFlowコントローラに対してPacket-Inメッセージを送信して問い合わせを行う。
  • (4) OpenFlowコントローラはPacket-Inメッセージの内容に基づきパケットaの情報を抽出し、制御方法を決定する。
  • (5) OpenFlowコントローラはバッファに保存されているパケットaをポート2から転送するようPacke-OutメッセージをOpenFlowスイッチに送信する。
  • (6) OpenFlowスイッチはPacket-Outメッセージで指定されたポート2からパケットaを送信する。
  • (7) パケットaがサーバBに届く

これでサーバAからサーバBまでの一通りの通信が完了することになります。この例の場合、フローテーブルにフローが書き込まれません。そのため、再びパケットaをサーバAから送信した場合、コントローラに問い合わせることになります(上記の2以降の処理が再び行われる)。

OpenFlowでは常にコントローラに問い合わせる以外に、OpenFlowスイッチにフローを書き込むことでも制御することが可能です。その場合を例示すると以下のようになります(ステップ4までは上記と同じ)。

  • (5') OpenFlowコントローラはバッファに保存されているパケットaをポート2から転送するようPacke-OutメッセージをOpenFlowスイッチに送信する。あわせてFlow-Modメッセージを用いてOpenFlowスイッチに対してフロー(パケットaと同じヘッダフィールドであればポート2からパケット転送をするというアクションを記載したフロー)を書き込む。
  • (6') OpenFlowスイッチはPacket-Outメッセージで指定されたポート2からパケットaを送信する。あわせてFlow-Modメッセージで指定されたフローをフローテーブルに追加する。
  • (7') パケットaがサーバBに届く

この場合、OpenFlowスイッチではフローテーブルにフローが追加されています。そのため、同様のパケットが届いた際には、以下のように処理が簡素化されます。

  • (8') 再度、サーバAがサーバBに対してパケットaを送信する
  • (9') OpenFlowスイッチはサーバ1からパケットを受け取り、受信したパケットに対応するフローが自身の保持するフローテーブルに存在するか確認する。
  • (10') 受信したパケットに対応するフローがフローテーブルに存在している場合、そのフローの内容に従って処理される(ポート2からパケット転送をするというアクションを行う)
  • (11') パケットaがサーバBに届く

以上が、一般的に利用される使い方ですが、OpenFlowの特徴を利用すれば以下のような応用例も考えることができます。

・応用例1 (ヘッダフィールドを書き換える場合)
上記の5’ の処理において、アクションとしてパケットを転送するほかに、ヘッダフィールドの特定の値を書き換える処理を追加すると、パケットaのヘッダの内容を書き換えてサーバBに届けることが可能になります。
・応用例2(任意のパケットをPacket-Outする場合)
上記の5の処理において、Packet-Outの対象としてパケットaそのものではなく、任意のパケットを指定してOpenFlowスイッチに対してパケット転送するよう制御することが可能です。この場合、コントローラで、ヘッダフィールドで規定されていないフィールドを書き換えたのちにPacket-Outさせることができます。さらに極端な例としては、パケットaとは全く異なるパケットをPacket-Outさせることも可能です。

今回はOpenFlowプロトコルについてその詳細について紹介しました。次回はOpenFlowの使い方、活用事例について紹介します。

※記載されている会社名、製品名、サービス名等は、各社の登録商標または商標です。

株式会社NTTデータ 技術開発本部

入社以来、IT基盤分野の技術開発に従事。これまで、RFIDプラットフォーム開発、NGN接続連携プラットフォーム開発などを行う。現在は、OpenFlowコントローラの開発を主とし、OpenFlowを活用した新規サービスの検討および開発に取り組んでいる。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています