(57)【要約】【課題】アドレスの学習を効率化すること。【解決手段】制御部１ｂは、アドレス“Ｘ１”を送信元とするデータＤ１を受信したスイッチ２からアドレス“Ｘ１”とデータＤ１を受信したポート２ｃの情報とを取得する。制御部１ｂは、記憶部１ａに記憶された集合Ｘ，Ｙ，Ｚのうちアドレス“Ｘ１”が属する集合Ｘとポート２ｃとの対応関係を示す情報Ｒ２を生成する。制御部１ｂは、集合Ｘに属するアドレス“Ｘ２”を宛先とするデータＤ２を受信したスイッチ３からアドレス“Ｘ２”を取得すると、対応関係を示す情報Ｒ２によりデータＤ２をポート２ｃから出力させると決定する。【選択図】図１
2015133556.tif 000002
【特許請求の範囲】
【請求項１】
複数のポートを有するスイッチによるデータ転送を制御する制御装置であって、
アドレスの複数の集合を示す情報を記憶する記憶部と、
第１のアドレスを送信元とする第１のデータを受信した第１のスイッチから前記第１のアドレスと前記第１のデータを受信したポートの情報とを取得すると、前記複数の集合のうち前記第１のアドレスが属する集合と前記ポートとの対応関係を示す情報を生成し、
前記集合に属する第２のアドレスを宛先とする第２のデータを受信した前記第１のスイッチまたは第２のスイッチから前記第２のアドレスを取得すると、前記対応関係により前記第２のデータを前記ポートから出力させると決定する、制御部と、
を有する制御装置。
【請求項２】
前記制御部は、前記第２のスイッチから前記第２のアドレスを取得すると、データの宛先のアドレスが前記集合に属するか否かをスイッチに判定させ、宛先のアドレスが前記集合に属する場合に当該データを前記第１のスイッチへ向けて転送させるルールを、前記第２のスイッチから前記第１のスイッチへ至る通信経路に含まれるスイッチに設定する、請求項１記載の制御装置。
【請求項３】
前記制御部は、データの宛先のアドレスが前記集合に属するか否かを前記第１のスイッチに判定させ、宛先のアドレスが前記集合に属する場合に当該データを前記ポートから出力させるルールを、前記第１のスイッチに設定する、請求項１または２記載の制御装置。
【請求項４】
前記集合は、ＩＰ（Internet Protocol）アドレスの集合であり、
前記第２のデータは、前記第２のアドレスを宛先ＩＰアドレスとして含むＡＲＰ（Address Resolution Protocol）リクエストであり、
前記制御部は、前記第２のスイッチから前記第２のアドレスを取得すると、前記第２のスイッチから前記第１のスイッチへ至る通信経路に含まれるスイッチに、前記ＡＲＰリクエストを前記第１のスイッチへ向けて転送させるルールを設定する、請求項１乃至３の何れか１項に記載の制御装置。
【請求項５】
前記集合は、ＩＰアドレスの集合であり、
前記第２のデータは、前記第２のアドレスを宛先ＩＰアドレスとして含むＡＲＰリクエストであり、
前記制御部は、前記第２のスイッチから前記ＡＲＰリクエストを取得すると、前記ＡＲＰリクエストを前記第１のスイッチに送信する、請求項１乃至３の何れか１項に記載の制御装置。
【請求項６】
前記宛先ＩＰアドレスは前記ポートとネットワークを介して接続されたノードのＩＰアドレスであり、また、前記ノードは当該ＩＰアドレスに対応付けて第１のＭＡＣアドレスを保持しており、
前記制御部は、前記第１のＭＡＣアドレスとは異なる第２のＭＡＣアドレスを送信元ＭＡＣアドレスとするＡＲＰリプライを生成し、前記第２のスイッチに送信する、
請求項５記載の制御装置。
【請求項７】
前記制御部は、前記ＡＲＰリクエストに対して前記ノードにより送信されたＡＲＰリプライを前記第１のスイッチを介して取得し、当該ＡＲＰリプライから前記第１のＭＡＣアドレスを取得し、前記宛先ＩＰアドレスを宛先に含むデータの宛先ＭＡＣアドレスを前記第１のＭＡＣアドレスに変換するルールを前記第１のスイッチに設定する、請求項６記載の制御装置。
【請求項８】
前記記憶部は、アドレス空間の割り当て方法を定めたポリシー情報を記憶し、
前記制御部は、前記第１のアドレスと前記ポートの情報とを取得した際に、前記第１のアドレスと前記ポートとの対応を学習し、前記ポリシー情報に基づいて前記第１のアドレスをアドレス空間に変換し、当該アドレス空間と前記ポートとの対応情報を生成し、
前記第２のアドレスを取得した際に、前記対応情報を参照して、前記第１のスイッチ、または、前記第２スイッチから前記第１のスイッチまでの通信経路に含まれるスイッチに、前記第２のデータの転送用のルールを設定する、
請求項１記載の制御装置。
【請求項９】
複数のポートを有するスイッチによるデータ転送を制御する制御装置が、
第１のアドレスを送信元とする第１のデータを受信した第１のスイッチから前記第１のアドレスと前記第１のデータを受信したポートの情報とを取得すると、アドレスの複数の集合を示す情報を参照して、前記複数の集合のうち前記第１のアドレスが属する集合と前記ポートとの対応関係を示す情報を生成し、
前記集合に属する第２のアドレスを宛先とする第２のデータを受信した前記第１のスイッチまたは第２のスイッチから前記第２のアドレスを取得すると、前記対応関係により前記第２のデータを前記ポートから出力させると決定する、
転送制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は制御装置および転送制御方法に関する。
【背景技術】
【０００２】
コンピュータなどの複数のノードをネットワークを介して接続することで、ノード間のデータ通信を実現することがある。ネットワークは１以上のスイッチを含む。スイッチは、データ入出力用の複数のポートを有する。各スイッチのポートにノードや他のスイッチを接続することでネットワークが形成される。データの送信元ノードと宛先ノードとの間に介在するスイッチは、送信元ノードから宛先ノードまでデータを転送する。スイッチは、データの宛先に応じてデータを出力するポートの情報を保持し、転送時に利用し得る。
【０００３】
例えば、ＯＳＩ（Open Systems Interconnection）参照モデルのネットワーク層におけるＩＰ（Internet Protocol）を用いてデータ転送を行うスイッチ（Ｌ３（Layer3）スイッチなど）がある。ＩＰではＩＰアドレスと呼ばれるアドレス情報により各ノードを識別する。例えば、Ｌ３スイッチは、データの宛先のアドレス情報とそのデータを出力するポートとの対応をルーティングテーブルにより管理する。ルーティングテーブルは、Ｌ３スイッチに固定で与えることもできるし（静的ルーティング）、所定のルーティングプロトコルを用いて各スイッチにより自律的に生成させることもできる（動的ルーティング）。
【０００４】
一方、近年では、スイッチを用いて通信経路を確立するための手法として、ＳＤＮ（Software-Defined Networking）が考えられている。ＳＤＮでは、データの中継を行うスイッチと通信経路を制御するコントローラとを別個に設け、スイッチによるデータの転送先をコントローラにより決定する。例えば、ＳＤＮを実現する技術の１つに、オープンフロー（OPENFLOW、登録商標）が知られている。
【０００５】
オープンフローでは、フローと呼ばれる単位で転送対象のデータを区別する。フローは、転送対象のデータの宛先／送信元アドレスやこれらの組み合わせなどを含むマッチ条件により識別される。コントローラは、マッチ条件とフローに対するアクション（転送、破棄およびヘッダの書き換えなど）とを対応付けたフローエントリを各スイッチに設定することで、各スイッチによるデータ転送を制御する。各スイッチは、自身が保持するマッチ条件に合致しないデータを、Ｐａｃｋｅｔ−ｉｎメッセージと呼ばれるメッセージに含めてコントローラに送り、コントローラからアクションの指示を受けることもある。
【０００６】
例えば、複数のコントローラを含むシステムで、複数のスイッチが、複数のコントローラの１つを経路決定者として指定し、経路決定者によって設定されたフローエントリに従って、受信パケットの中継処理を行う提案がある。また、一部のスイッチに対して負荷を集中させることで未使用のスイッチを停止し、エネルギーの節減を図る提案もある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１１−１６０３６３号公報
【特許文献２】特開２０１３−５００６５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記のように、コントローラとして機能する装置（制御装置という）により、スイッチによるデータ転送を制御することが考えられる。この場合、データの宛先に対する転送先を制御装置にどのように設定するかが問題となる。例えば、宛先として利用され得る全てのアドレスに対する転送先を、ユーザが制御装置に固定で登録することも考えられる。しかし、利用され得る全てのアドレスに対して転送先の情報を事前に把握し、登録するのは容易でない。また、登録に漏れがあると漏れたアドレスを宛先とする通信を行えない。
【０００９】
一方、データを受信したポートの情報をスイッチから制御装置に収集し、そのデータの送信元ノードのアドレスとそのスイッチのポートとの対応を制御装置により学習させることも考えられる。すると、学習済のノードのアドレスを宛先としたデータを何れかのスイッチが受信した場合、制御装置は、学習済のポートの先に当該ノードが存在すると判断し得る。ところが、この場合、制御装置はノードのアドレス毎に学習を行うことになる。このため、ノード数が増大するほど、制御装置によるアドレスの学習量も増大してしまう。
【００１０】
１つの側面では、本発明は、アドレスの学習を効率化できる制御装置および転送制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの態様では、複数のポートを有するスイッチによるデータ転送を制御する制御装置が提供される。この制御装置は、記憶部と制御部とを有する。記憶部は、アドレスの複数の集合を示す情報を記憶する。制御部は、第１のアドレスを送信元とする第１のデータを受信した第１のスイッチから第１のアドレスと第１のデータを受信したポートの情報とを取得すると、複数の集合のうち第１のアドレスが属する集合と当該ポートとの対応関係を示す情報を生成し、その集合に属する第２のアドレスを宛先とする第２のデータを受信した第１のスイッチまたは第２のスイッチから第２のアドレスを取得すると、対応関係により第２のデータを当該ポートから出力させると決定する。
【００１２】
また、１つの態様では、複数のポートを有するスイッチによるデータ転送を制御する制御装置によって実行される転送制御方法が提供される。この転送制御方法では、制御装置が、第１のアドレスを送信元とする第１のデータを受信した第１のスイッチから第１のアドレスと第１のデータを受信したポートの情報とを取得すると、アドレスの複数の集合を示す情報を参照して、複数の集合のうち第１のアドレスが属する集合と当該ポートとの対応関係を示す情報を生成し、その集合に属する第２のアドレスを宛先とする第２のデータを受信した第１のスイッチまたは第２のスイッチから第２のアドレスを取得すると、対応関係により第２のデータを当該ポートから出力させると決定する。
【発明の効果】
【００１３】
１つの側面では、アドレスの学習を効率化できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態の制御装置を示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】第２の実施の形態のスイッチの接続関係を示す図である。
【図４】第２の実施の形態の制御サーバのハードウェア例を示す図である。
【図５】第２の実施の形態のスイッチのハードウェア例を示す図である。
【図６】第２の実施の形態の制御サーバの機能例を示す図である。
【図７】第２の実施の形態のスイッチの機能例を示す図である。
【図８】第２の実施の形態のポリシー情報の例を示す図である。
【図９】第２の実施の形態のエンドホストテーブルの例を示す図である。
【図１０】第２の実施の形態のアドレス−エッジ対応テーブルの例を示す図である。
【図１１】第２の実施の形態のフローテーブルの例を示す図である。
【図１２】第２の実施の形態のＡＲＰ用のフレームの例を示す図である。
【図１３】第２の実施の形態のＰａｃｋｅｔ−Ｉｎメッセージの例を示す図である。
【図１４】第２の実施の形態のＡＲＰ要求時の処理例を示すフローチャートである。
【図１５】第２の実施の形態のＰａｃｋｅｔ−Ｉｎの例（その１）を示す図である。
【図１６】第２の実施の形態のＡＲＰリクエストの転送例を示す図である。
【図１７】第２の実施の形態のＡＲＰ応答時の処理例を示すフローチャートである。
【図１８】第２の実施の形態のＰａｃｋｅｔ−Ｉｎの例（その２）を示す図である。
【図１９】第２の実施の形態のＡＲＰ応答時のテーブル例を示す図である。
【図２０】第２の実施の形態のＡＲＰ応答時のテーブル例（続き）を示す図である。
【図２１】第２の実施の形態のＡＲＰリプライの転送例を示す図である。
【図２２】第２の実施の形態のＡＲＰ以外の処理例を示すフローチャートである。
【図２３】第２の実施の形態のＰａｃｋｅｔ−Ｉｎの例（その３）を示す図である。
【図２４】第２の実施の形態の更新後のテーブル例を示す図である。
【図２５】第２の実施の形態の更新後のテーブル例（続き）を示す図である。
【図２６】第２の実施の形態のフレームの転送例を示す図である。
【図２７】第２の実施の形態のフローテーブルの他の例を示す図である。
【図２８】第３の実施の形態のＡＰＲ要求時の処理例を示すフローチャートである。
【図２９】第３の実施の形態のＡＲＰリクエストの転送例を示す図である。
【図３０】第３の実施の形態のＡＲＰ応答時の処理例を示すフローチャートである。
【図３１】第３の実施の形態のＡＲＰリプライの転送例を示す図である。
【図３２】第３の実施の形態のフローテーブルの例を示す図である。
【図３３】第４の実施の形態のＡＲＰ要求時の処理例を示すフローチャートである。
【図３４】第４の実施の形態のＡＲＰリクエストの転送例を示す図である。
【図３５】第４の実施の形態のＡＲＰ応答時の処理例を示すフローチャートである。
【図３６】第４の実施の形態のＡＲＰリプライの転送例を示す図である。
【図３７】第４の実施の形態のフローテーブルの例を示す図である。
【図３８】第４の実施の形態のＭＡＣアドレス対応テーブルの例を示す図である。
【図３９】第５の実施の形態の情報処理システムを示す図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の制御装置を示す図である。制御装置１は、ネットワークＮに接続されている。ネットワークＮはスイッチ２，３，４，５，６，７，８を含む。スイッチ２，３，４，５，６，７，８は、データ転送を行う装置である。スイッチ２，３，４，５，６，７，８は、ネットワークＮの外部の何れかのネットワーク（ネットワークＮ１，Ｎ２，Ｎ３など）から受け付けたデータを、外部の他のネットワークへ転送する。
【００１６】
スイッチ２は、ポート２ａ，２ｂ，２ｃを有する。ポート２ａは、スイッチ４に接続されている。ポート２ｂは、スイッチ６に接続されている。ポート２ｃは、ネットワークＮ１に接続されている。スイッチ３は、ポート３ａ，３ｂ，３ｃを有する。ポート３ａは、スイッチ５に接続されている。ポート３ｂは、スイッチ８に接続されている。ポート３ｃは、ネットワークＮ３に接続されている。また、スイッチ４は、スイッチ５に接続されている。スイッチ６は、スイッチ７に接続されている。スイッチ７は、ネットワークＮ２に接続されている。スイッチ８は、他のスイッチまたは他のネットワーク（何れも図示を省略）に接続されている。
【００１７】
ネットワークＮ１にはノード９，９ａが接続されている。ネットワークＮ２にはノード９ｂが接続されている。ネットワークＮ３にはノード９ｃが接続されている。ノード９，９ａ，９ｂ，９ｃは、例えばデータ通信を行うコンピュータなどの情報処理装置である。
【００１８】
ここで、スイッチ２，３の各ポートはポート番号に対応付けられている。ポート２ａのポート番号は“＃１”である。ポート２ｂのポート番号は“＃２”である。ポート２ｃのポート番号は“＃３”である。ポート３ａのポート番号は“＃１”である。ポート３ｂのポート番号は“＃２”である。ポート３ｃのポート番号は“＃３”である。
【００１９】
また、スイッチ２，３およびノード９，９ａ，９ｂ，９ｃにはアドレスが付与されている。アドレスはＩＰアドレスでもよい。スイッチ２のアドレスは“ＳＷ１”である。スイッチ３のアドレスは“ＳＷ２”である。ノード９のアドレスは“Ｘ１”である。ノード９ａのアドレスは“Ｘ２”である。ノード９ｂのアドレスは“Ｙ１”である。ノード９ｃのアドレスは“Ｚ１”である。
【００２０】
制御装置１は、ネットワークＮ内の制御用のネットワークを介してスイッチ２，３，４，５，６，７，８と接続され、スイッチ２，３，４，５，６，７，８によるデータ転送を制御する。具体的には、制御装置１は、転送対象のデータの宛先に応じて、そのデータの転送先を示すルールをスイッチ２，３，４，５，６，７，８に登録する。スイッチ２，３，４，５，６，７，８は、そのルールに従ってデータを転送する。
【００２１】
例えば、制御装置１およびスイッチ２，３，４，５，６，７，８はＳＤＮの手法によりデータ転送を行うネットワークシステムでもよい。制御装置１は、ＬＬＤＰ（Link Layer Discovery Protocol）などを用いて、スイッチ２，３，４，５，６，７，８によるネットワークトポロジを予め検出し得る。
【００２２】
制御装置１は、記憶部１ａおよび制御部１ｂを有する。記憶部１ａは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置でもよい。制御部１ｂは、例えば、プロセッサを含む。プロセッサは、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）でもよいし、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路でもよい。また、プロセッサは、複数のプロセッサの集合（マルチプロセッサ）でもよい。プロセッサは、例えば、記憶部１ａに記憶されたプログラムを実行するものでもよい。
【００２３】
記憶部１ａは、アドレスの集合“Ｘ，Ｙ，Ｚ”を示す情報Ｒ１を記憶する。情報Ｒ１は、例えば、ユーザにより記憶部１ａに予め格納されてもよい。ここで、集合“Ｘ”は、“Ｘ１，Ｘ２”などの複数のアドレスを要素にもつ集合である。集合“Ｙ”は“Ｙ１”などの複数のアドレスを要素にもつ集合である。集合“Ｚ”は“Ｚ１”などの複数のアドレスを要素にもつ集合である。
【００２４】
制御部１ｂは、第１のアドレスを送信元とする第１のデータを受信した第１のスイッチから第１のアドレスと第１のデータを受信したポートの情報とを取得する。すると、制御部１ｂは、集合“Ｘ，Ｙ，Ｚ”のうち第１のアドレスが属する集合とポートとの対応関係を示す情報を生成する。
【００２５】
例えば、ノード９によりノード９ｂへ宛てたデータＤ１が送信されたとする。データＤ１の宛先アドレスは“Ｙ１”である。データＤ１の送信元アドレスは“Ｘ１”である。データＤ１は、ネットワークＮ１を介してポート２ｃに到着する。この場合、制御部１ｂは、送信元アドレス“Ｘ１”とポート２ｃの情報（ここでは、スイッチ２の識別情報とポート番号との組“ＳＷ１−＃３”）をスイッチ２から取得する。例えば、スイッチ２は、データＤ１の転送先が不明なとき、送信元アドレス“Ｘ１”を含むデータＤ１を、ポート２ｃの情報とともに制御装置１に送信してもよい。
【００２６】
すると、制御部１ｂは、送信元アドレス“Ｘ１”が属する集合“Ｘ”とポート２ｃとの対応関係を示す情報Ｒ２を生成する。例えば、情報Ｒ２は、集合“Ｘ”とポート２ｃの識別情報“ＳＷ１−＃３”との対応関係を示す。制御部１ｂは、情報Ｒ２を記憶部１ａに格納する。
【００２７】
制御部１ｂは、情報Ｒ２に登録された集合に属する第２のアドレスを宛先とする第２のデータを受信した第２のスイッチから第２のアドレスを取得する。制御部１ｂは、情報Ｒ２の対応関係により第２のデータを、情報Ｒ２で示されるポートから出力させると決定する。
【００２８】
例えば、ノード９ｃによりノード９ａへ宛てたデータＤ２が送信されたとする。データＤ２の宛先アドレスは“Ｘ２”である。データＤ１の送信元アドレスは“Ｚ１”である。データＤ２は、ネットワークＮ３を介してポート３ｃに到着する。この場合、制御部１ｂは、宛先アドレス“Ｘ２”をスイッチ３から取得する。例えば、スイッチ３は、データＤ２の転送先が不明なとき、宛先アドレス“Ｘ２”を含むデータＤ２を制御装置１に送信してもよい。すると、制御部１ｂは、情報Ｒ２の対応関係によりデータＤ２を、ポート２ｃから出力させると決定する。アドレス“Ｘ２”は集合“Ｘ”の要素だからである。
【００２９】
例えば、制御部１ｂは、データＤ２をスイッチ２へ向けて転送するルールをスイッチ３，５，４に設定してもよい。具体的には、制御部１ｂは、宛先アドレス“Ｘ２”であるデータをポート３ａから出力するというルールをスイッチ３に設定する。スイッチ５にはスイッチ４に繋がるポート、スイッチ４にはスイッチ２に繋がるポートから当該データを出力するというルールを設定する。また、制御部１ｂは宛先アドレス“Ｘ２”であるデータをポート２ｃから出力するというルールをスイッチ２に設定する。すると、データＤ２は、スイッチ３，５，４，２およびネットワークＮ１を介してノード９ａまで転送される。
【００３０】
制御装置１によれば、データＤ１の送信元アドレス“Ｘ１”とデータＤ１を受信したポート２ｃの情報とがスイッチ２から取得される。すると、記憶部１ａに記憶された情報Ｒ１で示される集合“Ｘ，Ｙ，Ｚ”のうちアドレス“Ｘ１”が属する集合“Ｘ”とポート２ｃとの対応関係を示す情報Ｒ２が生成される。制御装置１により、データＤ２の宛先であり集合“Ｘ”に属するアドレス“Ｘ２”がスイッチ３から取得される。すると、情報Ｒ２で示される対応関係によりデータＤ２をポート２ｃから出力させると決定される。
【００３１】
これにより、アドレスの学習を効率化できる。具体的には次の通りである。例えば、各ノードが何れのスイッチの何れのポートの先に存在するかを、ノードのアドレス毎に、制御装置１に学習させることも考えられる。例えば、制御装置１は、ノードのアドレスとポートとの対応関係を学習するために、所定の問合せをネットワークＮ１，Ｎ２，Ｎ３にブロードキャストすることが考えられる。
【００３２】
具体的には、制御装置１がデータＤ２の宛先アドレス“Ｘ２”をＩＰアドレスとし、各ノードのＩＰアドレスが同じサブネットに属するとき、アドレス“Ｘ２”と何れかのポートとの対応を学習することを考える。このとき、制御装置１は、ＩＰアドレス“Ｘ２”のＭＡＣ（Media Access Control）アドレスを解決するためのＡＲＰ（Address Resolution Protocol）リクエストをネットワークＮ１，Ｎ２などに転送することが考えられる。何れかのノードからのＡＲＰリクエストを取得した場合に、制御装置１は、ネットワークＮ１，Ｎ２などにそのＡＲＰリクエストを転送してもよい。
【００３３】
この場合、制御装置１は、アドレス“Ｘ２”が何れのスイッチの何れのポートの先に存在するかが不明なら、そのＡＲＰリクエストを各ネットワークまで転送するためのルールを、スイッチ２，３，４，５，６，７，８に設定することになる。すると、各スイッチはＡＲＰリクエストをネットワークＮ１，Ｎ２などに転送する。宛先ＩＰアドレス“Ｘ２”のノード９ａは、ポート２ｃの先にあるから、スイッチ２が当該ＡＲＰリクエストに対するＡＲＰリプライを受信することになる。制御装置１は、ＡＲＰリプライを受信したスイッチ２から、ＡＲＰリプライの送信元ＩＰアドレス“Ｘ２”とポート２ｃの情報を取得することで、ＩＰアドレス“Ｘ２”とポート２ｃとの対応を学習し得る。
【００３４】
ところが、このように、ノードのアドレス毎に学習を行っていると、ノード数が増大するほど、制御装置１の学習量が増大し得る。すなわち、制御装置１による学習の頻度や学習する情報量が増大してしまう。制御装置１による学習の頻度が高まると、学習のための制御装置１の負荷が増大し得る。また、学習した情報量が巨大化すると、記憶部１ａなどの記憶領域を圧迫し得る。また、学習した情報量が巨大化すると学習した情報から何れかのエントリを検索するための処理コストが増大し得る。
【００３５】
また、上記のように未知のＩＰアドレスが発生するたびに、ＡＲＰリクエストをネットワークＮの外部の複数のネットワークに転送していると、スイッチ２，３，４，５，６，７，８に設定されるルールが巨大化するおそれがある。ＡＲＰリクエストを各ネットワークまで転送させるためのルールが、問合せ対象のＩＰアドレス毎に、スイッチ２，３，４，５，６，７，８に設定されることになるからである。各スイッチに設定されるルールが巨大化すると、各スイッチの記憶領域を圧迫し得る。また、各スイッチにおいて転送対象のデータをルールと照合するための処理コストが増大し得る。
【００３６】
これに対し、制御装置１では、記憶部１ａに格納された情報Ｒ１で示される集合“Ｘ，Ｙ，Ｚ”を単位として、各集合に属するアドレスをもつノードが、どのスイッチの、どのポートの先に存在するかを学習し、情報Ｒ２を生成する。そして、例えば、情報Ｒ２に登録された集合“Ｘ”に属するアドレス“Ｘ２”を宛先としたデータＤ２を受信した場合に、集合“Ｘ”に対応するポート２ｃからデータＤ２を出力させると決定する。すなわち、制御装置１は、アドレス“Ｘ２”であるノード９ａが何れのスイッチの何れのポートの先に存在しているかを学習しなくてもよい。よって、制御装置１によるアドレスの学習量を低減できる。学習量の低減は、学習のための負荷低減、記憶領域の節約、学習した情報内を検索する処理コストの低減に寄与する。
【００３７】
また、例えば、データＤ２がＡＲＰリクエストである場合にも、上記のようにデータＤ２の出力先ポートをポート２ｃと決定できるので、当該ＡＲＰリクエストをスイッチ３，５，４，２と転送して、ポート２ｃから出力させればよい。このため、制御装置１は、当該ＡＲＰリクエストの転送用のルールをスイッチ３，５，４，２に設定すればよく、スイッチ６，７，８に当該ルールを設定しなくてもよい。例えば、スイッチ６，７，８の先に集合“Ｘ”に属するＩＰアドレスをもつノードが存在しないことが明らかであれば、ＩＰアドレス“Ｘ２”を宛先（問合せ）ＩＰアドレスとするＡＲＰリクエスト転送用のルールをスイッチ６，７，８に設定するのは余計だからである。このように、余計なルールを各スイッチに設定しないことで、各スイッチに設定されるルールの情報量を低減できる。上記の場合、スイッチ６，７，８は余計な転送処理を行わずに済むので、スイッチ６，７，８の負荷も低減できる。また、ネットワークＮ１以外のネットワークで余計なＡＲＰリクエストがブロードキャストされないので、当該ネットワークの負荷も低減できる。
【００３８】
更に、ユーザは、学習させたい集合の情報を記憶部１ａに予め登録しておけばよい。例えば、ネットワークＮ１，Ｎ２，Ｎ３において、近接するアドレスをもつ複数のノードが同じネットワークに接続されるという運用上の制約が存在するなら、ユーザはその制約を把握してさえいれば、アドレスの集合を制御装置１に登録することができる。このため、宛先として用いられ得る全てのアドレスを事前に把握して登録しておかなくてもよい。よって、ユーザによる作業の省力化を図れる。
【００３９】
以上のように、制御装置１はアドレスの学習を効率化できる。なお、上記の説明では制御装置１がデータＤ１，Ｄ２が異なるスイッチ２，３により受信される場合を例示したが、同一のスイッチにより受信された場合も同様に制御し得る。例えば、図１において、ポート２ｂの先にネットワークＮ２が直接（スイッチ６，７を省いて）接続され、集合“Ｘ”とポート２ｃとの対応関係を示す情報Ｒ２が記憶部１ａに格納されている場合を考える。このとき、ノード９ｂから宛先アドレスを“Ｘ２”とするデータがポート２ｂに到着しても、制御部１ｂは、データＤ２がポート３ｃに到着したときと同様に処理できる。すなわち、制御部１ｂは、スイッチ２から宛先アドレス“Ｘ２”を取得し、ポート２ｂに到着したデータをポート２ｃから出力させると決定できる。
【００４０】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。第２の実施の形態の情報処理システムは、クライアント３０，５０，６０、サーバ３０ａ，４０，４０ａ、制御サーバ１００およびスイッチ２００，３００，４００，５００，６００，７００を含む。制御サーバ１００およびスイッチ２００，３００，４００，５００，６００，７００は、オープンフローを用いてデータの転送を行う。
【００４１】
クライアント３０，５０，６０は、ユーザにより利用されるクライアントコンピュータである。サーバ３０ａ，４０，４０ａは、クライアント３０，５０，６０などに所定のサービスを提供するサーバコンピュータである。以下の説明では、クライアント３０，５０，６０およびサーバ３０ａ，４０，４０ａを指して“エンドホスト”ということがある。
【００４２】
制御サーバ１００は、スイッチ２００，３００，４００，５００，６００，７００によるデータ転送を制御するサーバコンピュータである。制御サーバ１００は、ネットワーク１０に接続されている。ネットワーク１０は、制御用のネットワーク（コントロールプレーン）である。ネットワーク１０には、スイッチ２００，３００，４００，５００，６００，７００も接続されている。制御サーバ１００は、ネットワーク１０を介してスイッチ２００，３００，４００，５００，６００，７００と通信可能である。制御サーバ１００は、第１の実施の形態の制御装置１の一例である。
【００４３】
スイッチ２００，３００，４００，５００，６００，７００は、制御サーバ１００からの指示に従ってデータ転送を行う装置である。スイッチ２００，３００，４００，５００，６００，７００は、ネットワーク２０を形成する。例えば、スイッチ２００，３００，４００，５００，６００，７００を所定のケーブルを介して接続することでスイッチ間を結ぶ通信経路が形成される。ネットワーク２０は、データ転送用のネットワーク（データプレーン）である。
【００４４】
ここで、ネットワーク２０は、ネットワーク２１，２２，２３，２４に接続されている。ネットワーク２１，２２，２３，２４はユーザ用のネットワークである。ネットワーク２１にはクライアント３０、サーバ３０ａが接続されている。ネットワーク２２にはサーバ４０，４０ａが接続されている。ネットワーク２３にはクライアント５０が接続されている。ネットワーク２４にはクライアント６０が接続されている。
【００４５】
また、スイッチ２００は、スイッチ６００およびネットワーク２１に接続されている。スイッチ３００は、スイッチ７００およびネットワーク２２に接続されている。スイッチ４００は、スイッチ７００およびネットワーク２３に接続されている。スイッチ５００は、スイッチ６００およびネットワーク２４に接続されている。スイッチ６００は、スイッチ２００，５００，７００に接続されている。スイッチ７００は、スイッチ３００，４００，６００に接続されている。
【００４６】
スイッチ２００，３００，４００，５００は、ネットワーク２０に属し、ネットワーク２０とネットワーク２１，２２，２３，２４との境界に配置されているので、エッジスイッチまたはエッジと呼ぶことができる。これに対し、スイッチ６００，７００は、当該境界ではなく、ネットワーク２０内部で基幹の通信路を形成しているので、コアスイッチと呼ぶことができる。なお、以下の説明ではスイッチ２００，３００，４００，５００，６００，７００を指して、“各スイッチ”と表記することがある。
【００４７】
ここで、クライアント３０，５０，６０およびサーバ３０ａ，４０，４０ａの通信インタフェースは、ＭＡＣアドレスによって識別される。クライアント３０，５０，６０およびサーバ３０ａ，４０，４０ａは、各自のＩＰアドレスを各自のＭＡＣアドレスに対応付けて保持する。
【００４８】
また、第２の実施の形態では、Ｌ２ネットワーク（フラットなネットワーク）を想定する。すなわち、クライアント３０，５０，６０およびサーバ３０ａ，４０，４０ａに設定されている各ＩＰアドレスについて、ネットワークアドレスは同一であるとする。あるエンドホストは、他のエンドホストと通信しようとするとき、当該他のエンドホストのＩＰアドレスが自身のＩＰアドレスと同じネットワークアドレスに属していると認識する。
【００４９】
更に、ネットワーク２１，２２，２３，２４では、近接する（例えば、ＩＰアドレスの上位何ビットかが同じである）ＩＰアドレスをもつ複数のエンドホストが同じネットワークに接続されるという運用上のポリシーが存在している。
【００５０】
図３は、第２の実施の形態のスイッチの接続関係を示す図である。図３では、各スイッチが備える通信用のポートの接続関係を例示している。各スイッチのポートには、ポート番号が付与されている。
【００５１】
スイッチ２００は、ポート番号“ａ１”、“ａ２”、“ａ３”のポートを有する。スイッチ３００は、ポート番号“ｂ１”、“ｂ２”、“ｂ３”のポートを有する。スイッチ４００は、ポート番号“ｃ１”、“ｃ２”、“ｃ３”のポートを有する。スイッチ５００は、ポート番号“ｄ１”、“ｄ２”、“ｄ３”のポートを有する。スイッチ６００は、ポート番号“ｅ１”、“ｅ２”、“ｅ３”、“ｅ４”のポートを有する。スイッチ７００は、ポート番号“ｆ１”、“ｆ２”、“ｆ３”、“ｆ４”のポートを有する。
【００５２】
ここで、以下の説明では、“ポート”の文字列と、ポート番号とを組み合わせて各ポートを表記する。例えば、ポート番号“ａ１”のポートであれば、“ポートａ１”のように表記する。各スイッチのポートの具体的な接続関係は次の通りである。
【００５３】
ポートａ１はネットワーク２１に接続されている。ポートｂ２は、ネットワーク２２に接続されている。ポートｃ１はネットワーク２３に接続されている。ポートｄ１はネットワーク２４に接続されている。
【００５４】
また、次のポートの組が相互に接続されている。ポートａ２，ｅ１。ポートｂ１，ｆ２。ポートｃ２，ｆ１。ポートｄ２，ｅ２。ポートｅ３，ｆ３。更に、ポートａ３，ｂ３，ｃ３，ｄ３，ｅ４，ｆ４は、ネットワーク１０を介して制御サーバ１００に接続されている（図中、この接続関係を点線で示している）。制御サーバ１００は、各スイッチのポートの接続関係を含むネットワークトポロジを所定のプロトコル（ＬＬＤＰやＯＳＰＦ（Open Shortest Path First）など）を用いて把握できる。
【００５５】
図３では、各スイッチに付与された識別情報も例示している。スイッチ２００の識別情報は“Ａ”である。スイッチ３００の識別情報は“Ｂ”である。スイッチ４００の識別情報は“Ｃ”である。スイッチ５００の識別情報は“Ｄ”である。スイッチ６００の識別情報は“Ｅ”である。スイッチ７００の識別情報は“Ｆ”である。識別情報は、各スイッチのネットワーク１０に接続されたポートのＭＡＣアドレスやＩＰアドレスなどでもよい。
【００５６】
また、図３では、クライアント３０，５０，６０およびサーバ３０ａ，４０，４０ａのＩＰアドレスも例示している。クライアント３０のＩＰアドレスは“１９２．１６８．３０．５５”である。サーバ３０ａのＩＰアドレスは“１９２．１６８．３０．９”である。サーバ４０のＩＰアドレスは“１９２．１６８．４０．２”である。サーバ４０ａのＩＰアドレスは“１９２．１６８．４０．１０”である。クライアント５０のＩＰアドレスは“１９２．１６８．５０．１０１”である。クライアント６０のＩＰアドレスは“１９２．１６８．６０．２”である。
【００５７】
図４は、第２の実施の形態の制御サーバのハードウェア例を示す図である。制御サーバ１００は、プロセッサ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、読み取り装置１０６、通信インタフェース１０７を有する。各ユニットが制御サーバ１００のバスに接続されている。
【００５８】
プロセッサ１０１は、制御サーバ１００全体を制御する。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ１０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００５９】
ＲＡＭ１０２は、制御サーバ１００の主記憶装置である。ＲＡＭ１０２は、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２は、プロセッサ１０１による処理に用いる各種データを記憶する。
【００６０】
ＨＤＤ１０３は、制御サーバ１００の補助記憶装置である。ＨＤＤ１０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。制御サーバ１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００６１】
画像信号処理部１０４は、プロセッサ１０１からの命令に従って、制御サーバ１００に接続されたディスプレイ１１に画像を出力する。ディスプレイ１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、有機ＥＬ（Electro-Luminescence）ディスプレイなど各種のディスプレイを用いることができる。
【００６２】
入力信号処理部１０５は、制御サーバ１００に接続された入力デバイス１２から入力信号を取得し、プロセッサ１０１に出力する。入力デバイス１２としては、マウスやタッチパネルなどのポインティングデバイス、キーボード、ボタンスイッチなど各種の入力デバイスを用いることができる。また、制御サーバ１００には複数の種類の入力デバイスが接続されてもよい。
【００６３】
読み取り装置１０６は、記録媒体１３に記録されたプログラムやデータを読み取る装置である。記録媒体１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体１３として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。読み取り装置１０６は、例えば、プロセッサ１０１からの命令に従って、記録媒体１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００６４】
通信インタフェース１０７は、ネットワーク１０を介して他の装置（例えば、各スイッチ）と通信を行う。
クライアント３０，５０，６０およびサーバ３０ａ，４０，４０ａも制御サーバ１００と同様のハードウェアによって実現できる。
【００６５】
図５は、第２の実施の形態のスイッチのハードウェア例を示す図である。スイッチ２００は、プロセッサ２０１、ＲＡＭ２０２、ＲＯＭ（Read Only Memory）２０３およびネットワーク接続部２０４を有する。各ユニットがスイッチ２００のバスに接続されている。
【００６６】
プロセッサ２０１は、スイッチ２００全体を制御する。プロセッサ２０１は、マルチプロセッサであってもよい。プロセッサ２０１は、例えばＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ２０１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡのうちの２以上の要素の組み合わせであってもよい。
【００６７】
ＲＡＭ２０２は、スイッチ２００の主記憶装置である。ＲＡＭ２０２は、プロセッサ２０１に実行させるファームウェアのプログラムの少なくとも一部を一時的に記憶する。または、ＲＡＭ２０２は、プロセッサ２０１による処理に用いる各種のデータを記憶する。
【００６８】
ＲＯＭ２０３は、ファームウェアのプログラムやデータを予め記憶している。ＲＯＭ２０３は、フラッシュメモリなど、書き換え可能な不揮発性メモリであってもよい。ＲＯＭ２０３に記憶されたプログラムやデータは、プロセッサ２０１の処理に用いられる。
【００６９】
ネットワーク接続部２０４は、データ転送に用いられる通信インタフェースである。ネットワーク接続部２０４は、ポートａ１，ａ２，ａ３を含む。前述のように、ポートａ１はネットワーク２１に接続されている。ポートａ２はスイッチ６００に接続されている。ポートａ３はネットワーク１０に接続されている。ネットワーク接続部２０４は、ポートａ１，ａ２，ａ３に入力されたデータをプロセッサ２０１に出力する。また、ネットワーク接続部２０４は、プロセッサ２０１による指示に従って、ポートａ１，ａ２，ａ３からデータを出力する。
【００７０】
スイッチ３００，４００，５００，６００，７００もスイッチ２００と同様のハードウェアによって実現できる。
図６は、第２の実施の形態の制御サーバの機能例を示す図である。制御サーバ１００は、記憶部１１０、メッセージ通信部１２０、アドレス学習部１３０、ポリシー処理部１４０および転送制御部１５０を有する。記憶部１１０は、ＲＡＭ１０２やＨＤＤ１０３に確保された記憶領域を用いて実現できる。メッセージ通信部１２０、アドレス学習部１３０、ポリシー処理部１４０および転送制御部１５０は、プロセッサ１０１によって実行されるプログラムのモジュールであってもよい。
【００７１】
記憶部１１０は、制御サーバ１００の各部の処理に用いられる情報を記憶する。記憶部１１０が記憶する情報は、ポリシー情報１１１、エンドホストテーブル１１２およびアドレス−エッジ対応テーブル１１３を含む。
【００７２】
ポリシー情報１１１は、同一エッジの配下（ネットワーク２０の外部）に存在するＩＰアドレス空間（ＩＰアドレスの集合）を特定するための情報である。エンドホストテーブル１１２は、学習したエッジ情報とＩＰアドレスとＭＡＣアドレスとの対応関係を示す情報である。ここで、エッジ情報とは、スイッチとポートとの組み合わせであり、各スイッチの何れかのポートを識別する情報である。アドレス−エッジ対応テーブル１１３は、エッジ情報とＩＰアドレス空間との対応関係を示す情報である。なお、記憶部１１０は、各スイッチとの通信に用いられる情報（各スイッチのネットワーク１０に接続されたポートのＩＰアドレスやＭＡＣアドレスなど）も記憶する。
【００７３】
メッセージ通信部１２０は、各スイッチとの間で各種のメッセージを送受信する。具体的には、メッセージ通信部１２０は、Ｐａｃｋｅｔ−Ｉｎメッセージを各スイッチから受信する。Ｐａｃｋｅｔ−Ｉｎメッセージは、各スイッチに到着したデータを制御サーバ１００に送信するためのメッセージである。Ｐａｃｋｅｔ−Ｉｎメッセージは、送信元のスイッチおよび当該スイッチがデータを受信したポートの情報を含む。メッセージ通信部１２０は、受信したＰａｃｋｅｔ−Ｉｎメッセージを、アドレス学習部１３０や転送制御部１５０に出力する。
【００７４】
また、メッセージ通信部１２０は、Ｐａｃｋｅｔ−ＯｕｔメッセージやＦｌｏｗ−Ｍｏｄメッセージを各スイッチに送信する。Ｐａｃｋｅｔ−Ｏｕｔメッセージは、Ｐａｃｋｅｔ−Ｉｎメッセージで取得したデータをスイッチに送信するためのメッセージである。Ｆｌｏｗ−Ｍｏｄメッセージは、各スイッチに対してフローエントリの設定を行うためのメッセージである。Ｐａｃｋｅｔ−ＯｕｔメッセージやＦｌｏｗ−Ｍｏｄメッセージは、転送制御部１５０によって生成される。以下の説明において、アドレス学習部１３０や転送制御部１５０によるメッセージ送受信は、メッセージ通信部１２０を介して行われる。
【００７５】
アドレス学習部１３０は、エンドホストのＩＰアドレス、ＭＡＣアドレスおよびエッジ情報の対応を学習する。アドレス学習部１３０は、Ｐａｃｋｅｔ−Ｉｎメッセージから転送対象のデータを取得する。アドレス学習部１３０は、アドレス−エッジ対応テーブル１１３を参照して、そのデータに含まれる送信元ＩＰアドレスが属するＩＰアドレス空間に対応するエッジ情報を検索する。エッジ情報を検索できない場合、その送信元ＩＰアドレスと、そのデータに含まれる送信元ＭＡＣアドレスとエッジ情報との対応関係を生成し、エンドホストテーブル１１２に登録する。アドレス−エッジ対応テーブル１１３から何れかのエッジ情報を検索できた場合、アドレス学習部１３０は何もしない。
【００７６】
ポリシー処理部１４０は、アドレス学習部１３０によりエンドホストテーブル１１２に新たなエントリが追加されると、ポリシー情報１１１に登録されたポリシーに基づいて、学習されたＩＰアドレスが、何れのＩＰアドレス空間に属するかを特定する。ポリシー処理部１４０は、特定したＩＰアドレス空間と、アドレス学習部１３０によって学習されたエッジ情報との対応関係を示す情報を生成し、アドレス−エッジ対応テーブル１１３に登録する。
【００７７】
転送制御部１５０は、Ｐａｃｋｅｔ−Ｉｎメッセージに含まれるデータの宛先ＩＰアドレスに応じて、そのデータの転送先を決定する。その際、転送制御部１５０は、アドレス−エッジ対応テーブル１１３を用いる。具体的には、転送制御部１５０は、アドレス−エッジ対応テーブル１１３を参照して、宛先ＩＰアドレスが属するＩＰアドレス空間に対応するエッジ情報を検索する。転送制御部１５０は、当該エッジ情報で示されるエッジのポートからそのデータを送出すると決定する。当該エッジ情報で示されるエッジは、ネットワーク２０から外部のネットワークに対してデータを送出することになるから、ネットワーク２０内での終点エッジということができる。
【００７８】
ここで、転送制御部１５０は、Ｐａｃｋｅｔ−Ｉｎメッセージの送信元エッジ（以下、Ｐａｃｋｅｔ−Ｉｎの送信元エッジということがある）から、終点エッジに至る通信経路を検出することができる。ここで、Ｐａｃｋｅｔ−Ｉｎの送信元エッジは、ネットワーク２０内における通信経路の始点になるから、始点エッジということもできる。転送制御部１５０は、前述のようにＬＬＤＰやＯＳＰＦなどを用いて各スイッチによるネットワークトポロジの情報を予め取得し、記憶部１１０に格納しておく。そうすれば、記憶部１１０に記憶されたネットワークトポロジの情報により、Ｐａｃｋｅｔ−Ｉｎの送信元エッジ（始点エッジ）から、終点エッジに至る通信経路を把握できる。なお、通信経路の候補が複数存在する場合には、ネットワークトポロジを示すグラフにダイクストラ法などを適用して最短経路を選択してもよい。
【００７９】
転送制御部１５０は、検出した通信経路上に存在するスイッチに対して、終点エッジまでデータを転送するためのフローエントリを設定する。また、転送制御部１５０は、エッジ情報で示されるポートからデータを出力するためのフローエントリを終点エッジに設定する。フローエントリの設定には、前述のようにＦｌｏｗ−Ｍｏｄメッセージが用いられる。転送制御部１５０は、Ｐａｃｋｅｔ−Ｉｎの送信元エッジ（始点エッジ）に対してＰａｃｋｅｔ−Ｏｕｔメッセージを送信し、データを転送させる。
【００８０】
転送制御部１５０は、Ｐａｃｋｅｔ−Ｉｎメッセージにより、ＡＲＰリクエストを受信することもある。その場合、転送制御部１５０は、アドレス−エッジ対応テーブル１１３を参照して、ＡＲＰリクエストに含まれる宛先（問合せ）ＩＰアドレスが属するＩＰアドレス空間に対応するエッジ情報を検索する。何れかのエッジ情報を検索できた場合、転送制御部１５０は、上記のように当該エッジ情報で示されるエッジのポートからそのＡＲＰリクエストを送出すると決定する。一方、何れのエッジ情報も検索できない場合、ネットワーク２１，２２，２３，２４（ＡＲＰリクエストの送信元のエンドホストが属するネットワークを除く。以下、同様）に、そのＡＲＰリクエストを転送する。すなわち、この場合、転送制御部１５０は、複数のエッジのネットワーク２１，２２，２３，２４に繋がるポートから、そのＡＲＰリクエストを送出すると決定する。
【００８１】
図７は、第２の実施の形態のスイッチの機能例を示す図である。スイッチ２００は、記憶部２１０、メッセージ通信部２２０および転送処理部２３０を有する。記憶部２１０は、ＲＡＭ２０２に確保された記憶領域を用いて実現できる。メッセージ通信部２２０および転送処理部２３０は、プロセッサ２０１によって実行されるプログラムのモジュールであってもよい。
【００８２】
記憶部２１０は、転送処理部２３０の処理に用いられる情報を記憶する。記憶部２１０が記憶する情報は、フローテーブル２１１を含む。フローテーブル２１１は、フローを特定するマッチ条件と処理方法（アクション）との対応関係を示すフローエントリを記録した情報である。ここで、フローは転送対象のデータを区別する単位である。フローは、例えば送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ＭＡＣアドレスなど、または、これらを組み合わせたマッチ条件によって特定される。なお、記憶部２１０は、制御サーバ１００との通信に用いられる情報（通信インタフェース１０７のＭＡＣアドレスやＩＰアドレスなど）も記憶する。
【００８３】
メッセージ通信部２２０は、制御サーバ１００との間で各種のメッセージを送受信する。具体的には、メッセージ通信部２２０は、Ｐａｃｋｅｔ−Ｉｎメッセージを制御サーバ１００に送信する。Ｐａｃｋｅｔ−Ｉｎメッセージは転送処理部２３０によって生成される。以下の説明において、転送処理部２３０によるメッセージ送受信は、メッセージ通信部２２０を介して行われる。
【００８４】
また、メッセージ通信部２２０は、Ｐａｃｋｅｔ−ＯｕｔメッセージやＦｌｏｗ−Ｍｏｄメッセージなどの各種のメッセージを制御サーバ１００から受信する。メッセージ通信部２２０は、受信したＰａｃｋｅｔ−ＯｕｔメッセージやＦｌｏｗ−Ｍｏｄメッセージを転送処理部２３０に出力する。
【００８５】
転送処理部２３０は、フローテーブル２１１に基づいて、データの転送を行う。また、転送処理部２３０は、宛先ＩＰアドレスが未知であるデータ（フローテーブル２１１の何れのマッチ条件にも合致しないデータ）をネットワーク２１から受信すると、当該データを含むＰａｃｋｅｔ−Ｉｎメッセージを生成して制御サーバ１００に送信する。
【００８６】
転送処理部２３０は、Ｆｌｏｗ−Ｍｏｄメッセージを制御サーバ１００から受信すると、Ｆｌｏｗ−Ｍｏｄメッセージの指示内容に従って、記憶部２１０に記憶されたフローテーブル２１１を更新する。転送処理部２３０は、記憶部２１０に記憶されたフローテーブル２１１に基づいて、受信したデータを転送する。
【００８７】
また、転送処理部２３０は、Ｐａｃｋｅｔ−Ｏｕｔメッセージを制御サーバ１００から受信すると、フローテーブル２１１に登録されたフローエントリに従って、Ｐａｃｋｅｔ−Ｏｕｔメッセージに含まれるデータを転送する。転送処理部２３０は、Ｐａｃｋｅｔ−Ｏｕｔメッセージ内のアクションに従って、Ｐａｃｋｅｔ−Ｏｕｔメッセージに含まれるデータを処理することもある。
【００８８】
スイッチ３００，４００，５００，６００，７００もスイッチ２００と同様の機能を有する。
図８は、第２の実施の形態のポリシー情報の例を示す図である。ポリシー情報１１１は、同一エッジの配下（ネットワーク２０の外部）に存在する複数のＩＰアドレス空間を特定するための情報である。ポリシー情報１１１は、ＩＰアドレス空間の割り当て方法を定めた情報ということもできる。例えば、ポリシー情報１１１には、“／２４で定義されるＩＰアドレス空間は、同一エッジの特定のポートに属する”という情報が登録されている。これは、ＩＰアドレスの上位２４ビットが同一である各ＩＰアドレス空間（ＩＰアドレスの集合）は、同一エッジの特定のポートに属することを示している。
【００８９】
これは一例であり、ポリシー情報１１１には、ユーザにより任意のポリシーを登録することができる。例えば、ポリシー情報１１１として、“ＩＰアドレス：１９２．１６８．１００．１〜１９２．１６８．１００．１００は同一エッジの特定のポートに属する”、“ＩＰアドレス：１９２．１６８．１００．１０１〜１９２．１６８．１００．２００は同一エッジの特定のポートに属する”のようにＩＰアドレスの複数の範囲を明示的に設定してもよい。また、上記のように連続した値の範囲とする他、不連続な値（例えば、“１９２．１６８．１００．１０１”と“１９２．１６８．１００．１０３”など）を要素として含むＩＰアドレスの集合を設定することも考えられる。
【００９０】
図９は、第２の実施の形態のエンドホストテーブルの例を示す図である。エンドホストテーブル１１２は、エッジ情報、ＩＰアドレスおよびＭＡＣアドレスの項目を含む。エッジ情報の項目には、スイッチのポートを識別する情報が登録される。ＩＰアドレスの項目には、エンドホストのＩＰアドレスが登録される。ＭＡＣアドレスの項目には、エンドホストのＭＡＣアドレスが登録される。
【００９１】
例えば、エンドホストテーブル１１２には、エッジ情報が“Ａ−ａ１”、ＩＰアドレスが“１９２．１６８．３０．５５”、ＭＡＣアドレスが“ＭＡＣ１”という情報が登録されている。ここで、ＭＡＣアドレス“ＭＡＣ１”はクライアント３０が備える通信インタフェースのＭＡＣアドレスである（以下、単に“クライアント３０のＭＡＣアドレス”などという）。このエントリは、ＩＰアドレス“１９２．１６８．３０．５５”およびＭＡＣアドレス“ＭＡＣ１”を有するクライアント３０がポートａ１の先に存在することを示している。
【００９２】
図１０は、第２の実施の形態のアドレス−エッジ対応テーブルの例を示す図である。アドレス−エッジ対応テーブル１１３は、エッジ情報およびＩＰアドレス空間の項目を含む。エッジ情報の項目には、スイッチのポートを識別する情報が登録される。ＩＰアドレス空間の項目には、ＩＰアドレス空間を示す情報が登録される。
【００９３】
例えば、アドレス−エッジ対応テーブル１１３には、エッジ情報が“Ａ−ａ１”、ＩＰアドレス空間が“１９２．１６８．３０．０／２４”という情報が登録される。これは、ＩＰアドレス空間“１９２．１６８．３０．０／２４”に属するＩＰアドレスをもつエンドホストが、ポートａ１の先に存在することを示している。
【００９４】
ポリシー処理部１４０は、ポリシー情報１１１およびエンドホストテーブル１１２のエントリに基づいてアドレス−エッジ対応テーブル１１３を生成できる。すなわち、ＩＰアドレス空間割り当てポリシー（ポリシー情報１１１）を予め設定し、従来の方式（例えば、既知のラーニングスイッチと同様の方式）で得られる対応情報（エンドホストテーブル１１２）にポリシーを考慮した変換を行う。
【００９５】
具体的には、エンドホストテーブル１１２に登録されたＩＰアドレス“１９２．１６８．３０．５５”を、ポリシーで示される「上位２４ビットが同じであるＩＰアドレス空間」“１９２．１６８．３０．０／２４”に変換する。そして、エンドホストテーブル１１２に登録されたＩＰアドレス“１９２．１６８．３０．５５”のエッジ情報“Ａ−ａ１”に、ＩＰアドレス空間“１９２．１６８．３０．０／２４”を対応付けることで、アドレス−エッジ対応テーブル１１３の上記エントリを生成できる。
【００９６】
図１１は、第２の実施の形態のフローテーブルの例を示す図である。図１１では、クライアント３０により送信されたＡＲＰリクエストを、スイッチ２００からネットワーク２２，２３，２４に転送するためのフローテーブル２１１，３１１，４１１，５１１，６１１，７１１を例示している。ただし、ここで示すフローエントリは一例であり、エンドホスト間の通信状況によって変わり得る。
【００９７】
フローテーブル２１１は、前述のようにスイッチ２００により保持される。フローテーブル３１１は、スイッチ３００により保持される。フローテーブル４１１は、スイッチ４００により保持される。フローテーブル５１１は、スイッチ５００により保持される。フローテーブル６１１は、スイッチ６００により保持される。フローテーブル７１１は、スイッチ７００により保持される。
【００９８】
フローテーブル２１１，３１１，４１１，５１１，６１１，７１１は、マッチ条件およびアクションの項目を含む。マッチ条件の項目には、フローを特定するためのマッチ条件が登録される。アクションの項目には、そのフローに対する処理を示すアクションが登録される。
【００９９】
例えば、フローテーブル２１１には、マッチ条件が“宛先ＭＡＣアドレス：ＦＦＦＦＦＦＦＦＦＦＦＦ  かつ  送信元ＩＰアドレス：１９２．１６８．３０．５５”、アクションが“ポートａ２から出力”というフローエントリが登録されている。
【０１００】
このフローエントリは、転送対象のデータに含まれる宛先ＭＡＣアドレスが“ＦＦＦＦＦＦＦＦＦＦＦＦ”かつ送信元ＩＰアドレスが“１９２．１６８．３０．５５”である場合に、そのデータをポートａ２から出力させるためのフローエントリである。なお、宛先ＭＡＣアドレス“ＦＦＦＦＦＦＦＦＦＦＦＦ”は、データリンク層におけるブロードキャストアドレスである。当該フローエントリは、後述するように、ＡＲＰリクエストを想定したものである。
【０１０１】
フローテーブル３１１，４１１，５１１，６１１，７１１にも同様のマッチ条件が登録されている。ただし、アクションはスイッチ毎に異なっている。また、各スイッチのフローテーブルには、他の情報（例えば、マッチ条件の適合回数など）が記録されてもよい。
【０１０２】
転送制御部１５０は、Ｐａｃｋｅｔ−Ｉｎメッセージを新たに受けたとき、アドレス−エッジ対応テーブル１１３を参照して、Ｐａｃｋｅｔ−Ｉｎメッセージ内のフレームの宛先ＩＰアドレスを含むＩＰアドレス空間のエントリが、アドレス−エッジ対応テーブル１１３になければ、当該宛先ＩＰアドレスに対応するエッジ情報を取得するために、各エッジまでの図１１に示したエントリを生成し、各スイッチのフローテーブルに設定する。
【０１０３】
一方、転送制御部１５０は、Ｐａｃｋｅｔ−Ｉｎメッセージを新たに受けたとき、アドレス−エッジ対応テーブル１１３を参照して、Ｐａｃｋｅｔ−Ｉｎメッセージ内のフレームの宛先ＩＰアドレスを含むＩＰアドレス空間のエントリが、アドレス−エッジ対応テーブル１１３にあれば、得られたエッジまで到達させるエントリを各スイッチのフローテーブルに設定する。
【０１０４】
図１２は、第２の実施の形態のＡＲＰ用のフレームの例を示す図である。エンドホスト間で通信されるデータは、ＯＳＩ参照モデルのデータリンク層（あるいは、イーサネット（Ethernet、登録商標））におけるフレームと呼ばれる単位で送受信される。以下の説明では、転送対象のデータを指して、フレームということがある。フレーム７０は、ＡＲＰ用のフレームを例示している。
【０１０５】
フレーム７０は、ＭＡＣヘッダ７１およびＡＲＰパケット７２を含む。ＭＡＣヘッダ７１は、フレーム７０のヘッダ領域である。ＭＡＣヘッダ７１は、宛先ＭＡＣアドレス、送信元ＭＡＣアドレスおよびタイプのフィールドを含む。
【０１０６】
宛先ＭＡＣアドレスのフィールドには、宛先ＭＡＣアドレスが設定される。送信元ＭＡＣアドレスのフィールドには、送信元ＭＡＣアドレスが設定される。タイプのフィールドには、イーサネットタイプが設定される。
【０１０７】
ＡＲＰパケット７２は、ＡＲＰの送信元（問合せ元）および宛先（問合せ先）の情報を格納した領域である。ここで、パケットは、ＯＳＩ参照モデルのネットワーク層（あるいは、ＩＰ）における通信単位である。ＡＲＰパケット７２は、送信元ＭＡＣアドレス、送信元ＩＰアドレス、宛先ＭＡＣアドレスおよび宛先ＩＰアドレスの項目を含む。
【０１０８】
宛先ＭＡＣアドレスのフィールドには、宛先ＭＡＣアドレスが設定される。送信元ＩＰアドレスのフィールドには、送信元ＩＰアドレスが設定される。宛先ＭＡＣアドレスのフィールドには、宛先ＭＡＣアドレスが設定される。宛先ＩＰアドレスのフィールドには、宛先ＩＰアドレスが設定される。
【０１０９】
図１２では、ＡＲＰリクエスト７０ａおよびＡＲＰリプライ７０ｂも例示している。ＡＲＰリクエスト７０ａは、クライアント３０により送信されたＡＲＰリクエストである。例えば、ＡＲＰリクエスト７０ａのＭＡＣヘッダには、宛先ＭＡＣアドレス“ＦＦＦＦＦＦＦＦＦＦＦＦ”（データリンク層におけるブロードキャストアドレス）、送信元ＭＡＣアドレス“ＭＡＣ１”、タイプ“０ｘ０８０６”（ＡＲＰを示す）が設定されている。ＡＲＰリクエスト７０ａのＡＲＰパケットには、送信元ＭＡＣアドレス“ＭＡＣ１”、送信元ＩＰアドレス“１９２．１６８．３０．５５”、宛先ＭＡＣアドレス“００００００００００００”、宛先ＩＰアドレス“１９２．１６８．４０．２”が設定されている。すなわち、ＡＲＰリクエスト７０ａは、ＩＰアドレス“１９２．１６８．４０．２”（サーバ４０）に対応するＭＡＣアドレスを問い合わせるＡＲＰリクエストである。
【０１１０】
また、ＡＲＰリプライ７０ｂは、ＡＲＰリクエスト７０ａに対してサーバ４０により送信されたＡＲＰリプライである。例えば、ＡＲＰリプライ７０ｂにおいて、ＭＡＣヘッダには、宛先ＭＡＣアドレス“ＭＡＣ１”、送信元ＭＡＣアドレス“ＭＡＣ２”、タイプ“０ｘ０８０６”が設定されている。ここで、ＭＡＣアドレス“ＭＡＣ２”は、サーバ４０のＭＡＣアドレスである。また、ＡＲＰリプライ７０ｂにおいて、ＡＲＰパケットには、送信元ＭＡＣアドレス“ＭＡＣ２”、送信元ＩＰアドレス“１９２．１６８．４０．２”、宛先ＭＡＣアドレス“ＭＡＣ１”、宛先ＩＰアドレス“１９２．１６８．３０．５５”が設定されている。
【０１１１】
図１３は、第２の実施の形態のＰａｃｋｅｔ−Ｉｎメッセージの例を示す図である。Ｐａｃｋｅｔ−Ｉｎメッセージ８０は、各スイッチが受信したフレームを制御サーバ１００に送信するために用いられる。例えば、Ｐａｃｋｅｔ−Ｉｎメッセージ８０は、ｂｕｆｆｅｒ＿ｉｄ、ｔｏｔａｌ＿ｌｅｎ、ｒｅａｓｏｎ、ｉｎ＿ｐｏｒｔおよびｄａｔａのフィールドを含む。
【０１１２】
ｂｕｆｆｅｒ＿ｉｄフィールドには、受信したフレームをスイッチでバッファリングする場合に、フレームを格納したバッファを識別するバッファＩＤが設定される。フレームのバッファリングを行わない場合には、例えば、バッファＩＤを“−１”とする。以下の説明では、各スイッチで当該バッファリングを行わない場合を想定する。
【０１１３】
ｔｏｔａｌ＿ｌｅｎフィールドには、フレームのデータ長が設定される。ｒｅａｓｏｎフィールドには、Ｐａｃｋｅｔ−Ｉｎメッセージが送信された理由が設定されている。具体的には、“マッチするフローエントリが存在しない”、“そのフローのフレームを制御サーバ１００へ送信するようにフローエントリに設定されている”などである。
【０１１４】
ｉｎ＿ｐｏｒｔフィールドには、フレームを受信したポート（入力ポート）のポート番号が設定される。例えば、スイッチ２００がネットワーク２１からＡＲＰリクエスト７０ａを受信する場合を想定すると、ポートａ１，ａ２，ａ３のうちネットワーク２１側のポートはポートａ１である。したがって、スイッチ２００がＡＲＰリクエスト７０ａを制御サーバ１００に送信するなら、Ｐａｃｋｅｔ−Ｉｎメッセージのｉｎ＿ｐｏｒｔフィールドには、ポート番号“ａ１”が設定されることになる。
【０１１５】
ｄａｔａフィールドには、受信したフレームのイメージが設定される。例えば、スイッチ２００がＡＲＰリクエスト７０ａを制御サーバ１００に送信するなら、Ｐａｃｋｅｔ−Ｉｎメッセージのｄａｔａフィールドには、ＡＲＰリクエスト７０ａの全部または一部（制御サーバ１００での処理に用いられる部分）が設定されることになる。
【０１１６】
なお、Ｐａｃｋｅｔ−Ｉｎメッセージなどの各種のメッセージは、パケットに包含されて送られる。よって、制御サーバ１００は、例えばＩＰヘッダの送信元ＩＰアドレス（スイッチのＩＰアドレス）などにより送信元のスイッチを識別できる。
【０１１７】
次に、制御サーバ１００の処理手順を説明する。ここで、第２の実施の形態では、Ｌ２ネットワークを想定している。すなわち、エンドホストは、ネットワーク２０を跨いで他のエンドホストと通信するとき、当該他のエンドホストのＩＰアドレスも自身と同じネットワークアドレス（あるいは、サブネット）に属していると認識する。よって、エンドホストは、当該他のエンドホストのＭＡＣアドレスを解決するために、ＡＲＰリクエストを送信することになる。そこで、まず、制御サーバ１００がＰａｃｋｅｔ−ＩｎメッセージによりＡＲＰリクエストを取得した場合の処理手順を例示する。
【０１１８】
図１４は、第２の実施の形態のＡＲＰ要求時の処理例を示すフローチャートである。以下、図１４に示す処理をステップ番号に沿って説明する。なお、ステップＳ１１が最初に実行される前には、エンドホストテーブル１１２、アドレス−エッジ対応テーブル１１３および各スイッチのフローテーブルには何れの情報も登録されていないものとする。
【０１１９】
（Ｓ１１）メッセージ通信部１２０は、何れかのエッジからＰａｃｋｅｔ−Ｉｎメッセージを受信する。当該Ｐａｃｋｅｔ−ＩｎメッセージはＡＲＰリクエストを含む。アドレス学習部１３０および転送制御部１５０は、メッセージ通信部１２０からＰａｃｋｅｔ−Ｉｎメッセージ（ＡＲＰリクエスト）を取得する。
【０１２０】
（Ｓ１２）アドレス学習部１３０は、アドレス−エッジ対応テーブル１１３を参照して、取得したＡＲＰリクエストの送信元ＩＰアドレスを含むＩＰアドレス空間の情報があるか否かを判定する。ない場合、処理をステップＳ１３に進める。ある場合、処理をステップＳ１４に進める。
【０１２１】
（Ｓ１３）アドレス学習部１３０は、取得したＡＲＰリクエストの送信元ＩＰアドレスと送信元ＭＡＣアドレスとＰａｃｋｅｔ−Ｉｎメッセージから特定されるエッジ情報との対応関係の情報を生成し、エンドホストテーブル１１２に追加する。ポリシー処理部１４０は、ポリシー情報１１１とエンドホストテーブル１１２に追加された情報とに基づいて、アドレス−エッジ対応テーブル１１３に新たなエントリを追加する。例えば、ＡＲＰリクエスト７０ａを受信した場合、次のようなエントリを追加する。ポリシー情報１１１は、“／２４で定義されるＩＰアドレス空間は、同一エッジの特定のポートに属する”ことを示している。このとき、ＡＲＰリクエスト７０ａの送信元ＩＰアドレスは“１９２．１６８．３０．５５”である。よって、その上位２４ビットが共通するＩＰアドレス空間を“１９２．１６８．３０．０／２４”と表せる（ＩＰアドレスをＩＰアドレス空間に変換する）。また、前述のように、Ｐａｃｋｅｔ−Ｉｎメッセージから、ＡＲＰリクエスト７０ａを受信したエッジ情報を“Ａ−ａ１”（スイッチ２００のポートａ１に相当）と特定できる。よって、ポリシー処理部１４０は、エッジ情報“Ａ−ａ１”とＩＰアドレス空間“１９２．１６８．３０．０／２４”との対応関係を示す情報を生成し、アドレス−エッジ対応テーブル１１３に追加する。そして、処理をステップＳ１４に進める。
【０１２２】
（Ｓ１４）転送制御部１５０は、アドレス−エッジ対応テーブル１１３を参照して、取得したＡＲＰリクエストの宛先ＩＰアドレスを含むＩＰアドレス空間の情報があるか否かを判定する。ある場合、処理をステップＳ１５に進める。ない場合、処理をステップＳ１６に進める。
【０１２３】
（Ｓ１５）転送制御部１５０は、ステップＳ１４で検索されたＩＰアドレス空間に対応するエッジ情報を、アドレス−エッジ対応テーブル１１３から取得する。転送制御部１５０は、Ｐａｃｋｅｔ−Ｉｎの送信元エッジ（始点エッジ）から、エッジ情報に対応するエッジ（終点エッジ）に至るまでに経由するスイッチを特定する。前述のように、転送制御部１５０は、記憶部１１０に格納されたネットワークトポロジの情報から、当該スイッチを特定できる。転送制御部１５０は、始点エッジから終点エッジまでＡＲＰリクエストを到達させるためのフローエントリを、特定した各スイッチに設定する。転送制御部１５０は、各スイッチへのフローエントリの設定にＦｌｏｗ−Ｍｏｄメッセージを用いる（以下、同様）。このとき、転送制御部１５０は、終点エッジに対し、エッジ情報により特定されるポートからＡＲＰリクエストを出力するよう設定する。そして、処理をステップＳ１７に進める。
【０１２４】
（Ｓ１６）転送制御部１５０は、ＡＲＰリクエストをＰａｃｋｅｔ−Ｉｎの送信元エッジ以外の全てのエッジまで到達させるためのフローエントリを各スイッチに設定する。このとき、転送制御部１５０は、対象の各エッジに対し、ネットワーク２０の外側（ネットワーク２１，２２，２３，２４側）のネットワークに接続されたポートからＡＲＰリクエストを出力するよう設定する。そして、処理をステップＳ１７に進める。
【０１２５】
（Ｓ１７）転送制御部１５０は、取得したＡＲＰリクエストを含むＰａｃｋｅｔ−Ｏｕｔメッセージを、メッセージ通信部１２０を介して、Ｐａｃｋｅｔ−Ｉｎの送信元エッジに送信する。Ｐａｃｋｅｔ−Ｏｕｔメッセージを受信したエッジは、ステップＳ１５またはステップＳ１６で設定されたフローエントリに従って、Ｐａｃｋｅｔ−Ｏｕｔメッセージに含まれるＡＲＰリクエストを転送する。その他のスイッチも、設定されたフローエントリに従って、ＡＲＰリクエストを転送する。
【０１２６】
なお、制御サーバ１００は、ステップＳ１２，Ｓ１３を、ステップＳ１４〜Ｓ１７の後、またはステップＳ１４〜Ｓ１７と並行して実行してもよい。
図１５は、第２の実施の形態のＰａｃｋｅｔ−Ｉｎの例（その１）を示す図である。図１５では、クライアント５０からＡＲＰリクエスト７０ａが送信された場合を想定する。また、エンドホストテーブル１１２、アドレス−エッジ対応テーブル１１３および各スイッチのフローテーブルには何れの情報も登録されていないものとする。
【０１２７】
ＡＲＰリクエスト７０ａはネットワーク２１内でもブロードキャストされ、サーバ３０ａおよびポートａ１に到着する。サーバ３０ａは、ＡＲＰリクエスト７０ａを無視する。ＡＲＰリクエスト７０ａの宛先ＩＰアドレスは、サーバ３０ａのＩＰアドレスではないからである。
【０１２８】
スイッチ２００は、ＡＲＰリクエスト７０ａに合致するフローエントリを保持していないので、ＡＲＰリクエスト７０ａを含むＰａｃｋｅｔ−Ｉｎメッセージを制御サーバ１００に送信する。
【０１２９】
すると、制御サーバ１００は、ＩＰアドレス空間“１９２．１６８．３０．０／２４”がスイッチ２００のポートａ１の先に存在することを検出する。制御サーバ１００は、エッジ情報“Ａ−ａ１”とＩＰアドレス空間“１９２．１６８．３０．０／２４”との対応関係をアドレス−エッジ対応テーブル１１３に登録する。
【０１３０】
更に、制御サーバ１００は、アドレス−エッジ対応テーブル１１３を参照して、ＡＲＰリクエスト７０ａの宛先ＩＰアドレス“１９２．１６８．４０．２”を包含するＩＰアドレス空間の情報が未登録であることを検出する。このため、制御サーバ１００は、ＡＲＰリクエスト７０ａをネットワーク２２，２３，２４へ転送するためのフローエントリを各スイッチに設定する。例えば、ＡＲＰリクエスト７０ａを特定するためのマッチ条件を、“宛先ＭＡＣアドレス：ＦＦＦＦＦＦＦＦＦＦＦＦ  かつ  送信元ＩＰアドレス：１９２．１６８．３０．５５”とする。
【０１３１】
アクションは、スイッチ毎に異なる。スイッチ２００にはポートａ２から出力させる。スイッチ６００にはポートｅ２，ｅ３から出力させる。スイッチ５００にはポートｄ１から出力させる。スイッチ７００にはポートｆ１，ｆ２から出力させる。スイッチ３００にはポートｂ２から出力させる。スイッチ４００にはポートｃ１から出力させる。
【０１３２】
図１１では、これらのフローエントリを各スイッチのフローテーブルに設定した結果を例示している。その後、制御サーバ１００は、ＡＲＰリクエスト７０ａを含むＰａｃｋｅｔ−Ｏｕｔメッセージをスイッチ２００に送信する。
【０１３３】
なお、スイッチ２００側でＡＲＰリクエスト７０ａをバッファリングするなら、制御サーバ１００は、Ｐａｃｋｅｔ−ＯｕｔメッセージにＡＲＰリクエスト７０ａを含めなくてもよい。その場合、制御サーバ１００は、上記Ｐａｃｋｅｔ−ＩｎメッセージにおいてスイッチからバッファＩＤの指定を受け付けておく。そして、制御サーバ１００は、Ｐａｃｋｅｔ−Ｏｕｔメッセージで当該バッファＩＤに格納されたＡＲＰリクエスト７０ａの転送を指示すればよい。
【０１３４】
図１６は、第２の実施の形態のＡＲＰリクエストの転送例を示す図である。図１６では、図１１で例示した各スイッチのフローテーブルに基づいて、ＡＲＰリクエスト７０ａが転送される様子を例示している。スイッチ２００は、ＡＲＰリクエスト７０ａをポートａ１から出力する。スイッチ６００は、ＡＲＰリクエスト７０ａをポートｅ１で受信する。スイッチ６００は、ＡＲＰリクエスト７０ａを複製して、ポートｅ２，ｅ３から出力する。
【０１３５】
スイッチ５００は、ＡＲＰリクエスト７０ａをポートｄ２で受信する。スイッチ５００は、ＡＲＰリクエスト７０ａをポートｄ１から出力する。スイッチ７００は、ＡＲＰリクエスト７０ａをポートｆ３で受信する。スイッチ７００は、ＡＲＰリクエスト７０ａを複製して、ポートｆ１，ｆ２から出力する。
【０１３６】
スイッチ３００は、ＡＲＰリクエスト７０ａをポートｂ１で受信する。スイッチ３００は、ＡＲＰリクエスト７０ａをポートｂ２から出力する。スイッチ４００は、ＡＲＰリクエスト７０ａをポートｃ２で受信する。スイッチ４００は、ＡＲＰリクエスト７０ａをポートｃ１から出力する。
【０１３７】
このように、ＡＲＰリクエスト７０ａはネットワーク２２，２３，２４に到達する。ネットワーク２２，２３，２４は、ＡＲＰリクエスト７０ａをブロードキャストする。クライアント５０，６０およびサーバ４０ａは、ＡＲＰリクエスト７０ａを受信しても無視する。ＡＲＰリクエスト７０ａに含まれる宛先ＩＰアドレスは、クライアント５０，６０およびサーバ４０ａのＩＰアドレスではないからである。サーバ４０は、ＡＲＰリクエスト７０ａを受信すると、ＡＲＰリプライ７０ｂを生成して応答する。ＡＲＰリクエスト７０ａに含まれる宛先ＩＰアドレスは、サーバ４０のＩＰアドレスだからである。
【０１３８】
図１７は、第２の実施の形態のＡＲＰ応答時の処理例を示すフローチャートである。以下、図１７に示す処理をステップ番号に沿って説明する。
（Ｓ２１）メッセージ通信部１２０は、何れかのエッジからＰａｃｋｅｔ−Ｉｎメッセージを受信する。当該Ｐａｃｋｅｔ−ＩｎメッセージはＡＲＰリプライを含む。アドレス学習部１３０および転送制御部１５０は、メッセージ通信部１２０からＰａｃｋｅｔ−Ｉｎメッセージ（ＡＲＰリプライ）を取得する。
【０１３９】
（Ｓ２２）アドレス学習部１３０は、アドレス−エッジ対応テーブル１１３を参照して、取得したＡＲＰリプライの送信元ＩＰアドレスを含むＩＰアドレス空間の情報があるか否かを判定する。ない場合、処理をステップＳ２３に進める。ある場合、処理をステップＳ２４に進める。
【０１４０】
（Ｓ２３）アドレス学習部１３０は、取得したＡＲＰリプライの送信元ＩＰアドレスと送信元ＭＡＣアドレスとＰａｃｋｅｔ−Ｉｎメッセージから特定されるエッジ情報との対応関係の情報を生成し、エンドホストテーブル１１２に追加する。ポリシー処理部１４０は、ポリシー情報１１１とエンドホストテーブル１１２に追加された情報とに基づいて、アドレス−エッジ対応テーブル１１３に新たなエントリを追加する。例えば、ＡＲＰリプライ７０ｂを受信した場合、ステップＳ１３と同様にして、エッジ情報“Ｂ−ｂ２”とＩＰアドレス空間“１９２．１６８．４０．０／２４”との対応関係を示す情報を生成し、アドレス−エッジ対応テーブル１１３に追加する。そして、処理をステップＳ２４に進める。
【０１４１】
（Ｓ２４）転送制御部１５０は、アドレス−エッジ対応テーブル１１３を参照して、ＡＲＰリプライの宛先ＩＰアドレスが属するＩＰアドレス空間に対応するエッジ情報を取得する。ＡＲＰリプライは、ＡＲＰリクエストに応じて送信されるものだから、先に発生したＡＲＰリクエストにより、ＡＲＰリプライの宛先ＩＰアドレスが属するＩＰアドレス空間がアドレス−エッジ対応テーブル１１３に登録されているはずである。ただし、当該ＩＰアドレス空間が未登録のときは通信エラーとしてもよい。
【０１４２】
（Ｓ２５）転送制御部１５０は、Ｐａｃｋｅｔ−Ｉｎの送信元エッジ（始点エッジ）からステップＳ２４で取得されたエッジ情報に対応するエッジ（終点エッジ）に至るまでに経由するスイッチを特定する。特定方法は、ステップＳ１５で例示した通りである。転送制御部１５０は、始点エッジから終点エッジまでＡＲＰリプライを到達させるためのフローエントリを、特定した各スイッチに設定する。このとき、転送制御部１５０は、終点エッジに対し、エッジ情報により特定されるポートからＡＲＰリプライを出力するよう設定する。
【０１４３】
（Ｓ２６）転送制御部１５０は、取得したＡＲＰリプライを含むＰａｃｋｅｔ−Ｏｕｔメッセージを、メッセージ通信部１２０を介して、Ｐａｃｋｅｔ−Ｉｎの送信元エッジに送信する。そのＰａｃｋｅｔ−Ｏｕｔメッセージを受信したエッジは、ステップＳ２５で設定されたフローエントリに従って、Ｐａｃｋｅｔ−Ｏｕｔメッセージに含まれるＡＲＰリプライを転送する。その他のスイッチも、設定されたフローエントリに従って、ＡＲＰリプライを転送する。
【０１４４】
なお、制御サーバ１００は、ステップＳ２２，Ｓ２３を、ステップＳ２４〜Ｓ２６の後、またはステップＳ２４〜Ｓ２６と並行して実行してもよい。
図１８は、第２の実施の形態のＰａｃｋｅｔ−Ｉｎの例（その２）を示す図である。図１８では、図１６に引き続いて、サーバ４０からＡＲＰリプライ７０ｂが送信された場合を想定する。
【０１４５】
ＡＲＰリプライ７０ｂはユニキャストで送信される。ＡＲＰリプライ７０ｂは、ネットワーク２２を介してポートｂ２に到着する。スイッチ３００は、ＡＲＰリプライ７０ｂに合致するフローエントリを保持していないので、ＡＲＰリプライ７０ｂを含むＰａｃｋｅｔ−Ｉｎメッセージを制御サーバ１００に送信する。
【０１４６】
すると、制御サーバ１００は、ＩＰアドレス空間“１９２．１６８．４０．０／２４”がスイッチ３００のポートｂ２の先に存在することを検出する。制御サーバ１００は、エッジ情報“Ｂ−ｂ２”とＩＰアドレス空間“１９２．１６８．４０．０／２４”との対応関係をアドレス−エッジ対応テーブル１１３に登録する。
【０１４７】
更に、制御サーバ１００は、アドレス−エッジ対応テーブル１１３を参照して、ＡＲＰリプライ７０ｂの宛先ＩＰアドレス“１９２．１６８．３０．５５”を包含するＩＰアドレス空間“１９２．１６８．３０．０／２４”の情報が登録済であることを検出する。制御サーバ１００は、そのＩＰアドレス空間に対応するスイッチ２００のポートａ１（エッジ情報“Ａ−ａ１”に相当）からＡＲＰリプライ７０ｂを出力する（すなわち、ネットワーク２１へ転送する）と決定する。
【０１４８】
そして、制御サーバ１００は、ＡＲＰリプライ７０ｂをネットワーク２１へ転送するためのフローエントリをスイッチ２００，３００，６００，７００に設定する。例えば、ＡＲＰリプライ７０ｂを特定するためのマッチ条件を、“宛先ＩＰアドレス：１９２．１６８．３０．５５”とする。アクションは、スイッチ毎に異なる。スイッチ３００にはポートｂ１から出力させる。スイッチ７００にはポートｆ３から出力させる。スイッチ６００にはポートｅ１から出力させる。スイッチ２００にはポートａ１から出力させる。この時点での更新後のアドレス−エッジ対応テーブル１１３および各スイッチのフローテーブルは次のようになる。
【０１４９】
図１９は、第２の実施の形態のＡＲＰ応答時のテーブル例を示す図である。アドレス−エッジ対応テーブル１１３ａは、アドレス−エッジ対応テーブル１１３の更新後を例示している。アドレス−エッジ対応テーブル１１３ａには、エッジ情報“Ｂ−ｂ２”とＩＰアドレス空間“１９２．１６８．４０．０／２４”との対応関係を示す情報が追加されている。
【０１５０】
図２０は、第２の実施の形態のＡＲＰ応答時のテーブル例（続き）を示す図である。フローテーブル２１１ａ，３１１ａ，６１１ａ，７１１ａは、それぞれフローテーブル２１１，３１１，６１１，７１１の更新後を例示している。ただし、図２０では、追加されたフローエントリのみを図示している（他のフローエントリの図示を省略している）。
【０１５１】
追加されたフローエントリのマッチ条件は、何れも“宛先ＩＰアドレス：１９２．１６８．３０．５５”で共通している。一方、アクションはフローテーブル毎に異なる。フローテーブル２１１ａでは“ポートａ１から出力”である。フローテーブル３１１ａでは“ポートｂ１から出力”である。フローテーブル６１１ａでは“ポートｅ１から出力”である。フローテーブル７１１ａでは“ポートｆ３から出力”である。
【０１５２】
その後、制御サーバ１００は、ＡＲＰリプライ７０ｂを含むＰａｃｋｅｔ−Ｏｕｔメッセージをスイッチ３００に送信する。
図２１は、第２の実施の形態のＡＲＰリプライの転送例を示す図である。図２１では、図２０で例示した各スイッチのフローテーブルに基づいて、ＡＲＰリプライ７０ｂが転送される様子を例示している。ＡＲＰリプライ７０ｂは、スイッチ３００からスイッチ７００，６００，２００を順番に経由してネットワーク２１に転送される。その後、ＡＲＰリプライ７０ｂは、その宛先ＭＡＣアドレス“ＭＡＣ１”に基づいて、ネットワーク２１によりクライアント３０まで転送される。クライアント３０は、ＡＲＰリプライ７０ｂに含まれる送信元ＭＡＣアドレス“ＭＡＣ２”を、ＩＰアドレス“１９２．１６８．４０．２”に対応するＭＡＣアドレスと特定できる。
【０１５３】
なお、その後、例えば、宛先ＩＰアドレス“１９２．１６８．３０．９”（サーバ３０ａのＩＰアドレス）に対するＭＡＣアドレスを問い合わせるＡＲＰリクエストがサーバ４０から送信されることを考える。この場合、スイッチ３００は、そのＡＲＰリクエストを受信し、Ｐａｃｋｅｔ−Ｉｎメッセージを用いて当該ＡＲＰリクエストを制御サーバ１００に送信する。
【０１５４】
このとき、アドレス−エッジ対応テーブル１１３ａには、エッジ情報“Ａ−ａ１”とＩＰアドレス空間“１９２．１６８．３０．０／２４”との対応関係が登録されている。よって、制御サーバ１００は、そのＡＲＰリクエストをスイッチ２００のポートａ１から出力させると決定する。この場合、制御サーバ１００は、スイッチ３００からスイッチ２００まで転送するフローエントリをスイッチ３００，７００，６００に設定し、ポートａ１から出力させるフローエントリをスイッチ２００に設定する（図１４のステップＳ１５の処理）。一方、制御サーバ１００は、当該ＡＲＰリクエストをスイッチ４００，５００へは転送しない。このため、当該ＡＲＰリクエストは、ネットワーク２１にはブロードキャストされるが、ネットワーク２３，２４にはブロードキャストされない。次に、ＡＲＰ以外のフレームに対する制御サーバ１００の処理手順を説明する。
【０１５５】
図２２は、第２の実施の形態のＡＲＰ以外の処理例を示すフローチャートである。ここで想定するフレームは、ＡＲＰ以外のフレームである（図２３〜２６も同様）。以下、図２２に示す処理をステップ番号に沿って説明する。
【０１５６】
（Ｓ３１）メッセージ通信部１２０は、何れかのエッジからＰａｃｋｅｔ−Ｉｎメッセージを受信する。当該Ｐａｃｋｅｔ−Ｉｎメッセージは所定のフレーム（ただし、ＡＲＰリクエストやＡＲＰレスポンス以外）を含む。当該フレームとしては、ＩＰパケットにユーザデータ（例えば、サーバの所定のアプリケーションに対するリクエストや、そのアプリケーションによる処理結果を含むレスポンスなど）を含むものが考えられる。アドレス学習部１３０および転送制御部１５０は、メッセージ通信部１２０からＰａｃｋｅｔ−Ｉｎメッセージを取得する。
【０１５７】
（Ｓ３２）アドレス学習部１３０は、フレームに含まれるＩＰパケットのヘッダから送信元ＩＰアドレスを取得する。アドレス学習部１３０は、アドレス−エッジ対応テーブル１１３を参照して、その送信元ＩＰアドレスを含むＩＰアドレス空間の情報があるか否かを判定する。ない場合、処理をステップＳ３３に進める。ある場合、処理をステップＳ３４に進める。
【０１５８】
（Ｓ３３）アドレス学習部１３０は、取得したフレームの送信元ＩＰアドレスと送信元ＭＡＣアドレスとＰａｃｋｅｔ−Ｉｎメッセージから特定されるエッジ情報との対応関係の情報を生成し、エンドホストテーブル１１２に追加する。ポリシー処理部１４０は、ポリシー情報１１１とエンドホストテーブル１１２に追加された情報とに基づいて、アドレス−エッジ対応テーブル１１３に新たなエントリを追加する。例えば、クライアント６０が送信したフレームがスイッチ５００に到着し、そのフレームを含むＰａｃｋｅｔ−Ｉｎメッセージを受信した場合を想定する。この場合、ポリシー処理部１４０は、エッジ情報“Ｄ−ｄ１”とＩＰアドレス空間“１９２．１６８．６０．０／２４”との対応関係を示す情報を生成し、アドレス−エッジ対応テーブル１１３に追加する。そして、処理をステップＳ３４に進める。
【０１５９】
（Ｓ３４）転送制御部１５０は、フレームに含まれるＩＰパケットのヘッダから宛先ＩＰアドレスを取得する。転送制御部１５０は、アドレス−エッジ対応テーブル１１３を参照して、その宛先ＩＰアドレスを含むＩＰアドレス空間の情報があるか否かを判定する。ある場合、処理をステップＳ３５に進める。ない場合、処理をステップＳ３７に進める。
【０１６０】
（Ｓ３５）転送制御部１５０は、ステップＳ３４で検索されたＩＰアドレス空間に対応するエッジ情報を、アドレス−エッジ対応テーブル１１３から取得する。転送制御部１５０は、Ｐａｃｋｅｔ−Ｉｎの送信元エッジ（始点エッジ）から、エッジ情報に対応するエッジ（終点エッジ）に至るまでに経由するスイッチを特定する。特定方法は、ステップＳ１５で例示した通りである。転送制御部１５０は、始点エッジから終点エッジまでフレームを到達させるためのフローエントリを、特定した各スイッチに設定する。このとき、転送制御部１５０は、終点エッジに対し、エッジ情報により特定されるポートからフレームを出力するよう設定する。
【０１６１】
（Ｓ３６）転送制御部１５０は、取得したフレームを含むＰａｃｋｅｔ−Ｏｕｔメッセージを、メッセージ通信部１２０を介して、Ｐａｃｋｅｔ−Ｉｎの送信元エッジに送信する。そして、処理を終了する。なお、Ｐａｃｋｅｔ−Ｏｕｔメッセージを受信したエッジは、ステップＳ３５で設定されたフローエントリに従って、Ｐａｃｋｅｔ−Ｏｕｔメッセージに含まれるフレームを転送する。その他のスイッチも、設定されたフローエントリに従って、当該フレームを転送する。そして、処理を終了する。
【０１６２】
（Ｓ３７）転送制御部１５０は、通信失敗と判断する。該当のフレームを何れのエッジまで転送すればよいかが不明だからである。例えば、転送制御部１５０は、記憶部１１０に格納された所定のログに、通信失敗の詳細情報を記録してもよい。そして、処理を終了する。
【０１６３】
なお、制御サーバ１００は、ステップＳ３２，Ｓ３３を、ステップＳ３４〜Ｓ３７の後、またはステップＳ３４〜Ｓ３７と並行して実行してもよい。
図２３は、第２の実施の形態のＰａｃｋｅｔ−Ｉｎの例（その３）を示す図である。図２３では、図２１に引き続いて、クライアント６０からＡＲＰ以外の所定のフレームが送信された場合を想定する。このフレームの送信元ＭＡＣアドレスはクライアント６０のＭＡＣアドレスである。送信元ＩＰアドレスは“１９２．１６８．６０．２”である。宛先ＭＡＣアドレスはサーバ４０ａのＭＡＣアドレスである。宛先ＩＰアドレスは“１９２．１６８．４０．１０”である。
【０１６４】
フレームは、ネットワーク２４を介してポートｄ１に到着する。スイッチ５００は、このフレームに合致するフローエントリを保持していないので、当該フレームを含むＰａｃｋｅｔ−Ｉｎメッセージを制御サーバ１００に送信する。
【０１６５】
すると、制御サーバ１００は、ＩＰアドレス空間“１９２．１６８．６０．０／２４”がスイッチ５００のポートｄ１の先に存在することを検出する。制御サーバ１００は、エッジ情報“Ｄ−ｄ１”とＩＰアドレス空間“１９２．１６８．６０．０／２４”との対応関係を、アドレス−エッジ対応テーブル１１３ａに登録する。
【０１６６】
更に、制御サーバ１００は、アドレス−エッジ対応テーブル１１３ａを参照して、フレームの宛先ＩＰアドレス“１９２．１６８．４０．１０”を包含するＩＰアドレス空間“１９２．１６８．４０．０／２４”の情報が登録済であることを検出する。制御サーバ１００は、そのＩＰアドレス空間に対応するスイッチ３００のポートｂ２（エッジ情報“Ｂ−ｂ２”に相当）からフレームを出力する（すなわち、ネットワーク２２へ転送する）と決定する。
【０１６７】
そして、制御サーバ１００は、フレームをネットワーク２２へ転送するためのフローエントリをスイッチ３００，５００，６００，７００に設定する。例えば、当該フレームを特定するためのマッチ条件を、“宛先ＩＰアドレス：１９２．１６８．４０．１０”とする。アクションは、スイッチ毎に異なる。スイッチ５００にはポートｄ２から出力させる。スイッチ６００にはポートｅ３から出力させる。スイッチ７００にはポートｆ２から出力させる。スイッチ３００にはポートｂ２から出力させる。この時点での更新後のアドレス−エッジ対応テーブル１１３ａおよび各スイッチのフローテーブルは次のようになる。
【０１６８】
図２４は、第２の実施の形態の更新後のテーブル例を示す図である。アドレス−エッジ対応テーブル１１３ｂは、アドレス−エッジ対応テーブル１１３ａの更新後を例示している。アドレス−エッジ対応テーブル１１３ｂには、エッジ情報“Ｄ−ｄ１”とＩＰアドレス空間“１９２．１６８．６０．０／２４”との対応関係を示す情報が追加されている。
【０１６９】
図２５は、第２の実施の形態の更新後のテーブル例（続き）を示す図である。フローテーブル３１１ｂ，５１１ｂ，６１１ｂ，７１１ｂは、それぞれフローテーブル３１１ａ，５１１，６１１ａ，７１１ａの更新後を例示している。ただし、図２５では、追加されたフローエントリのみを図示している（他のフローエントリの図示を省略している）。
【０１７０】
追加されたフローエントリのマッチ条件は、何れも“宛先ＩＰアドレス：１９２．１６８．４０．１０”で共通している。一方、アクションはフローテーブル毎に異なる。フローテーブル３１１ｂでは“ポートｂ２から出力”である。フローテーブル５１１ｂでは“ポートｄ２から出力”である。フローテーブル６１１ｂでは“ポートｅ３から出力”である。フローテーブル７１１ｂでは“ポートｆ２から出力”である。
【０１７１】
その後、制御サーバ１００は、転送対象のフレームを含むＰａｃｋｅｔ−Ｏｕｔメッセージをスイッチ５００に送信する。
図２６は、第２の実施の形態のフレームの転送例を示す図である。図２６では、図２５で例示した各スイッチのフローテーブルに基づいて、フレームが転送される様子を例示している。当該フレームは、スイッチ５００からスイッチ６００，７００，３００を順番に経由してネットワーク２２に転送される。その後、当該フレームは、その宛先ＭＡＣアドレスに基づいて、ネットワーク２２によりサーバ４０ａまで転送される。このようにして、クライアント６０によって送信されたデータがサーバ４０ａまで転送される。
【０１７２】
以上のようにして、制御サーバ１００は、アドレスの学習を効率化できる。具体的には次の通りである。例えば、制御サーバ１００は、エンドホストのＩＰアドレス毎に、各スイッチのポートとの対応関係を学習することも考えられる。しかし、この場合、ＩＰアドレス毎に学習を行っていると、エンドホストの数が増大するほど、制御サーバ１００によるアドレスの学習量が増大する。すなわち、制御サーバ１００による学習の頻度や学習する情報量が増大してしまう。
【０１７３】
制御サーバ１００による学習の頻度が高まると、学習のための制御サーバ１００の負荷が増大し得る。また、学習した情報量の巨大化により、ＲＡＭ１０２などの記憶領域を圧迫し得る。また、ＩＰアドレスやＭＡＣアドレス毎に学習を行って、エンドホストテーブル１１２のエントリ数が増大すると、その中から何れかのエントリを検索するための処理コストが増大し得る。
【０１７４】
更に、例えば、未知のＩＰアドレスが発生するたびに（例えば、エンドホストから未知のＩＰアドレスに対するＡＲＰリクエストを受け付けるたびに）、ネットワーク２０の外部の複数のネットワークにＡＲＰリクエストを転送することも考えられる。ＡＲＰリプライにより、ＩＰアドレスとスイッチのポートとの対応を学習し得るからである。
【０１７５】
しかし、この場合、各スイッチに設定されるルールが巨大化するおそれがある。複数のネットワーク（ネットワーク２１，２２，２３，２４など）までＡＲＰリクエストを転送するためのフローエントリが、問合せ対象のＩＰアドレス毎に、スイッチ２００，３００，４００，５００，６００，７００に設定されることになるからである。各スイッチのフローテーブルが巨大化すると、各スイッチのＲＡＭなどの記憶領域を圧迫し得る。また、各スイッチにおいて、転送対象のフレームをフローエントリと照合するための処理コストが増大し得る。
【０１７６】
そこで、制御サーバ１００は、ポリシー情報１１１で特定されるＩＰアドレス空間を単位として、各ＩＰアドレス空間に属するＩＰアドレスをもつエンドホストが、どのスイッチの、どのポートの先に存在するかを学習する。そして、制御サーバ１００は、エッジ情報とＩＰアドレス空間との対応関係をアドレス−エッジ対応テーブル１１３に登録する。
【０１７７】
その後、何れかのＩＰアドレス空間に属するＩＰアドレスを宛先としたフレームを受信した場合に、アドレス−エッジ対応テーブル１１３に基づいて、当該フレームを出力するエッジおよびポートを決定する。すなわち、制御サーバ１００は、あるＩＰアドレスとエッジ情報との対応関係を検出できれば、そのＩＰアドレスが属するＩＰアドレス空間と当該エッジ情報との対応関係を学習する。したがって、当該ＩＰアドレス空間に属する他のＩＰアドレスに関するエッジ情報を学習しなくてよい。よって、制御サーバ１００によるアドレスの学習量を低減できる。学習量の低減は、学習のための負荷低減、記憶領域の節約、学習した情報内を検索する処理コストの低減に寄与する。
【０１７８】
また、ＡＲＰリクエストを転送するときも、制御サーバ１００は、その宛先ＩＰアドレスの属するＩＰアドレス空間がアドレス−エッジ対応テーブル１１３に登録されていれば、そのＩＰアドレス空間に対応するエッジ情報を取得できる。この場合、当該エッジ情報により特定されるエッジまでＡＲＰリクエストを転送させればよく、他のエッジまでＡＲＰリクエストを転送させなくてよい。このため、ＡＲＰリクエストを転送させるための余計なフローエントリを、ＡＲＰ転送に用いないスイッチに設定せずに済む。よって、各スイッチに設定されるフローエントリの数を低減できる。また、各スイッチに余計な転送処理を行わせずに済むので、スイッチの負荷を低減できる。更に、ユーザ側のネットワーク２１，２２，２３，２４も余計なブロードキャストを行わずに済むので、ネットワーク２１，２２，２３，２４の負荷も低減できる。
【０１７９】
更に、ユーザは、学習させたいＩＰアドレス空間の情報をポリシー情報１１１として記憶部１１０に予め登録しておけばよい。例えば、ネットワーク２１，２２，２３，２４では、近接するアドレスをもつ複数のエンドホストが１つのネットワークに接続されるという運用上のポリシーが存在している。すると、ユーザはそのポリシーを把握してさえいれば、アドレスの集合を登録することができる。第２の実施の形態の例では、ユーザは“／２４で定義されるＩＰアドレス空間は、同一エッジの特定のポートに属する”ことを把握していればよい。したがって、利用され得る全ての宛先ＩＰアドレスについての転送ルールを制御サーバ１００に設定することを、ユーザに強いずに済む。よって、ユーザによる作業の省力化を図れる。
【０１８０】
以上のように、制御サーバ１００では、ＩＰアドレス空間割り当てポリシーを予め設定し、従来の方式で得られる学習情報（エンドホストテーブル１１２）にポリシーを考慮した変換を実施したアドレス−エッジ対応テーブル１１３を参照して、各スイッチに対するルール設定を行うことで、アドレスの学習を効率化できる。
【０１８１】
なお、ポリシー処理部１４０は、エンドホストテーブル１１２を参照して、アドレス−エッジ対応テーブル１１３のエントリを生成するものとしたが、Ｐａｃｋｅｔ−Ｉｎメッセージから当該エントリを直接生成してもよい。その場合、ポリシー処理部１４０は、Ｐａｃｋｅｔ−Ｉｎメッセージからエッジ情報を取得できるし、Ｐａｃｋｅｔ−Ｉｎメッセージに含まれるフレームのＩＰヘッダから送信元ＩＰアドレスを取得できる。したがって、ポリシー処理部１４０は、ポリシー情報１１１に基づいて、エッジ情報とその送信元ＩＰアドレスが属するＩＰアドレス空間との対応関係をアドレス−エッジ対応テーブル１１３に登録し得る。
【０１８２】
また、上記の説明では、各スイッチのフローテーブルに設定するマッチ条件を宛先ＩＰアドレス単位に設定するものとしたが（例えば、図２０，２５）、以下のようにＩＰアドレス空間単位に設定してもよい。
【０１８３】
図２７は、第２の実施の形態のフローテーブルの他の例を示す図である。制御サーバ１００は、フローテーブル３１１ｂ，５１１ｂ，６１１ｂ，７１１ｂで示したフローエントリの代わりに、フローテーブル３１１ｃ，５１１ｃ，６１１ｃ，７１１ｃで示すフローエントリをスイッチ３００，５００，６００，７００に設定してもよい。具体的には、マッチ条件を、“宛先ＩＰアドレス：１９２．１６８．４０．１０”とする代わりに、“宛先ＩＰアドレス：１９２．１６８．４０．０／２４”のようにＩＰアドレス空間で設定してもよい。
【０１８４】
この場合、スイッチ５００，６００，７００は、フレームの宛先ＩＰアドレスがＩＰアドレス空間“１９２．１６８．４０．０／２４”に属するか否かを判定し、属する場合に、そのフレームをスイッチ３００へ向けて転送する。同様に、スイッチ３００は、フレームの宛先ＩＰアドレスがＩＰアドレス空間“１９２．１６８．４０．０／２４”に属するか否かを判定し、属する場合に、そのフレームをポートｂ２から出力する。スイッチ３００，５００，６００，７００は、例えば、宛先ＩＰアドレスが当該ＩＰアドレス空間に属しておらず、他に合致するフローエントリもなければ、制御サーバ１００に処理方法を問合せる。
【０１８５】
すると、ＩＰアドレス空間“１９２．１６８．４０．０／２４”に属する他のＩＰアドレスを宛先とするフレームに対しても、当該フローエントリを利用できる。したがって、各スイッチに登録されるフローエントリの数を一層低減できる。また、宛先ＩＰアドレス単位にフローエントリを設定する場合に比べて、制御サーバ１００と各スイッチとのＰａｃｋｅｔ−Ｉｎ／ＯｕｔメッセージやＦｌｏｗ−Ｍｏｄメッセージなどのメッセージの送受信量も低減できる。よって、制御サーバ１００や各スイッチの負荷を低減できる。また、ネットワーク１０，２０の負荷も低減できる。
【０１８６】
［第３の実施の形態］
以下、第３の実施の形態を説明する。前述の第２の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０１８７】
第２の実施の形態では、学習済のＩＰアドレス空間に属するＩＰアドレスを宛先とするＡＲＰリクエストを転送する際に、Ｐａｃｋｅｔ−Ｉｎの送信元エッジに、Ｐａｃｋｅｔ−Ｏｕｔメッセージを送信するものとした（図１４のステップＳ１５，Ｓ１７）。
【０１８８】
一方、ネットワーク２０内におけるＡＲＰリクエストの転送には他の方法も考えられる。例えば、アドレス−エッジ対応テーブル１１３には、ＩＰアドレス空間に対応するエッジ情報が登録されている。そこで、制御サーバ１００は、そのエッジ情報で特定されるエッジに、当該ＡＲＰリクエストを含むＰａｃｋｅｔ−Ｏｕｔメッセージを送信してもよい。第３の実施の形態では、その機能を提供する。
【０１８９】
ここで、第３の実施の形態の情報処理システムは、図２，３で説明した第２の実施の形態の情報処理システムと同様である。また、第３の実施の形態の制御サーバやスイッチのハードウェアおよび機能例も、図４〜７で説明した第２の実施の形態の制御サーバ１００やスイッチ２００のハードウェアおよび機能例と同様である。そこで、第３の実施の形態では、第２の実施の形態と同一の名称・符号を用いる。第３の実施の形態では、ＡＲＰリクエストに対し、図１４，１７で例示した第２の実施の形態の手順に代えて、以下の手順を実行する点が異なる。
【０１９０】
図２８は、第３の実施の形態のＡＰＲ要求時の処理例を示すフローチャートである。以下、図２８に示す処理をステップ番号に沿って説明する。ここで、図２８の手順では、ステップＳ１５に代えて、ステップＳ１５ａを実行する点が図１４と異なる（その他のステップは図１４と同様である）。そこで、以下の説明では、ステップＳ１５ａを説明し、他のステップの説明を省略する。ステップＳ１５ａは、ステップＳ１４において、アドレス−エッジ対応テーブルに、宛先ＩＰアドレスを含むＩＰアドレス空間の情報があると判定された場合に実行される。
【０１９１】
（Ｓ１５ａ）転送制御部１５０は、ステップＳ１４で検索されたＩＰアドレス空間に対応するエッジ情報を、アドレス−エッジ対応テーブルから取得する。転送制御部１５０は、エッジ情報で特定されるエッジに、受信したＡＲＰリクエストを含むＰａｃｋｅｔ−Ｏｕｔメッセージを送信する。このとき、転送制御部１５０は、エッジ情報で特定されるポートから当該ＡＲＰリクエストを出力するフローエントリを当該エッジに事前に設定しておく。そして、処理を終了する。
【０１９２】
図２９は、第３の実施の形態のＡＲＰリクエストの転送例を示す図である。図２９では、制御サーバ１００が、図１９で例示したアドレス−エッジ対応テーブル１１３ａを保持しており、かつ、宛先ＩＰアドレスを“１９２．１６８．３０．９”とするＡＲＰリクエストがサーバ４０から送信された場合を想定する。各スイッチのフローテーブルには、当該ＡＲＰリクエストに合致するフローエントリは登録されていないものとする。
【０１９３】
サーバ４０から送信されたＡＲＰリクエストは、ネットワーク２２内でブロードキャストされ、サーバ４０ａおよびポートｂ２に到着する。サーバ４０ａは、そのＡＲＰリクエストを無視する。宛先ＩＰアドレス“１９２．１６８．３０．９”はサーバ４０ａのＩＰアドレスではないからである。
【０１９４】
スイッチ３００は、そのＡＲＰリクエストに合致するフローエントリを保持していないので、当該ＡＲＰリクエストを含むＰａｃｋｅｔ−Ｉｎメッセージを制御サーバ１００に送信する。
【０１９５】
制御サーバ１００は、そのＰａｃｋｅｔ−Ｉｎメッセージを受信する。アドレス−エッジ対応テーブル１１３ａにはエッジ情報“Ｂ−ｂ２”とＩＰアドレス空間“１９２．１６８．４０．０／２４”とが登録済である（学習済）。したがって、制御サーバ１００は、当該ＩＰアドレス空間の学習を行わない。
【０１９６】
制御サーバ１００は、アドレス−エッジ対応テーブル１１３ａを参照して、ＡＲＰリクエストの宛先ＩＰアドレス“１９２．１６８．３０．９”を包含するＩＰアドレス空間“１９２．１６８．３０．０／２４”の情報が登録済であることを検出する。制御サーバ１００は、そのＩＰアドレス空間に対応するスイッチ２００のポートａ１（エッジ情報“Ａ−ａ１”に相当）からＡＲＰリクエストを出力する（すなわち、ネットワーク２１へ転送する）と決定する。
【０１９７】
そして、制御サーバ１００は、当該ＡＲＰリクエストをポートａ１から出力させるフローエントリをスイッチ２００に設定する。制御サーバ１００は、当該ＡＲＰリクエストを含むＰａｃｋｅｔ−Ｏｕｔメッセージをスイッチ２００に送信する。
【０１９８】
スイッチ２００は、Ｐａｃｋｅｔ−Ｏｕｔメッセージを制御サーバ１００から受信すると、Ｐａｃｋｅｔ−Ｏｕｔメッセージに含まれるＡＲＰリクエストを抽出し、フローエントリに従ってポートａ１から出力する。ＡＲＰリクエストは、ネットワーク２１に到達すると、ネットワーク２１においてブロードキャストされる。クライアント３０は、そのＡＲＰリクエストを受信しても無視する。当該ＡＲＰリクエストに含まれる宛先ＩＰアドレスは、クライアント３０のＩＰアドレスではないからである。サーバ３０ａは、ＡＲＰリクエストを受信すると、ＡＲＰリプライを生成して応答する。当該ＡＲＰリクエストに含まれる宛先ＩＰアドレスは、サーバ３０ａのＩＰアドレスだからである。
【０１９９】
図３０は、第３の実施の形態のＡＲＰ応答時の処理例を示すフローチャートである。以下、図３０に示す処理をステップ番号に沿って説明する。ここで、図３０の手順では、ステップＳ２５，Ｓ２６に代えて、ステップＳ２５ａを実行する点が図１７と異なる（その他のステップは図１７と同様である）。そこで、以下の説明では、ステップＳ２５ａを説明し、他のステップの説明を省略する。ステップＳ２５ａは、ステップＳ２４の次に実行される。
【０２００】
（Ｓ２５ａ）ステップＳ２４で取得されたエッジ情報で特定されるエッジに、受信したＡＲＰリプライを含むＰａｃｋｅｔ−Ｏｕｔメッセージを送信する。このとき、転送制御部１５０は、エッジ情報で特定されるポートから当該ＡＲＰリプライを出力するフローエントリを当該エッジに事前に設定しておく。そして、処理を終了する。
【０２０１】
図３１は、第３の実施の形態のＡＲＰリプライの転送例を示す図である。図３１では、図２９に引き続いて、サーバ３０ａからＡＲＰリプライが送信された場合を想定する。ＡＲＰリプライは、ネットワーク２１を介してポートａ１に到着する。スイッチ２００は、当該ＡＲＰリプライに合致するフローエントリを保持していないので、当該ＡＲＰリプライを含むＰａｃｋｅｔ−Ｉｎメッセージを制御サーバ１００に送信する。
【０２０２】
制御サーバ１００は、そのＰａｃｋｅｔ−Ｉｎメッセージを受信する。アドレス−エッジ対応テーブル１１３ａにはエッジ情報“Ａ−ａ１”とＩＰアドレス空間“１９２．１６９．３０．０／２４”が登録済である（学習済）。したがって、制御サーバ１００は、当該ＩＰアドレス空間の学習を行わない。
【０２０３】
制御サーバ１００は、アドレス−エッジ対応テーブル１１３ａを参照して、ＡＲＰリプライの宛先ＩＰアドレス“１９２．１６８．４０．２”を包含するＩＰアドレス空間“１９２．１６８．４０．０／２４”の情報が登録済であることを検出する。制御サーバ１００は、そのＩＰアドレス空間に対応するスイッチ３００のポートｂ２（エッジ情報“Ｂ−ｂ２”に相当）からＡＲＰリプライを出力する（すなわち、ネットワーク２２へ転送する）と決定する。
【０２０４】
そして、制御サーバ１００は、当該ＡＲＰリクエストをポートｂ２から出力させるフローエントリをスイッチ３００に設定する。制御サーバ１００は、当該ＡＲＰリプライを含むＰａｃｋｅｔ−Ｏｕｔメッセージをスイッチ３００に送信する。
【０２０５】
スイッチ３００は、Ｐａｃｋｅｔ−Ｏｕｔメッセージを制御サーバ１００から受信すると、Ｐａｃｋｅｔ−Ｏｕｔメッセージに含まれるＡＲＰリプライを抽出し、フローエントリに従ってポートｂ２から出力する。ＡＲＰリプライは、ネットワーク２２を介してサーバ４０まで転送される。サーバ４０は、当該ＡＲＰリプライに含まれる送信元ＭＡＣアドレスを、ＩＰアドレス“１９２．１６８．３０．９”に対応するＭＡＣアドレスと特定できる。なお、図２９および図３１の直後のスイッチ２００，３００のフローテーブルは、次のようになる。
【０２０６】
図３２は、第３の実施の形態のフローテーブルの例を示す図である。フローテーブル２１１ｄは、図２９のＡＲＰリクエスト転送時のスイッチ２００のフローテーブルである。ただし、当該ＡＲＰリクエストの転送に用いられるフローエントリのみを図示している（他のフローエントリの図示を省略している）。例えば、フローテーブル２１１ｄには、マッチ条件“宛先ＩＰアドレス：１９２．１６８．３０．９”およびアクション“ポートａ１から出力”が設定されている。
【０２０７】
フローテーブル３１１ｄは、図３１のＡＲＰリプライ転送時のスイッチ３００のフローテーブルである。ただし、当該ＡＲＰリプライの転送に用いられるフローエントリのみを図示している（他のフローエントリの図示を省略している）。例えば、フローテーブル３１１ｄには、マッチ条件“宛先ＩＰアドレス：１９２．１６８．４０．２”およびアクション“ポートｂ２から出力”が設定されている。
【０２０８】
このように、第３の実施の形態では、制御サーバ１００は、アドレス−エッジ対応テーブルで特定されるエッジに、ＡＲＰリクエストおよびＡＲＰリプライを直接送信する。このため、スイッチ６００，７００に対してＡＲＰリクエストやＡＲＰリプライを転送するためのフローエントリを設定しなくてもよい。また、スイッチ６００，７００はＡＲＰ転送を行わずに済むので、スイッチ６００，７００の負荷を低減できる。
【０２０９】
なお、制御サーバ１００は、ＡＲＰリクエストまたはＡＲＰリプライに対するアクションをＰａｃｋｅｔ−Ｏｕｔメッセージに含めることもできる。例えば、図２８のステップＳ１５ａおよび図３０のステップＳ２５ａにおいて、転送制御部１５０は、Ｐａｃｋｅｔ−Ｏｕｔメッセージに出力ポートを指定したアクションを含めてもよい。その場合、転送制御部１５０は、Ｆｌｏｗ−Ｍｏｄメッセージを用いてフローエントリをスイッチ２００，３００に別途設定しなくてもよい。
【０２１０】
また、上記の説明では、各スイッチは、ＡＲＰリクエスト／リプライの転送用のフローエントリを保持していない場合に、Ｐａｃｋｅｔ−Ｉｎメッセージを制御サーバ１００に送るものとした。一方、制御サーバ１００は、ＭＡＣヘッダのイーサネットタイプが“０ｘ０８０６（ＡＲＰ）”であるフレームを制御サーバ１００に送信するフローエントリを各エッジに予め設定しておいてもよい。
【０２１１】
［第４の実施の形態］
以下、第４の実施の形態を説明する。前述の第２，第３の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０２１２】
ネットワーク２０内におけるＡＲＰリクエストの転送には更に他の方法も考えられる。具体的には、問合せ元のエンドホストから受け付けたＡＲＰリクエストに対し、制御サーバ１００により任意のＭＡＣアドレスを応答してもよい。ネットワーク２０内で当該ＭＡＣアドレスに応じたルーティングを行えるからである。そこで、第４の実施の形態ではその機能を提供する。
【０２１３】
ここで、第４の実施の形態の情報処理システムは、図２，３で説明した第２の実施の形態の情報処理システムと同様である。また、第４の実施の形態の制御サーバやスイッチのハードウェアおよび機能例も、図４〜７で説明した第２の実施の形態の制御サーバ１００やスイッチ２００のハードウェアおよび機能例と同様である。そこで、第４の実施の形態では、第２の実施の形態と同一の名称・符号を用いる。第４の実施の形態では、ＡＲＰリクエストに対し、図１４，１７で例示した第２の実施の形態の手順に代えて、以下の手順を実行する点が異なる。
【０２１４】
図３３は、第４の実施の形態のＡＲＰ要求時の処理例を示すフローチャートである。以下、図３３に示す処理をステップ番号に沿って説明する。ここで、図３３の手順では、ステップＳ１５に代えて、ステップＳ１５ｂ，Ｓ１５ｃを実行する点が図１４と異なる（その他のステップは図１４と同様である）。そこで、以下の説明では、ステップＳ１５ｂ，１５ｃを説明し、他のステップの説明を省略する。ステップＳ１５ｂは、ステップＳ１４において、アドレス−エッジ対応テーブルに、ＡＲＰリクエストの宛先ＩＰアドレスを含むＩＰアドレス空間の情報があると判定された場合に実行される。
【０２１５】
（Ｓ１５ｂ）転送制御部１５０は、所定のＭＡＣアドレスを用いて、ＡＲＰリプライを生成する。転送制御部１５０は、生成したＡＲＰリプライを含むＰａｃｋｅｔ−ＯｕｔメッセージをＰａｃｋｅｔ−Ｉｎの送信元エッジへ送信する。このとき、転送制御部１５０は、ＡＲＰリクエストを受信したポートから当該ＡＲＰリプライを出力するフローエントリを、Ｐａｃｋｅｔ−Ｉｎの送信元エッジに事前に設定しておく。なお、ＡＲＰリプライで何れのＭＡＣアドレスを応答するかは、ユーザにより任意に決定できる。例えば、Ｐａｃｋｅｔ−Ｉｎの送信元エッジのＭＡＣアドレスでもよいし、その他のＭＡＣアドレスでもよい。
【０２１６】
（Ｓ１５ｃ）転送制御部１５０は、ステップＳ１４で検索されたＩＰアドレス空間に対応するエッジ情報を、アドレス−エッジ対応テーブルから取得する。転送制御部１５０は、エッジ情報で特定されるエッジに、受信したＡＲＰリクエストを含むＰａｃｋｅｔ−Ｏｕｔメッセージを送信する。このとき、転送制御部１５０は、エッジ情報で特定されるポートから当該ＡＲＰリクエストを出力するフローエントリを当該エッジに事前に設定しておく。また、転送制御部１５０は、ＡＲＰリクエストに対するＡＲＰリプライが当該エッジにより受信された場合にそのＡＲＰリプライを制御サーバ１００に送信するフローエントリ（ＡＲＰリプライをエッジから取得するためのフローエントリ）を当該エッジに設定する。そして、処理を終了する。
【０２１７】
図３４は、第４の実施の形態のＡＲＰリクエストの転送例を示す図である。図３４では、制御サーバ１００が、図１９で例示したアドレス−エッジ対応テーブル１１３ａを保持している状態で、宛先ＩＰアドレスを“１９２．１６８．３０．９”とするＡＲＰリクエストがサーバ４０から送信された場合を想定する。各スイッチのフローテーブルには、当該ＡＲＰリクエストに合致するフローエントリは登録されていないものとする。
【０２１８】
サーバ４０から送信されたＡＲＰリクエストは、ネットワーク２２内でブロードキャストされ、サーバ４０ａおよびポートｂ２に到着する。ただし、図３４では、サーバ４０ａに到着するＡＲＰリクエストを示す矢印の図示を省略している。サーバ４０ａは、そのＡＲＰリクエストを無視する。宛先ＩＰアドレス“１９２．１６８．３０．９”はサーバ４０ａのＩＰアドレスではないからである。
【０２１９】
スイッチ３００は、そのＡＲＰリクエストに合致するフローエントリを保持していないので、当該ＡＲＰリクエストを含むＰａｃｋｅｔ−Ｉｎメッセージを制御サーバ１００に送信する。
【０２２０】
制御サーバ１００は、そのＰａｃｋｅｔ−Ｉｎメッセージを受信する。アドレス−エッジ対応テーブル１１３ａにはエッジ情報“Ｂ−ｂ２”とＩＰアドレス空間“１９２．１６８．４０．０／２４”とが登録済である（学習済）。したがって、制御サーバ１００は、当該ＩＰアドレス空間の学習を行わない。
【０２２１】
制御サーバ１００は、アドレス−エッジ対応テーブル１１３ａを参照して、ＡＲＰリクエストの宛先ＩＰアドレス“１９２．１６８．３０．９”を包含するＩＰアドレス空間“１９２．１６８．３０．０／２４”の情報が登録済であることを検出する。
【０２２２】
すると、制御サーバ１００は、スイッチ３００のＭＡＣアドレスを応答するＡＲＰリプライを生成する。制御サーバ１００は、そのＡＲＰリプライをポートｂ２から出力させるフローエントリをスイッチ３００に設定する。制御サーバ１００は、当該ＡＲＰリプライを含むＰａｃｋｅｔ−Ｏｕｔメッセージをスイッチ３００に送信する。
【０２２３】
スイッチ３００は、Ｐａｃｋｅｔ−Ｏｕｔメッセージを制御サーバ１００から受信すると、Ｐａｃｋｅｔ−Ｏｕｔメッセージに含まれるＡＲＰリプライを抽出し、フローエントリに従ってポートｂ２から出力する。ＡＲＰリプライは、ネットワーク２２を介してサーバ４０まで転送される。サーバ４０は、当該ＡＲＰリプライに含まれる送信元ＭＡＣアドレス（ここでは、スイッチ３００のＭＡＣアドレス）を、ＩＰアドレス“１９２．１６８．３０．９”に対応するＭＡＣアドレスと特定する。
【０２２４】
更に、制御サーバ１００は、ＩＰアドレス空間“１９２．１６８．３０．０／２４”に対応するスイッチ２００のポートａ１（エッジ情報“Ａ−ａ１”に相当）からＡＲＰリクエストを出力する（すなわち、ネットワーク２１へ転送する）と決定する。
【０２２５】
そして、制御サーバ１００は、当該ＡＲＰリクエストをポートａ１から出力させるフローエントリをスイッチ２００に設定する。また、制御サーバ１００は、ＡＲＰリクエストに対するＡＲＰリプライをスイッチ２００が受信した場合に、ＡＲＰリプライを制御サーバ１００に送信するフローエントリをスイッチ２００に設定する。制御サーバ１００は、そのＡＲＰリクエストを含むＰａｃｋｅｔ−Ｏｕｔメッセージをスイッチ２００に送信する。
【０２２６】
スイッチ２００は、Ｐａｃｋｅｔ−Ｏｕｔメッセージを制御サーバ１００から受信すると、Ｐａｃｋｅｔ−Ｏｕｔメッセージに含まれるＡＲＰリクエストを抽出し、フローエントリに従ってポートａ１から出力する。ＡＲＰリクエストは、ネットワーク２１に到達すると、ネットワーク２１においてブロードキャストされる。クライアント３０は、そのＡＲＰリクエストを受信しても無視する。当該ＡＲＰリクエストに含まれる宛先ＩＰアドレスは、クライアント３０のＩＰアドレスではないからである。サーバ３０ａは、ＡＲＰリクエストを受信すると、ＡＲＰリプライを生成して応答する。当該ＡＲＰリクエストに含まれる宛先ＩＰアドレスは、サーバ３０ａのＩＰアドレスだからである。
【０２２７】
なお、図３４におけるＡＲＰリクエストおよびＡＲＰリプライの転送に用いられるフローエントリは、図３２で例示したものと同様である。ただし、スイッチ２００には、例えば、“イーサネットタイプ：０ｘ０８０６（ＡＲＰ）、送信元ＩＰアドレス：１９２．１６８．３０．９（サーバ３０ａのＩＰアドレス）のフレームを制御サーバ１００に送る”というフローエントリが設定されてもよい。これは、サーバ３０ａからのＡＲＰリプライを制御サーバ１００に提供するためのフローエントリである。
【０２２８】
また、図３２で説明したように、制御サーバ１００は、Ｐａｃｋｅｔ−Ｏｕｔメッセージにより、ＡＲＰリクエストやＡＲＰリプライの出力ポートを、スイッチ２００，３００へ指示してもよい。
【０２２９】
図３５は、第４の実施の形態のＡＲＰ応答時の処理例を示すフローチャートである。以下、図３５に示す処理をステップ番号に沿って説明する。ここで、図３５の手順では、ステップＳ２４〜Ｓ２６に代えて、ステップＳ２４ａを実行する点が図１７と異なる（その他のステップは図１７と同様である）。そこで、以下の説明では、ステップＳ２４ａを説明し、他のステップの説明を省略する。ステップＳ２４ａは、ステップＳ２２でアドレス−エッジ対応テーブルに、ＡＲＰリプライの送信元ＩＰアドレスを含むＩＰアドレス空間の情報があると判定された場合、または、ステップＳ２３の次に実行される。
【０２３０】
（Ｓ２４ａ）転送制御部１５０は、Ｐａｃｋｅｔ−Ｉｎの送信元エッジに、ＭＡＣアドレス変換用のフローエントリを設定する。具体的には、転送制御部１５０は、受信したＡＲＰリプライから送信元ＭＡＣアドレスおよび送信元ＩＰアドレスを抽出する。そして、転送制御部１５０は、ＡＲＰリプライから抽出したＩＰアドレスを宛先ＩＰアドレスとするフレームに対し、そのフレームの宛先ＭＡＣアドレスを、ＡＲＰリプライから抽出したＭＡＣアドレスに変換するフローエントリを当該エッジに設定する。そして、処理を終了する。
【０２３１】
図３６は、第４の実施の形態のＡＲＰリプライの転送例を示す図である。図３６では、図３４に引き続いて、サーバ３０ａからＡＲＰリプライが送信された場合を想定する。ＡＲＰリプライは、ネットワーク２１を介してポートａ１に到着する。スイッチ２００は、フローエントリに従って、当該ＡＲＰリプライを含むＰａｃｋｅｔ−Ｉｎメッセージを制御サーバ１００に送信する。
【０２３２】
制御サーバ１００は、そのＰａｃｋｅｔ−Ｉｎメッセージを受信する。アドレス−エッジ対応テーブル１１３ａにはエッジ情報“Ａ−ａ１”とＩＰアドレス空間“１９２．１６９．３０．０／２４”が登録済である（学習済）。したがって、制御サーバ１００は、当該ＩＰアドレス空間の学習を行わない。
【０２３３】
制御サーバ１００は、取得したＡＲＰリプライから送信元ＭＡＣアドレス（サーバ３０ａのＭＡＣアドレス）および送信元ＩＰアドレス（この場合“１９２．１６８．３０．９”）を抽出する。そして、制御サーバ１００は、ＭＡＣアドレス変換用のフローエントリをスイッチ２００に設定する。この例では、制御サーバ１００は、図３４で例示したように、スイッチ３００のＭＡＣアドレスをサーバ４０に応答している。したがって、サーバ４０は、宛先ＩＰアドレス“１９２．１６８．３０．９”を指定して通信するとき、フレームのＭＡＣヘッダにスイッチ３００のＭＡＣアドレスを宛先ＭＡＣアドレスとして設定することになる。
【０２３４】
このため、制御サーバ１００は、宛先ＩＰアドレス“１９２．１６８．３０．９”を含むフレームの宛先ＭＡＣアドレスを、サーバ３０ａのＭＡＣアドレスに変換するフローエントリをスイッチ２００に設定する（既存のフローエントリの変更でもよい）。すると、スイッチ２００により保持されるフローテーブルは次のようになる。
【０２３５】
図３７は、第４の実施の形態のフローテーブルの例を示す図である。フローテーブル２１１ｅは、ＭＡＣアドレス変換用のフローエントリが追加されたときのスイッチ２００のフローテーブルである。ただし、追加された（または、変更された）フローエントリのみを図示している（他のフローエントリの図示を省略している）。例えば、フローテーブル２１１ｅには、マッチ条件“宛先ＩＰアドレス：１９２．１６８．３０．９”およびアクション“ＭＡＣアドレスをＭＡＣ３に書き換えた後、ポートａ１から出力”が設定されている。ここで、“ＭＡＣ３”は、サーバ３０ａのＭＡＣアドレスである。
【０２３６】
このように、制御サーバ１００は、サーバ３０ａのＭＡＣアドレスとは異なるＭＡＣアドレスをサーバ４０に提供してもよい。例えば、情報処理システムが更に多数のスイッチを含み、スイッチ３００からスイッチ２００までの通信経路に複数の候補が存在することも想定される。そのような場合に、サーバ４０に提供した所定のＭＡＣアドレスを利用して、スイッチ３００からスイッチ２００までのルーティングを自在に制御できる点で有用である。
【０２３７】
このとき、制御サーバ１００は、サーバ３０ａのＩＰアドレスを宛先とするフレームについて、宛先ＭＡＣアドレスをサーバ３０ａのＭＡＣアドレスに変換するフローエントリをスイッチ２００に設定する。これにより、サーバ３０ａのＭＡＣアドレスとは異なるＭＡＣアドレスをサーバ４０に提供したとしても、サーバ４０からサーバ３０ａのＩＰアドレス宛に送信されたフレームをサーバ３０ａまで到達させることができる。なお、制御サーバ１００は、ＡＲＰリプライに基づいて、エンドホストのＩＰアドレスとＭＡＣアドレスとの対応関係を次のように記録しておいてもよい。
【０２３８】
図３８は、第４の実施の形態のＭＡＣアドレス対応テーブルの例を示す図である。ＭＡＣアドレス対応テーブル１１４は、記憶部１１０に格納される。ＭＡＣアドレス対応テーブル１１４は、ＭＡＣアドレスおよびＩＰアドレスの項目を含む。ＭＡＣアドレスの項目には、ＭＡＣアドレスが登録される。ＩＰアドレスの項目には、ＩＰアドレスが登録される。例えば、ＭＡＣアドレス対応テーブル１１４には、ＭＡＣアドレスが“ＭＡＣ３”、ＩＰアドレスが“１９２．１６８．３０．９”という情報が登録されている。これは、図３６で例示したＰａｃｋｅｔ−Ｉｎメッセージ（ＡＲＰリプライ）に基づいて、制御サーバ１００が記録した情報である。
【０２３９】
例えば、制御サーバ１００は、図３３のステップＳ１５ｂにおいて、ＡＲＰリクエストの宛先ＩＰアドレスに対して応答するＭＡＣアドレスを、ＭＡＣアドレス対応テーブル１１４に基づいて決定してもよい。すなわち、制御サーバ１００は、当該ＡＲＰリクエストの宛先ＩＰアドレスと同じＩＰアドレスがＭＡＣアドレス対応テーブル１１４に登録されていれば、そのＩＰアドレスに対応するＭＡＣアドレスを応答してもよい。この場合、図３３のステップＳ１５ｃおよび図３５の処理を省略することができる。
【０２４０】
なお、第３の実施の形態でも説明したように、制御サーバ１００は、ＭＡＣヘッダのイーサネットタイプが“０ｘ０８０６（ＡＲＰ）”であるフレームを制御サーバ１００に送信するフローエントリを、各スイッチに予め設定しておいてもよい。その場合、図３３のステップＳ１５ｃにおいて、制御サーバ１００は、ＡＲＰリプライをエッジから取得するためのフローエントリを該当のエッジに別途設定しなくてもよい。また、第３，第４の実施の形態の方法を用いてＡＲＰリクエストを転送する一方、ＡＲＰ以外のフレームについては図２２で示した手順を用いて適切に宛先へ転送できる。
【０２４１】
［第５の実施の形態］
以下、第５の実施の形態を説明する。前述の第２〜第４の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０２４２】
第２〜第４の実施の形態では、制御サーバ１００が複数のスイッチを制御する場合を例示した。一方、制御サーバ１００が制御するスイッチは１台でもよい。
図３９は、第５の実施の形態の情報処理システムを示す図である。第５の実施の形態の情報処理システムは、スイッチ２００，３００，４００，５００，６００，７００に代えて、スイッチ８００を有する点が図２，３で説明した第２の実施の形態の情報処理システムと異なる。その他は第２の実施の形態と同様である。スイッチ８００のハードウェアおよび機能例は、図５，７で説明したスイッチ２００のハードウェアおよび機能例と同様である。
【０２４３】
スイッチ８００は、ポートｇ１，ｇ２，ｇ３，ｇ４，ｇ５を有する。ポートｇ１は、ネットワーク２１に接続されている。ポートｇ２は、ネットワーク２４に接続されている。ポートｇ３は、ネットワーク２３に接続されている。ポートｇ４は、ネットワーク２２に接続されている。ポートｇ５は、制御サーバ１００に接続されている。なお、スイッチ８００の識別情報は“Ｇ”である。
【０２４４】
制御サーバ１００は、第２の実施の形態と同様にスイッチ８００を制御できる。例えば、制御サーバ１００は、クライアント３０のＩＰアドレス“１９２．１６８．３０．５５”を送信元とするフレームをスイッチ８００から取得したとする。すると、制御サーバ１００は、ポリシー情報１１１に基づいて、エッジ情報“Ｇ−ｇ１”とＩＰアドレス空間“１９２．１６８．３０．０／２４”との対応関係の情報を生成する。そして、制御サーバ１００は、生成した情報をアドレス−エッジ対応テーブル１１３に登録する。
【０２４５】
その後、例えば、制御サーバ１００は、サーバ３０ａのＩＰアドレス“１９２．１６８．３０．９”を宛先とするフレームをスイッチ８００から取得したとする。すると、制御サーバ１００は、アドレス−エッジ対応テーブル１１３に基づいて、そのフレームをスイッチ８００のポートｇ１から出力させると決定する。このように、制御サーバ１００は、“１９２．１６８．３０．９”に対するエッジ情報を学習しなくても、“１９２．１６８．３０．９”を宛先とするフレームの転送先を決定できる。したがって、第２の実施の形態と同様に、制御サーバ１００によるアドレスの学習を効率化できる。
【０２４６】
なお、第１〜第５の実施の形態では、ノードおよびエンドホストとして、物理的なコンピュータ（物理マシン）を用いてもよいし、物理マシン上で動作する仮想的なコンピュータ（仮想マシン）を用いてもよい。例えば、ハイパーバイザと呼ばれるソフトウェアが、物理マシン上のＣＰＵやＲＡＭなどのリソースを用いて、物理マシン上に仮想マシンを実現することがある。
【０２４７】
また、第１の実施の形態の情報処理は、制御部１ｂとして用いられるプロセッサに、プログラムを実行させることで実現できる。第２〜第５の実施の形態の情報処理は、プロセッサ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体１３に記録できる。
【０２４８】
例えば、プログラムを記録した記録媒体１３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体１３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０２４９】
１  制御装置
１ａ  記憶部
１ｂ  制御部
２，３，４，５，６，７，８  スイッチ
２ａ，２ｂ，２ｃ，３ａ，３ｂ，３ｃ  ポート
９，９ａ，９ｂ，９ｃ  ノード
Ｄ１，Ｄ２  データ
Ｒ１，Ｒ２  情報
Ｎ，Ｎ１，Ｎ２，Ｎ３  ネットワーク
【図１】
2015133556.tif 000003
【図２】
2015133556.tif 000004
【図３】
2015133556.tif 000005
【図４】
2015133556.tif 000006
【図５】
2015133556.tif 000007
【図６】
2015133556.tif 000008
【図７】
2015133556.tif 000009
【図８】
2015133556.tif 000010
【図９】
2015133556.tif 000011
【図１０】
2015133556.tif 000012
【図１１】
2015133556.tif 000013
【図１２】
2015133556.tif 000014
【図１３】
2015133556.tif 000015
【図１４】
2015133556.tif 000016
【図１５】
2015133556.tif 000017
【図１６】
2015133556.tif 000018
【図１７】
2015133556.tif 000019
【図１８】
2015133556.tif 000020
【図１９】
2015133556.tif 000021
【図２０】
2015133556.tif 000022
【図２１】
2015133556.tif 000023
【図２２】
2015133556.tif 000024
【図２３】
2015133556.tif 000025
【図２４】
2015133556.tif 000026
【図２５】
2015133556.tif 000027
【図２６】
2015133556.tif 000028
【図２７】
2015133556.tif 000029
【図２８】
2015133556.tif 000030
【図２９】
2015133556.tif 000031
【図３０】
2015133556.tif 000032
【図３１】
2015133556.tif 000033
【図３２】
2015133556.tif 000034
【図３３】
2015133556.tif 000035
【図３４】
2015133556.tif 000036
【図３５】
2015133556.tif 000037
【図３６】
2015133556.tif 000038
【図３７】
2015133556.tif 000039
【図３８】
2015133556.tif 000040
【図３９】
2015133556.tif 000041