OpenFlowのアーキテクチャと仕様・機能
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の使い方、活用事例について紹介します。
※記載されている会社名、製品名、サービス名等は、各社の登録商標または商標です。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- OpenFlowの使い方(例)と活用事例
- OpenFlow ver1.1およびver1.2の追加機能と活用例
- SDNの実装方式
- 平成30年度の午後Ⅱ問題対策②-問2【後半】
- 試験直前対策:令和3年度の午後試験で出題された技術と仕組みの解説
- ハイブリッド・クラウドに向けたネットワーク技術の将来
- NEC、OpenFlow Ver1.3に対応した「UNIVERGE PFシリーズ」のコントローラおよびスイッチの新製品2機種を発売
- NEC、OpenFlow対応「UNIVERGE PFシリーズ」のコントローラ機能を強化、スイッチの新製品を発売
- ハードウェアありきのSDNから、仮想ネットワークを切り離して考えてみよう
- MidoNetのパケット処理をDVRと比較してみる