(57)【特許請求の範囲】
【請求項１】
複数のパケット転送装置と、
前記パケット転送装置を制御する制御装置とを備え、
前記制御装置は、
パケット転送装置への応答要求を送る応答要求送信手段と、
パケット転送装置から該パケット転送装置の持つポートの情報を含む応答を受信する応答受信手段と、
各パケット転送装置から送信された前記応答に基づいて、制御装置および各パケット転送装置の各ポート間の接続情報を含むトポロジー情報を作成するトポロジー情報作成手段とを含み、
前記パケット転送装置は、
応答要求を受信したときに、該応答要求を受信したポート以外のポートから該応答要求を転送する転送手段と、
応答要求を受信したときに、自パケット転送装置のみのポートの情報と前記自パケット転送装置から前記制御装置への応答経路の情報とを含んだ、前記応答経路に沿って送られる前記応答を返す応答送信手段とを含む
ことを特徴とする通信システム。
【請求項２】
応答要求送信手段は、
定期的にパケット転送装置への応答要求を送るとともに、応答要求を送る回毎に、応答要求を送る回の識別情報である回次識別情報を応答要求に含め、
転送手段は、
受信した応答要求に含まれている回次識別情報が、未だ受け取ったことのない回次識別情報であることを条件に、応答要求を受信したポート以外のポートから該応答要求を転送する
請求項１に記載の通信システム。
【請求項３】
応答送信手段は、
応答要求を受信したときに、制御装置が過去に送信した応答要求に応じて応答を返した時から、前記応答要求を受信したパケット転送装置自身に関して他のパケット転送装置との接続関係が変化していることを条件に、応答を返す
請求項２に記載の通信システム。
【請求項４】
トポロジー情報作成手段は、
一旦トポロジー情報を作成後に送信した応答要求に起因して応答を受信したときに、該応答に基づいてトポロジー情報を更新する
請求項２または請求項３に記載の通信システム。
【請求項５】
制御装置は、
トポロジー情報に基づいて制御装置と各パケット転送装置間の経路である制御チャネルを決定する制御チャネル決定手段と、
前記制御チャネルを各パケット転送装置へ通知する制御チャネル通知を送信する制御チャネル通知送信手段とを含み、
パケット転送装置は、
前記制御チャネル通知を受信したときに、該制御チャネル通知に基づいて、前記制御装置と自パケット転送装置との間の制御チャネルを記憶する制御チャネル記憶手段を含む
請求項１から請求項４のうちのいずれか１項に記載の通信システム。
【請求項６】
複数のパケット転送装置を制御する制御装置であって、
パケット転送装置への応答要求を送る応答要求送信手段と、
パケット転送装置から、該パケット転送装置のみのポートの情報と該パケット転送装置から当該制御装置への応答経路の情報とを含んだ、前記応答経路に沿って送られる応答を受信する応答受信手段と、
各パケット転送装置から送信された前記応答に基づいて、制御装置および各パケット転送装置の各ポート間の接続情報を含むトポロジー情報を作成するトポロジー情報作成手段とを備える
ことを特徴とする制御装置。
【請求項７】
応答要求送信手段は、
定期的にパケット転送装置への応答要求を送るとともに、応答要求を送る回毎に、応答要求を送る回の識別情報である回次識別情報を応答要求に含める
請求項６に記載の制御装置。
【請求項８】
制御装置によって制御されるパケット転送装置であって、
前記制御装置が送信した応答要求を受信したときに、該応答要求を受信したポート以外のポートから該応答要求を転送する転送手段と、
前記制御装置が送信した応答要求を受信したときに、自パケット転送装置のみのポートの情報と前記自パケット転送装置から前記制御装置への応答経路の情報とを含んだ、前記応答経路に沿って送られる前記応答を返す応答送信手段とを備える
ことを特徴とするパケット転送装置。
【請求項９】
複数のパケット転送装置を制御する制御装置が、パケット転送装置への応答要求を送り、
パケット転送装置から、該パケット転送装置のみの持つポートの情報と該パケット転送装置から前記制御装置への応答経路の情報とを含んだ、前記応答経路に沿って送られる応答を受信し、
各パケット転送装置から送信された前記応答に基づいて、制御装置および各パケット転送装置の各ポート間の接続情報を含むトポロジー情報を作成する
ことを特徴とするトポロジー情報作成方法。
【請求項１０】
複数のパケット転送装置を制御するコンピュータに搭載される制御装置用プログラムであって、
該コンピュータに、
パケット転送装置への応答要求を送る応答要求送信処理、
パケット転送装置から、該パケット転送装置のみの持つポートの情報と該パケット転送装置から当該コンピュータへの応答経路の情報とを含んだ、前記応答経路に沿って送られる応答を受信する応答受信処理、および、
各パケット転送装置から送信された前記応答に基づいて、制御装置および各パケット転送装置の各ポート間の接続情報を含むトポロジー情報を作成するトポロジー情報作成処理
を実行させるための制御装置用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のパケット転送装置と各パケット転送装置を制御する制御装置とを含む通信システム、および、その通信システムに適用されるパケット転送装置、制御装置、トポロジー情報作成方法、制御装置用プログラムに関する。
【背景技術】
【０００２】
パケットを転送する複数のスイッチと、各スイッチを制御する制御装置とを備え、制御装置が各スイッチにフローエントリ情報を設定し、各スイッチが受信したパケットをフローエントリ情報に従って転送する通信システムがある。フローエントリ情報とは、受信したパケットのヘッダに応じて、そのパケットをどのように処理するか（転送、廃棄、書換え等）を規定した情報である。このような通信システムでは、制御装置がスイッチを制御するために用いる制御チャネルが必要となる。例えば、スイッチは、フローエントリ情報に規定されていないパケットを受信した場合には、その旨を制御装置に通知し、制御装置は、そのパケットに応じたフローエントリ情報をそのスイッチに送信する。制御チャネルは、このようなスイッチから制御装置への通知や、制御装置からスイッチに対するフローエントリ情報の送信等に用いられる。制御装置がスイッチを制御するためのプロトコルは、オープンフローと呼ばれている。なお、スイッチは、パケットを転送するパケット転送装置であるということができる。制御チャネルは、オープンフローにおける“Secure channel”に相当する。また、オープンフローにおいて、制御装置は「コントローラ」と呼ばれる。【０００３】
オープンフローの仕様が非特許文献１に記載されている。このオープンフローの仕様には、制御装置とスイッチとがポート番号６６３３番のＴＣＰ（Transmission Control Protocol ）においてＳＳＬ（Secure Socket Layer）を用いて通信することが記載されている。このことから、一般的に、オープンフローを適用した通信システムでは、複数のスイッチが順次パケットを転送していく通信ネットワークと、制御装置と各スイッチとの制御チャネルとなる通信ネットワークとが別個に設けられている。図２０は、オープンフローを適用した一般的な通信システムの例を示す説明図である。図２０に示す各スイッチ９２は、受信したパケットをフローエントリ情報に基づいて他のスイッチに転送するときには、パケット転送用通信ネットワーク９４を用いる。また、制御チャネルとなる制御用通信ネットワーク９３が、パケット転送用通信ネットワーク９４とは別に設けられ、制御装置９１は、制御用通信ネットワーク９３を介して、個々のスイッチ９２を制御する。制御用通信ネットワーク９３には、例えば、ＳＴＰ（Spanning Tree Protocol），ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol ），ＲＩＰ（Routing Information Protocol），ＯＳＰＦ（Open Shortest Path First）等のルーティングプロトコルが使用される。【０００４】
また、図２０に例示する通信システムでは、スイッチ群のトポロジーが変更された場合、通信システム内で各スイッチが制御フレームの送受信を行い、新たなトポロジーを把握する。トポロジーを把握するための制御フレームの例として、例えば、ＳＴＰにおけるＢＰＤＵ（Bridge Protocol Data Unit ）等がある。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】“OpenFlow Switch Specification Version 0.9.0”，“4.4 Encryption”、２００９年７月２０日、[平成２１年１０月６日検索]、インターネット<http://www.openflowswitch.org/documents/openflow-spec-v0.9.0.pdf>
【発明の概要】
【発明が解決しようとする課題】
【０００６】
オープンフローを適用した一般的な通信システム（図２０参照）では、制御用通信ネットワーク９３と、パケット転送用通信ネットワーク９４を用いる。しかし、複数のパケット転送装置と各パケット転送装置を制御する制御装置とを含む通信システムにおいて、各パケット転送装置がパケット転送に用いる通信ネットワークと、制御装置が各パケット転送装置を制御するために用いる通信ネットワークとを一種類にまとめることが好ましい。【０００７】
そこで、本発明は、複数のパケット転送装置と各パケット転送装置を制御する制御装置とを含む通信システムであって、各パケット転送装置がパケット転送に用いる通信ネットワークと、制御装置が各パケット転送装置を制御するために用いる通信ネットワークとを一種類にまとめることができる通信システム、および、その通信システムに適用されるパケット転送装置、制御装置、トポロジー情報作成方法、制御装置用プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明による通信システムは、複数のパケット転送装置と、パケット転送装置を制御する制御装置とを備え、制御装置が、パケット転送装置への応答要求を送る応答要求送信手段と、パケット転送装置から該パケット転送装置の持つポートの情報を含む応答を受信する応答受信手段と、各パケット転送装置から送信された応答に基づいて、制御装置および各パケット転送装置の各ポート間の接続情報を含むトポロジー情報を作成するトポロジー情報作成手段とを含み、パケット転送装置が、応答要求を受信したときに、該応答要求を受信したポート以外のポートから該応答要求を転送する転送手段と、応答要求を受信したときに、自パケット転送装置のみのポートの情報と自パケット転送装置から制御装置への応答経路の情報とを含んだ、応答経路に沿って送られる応答を返す応答送信手段とを含むことを特徴とする。
【０００９】
また、本発明による制御装置は、複数のパケット転送装置を制御する制御装置であって、パケット転送装置への応答要求を送る応答要求送信手段と、パケット転送装置から、該パケット転送装置のみのポートの情報と該パケット転送装置から当該制御装置への応答経路の情報とを含んだ、応答経路に沿って送られる応答を受信する応答受信手段と、各パケット転送装置から送信された応答に基づいて、制御装置および各パケット転送装置の各ポート間の接続情報を含むトポロジー情報を作成するトポロジー情報作成手段とを備えることを特徴とする。
【００１０】
また、本発明によるパケット転送装置は、制御装置によって制御されるパケット転送装置であって、制御装置が送信した応答要求を受信したときに、該応答要求を受信したポート以外のポートから該応答要求を転送する転送手段と、制御装置が送信した応答要求を受信したときに、自パケット転送装置のみのポートの情報と自パケット転送装置から制御装置への応答経路の情報とを含んだ、応答経路に沿って送られる応答を返す応答送信手段とを備えることを特徴とする。
【００１１】
また、本発明によるトポロジー情報作成方法は、複数のパケット転送装置を制御する制御装置が、パケット転送装置への応答要求を送り、パケット転送装置から該パケット転送装置のみの持つポートの情報と該パケット転送装置から制御装置への応答経路の情報とを含んだ、応答経路に沿って送られる応答を受信し、各パケット転送装置から送信された応答に基づいて、制御装置および各パケット転送装置の各ポート間の接続情報を含むトポロジー情報を作成することを特徴とする。
【００１２】
また、本発明による制御装置用プログラムは、複数のパケット転送装置を制御するコンピュータに搭載される制御装置用プログラムであって、該コンピュータに、パケット転送装置への応答要求を送る応答要求送信処理、パケット転送装置から、該パケット転送装置のみの持つポートの情報と該パケット転送装置から当該コンピュータへの応答経路の情報とを含んだ、応答経路に沿って送られる応答を受信する応答受信処理、および、各パケット転送装置から送信された応答に基づいて、制御装置および各パケット転送装置の各ポート間の接続情報を含むトポロジー情報を作成するトポロジー情報作成処理を実行させることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、複数のパケット転送装置と各パケット転送装置を制御する制御装置とを含む通信システムにおいて、各パケット転送装置がパケット転送に用いる通信ネットワークと、制御装置が各パケット転送装置を制御するために用いる通信ネットワークとを一種類にまとめることができる。
【図面の簡単な説明】
【００１４】
【図１】制御装置がトポロジー情報を保持していない状態からトンネリングによる通信を行うまでの過程を模式的に示した説明図である。
【図２】本発明の通信システムが備える制御装置およびスイッチの構成例を示すブロック図である。
【図３】ソースルーティングの例を示す説明図である。
【図４】request パケット内の出力ポート列の変化の例を示す説明図である。
【図５】特定パケットのフォーマットの例を示す説明図である。
【図６】request パケットに含まれる情報の例を示す説明図である。
【図７】reply パケットに含まれる情報の例を示す説明図である。
【図８】setup パケットに含まれる情報の例を示す説明図である。
【図９】tunnelパケットに含まれる情報の例を示す説明図である。
【図１０】特定パケットの送受信の例を示す説明図である。
【図１１】制御装置の処理経過の例を示すフローチャートである。
【図１２】トポロジー情報作成処理の例を示すフローチャートである。
【図１３】各スイッチの各ポートから送信されるreply パケットの経路の例を示す説明図である。
【図１４】図１３に示す各経路で制御装置に到達したreply パケットを示す説明図である。
【図１５】スイッチの処理経過の例を示すフローチャートである。
【図１６】スイッチの処理経過の例を示すフローチャートである。
【図１７】本発明の通信システムの最小構成の例を示すブロック図である。
【図１８】本発明の制御装置の最小構成の例を示すブロック図である。
【図１９】本発明のパケット転送装置の最小構成の例を示すブロック図である。
【図２０】オープンフローを適用した一般的な通信システムの例を示す説明図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態を、図面を参照して説明する。
本発明の通信システムは、パケットを転送する複数のパケット転送装置と、その複数のスイッチを制御する制御装置とを備える。制御装置が、パケット転送装置に対してフローエントリ情報を送信し、パケット転送装置は、パケット受信時に、そのフローエントリ情報に従って、パケットを処理する。この結果、いずれかのパケット転送装置に接続された端末装置が、他のパケット転送装置に接続された別の端末装置に対してパケットを任意の経路で送信したり、同報したりすることが可能となる。
【００１６】
本発明におけるパケット転送装置は、例えば、オープンフローにおけるスイッチであり、本発明における制御装置は、例えば、オープンフローにおけるコントローラである。以下、パケット転送装置および制御装置が、それぞれ、オープンフローにおけるスイッチおよびコントローラである場合を例にして説明する。ただし、本発明はオープンフロー以外にも適用可能である。通信ネットワーク上の各パケット転送装置を制御装置が集中管理する構成の通信システムであれば、本発明を適用することができる。
【００１７】
本発明の通信システムは、制御装置（コントローラ）とスイッチとの間に制御用に特化した通信ネットワークを備えない。制御装置は、少なくとも１つのスイッチに接続されていればよい。制御装置は、各スイッチがパケット転送に用いる通信ネットワークを用いて、個々のスイッチとの間に制御チャネルを設ける。具体的には、制御装置は、制御装置から見て制御装置自身に接続されているスイッチ以降の各スイッチとの間で、各スイッチがパケット転送に用いる通信ネットワークのリンクを利用して制御チャネルを形成する。そして、制御装置は、制御チャネルを介して、トンネリングにより各スイッチと通信を行い、個々のスイッチを制御する。すなわち、本発明では、制御装置が、各スイッチがパケット転送に用いる通信ネットワークを利用して、個々のスイッチとの間でスター構造のオーバレイネットワークを形成しているということができる。
【００１８】
また、本発明の通信システムでは、制御装置が制御装置自身および各スイッチの各ポート間の接続情報を含むトポロジー情報を保持する。個々のスイッチは、トポロジー情報を保持しなくてよい。制御装置は、初期状態においては、トポロジー情報を保持しておらず、スイッチに対して、ポートの接続状態に関する問い合わせを行い、トポロジー情報を作成する。制御装置は、スイッチ群のトポロジーを把握すると、スイッチとの間の制御チャネルとなる経路を個々のスイッチ毎にそれぞれ決定し、各スイッチに対して、制御装置までの経路を通知するためのパケットを送信する。この結果、制御装置は、各スイッチへの制御チャネルを認識可能となり、各スイッチも制御装置への制御チャネルを認識可能となる。この後、スイッチと制御装置が通信を行う場合、制御チャネルを介して、トンネリングにより通信を行う。
【００１９】
図１は、制御装置がトポロジー情報を保持していない状態から、制御装置とスイッチとがトンネリングによる通信を行うまでの過程を模式的に示した説明図である。図１（ａ）は、本発明の通信システムの初期状態を模式的に示している。この状態では、制御装置１０は、スイッチ群の少なくとも１つのスイッチに接続されているが、どのスイッチのどのポートに接続されているかは認識していない状態である。
【００２０】
制御装置１０は、スイッチに対してリンクアップしているポートを問い合わせるパケット（以下、request パケットと記す。）を、どのスイッチに接続されているのか不明な制御装置１０自身のポートから送信する（図１（ｂ）参照）。なお、リンクアップしているポートとは、他のスイッチに接続されているポートである。
【００２１】
request パケットを受信したスイッチ２０は、制御装置１０に対して、リンクアップしているポートを示す情報と、そのスイッチがrequest パケットを受信したポートを示す情報と、スイッチ２０自身の識別情報とを含むパケット（以下、reply パケットと記す。）を、request パケットを受信したポートから制御装置１０に返す（図１（ｃ）参照）。
【００２２】
本発明では、制御装置１０は、reply パケットに基づいてトポロジー情報を生成し、保持する。ただし、制御装置１０は、トポロジー情報生成後も、スイッチのトポロジーの変化に応じてトポロジー情報を更新するため、request パケットを再度送信する。すなわち、制御装置１０は、スイッチのトポロジーを探索するため、request パケットの送信を繰り返す。そして、制御装置１０は、一回一回の探索を識別するための情報をrequest パケットに含める。本実施形態では、番号により、それぞれの探索を区別する場合を例に説明し、以下、この番号をシーケンス番号と記す。制御装置１０は、一回の探索において、複数のポートからrequest パケットを送信する場合、各request パケットに同一のシーケンス番号を設定する。そして、その後、再度探索を行うために、再度request パケットを送信する場合、制御装置１０は、前回の探索時とは異なるシーケンス番号を含むrequest パケットを送信する。なお、前回の探索時と同様に、各ポートから送信するrequest パケットにおけるシーケンス番号は同一である。
【００２３】
request パケットを受信したスイッチ２０は、そのrequest パケットに含まれるシーケンス番号が未だ受け取ったことのないシーケンス番号であることを条件に、そのrequest パケットの受信ポート以外のポートからそのrequest パケットを送信する。すなわち、request パケットのフラッディングを行う。なお、フラッディングの条件を設けることにより、request パケットおよびrequest パケットに起因するreply パケットの通信量を抑えることができる。また、各スイッチ２０がフラッディングを行うことにより、個々のスイッチ２０は、既にrequest パケットを受信したポート以外のポートからもrequest パケットを受信する。その場合にも、スイッチ２０は、request パケットを受信したポートからreply パケットを制御装置１０に返す。制御装置１０は、各スイッチ２０から受信したそれぞれのreply パケットに基づいて、制御装置１０自身および各スイッチのポート同士の接続関係を表すトポロジー情報を生成し、保持する。
【００２４】
制御装置１０は、トポロジー情報に基づいて、スイッチ毎に、制御チャネルとなる経路を決定する。この結果、制御装置１０がスイッチ毎の制御チャネルを認識した状態となる。そして、制御装置１０は、スイッチ毎に、制御チャネルとなる経路を通知するためのパケット（以下、setup パケットと記す。）を送信する（図１（ｄ）参照）。setup パケットを受信した個々のスイッチ２０は、setup パケットに基づいて、スイッチ２０自身から制御装置１０までの制御チャネルとなる経路を記憶する。この結果、各スイッチ２０は、それぞれ制御装置１０までの制御チャネルを認識可能な状態となる。
【００２５】
以降、制御装置１０がスイッチ２０に対する制御を行うための通信は、個々のスイッチ２０毎に定められた制御チャネルを介して、トンネリングにより行われる（図１（ｅ）参照）。例えば、あるスイッチ２０が、フローエントリ情報に規定されていないパケットを受信した場合には、その旨を制御装置１０に通知する。このとき、スイッチ２０は、制御チャネルを介して、トンネリングにより、この通知を行う。また、この通知を受けた制御装置１０は、フローエントリ情報を生成し、そのスイッチに送信する。このとき、制御装置１０は、制御チャネルを介して、トンネリングによりフローエントリ情報を送信する。このように、制御装置１０とスイッチ２０との間で制御チャネルを介してトンネリングにより送受信されるパケットを、以下、tunnelパケットと記す。
【００２６】
request パケット、reply パケット、setup パケットおよびtunnelパケットを特定パケットと記す。スイッチ２０は、特定パケットに対しては、スイッチ間で転送されるデータパケットとは異なる処理を行う。スイッチ２０は、端末（図示せず）同士が授受するデータパケットを受信した場合、フローエントリ情報に従って転送し、フローエントリ情報にデータパケットのフローが規定されていなければ、その旨を制御装置１０に通知する。一方、特定パケットに関しては、スイッチ２０は、このような処理を行わず、request パケット、reply パケット、setup パケットおよびtunnelパケットに応じた処理を行う。また、各スイッチは、データパケットと特定パケットとでは、特定パケットに対する処理を優先する。特定パケットに対する処理を優先することで、通信システムのＱｏＳ（Quality of Service）を保証することができる。
【００２７】
また、特定パケットには、その特定パケットの送信元からのホップ数に応じたカウント値が記述される。このカウント値をポートカウントと記す。
【００２８】
図２は、本発明の通信システムが備える制御装置およびスイッチの構成例を示すブロック図である。図２では、通信システムが４つのスイッチ２０ａ〜２０ｄを備える場合を例示しているが、スイッチの台数や、スイッチのトポロジーは特に限定されない。また、図２では、制御装置１０に２台のスイッチ２０ａ，２０ｂが接続されている場合を例示しているが、制御装置１０に接続されるスイッチの台数は１台であっても、３台以上であってもよい。制御装置１０には、少なくとも１台のスイッチが接続されていればよい。
【００２９】
制御装置１０は、制御装置側特定パケット送受信部１１と、トポロジー探索部１２と、トポロジー保持部１３と、制御チャネル経路決定部１４と、制御装置側制御メッセージトンネリング部１５とを備える。
【００３０】
制御装置側特定パケット送受信部１１（以下、特定パケット送受信部１１と記す。）は、特定パケットの送信および受信を行う。具体的には、特定パケット送受信部１１は、request パケット、setup パケットおよびtunnelパケットを送信し、reply パケットおよびtunnelパケットを受信する。
【００３１】
特定パケット送受信部１１は、スイッチからreply パケットを受信した場合には、そのreply パケットをトポロジー探索部１２に出力する。特定パケット送受信部１１は、スイッチからtunnelパケットを受信した場合には、そのtunnelパケットを制御装置側制御メッセージトンネリング処理部１５に出力する。
【００３２】
特定パケット送受信部１１が送信するsetup パケットおよびtunnelパケットは、ソースルーティングによって順次、制御チャネル上のスイッチに転送されていき、宛先となるスイッチに到達する。setup パケットを生成する制御チャネル経路決定部１４は、制御装置１０自身の出力ポート、および宛先となるスイッチまでの制御チャネル上の各スイッチにおける出力ポートを順にsetup パケット内に記述し、特定パケット送受信部１１は、その出力ポート列の最初に記述された制御装置１０自身のポートからsetup パケットを送信する。同様に、スイッチに送るtunnelパケットを生成する制御装置側制御メッセージトンネリング処理部１５は、制御装置１０自身の出力ポート、および宛先となるスイッチまでの制御チャネル上の各スイッチにおける出力ポートを順にtunnelパケット内に記述し、特定パケット送受信部１１は、その出力ポート列の最初に記述された制御装置１０自身のポートから、そのtunnelパケットを送信する。ソースルーティングについては、後述する。
【００３３】
また、トポロジー探索部１２は、request パケットを生成する際に、そのrequest パケットを出力する制御装置１０自身のポートを記述する。特定パケット送受信部１１は、request パケットに記述された制御装置１０自身のポートからrequest パケットを送信する。
【００３４】
なお、ここでは便宜的に、ポートを特定パケットに記述すると説明しているが、具体的には、制御装置１０および各スイッチにおけるポート識別情報（例えば、ポート識別番号）を特定パケットに記述する。従って、出力ポート列は、ポート識別情報の並びである。以下の説明では、ポート識別情報として、番号（ポート識別番号）を用いる場合を例にする。
【００３５】
トポロジー探索部１２は、定期的にrequest パケットを生成して、特定パケット送受信部１１に送信させる。このとき、トポロジー探索部１２は、request パケットを出力する制御装置１０自身のポートを出力ポートとしてrequest パケットに記述するとともに、その出力ポート列の長さ（すなわち、記述した出力ポートの数）と、ポートカウントの初期値を記述する。この場合、出力ポートは制御装置１０自身のポートのみであるので、出力ポート列の長さは１である。制御装置１０が複数のポートを有している場合には、個々のポート毎にrequest パケットを生成する。特定パケット送受信部１１は、個々のrequest パケットを、request パケット内に記述されたポートから送信する。
【００３６】
また、トポロジー探索部１２は、上記のように、定期的にrequest パケットを生成する。トポロジー探索部１２は、一定期間をおいてrequest パケットを生成するそれぞれの回毎に、シーケンス番号を変化させて、シーケンス番号をrequest パケットに記述する。なお、１回のrequest パケット生成処理において、ポート毎にrequest パケットを生成する場合には、複数のrequest パケットを生成することになるが、その複数のrequest パケットに対しては、同一のシーケンス番号を記述する。図２に示す通信システムにおいて、トポロジー探索部１２は、ある時点で、スイッチ２０ａ，２０ｂが接続される各ポートから出力するrequest パケットに対してそれぞれ、シーケンス番号として例えば“１”を記述する。この結果、スイッチ２０ａ，２０ｂには、それぞれシーケンス番号“１”を含むrequest パケットが送信される。一定期間後、トポロジー探索部１２は、各ポートから出力するrequest パケットに対してそれぞれ、シーケンス番号“２”を記述する。この結果、スイッチ２０ａ，２０ｂには、それぞれシーケンス番号“２”を含むrequest パケットが送信される。
【００３７】
また、トポロジー探索部１２は、request パケットへの応答として各スイッチから得たreply パケットに基づいてトポロジー情報を生成する。各スイッチは、未だ受け取ったことのないシーケンス番号を記述したrequest パケットを受信した場合、そのrequest パケットをフラッディングする。従って、制御装置１０は、直接接続されているスイッチにrequest パケットを送信するだけで、各スイッチからreply パケットを得ることができる。トポロジー探索部１２は、各reply パケットに基づいてトポロジー情報を生成し、そのトポロジー情報をトポロジー保持部１３に記憶させる。
【００３８】
トポロジー保持部１３は、トポロジー情報を記憶する記憶装置である。
【００３９】
制御チャネル経路決定部１４は、トポロジー情報を参照して、制御チャネルをスイッチ毎に決定する。この制御チャネルの決定方法は、特に限定されない。例えば、制御チャネル経路決定部１４は、ダイクストラ法により、スイッチまでの最短経路を計算し、その経路を制御チャネルとして決定してもよい。そして、制御チャネル経路決定部１４は、スイッチ毎に、setup パケットを生成する。このとき、制御チャネル経路決定部１４は、制御装置１０自身の出力ポート、およびsetup パケットの宛先となるスイッチまでの制御チャネル上の各スイッチにおける出力ポートを順に、setup パケットに記述する。さらに、制御チャネル経路決定部１４は、setup パケットに、その出力ポート列の長さ（すなわち、記述した出力ポートの数）と、ポートカウントの初期値を記述する。そして、特定パケット送受信部１１にそのsetup パケットを送信させる。
【００４０】
制御装置側制御メッセージトンネリング処理部１５（以下、制御メッセージトンネリング処理部１５と記す。）は、制御装置１０とスイッチ間との間で授受する制御メッセージをトンネリングにより送受信する。すなわち、制御メッセージトンネリング処理部１５は、スイッチに送信する制御メッセージ（例えば、フローエントリ情報）を暗号化し、カプセル化したtunnelパケットを生成する。このとき、制御メッセージトンネリング処理部１５は、制御装置１０自身の出力ポート、およびtunnelパケットの宛先となるスイッチまでの制御チャネル上の各スイッチにおける出力ポートを順に、tunnelパケットに記述する。さらに、制御メッセージトンネリング処理部１５は、tunnelパケットに、その出力ポート列の長さと、ポートカウントの初期値を記述する。そして、特定パケット送受信部１１にそのtunnelパケットを送信させる。
【００４１】
また、特定パケット送受信部１１がスイッチからtunnelパケットを受信し、そのtunnelパケットを制御メッセージトンネリング処理部１５に出力した場合、制御メッセージトンネリング処理部１５は、そのtunnelパケットに含まれている制御メッセージをデカプセル化し、さらに、その制御メッセージを復号する。
【００４２】
なお、本実施形態では、ポートカウントの初期値を０とする場合を例にして説明するが、ポートカウントの初期値は０以外であってもよい。
【００４３】
特定パケット送受信部１１、トポロジー探索部１２、トポロジー保持部１３、制御チャネル経路決定部１４および制御メッセージトンネリング部１５は、それぞれ別々のユニットで実現されていてもよい。
【００４４】
また、特定パケット送受信部１１、トポロジー探索部１２、制御チャネル経路決定部１４および制御メッセージトンネリング部１５は、制御装置用プログラムに従って動作するコンピュータのＣＰＵによって実現されていてもよい。この場合、例えば、コンピュータのプログラム記憶装置（図示略）が制御装置用プログラムを記憶し、ＣＰＵがそのプログラムを読み込んで、そのプログラムに従って、特定パケット送受信部１１、トポロジー探索部１２、制御チャネル経路決定部１４および制御メッセージトンネリング部１５として動作すればよい。
【００４５】
次に、スイッチの構成について説明する。各スイッチ２０ａ〜２０ｄの構成は、同様である。以下、スイッチ２０ａを例にして説明する。
【００４６】
スイッチ２０ａは、スイッチ側特定パケット送受信部２１と、フラッディング部２２と、情報提供部２３と、経路保持部２４と、スイッチ側制御メッセージトンネリング部２５とを備える。
【００４７】
スイッチ側特定パケット送受信部２１（以下、特定パケット送受信部２１と記す。）は、特定パケットの転送、受信、送信を行う。
【００４８】
特定パケット送受信部２１は、request パケット以外の特定パケットを受信した場合、その特定パケットに記述された出力ポート列の長さと、ポートカウントとを比較し、スイッチ２０ａ自身が特定パケットの宛先になっているか否かを判定する。本実施形態では、ポートカウントの初期値を０としているので、受信した特定パケット内のポートカウントに１加算した値と、出力ポート列の長さとが一致していれば、スイッチ２０ａ自身が特定パケットの宛先になっていると判定し、特定パケット内のポートカウントに１加算した値が出力ポート列の長さより小さければ、宛先になっていないと判定すればよい。なお、出力ポートの列の長さとは、特定パケット内に記述された出力ポートの数である。特定パケット送受信部２１は、スイッチ２０ａ自身が宛先でないと判定した場合、特定パケット内の出力ポート列に記述されたポートのうち、ポートカウントから定まるポートを、その特定パケットを受信したスイッチ２０ａ自身のポートに書き換える。本実施形態では、特定パケットに記述されたポートカウントの値をｋとすると、出力ポート列内でｋ＋１番目に記述されたポートを、特定パケットを受信したスイッチ２０ａ自身のポートに書き換える。また、特定パケット送受信部２１は、出力ポート列において、ｋ＋２番目のポート（すなわち、書き換えたポートの次のポート）を特定する。このポートが、スイッチ２０ａ自身から特定パケットを送信すべきポートである。また、特定パケット送受信部２１は、特定パケット内に記述されたポートカウントの値に１を加算する。そして、特定パケット送受信部２１は、特定したポートから特定パケットを送信する。この結果、ポートカウントがインクリメントされた特定パケットが転送される。
【００４９】
また、スイッチ２０ａ自身が特定パケットの宛先になっていると判定した場合、特定パケット送受信部２１は、特定パケットがsetup パケットであれば、そのsetup パケットを経路保持部２４に出力し、特定パケットがtunnelパケットであれば、そのtunnelパケットをスイッチ側制御メッセージトンネリング部２５に出力する。
【００５０】
また、特定パケット送受信部２１は、request パケットを受信した場合、そのrequest パケットをフラッディング処理部２２に出力する。また、フラッディング処理部２２は、そのrequest パケットをフラッディングするか否かを判定し、フラッディングすると判定した場合には、request パケット内の出力ポート列の最後にスイッチ２０ａ自身のポートを記述し、出力ポート列の長さおよびポートカウントを更新する。特定パケット送受信部２１は、フラッディング処理部２２によって更新されたrequest パケットを、出力ポート列の最後に記述された２０ａ自身のポートから送信する。
【００５１】
また、特定パケット送受信部２１は、reply パケットを送信する。後述するように、reply パケットを生成する情報提供部２３は、そのスイッチ自身から制御装置１０までの経路上の各スイッチにおける出力ポートを順にreply パケットに記述する。特定パケット送受信部２１は、その出力ポート列の最初に記述されたスイッチ２０ａ自身のポートからreply パケットを送信する。
【００５２】
フラッディング処理部２２は、特定パケット送受信部２１からrequest パケットを入力されると、そのrequest パケットをフラッディングするか否かを判定する。フラッディング処理部２２は、特定パケット送受信部２１から入力されるrequest パケットに含まれるシーケンス番号を記憶し、新たに入力されたrequest パケットに含まれるシーケンス番号が未だ受け取ったことのないシーケンス番号であるならば、フラッディングすると判定し、受け取ったことのあるシーケンス番号であるならば、フラッディングしないと判定すればよい。すなわち、新たに入力されたrequest パケットに含まれるシーケンス番号が、記憶済みのどのシーケンス番号とも一致しないならばフラッディングすると判定し、記憶済みのいずれかのシーケンス番号と一致するならばフラッディングしないと判定する。この判定の後、フラッディング処理部２２は、そのrequest パケットに含まれるシーケンス番号も記憶する。
【００５３】
さらに、フラッディング処理部２２は、request パケットをフラッディングすると判定した場合、そのrequest パケットを受信したポート以外の各ポートから、そのrequest パケットが送信されるように、受信ポート以外のポート毎にrequest パケットのコピーを作成する。そして、フラッディング処理部２２は、コピーされたrequest パケットを送信する出力ポートを、そのrequest パケット内の出力ポート列の最後に記述する。さらに、フラッディング処理部２２は、出力ポート列として記述されたポートのうち、ポートカウントから定まるポートを、request パケットを受信したスイッチ２０ａ自身のポートに書き換える。本実施形態では、request パケットに記述されたポートカウントの値をｋとすると、出力ポート列内でｋ＋１番目に記述されたポートを、request パケットを受信したスイッチ２０ａ自身のポートに書き換える。この書き換えにより、フラッディングされたrequest パケットを受信した他のスイッチが、制御装置１０にreply パケットをソースルーティングによって送信できるようになる。また、フラッディング処理部２２は、そのrequest パケット内に記述された出力ポート列の長さの値と、ポートカウントの値に、それぞれ１を加算する。フラッディング処理部２２は、この処理を、ポート毎にコピーされた各request パケットに対して行う。フラッディング処理部２２は、出力ポート列、出力ポート列の長さおよびポートカウントを更新したrequest パケットを、特定パケット送受信部２１に、request パケットに対応するポートから送信させる。
【００５４】
また、フラッディング処理部２２は、フラッディングを行うか否かによらず、特定パケット送受信部２１から入力されたrequest パケットをそのまま情報提供部２３に出力する。すなわち、フラッディング処理部２２は、スイッチが受信したrequest パケットをそのまま情報提供部２３に出力する。
【００５５】
情報提供部２３は、フラッディング処理部２２からrequest パケットを受信すると、reply パケットとして、スイッチ２０ａ自身のリンクアップしているポートを示す情報と、スイッチ２０ａがそのrequest パケットを受信したポートを示す情報と、スイッチ２０ａの識別情報とを含むパケットを作成する。さらに、情報提供部２３は、そのスイッチ自身から制御装置１０までの経路上の各スイッチにおける出力ポートを順にreply パケットに記述する。この出力ポート列は、以下のように定めればよい。すなわち、情報提供部２３は、入力されたrequest パケットに記述された出力ポート列の最後のポートを、スイッチがそのrequest パケットを受信したポートに書き換える。さらに、情報提供部２３は、その書き換え後の出力ポート列内のポートの順を逆順に並べ替え、並べ替えた出力ポート列をreply パケットに記述する。また、情報提供部２３は、その出力ポート列の長さ、およびポートカウントの初期値もreply パケットに記述し、そのreply パケットを特定パケット送受信部２１に送信させる。この結果、スイッチは、request パケットを受信したポートから、そのrequest パケットに対するreply パケットを送信する。
【００５６】
ただし、情報提供部２３は、以下に示す場合には、reply パケットを生成しない。制御装置１０は、定期的にrequestメッセージを送信する。従って、過去に制御装置１０が送信したrequest パケットを受信したときに、情報提供部２３は、そのrequest フレームに応じてreply パケットを送信している。情報提供部２３は、定期的に制御装置１０から送信されてきた過去のrequest パケット受信時に送信したreply パケットと同一のreply パケットを送信することになる場合には、reply パケットを送信しない。具体的には、過去のrequest パケットに応じてreply パケットを送信した後、そのスイッチ自身に関して、新たにスイッチが接続されたり、あるいは、接続されていたスイッチが外されたりしていなければ、情報提供部２３は、新たに受信したrequest パケットに対してreply パケットを送信しない。
【００５７】
経路保持部２４は、特定パケット送受信部２１からsetup パケットを入力されると、そのsetup パケットから制御装置１０までの制御チャネルとなる経路を記憶する。具体的には、経路保持部２４は、入力されたsetup パケットに記述された出力ポート列の最後のポートを、スイッチがそのsetup パケットを受信したポートに書き換える。そして、経路保持部２４は、その書き換え後の出力ポート列内のポートの順を逆順に並べ替え、並べ替えた出力ポート列を、制御チャネルとなる経路を表す情報として記憶する。
【００５８】
スイッチ側制御メッセージトンネリング部２５（以下、制御メッセージトンネリング部２５と記す。）は、制御装置１０とスイッチ間との間で授受する制御メッセージをトンネリングにより送受信する。すなわち、制御メッセージトンネリング部２５は、制御装置１０に送信する制御メッセージ（例えば、フローエントリ情報に規定されていないパケットを受信した旨のメッセージ）を暗号化し、カプセル化したtunnelパケットを生成する。このとき、制御メッセージトンネリング部２５は、制御装置１０までの制御チャネルを表す出力ポート列を経路保持部２４から読み取り、その出力ポート列をtunnelパケットに記述する。さらに、制御メッセージトンネリング部２５は、tunnelパケットに、その出力ポート列の長さと、ポートカウントの初期値を記述する。そして、特定パケット送受信部２１にそのtunnelパケットを送信させる。
【００５９】
また、特定パケット送受信部２１からtunnelパケットが入力された場合、制御メッセージトンネリング部２５は、そのtunnelパケットに含まれている制御メッセージ（例えば、フローエントリ情報）をデカプセル化し、さらに、その制御メッセージを復号する。
【００６０】
特定パケット送受信部２１、フラッディング部２２、情報提供部２３、経路保持部２４および制御メッセージトンネリング部２５は、それぞれ別々のユニットで実現されていてもよい。
【００６１】
また、特定パケット送受信部２１、フラッディング部２２、情報提供部２３、経路保持部２４および制御メッセージトンネリング部２５は、パケット転送装置用プログラムに従って動作するコンピュータのＣＰＵによって実現されていてもよい。この場合、例えば、コンピュータのプログラム記憶装置（図示略）がパケット転送装置用プログラムを記憶し、ＣＰＵがそのプログラムを読み込んで、そのプログラムに従って、特定パケット送受信部２１、フラッディング部２２、情報提供部２３、経路保持部２４および制御メッセージトンネリング部２５として動作すればよい。
【００６２】
次に、本発明におけるソースルーティングについて説明する。ソースルーティングとは、送信元となるノードがパケット内に通信経路を記述し、中継ノードがパケット内に記述された通信経路に従ってパケットを転送するパケット転送方法である。ソースルーティングでは、中継ノードは、予め用意された経路情報を保持しておく必要がない。本発明の通信システムは、特定パケット内に、個々のノードが特定パケットを送信すべき出力ポートを順に並べた出力ポート列を記述する。そして、制御装置１０や各スイッチは、その出力ポート列に記述されたポートから特定パケットを送信することで、ソースルーティングを実現する。なお、制御装置１０や各スイッチは、自ノードに関する出力ポートが出力ポート列の何番目に記述されているのかを、ポートカウントによって判断する。以下、ソースルーティングの具体例を示す。
【００６３】
図３は、制御装置がスイッチに対してsetup パケットを送信する場合のソースルーティングの例を示す説明図である。ただし、説明を簡単にするため、図３に示すスイッチのトポロジーは、図２に示すトポロジーと異なるものとしている。図３に示す各スイッチ２０Ａ〜２０Ｄは、図２に示す各スイッチ２０ａ〜２０ｄと同様の構成である。また、図３において、制御装置１０および各スイッチ２０Ａ〜２０Ｄの近傍に示す数字は、各装置におけるポート識別番号である。また、以下の説明において、ポート識別番号がｎであるポートを、＃ｎと記す。
【００６４】
ここでは、制御装置１０がスイッチ２０Ｄを宛先としてsetup パケットを送信する場合を例にする。この例では、制御装置１０は、まず、ポートカウントを初期値０に設定し、｛２，３，２，１｝という出力ポート列を記述したsetup パケットを送信する。ここで、出力ポート列の先頭が“２”であるので、制御装置１０は、制御装置１０のポート＃２からsetup パケットを送信する（図３（ａ）参照）。
【００６５】
スイッチ２０Ａは、このsetup パケットをポート＃１で受信する。すると、スイッチ２０Ａは、ポートカウントの値が０であるので、出力ポート列内の１番目のポート識別番号を、setup パケットを受信したポート＃１のポート識別番号に書き換える。また、スイッチ２０Ａは、ポートカウントの値が０であるので、スイッチ２０Ａがsetup パケットを送信すべきポートが、出力ポート列内の２番目に記述されていると判定し、２番目に記述されたポート識別番号“３”を特定する。そして、スイッチ２０Ａは、ポートカウントの値を０から１に更新し、setup パケットをスイッチ２０Ａのポート＃３から送信する。このsetup パケット内に記述された出力ポート列は、｛１，３，２，１｝である（図３（ｂ）参照）。
【００６６】
スイッチ２０Ｂは、このsetup パケットをポート＃１で受信する。すると、スイッチ２０Ｂは、ポートカウントの値が１であるので、出力ポート列内の２番目のポート識別番号を、setup パケットを受信したポート＃１のポート識別番号に書き換える。また、スイッチ２０Ｂは、ポートカウントの値が１であるので、スイッチ２０Ｂがsetup パケットを送信すべきポートが、出力ポート列内の３番目に記述されていると判定し、３番目に記述されたポート識別番号“２”を特定する。そして、スイッチ２０Ｂは、ポートカウントの値を１から２に更新し、setup パケットをスイッチ２０Ｂのポート＃２から送信する。このsetup パケット内に記述された出力ポート列は、｛１，１，２，１｝である（図３（ｃ）参照）。
【００６７】
スイッチ２０Ｃは、このsetup パケットをポート＃３で受信する。すると、スイッチ２０Ｃは、ポートカウントの値が２であるので、出力ポート列内の３番目のポート識別番号を、setup パケットを受信したポート＃３のポート識別番号に書き換える。また、スイッチ２０Ｃは、ポートカウントの値が２であるので、スイッチ２０Ｃがsetup パケットを送信すべきポートが、出力ポート列内の４番目に記述されていると判定し、４番目に記述されたポート識別番号“１”を特定する。そして、スイッチ２０Ｃは、ポートカウントの値を２から３に更新し、setup パケットをスイッチ２０Ｃのポート＃１から送信する。このsetup パケット内に記述された出力ポート列は、｛１，１，３，１｝である（図３（ｄ）参照）。
【００６８】
スイッチ２０Ｄは、このsetup パケットをポート＃２で受信する。スイッチ２０Ｄは、ポートカウントの値が３であり、出力ポート列内のポート識別番号の数が４個であることから、スイッチ２０Ｄ自身が宛先であると判定する。そして、スイッチ２０Ｄは、setup パケット内の出力ポート列｛１，１，３，１｝の最後のポート識別番号“１”を、setup パケットを受信したポート＃２のポート識別番号に書き換える。その結果、出力ポート列は、｛１，１，３，２｝となる。スイッチ２０Ｄは、この出力ポート列を逆順に並べ替え、並べ替え後の出力ポート列｛２，３，１，１｝を、制御装置１０までの制御チャネルを表す出力ポート列として記憶する。
【００６９】
制御装置１０がスイッチ２０Ｄを宛先として、出力ポート列｛２，３，２，１｝を含むtunnelパケットを送信する場合におけるスイッチ２０Ａ〜２０Ｃの動作も、上記の動作と同様である。この結果、スイッチ２０Ｄは、tunnelパケットを受信する。ただし、スイッチ２０Ｄは、tunnelパケット内の出力ポート列に対する処理を行わなくてよい。
【００７０】
ここでは、制御装置１０がスイッチ２０Ｄを宛先として、setup パケットやtunnelパケットを送信する場合を例示したが、他のスイッチを宛先とする場合も、各スイッチは、上記の説明と同様に動作する。
【００７１】
また、各スイッチが、制御装置１０までの制御チャネルとして記憶した出力ポート列をtunnelパケットに記述し、そのtunnelパケットを送信する場合も、他のスイッチは、上記と同様の動作を行って、tunnelパケットを制御装置１０まで順次転送する。
【００７２】
次に、制御装置１０が送信したrequest パケット内の出力ポート列が書き換えられていく例を示す。図４は、request パケット内の出力ポート列の変化の例を示す説明図である。以下の説明では、制御装置１０がポート＃２から送信したrequest パケットが、スイッチ２０Ａ，２０Ｂ，２０Ｃを通過して、スイッチ２０Ｄに到達する場合を例にする。
【００７３】
制御装置１０は、ポートカウントを初期値０に設定し、｛２｝という出力ポート列を記述したrequest パケットをポート＃２から送信する（図４（ａ）参照）。なお、制御装置１０は、｛１｝という出力ポート列を記述したrequest パケットをポート＃１からも出力するが、このrequest パケットについては説明を省略する。
【００７４】
スイッチ２０Ａは、制御装置１０のポート＃２から送信されたrequest パケットを、ポート＃１で受信する。スイッチ２０Ａには、ポート＃１の他に２つのポートが存在するので、スイッチ２０Ａはrequest パケットのコピーを２つ作成する。このうち、ポート＃３から送信するrequest パケットに関して説明する。スイッチ２０Ａは、ポート＃３から送信するrequest パケット内の出力ポート列の最後に、ポート＃３のポート識別番号を追加する。また、request パケット内のポートカウントが０であるので、スイッチ２０Ａは、出力ポート列内の１番目のポート識別番号を、request パケットを受信したポート＃１のポート識別番号に書き換える。この結果、出力ポート列は｛１，３｝となる。スイッチ２０Ａは、ポートカウントの値を０から１に更新し、出力ポート列｛１，３｝を含むrequest パケットをポート＃３から送信する（図４（ｂ）参照）。
【００７５】
スイッチ２０Ｂは、このrequest パケットをポート＃１で受信する。スイッチ２０Ｂには、ポート＃１の他に２つのポートが存在するので、スイッチ２０Ｂはrequest パケットのコピーを２つ作成する。このうち、ポート＃２から送信するrequest パケットに関して説明する。スイッチ２０Ｂは、ポート＃２から送信するrequest パケット内の出力ポート列の最後に、ポート＃２のポート識別番号を追加する。また、request パケット内のポートカウントが１であるので、スイッチ２０Ｂは、出力ポート列内の２番目のポート識別番号を、request パケットを受信したポート＃１のポート識別番号に書き換える。この結果、出力ポート列は｛１，１，２｝となる。スイッチ２０Ｂは、ポートカウントの値を１から２に更新し、出力ポート列｛１，１，２｝を含むrequest パケットを、ポート＃２から送信する。
【００７６】
スイッチ２０Ｃは、このrequest パケットをポート＃３で受信する。スイッチ２０Ｃには、ポート＃３の他に２つのポートが存在するので、スイッチ２０Ｃはrequest パケットのコピーを２つ作成する。このうち、ポート＃１から送信するrequest パケットに関して説明する。スイッチ２０Ｃは、ポート＃１から送信するrequest パケット内の出力ポート列の最後に、ポート＃１のポート識別番号を追加する。また、request パケット内のポートカウントが２であるので、スイッチ２０Ｃは、出力ポート列内の３番目のポート識別番号を、request パケットを受信したポート＃３のポート識別番号に書き換える。この結果、出力ポート列は｛１，１，３，１｝となる。スイッチ２０Ｃは、ポートカウントの値を２から３に更新し、出力ポート列｛１，１，３，１｝を含むrequest パケットを、ポート＃１から送信する。
【００７７】
スイッチ２０Ｄは、このrequest パケットをポート＃２で受信する。スイッチ２０Ｄは、request パケット内に記述された出力ポート列｛１，１，３，１｝の最後のポート識別番号を、そのrequest パケットを受信したポート＃２の識別番号に書き換える。その結果、出力ポート列は、｛１，１，３，２｝となる。この出力ポート列を逆順に並べ替え、並べ替え後の出力ポート列｛２，３，１，１｝を、reply パケットに記述し、｛２，３，１，１｝の１番目に対応するポート＃２からreply パケットを送信する。reply パケットを受信したときのスイッチの動作は、setup パケットやtunnelパケットを受信したときの動作と同様であり、このreply パケットは、制御装置１０に到達する。
【００７８】
また、制御装置１０がreply パケットを受信すると、制御装置１０は、そのreply パケット内に記述された出力ポート列の最後のポート識別番号を、そのreply パケットを受信したポートの識別番号に書き換える。そして、制御装置１０は、この書き換え後の出力ポート列を逆順に並べ替える。制御装置１０は、この出力ポート列を参照してトポロジー情報を生成する。
【００７９】
この説明では、スイッチ２０Ａ〜２０Ｃがrequest パケットを転送し、スイッチ２０Ｄがreply パケットを送信する状況を説明したが、スイッチ２０Ｄも他のスイッチと同様に、request パケットを転送する。また、スイッチ２０Ａ〜２０Ｃも、スイッチ２０Ｄと同様に、reply パケットを送信する。
【００８０】
なお、図３や図４では、ポートカウントの初期値を０とする場合を例にして説明した。各スイッチが、出力ポート列中の何番目のポート識別番号を書き換えるかという判定や、特定パケットをどのポートから転送するかという判定を行う方法は、ポートカウントの初期値に応じて予め定めておけばよい。また、特定パケットを受信したスイッチが、自身が宛先であるか否かを判定する方法も、ポートカウントの初期値に応じて予め定めておけばよい。
【００８１】
次に、特定パケットのフォーマットの例について説明する。特定パケットのフォーマットの例を図５に示す。図５に示す例では、イーサネット（登録商標）フレームのフォーマットで特定パケットを実現する場合の例を示している。図５において括弧書きで示した値は、バイト数を表す。イーサネットフレームフォーマットでは宛先ＭＡＣアドレス５１および送信元ＭＡＣアドレス５２が設けられる。しかし、本発明の通信システムは、特定パケットの送受信では、これらのアドレスは用いずに、上述のようにソースルーティングにより特定パケットを送信する。また、特定パケットでは、イーサネットフレームフォーマットにおけるタイプ５３に、特定パケットであることを示す値が格納される。制御装置１０や各スイッチは、特定パケットを生成する場合、特定パケットであることを示す値をタイプ５３に格納する。また、制御装置１０や各スイッチは、パケット受信時に、特定パケットであることを示す値がタイプ５３に格納されていることを条件に、受信したパケットが特定パケットであると判定する。
【００８２】
また、イーサネットフレームフォーマットのデータ５４には、特定パケットの種類を表すタイプ６１、第１データ長６２、出力ポート列の長さ６３、ポートカウント６４、出力ポート列６５、第２データ長６６、および特定パケットのデータ６７が含まれる。以下、イーサネットフレームフォーマットにおけるタイプ５３と区別するために、特定パケットの種類を表すタイプ６１を種別６１と記す。また、イーサネットフレームフォーマットにおけるデータ５４と区別するために、特定パケットのデータ６７を特定パケットデータ６７と記す。また、第１データ長６２（図５においてLengthと記す。）には、第１データ長６２以降の情報全体のデータ長が格納される。第２データ長６６（図５においてDataLengthと記す。）には、第２データ長６６以降の情報全体のデータ長が格納される。
【００８３】
出力ポート列の長さ６３（図５においてPortsLength と記す。）は、出力ポート列に含まれるポートの数である。より具体的には、出力ポート列に含まれるポート識別番号の数である。
【００８４】
ポートカウント６４（図５においてPortsCountと記す。）は、特定パケットの送信元からのホップ数に応じたカウント値である。
【００８５】
出力ポート列６５には、ポート識別番号が並べて格納される。
【００８６】
なお、図５に示した項目以外の項目が、イーサネットフレームフォーマットにおけるデータ５４に含まれる場合もある。例えば、request パケットでは、シーケンス番号が含まれる。以下、特定パケットの種類毎に、イーサネットフレームフォーマットにおけるデータ５４に含まれる情報の例を示す。ただし、第１データ長６２、出力ポート列の長さ６３、ポートカウント６４、出力ポート列６５、第２データ長６６に関しては、説明を省略する。
【００８７】
図６は、request パケットに含まれる情報の例を示す説明図である。種別６１には、request パケットであることを示す値が格納される。制御装置１０は、request パケット生成時に、request パケットであることを示す値を種別６１に格納する。また、各スイッチは、パケット受信時に、request パケットであることを示す値が種別６１に格納されていることを条件に、受信したパケットがrequest パケットであると判定する。
【００８８】
シーケンス番号６８（図６においてSequenceNumと記す。）には、シーケンス番号が格納される。制御装置１０は、request パケット生成時に、シーケンス番号６８に、シーケンス番号の値を格納する。
【００８９】
request パケットでは、特定パケットデータ６７はＮＵＬＬである。
【００９０】
図７は、reply パケットに含まれる情報の例を示す説明図である。種別６１には、reply パケットであることを示す値が格納される。各スイッチは、reply パケット生成時に、reply パケットであることを示す値を種別６１に格納する。また、制御装置１０や各スイッチは、パケット受信時に、reply パケットであることを示す値が種別６１に格納されていることを条件に、受信したパケットがreply パケットであると判定する。
【００９１】
reply パケットでは、特定パケットデータ６７に、リンクアップしているポートを示す情報と、スイッチがrequest パケットを受信したポートを示す情報と、reply パケットの送信元となるスイッチの識別情報とが格納される。reply パケットを送信するスイッチは、reply パケット生成時にこれらの情報を特定パケットデータ６７に格納する。なお、図７に示す例では、“DataPathID”がスイッチの識別情報に該当する。また、“Requested_Port”が、request パケットの受信ポートに該当する。また、“Port#n_Status ”は、ポート識別番号がｎであるポートがリンクアップしているか否かを表している。例えば、スイッチは、リンクアップしているポートに関しては、Port#n_Status ＝１とし、リンクアップしていないポートに関しては、Port#n_Status ＝０とするように、“Port#n_Status ”の値をポート毎に定めればよい。よって、ポート毎に定められた“Port#n_Status ”の集合から、リンクアップしているポートを特定することができる。ただし、他の表現方法で、リンクアップしているポートが記述されてもよい。
【００９２】
図８は、setup パケットに含まれる情報の例を示す説明図である。種別６１には、setup パケットであることを示す値が格納される。制御装置１０は、setup パケット生成時に、setup パケットであることを示す値を種別６１に格納する。また、各スイッチは、パケット受信時に、setup パケットであることを示す値が種別６１に格納されていることを条件に、受信したパケットがsetup パケットであると判定する。
【００９３】
setup パケットでは、特定パケットデータ６７はＮＵＬＬである。
【００９４】
図９は、tunnelパケットに含まれる情報の例を示す説明図である。種別６１には、tunnelパケットであることを示す値が格納される。制御装置１０や各スイッチは、tunnelパケット生成時に、tunnelパケットであることを示す値を種別６１に格納する。また、制御装置１０や各スイッチは、パケット受信時に、tunnelパケットであることを示す値が種別６１に格納されていることを条件に、受信したパケットがtunnelパケットであると判定する。
【００９５】
tunnelパケットでは、特定パケットデータ６７に、制御メッセージが格納される。具体的には、オープンフローの一般的な通信システムにおいて制御メッセージとして送受信される制御パケットが格納される。従って、本発明の通信システムにおいても、一般的な通信システムと同様に、制御装置とスイッチとの間で制御メッセージの授受を行うことができる。
【００９６】
次に、動作について説明する。
図１０は、特定パケットの送受信の例を示す説明図である。図１０では、通信システムが、制御装置１０とスイッチＢ〜Ｅとを含む場合を例示している。制御装置１０および各スイッチＢ〜Ｅの近傍に示す数は、ポート識別番号を意味する。
【００９７】
制御装置１０は、各ポート＃１，＃２からrequest パケットを送信する（図１０（ａ）参照）。このパケットに含まれるシーケンス番号は、いずれも共通であり、ここでは“Ｐ”とする。スイッチＢ，Ｄはそれぞれrequest パケットを受信し、reply パケットを制御装置１０に送信する（図１０（ｂ）参照）。このとき、スイッチＢ，Ｄは、request パケットの受信ポートからreply パケットを送信する。また、スイッチＢ，Ｄは、シーケンス番号が“Ｐ”であるrequest パケットを初めて受信すると、そのrequest パケットを、受信ポート以外のポートから送信する（図１０（ｃ）参照）。
【００９８】
スイッチＣは、スイッチＢ，Ｄからそれぞれrequest パケットを受信する。そして、スイッチＣは、各request パケットに応じて、request パケットの受信ポートから、制御装置１０宛にreply パケットを送信する（図１０（ｄ）参照）。また、スイッチＣは、シーケンス番号が“Ｐ”であるrequest パケットを初めて受信したときに、そのrequest パケットを、受信ポート以外のポートから送信する。スイッチＥも同様である。
【００９９】
このように各スイッチは、それぞれ、request パケット受信時に、request パケット受信ポートから制御装置１０宛にreply パケットを送信する。また、シーケンス番号が“Ｐ”であるrequest パケットを初めて受信すると、そのrequest パケットをフラッディングする。この結果、制御装置１０は、各スイッチの各ポートから送信されたreply パケットを受信し、reply パケットに基づいてトポロジー情報を生成する。さらに、制御装置１０は、トポロジー情報に基づいて各スイッチとの制御チャネルを決定する（図１０（ｅ）参照）。図１０（ｅ）では、制御装置１０がスイッチＣ，Ｅに対して決定した制御チャネルを例示しているが、スイッチＣ，Ｅに対する制御チャネルは図１０（ｅ）に示す場合に限定されない。
【０１００】
以下、制御装置１０およびスイッチの動作をより、詳細に説明する。
図１１は、制御装置１０の処理経過の例を示すフローチャートである。最初に、制御装置１０のトポロジー探索部１２が、request パケットを生成し、特定パケット送受信部１１にそのrequest パケットを送信させる（ステップＳ１）。ステップＳ１において、トポロジー探索部１２は、制御装置１０のポート毎にrequest パケットを生成する。そして、トポロジー探索部１２は、個々のrequest パケットの出力ポート列として、そのrequest パケットを送信するポートのポート識別番号のみを記述する。また、トポロジー探索部１２は、出力ポート列の長さとして１を記述し、ポートカウントとして初期値０を記述する。さらに、トポロジー探索部１２は、それぞれのポートから送信する各request パケットに共通のシーケンス番号を記述する。特定パケット送受信部１１は、出力ポート列に記述されたポート識別番号に対応するポートからrequest パケットを送信する。
【０１０１】
各スイッチは、受信したrequest パケットに含まれるシーケンス番号が未だ受け取ったことのないシーケンス番号であることを条件に、request パケットをフラッディングする。また、このフラッディングにより、各スイッチは、１つのポートだけでなく、リンクアップしている各ポートにおいてそれぞれrequest パケットを受信し、リンクアップしている各ポートからreply パケットを制御装置１０に送信する。
【０１０２】
この結果、制御装置１０は、それぞれのスイッチのそれぞれのポートから送信されたreply パケットを受信する（ステップＳ２）。ステップＳ２において、特定パケット送受信部１１は、受信したパケット内に記述された出力ポート列の最後のポート識別番号を、そのreply パケットを受信したポートのポート識別番号に書き換え、さらに、出力ポート列内のポート識別番号を逆順に並べ替える。特定パケット送受信部１１は、この並べ替えを行った後に、reply パケットをトポロジー探索部１２に出力する。
【０１０３】
トポロジー探索部１２は、それぞれのスイッチのそれぞれのポートから送信されたreply パケットを参照して、トポロジー情報を作成する（ステップＳ３）。各reply パケットの出力ポート列は、ステップＳ２において書き換えや並べ替えが行われているので、制御装置１０から、reply パケットの送信元スイッチまでの経路を表す状態になっている。トポロジー探索部１２は、この出力ポート列と、スイッチがreply パケットに記述した情報を参照して、トポロジー情報を作成し、そのトポロジー情報をトポロジー保持部１３に記憶させる。トポロジー情報の作成方法については、後述する。
【０１０４】
ステップＳ３の後、制御チャネル経路決定部１４は、トポロジー保持部１３に記憶されているトポロジー情報を参照して、各スイッチまでの制御チャネルを決定する。この決定方法は、特に限定されない。制御チャネル経路決定部１４は、例えば、各スイッチまでの最短経路を計算し、その最短経路を制御チャネルと定めてもよい。制御チャネル経路決定部１４は、スイッチ毎に、そのスイッチまでの制御チャネルを表す出力ポート列を記述したsetup パケットを生成する。また、制御チャネル経路決定部１４は、ポートカウントとして初期値０をsetup パケットに記述し、また、出力ポート列の長さも記述する。制御チャネル経路決定部１４は、スイッチ毎に生成したsetup パケットを特定パケット送受信部１１に送信させる（ステップＳ４）。このとき、特定パケット送受信部１１は、setup パケット内の出力ポート列の一番目に記述されたポートからsetup パケットを送信する。
【０１０５】
setup パケットを受信したスイッチは、setup パケットに基づいて制御装置１０までの制御チャネルを特定し、記憶する。この結果、制御装置１０および各スイッチは制御チャネルを認識可能な状態となる。制御装置１０が制御メッセージを送信する場合、制御メッセージトンネリング部１５は、制御メッセージを暗号化しカプセル化したtunnelパケットを生成する。そして、制御メッセージトンネリング部１５は、tunnelパケットに制御チャネルを表す出力ポート列、その出力ポート列の長さ、およびポートカウントの初期値０を記述し、特定パケット送受信部１１に送信させる。特定パケット送受信部１１は、tunnelパケット内の出力ポート列の一番目に記述されたポートからtunnelパケットを送信する。スイッチが制御メッセージを送信する場合、制御メッセージトンネリング部２５および特定パケット送受信部２１が同様の動作を行う。
【０１０６】
また、制御装置１０がスイッチからのtunnelパケットを受信した場合、制御メッセージトンネリング部１５は、制御メッセージをデカプセル化し、復号する。そして、制御装置１０は、その制御メッセージに応じた処理を実行する。
【０１０７】
また、制御装置１０は、定期的にステップＳ１以降の処理を行う。このとき、トポロジー探索部１２は、一定期間をおいてステップＳ１を実行する度に、シーケンス番号を変化させる。また、２回目以降のステップＳ１の後には、接続状態が変化したスイッチのみがreply パケットを送信する。トポロジー探索部１２は、１回目のステップＳ３でトポロジー情報を作成する。そして、２回目以降のステップＳ３では、トポロジー保持部１３に記憶させたトポロジー情報を、受信したreply パケットに基づいて更新する。
【０１０８】
次に、トポロジー情報作成処理（ステップＳ３）について説明する。図１２は、トポロジー情報作成処理の例を示すフローチャートである。ここでは、制御装置１０が、各スイッチのリンクアップしている各ポートから送信されたreply パケットを受信し、特定パケット送受信部１１が、各reply パケットに対して、出力ポート列の書き換えおよび並べ替えを既に行っているものとする。
【０１０９】
トポロジー探索部１２は、変数ｉを１とする（ステップＳ１１）。変数ｉは、出力ポート列の長さの指定に用いる変数である。
【０１１０】
トポロジー探索部１２は、出力ポート列の長さがｉと等しいreply パケットを１つ抽出する。そして、トポロジー探索部１２は、そのreply パケットの出力ポート列の最後のポート識別番号が、どのノードのどのポートを表しているかを特定する（ステップＳ１２）。ｉ＝１である場合、トポロジー探索部１２は、制御装置１０におけるそのポート識別番号に対応するポートを特定する。ｉ＞２の場合、トポロジー探索部１２は、出力ポート列の最初のポート識別番号から順にスイッチを辿り、出力ポート列の最後のポート識別番号がどのスイッチのポート識別番号であるかを判定すればよい。そして、トポロジー探索部１２は、そのスイッチにおけるそのポート識別番号に対応するポートを特定すればよい。なお、トポロジー探索部１２は、出力ポート列の長さが小さい順にreply パケットを参照してトポロジー情報を作成するので、出力ポート列の最初のポート識別番号から順にスイッチを辿ることができる。
【０１１１】
次に、トポロジー探索部１２は、ステップＳ１２で抽出したreply パケットの送信元のスイッチと、そのスイッチがreply パケットを送信したポートを特定する（ステップＳ１３）。スイッチがreply パケットを送信したポートは、そのスイッチがrequest パケットを受信したポートと同一であり、そのポートのポート識別番号はreply パケットに記述されている。また、reply パケットの送信元のスイッチの識別情報もreply パケットに記述されている。従って、reply パケット内の記述を読み取ることにより、reply パケットの送信元のスイッチと、そのスイッチがreply パケットを送信したポートを特定できる。
【０１１２】
次に、トポロジー探索部１２は、ステップＳ１２で特定したポートと、ステップＳ１３で特定したスイッチのポートとが接続されていると判定し、その接続関係をトポロジー保持部１３に記憶させる（ステップＳ１４）。
【０１１３】
次に、トポロジー探索部１２は、出力ポート列の長さがｉと等しいreply パケットであって、ステップＳ１２〜Ｓ１４の処理を行っていないreply パケットが残っているか否かを判定する（ステップＳ１５）。そのようなreply パケットが残っているならば（ステップＳ１５のＹｅｓ）、トポロジー探索部１２は、ステップＳ１２以降の処理を繰り返す。
【０１１４】
また、そのようなreply パケットが残っていない場合、トポロジー探索部１２は、変数ｉの値に１を加算し（ステップ１６）、ステップＳ１２以降の処理を繰り返す。
【０１１５】
トポロジー探索部１２は、例えば、全てのreply パケットについてステップＳ１２〜Ｓ１４の処理を終了したときに、トポロジー情報作成処理を終了する。ステップＳ１４で特定したポートの接続関係の集合が、トポロジー情報である。
【０１１６】
また、２回目以降のステップＳ２（図１１参照）では、制御装置１０は、隣接するスイッチとの接続関係が変化したスイッチのみからreply パケットを受信する。この場合、トポロジー探索部１２は、以下のように、トポロジー情報を更新すればよい。なお、特定パケット送受信部１１は、reply パケット内の出力ポート列の書き換えおよび並べ替えを行っているものとする。
【０１１７】
トポロジー探索部１２は、reply パケットを、出力ポート列の長さの小さい順にソートする。そして、出力ポート列の長さの小さいreply パケットから順番に、ステップＳ１２〜Ｓ１４の処理を行えばよい。
【０１１８】
このとき、ステップＳ１２で特定したポートに接続される他のスイッチのポートの情報が、トポロジー情報に含まれている場合、トポロジー探索部１２は、そのスイッチより先の接続関係を示す情報をトポロジー情報から削除して、ステップＳ１３，Ｓ１４の処理を行えばよい。この結果、トポロジー情報が更新される。
【０１１９】
以下、トポロジー情報作成の具体例を示す。図１３は、各スイッチの各ポートから送信されるreply パケットの経路の例を示す。図１３では、図１０と同じトポロジーを例示している。制御装置１０等の近傍に示す数は、ポート識別番号を意味する。また、矢印で示した経路ａ〜ｈは、各スイッチの各ポートから送信されるreply パケットの経路である。
【０１２０】
図１４は、図１３に示す各経路ａ〜ｈで制御装置１０に到達したreply パケットを示す。図１４において、“ｓｒｃ：＃２＠Ｂ”等は、reply パケットを送信したスイッチおよびそのポートを表す。“＃”の次の数はポート識別番号であり、“＠”の次の記号は、スイッチの識別情報である。例えば、“ｓｒｃ：＃２＠Ｂ”は、reply パケットがスイッチＢのポート＃２から送信されたことを意味する。また、“ｐｏｒｔｓ：（）”は、出力ポート列を意味する。ただし、ステップＳ２において、特定パケット送受信部１１は、受信したパケット内に記述された出力ポート列の最後のポート識別番号を、そのreply パケットを受信したポートのポート識別番号に書き換え、さらに、出力ポート列内のポート識別番号を逆順に並べ替える。図１４に示す出力ポート列は、この処理が行われた後の出力ポート列である。また、以下、図１４に示す各reply パケットを、そのreply パケットが制御装置１０に到達するまでの経路と同一の符号で表すこととする。例えば、図１３に示す経路ａを通過したreply パケットを、reply パケット“ａ”と称する。
【０１２１】
トポロジー探索部１２は、ｉ＝１とし（ステップＳ１１）、reply パケット“ａ”，“ｂ”に関して、ステップＳ１２〜Ｓ１４の処理を行う。
【０１２２】
トポロジー探索部１２は、reply パケット“ａ”の出力ポート列の最後のポート識別番号“２”が、制御装置１０のポート＃２であると特定する（ステップＳ１２）。さらに、reply パケット“ａ”がスイッチＢのポート＃２から送信されたと判定する（ステップＳ１３）。そして、トポロジー探索部１２は、制御装置１０のポート＃２と、スイッチＢのポート＃２とが接続されていると判定する（ステップＳ１４）。
【０１２３】
トポロジー探索部１２は、同様に、reply パケット“ｂ”に基づいて、制御装置１０のポート＃１と、スイッチＤのポート＃１とが接続されていると判定する。
【０１２４】
次に、トポロジー探索部１２は、ｉ＝２とし（ステップＳ１６）、reply パケット“ｃ”，“ｄ”，“ｅ”，“ｆ”に関して、ステップＳ１２〜Ｓ１４の処理を行う。
【０１２５】
トポロジー探索部１２は、reply パケット“ｃ”の出力ポート列の最後のポート識別番号“３”が、スイッチＢのポート＃３であると特定する（ステップＳ１２）。reply パケット“ｃ”の出力ポート列は（＃２，＃３）であり、トポロジー探索部１２は、既知の接続関係から、この特定を行うことができる。さらに、トポロジー探索部１２は、reply パケット“ｃ”がスイッチＣの＃２から送信されたと判定する（ステップＳ１３）。そして、トポロジー探索部１２は、スイッチＢのポート＃３とスイッチＣのポート＃２とが接続されていると判定する。
【０１２６】
トポロジー探索部１２は、同様に、reply パケット“ｄ”に基づいて、スイッチＤのポート＃２とスイッチＣのポート＃１とが接続されていると判定する。また、トポロジー探索部１２は、同様に、reply パケット“ｅ”に基づいて、スイッチＢのポート＃１とスイッチＥのポート＃２とが接続されていると判定する。また、トポロジー探索部１２は、同様に、reply パケット“ｆ”に基づいて、スイッチＤのポート＃３とスイッチＥのポート＃１とが接続されていると判定する。
【０１２７】
次に、トポロジー探索部１２は、ｉ＝３とし（ステップＳ１６）、reply パケット“ｇ”，“ｈ”に関して、ステップＳ１２〜Ｓ１４の処理を行う。
【０１２８】
トポロジー探索部１２は、reply パケット“ｇ”の出力ポート列の最後のポート識別番号“１”が、スイッチＣのポート＃１であると特定する（ステップＳ１２）。reply パケット“ｇ”の出力ポート列は（＃２，＃３，＃１）であり、トポロジー探索部１２は、既知の接続関係から、この特定を行うことができる。さらに、トポロジー探索部１２は、reply パケット“ｇ”がスイッチＤ２のポート＃２から送信されたと判定する。そして、トポロジー探索部１２は、スイッチＣのポート＃１とスイッチＤのポート＃２とが接続されていると判定する（ステップＳ１４）。
【０１２９】
トポロジー探索部１２は、同様に、reply パケット“ｈ”に基づいて、スイッチＥのポート＃２とスイッチＢのポート＃１とが接続されていると判定する。
【０１３０】
なお、本例では、reply パケット“ａ”〜“ｆ”からだけでトポロジー情報を完成することができるが、reply パケット“ｇ”，“ｈ”に関してもステップＳ１２〜Ｓ１４の処理を行う場合を示した。
【０１３１】
図１５および図１６は、スイッチの処理経過の例を示すフローチャートである。スイッチが特定パケットを受信すると、特定パケット送受信部２１は、その特定パケットがrequest パケットであるか否かを判定する（ステップＳ２１）。受信した特定パケットがrequest パケットである場合（ステップＳ２１のＹｅｓ）、特定パケット送受信部２１は、そのrequest パケットをフラッディング部２２に出力する。
【０１３２】
フラッディング部２２は、特定パケット送受信部２１から入力されたrequest パケット内のシーケンス番号が、既に記憶済みのシーケンス番号のいずれかと一致するか否かを判定する（ステップＳ２３）。一致していなければ（ステップＳ２３のＮｏ）、フラッディング部２２は、ステップＳ２４，Ｓ２５の処理によりrequest パケットをフラッディングする。具体的には、フラッディング部２２は、request パケットの受信ポート以外のポート毎にrequest パケットのコピーを作成し、各request パケットの出力ポート列、出力ポート列の長さ、およびポートカウントを更新する（ステップＳ２４）。フラッディング部２２は、ステップＳ２４において、コピーされたrequest パケットを送信する出力ポートのポート識別番号を出力ポート列の最後に追加する。また、出力ポート列内のポート識別番号のうち、ポートカウントから定まる位置のポート識別番号を、request パケットの受信ポートのポート識別番号に置き換える。ポートカウントの初期値を０とする場合、ポートカウントの値をｋとすると、フラッディング部２２は、ｋ＋１番目のポート識別番号を書き換えればよい。また、フラッディング処理部２２は、出力ポート列の長さの値と、ポートカウントの値に、それぞれ１を加算する。次に、フラッディング部２２は、そのrequest パケットを特定パケット送受信部２１に送信させる（ステップＳ２５）。特定パケット送受信部２１は、出力ポート列の最後に追加されたポート識別番号に対応するポートからrequest パケットを送信する。そして、ステップＳ２６に移行する。
【０１３３】
また、request パケット内のシーケンス番号が、記憶済みのシーケンス番号のいずれかと一致している場合（ステップＳ２３のＹｅｓ）、フラッディング部２２は、ステップＳ２４，Ｓ２５を実行せずに、ステップＳ２６に移行する。
【０１３４】
ステップＳ２６では、フラッディング部２２は、スイッチが受信したrequest パケットをそのまま情報提供部２３に出力する。
【０１３５】
情報提供部２３は、過去に制御装置１０が送信したrequest パケットに応じてreply パケットを送信した後、スイッチ自身の接続関係が変化しているか否かを判定する（ステップＳ２７）。すなわち、情報提供部２３が設けられているスイッチに、新たに他のスイッチが接続されたり、あるいは、接続されていたスイッチが外されたりしたかを判定する。接続関係が変化していなければ（ステップＳ２７のＮｏ）、request パケット受信時の処理を終了する。
【０１３６】
接続関係が変化しているならば（ステップＳ２７のＹｅｓ）、情報提供部２３は、reply パケットを生成し、特定パケット送受信部２１に送信させる（ステップＳ２８）。情報提供部２３は、そのスイッチ自身のリンクアップしているポートの情報と、そのスイッチの識別情報と、request パケットの受信ポートのポート識別番号とを含むreply パケットを生成する。また、情報提供部２３は、入力されたrequest パケットに記述された出力ポート列の最後のポート識別番号を、request パケットの受信ポートのポート識別番号に書き換え、さらに、その出力ポート列内のポート識別番号を逆順に並べ替える。情報提供部２３は、並べ替え後の出力ポート列をreply パケットに記述する。さらに、その出力ポート列の長さ、およびポートカウントの初期値もreply パケットに記述し、そのreply パケットを特定パケット送受信部２１に送信させる。特定パケット送受信部２１、出力ポート列の最初に記載されたポート識別番号が表すポートからreply パケットを送信する。ステップＳ２８により、request パケット受信時の処理を終了する。
【０１３７】
このようにスイッチの接続関係が変化していることを条件に、reply パケットを生成、送信することによって、トポロジー情報に影響を及ぼさないreply パケットによる通信量の増加を抑えることができる。
【０１３８】
また、受信した特定パケットがrequest パケットでない場合（ステップＳ２１のＮｏ）、特定パケット送受信部２１は、特定パケットを受信したスイッチ自身が特定パケットの宛先になっているか否かを判定する（ステップＳ２９）。スイッチ自身が宛先になっている場合（ステップＳ２９のＹｅｓ）、特定パケット送受信部２１は、その特定パケットの種別を判定する（ステップＳ３０）。
【０１３９】
特定パケットがsetup パケットである場合、特定パケット送受信部２１は、そのsetup パケットを経路保持部２４に出力する（ステップＳ３１）。経路保持部２４は、setup パケットに記述された出力ポート列の最後のポート識別番号を、setup パケットの受信ポートのポート識別番号に書き換える。そして、経路保持部２４は、その出力ポート列のポート識別番号を逆順に並べ替え、並べ替えた出力ポート列を、制御チャネルとなる経路を表す情報として記憶する（ステップＳ３２）。
【０１４０】
また、特定パケットがtunnelパケットである場合、特定パケット送受信部２１は、そのtunnelパケットを制御メッセージトンネリング部２５に出力する（ステップＳ３３）。制御メッセージトンネリング部２５は、tunnelパケットから制御メッセージをデカプセル化し、復号する（ステップＳ３４）。なお、スイッチは、その制御メッセージに応じた処理を行う。
【０１４１】
また、特定パケットを受信したスイッチ自身が特定パケットの宛先でない場合（ステップＳ２９のＮｏ）、特定パケット送受信部２１は、出力ポート列内のポート識別番号のうち、ポートカウントから定まる位置のポート識別番号を、特定パケットの受信ポートのポート識別番号に置き換える。また、特定パケット送受信部２１は、特定パケットのポートカウントに１を加算する（ステップＳ３５）。そして、特定パケット送受信部２１は、その特定パケットを送信する（ステップＳ３６）。
【０１４２】
ステップＳ３２，Ｓ３４，Ｓ３６のいずれかを行ったならば、特定パケット受信時の処理を終了する。
【０１４３】
本発明によれば、スイッチがデータパケットを転送する通信ネットワークを介して、制御装置とスイッチとの間の制御チャネルが設定される。すなわち、スイッチがデータパケットを転送する通信ネットワークと、制御チャネルとを一種類の通信ネットワークで実現することができる。さらに、その結果、以下のような効果も得ることができる。
【０１４４】
第一に、冗長性・耐障害性を向上させることができる。スイッチがデータパケットを転送する通信ネットワークの一部に障害が発生したとしても、制御装置１０からスイッチまでの経路が確保されていれば、制御チャネルを設定することができるからである。例えば、図２に示すトポロジーにおいて、制御装置１０とスイッチ２０ｂとの間のリンクに障害が生じたとしても、制御装置１０がスイッチ２０ａ側に送信したrequest パケットは各スイッチに到達可能であり、その結果、制御装置１０と各スイッチ間の制御チャネルを設定することができる。
【０１４５】
図２０に例示する一般的な通信システムと比較すると、図２０に示すように、パケット転送用通信ネットワーク９４とは別に制御用通信ネットワーク９３を設ける構成では、物理的に制御装置９１から各スイッチ９２に到達可能な経路が存在したとしても、その経路は制御用には用いられないため、制御用通信ネットワーク９３に障害が発生すると制御装置９１による制御が行えなくなり、耐障害性が低かった。一方、本発明によれば、上記のように冗長性・耐障害性を向上できる。
【０１４６】
第二に、制御チャネル専用の通信ネットワークを設ける必要がないので、そのような専用ネットワークを管理する必要がなく、通信システムの管理コストを低減することができる。スイッチを増加したり削減したりした場合にも、制御装置１０がrequest パケットを送信することにより、最新のトポロジー情報を作成することができ、各スイッチとの制御チャネルを設定することができる。
【０１４７】
図２０に例示する一般的な通信システムと比較すると、図２０に例示する通信システムでは、パケット転送用通信ネットワーク９４と制御用通信ネットワーク９３の両方を管理しなければならないので、管理コストが大きい。例えば、スイッチを増やす等してスイッチ群のトポロジーを変更する場合、その変更に合わせて、パケット転送用通信ネットワーク９４と制御用通信ネットワーク９３の両方に対するリンク追加作業が生じる。一方、本発明によれば、上記のように通信システムの管理コストを低減できる。
【０１４８】
第三に、スイッチの数が増加した場合にも、上記の通り、制御装置１０がrequest パケットを送信することにより、最新のトポロジー情報を作成することができる。このとき、request パケットの送信元は制御装置１０のみであるので、フラッディングを行うとしても、スイッチ増設時における特定パケットの通信量は、ＳＴＰにおけるＢＰＤＵ等を採用する場合に比べ少なく抑えることができる。従って、トポロジー情報の生成までに時間がかかってしまったり、通信帯域を圧迫したりすることを防止できる。
【０１４９】
図２０に例示する一般的な通信システムと比較すると、図２０に例示する通信システムでは、スイッチ群のトポロジーに変更が生じた場合、通信システムが新たなトポロジーを把握するための制御フレーム（例えば、ＳＴＰにおけるＢＰＤＵ）がスイッチ間で送受信されるため、スイッチ数が多い場合には、そのような制御フレームが多発し、収束するまでに時間がかかったり、通信帯域を圧迫したりする。一方、本発明では、上記のように、スイッチ増設時における特定パケットの通信量を、ＳＴＰにおけるＢＰＤＵ等を採用する場合に比べ少なく抑えることができるので、通信システムの規模に関してスケーラビリティを実現できる。
【０１５０】
さらに、各スイッチがrequest パケットをフラッディングするので、制御装置１０は、１つのポートから１つのrequest パケットを送信することで、そのポートに連なるスイッチのトポロジーを特定するために用いるreply パケットを収集することができる。従って、制御装置１０は、定期的に行うトポロジー探索の各回において、１つのポートから１回request パケットを送信すればよい。その結果、reply パケット収集完了までの時間を短く抑えることができる。
【０１５１】
次に、本発明の最小構成の例を説明する。図１７は、本発明の通信システムの最小構成の例を示すブロック図である。図１８は、本発明の制御装置の最小構成の例を示すブロック図である。図１９は、本発明のパケット転送装置の最小構成の例を示すブロック図である。
【０１５２】
本発明の通信システムは、複数のパケット転送装置９０（例えば、スイッチ２０ａ〜２０ｄ）と、パケット転送装置９０を制御する制御装置８０（例えば、制御装置１０）とを備える。
【０１５３】
制御装置８０は、応答要求送信手段８１と、応答受信手段８２と、トポロジー情報作成手段８３とを含む（図１７、図１８参照）。
【０１５４】
応答要求送信手段８１（例えば、トポロジー探索部１２および制御装置側特定パケット送受信部１１）は、パケット転送装置への応答要求（例えば、request パケット）を送る。
【０１５５】
応答受信手段８２（例えば、制御装置側特定パケット送受信部１１）は、パケット転送装置から該パケット転送装置の持つポートの情報を含む応答（例えば、reply パケット）を受信する。
【０１５６】
トポロジー情報作成手段８３（例えば、トポロジー探索部１２）は、各パケット転送装置から送信された応答に基づいて、制御装置および各パケット転送装置の各ポート間の接続情報を含むトポロジー情報を作成する。
【０１５７】
また、パケット転送装置９０は、転送手段９１と、応答送信手段９２とを備える（図１７、図１９参照）。
【０１５８】
転送手段９１（例えば、フラッディング部２２および特定パケット送受信部２１）は、応答要求を受信したときに、該応答要求を受信したポート以外のポートから該応答要求を転送する。
【０１５９】
応答送信手段９２（例えば、情報提供部２３およびスイッチ側特定パケット送受信部２１）は、応答要求を受信したときに、自パケット転送装置のポートの情報を含み、制御装置への経路に沿って送られる応答を返す。
【０１６０】
なお、上記の実施形態では、以下の（１）〜（１０）に示すような通信システムの特徴的構成が示されている。また、以下の（１１）〜（１３）に示すような制御装置の特徴的構成が示されている。また、以下の（１４），（１５）に示すようなパケット転送装置の特徴的構成が示されている。
【０１６１】
（１）本発明の通信システムは、複数のパケット転送装置（例えば、スイッチ２０ａ〜２０ｄ）と、パケット転送装置を制御する制御装置（例えば、制御装置１０）とを備え、制御装置が、パケット転送装置への応答要求（例えば、request パケット）を送る応答要求送信手段（例えば、トポロジー探索部１２および制御装置側特定パケット送受信部１１）と、パケット転送装置から該パケット転送装置の持つポートの情報を含む応答（例えば、reply パケット）を受信する応答受信手段（例えば、制御装置側特定パケット送受信部１１）と、各パケット転送装置から送信された応答に基づいて、制御装置および各パケット転送装置の各ポート間の接続情報を含むトポロジー情報を作成するトポロジー情報作成手段（例えば、トポロジー探索部１２）とを含み、パケット転送装置が、応答要求を受信したときに、該応答要求を受信したポート以外のポートから該応答要求を転送する転送手段（例えば、フラッディング部２２および特定パケット送受信部２１）と、応答要求を受信したときに、自パケット転送装置のポートの情報を含み、制御装置への経路に沿って送られる応答を返す応答送信手段（例えば、情報提供部２３およびスイッチ側特定パケット送受信部２１）とを含むことを特徴とする。
【０１６２】
（２）また、応答要求送信手段が、定期的にパケット転送装置への応答要求を送るとともに、応答要求を送る回毎に、応答要求を送る回の識別情報である回次識別情報を応答要求に含め、転送手段が、受信した応答要求に含まれている回次識別情報が、未だ受け取ったことのない回次識別情報であることを条件に、応答要求を受信したポート以外のポートから該応答要求を転送する構成が開示されている。そのような構成により、応答要求および、応答要求に起因して生成される応答の通信量を抑えることができる。
【０１６３】
（３）また、応答送信手段が、応答要求を受信したときに、制御装置が過去に送信した応答要求に応じて応答を返した時から、応答要求を受信したパケット転送装置自身に関して他のパケット転送装置との接続関係が変化していることを条件に、応答を返す構成が開示されている。そのような構成により、トポロジー情報に影響を及ぼさない応答による通信量の増加を抑えることができる。
【０１６４】
（４）また、トポロジー情報作成手段が、一旦トポロジー情報を作成後に送信した応答要求に起因して応答を受信したときに、該応答に基づいてトポロジー情報を更新する構成が開示されている。そのような構成により、最新のトポロジーをトポロジー情報に反映することができる。
【０１６５】
（５）また、制御装置が、トポロジー情報に基づいて制御装置と各パケット転送装置間の経路である制御チャネルを決定する制御チャネル決定手段（例えば、制御チャネル経路決定部１４）と、制御チャネルを各パケット転送装置へ通知する制御チャネル通知を送信する制御チャネル通知送信手段（例えば、制御装置側特定パケット送受信部１１）とを含み、パケット転送装置が、制御チャネル通知を受信したときに、該制御チャネル通知に基づいて、制御装置と自パケット転送装置との間の制御チャネルを記憶する制御チャネル記憶手段（例えば、経路保持部２４）を含む構成が開示されている。
【０１６６】
（６）本発明の通信システムは、複数のパケット転送装置と、パケット転送装置を制御する制御装置とを備え、制御装置が、パケット転送装置への応答要求を送る応答要求送信部と、パケット転送装置から該パケット転送装置の持つポートの情報を含む応答を受信する応答受信部と、各パケット転送装置から送信された応答に基づいて、制御装置および各パケット転送装置の各ポート間の接続情報を含むトポロジー情報を作成するトポロジー情報作成部とを含み、パケット転送装置が、応答要求を受信したときに、該応答要求を受信したポート以外のポートから該応答要求を転送する転送部と、応答要求を受信したときに、自パケット転送装置のポートの情報を含み、制御装置への経路に沿って送られる応答を返す応答送信部とを含む構成であってもよい。
【０１６７】
（７）また、応答要求送信部が、定期的にパケット転送装置への応答要求を送るとともに、応答要求を送る回毎に、応答要求を送る回の識別情報である回次識別情報を応答要求に含め、転送部が、受信した応答要求に含まれている回次識別情報が、未だ受け取ったことのない回次識別情報であることを条件に、応答要求を受信したポート以外のポートから該応答要求を転送する構成が開示されている。
【０１６８】
（８）また、応答送信部が、応答要求を受信したときに、制御装置が過去に送信した応答要求に応じて応答を返した時から、応答要求を受信したパケット転送装置自身に関して他のパケット転送装置との接続関係が変化していることを条件に、応答を返す構成が開示されている。
【０１６９】
（９）また、トポロジー情報作成部が、一旦トポロジー情報を作成後に送信した応答要求に起因して応答を受信したときに、該応答に基づいてトポロジー情報を更新する構成が開示されている。
【０１７０】
（１０）また、制御装置が、トポロジー情報に基づいて制御装置と各パケット転送装置間の経路である制御チャネルを決定する制御チャネル決定部と、制御チャネルを各パケット転送装置へ通知する制御チャネル通知を送信する制御チャネル通知送信部とを含み、パケット転送装置は、制御チャネル通知を受信したときに、該制御チャネル通知に基づいて、制御装置と自パケット転送装置との間の制御チャネルを記憶する制御チャネル記憶部を含む構成が開示されている。
【０１７１】
（１１）また、本発明の制御装置は、複数のパケット転送装置を制御する制御装置であって、パケット転送装置への応答要求を送る応答要求送信部と、パケット転送装置から該パケット転送装置の持つポートの情報を含む応答を受信する応答受信部と、各パケット転送装置から送信された応答に基づいて、制御装置および各パケット転送装置の各ポート間の接続情報を含むトポロジー情報を作成するトポロジー情報作成部とを備えることを特徴とする。
【０１７２】
（１２）また、応答要求送信部が、定期的にパケット転送装置への応答要求を送るとともに、応答要求を送る回毎に、応答要求を送る回の識別情報である回次識別情報を応答要求に含める構成が開示されている。
【０１７３】
（１３）また、本発明の制御装置は、複数のパケット転送装置を制御する制御装置であって、パケット転送装置への応答要求を送る応答要求送信手段と、パケット転送装置から該パケット転送装置の持つポートの情報を含む応答を受信する応答受信手段と、各パケット転送装置から送信された応答に基づいて、制御装置および各パケット転送装置の各ポート間の接続情報を含むトポロジー情報を作成するトポロジー情報作成手段とを備える構成であってもよい。
【０１７４】
（１４）また、本発明のパケット転送装置は、制御装置によって制御されるパケット転送装置であって、制御装置が送信した応答要求を受信したときに、該応答要求を受信したポート以外のポートから該応答要求を転送する転送部と、制御装置が送信した応答要求を受信したときに、自パケット転送装置のポートの情報を含み、制御装置への経路に沿って送られる応答を返す応答送信部とを備えることを特徴とする。
【０１７５】
（１４）また、本発明のパケット転送装置は、制御装置によって制御されるパケット転送装置であって、制御装置が送信した応答要求を受信したときに、該応答要求を受信したポート以外のポートから該応答要求を転送する転送手段と、制御装置が送信した応答要求を受信したときに、自パケット転送装置のポートの情報を含み、制御装置への経路に沿って送られる応答を返す応答送信手段とを備える構成であってもよい。
【０１７６】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【０１７７】
この出願は、２００９年１２月２８日に出願された日本特許出願２００９−２９８８５３を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用の可能性】
【０１７８】
本発明は、複数のパケット転送装置と各パケット転送装置を制御する制御装置とを含む通信システムに好適に適用される。
【符号の説明】
【０１７９】
１０  制御装置
１１  制御装置側特定パケット送受信部
１２  トポロジー探索部
１３  トポロジー保持部
１４  制御チャネル経路決定部
１５  制御装置側制御メッセージトンネリング部
２０，２０ａ〜２０ｄ，２０Ａ〜２０Ｄ  スイッチ（パケット転送装置）
２１  スイッチ側特定パケット送受信部
２２  フラッディング部
２３  情報提供部
２４  経路保持部
２５  スイッチ側制御メッセージトンネリング部
【図１】
0005644775.tif 000002
【図２】
0005644775.tif 000003
【図３】
0005644775.tif 000004
【図４】
0005644775.tif 000005
【図５】
0005644775.tif 000006
【図６】
0005644775.tif 000007
【図７】
0005644775.tif 000008
【図８】
0005644775.tif 000009
【図９】
0005644775.tif 000010
【図１０】
0005644775.tif 000011
【図１１】
0005644775.tif 000012
【図１２】
0005644775.tif 000013
【図１３】
0005644775.tif 000014
【図１４】
0005644775.tif 000015
【図１５】
0005644775.tif 000016
【図１６】
0005644775.tif 000017
【図１７】
0005644775.tif 000018
【図１８】
0005644775.tif 000019
【図１９】
0005644775.tif 000020
【図２０】
0005644775.tif 000021