OpenFlowの使い方(例)と活用事例
2012年2月16日(木)
3回目となる今回は、OpenFlowがどういったものかおさらいした後、使い方やその活用事例について紹介します。
3.1 OpenFlow制御と実現できる動作
3.1.1 OpenFlowによる制御(おさらい)
前回までのおさらいとして、OpenFlowについて簡単に振り返ります。OpenFlowのアーキテクチャを整理すると以下のようにまとめられます。
- 制御をつかさどるOpenFlowコントローラ(Control Plane)と、伝送を実現するOpenFlowスイッチ(Data Plane)とに分離されている。
- OpenFlowスイッチはフローに記述されているヘッダフィールド(マッチングルール)に一致する通信について、そのフローに記述されているアクションに従って処理を行う。
- OpenFlowスイッチは受信したデータに一致するフローがない場合は、OpenFlowコントローラに対して問い合わせを行う。
- OpenFlowコントローラは、Flow-Modメッセージを用いてOpenFlowスイッチのフローを追加・修正を行い、Packet-Outメッセージを用いてOpenFlowスイッチに対してパケットの転送を指示する。
- OpenFlowコントローラでは、OpenFlowスイッチから各種の統計情報を取得することが可能である。
3.1.2 OpenFlowで実現できる動作
ここで、OpenFlowを利用することで実現できる動作を整理します。
- ・既存のネットワーク機器のようなふるまい
- コントローラからスイッチに対してさまざまな制御を行うことが可能です。そのためパケットの特定のヘッダを書き換えたり、特定のパケットを分散して転送させたりすることで、従来のルータやロードバランサと同様なふるまいをさせることが可能になります。
- ・柔軟な経路制御
- OpenFlowではスイッチ間のケーブリングを自由に行い、経路を自由に設定できます。従来のネットワークでは、スパニングツリーなどの影響を受け、冗長性を持たせた部分は障害時にしか使われないなどの問題がありました。一方、OpenFlowではControl Planeが一つに集約されているため、スイッチ間のリンク情報を一括で管理し、その情報を適切に利用することで、すべてのリンクを効率よく利用した経路制御が可能になります。また、スイッチのメンテナンスなどの際にはコントローラであらかじめ経路計算した上でスイッチにフローを設定することで、通信断を発生することなく経路の変更が可能になります。
- ・ネットワークの分割
- OpenFlowではVLAN-IDだけでなくいろいろな要素を組み合わせたものをキーにして論理的にネットワークの分割を行うことができます。その結果、VLANでの論理分割の上限値を意識することなく自由にネットワークを構成できるようになります。
3.2 トポロジー情報の把握
実際にOpenFlowを活用する際には、OpenFlowスイッチが複数ある環境が一般的です。その場合、OpenFlowプロトコルを利用して柔軟な経路制御をするためにはトポロジー情報の把握が必要になります。そこでここでは一つめの使い方(例)として、OpenFlowプロトコルを利用してコントローラがスイッチ間のトポロジー情報をどのようにすれば把握できるか説明します。
図1:OpenFlowプロトコルを利用してスイッチ間のトポロジー情報を把握するイメージ |
- OpenFlowスイッチに対してLLDPパケットをPacket-Outするようコントローラから指示する
- 受信したOpenFlowスイッチはPacket-Inメッセージでコントローラに通知する
- OpenFlowコントローラはPacket-InメッセージによってLLDPを受信したスイッチおよび物理ポートを特定するとともに、そのメッセージのパケットデータをもとにLLDPを送出したスイッチおよび物理ポートを特定する。
上記の処理を定期的に行うことでトポロジー情報の把握ができるようになります。また、スイッチの故障時等トポロジーが変更された場合もコントローラにて情報把握できることになります。
実際にOpenFlowを活用して経路制御する場合は、上記の手法で把握したトポロジーの情報を利用して、伝送経路の計算やフローを書き込むべきOpenFlowスイッチの特定、パケットを転送するべき物理ポートの特定などを行うことになります。
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。