JPNICJavaScriptが無効になっています。JavaScriptを有効にしてご利用いただくことで、より快適にご利用いただけます。会員の種類・会費・メリット入会手続情報よくある質問JPNIC会員リスト更新情報イベント情報Q&Aサイトマップアクセス英語ページトップページ>ライブラリ>ニュースレター>バックナンバーオンライン版>No.52スマートフォン表示に切り替えるPC表示に切り替えるニュースレターNo.52/2012年11月発行OpenFlow今回のインターネット10分講座では、ネットワークの制御方法を管理者自らが自由に設計することができる、OpenFlow技術について解説します。はじめに現在広く使用されているネットワーク機器は、自律的に収集した情報を元にして、パケットを転送します。L2スイッチは、パケット転送に、受信したパケットから学習したMACアドレスを用います。ルータはOSPFやBGPといった、経路制御プロトコルを用いて取得した経路情報を用いています。このような自律的動作のための制御機能が、ネットワーク機器にはそれぞれ搭載されています。ネットワーク管理者は、ベンダーによりあらかじめ用意されている範囲で、この制御機能を使用するしかありませんでした。ネットワークサービス事業者は、ネットワーク技術の複雑化に加え、事業環境の急激な変化や、ユーザーニーズの多様化といった課題に直面しています。Network)が求められています。これらの動きの中で注目されている技術の一つが、OpenFlow技術です。制御機能と転送機能が共存する既存のネットワーク機器とは異なり、OpenFlowでは、制御部と転送部を分離したアーキテクチャを採用しています(図1)。ネットワーク管理者は、OpenFlowコントローラと呼ばれる制御部を、自ら設計・実装することで、必要な制御機能を自由に実現することができます。本稿では、このOpenFlow技術を解説します。1.0の仕様※1で規定されている内容を説明します。IDと呼ばれる64bitの識別子を持ちます。IDが割り当てられている必要があります。OpenFlowスイッチは、条件(ヘッダフィールド)にマッチしたパケットに対して、アクションで指定された動作を行います。ヘッダフィールド、アクションおよび統計情報の組をフローと呼びます。このフローは、OpenFlowコントローラにより生成され、後述するOpenFlowプロトコルを使って、OpenFlowスイッチへと送られます。送られたフローはスイッチ中のフローテーブルに格納されます。ヘッダフィールドとは、表1に示す12種類のフィールドで、受信したパケットを識別するための条件として用いられます。フロー識別に使用しないフィールドにはワイルドカードを指定することで、任意のフィールドのみを条件として用いることができます。“受信ポート番号が1であり、かつ宛先MACアドレスがFF:FF:FF:FF:FF:FF”や“IPパケットであり、その送信元IPアドレスが192.168.1.1”といった条件を指定することができます。宛先ポート番号アクションは、ヘッダフィールドにマッチしたパケットの処理を指定します。仕様で規定されているアクションを表2に示します。一つのフローに対して、複数のアクションを指定することも可能です。“宛先IPアドレスを書き換えた上での指定のポートからの出力”や、“指定のポートから出力させた後、さらに別のポートからも出力”といった動作を指定できます。指定のフィールドを書き換えるForwardアクションには、出力先のポート番号が指定されます。OpenFlowスイッチが実際に持つポートの他に、特殊な用途に用いるための論理ポートが定義されています(表3)。スパニングツリーに沿って転送Modify-Fieldアクションでは、表4に示すフィールドの書き換えが定義されています。ルータ機能を実現する際に必要となるMACアドレスの書き換えや、NAT機能を実現する際のIPアドレス、TCP/UDPポート番号の書き換えなどを行うことができます。プロトコル図1で示した通り、OpenFlowスイッチは、OpenFlowコントローラから制御されます。Security)を用いて接続されます。コントローラとスイッチ間の接続のために、別途レガシーネットワークを用意して、その上でTCP/TLSコネクションを張る構成が一般的です。どちらからコネクションの開設を行うかは仕様中に規定されていませんが、現状ではスイッチ側から行う実装が一般的です。このTCP/TLSコネクションを用いて、コントローラとスイッチ間の通信に用いられるのがOpenFlowプロトコルです。OpenFlowプロトコルには、表5に示すメッセージが定義されています。この中で主要なメッセージについて、次に説明を行います。ローがなかった場合、受信パケットをコントローラへと送るために用いられます。このメッセージで送られるパケットを元にフローを作成するなど、OpenFlow特有の処理を実現するために欠かせないメッセージです。Inでコントローラに送られてきたパケットを本来の宛先に送るために、スイッチ側へと送り返す際に用いられます。コントローラが独自に作ったパケットを出力させる際にも用いられます。Modメッセージ:コントローラが作ったフローをスイッチへと送るために用いられます。その際に、フローを設定してから一定時間後に消すためのハードタイムアウトと、フローが参照されない時間が一定時間経過した後に消すためのアイドルタイムアウトの、2種類のタイムアウト値を設定できます。Removedメッセージ:何らかの理由でフローテーブルからフローが消された時に、コントローラへの通知のために用いられます。その際に、そのフローの参照回数や生存時間などの統計情報が併せて送られます。Out等のメッセージ受信後に、それぞれの処理完了をコントローラへ報告しません。Requestメッセージを送る必要があります。Replyメッセージをコントローラへと送ります。前章で説明したようにOpenFlow仕様では、スイッチの動作とその制御のためのメッセージが定義されています。これらを組み合わせて、ネットワークをどのように制御するかは、仕様中に規定されていません。コントローラを開発する際に、必要となる制御機能自体を設計し、それを実現することが可能です。そのため、コントローラの動作は、その目的や実装ごとに異なります。Switch※2を取り上げ、その動作例を紹介します。Switchは、OpenFlowスイッチで構成されたネットワークを、複数のL2ドメイン(スライス)に分けて使用する際に用いるコントローラです(図2)。Switchへと送ります。Switchは、次のように動作します(図3)。(FDB)に登録します。パケットの宛先MACアドレスをキーにFDBを検索し、出口スイッチとポートを決定します。DBを用いて検索し、両者が同一スライスに所属している場合のみ次の処理に進みます。DBの情報を用いて、パケットを受信したスイッチから出口スイッチまでの最短パスを計算します。Modメッセージを用い、パス上の各スイッチにフローを設定します。Outメッセージを用いて出口スイッチへと送ります。L2スイッチングの機能をコントローラ側で実現するために、ステップ1でMACアドレスを学習し、ステップ2で学習した結果を用いた出力ポートを決定しています。Outメッセージで各スイッチへと送ります。この実装の利点は、他のスライスに影響を与えることなく、スライスの追加や削除が容易にできることです。既存のVLAN技術を使ってスライスを作る場合、ネットワークを構成する各スイッチに対して設定変更を行う必要があります。DBに追加するだけで完了します。DBの情報を使用するのは、実際に所属するスライス間の通信が発生する時なので、新規スライスの追加が他のスライスに影響を与えることはありません。Switchは、オープンソースのコントローラ開発フレームワークである、Trema※3を用いて実装されています。このコントローラのソースコード自体もGitHub上で公開されています※4。Switchでは、最短パスを計算するために、トポロジー情報(スイッチ間の接続関係に関する情報)を用いていました。トポロジー検出の仕組みは、OpenFlow仕様中には規定されていません。(LLDP)の仕組みを流用した検出方法について紹介します。この検出方法は、OpenFlow仕様の範囲内で動作するため、多くのOpenFlowコントローラにて採用されています。LLDPとは、Ethernetスイッチ同士の自律的な情報交換により、スイッチ間の接続関係を知るための仕組みで、IEEEにて標準化されています※5。LLDPに対応したスイッチは、自身に関する情報を埋め込んだLLDPパケットを生成し、隣接するスイッチへと通知します。OpenFlow仕様では規定されていないため、OpenFlowスイッチはこの機能を持っていない可能性があります。そのため、ここで紹介する検出方法では、スイッチの代わりにコントローラがLLDPパケットの生成や、受け取ったLLDPパケットの解析を行います。この検出方法の具体的な動作を、図4を用いて説明します。スイッチ1のポート4に接続するリンクを調べる場合について考えます。0x1とポート番号4を埋め込んだLLDPパケットを作ります。Outメッセージを作り、先ほど作ったLLDPパケットをスイッチ0x1へと送ります。Outを受け取ったスイッチはアクションに従い、LLDPパケットを指定されたポート4から出力します。その結果、LLDPパケットは、ポート4の先につながるスイッチ0x2へと到着します。LLDPパケットを受け取ったスイッチ0x2は、自身のフローテーブルを参照し、パケットの処理方法を調べます。Inとしてコントローラまで戻されます。Inメッセージを解析することで、スイッチ0x1とスイッチ0x2の間のリンクを検出します。この一連の手続きを、コントローラと接続するスイッチに対して操り返すことで、ネットワーク全体のトポロジーを把握することができます。標準化についてOpenFlowの標準化は、Stanford大学を中心とするOpenFlowスイッチコンソーシアムにて開始され、2009年にバージョン1.0の仕様※1が策定されました。現在商用化されているOpenFlowスイッチやコントローラの多くは、このバージョン1.0に対応しています。(ONF)が設立され、OpenFlowの標準化は現在このONFにて行われています。SDN技術の推進を利用する側からの視点で標準化作業を行っていくために、ONFのボードはGoogle社、Facebook社やNTTコミュニケーションズ社といった、サービス事業者や通信事業者で構成されています。ONFでは、現在最新バージョンである1.3の仕様※6が策定されています。Bridge)への対応など、キャリア網への適用を想定した機能拡張が行われています。今後登場するスイッチやコントローラの多くは、このバージョンに対応したものになると考えられます。おわりに本稿では、OpenFlow技術を解説しました。OpenFlowではネットワークの制御方法を、ネットワーク管理者自らが自由に設計し、それを実現することができます。本稿ではOpenFlowコントローラの動作例をいくつか紹介しましたが、これらはあくまで一例に過ぎません。目的が同じでも、いくつかの異なる制御方式が考えられます。新たな制御方法の設計・実装は、従来のように機器ごとに用意された機能を組み合わせて使うことと比べると、少し敷居が高いかもしれません。従来の常識にとらわれることなく、ネットワーク制御のあるべき姿を再考してみることは、ネットワーク技術の今後の発展には不可欠であると、筆者は考えています。本稿がその一助となれば幸いです。トピックスとお知らせ一覧SNS2020年2019年2018年2017年2016年2015年2014年2013年2012年2011年2010年2009年2008年2007年2006年2005年2004年2003年2002年2001年2000年1999年1998年1997年Web更新履歴一覧2020年の更新履歴2019年の更新履歴2018年の更新履歴2017年の更新履歴2016年の更新履歴2015年の更新履歴2014年の更新履歴2013年の更新履歴2012年の更新履歴2011年の更新履歴2010年の更新履歴2009年の更新履歴2008年の更新履歴2007年の更新履歴2006年の更新履歴2005年の更新履歴2004年の更新履歴2003年の更新履歴2002年の更新履歴Q&AIPアドレスWHOIS/DBJPNIC認証局ドメイン名ニュースレター/メールマガジン会員JPNICについて統計よくある質問イベントカレンダー2020年2019年2018年2017年2016年2015年2014年2013年2012年2011年2010年2009年2008年2007年2006年2005年2004年2003年2002年2001年2000年1999年1998年1997年1996年1995年1994年1993年WHOISGateway表示例このページを評価してくださいこのWebページは役に立ちましたか?役に立った役に立たなかったどちらとも言えないページの改良点等がございましたら自由にご記入ください。回答を差し上げられません。回答が必要な場合は、お問い合わせ先をご利用ください。Views)登録パスワードが記載された確認メールが発送されます。再度ご登録手続きを行ってください。Views)登録パスワードが記載された確認メールが発送されます。再度ご登録手続きを行ってください。