(57)【特許請求の範囲】
【請求項１】
複数のポートを有する第１のスイッチ装置と、前記複数のポートを介して前記第１のスイッチ装置に接続された第２のスイッチ装置と、前記第１のスイッチ装置を制御する制御装置とを有する情報処理システムにおいて、
前記制御装置は、
一連のパケットを含むそれぞれのフローについて、前記フローを識別するフロー情報と、前記フローに含まれる前記パケットが送信されるポートのポート情報とを格納するフローテーブルと、前記ポート毎の使用率を格納する使用率テーブルとを記憶する記憶部と、
前記フローテーブルおよび前記使用率テーブルを参照して、送信されるポートを変更するフローおよび変更後のポートのポート情報を特定する特定部と、
前記特定部が特定したフローのフロー情報と、変更後のポートのポート情報とを含む変更指示パケットを、前記第１のスイッチ装置へ送信する変更指示送信部と
を有し、
前記第１のスイッチ装置は、
前記パケットを受信する第１の受信部と、
前記第１の受信部が受信した前記パケットのヘッダ情報に基づいて、前記パケットを送信するポートを選択する選択部と、
前記第１の受信部が受信した前記パケットを、前記選択部が選択したポートから送信するパケット送信部と、
前記変更指示パケットを前記制御装置から受信した場合、前記変更指示パケット内のフロー情報で特定されるフローに含まれる前記パケットのヘッダ情報内のオリジナルパケットのハッシュ値を、前記選択部によって前記変更指示パケット内のポート情報に対応するポートが選択されるハッシュ値に書き換える書換部と
を有することを特徴とする情報処理システム。
【請求項２】
前記第１のスイッチ装置は、
前記第１の受信部が受信した前記パケットのヘッダ情報を抽出する抽出部と、
前記抽出部が抽出した前記ヘッダ情報を前記制御装置へ送信するヘッダ情報送信部と、
前記フロー情報を含むポート問合せパケットを前記制御装置から受信した場合、前記ポート問合せパケット内の前記フロー情報に対応するフローに含まれるパケットが送信されるポートのポート情報を前記制御装置へ送信するポート情報送信部と
を有し、
前記制御装置は、
前記ヘッダ情報送信部から前記ヘッダ情報を受信した場合、前記ヘッダ情報を有するパケットを含むフローのフロー情報を含む前記ポート問合せパケットを前記第１のスイッチ装置へ送信する問合せ送信部と、
前記ポート情報送信部から前記ポート情報を受信した場合、受信した前記ポート情報を、前記ヘッダ情報送信部から受信したヘッダ情報を有する前記パケットを含むフローのフロー情報に対応付けて、前記フローテーブルに登録する登録部と
を有することを特徴とする請求項１に記載の情報処理システム。
【請求項３】
前記抽出部は、
前記第１の受信部が受信した前記パケットの中で、前記パケットがカプセル化しているオリジナルパケットの属性に応じて、前記パケットのヘッダ情報を抽出することを特徴とする請求項２に記載の情報処理システム。
【請求項４】
前記フローテーブルには、
それぞれのフローについて、前記フローに含まれる前記パケットの前記ヘッダ情報の中で、前記書換部が書き換える前のハッシュ値が格納されており、
前記変更指示送信部は、
前記変更指示パケットに、前記第２のスイッチ装置の識別情報と、前記書換部が書き換える前のハッシュ値とをさらに含めて、前記第１のスイッチ装置へ送信し、
前記第１のスイッチ装置は、
前記書換部が書き換えたハッシュ値を含むヘッダ情報を有する前記パケットを含むフローのフロー情報と、前記書換部が書き換える前のハッシュ値とを含む書き戻し依頼パケットを、前記変更指示パケットに含まれる識別情報に対応する前記第２のスイッチ装置へ送信する書き戻し依頼送信部
を有し、
前記第２のスイッチ装置は、
前記パケットおよび前記書き戻し依頼パケットを受信する第２の受信部と、
前記第２の受信部が受信した前記パケットの中で、前記第２の受信部が受信した前記書き戻し依頼パケットに含まれるフロー情報に対応するフローに含まれるパケットについて、前記パケットのヘッダ情報に含まれる、前記書換部によって書き換えられたハッシュ値を、前記書き戻し依頼パケットに含まれる、前記書換部が書き換える前のハッシュ値に書き戻す書き戻し部と
を有することを特徴とする請求項１から３のいずれか一項に記載の情報処理システム。
【請求項５】
前記書き戻し依頼送信部は、
前記書き戻し依頼パケットが送信されるポートとして、前記変更指示パケット内のポート情報に対応するポートが選択されるヘッダ情報となるハッシュ値を、前記書き戻し依頼パケットのヘッダ情報に含め、
前記選択部は、
前記書き戻し依頼パケットのヘッダ情報に基づいて、前記書き戻し依頼パケットを送信するポートを選択し、
前記パケット送信部は、
前記選択部が選択したポートから前記書き戻し依頼パケットを送信することを特徴とする請求項４に記載の情報処理システム。
【請求項６】
複数のポートを有するスイッチ装置と、前記スイッチ装置を制御する制御装置とを有する情報処理システムに用いられる前記制御装置において、
一連のパケットを含むそれぞれのフローについて、前記フローを識別するフロー情報と、前記フローに含まれる前記パケットが送信されるポートのポート情報とを格納するフローテーブルと、前記ポート毎の使用率を格納する使用率テーブルとを記憶する記憶部と、
前記フローテーブルおよび前記使用率テーブルを参照して、送信するポートを変更するフローおよび前記フローが送信される変更後のポートのポート情報を特定する特定部と、
前記特定部が特定したフローのフロー情報と、変更後のポートのポート情報とを含む変更指示パケットを、前記スイッチ装置へ送信することにより、前記スイッチ装置に、前記変更指示パケット内のフロー情報で特定されるフローに含まれる前記パケットのヘッダ情報内の情報を、前記変更指示パケット内のポート情報に対応するポートが選択される情報となるように書き換えさせる変更指示送信部と
を有することを特徴とする制御装置。
【請求項７】
複数のポートを有するスイッチ装置と、前記スイッチ装置を制御する制御装置とを有する情報処理システムに用いられる前記制御装置の制御プログラムにおいて、
前記制御装置に、
一連のパケットを含むそれぞれのフローについて、前記フローを識別するフロー情報と、前記フローに含まれる前記パケットが送信されるポートのポート情報とを格納するフローテーブルと、前記ポート毎の使用率を格納する使用率テーブルとを参照して、送信するポートを変更するフローおよび前記フローが送信される変更後のポートのポート情報を特定させ、
特定したフローのフロー情報と、変更後のポートのポート情報とを含む変更指示パケットを、前記スイッチ装置へ送信することにより、前記スイッチ装置に、前記変更指示パケット内のフロー情報で特定されるフローに含まれる前記パケットのヘッダ情報内の情報を、前記変更指示パケット内のポート情報に対応するポートが選択される情報となるように書き換えさせる
ことを特徴とする制御装置の制御プログラム。
【請求項８】
複数のポートを有する複数のスイッチ装置と、それぞれの前記スイッチ装置を制御する制御装置とを有する情報処理システムに用いられる前記スイッチ装置おいて、
パケットを受信する受信部と、
前記受信部が受信した前記パケットのヘッダ情報に基づいて、前記パケットを送信するポートを選択する選択部と、
前記受信部が受信した前記パケットを、前記選択部が選択したポートから送信する送信部と、
送信されるポートが変更されるフローを特定するフロー情報と変更後のポートのポート情報とを含む変更指示パケットを前記制御装置から受信した場合、前記変更指示パケット内のフロー情報で特定されるフローに含まれる前記パケットのヘッダ情報内のオリジナルパケットのハッシュ値を、前記選択部によって前記変更指示パケット内のポート情報に対応するポートが選択されるハッシュ値に書き換える書換部と
を有することを特徴とするスイッチ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、制御装置、制御装置の制御プログラム、およびスイッチ装置に関する。 
【背景技術】
【０００２】
物理ネットワーク上に、トンネリングにより論理的な複数のネットワークを構築するオーバレイネットワークが知られている。このようなオーバレイネットワークにおいて、クライアントパケットは、カプセル化され、カプセル化されたパケットのヘッダに論理ネットワークの識別子が格納される。そして、カプセル化されたパケットは、ヘッダに含まれる識別子に対応する論理ネットワーク内で転送される。各論理ネットワークは、ＶＴＥＰ（VXLAN  Tunnel  End  Point）等の終端装置で終端される。
【０００３】
また、パケットのヘッダ情報から算出されたハッシュ値に基づいて、パケットを送信する送信ポートを選択し、選択した送信ポートからパケットを送信するパケット伝送方法が知られている。ハッシュ値の計算には、例えばヘッダ情報内の５タプルが用いられる。５タプルとは、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号、宛先ポート番号、およびプロトコル番号である。これにより、ネットワーク内で、一連のパケットを含むフローの伝送経路の偏りを抑制することができる。
【０００４】
しかし、データセンタ等におけるオーバレイネットワークでは、トンネリングの終端装置間でパケットが伝送されるため、同一の終端装置のペアの間で伝送されるパケットのヘッダ情報は同一となる。そのため、ヘッダ情報から算出されるハッシュ値も同一となり、パケットの伝送経路が偏る場合がある。これを回避するため、カプセル化されたパケットのヘッダ内の送信元ポート番号を、クライアントパケットから算出したハッシュ値で置き換える技術が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−２５４１３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、パケットのヘッダ情報から算出されたハッシュ値に基づいてパケットを送信するポートを選択する場合、長期的に見れば、理論的には各ポートが一様に選択されることになり、フローの伝送経路の偏りが抑制される。しかし、短期的にみると、各ポートが必ずしも一様に選択されるとは限らない。そのため、短期的には、一部のポートに選択が集中し、ネットワーク内の一部の伝送経路にフローが集中する場合がある。
【０００７】
また、オーバレイネットワークにおいて、クライアントパケットから算出したハッシュ値を、カプセル化されたパケットのヘッダ内に格納する場合、ハッシュ値の算出アルゴリズムは、カプセル化を行う装置に搭載されるハイパーバイザに依存している。そのため、カプセル化を行う装置のユーザは、クライアントパケットに対して、どのようなハッシュ値が算出されるかは分からず、クライアントパケットを含むパケットが、どのポートから送信されるかが分からない。そのため、経路毎にどのようなフローの分布になっているのかが分からない。
【０００８】
本願に開示の技術は、フローの偏りの抑制等、フローの伝送経路のきめ細かい運用管理を可能とする。
【課題を解決するための手段】
【０００９】
１つの側面では、情報処理システムは、複数のポートを有する第１のスイッチ装置と、複数のポートを介して第１のスイッチ装置に接続された第２のスイッチ装置と、第１のスイッチ装置を制御する制御装置とを有する。制御装置は、記憶部と、特定部と、変更指示送信部とを有する。記憶部は、一連のパケットを含むそれぞれのフローを識別するフロー情報に対応付けて、フローに含まれるパケットが送信されるポートのポート情報を格納するフローテーブルと、ポート毎の使用率を格納する使用率テーブルとを記憶する。特定部は、フローテーブルおよび使用率テーブルを参照して、送信するポートを変更するフローおよびフローが送信される変更後のポートのポート情報を特定する。変更指示送信部は、特定部が特定したフローのフロー情報と、変更後のポートのポート情報とを含む変更指示を、第１のスイッチ装置へ送信する。第１のスイッチ装置は、第１の受信部と、選択部と、パケット送信部と、書換部とを有する。第１の受信部は、パケットを受信する。選択部は、第１の受信部が受信したパケットのヘッダ情報に基づいて、パケットを送信するポートを選択する。パケット送信部は、第１の受信部が受信したパケットを、選択部が選択したポートから送信する。書換部は、変更指示を制御装置から受信した場合、変更指示内のフロー情報で特定されるフローに含まれるパケットのヘッダ情報内の情報を、選択部によって変更指示内のポート情報に対応するポートが選択される情報となるように書き換える。
【発明の効果】
【００１０】
１実施形態によれば、フローの偏りの抑制等、フローの伝送経路のきめ細かい運用管理が可能となる。
【図面の簡単な説明】
【００１１】
【図１】図１は、情報処理システムの一例を示す図である。
【図２】図２は、情報処理システムにおいて伝送されるパケットのヘッダの一例を示す図である。
【図３】図３は、実施例１における制御装置の一例を示すブロック図である。
【図４】図４は、負荷分散テーブルの一例を示す図である。
【図５】図５は、統計情報テーブルの一例を示す図である。
【図６】図６は、実施例１におけるスイッチ装置の一例を示すブロック図である。
【図７】図７は、ハッシュテーブルの一例を示す図である。
【図８】図８は、書き換えテーブルの一例を示す図である。
【図９】図９は、実施例１における制御装置の動作の一例を示すフローチャートである。
【図１０】図１０は、実施例１におけるスイッチ装置の動作の一例を示すフローチャートである。
【図１１】図１１は、実施例１におけるパケット転送処理の一例を示すフローチャートである。
【図１２】図１２は、ポート番号応答処理の一例を示すフローチャートである。
【図１３】図１３は、実施例１における書き換え設定処理の一例を示すフローチャートである。
【図１４】図１４は、実施例２におけるパケット転送処理の一例を示すフローチャートである。
【図１５】図１５は、実施例２における制御装置の動作の一例を示すフローチャートである。
【図１６】図１６は、実施例３における制御装置の一例を示すブロック図である。
【図１７】図１７は、スイッチテーブルの一例を示す図である。
【図１８】図１８は、実施例３におけるスイッチ装置の一例を示すブロック図である。
【図１９】図１９は、書き戻し依頼パケットのフォーマットの一例を示す図である。
【図２０】図２０は、実施例３における制御装置の動作の一例を示すフローチャートである。
【図２１】図２１は、実施例３におけるスイッチ装置の動作の一例を示すフローチャートである。
【図２２】図２２は、実施例３における書き換え設定処理の一例を示すフローチャートである。
【図２３】図２３は、制御装置の機能を実現するコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示する情報処理システム、制御装置、制御装置の制御プログラム、およびスイッチ装置の実施例を、図面に基づいて詳細に説明する。なお、以下の実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１３】
［情報処理システム１０］
図１は、情報処理システム１０の一例を示す図である。情報処理システム１０は、制御装置２０、複数のスイッチ装置３０−１〜３０−８、および複数の通信装置１４−１〜１４−８を有する。情報処理システム１０は、例えばデータセンタに設けられる。複数の通信装置１４−１〜１４−８のそれぞれは、例えばサーバである。なお、以下では、複数のスイッチ装置３０−１〜３０−８のそれぞれを区別することなく総称する場合にスイッチ装置３０と記載する。また、複数の通信装置１４−１〜１４−８のそれぞれを区別することなく総称する場合に通信装置１４と記載する。
【００１４】
情報処理システム１０は、複数のスイッチ装置３０−１〜３０−４を含む上位スイッチ群１１と、複数のスイッチ装置３０−５〜３０−８を含む下位スイッチ群１２を有する。複数のスイッチ装置３０−１〜３０−４は、例えばSpineスイッチである。また、複数のスイッチ装置３０−５〜３０−８は、例えばLeafスイッチである。下位スイッチ群１２に含まれるスイッチ装置３０−５〜３０−８のそれぞれは、上位スイッチ群１１に含まれる複数のスイッチ装置３０−１〜３０−４の中の２つ以上のスイッチ装置３０に接続される。また、下位スイッチ群１２に含まれるスイッチ装置３０−５〜３０−８のそれぞれは、通信装置１４に接続される。複数のスイッチ装置３０は、例えばファットツリーのトポロジーを構成する。
【００１５】
本実施例において、それぞれの通信装置１４では、複数の仮想サーバが実現されている。それぞれの仮想サーバは、複数のスイッチ装置３０で構築された物理ネットワーク上に実現された論理ネットワークを介して、他の通信装置１４に設けられた仮想サーバと通信を行う。論理ネットワークは、通信装置１４内に設けられたＶＴＥＰ等の終端装置により終端される。論理ネットワークは、例えばＶＸＬＡＮ（Virtual  eXtensible  Local  Area  Network）により実現される。それぞれのスイッチ装置３０は、例えば図１の実線で示したデータネットワークによって互いに接続される。また、それぞれのスイッチ装置３０は、例えば図１の破線で示した管理ネットワークによって、制御装置２０と接続される。
【００１６】
それぞれの通信装置１４内に設けられた終端装置は、通信装置１４内の仮想サーバが生成したオリジナルパケットのヘッダを用いてハッシュ値を算出する。そして、終端装置は、算出したハッシュ値を送信元ポート番号に設定したヘッダを生成し、生成したヘッダを有するパケットで、オリジナルパケットをカプセル化する。そして、オリジナルパケットをカプセル化したパケットを、データネットワークを介してスイッチ装置３０へ送信する。各スイッチ装置３０は、受信したパケットをパケットのヘッダの情報に従って他のスイッチ装置３０へ転送する。
【００１７】
スイッチ装置３０は、複数の送信ポートを有するアグリゲーションポートからパケットを送信する場合、オリジナルパケットから算出したハッシュ値に基づいて、アグリゲーションポートの中からパケットを送信する送信ポートを１つ選択する。そして、スイッチ装置３０は、選択した送信ポートからパケットを送信する。スイッチ装置３０によって転送されたパケットは、宛先の仮想サーバが実現された通信装置１４へ送信され、通信装置１４内の終端装置によってデカプセル化される。そして、オリジナルパケットの宛先の仮想サーバは、オリジナルパケットを受信する。
【００１８】
図２は、情報処理システム１０において伝送されるパケットのヘッダの一例を示す図である。通信装置１４内の仮想サーバから送信されたオリジナルパケットは、例えば通信装置１４内に設けられたＶＴＥＰによりＵＤＰ（User  Datagram  Protocol）パケットとしてカプセル化される。例えば図２に示すように、パケットのヘッダ１００内の送信元ポート番号１０２には、カプセル化されたオリジナルパケット１０１のヘッダから算出されたハッシュ値が格納される。以下では、オリジナルパケットをカプセル化し、情報処理システム１０において伝送されるパケットを単にパケットと呼ぶ。
【００１９】
［制御装置２０］
図３は、実施例１における制御装置２０の一例を示すブロック図である。制御装置２０は、制御部２１、記憶部２２、および管理ポート２３を有する。制御部２１は、収集部２１０、変更ポート特定部２１１、および変更指示送信部２１２を有する。記憶部２２は、負荷分散テーブル２２０および統計情報テーブル２２１を記憶する。管理ポート２３は、管理ネットワークを介して各スイッチ装置３０に接続される。
【００２０】
図４は、負荷分散テーブル２２０の一例を示す図である。負荷分散テーブル２２０には、例えば図４に示すように、それぞれのスイッチ装置３０を識別するスイッチＩＤ２２００毎に、個別テーブル２２０１が格納される。それぞれの個別テーブル２２０１には、フローＩＤ２２０２、フロー情報２２０３、ポート番号２２０４、書き換え後のハッシュ値２２０５、変更後のポート番号２２０６、およびタイムスタンプ２２０７が対応付けて格納される。
【００２１】
フローＩＤ２２０２は、それぞれのフローを識別する情報である。フローとは、ネットワーク上を流れる共通の属性をもった一連のパケット群を指す。本実施例では、送信元ＩＰ（Internet  Protocol）アドレス、宛先ＩＰアドレス、送信元ポート番号、宛先ポート番号、およびプロトコル番号が共通のパケット群をフローと呼ぶ。本実施例において、送信元ポート番号には、カプセル化されたオリジナルパケットのヘッダから算出されたハッシュ値が格納される。
【００２２】
フロー情報２２０３は、フローに含まれるパケットが共通に有するヘッダの情報である。本実施例において、フロー情報２２０３には、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号、宛先ポート番号、およびプロトコル番号が含まれる。ポート番号２２０４は、フローに含まれるパケットが送信されるスイッチ装置３０の送信ポートの番号である。書き換え後のハッシュ値２２０５は、パケットのヘッダ内の送信元ポート番号がスイッチ装置３０によって書き換えられる場合の、送信元ポート番号に設定されるハッシュ値である。変更後のポート番号２２０６は、フローに含まれるパケットを送信する送信ポートが変更された後の送信ポートのポート番号である。タイムスタンプ２２０７は、タイムスタンプ２２０７に対応付けられたフローＩＤ２２０２、フロー情報２２０３、ポート番号２２０４、書き換え後のハッシュ値２２０５、または変更後のポート番号２２０６が更新された時刻を示す。
【００２３】
図５は、統計情報テーブル２２１の一例を示す図である。統計情報テーブル２２１には、例えば図５に示すように、スイッチＩＤ２２１０毎に、個別テーブル２２１１が格納される。それぞれの個別テーブル２２１１には、ポート番号２２１２、使用率２２１３、およびフラグ２２１４が対応付けて格納される。フラグ２２１４は、ポート番号２２１２に対応する送信ポートがアグリゲーションポートに割り当てられているか否かを示す情報である。フラグ２２１４には、対応するポート番号２２１２の送信ポートがアグリゲーションポートに割り当てられている場合には、例えば１が格納される。また、フラグ２２１４には、対応するポート番号２２１２の送信ポートがアグリゲーションポートに割り当てられていない場合には、例えば０が格納される。フラグ２２１４の値は、例えば情報処理システム１０の管理者等によって設定される。
【００２４】
図３に戻って説明を続ける。収集部２１０は、情報処理システム１０の管理者等からの指示に応じて、パケットのヘッダ情報を抽出する条件であるモニタリング条件を、管理ポート２３を介してそれぞれのスイッチ装置３０へ送信する。本実施例において、モニタリング条件とは、例えば、所定時間毎に受信したパケットのヘッダ情報を抽出するという条件である。なお、モニタリング条件は、所定数毎に受信したパケットのヘッダ情報を抽出するという条件等であってもよい。
【００２５】
また、収集部２１０は、管理ポート２３を介してスイッチ装置３０からヘッダ情報を受信した場合、受信したヘッダ情報から、フロー情報として、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号、宛先ポート番号、およびプロトコル番号を抽出する。そして、収集部２１０は、ヘッダ情報の送信元のスイッチ装置３０に対応する個別テーブルを負荷分散テーブル２２０内で特定する。そして、収集部２１０は、特定した個別テーブル内に、ヘッダ情報から抽出したフロー情報が既に登録されているか否かを判定する。フロー情報が個別テーブル内に登録されていない場合、収集部２１０は、フロー情報に対応するフローＩＤを新たに生成する。そして、収集部２１０は、新たに生成したフローＩＤに対応付けて、フロー情報を個別テーブルに登録する。
【００２６】
フローＩＤに対応付けてフロー情報を個別テーブルに登録した場合、収集部２１０は、スイッチ装置３０から受信したヘッダ情報から宛先ＭＡＣ（Media  Access  Control）アドレスをさらに抽出する。そして、収集部２１０は、抽出したフロー情報に対応するフローに含まれるパケットが送信されるスイッチ装置３０の送信ポートを問い合わせるためのパケットであるDestPhyPortGetパケットを生成する。そして、収集部２１０は、生成したDestPhyPortGetパケットを、管理ポート２３を介して、ヘッダ情報の送信元のスイッチ装置３０へ送信する。DestPhyPortGetパケットは、ポート問合せパケットの一例である。DestPhyPortGetパケットには、宛先ＭＡＣアドレスと、フロー情報とが含まれる。
【００２７】
そして、管理ポート２３を介してスイッチ装置３０から送信ポートのポート番号を受信した場合、収集部２１０は、ポート番号の送信元のスイッチ装置３０に対応する個別テーブルを負荷分散テーブル２２０内で特定する。そして、収集部２１０は、特定した個別テーブル内に、受信したポート番号を、DestPhyPortGetパケットに含まれるフロー情報に対応付けて登録する。
【００２８】
また、収集部２１０は、管理ポート２３を介してスイッチ装置３０から、送信ポート毎の使用率を受信した場合、送信ポート毎の使用率の送信元のスイッチ装置３０に対応する個別テーブルを統計情報テーブル２２１内で特定する。そして、収集部２１０は、受信した送信ポート毎の使用率で、特定した個別テーブル内の使用率を更新する。
【００２９】
変更ポート特定部２１１は、記憶部２２内の負荷分散テーブル２２０および統計情報テーブル２２１を参照して、送信ポートを変更するフロー、および、変更後の送信ポートのポート番号を特定する。例えば、変更ポート特定部２１１は、統計情報テーブル２２１を参照し、スイッチ装置３０毎に、アグリゲーションポートに割り当てられた送信ポートの中で所定値以上の使用率が対応付けられている送信ポートのポート番号が存在するか否かを判定する。所定値とは、例えば９０％の使用率である。
【００３０】
アグリゲーションポートに割り当てられた送信ポートの中に使用率が所定値以上の送信ポートが存在する場合、変更ポート特定部２１１は、アグリゲーションポートに割り当てられた送信ポートの中に、所定値未満の使用率の他の送信ポートが存在するか否かを判定する。アグリゲーションポートに割り当てられた送信ポートの中に所定値未満の使用率の他の送信ポートのポート番号が存在する場合、変更ポート特定部２１１は、使用率が所定値以上の送信ポートのポート番号を変更する送信ポートのポート番号として特定する。また、変更ポート特定部２１１は、使用率が所定値未満の他の送信ポートのポート番号を変更後の送信ポートのポート番号として特定する。
【００３１】
そして、変更ポート特定部２１１は、負荷分散テーブル２２０を参照して、変更する送信ポートのポート番号に対応付けられているフロー情報を、送信ポートを変更するフローのフロー情報として特定する。そして、変更ポート特定部２１１は、特定したフロー情報と、変更後の送信ポートのポート番号とを変更指示送信部２１２へ送信する。
【００３２】
変更指示送信部２１２は、変更ポート特定部２１１からフロー情報と送信ポートのポート番号とを受信した場合、受信したフロー情報とポート番号とを含むDestPhyPortSetパケットを作成する。そして、変更指示送信部２１２は、作成したDestPhyPortSetパケットを、管理ポート２３を介してスイッチ装置３０へ送信する。DestPhyPortSetパケットは、変更指示パケットの一例である。DestPhyPortSetパケットには、フロー情報として、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号、宛先ポート番号、およびプロトコル番号が含まれ、ポート番号として、変更後の送信ポートのポート番号が含まれる。
【００３３】
そして、変更指示送信部２１２は、DestPhyPortSetパケットに対する応答として、パケットのヘッダ内の送信元ポート番号に設定されるハッシュ値を、管理ポート２３を介してスイッチ装置３０から受信する。そして、変更指示送信部２１２は、受信したハッシュ値の送信元のスイッチ装置３０に対応する個別テーブルを負荷分散テーブル２２０内で特定する。そして、変更指示送信部２１２は、特定した個別テーブル内に、DestPhyPortSetパケットに含まれるフロー情報に対応付けて、スイッチ装置３０から受信したハッシュ値を、書き換え後のハッシュ値として登録する。また、変更指示送信部２１２は、特定した個別テーブル内に、DestPhyPortSetパケットに含まれるフロー情報に対応付けて、DestPhyPortSetパケットに含まれるポート番号を、変更後のポート番号として登録する。
【００３４】
［スイッチ装置３０］
図６は、実施例１におけるスイッチ装置３０の一例を示すブロック図である。スイッチ装置３０は、制御部３１、記憶部３２、スイッチングモジュール３３、複数の受信ポート３４−１〜３４−８、複数の送信キュー３５−１〜３５−８、複数の送信ポート３６−１〜３６−８、および管理ポート３７を有する。複数の受信ポート３４−１〜３４−８のそれぞれは、データネットワークを介して、通信装置１４または他のスイッチ装置３０に接続される。複数の送信ポート３６−１〜３６−８のそれぞれは、データネットワークを介して、通信装置１４または他のスイッチ装置３０に接続される。管理ポート３７は、管理ネットワークを介して制御装置２０に接続される。
【００３５】
なお、以下では、複数の受信ポート３４−１〜３４−８のそれぞれを区別することなく総称する場合に受信ポート３４と記載する。また、複数の送信キュー３５−１〜３５−８のそれぞれを区別することなく総称する場合に送信キュー３５と記載する。また、複数の送信ポート３６−１〜３６−８のそれぞれを区別することなく総称する場合に送信ポート３６と記載する。また、本実施例において、複数の受信ポート３４、複数の送信キュー３５、および複数の送信ポート３６は、それぞれ８個ずつ設けられる。また、本実施例において、８個の送信ポート３６の中の４個の送信ポート３６は、アグリゲーションポートに割り当てられている。
【００３６】
記憶部３２は、ハッシュテーブル３２０および書き換えテーブル３２１を記憶する。図７は、ハッシュテーブル３２０の一例を示す図である。ハッシュテーブル３２０には、例えば図７に示すように、インデックス３２００に対応付けて、ハッシュ値３２０１が格納される。インデックス３２００は、アグリゲーションポートに割り当てられた送信ポート３６の数に対応している。本実施例において、アグリゲーションポートに割り当てられた送信ポート３６は４個であるため、インデックス３２００は、０から３の４個の値が割り当てられる。また、本実施例において、ハッシュ値３２０１は、情報処理システム１０の管理者等によってインデックス３２００毎に予め複数の値が算出されてハッシュテーブル３２０に格納される。
【００３７】
ここで、各インデックス３２００に対応付けられたハッシュ値３２０１の算出方法について説明する。本実施例では、ハッシュ演算を例えばＣＲＣ（Cyclic  Redundancy  Check）演算を利用して行う。本実施例では、ＣＲＣ演算として、例えばＣＲＣ１６が用いられる。以下の計算では、ＣＲＣ演算を利用したハッシュ演算を「LagHash()」で表す。
【００３８】
まず、１６ビットの変数ｉの値を０から６５５３５まで変化させ、それぞれの変数ｉについて、下記算出式（１）を計算することにより、６５５３６個のハッシュ値tempを算出する。
temp＝LagHash(0x0000000，0x00000000，ｉ，0x0000，0x00)      ・・・（１）
【００３９】
そして、算出したそれぞれのハッシュ値tempを、アグリゲーションポートに割り当てられた送信ポートの数で割り、余りを算出する。本実施例において、アグリゲーションポートに割り当てられた送信ポートの数は４である。そして、算出したそれぞれのハッシュ値tempを、算出した余りと等しい値のインデックに対応付けて、ハッシュテーブル３２０に登録する。これにより、図７に示すように、ハッシュ値３２０１が、ハッシュ値３２０１の下位２ビットの値のインデックス３２００に対応付けられたハッシュテーブル３２０が生成される。
【００４０】
図８は、書き換えテーブル３２１の一例を示す図である。書き換えテーブル３２１には、例えば図８に示すように、フロー情報３２１０に対応付けて、ハッシュ値３２１１が格納される。本実施例において、フロー情報３２１０には、オリジナルパケットをカプセル化したパケットのヘッダに含まれる、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号、宛先ポート番号、およびプロトコル番号である。なお、フロー情報３２１０内の送信元ポート番号には、オリジナルパケットのヘッダから算出されたハッシュ値が格納されている。ハッシュ値３２１１は、フロー情報３２１０を含むヘッダを有するパケットをスイッチ装置３０が受信した場合に、パケットのヘッダ内の送信元ポート番号がスイッチ装置３０によって書き換えられる値である。
【００４１】
図６に戻って説明を続ける。スイッチングモジュール３３は、パケット受信部３３０、ヘッダ情報抽出部３３１、ヘッダ書換部３３２、ポート特定部３３３、ＦＤＢ３３４、ハッシュ計算部３３５、およびポート選択部３３６を有する。パケット受信部３３０は、通信装置１４または他のスイッチ装置３０から、それぞれの受信ポート３４を介してパケットを受信する。そして、パケット受信部３３０は、受信したパケットを、ヘッダ情報抽出部３３１およびヘッダ書換部３３２へ送信する。
【００４２】
ヘッダ情報抽出部３３１は、パケット受信部３３０から受信したパケットの中で、制御部３１から指示されたモニタリング条件に該当するパケットからヘッダ情報を抽出する。本実施例において、ヘッダ情報抽出部３３１は、パケット受信部３３０が受信したパケットを所定時間毎にサンプリングし、サンプリングしたパケットからヘッダ情報を抽出する。そして、ヘッダ情報抽出部３３１は、抽出したヘッダ情報を制御部３１へ送信する。ヘッダ情報抽出部３３１は、例えばパケットの先頭から１００バイト等の所定数分のビットのデータを機械的に切り取って、ヘッダ情報として制御部３１へ送信してもよい。
【００４３】
ヘッダ書換部３３２は、パケット受信部３３０からパケットを受信した場合に、書き換えテーブル３２１を参照し、パケット受信部３３０から受信したパケットのヘッダに含まれるフロー情報を、書き換えテーブル３２１内で検索する。パケット受信部３３０から受信したパケットのヘッダに含まれるフロー情報が書き換えテーブル３２１内に存在しない場合、ヘッダ書換部３３２は、パケット受信部３３０から受信したパケットをポート特定部３３３へ送信する。
【００４４】
一方、パケット受信部３３０から受信したパケットのヘッダに含まれるフロー情報が書き換えテーブル３２１内に存在する場合、ヘッダ書換部３３２は、フロー情報に対応付けられているハッシュ値を書き換えテーブル３２１から取得する。そして、ヘッダ書換部３３２は、取得したハッシュ値で、パケット受信部３３０から受信したパケットのヘッダ内の送信元ポート番号を書き換える。そして、ヘッダ書換部３３２は、ヘッダ内の送信元ポート番号が書き換えられたパケットをポート特定部３３３へ送信する。
【００４５】
ＦＤＢ３３４には、ＭＡＣアドレスに対応付けて、送信ポート３６のポート番号が格納されている。なお、アグリゲーションポートについては、ＭＡＣアドレスに、アグリゲーションポートに割り当てられた複数の送信ポート３６のポート番号が対応付けられている。
【００４６】
ポート特定部３３３は、ヘッダ書換部３３２からパケットを受信した場合、ヘッダ書換部３３２から受信したパケットのヘッダ内の宛先ＭＡＣアドレスに対応付けられているポート番号を、ＦＤＢ３３４を参照して特定する。そして、ポート特定部３３３は、特定したポート番号を、ヘッダ書換部３３２から受信したパケットと共に、ハッシュ計算部３３５へ送信する。ヘッダ書換部３３２から受信したパケットのヘッダ内の宛先ＭＡＣアドレスに複数のポート番号が対応付けられている場合、ポート特定部３３３は、複数のポート番号を、ＦＤＢ３３４を参照して特定し、パケットと共にハッシュ計算部３３５へ送信する。
【００４７】
また、ポート特定部３３３は、制御部３１からＭＡＣアドレスを受信した場合、ＦＤＢ３３４を参照して、制御部３１から受信したＭＡＣアドレスに対応付けられているポート番号を特定する。そして、ポート特定部３３３は、特定したポート番号を制御部３１へ送信する。
【００４８】
ハッシュ計算部３３５は、ポート特定部３３３からパケットと共にポート番号を受信した場合に、ポート特定部３３３から受信したポート番号が複数か否かを判定する。ポート特定部３３３から受信したポート番号が複数である場合、ハッシュ計算部３３５は、ポート特定部３３３から受信したパケットのヘッダ内のフロー情報を用いてハッシュ値を算出する。本実施例において、ハッシュ計算部３３５は、例えばＣＲＣ１６等のＣＲＣ演算によりフロー情報からハッシュ値を算出する。そして、ハッシュ計算部３３５は、算出したハッシュ値を、ポート特定部３３３から受信した複数のポート番号およびパケットと共にポート選択部３３６へ送信する。一方、パケットと共にポート特定部３３３から受信したポート番号が１つである場合、ハッシュ計算部３３５は、ポート特定部３３３から受信したポート番号とパケットをポート選択部３３６へ送信する。
【００４９】
また、ハッシュ計算部３３５は、制御部３１からフロー情報（送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号）を受信した場合、受信したフロー情報を用いてハッシュ値を算出する。そして、ハッシュ計算部３３５は、算出したハッシュ値を制御部３１へ送信する。また、ハッシュ計算部３３５は、制御部３１から送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号を受信した場合、送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号を用いてハッシュ値を算出する。そして、ハッシュ計算部３３５は、算出したハッシュ値を制御部３１へ送信する。
【００５０】
ポート選択部３３６は、ハッシュ計算部３３５からハッシュ値と共に、複数のポート番号とパケットを受信した場合、受信したハッシュ値に基づいて、受信した複数のポート番号の中から、ポート番号を１つ選択する。本実施例において、スイッチ装置３０には、８個の送信ポート３６が設けられており、８個の送信ポート３６の中の４個の送信ポート３６がアグリゲーションポートに割り当てられている。そして、それぞれのアグリゲーションポートには、０から３までのポート番号が割り当てられている。本実施例において、ポート選択部３３６は、ハッシュ計算部３３５から受信したハッシュ値の下位２ビットの値と同一のポート番号を１つ選択する。そして、ポート選択部３３６は、選択したポート番号に対応する送信ポート３６に接続された送信キュー３５に、ハッシュ計算部３３５から受信したパケットを格納する。
【００５１】
また、ポート選択部３３６は、ハッシュ計算部３３５からパケットと共に１つのポート番号を受信した場合、受信したポート番号に対応する送信ポート３６に接続された送信キュー３５に、受信したパケットを格納する。
【００５２】
また、ポート選択部３３６は、制御部３１から複数のポート番号と共にハッシュ値を受信した場合、受信したハッシュ値に基づいて、受信した複数のポート番号の中からポート番号を１つ選択する。そして、ポート選択部３３６は、選択したポート番号を制御部３１へ送信する。
【００５３】
送信キュー３５は、それぞれの送信ポート３６に対して１つずつ設けられる。送信キュー３５は、ポート選択部３３６から格納されたパケットを、送信キュー３５に接続された送信ポート３６から送信する。
【００５４】
統計情報カウンタ３３７は、送信ポート３６毎に、送信ポート３６から送信されたパケット数を計数する。そして、統計情報カウンタ３３７は、送信ポート３６毎に計数したパケット数に基づいて、送信ポート３６毎の使用率を算出して保持する。そして、制御部３１から使用率を要求された場合、統計情報カウンタ３３７は、送信ポート３６毎の使用率を制御部３１へ送信する。
【００５５】
制御部３１は、ポート番号応答部３１０、ポート変更部３１１、モニタリング条件指示部３１２、統計情報送信部３１３、およびヘッダ情報送信部３１４を有する。ポート番号応答部３１０は、管理ポート３７を介して制御装置２０からDestPhyPortGetパケットを受信した場合、DestPhyPortGetパケットに含まれる宛先ＭＡＣアドレスをポート特定部３３３へ送信する。そして、ポート番号応答部３１０は、ポート特定部３３３からポート番号を受信する。ポート特定部３３３から受信したポート番号が１つである場合、ポート番号応答部３１０は、ポート特定部３３３から受信したポート番号を、管理ポート３７を介して制御装置２０へ送信する。
【００５６】
一方、ポート特定部３３３から受信したポート番号が複数である場合、ポート番号応答部３１０は、DestPhyPortGetパケットに含まれるフロー情報をハッシュ計算部３３５へ送信する。そして、ポート番号応答部３１０は、ハッシュ計算部３３５からハッシュ値を受信する。そして、ポート番号応答部３１０は、ハッシュ計算部３３５から受信したハッシュ値を、ポート特定部３３３から受信した複数のポート番号と共にポート選択部３３６へ送信する。そして、ポート番号応答部３１０は、ポート選択部３３６からポート番号を１つ受信する。そして、ポート番号応答部３１０は、ポート選択部３３６から受信したポート番号を、管理ポート３７を介して制御装置２０へ送信する。
【００５７】
ポート変更部３１１は、管理ポート３７を介して制御装置２０からDestPhyPortSetパケットを受信した場合、DestPhyPortSetパケットに含まれるフロー情報に対応するフローに含まれるパケットのヘッダ内の送信元ポート番号と置き換えるハッシュ値を特定する。そして、ポート変更部３１１は、特定したハッシュ値を、DestPhyPortSetパケットに含まれるフロー情報に対応付けて、書き換えテーブル３２１に登録する。そして、ポート変更部３１１は、DestPhyPortSetパケットの応答として、書き換えテーブル３２１に登録したハッシュ値を、管理ポート３７を介して制御装置２０へ送信する。
【００５８】
ここで、ヘッダ内の送信元ポート番号と置き換えられるハッシュ値の特定方法について説明する。以下の計算では、ＣＲＣ演算を利用したハッシュ演算を「LagHash()」で表す。また、３２ビットの送信元ＩＰアドレスを「SrcIP」で表し、３２ビットの宛先ＩＰアドレスを「DstIP」で表す。また、１６ビットの送信元ポート番号を「SrcPort」で表し、１６ビットの宛先ポート番号を「DstPort」で表し、８ビットのプロトコル番号を「Protocol」で表す。
【００５９】
まず、ＣＲＣ演算の線形性により、以下の関係式（２）が成り立つ。
LagHash(SrcIP，DstIP，SrcPort，DstPort，Protocol)
＝LagHash(SrcIP，DstIP，0x0000，DstPort，Protocol)
＾LagHash(0x00000000，0x00000000，SrcPort，0x0000，0x00)
＝temp1＾temp2                                                    ・・・（２）
【００６０】
ここで、temp1は、「SrcIP」、「DstIP」、「DstPort」、および「Protocol」の各値を用いて算出されたハッシュ値を表す。また、temp2は、「SrcPort」の値から算出されたハッシュ値を表す。また、「＾」はＸＯＲを表す。
【００６１】
本実施例では、パケットが送信される送信ポート３６のポート番号は、フロー情報を用いたハッシュ値の下位２ビットの値で選択される。そのため、ポート選択部３３６によって選択される送信ポート３６のポート番号を「dest」で表すと、以下の関係式（３）が成り立つ。
dest＝LagHash(SrcIP，DstIP，SrcPort，DstPort，Protocol)    AND  0x0003
＝（temp1＾temp2）  AND  0x0003                              ・・・（３）
【００６２】
上記関係式（３）を変形すると、以下の関係式（４）が得られる。
temp1＾dest＝temp2  AND  0x0003              ・・・（４）
【００６３】
上記関係式（４）を参照すると、ハッシュ値temp1とポート番号destとのＸＯＲの計算結果と、下位２ビットが同じ値のハッシュ値temp2が「SrcPort」に設定されていれば、ポート番号destに対応する送信ポート３６からパケットが送信されることが分かる。そのため、送信ポート３６を変更する場合、ハッシュ値temp1と、変更後の送信ポート３６のポート番号destとのＸＯＲと、下位２ビットが同じ値のハッシュ値temp2を「SrcPort」に設定すれば、変更後の送信ポート３６からパケットが送信されることが分かる。下位２ビットの値をインデックスとする複数のハッシュ値は、図７に示したハッシュテーブル３２０に予め登録されている。そのため、ハッシュ値temp1と、変更後の送信ポート３６のポート番号destとのＸＯＲと、下位２ビットが同じ値のハッシュ値temp2は、下位２ビットと同じ値のインデックスに対応付けられたハッシュ値の中から特定することができる。
【００６４】
本実施例において、ポート変更部３１１は、まず、制御装置２０から受信したDestPhyPortSetパケットに含まれるフロー情報の中から、送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号を抽出する。そして、ポート変更部３１１は、抽出した送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号を、ハッシュ計算部３３５へ送信する。そして、ポート変更部３１１は、ハッシュ計算部３３５からハッシュ値temp1を受信する。
【００６５】
次に、ポート変更部３１１は、制御装置２０から受信したDestPhyPortSetパケットに含まれている変更後の送信ポート３６のポート番号と、ハッシュ計算部３３５から受信したハッシュ値temp1とのＸＯＲを計算する。そして、ポート変更部３１１は、ハッシュテーブル３２０を参照して、ＸＯＲの計算結果の下位２ビットと同じ値のインデックスに対応付けられた複数のハッシュ値の中から、１つのハッシュ値をハッシュ値temp2として特定する。例えば、ポート変更部３１１は、ハッシュテーブル３２０内の複数のハッシュ値の中で、前回特定されてからの経過時間が最も長いハッシュ値を特定することが好ましい。そして、ポート変更部３１１は、特定したハッシュ値temp2を、DestPhyPortSetパケットに含まれるフロー情報に対応付けて、書き換えテーブル３２１に登録する。そして、ポート変更部３１１は、DestPhyPortSetパケットの応答として、書き換えテーブル３２１に登録したハッシュ値temp2を、管理ポート３７を介して制御装置２０へ送信する。
【００６６】
これにより、DestPhyPortSetパケットに含まれるフロー情報に対応するフローに含まれるパケットのヘッダ内の送信元ポート番号と置き換えられるハッシュ値temp2が、書き換えテーブル３２１に登録される。そして、ヘッダ書換部３３２は、書き換えテーブル３２１に登録されたフロー情報を含むヘッダを有するパケットについて、パケットのヘッダ内の送信元ポート番号を、書き換えテーブル３２１に格納されたハッシュ値temp2で書き換える。そして、ハッシュ計算部３３５は、送信元ポート番号が書き換えられたヘッダ内のフロー情報を用いてハッシュ値を算出し、ポート選択部３３６は、算出されたハッシュ値に基づいて送信ポート３６を選択する。これにより、DestPhyPortSetパケットに含まれたフロー情報をヘッダに含むパケットが、DestPhyPortSetパケットに含まれたポート番号の送信ポート３６から送信される。
【００６７】
これにより、制御装置２０は、フローに含まれるパケットが送信される送信ポート３６を任意に変更することができる。そのため、制御装置２０は、複数のスイッチ装置３０により構成された情報処理システム１０において、フローの伝送経路の偏りを抑制することができる。また、制御装置２０は、特定のスイッチ装置３０を通るフローを増減させることも可能となる。このように、制御装置２０は、フローの伝送経路のきめ細かい運用管理を行うことができる。
【００６８】
モニタリング条件指示部３１２は、管理ポート３７を介して制御装置２０からパケットのモニタリング条件を受信し、受信したモニタリング条件をヘッダ情報抽出部３３１に指示する。統計情報送信部３１３は、所定のタイミング毎に、統計情報カウンタ３３７に送信ポート３６毎の使用率を要求し、送信ポート３６毎の使用率を統計情報カウンタ３３７から受信する。そして、統計情報送信部３１３は、受信した送信ポート３６毎の使用率を、管理ポート３７を介して制御装置２０へ送信する。ヘッダ情報送信部３１４は、ヘッダ情報抽出部３３１からヘッダ情報を受信する。そして、ヘッダ情報送信部３１４は、受信したヘッダ情報を、管理ポート３７を介して制御装置２０へ送信する。
【００６９】
［制御装置２０の動作］
図９は、実施例１における制御装置２０の動作の一例を示すフローチャートである。
【００７０】
まず、収集部２１０は、管理ポート２３を介してスイッチ装置３０からヘッダ情報を受信したか否かを判定する（Ｓ１００）。スイッチ装置３０からヘッダ情報を受信した場合（Ｓ１００：Ｙｅｓ）、収集部２１０は、受信したヘッダ情報から、フロー情報として、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号、宛先ポート番号、およびプロトコル番号を抽出する。そして、収集部２１０は、ヘッダ情報の送信元のスイッチ装置３０に対応する個別テーブルを負荷分散テーブル２２０内で特定する。そして、収集部２１０は、特定した個別テーブル内に、受信したヘッダ情報から抽出したフロー情報が既に登録されているか否かを判定する（Ｓ１０１）。
【００７１】
ヘッダ情報から抽出されたフロー情報が個別テーブル内に既に登録されている場合（Ｓ１０１：Ｙｅｓ）、変更ポート特定部２１１は、ステップＳ１０６に示す処理を実行する。一方、ヘッダ情報から抽出したフロー情報が個別テーブル内に登録されていない場合（Ｓ１０１：Ｎｏ）、収集部２１０は、負荷分散テーブル２２０内に空きがあるか否かを判定する（Ｓ１０２）。負荷分散テーブル２２０内に空きがある場合（Ｓ１０２：Ｙｅｓ）、収集部２１０は、ステップＳ１０３に示す処理を実行する。
【００７２】
一方、負荷分散テーブル２２０内に空きがない場合（Ｓ１０２：Ｎｏ）、収集部２１０は、負荷分散テーブル２２０内のエントリを１つ削除する（Ｓ１０５）。収集部２１０は、例えば、タイムスタンプが示す時刻からの経過時間が最も長いタイムスタンプを含むエントリを負荷分散テーブル２２０から削除する。負荷分散テーブル２２０内のエントリとは、フロー情報、ポート番号、書き換え後のハッシュ値、変更後のポート番号、およびタイムスタンプである。
【００７３】
次に、収集部２１０は、ヘッダ情報から宛先ＭＡＣアドレスをさらに抽出し、ヘッダ情報から抽出した宛先ＭＡＣアドレスおよびフロー情報を含むDestPhyPortGetパケットを生成する。そして、収集部２１０は、生成したDestPhyPortGetパケットをヘッダ情報の送信元のスイッチ装置３０へ送信する（Ｓ１０３）。そして、収集部２１０は、スイッチ装置３０からポート番号を受信する。そして、収集部２１０は、ヘッダ情報から抽出したフロー情報に対応するフローＩＤを生成し、生成したフローＩＤに対応付けて、フロー情報およびスイッチ装置３０から受信したポート番号を負荷分散テーブル２２０内の個別テーブルに登録する（Ｓ１０４）。
【００７４】
次に、変更ポート特定部２１１は、フローに含まれるパケットが送信される送信ポート３６を変更するか否かを判定する（Ｓ１０６）。変更ポート特定部２１１は、例えば、アグリゲーションポートに割り当てられた送信ポート３６の中で、使用率が所定値以上の送信ポート３６を、変更する送信ポート３６と判定する。変更ポート特定部２１１が送信ポート３６を変更しない場合（Ｓ１０６：Ｎｏ）、収集部２１０は、再びステップＳ１００に示した処理を実行する。
【００７５】
一方、送信ポート３６を変更する場合（Ｓ１０６：Ｙｅｓ）、変更ポート特定部２１１は、変更後の送信ポート３６を特定する（Ｓ１０７）。変更ポート特定部２１１は、例えば、アグリゲーションポートに割り当てられた送信ポート３６の中で、使用率が所定値未満の他の送信ポート３６を、変更後の送信ポート３６として特定する。そして、変更ポート特定部２１１は、送信するパケットが含まれるフローのフロー情報と、変更後の送信ポートのポート番号とを変更指示送信部２１２へ送信する。
【００７６】
次に、変更指示送信部２１２は、変更ポート特定部２１１から受信したフロー情報とポート番号とを含むDestPhyPortSetパケットを作成する。そして、変更指示送信部２１２は、作成したDestPhyPortSetパケットを、管理ポート２３を介してスイッチ装置３０へ送信する（Ｓ１０８）。そして、変更指示送信部２１２は、DestPhyPortSetパケットに対する応答として、パケットのヘッダ内の送信元ポート番号と置き換えられるハッシュ値を、スイッチ装置３０から受信したか否かを判定する（Ｓ１０９）。
【００７７】
ハッシュ値をスイッチ装置３０から受信した場合（Ｓ１０９：Ｙｅｓ）、変更指示送信部２１２は、受信したハッシュ値の送信元のスイッチ装置３０のスイッチＩＤに対応する個別テーブルを負荷分散テーブル２２０内で特定する。そして、変更指示送信部２１２は、特定した個別テーブル内に、DestPhyPortSetパケットに含まれるフロー情報に対応付けて、スイッチ装置３０から受信したハッシュ値を、書き換え後のハッシュ値として登録する。また、変更指示送信部２１２は、特定した個別テーブル内に、DestPhyPortSetパケットに含まれるフロー情報に対応付けて、DestPhyPortSetパケットに含まれるポート番号を、変更後のポート番号として登録する（Ｓ１１０）。そして、収集部２１０は、再びステップＳ１００に示した処理を実行する。
【００７８】
収集部２１０がスイッチ装置３０からヘッダ情報を受信していない場合（Ｓ１００：Ｎｏ）、収集部２１０は、管理ポート２３を介してスイッチ装置３０から、送信ポート３６毎の使用率を受信したか否かを判定する（Ｓ１１１）。送信ポート３６毎の使用率を受信した場合（Ｓ１１１：Ｙｅｓ）、収集部２１０は、送信ポート３６毎の使用率の送信元のスイッチ装置３０に対応する個別テーブルを統計情報テーブル２２１内で特定する。そして、収集部２１０は、受信した送信ポート３６毎の使用率で、特定した個別テーブル内の使用率を更新する（Ｓ１１２）。そして、収集部２１０は、再びステップＳ１００に示した処理を実行する。
【００７９】
［スイッチ装置３０の動作］
図１０は、実施例１におけるスイッチ装置３０の動作の一例を示すフローチャートである。なお、図１０に示すフローチャートに先立って、モニタリング条件指示部３１２は、制御装置２０からモニタリング条件を受信し、受信したモニタリング条件をヘッダ情報抽出部３３１に指示している。
【００８０】
まず、パケット受信部３３０は、受信ポート３４を介してパケットを受信したか否かを判定する（Ｓ２００）。パケットを受信した場合（Ｓ２００：Ｙｅｓ）、パケット受信部３３０は、受信したパケットを、ヘッダ情報抽出部３３１およびヘッダ書換部３３２へ送信する。そして、スイッチ装置３０は、後述するパケット転送処理を実行する（Ｓ２１０）。そして、パケット受信部３３０は、再びステップＳ２００に示した処理を実行する。
【００８１】
一方、パケット受信部３３０がパケットを受信していない場合（Ｓ２００：Ｎｏ）、ポート番号応答部３１０は、管理ポート３７を介して制御装置２０からDestPhyPortGetパケットを受信したか否かを判定する（Ｓ２０１）。ポート番号応答部３１０がDestPhyPortGetパケットを受信した場合（Ｓ２０１：Ｙｅｓ）、スイッチ装置３０は、後述するポート番号応答処理を実行する（Ｓ２３０）。そして、パケット受信部３３０は、再びステップＳ２００に示した処理を実行する。
【００８２】
一方、ポート番号応答部３１０がDestPhyPortGetパケットを受信していない場合（Ｓ２０１：Ｎｏ）、ポート変更部３１１は、管理ポート３７を介して制御装置２０からDestPhyPortSetパケットを受信したか否かを判定する（Ｓ２０２）。ポート変更部３１１がDestPhyPortSetパケットを受信した場合（Ｓ２０２：Ｙｅｓ）、スイッチ装置３０は、後述する書き換え設定処理を実行する（Ｓ２４０）。そして、パケット受信部３３０は、再びステップＳ２００に示した処理を実行する。
【００８３】
一方、ポート変更部３１１がDestPhyPortSetパケットを受信していない場合（Ｓ２０２：Ｎｏ）、統計情報送信部３１３は、送信ポート３６毎の使用率の送信タイミングか否かを判定する（Ｓ２０３）。送信ポート３６毎の使用率の送信タイミングではない場合（Ｓ２０３：Ｎｏ）、パケット受信部３３０は、再びステップＳ２００に示した処理を実行する。
【００８４】
一方、送信ポート３６毎の使用率の送信タイミングである場合（Ｓ２０３：Ｙｅｓ）、統計情報送信部３１３は、統計情報カウンタ３３７に送信ポート３６毎の使用率を要求し、送信ポート３６毎の使用率を統計情報カウンタ３３７から受信する。そして、統計情報送信部３１３は、受信した送信ポート３６毎の使用率を、管理ポート３７を介して制御装置２０へ送信する（Ｓ２０４）。そして、パケット受信部３３０は、再びステップＳ２００に示した処理を実行する。
【００８５】
［パケット転送処理］
図１１は、実施例１におけるパケット転送処理の一例を示すフローチャートである。
【００８６】
まず、ヘッダ情報抽出部３３１は、パケット受信部３３０から受信したパケットが、制御部３１から指示されたモニタリング条件に該当するか否かを判定する（Ｓ２１１）。パケット受信部３３０から受信したパケットがモニタリング条件に該当しない場合（Ｓ２１１：Ｎｏ）、ヘッダ書換部３３２は、ステップＳ２１４に示す処理を実行する。
【００８７】
一方、パケット受信部３３０から受信したパケットがモニタリング条件に該当する場合（Ｓ２１１：Ｙｅｓ）、ヘッダ情報抽出部３３１は、パケット受信部３３０から受信したパケットからヘッダ情報を抽出する（Ｓ２１２）。そして、ヘッダ情報抽出部３３１は、抽出したヘッダ情報を、ヘッダ情報送信部３１４へ送信する。ヘッダ情報送信部３１４は、ヘッダ情報抽出部３３１から受信したヘッダ情報を、管理ポート３７を介して制御装置２０へ送信する（Ｓ２１３）。
【００８８】
次に、ヘッダ書換部３３２は、パケット受信部３３０から受信したパケットのヘッダからフロー情報を抽出する。そして、ヘッダ書換部３３２は、抽出したフロー情報が、書き換えテーブル３２１に登録されているか否かを判定することにより、パケット受信部３３０から受信したパケットがヘッダの書き換え対象のパケットか否かを判定する（Ｓ２１４）。パケット受信部３３０から受信したパケットがヘッダの書き換え対象のパケットではない場合（Ｓ２１４：Ｎｏ）、ヘッダ書換部３３２は、パケット受信部３３０から受信したパケットを、ヘッダを書き換えることなくポート特定部３３３へ送信する。そして、ポート特定部３３３は、ステップＳ２１６に示す処理を実行する。
【００８９】
一方、パケット受信部３３０から受信したパケットがヘッダの書き換え対象のパケットである場合（Ｓ２１４：Ｙｅｓ）、ヘッダ書換部３３２は、ヘッダから抽出したフロー情報に対応付けて書き換えテーブル３２１に登録されているハッシュ値を取得する。そして、ヘッダ書換部３３２は、取得したハッシュ値で、パケット受信部３３０から受信したパケットのヘッダ内の送信元ポート番号を書き換える（Ｓ２１５）。そして、ヘッダ書換部３３２は、ヘッダ内の送信元ポート番号を書き換えたパケットをポート特定部３３３へ送信する。
【００９０】
次に、ポート特定部３３３は、ＦＤＢ３３４を参照して、ヘッダ書換部３３２から受信したパケットのヘッダ内の宛先ＭＡＣアドレスに対応付けられているポート番号を特定する（Ｓ２１６）。そして、ポート特定部３３３は、特定したポート番号を、ヘッダ書換部３３２から受信したパケットと共に、ハッシュ計算部３３５へ送信する。
【００９１】
次に、ハッシュ計算部３３５は、ポート特定部３３３によって複数のポート番号が特定されたか否かを判定する（Ｓ２１７）。ポート特定部３３３によって複数のポート番号が特定された場合（Ｓ２１７：Ｙｅｓ）、ハッシュ計算部３３５は、ポート特定部３３３から受信したパケットのヘッダ内のフロー情報を用いてハッシュ値を算出する（Ｓ２１８）。そして、ハッシュ計算部３３５は、算出したハッシュ値を、ポート特定部３３３から受信した複数のポート番号およびパケットと共にポート選択部３３６へ送信する。
【００９２】
次に、ポート選択部３３６は、ハッシュ計算部３３５から受信したハッシュ値に基づいて、ハッシュ計算部３３５から受信した複数のポート番号の中から、ポート番号を１つ選択する（Ｓ２１９）。そして、ポート選択部３３６は、選択したポート番号に対応する送信ポート３６に接続された送信キュー３５に、ハッシュ計算部３３５から受信したパケットを格納する。送信キュー３５は、格納されたパケットを、送信キュー３５に接続された送信ポート３６から送信する（Ｓ２２０）。
【００９３】
一方、ポート特定部３３３によって１つのポート番号が特定された場合（Ｓ２１７：Ｎｏ）、ハッシュ計算部３３５は、ポート特定部３３３から受信したポート番号とパケットをポート選択部３３６へ送信する。ポート選択部３３６は、ポート特定部３３３によって特定されたポート番号に対応する送信ポート３６に接続された送信キュー３５に、ハッシュ計算部３３５から受信したパケットを格納する。送信キュー３５は、格納されたパケットを、送信キュー３５に接続された送信ポート３６から送信する（Ｓ２２１）。
【００９４】
［ポート番号応答処理］
図１２は、ポート番号応答処理の一例を示すフローチャートである。
【００９５】
まず、ポート番号応答部３１０は、管理ポート３７を介して制御装置２０から受信したDestPhyPortGetパケットに含まれる宛先ＭＡＣアドレスをポート特定部３３３へ送信する。ポート特定部３３３は、ＦＤＢ３３４を参照して、ポート番号応答部３１０から受信した宛先ＭＡＣアドレスに対応付けられたポート番号を特定する（Ｓ２３１）。そして、ポート特定部３３３は、特定したポート番号をポート番号応答部３１０へ送信する。
【００９６】
ポート番号応答部３１０は、ポート特定部３３３によって複数のポート番号が特定されたか否かを判定する（Ｓ２３２）。ポート特定部３３３によって１つのポート番号が特定された場合（Ｓ２３２：Ｎｏ）、ポート番号応答部３１０は、ポート特定部３３３から受信したポート番号を、管理ポート３７を介して制御装置２０へ送信する（Ｓ２３５）。
【００９７】
一方、ポート特定部３３３によって複数のポート番号が特定された場合（Ｓ２３２：Ｙｅｓ）、ポート番号応答部３１０は、制御装置２０から受信したDestPhyPortGetパケットに含まれるフロー情報をハッシュ計算部３３５へ送信する。ハッシュ計算部３３５は、ポート番号応答部３１０から受信したフロー情報を用いてハッシュ値を算出する（Ｓ２３３）。そして、ハッシュ計算部３３５は、算出したハッシュ値をポート番号応答部３１０へ送信する。
【００９８】
次に、ポート番号応答部３１０は、ハッシュ計算部３３５から受信したハッシュ値を、ポート特定部３３３から受信した複数のポート番号と共にポート選択部３３６へ送信する。ポート選択部３３６は、ポート番号応答部３１０から受信したハッシュ値に基づいて、ポート番号応答部３１０から受信した複数のポート番号の中からポート番号を１つ選択する（Ｓ２３４）。そして、ポート選択部３３６は、選択したポート番号をポート番号応答部３１０へ送信する。ポート番号応答部３１０は、ステップＳ２３５に示した処理を実行する。
【００９９】
［書き換え設定処理］
図１３は、実施例１における書き換え設定処理の一例を示すフローチャートである。
【０１００】
まず、ポート変更部３１１は、管理ポート３７を介して制御装置２０から受信したDestPhyPortSetパケットに含まれるフロー情報の中から、送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号を抽出する。そして、ポート変更部３１１は、抽出した送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号を、ハッシュ計算部３３５へ送信する。ハッシュ計算部３３５は、ポート変更部３１１から受信した送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号を用いて、前述のハッシュ値temp1を算出する（Ｓ２４１）。そして、ハッシュ計算部３３５は、算出したハッシュ値temp1をポート変更部３１１へ送信する。
【０１０１】
次に、ポート変更部３１１は、制御装置２０から受信したDestPhyPortSetパケットに含まれている変更後の送信ポート３６のポート番号と、ハッシュ計算部３３５から受信したハッシュ値temp1とのＸＯＲを計算する（Ｓ２４２）。そして、ポート変更部３１１は、ハッシュテーブル３２０を参照して、ＸＯＲの計算結果の下位２ビットと同じ値のインデックスに対応付けられた複数のハッシュ値の中から、１つのハッシュ値をハッシュ値temp2として特定する（Ｓ２４３）。そして、ポート変更部３１１は、特定したハッシュ値temp2を、DestPhyPortSetパケットに含まれるフロー情報に対応付けて、書き換えテーブル３２１に登録する（Ｓ２４４）。そして、ポート変更部３１１は、DestPhyPortSetパケットの応答として、書き換えテーブル３２１に登録したハッシュ値を、管理ポート３７を介して制御装置２０へ送信する（Ｓ２４５）。
【０１０２】
［効果］
上述したように、本実施例の制御装置２０は、サンプリングされたパケットのヘッダ情報を収集し、パケットが送信される送信ポートのポート番号に対応付けて、パケットを含むフローの情報を管理する。そして、フローに含まれるパケットを送信する送信ポートを変更する場合、制御装置２０は、フローの情報と変更後の送信ポートのポート番号とをスイッチ装置３０に指示する。スイッチ装置３０は、制御装置２０から指示されたフローに含まれるパケットが送信される送信ポートのポート番号として、制御装置２０から指示されたポート番号が選択されるように、ヘッダ内の送信元ポート番号に設定されるハッシュ値を算出する。そして、スイッチ装置３０は、制御装置２０から指示されたフローに含まれるパケットを受信した場合、受信したパケットの送信元ポート番号を、算出したハッシュ値に書き換える。これにより、制御装置２０から指示されたフローに含まれるパケットを含むフローが、制御装置２０から指示された、変更後のポート番号に対応する送信ポートから送信される。これにより、制御装置２０は、フローの伝送経路のきめ細かい運用管理を行うことができる。
【実施例２】
【０１０３】
実施例１におけるヘッダ情報抽出部３３１は、所定時間または所定個数毎に、パケット受信部３３０が受信したパケットのヘッダ情報を抽出する。これに対し、本実施例におけるヘッダ情報抽出部３３１は、受信部３３０が受信したパケットの中で、カプセル化されているオリジナルパケットの属性に応じて、パケットのヘッダ情報を抽出するか否かを判定する点が異なる。
【０１０４】
本実施例におけるヘッダ情報抽出部３３１は、カプセル化されているオリジナルパケットが、例えばＴＣＰ等のコネクション型の通信に用いられるパケットであり、かつ、コネクションの確立または解放を示すパケットである場合、パケットのヘッダ情報を抽出する。なお、カプセル化されたオリジナルパケットが、ＵＤＰ等のコネクションレス型の通信に用いられるパケットである場合、ヘッダ情報抽出部３３１は、実施例１と同様に、所定時間又は所定個数毎にパケット受信部３３０が受信したパケットのヘッダ情報を抽出する。
【０１０５】
なお、本実施例における情報処理システム１０、制御装置２０、およびスイッチ装置３０は、図１から図８を用いて説明した実施例１における情報処理システム１０、制御装置２０、およびスイッチ装置３０と同様であるため、詳細な説明を省略する。また、本実施例におけるスイッチ装置３０の動作は、図１０を用いて説明した実施例１におけるスイッチ装置３０の動作と同様であるため、詳細な説明を省略する。また、本実施例のスイッチ装置３０におけるポート番号応答処理は、図１２を用いて説明した実施例１のスイッチ装置３０におけるポート番号応答処理と同様であるため、詳細な説明を省略する。また、本実施例のスイッチ装置３０における書き換え設定処理は、図１３を用いて説明した実施例１のスイッチ装置３０における書き換え設定処理と同様であるため、詳細な説明を省略する。
【０１０６】
［パケット転送処理］
図１４は、実施例２におけるパケット転送処理の一例を示すフローチャートである。本実施例のスイッチ装置３０におけるパケット転送処理は、以下に説明する点を除き、図１１を用いて説明した実施例１のスイッチ装置３０におけるパケット転送処理と同様である。そのため、以下では、主に、実施例１におけるパケット転送処理と異なる点について説明する。
【０１０７】
まず、ヘッダ情報抽出部３３１は、パケット受信部３３０から受信したパケットにカプセル化されているオリジナルパケットのヘッダを抽出する。そして、ヘッダ情報抽出部３３１は、抽出したヘッダ内のプロトコル番号を参照して、オリジナルパケットがコネクションレス型の通信に用いられるパケットか否かを判定する（Ｓ２２５）。オリジナルパケットがコネクションレス型の通信に用いられるパケットである場合（Ｓ２２５：Ｙｅｓ）、ヘッダ情報抽出部３３１は、パケット受信部３３０から受信したパケットがモニタリング条件に該当するか否かを判定する（Ｓ２１１）。
【０１０８】
パケット受信部３３０から受信したパケットがモニタリング条件に該当しない場合（Ｓ２１１：Ｎｏ）、ヘッダ書換部３３２は、図１１のステップＳ２１４に示した処理を実行する。一方、パケット受信部３３０から受信したパケットがモニタリング条件に該当する場合（Ｓ２１１：Ｙｅｓ）、ヘッダ情報抽出部３３１は、パケット受信部３３０から受信したパケットからヘッダ情報を抽出する（Ｓ２１２）。そして、ヘッダ情報抽出部３３１は、抽出したヘッダ情報を、ヘッダ情報送信部３１４へ送信する。ヘッダ情報送信部３１４は、ヘッダ情報抽出部３３１から受信したヘッダ情報を、管理ポート３７を介して制御装置２０へ送信する（Ｓ２１３）。そして、スイッチ装置３０は、図１１において説明したステップＳ２１４〜Ｓ２２１の処理を実行する。
【０１０９】
一方、オリジナルパケットがコネクション型の通信に用いられるパケットである場合（Ｓ２２５：Ｎｏ）、ヘッダ情報抽出部３３１は、オリジナルパケットのヘッダに含まれるコントロールフラグを参照する。そして、ヘッダ情報抽出部３３１は、オリジナルパケットがコネクションの確立を示すパケットであるか否かを判定する（Ｓ２２６）。ヘッダ情報抽出部３３１は、例えば、コントロールフラグ内のSYNビットおよびACKビットが１であるか否かを判定することにより、オリジナルパケットがコネクションの確立を示すパケットであるか否かを判定する。オリジナルパケットがコネクションの確立を示すパケットである場合（Ｓ２２６：Ｙｅｓ）、ヘッダ情報抽出部３３１は、ステップＳ２１２に示した処理を実行する。
【０１１０】
一方、オリジナルパケットがコネクションの確立を示すパケットではない場合（Ｓ２２６：Ｎｏ）、ヘッダ情報抽出部３３１は、オリジナルパケットがコネクションの解放を示すパケットであるか否かを判定する（Ｓ２２７）。ヘッダ情報抽出部３３１は、例えば、コントロールフラグ内のFINビットおよびACKビットが１であるか否かを判定することにより、オリジナルパケットがコネクションの解放を示すパケットであるか否かを判定する。オリジナルパケットがコネクションの解放を示すパケットではない場合（Ｓ２２７：Ｎｏ）、スイッチ装置３０は、図１１において説明したステップＳ２１４〜Ｓ２２１の処理を実行する。
【０１１１】
一方、オリジナルパケットがコネクションの解放を示すパケットである場合（Ｓ２２７：Ｙｅｓ）、ヘッダ情報抽出部３３１は、パケット受信部３３０から受信したパケットのヘッダ情報を抽出する（Ｓ２２８）。そして、ヘッダ情報抽出部３３１は、抽出したヘッダ情報と共に、コネクションの解放を示す情報を、ヘッダ情報送信部３１４へ送信する。ヘッダ情報送信部３１４は、ヘッダ情報抽出部３３１から受信したヘッダ情報と共に、ヘッダ情報抽出部３３１から受信したコネクションの解放を示す情報を、管理ポート３７を介して制御装置２０へ送信する（Ｓ２２９）。そして、スイッチ装置３０は、図１１において説明したステップＳ２１４〜Ｓ２２１の処理を実行する。
【０１１２】
［制御装置２０の動作］
図１５は、実施例２における制御装置２０の動作の一例を示すフローチャートである。本実施例における制御装置２０の動作は、以下に説明する点を除き、図９を用いて説明した実施例１における制御装置２０の動作と同様である。そのため、以下では、主に、実施例１における制御装置２０の動作と異なる点について説明する。
【０１１３】
まず、収集部２１０は、管理ポート２３を介してスイッチ装置３０からヘッダ情報を受信したか否かを判定する（Ｓ１００）。収集部２１０がスイッチ装置３０からヘッダ情報を受信していない場合（Ｓ１００：Ｎｏ）、制御装置２０は、図９において説明したステップＳ１０６〜Ｓ１１２の処理を実行する。
【０１１４】
一方、スイッチ装置３０からヘッダ情報を受信した場合（Ｓ１００：Ｙｅｓ）、収集部２１０は、ヘッダ情報と共に、コネクションの解放を示す情報を受信したか否かを判定する（Ｓ１２０）。コネクションの解放を示す情報を受信していない場合（Ｓ１２０：Ｎｏ）、制御装置２０は、図９において説明したステップＳ１０１〜Ｓ１０５の処理を実行する。
【０１１５】
一方、ヘッダ情報と共にコネクションの解放を示す情報を受信した場合（Ｓ１２０：Ｙｅｓ）、収集部２１０は、受信したヘッダ情報から、フロー情報を抽出する。そして、収集部２１０は、ヘッダ情報の送信元のスイッチ装置３０に対応する個別テーブルを負荷分散テーブル２２０内で特定する。そして、収集部２１０は、受信したヘッダ情報から抽出したフロー情報を含むエントリを、特定した個別テーブルから削除する（Ｓ１２１）。そして、収集部２１０は、再びステップＳ１００に示した処理を実行する。
【０１１６】
［効果］
上述したように、本実施例のスイッチ装置３０は、カプセル化されたオリジナルパケットがコネクション型の通信に用いられるパケットであり、かつ、コネクションの確立を示すパケットである場合に、パケットのヘッダ情報を抽出して制御装置２０へ送信する。これにより、制御装置２０は、コネクション型の通信を行うフローについては、コネクションが確立されるタイミングで、フローに関する情報を負荷分散テーブル２２０に登録することができる。
【０１１７】
また、本実施例のスイッチ装置３０は、オリジナルパケットがコネクション型の通信に用いられるパケットであり、かつ、コネクションの解放を示すパケットである場合に、抽出したヘッダ情報と共に、コネクションの解放を示す情報を制御装置２０へ送信する。これにより、制御装置２０は、コネクション型の通信を行うフローについては、コネクションが解放されたフローの情報を負荷分散テーブル２２０から削除することができる。これにより、記憶部２２内のデータ量の増大を抑えることができる。
【０１１８】
また、本実施例のスイッチ装置３０は、オリジナルパケットがコネクション型の通信に用いられるパケットである場合に、コネクションの確立または解放を示すパケットのヘッダ情報を抽出して制御装置２０へ送信する。これにより、スイッチ装置３０は、オリジナルパケットがコネクション型の通信に用いられるパケットである場合に、コネクションの確立または解放を示すパケット以外のパケットのヘッダ情報を制御装置２０へ送信しない。そのため、ヘッダ情報の送信に伴う通信トラフィックの増加を抑えることができる。
【実施例３】
【０１１９】
本実施例では、パケットのヘッダ内の送信元ポートを書き換える場合、パケットの送信元の通信装置１４に接続されたスイッチ装置３０が、パケットのヘッダ内の送信元ポートを書き換える。そして、パケットの宛先の通信装置１４に接続されたスイッチ装置３０が、書き換えられたヘッダ内の送信元ポート番号を書き戻す（元のハッシュ値に戻す）。なお、本実施例における情報処理システム１０は、図１を用いて説明した実施例１における情報処理システム１０と同様であるため、詳細な説明を省略する。
【０１２０】
［制御装置２０］
図１６は、実施例３における制御装置２０の一例を示すブロック図である。制御装置２０は、制御部２１、記憶部２２、および管理ポート２３を有する。制御部２１は、収集部２１０、変更ポート特定部２１１、および変更指示送信部２１２を有する。本実施例における記憶部２２は、負荷分散テーブル２２０、統計情報テーブル２２１、およびスイッチテーブル２２２を記憶する。なお、以下に説明する点を除き、図１６において、図３と同じ符号を付したブロックは、図３におけるブロックと同一または同様であるため説明を省略する。
【０１２１】
図１７は、スイッチテーブル２２２の一例を示す図である。スイッチテーブル２２２には、それぞれのスイッチ装置３０を識別するスイッチＩＤ２２２０に対応付けて、スイッチ装置３０のアドレス情報２２２１が格納される。本実施例において、アドレス情報２２２１は、スイッチ装置３０のＩＰアドレスである。
【０１２２】
ここで、それぞれの通信装置１４内に設けられた論理チャネルの終端装置は、仮想サーバから送信されたオリジナルパケットのヘッダを用いて算出したハッシュ値を、オリジナルパケットをカプセル化したパケットのヘッダ内の送信元ポート番号に設定する。パケットの伝送経路の途中にあるスイッチ装置３０がヘッダ内の送信元ポート番号を書き換えなければ、宛先の通信装置１４が受信するパケットのヘッダ内の送信元ポート番号は、送信元の通信装置１４が送信したパケットのヘッダ内の送信元ポート番号と同じ値である。
【０１２３】
しかし、制御装置２０からの指示により、パケットの伝送経路の途中にあるスイッチ装置３０が、ヘッダ内の送信元ポート番号を書き換えた場合、宛先の通信装置１４が受信するパケットのヘッダ内の送信元ポート番号は、送信元の通信装置１４が送信したパケットのヘッダ内の送信元ポート番号とは異なる値となる。ネットワーク内を流れるパケットは、送信側の装置から送信されたパケットと同じパケットが、受信側の装置において受信されることが好ましい。これにより、ネットワーク内での改竄やデータの破損の検出等が可能となる。
【０１２４】
そこで、本実施例では、送信元の通信装置１４に接続されたスイッチ装置３０がヘッダ内の送信元ポート番号を書き換え、宛先の通信装置１４に接続されたスイッチ装置３０が、書き換えられたヘッダ内の送信元ポート番号を元に戻す。これにより、送信元の通信装置１４から送信されたパケットと同じパケットが、宛先の通信装置１４において受信されることになる。以下では、ヘッダ内の送信元ポート番号を書き換えるスイッチ装置３０を、第１のスイッチ装置３０と呼び、書き換えられたヘッダ内の送信元ポート番号を元に戻すスイッチ装置３０を、第２のスイッチ装置３０と呼ぶ。
【０１２５】
本実施例における変更ポート特定部２１１は、記憶部２２内の負荷分散テーブル２２０および統計情報テーブル２２１を参照して、送信ポートを変更するフローを特定する。そして、変更ポート特定部２１１は、特定したフローにおいて、送信ポートの変更を指示する第１のスイッチ装置３０と、送信ポートを元に戻す指示行う第２のスイッチ装置３０とを特定する。制御装置２０は、情報処理システム１０のトポロジーに関する情報を保持しており、変更ポート特定部２１１は、例えばトポロジーに関する情報を参照して、フローの伝送経路上にある第１のスイッチ装置３０と第２のスイッチ装置３０とを特定する。そして、変更ポート特定部２１１は、送信ポートを変更するフローのフロー情報と、変更後の送信ポートのポート番号と、第１のスイッチ装置３０のスイッチＩＤと、第２のスイッチ装置３０のスイッチＩＤとを変更指示送信部２１２へ送信する。
【０１２６】
変更指示送信部２１２は、変更ポート特定部２１１から、フロー情報、送信ポート、第１のスイッチ装置３０のスイッチＩＤ、および第２のスイッチ装置３０のスイッチＩＤを受信した場合、第２のスイッチ装置３０のアドレス情報をスイッチテーブル２２２から取得する。そして、変更指示送信部２１２は、変更ポート特定部２１１から受信したフロー情報およびポート番号と、スイッチテーブル２２２から取得した第２のスイッチ装置３０のアドレス情報とを含むDestPhyPortSetパケットを作成する。そして、変更指示送信部２１２は、作成したDestPhyPortSetパケットを、管理ポート２３を介して第１のスイッチ装置３０へ送信する。
【０１２７】
［スイッチ装置３０］
図１８は、実施例３におけるスイッチ装置３０の一例を示すブロック図である。スイッチ装置３０は、制御部３１、記憶部３２、スイッチングモジュール３３、複数の受信ポート３４−１〜３４−８、複数の送信キュー３５−１〜３５−８、複数の送信ポート３６−１〜３６−８、および管理ポート３７を有する。本実施例における制御部３１は、ポート番号応答部３１０、ポート変更部３１１、モニタリング条件指示部３１２、統計情報送信部３１３、ヘッダ情報送信部３１４、書き戻し依頼送信部３１５、および書き戻し設定部３１６を有する。なお、以下に説明する点を除き、図１８において、図６と同じ符号を付したブロックは、図６におけるブロックと同一または同様であるため説明を省略する。
【０１２８】
ポート変更部３１１は、管理ポート３７を介して制御装置２０からDestPhyPortSetパケットを受信した場合、パケットのヘッダ内の送信元ポート番号と置き換えるハッシュ値temp2を特定し、特定したハッシュ値temp2を書き換えテーブル３２１に登録する。そして、ポート変更部３１１は、書き換えテーブル３２１に登録したハッシュ値temp2を、管理ポート３７を介して制御装置２０へ送信する。そして、ポート変更部３１１は、制御装置２０から受信したDestPhyPortSetパケットと、特定したハッシュ値temp2とを書き戻し依頼送信部３１５へ送信する。
【０１２９】
書き戻し依頼送信部３１５は、ポート変更部３１１からDestPhyPortSetパケットとハッシュ値temp2とを受信した場合、DestPhyPortSetパケットからフロー情報と第２のスイッチ装置３０のアドレス情報を抽出する。そして、書き戻し依頼送信部３１５は、例えば図１９に示す書き戻し依頼パケット４０を生成する。図１９は、書き戻し依頼パケット４０のフォーマットの一例を示す図である。書き戻し依頼パケット４０には、ヘッダ４１およびペイロード４２が含まれる。
【０１３０】
ヘッダ４１内の宛先ＭＡＣアドレス（Dst  MAC）には、第２のスイッチ装置３０のＭＡＣアドレスが格納される。ヘッダ４１内の送信元ＭＡＣアドレス（Src  MAC）には、第１のスイッチ装置３０のＭＡＣアドレスが格納される。ヘッダ４１内のプロトコル番号（Protocol）には、ＵＤＰのプロトコル番号が格納される。ヘッダ４１内の送信元ＩＰアドレス（Src  IP）には、第１のスイッチ装置３０のＩＰアドレスが格納される。ヘッダ４１内の宛先ＩＰアドレス（Dst  IP）には、第２のスイッチ装置３０のＩＰアドレスが格納される。ヘッダ４１内の送信元ポート番号（Src  Port）には、後述するハッシュ値が格納される。ヘッダ４１内の宛先ポート番号（Dst  Port）には、第２のスイッチ装置３０のＵＤＰポート番号が格納される。
【０１３１】
ペイロード４２には、Command４３、Hash  value４４、およびフロー情報４５が含まれる。Command４３には、書き換え依頼を示す情報が格納される。Hash  value４４には、DestPhyPortSetパケットから抽出したフロー情報に含まれる送信元ポート番号が格納される。フロー情報４５には、DestPhyPortSetパケットから抽出したフロー情報に含まれる送信元ＩＰアドレス、宛先ＩＰアドレス、プロトコル番号、および送宛先ポート番号が格納される。また、フロー情報４５には、送信元ポート番号として、ポート変更部３１１から受信したハッシュ値が格納される。つまり、Hash  value４４には、ヘッダ書換部３３２によって書き換えられる前の送信元ポート番号が格納され、フロー情報４５には、ヘッダ書換部３３２によって書き換えられた後の送信元ポート番号を含むフロー情報が格納される。
【０１３２】
ここで、ヘッダ４１内の送信元ポート番号（Src  Port）に格納されるハッシュ値の算出手順について説明する。書き戻し依頼送信部３１５は、書き戻し依頼パケット４０のヘッダ４１に格納する送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号を特定する。そして、書き戻し依頼送信部３１５は、特定した送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号を、ハッシュ計算部３３５へ送信する。そして、書き戻し依頼送信部３１５は、ハッシュ計算部３３５からハッシュ値temp1’を受信する。
【０１３３】
次に、書き戻し依頼送信部３１５は、ポート変更部３１１から受信したDestPhyPortSetパケットに含まれている変更後の送信ポート３６のポート番号と、ハッシュ計算部３３５から受信したハッシュ値temp1’とのＸＯＲを計算する。そして、書き戻し依頼送信部３１５は、ハッシュテーブル３２０を参照して、ＸＯＲの計算結果の下位２ビットと同じ値のインデックスに対応付けられた複数のハッシュ値の中から、１つのハッシュ値をハッシュ値temp2’として特定する。そして、書き戻し依頼送信部３１５は、特定したハッシュ値temp2’を、ヘッダ４１内の送信元ポート番号（Src  Port）に格納する。そして、書き戻し依頼送信部３１５は、書き戻し依頼パケット４０を生成し、生成した書き戻し依頼パケット４０を、ポート特定部３３３へ送信する。
【０１３４】
ポート特定部３３３は、書き戻し依頼送信部３１５から受信した書き戻し依頼パケット４０の宛先ＭＡＣアドレスに基づいて送信ポート３６のポート番号を特定する。ハッシュ計算部３３５は、ポート特定部３３３によって複数の送信ポート３６のポート番号が特定された場合に、ハッシュ値を算出する。ポート選択部３３６は、ハッシュ計算部３３５によって算出されたハッシュ値に基づいて、書き戻し依頼パケット４０を送信する送信ポート３６を１つ選択し、選択した送信ポート３６に接続された送信キュー３５に書き戻し依頼パケット４０を格納する。これにより、書き戻し依頼パケット４０は、ポート選択部３３６によって選択された送信ポート３６から送信される。
【０１３５】
このように、書き戻し依頼送信部３１５は、書き戻し依頼パケット４０のヘッダ４１内の送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号を用いてハッシュ値temp1’をハッシュ計算部３３５に算出させる。そして、書き戻し依頼送信部３１５は、ハッシュ計算部３３５が算出したハッシュ値temp1’と、DestPhyPortSetパケットに含まれている変更後の送信ポート３６のポート番号とのＸＯＲの下位２ビットに対応するハッシュ値temp2’を特定する。そして、書き戻し依頼送信部３１５は、特定したハッシュ値temp2’をヘッダ４１内の送信元ポート番号に格納する。これにより、書き戻し依頼パケット４０は、送信ポート３６が変更された場合のフローに含まれるパケットが送信される送信ポート３６と同じ送信ポート３６から第２のスイッチ装置３０へ送信される。これにより、書き戻し依頼パケット４０を送信する段階から、トラフィックの偏りの抑制等の制御を行うことができる。
【０１３６】
パケット受信部３３０は、受信ポート３４を介して書き戻し依頼パケット４０を受信した場合、受信した書き戻し依頼パケット４０を書き戻し設定部３１６へ送信する。書き戻し設定部３１６は、パケット受信部３３０から書き戻し依頼パケット４０を受信した場合、書き戻し依頼パケット４０内のペイロード４２から、Hash  value４４に格納されたハッシュ値と、フロー情報４５に格納されたフロー情報とを抽出する。そして、書き戻し設定部３１６は、抽出したフロー情報に対応付けて、抽出したハッシュ値を、書き換えテーブル３２１に格納する。これにより、第１のスイッチ装置３０から書き戻し依頼パケット４０を受信した第２のスイッチ装置３０のヘッダ書換部３３２は、第１のスイッチ装置３０から受信したパケットのヘッダ内の送信元ポート番号を、第１のスイッチ装置３０のヘッダ書換部３３２によって書き換えられる前の値に書き戻すことができる。
【０１３７】
［制御装置２０の動作］
図２０は、実施例３における制御装置２０の動作の一例を示すフローチャートである。なお、本実施例における制御装置２０の動作は、以下に説明する点を除き、図９を用いて説明した実施例１における制御装置２０の動作と同様である。そのため、以下では、主に、実施例１における制御装置２０の動作と異なる点について説明する。
【０１３８】
まず、収集部２１０は、管理ポート２３を介してスイッチ装置３０からヘッダ情報を受信したか否かを判定する（Ｓ１００）。スイッチ装置３０からヘッダ情報を受信していない場合（Ｓ１００：Ｎｏ）、収集部２１０は、図９において説明したステップＳ１１１〜Ｓ１１２の処理を実行する。一方、スイッチ装置３０からヘッダ情報を受信した場合（Ｓ１００：Ｙｅｓ）、収集部２１０は、図９において説明したステップＳ１０１〜Ｓ１０５の処理を実行する。そして、変更ポート特定部２１１は、フローに含まれるパケットが送信される送信ポート３６を変更するか否かを判定する（Ｓ１０６）。送信ポート３６を変更しない場合（Ｓ１０６：Ｎｏ）、収集部２１０は、再びステップＳ１００に示した処理を実行する。
【０１３９】
一方、送信ポート３６を変更する場合（Ｓ１０６：Ｙｅｓ）、変更ポート特定部２１１は、変更後の送信ポート３６を特定する（Ｓ１０７）。そして、変更ポート特定部２１１は、例えば情報処理システム１０のトポロジーに関する情報を参照して、フローの伝送経路上にある第１のスイッチ装置３０と第２のスイッチ装置３０とを特定する（Ｓ１３０）。そして、変更ポート特定部２１１は、送信ポートを変更するフローのフロー情報と、変更後の送信ポートのポート番号と、第１のスイッチ装置３０のスイッチＩＤと、第２のスイッチ装置３０のスイッチＩＤとを変更指示送信部２１２へ送信する。
【０１４０】
次に、変更指示送信部２１２は、変更ポート特定部２１１から受信した第２のスイッチ装置３０のアドレス情報をスイッチテーブル２２２から取得する。そして、変更指示送信部２１２は、変更ポート特定部２１１から受信したフロー情報およびポート番号と、スイッチテーブル２２２から取得した第２のスイッチ装置３０のアドレス情報とを含むDestPhyPortSetパケットを作成する。そして、変更指示送信部２１２は、作成したDestPhyPortSetパケットを、管理ポート２３を介して第１のスイッチ装置３０へ送信する（Ｓ１０８）。そして、変更指示送信部２１２は、図９において説明したステップＳ１０９〜Ｓ１１０の処理を実行する。
【０１４１】
［スイッチ装置３０の動作］
図２１は、実施例３におけるスイッチ装置３０の動作の一例を示すフローチャートである。なお、本実施例におけるスイッチ装置３０の動作は、以下に説明する点を除き、図１０を用いて説明した実施例１におけるスイッチ装置３０の動作と同様である。そのため、以下では、主に、実施例１におけるスイッチ装置３０の動作と異なる点について説明する。
【０１４２】
送信ポート３６毎の使用率の送信タイミングではない場合（Ｓ２０３：Ｎｏ）、パケット受信部３３０は、書き戻し依頼パケット４０を受信したか否かを判定する（Ｓ２０５）。パケット受信部３３０が書き戻し依頼パケット４０を受信していない場合（Ｓ２０５：Ｎｏ）、パケット受信部３３０は、再びステップＳ２００に示した処理を実行する。
【０１４３】
一方、パケット受信部３３０が書き戻し依頼パケット４０を受信した場合（Ｓ２０５：Ｙｅｓ）、パケット受信部３３０は、受信した書き戻し依頼パケット４０を書き戻し設定部３１６へ送信する。書き戻し設定部３１６は、パケット受信部３３０から受信した書き戻し依頼パケット４０内のペイロード４２から、Hash  value４４に格納されたハッシュ値と、フロー情報４５に格納されたフロー情報とを抽出する。そして、書き戻し設定部３１６は、抽出したフロー情報に対応付けて、抽出したハッシュ値を、書き換えテーブル３２１に格納することにより、書き戻しを設定する（Ｓ２０６）。そして、パケット受信部３３０は、再びステップＳ２００に示した処理を実行する。
【０１４４】
［書き換え設定処理］
図２２は、実施例３における書き換え設定処理の一例を示すフローチャートである。なお、本実施例における書き換え設定処理は、以下に説明する点を除き、図１３を用いて説明した実施例１における書き換え設定処理と同様である。そのため、以下では、主に、実施例１における書き換え設定処理と異なる点について説明する。
【０１４５】
スイッチ装置３０は、図１３において説明したステップＳ２４１〜Ｓ２４５の処理を実行する。そして、ポート変更部３１１は、制御装置２０から受信したDestPhyPortSetパケットと、特定したハッシュ値とを書き戻し依頼送信部３１５へ送信する。書き戻し依頼送信部３１５は、ポート変更部３１１から受信したPhyPortSetパケットからフロー情報と第２のスイッチ装置３０のアドレス情報を抽出する。そして、書き戻し依頼送信部３１５は、書き戻し依頼パケット４０のヘッダ４１に格納する送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号を特定する。そして、書き戻し依頼送信部３１５は、特定した送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号を、ハッシュ計算部３３５へ送信する。ハッシュ計算部３３５は、書き戻し依頼送信部３１５から受信した送信元ＩＰアドレス、宛先ＩＰアドレス、宛先ポート番号、およびプロトコル番号を用いて、ハッシュ値temp1’を算出する（Ｓ２５０）。そして、ハッシュ計算部３３５は、算出したハッシュ値temp1’を書き戻し依頼送信部３１５へ送信する。
【０１４６】
次に、書き戻し依頼送信部３１５は、ポート変更部３１１から受信したDestPhyPortSetパケットに含まれている変更後の送信ポート３６のポート番号と、ハッシュ計算部３３５から受信したハッシュ値temp1’とのＸＯＲを計算する（Ｓ２５１）。そして、書き戻し依頼送信部３１５は、ハッシュテーブル３２０を参照して、ＸＯＲの計算結果の下位２ビットと同じ値のインデックスに対応付けられた複数のハッシュ値の中から、１つのハッシュ値をハッシュ値temp2’として特定する（Ｓ２５２）。そして、書き戻し依頼送信部３１５は、特定したハッシュ値を、ヘッダ４１内の送信元ポート番号（Src  Port）に格納した書き戻し依頼パケット４０を生成する（Ｓ２５３）。そして、書き戻し依頼送信部３１５は、生成した書き戻し依頼パケット４０を、ポート特定部３３３へ送信する。
【０１４７】
ポート特定部３３３は、書き戻し依頼送信部３１５から受信した書き戻し依頼パケット４０の宛先ＭＡＣアドレスに基づいて送信ポート３６のポート番号を特定する。ハッシュ計算部３３５は、ポート特定部３３３によって複数の送信ポート３６のポート番号が特定された場合に、ハッシュ値を算出する。ポート選択部３３６は、ハッシュ計算部３３５によって算出されたハッシュ値に基づいて、書き戻し依頼パケット４０を送信する送信ポート３６を１つ選択し、選択した送信ポート３６に接続された送信キュー３５に書き戻し依頼パケット４０を格納する。これにより、書き戻し依頼パケット４０は、ポート選択部３３６によって選択された送信ポート３６から送信される（Ｓ２５４）。
【０１４８】
［効果］
上述したように、本実施例の制御装置２０は、パケットの送信元の通信装置１４に接続されているスイッチ装置３０にパケットのヘッダ内の送信元ポートを書き換えさせる。そして、本実施例の制御装置２０は、パケットの宛先の通信装置１４に接続されたスイッチ装置３０にヘッダ内の送信元ポート番号を書き戻させる。これにより、受信側の通信装置１４は、送信側の通信装置１４から送信されたパケットと同じパケットを受信することができる。
【０１４９】
［ハードウェア］
なお、これまで説明した図に示された各部の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【０１５０】
さらに、制御装置２０で行われる各種処理機能は、ＣＰＵ（Central  Processing  Unit）（又はＭＰＵ（Micro  Processing  Unit）、ＭＣＵ（Micro  Controller  Unit）等のマイクロ・コンピュータ）上で、その全部又は任意の一部を実行するようにしてもよい。また、各種処理機能は、ＣＰＵ（またはＭＰＵ、ＭＣＵ等のマイクロ・コンピュータ）で解析実行するプログラム上、またはワイヤードロジックによるハードウェア上で、その全部または任意の一部を実行するようにしてもよいことは言うまでもない。
【０１５１】
ところで、上記実施例１で説明した各種の処理は、予め用意されたプログラムを制御装置２０が実行することで実現できる。そこで、以下では、上記した各実施例と同様の機能を有するプログラムを実行する制御装置２０の一例を説明する。図２３は、制御装置２０の機能を実現する５０の一例を示す図である。
【０１５２】
図２３に示すように、制御装置２０は、通信インターフェイス５１、操作インターフェイス５２、表示インターフェイス５３、ＲＯＭ（Read  Only  Memory）５４、およびＣＰＵ５５を有する。また、制御装置２０は、図２３に示すように、ＲＡＭ（Random  Access  Memory）５６およびＨＤＤ（Hard  disk  drive）５７を有する。通信インターフェイス５１、操作インターフェイス５２、表示インターフェイス５３、ＲＯＭ５４、ＣＰＵ５５、ＲＡＭ５６、およびＨＤＤ５７は、バス５８を介して互いに接続されている。
【０１５３】
ＨＤＤ５７には、スイッチ制御プログラム５７０が予め記憶される。ＣＰＵ５５は、スイッチ制御プログラム５７０をＨＤＤ５７から読み出してＲＡＭ５６に展開する。スイッチ制御プログラム５７０については、図３または図１６に示した各々の構成要素と同様、適宜統合または分離してもよい。
【０１５４】
ＣＰＵ５５は、ＨＤＤ５７からスイッチ制御プログラム５７０を読み出し、スイッチ制御プログラム５７０をスイッチ制御プロセス５６０としてＲＡＭ５６に展開する。そして、ＣＰＵ５５は、上記した各実施例において、ＲＡＭ５６上に展開したスイッチ制御プロセス５６０を実行することにより、例えば、収集部２１０、変更ポート特定部２１１、および変更指示送信部２１２と同様の機能を発揮する。
【０１５５】
また、ＣＰＵ５５は、上記した実施例１において、ＲＡＭ５６上に展開したスイッチ制御プロセス５６０を実行することにより、例えば図９に示した処理を実行する。また、ＣＰＵ５５は、上記した実施例２において、ＲＡＭ５６上に展開したスイッチ制御プロセス５６０を実行することにより、例えば図１５に示した処理を実行する。また、ＣＰＵ５５は、上記した実施例３において、ＲＡＭ５６上に展開したスイッチ制御プロセス５６０を実行することにより、例えば図２０に示した処理を実行する。
【０１５６】
なお、ＣＰＵ５５によって仮想的に実現される各処理部は、全ての処理部がＣＰＵ５５によって常に実現されていなくてもよく、処理に用いられる処理部のみが仮想的に実現されればよい。また、スイッチ制御プログラムは、必ずしも最初から全てをＨＤＤ５７内に記憶させておかなくてもよい。例えば、制御装置２０に挿入されるＩＣカードなどの可搬型記録媒体に各プログラムが記憶され、制御装置２０が可搬型記録媒体から各プログラムを取得して実行するようにしてもよい。また、各プログラムを記憶させた他のコンピュータまたはサーバ装置などから、無線通信回線、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介して、制御装置２０が各プログラムを取得して実行するようにしてもよい。
【０１５７】
［その他］
上記した実施例１において、ヘッダ情報抽出部３３１は、所定時間または所定個数毎にパケット受信部３３０が受信したパケットのヘッダ情報を抽出する。また、実施例２において、ヘッダ情報抽出部３３１は、オリジナルパケットがコネクション型の通信に用いられるパケットについては、コネクションの確立または解放を示すパケットのヘッダ情報を抽出する。しかし、本願に開示の技術はこれに限られない。例えば、ヘッダ情報抽出部３３１は、カプセル化されているオリジナルパケットが特定のドメインに属するパケットである場合に、パケットのヘッダ情報を抽出してもよい。また、ヘッダ情報抽出部３３１は、データ量の多いElephantフロー、または、データ量の少ないMiceフローのいずれかに属するパケットのヘッダ情報を抽出してもよい。
【０１５８】
また、上記した実施例３において、制御装置２０は、パケットの送信元の通信装置１４に接続されたスイッチ装置３０にパケットのヘッダ内の送信元ポートを書き換えさせる。そして、上記した実施例３において、制御装置２０は、パケットの宛先の通信装置１４に接続されたスイッチ装置３０にヘッダ内の送信元ポート番号を書き戻させる。しかし、ヘッダ内の送信元ポートを書き換えさせる第１の制御装置２０は、パケットの送信元の通信装置１４に接続されたスイッチ装置３０でなくもよい。また、ヘッダ内の送信元ポートを書き戻させる第２の制御装置２０は、パケットの宛先の通信装置１４に接続されたスイッチ装置３０でなくもよい。ただし、第２の制御装置２０は、パケットの伝送経路上において、第１の制御装置２０と、パケットの宛先の通信装置１４との間に設けられた制御装置２０である。
【０１５９】
また、各スイッチ装置３０は、書き換えテーブル３２１内に登録されたフロー情報を含むヘッダを有するパケットを受信した場合であっても、オリジナルパケットをカプセル化していないパケットについては、ヘッダ内の送信元ポート番号を書き換えない。これにより、オリジナルパケットをカプセル化していないパケットのヘッダ情報が書き換えられることを防止することができる。
【０１６０】
また、上記した各実施例において、各スイッチ装置３０は、オリジナルパケットをカプセル化したパケットのヘッダに含まれるフロー情報に基づいて、ヘッダ内のハッシュ値を書き換えるパケットを特定するが、本願に開示の技術はこれに限られない。例えば、オリジナルパケットのヘッダを認識することが可能なスイッチ装置３０であれば、オリジナルパケットをカプセル化したパケットのヘッダに加えて、オリジナルパケットのヘッダに含まれる情報に基づいて、ヘッダ内のハッシュ値を書き換えるパケットを特定してもよい。
【０１６１】
以上、実施の形態を説明したが、本発明の技術的範囲は上記実施例に記載された範囲には限定されない。上記実施例に多様な変更または改良を加えることが可能であることが当業者には明らかである。また、そのような変更または改良を加えた形態も本発明の技術的範囲に含まれ得る。
【符号の説明】
【０１６２】
２０  制御装置
２２  記憶部
２２０  負荷分散テーブル
２２１  統計情報テーブル
２１１  変更ポート特定部
２１２  変更指示送信部
【図１】
0006446986.tif 000002
【図２】
0006446986.tif 000003
【図３】
0006446986.tif 000004
【図４】
0006446986.tif 000005
【図５】
0006446986.tif 000006
【図６】
0006446986.tif 000007
【図７】
0006446986.tif 000008
【図８】
0006446986.tif 000009
【図９】
0006446986.tif 000010
【図１０】
0006446986.tif 000011
【図１１】
0006446986.tif 000012
【図１２】
0006446986.tif 000013
【図１３】
0006446986.tif 000014
【図１４】
0006446986.tif 000015
【図１５】
0006446986.tif 000016
【図１６】
0006446986.tif 000017
【図１７】
0006446986.tif 000018
【図１８】
0006446986.tif 000019
【図１９】
0006446986.tif 000020
【図２０】
0006446986.tif 000021
【図２１】
0006446986.tif 000022
【図２２】
0006446986.tif 000023
【図２３】
0006446986.tif 000024