(57)【特許請求の範囲】
【請求項１】
複数のスイッチ装置と情報処理装置とを有するネットワークシステムにおいて、
前記複数のスイッチ装置のうち、第１のスイッチ装置は、
第１の複数のポート部と、
前記第１の複数のポート部のうち、ダウンリンク側の第１のポート部に発生した障害を検出する検出部と、
前記障害が検出された前記ダウンリンク側の第１のポート部についての障害情報であって、前記障害が検出された前記ダウンリンク側の第１のポート部の先に接続されているノード群の情報を障害影響範囲として含む前記障害情報を生成する生成部と、
前記生成部が生成した障害情報を含む障害通知パケットを、前記第１の複数のポート部のうち、前記障害が検出された前記ダウンリンク側の第１のポート部以外の全てのポート部を介して他のスイッチ装置に通知する第１の中継部と、
を有し、
前記複数のスイッチ装置のうち、第２のスイッチ装置は、
第２の複数のポート部と、
前記第２の複数のポート部のうち、前記他のスイッチ装置を介して前記障害通知パケットを受信したアップリンク側の第２のポート部がパケットの中継を行うポート部として選択される選択条件を示す選択条件情報が前記障害通知パケットに付加された選択条件付加パケットを、前記第２の複数のポート部のうち、前記情報処理装置が接続されるダウンリンク側の第２のポート部を介して送信する第２の中継部と、
を有し、
前記情報処理装置は、
パケットを送受信する送受信部と、
前記送受信部が受信した選択条件付加パケットから抽出された、前記ノード群の情報と前記選択条件情報とを保持する障害情報保持部と、
検出された前記障害の影響を受けるフローを、前記障害情報保持部が保持した前記ノード群の情報に基づき特定し、前記送受信部により送信されるパケットのうちの前記特定したフローに所属するパケットを、前記障害情報保持部が保持した選択条件情報に基づき加工して、検出された前記障害が発生した箇所へ中継される条件をはずれるようにすることによって、パケットの経路制御を行う制御部と、
を有することを特徴とするネットワークシステム。
【請求項２】
前記第２のスイッチ装置は、前記第２の複数のポート部のそれぞれに対応する前記選択条件情報を記憶するポート選択条件テーブルを保持し、
前記第２の中継部は、前記障害通知パケットを受信した前記アップリンク側の第２のポート部に対応する前記選択条件情報を前記ポート選択条件テーブルから取得して前記障害通知パケットに付加して前記選択条件付加パケットとする、
ことを特徴とする請求項１に記載のネットワークシステム。
【請求項３】
前記ポート選択条件テーブルは、前記第２の複数のポート部のうち、障害が発生していない前記第２のポート部の数であるリンク数と、前記第２のスイッチ装置で受信された前記パケットと前記リンク数とを入力とし前記障害が発生していない第２のポート部のうちの１つを選択するための計算のアルゴリズムを特定するアルゴリズム識別情報と、前記障害が発生していない第２のポート部のそれぞれと前記計算の結果値との対応情報とを、前記第２の複数のポート部のそれぞれに対応する前記選択条件情報として記憶し、
前記第２の中継部は、前記ポート選択条件テーブルから、前記リンク数と、前記アルゴリズム識別情報と、前記障害通知パケットを受信した前記アップリンク側の第２のポート部に対応する前記計算の結果値とを、前記選択条件情報として取得して前記障害通知パケットに付加して前記選択条件付加パケットとする、
ことを特徴とする請求項２に記載のネットワークシステム。
【請求項４】
前記第２の中継部は、前記障害通知パケットを受信した第２のポート部が、前記情報処理装置が接続される前記ダウンリンク側の第２のポート部である場合には、前記受信した障害通知パケットをそのまま、前記第２の複数のポート部のうち、前記障害通知パケットを受信した前記ダウンリンク側の第２のポート部以外の全ての第２のポート部を介して送信する、
ことを特徴とする請求項２又は３に記載のネットワークシステム。
【請求項５】
前記第１のスイッチ装置は、情報処理装置である宛先ノードに対応する宛先ノード情報と前記第１の複数のポート部のうち前記宛先ノード宛てのパケットを中継するポート部との対応関係を記憶する宛先ノードテーブルを保持し、
前記生成部は、前記障害が検出された前記ダウンリンク側の第１のポート部に対応する宛先ノード情報を前記宛先ノードテーブルから取得し、前記取得した宛先ノード情報を前記障害影響範囲として含む前記障害情報を生成する、
ことを特徴とする請求項１乃至４の何れかに記載のネットワークシステム。
【請求項６】
前記宛先ノード情報は、前記宛先ノードのＭＡＣアドレスを含み、
前記生成部は、前記障害が検出された前記ダウンリンク側の第１のポート部に対応する１つ以上のＭＡＣアドレスを前記宛先ノードテーブルから取得し、前記取得した１つ以上のＭＡＣアドレスを前記障害影響範囲として含む前記障害情報を生成する、
ことを特徴とする請求項５に記載のネットワークシステム。
【請求項７】
前記宛先ノード情報は、前記宛先ノードのグループの前記ネットワークシステム内の位置を示す位置情報を含み、
前記生成部は、前記障害が検出された前記ダウンリンク側の第１のポート部に対応する位置情報を前記宛先ノードテーブルから取得し、前記取得した位置情報を前記障害影響範囲として含む前記障害情報を生成する、
ことを特徴とする請求項５に記載のネットワークシステム。
【請求項８】
前記宛先ノード情報は、前記宛先ノードのグループの前記ネットワークシステム内での階層を指定するために前記位置情報をマスクするマスク情報を更に含み、
前記生成部は、前記位置情報に対応するマスク情報を前記宛先ノードテーブルから取得し、前記取得したマスク情報を更に含む前記障害情報を生成する、
ことを特徴とする請求項７に記載のネットワークシステム。
【請求項９】
前記障害情報保持部は、情報処理装置である宛先ノードに対応する宛先ノード情報であって前記送受信部が受信した選択条件付加パケット中の前記障害影響範囲に含まれる前記宛先ノード情報毎に、前記送受信部が受信した選択条件付加パケット中の１つ以上の前記選択条件情報を対応付けたエントリを有する障害情報テーブルを保持し、
前記制御部は、前記所属するパケットの宛先ノード情報に対応するエントリ内の前記１つ以上の選択条件情報を前記障害情報テーブルから取得し、前記取得した１つ以上の選択条件情報に対応する全ての選択条件に前記所属するパケットがマッチしたときに、前記選択条件にマッチしなくなるように前記所属するパケットのヘッダを変更する加工を行う、
ことを特徴とする請求項１乃至８の何れかに記載のネットワークシステム。
【請求項１０】
請求項１に記載のネットワークシステムが有する前記複数のスイッチ装置のうちの前記第２のスイッチ装置として用いられる前記スイッチ装置であって、
前記第２の複数のポート部と、
前記第２の中継部と、
を有することを特徴とするスイッチ装置。
【請求項１１】
複数のスイッチ装置と情報処理装置とを有するネットワークシステムの制御方法であって、
前記複数のスイッチ装置のうち、第１のスイッチ装置が、
前記第１のスイッチ装置が有する第１の複数のポート部のうち、ダウンリンク側の第１のポート部に発生した障害を検出し、
前記障害が検出された前記ダウンリンク側の第１のポート部についての障害情報であって、前記障害が検出された前記ダウンリンク側の第１のポート部の先に接続されているノード群の情報を障害影響範囲として含む前記障害情報を生成し、
前記生成した障害情報を含む障害通知パケットを、前記第１の複数のポート部のうち、前記障害が検出された前記ダウンリンク側の第１のポート部以外の全てのポート部を介して他のスイッチ装置に通知し、
前記複数のスイッチ装置のうち、第２のスイッチ装置が、
前記第２のスイッチ装置が有する第２の複数のポート部のうち、前記他のスイッチ装置を介して前記障害通知パケットを受信したアップリンク側の第２のポート部がパケットの中継を行うポート部として選択される選択条件を示す選択条件情報が前記障害通知パケットに付加された選択条件付加パケットを、前記第２の複数のポート部のうち、前記情報処理装置が接続されるダウンリンク側の第２のポート部を介して送信し、
前記情報処理装置が、
パケットを送受信し、
受信した前記選択条件付加パケットから、前記ノード群の情報と前記選択条件情報とを抽出して保持し、
検出された前記障害の影響を受けるフローを、前記保持した前記ノード群の情報に基づき特定し、
送信されるパケットのうちの前記特定したフローに所属するパケットを、前記保持した選択条件情報に基づき加工して、検出された前記障害が発生した箇所へ中継される条件をはずれるようにすることによって、パケットの経路制御を行う、
ことを特徴とするネットワークシステム制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークシステム、スイッチ装置、及びネットワークシステム制御方法に関する。
【背景技術】
【０００２】
クラウドサービスなどを提供するデータセンタ（ＤＣ）等では、要求される通信帯域が増大しており、ネットワークのマルチパス構成が主流となっている。マルチパスネットワークでは、障害発生時に不通となる経路の排除(障害回避)が不可欠であるが、障害回避に関して、不通時間の最小化及び障害回避後の影響最小化が求められている。
【０００３】
障害発生時における通信経路の切替えを効率的に行なう従来技術として、他のスイッチ装置からの葉ノード側での障害検知通知に基づいて、フローテーブルを書き換えることで、複数の通信経路の切替えを行う技術が知られている（例えば特許文献１）。
【０００４】
また、リンクの故障が発生した場合にネットワークに負荷を与えることなく迅速に経路変更を実行し、パケット故障を回避する技術が知られている（例えば特許文献２）。
【０００５】
更に、機器から情報取得、障害原因の診断をして、診断した障害影響範囲を回避する通信経路を算出する技術が知られている（例えば特許文献３）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１５−９１０３５号公報
【特許文献２】特開２００７−２５８９２６号公報
【特許文献３】特開２００７−１８９６１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、上述の従来技術では、障害の影響を受けないフローについても経路変更するため、障害の影響範囲が大きい（特許文献１）、収束までに時間がかかる（特許文献２）、経路変更までの時間短縮については考慮されていない（特許文献３）、などの課題があった。
【０００８】
そこで、本願発明の１つの側面は障害回避後の障害影響範囲を最小に抑え、また、高速に障害経路を回避することである。
【課題を解決するための手段】
【０００９】
態様の一例では、複数のスイッチ装置と情報処理装置とを有するネットワークシステムにおいて、複数のスイッチ装置のうち、第１のスイッチ装置は、第１の複数のポート部と、第１の複数のポート部のうち、ダウンリンク側の第１のポート部に発生した障害を検出する検出部と、障害が検出されたダウンリンク側の第１のポート部についての障害情報であって、障害が検出されたダウンリンク側の第１のポート部の先に接続されているノード群の情報を障害影響範囲として含む障害情報を生成する生成部と、生成部が生成した障害情報を含む障害通知パケットを、第１の複数のポート部のうち、障害が検出されたダウンリンク側の第１のポート部以外の全てのポート部を介して他のスイッチ装置に通知する第１の中継部と、を有し、複数のスイッチ装置のうち、第２のスイッチ装置は、第２の複数のポート部と、第２の複数のポート部のうち、他のスイッチ装置を介して障害通知パケットを受信したアップリンク側の第２のポート部がパケットの中継を行うポート部として選択される選択条件を示す選択条件情報が障害通知パケットに付加された選択条件付加パケットを、第２の複数のポート部のうち、情報処理装置が接続されるダウンリンク側の第２のポート部を介して送信する第２の中継部と、を有し、情報処理装置は、パケットを送受信する送受信部と、送受信部が受信した選択条件付加パケットから抽出された、ノード群の情報と選択条件情報とを保持する障害情報保持部と、検出された障害の影響を受けるフローを、障害情報保持部が保持したノード群の情報に基づき特定し、送受信部により送信されるパケットのうちの特定したフローに所属するパケットを、障害情報保持部が保持した選択条件情報に基づき加工して、検出された障害が発生した箇所へ中継される条件をはずれるようにすることによって、パケットの経路制御を行う制御部と、を有する。
【発明の効果】
【００１０】
障害回避後の障害影響範囲を最小に抑え、また、障害経路を高速に回避することが可能となる。
【図面の簡単な説明】
【００１１】
【図１】ネットワークシステムの実施形態がとするネットワークの構成例を示す図である。
【図２】スイッチ装置とエンドノードの構成例を示すブロック図である。
【図３】ダウンリンク障害時のスイッチ装置とエンドノードの障害通知・伝播動作の説明図である。
【図４】障害の影響を受けるフローのパケット送信時の経路制御動作の説明図である。
【図５】障害の影響を受けないフローのパケット送信時の経路制御動作の説明図である。
【図６】ネットワーク上での障害通知動作例の説明図である。
【図７】ネットワーク上でのフローの障害回避動作例の説明図である。
【図８】アップリンク障害時のスイッチ装置の動作説明図である。
【図９】ポート選択条件テーブルの構成例を示す図である。
【図１０】宛先ノードテーブルの構成例１を示す図である。
【図１１】障害通知パケットの構成例１を示す図である。
【図１２】リンク選択条件リストの詳細構成例を示す図である。
【図１３】障害情報テーブルの構成例１を示す図である。
【図１４】条件フィールドの詳細構成例を示す図である。
【図１５】第１のスイッチ装置における障害情報生成部の処理の例を示すフローチャートである。
【図１６】第２のスイッチ装置における障害通知パケット中継処理の例を示すフローチャートである。
【図１７】エンドノードにおけるパケット受信処理の例１を示すフローチャートである。
【図１８】エンドノードにおけるパケット送信処理の例を示すフローチャートである。
【図１９】パケットヘッダの加工例を示す図である。
【図２０】グループ化を行う宛先ノードテーブルの構成例２の説明図である。
【図２１】位置ＩＤの構成例の説明図である。
【図２２】宛先ノードテーブルの構成例２を示す図である。
【図２３】障害通知パケットの構成例２を示す図である。
【図２４】障害情報テーブルの構成例２を示す図である。
【図２５】ノードＩＤと位置ＩＤの対応表の例を示す図である。
【図２６】エンドノードにおけるパケット受信処理の例２を示すフローチャートである。
【発明を実施するための形態】
【００１２】
クラウドサービスなどを提供するデータセンタでは、要求される通信帯域が増大しており、ネットワークのマルチパス構成が主流となっている。また、マルチパスネットワークでは、障害発生時に不通となる経路の排除(障害回避)が不可欠であるが、障害回避に関して、不通時間の最小化および障害回避後の影響最小化が強く求められている。
【００１３】
本実施形態は、以下の構成を含む。
・障害を検出した場合に障害箇所（ポート）の先に接続されているノード群の情報を障害影響範囲として含む障害情報を通知するスイッチ装置。
【００１４】
・上記障害通知を受信した場合、その通知を受信したポートが中継先として選択される条件を付加して障害通知を伝播するスイッチ装置。
【００１５】
・上記障害通知を受信した場合、その情報を記録し、その情報に基づき障害の影響を受けるフローを特定し、障害箇所へ中継される条件をはずれるよう、そのフローに所属するパケットを加工する送信ノード。ここで、障害影響範囲は、障害箇所の先に接続される宛先ノード群の情報、例えばＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレス等である。
【００１６】
本実施形態では、ルーティングプロトコルを用いないネットワークに上記の構成を適用することにより、ネットワーク段数に依存した固定時間で障害を通知でき、高速な障害回避が可能なネットワークシステムを実現する。また、障害の影響を受けるフローが経路変更を行うことにより障害発生時も通信帯域を有効活用可能なネットワークシステムを実現する。
【００１７】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。図１は、ネットワークシステム１００の実施形態が対象とするネットワークの構成例を示す図である。
【００１８】
図１に例示されるネットワークシステム１００は、例えばデータセンタのネットワークを構成する。
【００１９】
このネットワークシステム１００は、複数のスイッチ装置１０１が、Ｓｐｉｎｅ（幹）、Ｌｅａｆ（葉）、ＴｏＲ（Ｔｏｐ  ｏｆ  Ｒａｃｋ）という３つの役割を与えられて、いわゆるＦａｔ  Ｔｒｅｅと呼ばれる、３段構造のネットワークを構成する。
【００２０】
第１段（最上位段）は例えば、Ｓｐｉｎｅ＃１、Ｓｐｉｎｅ＃２、Ｓｐｉｎｅ＃３、及びＳｐｉｎｅ＃４の４つのスイッチ装置１０１を有する。
【００２１】
第２段は例えば、Ｌｅａｆ＃１、Ｌｅａｆ＃２、・・・、Ｌｅａｆ＃６の６つのスイッチ装置１０１を有する。
【００２２】
第３段（最下位段）は例えば、ＴｏＲ＃１、ＴｏＲ＃２、・・・、ＴｏＲ＃６の６つのスイッチ装置１０１を有する。
【００２３】
ＴｏＲ＃１の下流（以下「ダウンリンク」と呼ぶ）側の２つのポートはそれぞれ、ラック１０３（＃１）に収容されるサーバコンピュータであるＳｅｒｖｅｒ＃１及びＳｅｒｖｅｒ＃２に接続される。ＴｏＲ＃２のダウンリンク側の２つのポートはそれぞれ同様に、ラック１０３（＃２）に収容されるＳｅｒｖｅｒ＃３及びＳｅｒｖｅｒ＃４に接続される。ＴｏＲ＃３のダウンリンク側の２つのポートはそれぞれ同様に、ラック１０３（＃３）に収容されるＳｅｒｖｅｒ＃５及びＳｅｒｖｅｒ＃６に接続される。ＴｏＲ＃４のダウンリンク側の２つのポートはそれぞれ同様に、ラック１０３（＃４）に収容されるＳｅｒｖｅｒ＃７及びＳｅｒｖｅｒ＃８に接続される。ＴｏＲ＃５のダウンリンク側の２つのポートはそれぞれ同様に、ラック１０３（＃５）に収容されるＳｅｒｖｅｒ＃９及びＳｅｒｖｅｒ＃１０に接続される。ＴｏＲ＃６のダウンリンク側の２つのポートはそれぞれ同様に、ラック１０３（＃６）に収容されるＳｅｒｖｅｒ＃１１及びＳｅｒｖｅｒ＃１２に接続される。なお、Ｓｅｒｖｅｒ＃１〜Ｓｅｒｖｅｒ＃１２は、サーバコンピュータに限られず、他のネットワークに接続するルータ装置等であってもよい。以下の説明では、Ｓｅｒｖｅｒ＃１〜Ｓｅｒｖｅｒ＃１２を、エンドノード１０２と総称する。このエンドノード１０２は、情報処理装置に対応している。
【００２４】
ＴｏＲ＃１の上流（以下「アップリンク」と呼ぶ）側の第１及び第２のポートはそれぞれ、リンク群１０４（＃１）によって、第２段のＬｅａｆ＃１及びＬｅａｆ＃２のダウンリンク側の各第１のポートに接続される。ＴｏＲ＃２のアップリンク側の第１及び第２のポートはそれぞれ、リンク群１０４（＃２）によって、第２段のＬｅａｆ＃１及びＬｅａｆ＃２のダウンリンク側の各第２のポートに接続される。ＴｏＲ＃３のアップリンク側の第１及び第２のポートはそれぞれ、リンク群１０４（＃３）によって、第２段のＬｅａｆ＃３及びＬｅａｆ＃４のダウンリンク側の各第１のポートに接続される。ＴｏＲ＃４のアップリンク側の第１及び第２のポートはそれぞれ、リンク群１０４（＃４）によって、第２段のＬｅａｆ＃３及びＬｅａｆ＃４のダウンリンク側の各第２のポートに接続される。ＴｏＲ＃５のアップリンク側の第１及び第２のポートはそれぞれ、リンク群１０４（＃５）によって、第２段のＬｅａｆ＃５及びＬｅａｆ＃６のダウンリンク側の各第１のポートに接続される。ＴｏＲ＃６のアップリンク側の第１及び第２のポートはそれぞれ、リンク群１０４（＃６）によって、第２段のＬｅａｆ＃５及びＬｅａｆ＃６のダウンリンク側の各第２のポートに接続される。
【００２５】
Ｌｅａｆ＃１のアップリンク側の第１及び第２のポートはそれぞれ、リンク群１０５（＃１）によって、第１段のＳｐｉｎｅ＃１及びＳｐｉｎｅ＃３のダウンリンク側の各第１のポートに接続される。Ｌｅａｆ＃２のアップリンク側の第１及び第２のポートはそれぞれ、リンク群１０５（＃２）によって、第１段のＳｐｉｎｅ＃２及びＳｐｉｎｅ＃４のダウンリンク側の各第１のポートに接続される。Ｌｅａｆ＃３のアップリンク側の第１及び第２のポートはそれぞれ、リンク群１０５（＃３）によって、第１段のＳｐｉｎｅ＃１及びＳｐｉｎｅ＃３のダウンリンク側の各第２のポートに接続される。Ｌｅａｆ＃４のアップリンク側の第１及び第２のポートはそれぞれ、リンク群１０５（＃４）によって、第１段のＳｐｉｎｅ＃２及びＳｐｉｎｅ＃４のダウンリンク側の各第２のポートに接続される。Ｌｅａｆ＃５のアップリンク側の第１及び第２のポートはそれぞれ、リンク群１０５（＃５）によって、第１段のＳｐｉｎｅ＃１及びＳｐｉｎｅ＃３のダウンリンク側の各第３のポートに接続される。Ｌｅａｆ＃６のアップリンク側の第１及び第２のポートはそれぞれ、リンク群１０５（＃６）によって、第１段のＳｐｉｎｅ＃２及びＳｐｉｎｅ＃４のダウンリンク側の各第３のポートに接続される。
【００２６】
以下の説明において、ネットワークシステム１００を構成する各スイッチ装置１０１と各エンドノード１０２を総称して、ノードと記載することがある。また、それぞれに付与されるＭＡＣアドレスのことを、ノードＩＤと記載することがある。
【００２７】
以上のように、図１に示されるネットワークシステム１００のネットワークのトポロジは、第３段（最下位段）から第１段（最上位段）に向かうアップリンク側に、複数のリンク１０４（第３段から第２段）又は１０５（第２段から第１段）が存在する。逆に、各段の各スイッチ装置１０１からエンドノード１０２に向けては、自装置の配下のエンドノード１０２へ向けて、一意に経路が決定される。障害がなければ、どの最上流のＳｐｉｎｅからも、全てのＳｅｒｖｅｒへの経路が存在する。即ち、障害が発生していない場合、どの経路が選択されてもパケットは目的とする宛先まで届くことができるため、アップリンク側では、各スイッチ装置１０１が複数のアップリンク側のリンクに接続されている複数のポートの中から１つを負荷分散機構により選択しながら、中継を行う。
【００２８】
図１に示される大規模化が可能なマルチパス構成のネットワークシステム１００の経路制御領域は、以下の特性の異なる中継方式を用いる２つの領域を含む。
【００２９】
領域１：スイッチ装置１０１のダウンリンク側（エンドノード側）ポートに宛先が存在せず、エンドノード１０２から最上位段のＳｐｉｎｅのスイッチ装置１０１での折返し点に向けたパケット伝送において、上流に向けて複数の経路が存在する領域である。言い換えれば、領域１は、送信元のエンドノード１０２から宛先のエンドノード１０２までのパケット伝送経路のうち、送信元のエンドノード１０２から最上位段のＳｐｉｎｅのスイッチ装置１０１での折返し点までの領域である。
【００３０】
領域２：スイッチ装置１０１のエンドノード１０２側ポートに宛先が存在し、Ｓｐｉｎｅのスイッチ装置１０１での折返し点からエンドノード１０２へ向けたパケット伝送において、一意に経路が決定される領域である。言い換えれば、領域２は、送信元のエンドノード１０２から宛先のエンドノード１０２までのパケット伝送経路のうち、最上位段のＳｐｉｎｅのスイッチ装置１０１での折返し点から宛先のエンドノード１０２までの領域である。
【００３１】
一般的なＯｐｅｎＦｌｏｗ方式では、スイッチ装置は、ＡＣＬ（Ａｃｃｅｓｓ  Ｃｏｎｔｒｌ  Ｌｉｓｔ）を用いたフロー制御を実行する。ＡＣＬ方式では、スイッチ装置がアクセスコントロールリストを保持する。スイッチ装置は、パケットを受信したときに、このリストの各条件とパケットのフィールドとのマッチングを行い、マッチした条件に対応するポートにパケットを中継する。しかし、ＡＣＬ方式では、ネットワークシステム上でフローを集中的に制御して各スイッチ装置にＡＣＬを設定するためのコントローラが必要となる。
【００３２】
これに対して、本実施形態のスイッチ装置１０１は、領域１について、複数のリンク１０４又は１０５を終端する有効な（未障害の）複数のアップリンク側ポートを、ＬＡＧ方式により、フロー毎に１つの論理的なポートとみなす。この上で、スイッチ装置１０１は、領域１について、スイッチ部を制御して、ダウンリンク側ポートからアップリンク側ポートにパケットを中継させる負荷分散処理を実行する。
【００３３】
また、本実施形態では、領域２では、スイッチ装置１０１がアップリンク側ポートからダウンリンク側ポートへのパケット中継時において、ＦＤＢ（Ｆｏｒｗａｒｄｉｎｇ  Ｄａｔａ  Ｂａｓｅ）を用いた一意な経路制御を実行する。即ち、ダウンリンク側ポートにおいて宛先ＭＡＣアドレスとポート番号との対応関係を学習してＦＤＢへの登録を行い、このＦＤＢにより経路制御を行う。これにより、アップリンク側ポートからダウンリンク側ポートへのパケット中継において、同じ宛先のパケットは障害が発生していなければ常に同じダウンリンク側ポートに中継され、一意な経路制御が実行される。このとき、ＦＤＢが確実に設定されるよう、エンドノード１０２からＳｐｉｎｅのスイッチ装置１０１へ向けて、学習パケットを送信する。
【００３４】
本実施形態は、以上の領域１での負荷分散による経路制御と領域２でのダウンリンク側ポートに対するＦＤＢによる経路制御により、コントローラを必須要件としないネットワークシステム１００を実現するものである。
【００３５】
図２（ａ）及び（ｂ）はそれぞれ、図１のスイッチ装置１０１とエンドノード１０２の構成例を示す各ブロック図である。図１のＳｐｉｎｅ、Ｌｅａｆ、ＴｏＲの各段の各スイッチ装置１０１は、ネットワーク階段が異なるだけで、構成は共通である。なお、それぞれに割り当てられる機能に応じて、各段のスイッチ装置１０１の構成が異なるようにしてもよい。
【００３６】
図２（ａ）に示されるスイッチ装置１０１は、スイッチ部２０１、アップリンク側ポート２０２、ダウンリンク側ポート２０３、ＣＰＵ（中央演算処理装置）２０４、及びＲＡＭ（ランダムアクセスメモリ）２０５を備える。
【００３７】
アップリンク側ポート２０２は、スイッチ装置１０１が図１のＬｅａｆならば、リンク群１０５を終端して、Ｓｐｉｎｅのスイッチ装置１０１のダウンリンク側ポート２０３との間でパケットを授受する。また、アップリンク側ポート２０２は、スイッチ装置１０１が図１のＴｏＲならば、リンク群１０４を終端して、Ｌｅａｆのスイッチ装置１０１のダウンリンク側ポート２０３との間でパケットを授受する。図２（ａ）の例では、アップリンク側ポート２０２は＃０と＃１の２つが実装され２本のリンクを終端する例が示されているが、これに限られるものではなく、より多くのアップリンク側ポート２０２が実装されてもよい。
【００３８】
ダウンリンク側ポート２０３は、スイッチ装置１０１が図１のＳｐｉｎｅならば、リンク群１０５を終端して、Ｌｅａｆのスイッチ装置１０１のアップリンク側ポート２０２との間でパケットを授受する。また、ダウンリンク側ポート２０３は、スイッチ装置１０１が図１のＬｅａｆならば、リンク群１０４を終端して、ＴｏＲのスイッチ装置１０１のアップリンク側ポート２０２との間でパケットを授受する。更に、ダウンリンク側ポート２０３は、スイッチ装置１０１が図１のＴｏＲならば、Ｓｅｒｖｅｒのエンドノード１０２に接続されるリンクを終端して、Ｓｅｒｖｅｒ＃のエンドノード１０２の送受信部（図２（ｂ）の２５２）のポートとの間でパケットを授受する。図２（ａ）の例では、ダウンリンク側ポート２０３は＃０と＃１の２つが実装され２本のリンクを終端する例が示されているが、これに限られるものではなく、より多くのダウンリンク側ポート２０３が実装されてもよい。
【００３９】
スイッチ部２０１は、アップリンク側ポート２０２とダウンリンク側ポート２０３間、アップリンク側ポート２０２相互間、又はダウンリンク側ポート２０３相互間で、パケットを中継する。
【００４０】
ＣＰＵ２０４は、スイッチ装置１０１の全体の動作を制御し、特には図示しないＲＯＭ（リードオンリーメモリ）に記憶された制御プログラムを実行する。これによって、ＣＰＵ２０４は、スイッチ部２０１の中継機能のほか、図２（ａ）に示される障害検出部２０６、障害情報生成部２０７、及び障害情報中継部２０８の各機能の動作を制御する。なお、これらの機能は例えば、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）によるハードウェアあるいはＦＰＧＡとＣＰＵを組み合わせたハードウェアにより実装されてもよい。
【００４１】
ＲＡＭ２０５は、後述する宛先ノードテーブル２０９及びポート選択条件テーブル２１０を保持する。
【００４２】
図２（ｂ）に示されるエンドノード１０２は、ＣＰＵ２５０、及びＲＡＭ２５１、及び送受信部２５２を備える。
【００４３】
ＣＰＵ２５０は、送受信部２５２を介してパケットの送受信の動作を制御するほか、図２（ｂ）に示される宛先チェック部２５３及び障害分析・経路制御部２５４の各機能の動作を制御する。なお、これらの機能は例えば、ＣＰＵ２０４の場合と同様に、ＦＰＧＡによるハードウェアあるいはＦＰＧＡとＣＰＵを組み合わせたハードウェアにより実装されてもよい。
【００４４】
ＲＡＭ２５１は、後述する障害情報テーブル２５５（障害情報保持部）を記憶する。
宛先チェック部２５３及び障害分析・経路制御部２５４は、障害情報テーブル２５５が保持した選択条件情報に基づきパケットの経路制御を行う制御部として動作する。
【００４５】
図２に示される構成を有するスイッチ装置１０１及びエンドノード１０２を含む図１のネットワークシステム１００におけるパケットの経路制御の基本的な動作について、まず説明する。
【００４６】
始めに、スイッチ装置１０１内のダウンリンク側ポート２０３及びアップリンク側ポート２０２で障害が検出された場合の動作について説明する。
【００４７】
まず、ダウンリンク側ポート２０３で障害が検出された場合の障害通知・伝播動作について説明する。障害通知・伝播動作では、スイッチ装置１０１が、障害の影響範囲と障害経路へ向けたリンク選択条件を送信ノードへ通知する。即ち、スイッチ装置１０１は、障害を検知した場合、障害箇所の先に接続されるエンドノード１０２群の情報(宛先情報)が格納された障害通知パケットを、障害を検知したスイッチ装置１０１に接続される他スイッチ装置１０１に通知する。障害通知パケットを受信したスイッチ装置１０１は、その障害通知パケットを受信したアップリンク側ポート２０２が中継先リンクとして選択される条件を付加して、他スイッチ装置１０１に転送する。上記障害通知パケットの中継処理が、その障害通知パケットが送信ノードであるエンドノード１０２に届くまで繰り返し実行される。そして、障害通知パケットを受信した送信ノードは、宛先情報に対応する障害箇所を通過する条件(障害箇所へ向かう各スイッチ装置１０１のリンク選択条件の組)を記録する。
【００４８】
図３は、ダウンリンク障害時のスイッチ装置１０１とエンドノード１０２の障害通知・伝播動作の説明図である。
【００４９】
スイッチ装置１０１は、障害発生時の機能により、障害が検出されたスイッチ装置１０１と、障害が検出されたスイッチ装置１０１から障害通知を受信したスイッチ装置１０１とに分かれる。以後、前者を第１のスイッチ装置、後者を第２のスイッチ装置と称する。第１のスイッチ装置になり得るのは、それ自身がダウンリンク側ポート２０３で障害を検出し、かつダウンリンク側ポート２０３がエンドノード１０２（Ｓｅｒｖｅｒ）に直接接続されていないスイッチ装置１０１であり、図１のＳｐｉｎｅ又はＬｅａｆが該当する。また、第２のスイッチ装置になり得るのは、障害通知をアップリンク側ポート２０２から受け取るスイッチ装置１０１であり、図１のＬｅａｆ又はＴｏＲが該当する。
【００５０】
図３（ａ）は、障害検出時の第１のスイッチ装置の動作説明図である。
まず、ＣＰＵ２０４の実行機能の障害検出部２０６（検出部）が、＃０、＃１のダウンリンク側ポート２０３のうち、例えば＃１（ポート番号＝「１」）のダウンリンク側ポート２０３（第１のポート部）で発生した障害を検出する。図３（ａ）の動作Ｉである。
【００５１】
次に、ＣＰＵ２０４の実行機能の障害情報生成部２０７（生成部）は、障害が検出された＃１のダウンリンク側ポート２０３についての障害情報を生成する。障害情報生成部２０７は、障害が検出された例えば＃１のダウンリンク側ポート２０３に対応する宛先ノード情報を宛先ノードテーブル２０９から取得し、その取得した宛先ノード情報を含む障害情報を生成する。前述したように、自装置の配下のエンドノード１０２に向けては自装置から一意に経路が決定するので、上述の処理の障害情報の生成処理により、障害検出ポートの先に接続される宛先ノード情報を含む障害情報が生成される。以上、図３（ａ）の動作IIである。
【００５２】
最後に、ＣＰＵ２０４の実行機能の障害情報中継部２０８（第１の中継部）が、障害情報生成部２０７が生成した障害情報を含む障害通知パケットを、図３（ａ）のIIIで示される経路で、他のスイッチ装置１０１に通知する。即ち、障害情報中継部２０８は、障害情報が検出された＃１のダウンリンク側ポート２０３（第１のポート部）以外の、図３（ａ）のIIIとして示される＃０のダウンリンク側ポート２０３及び＃０と＃１のアップリンク側ポート２０２に、障害通知パケットを送出する。
【００５３】
次に、図３（ｂ）は、他のスイッチ装置１０１から、例えば＃１のアップリンク側ポート２０２（第２のポート部）を介して障害通知パケット（後述する選択条件付加パケットも含む）を受信したスイッチ装置１０１である第２のスイッチ装置の動作説明図である。
【００５４】
ＣＰＵ２０４の実行機能の障害情報中継部２０８（第２の中継部）は、動作IVの経路で＃１のアップリンク側ポート２０２を介して障害通知パケットを受信する。障害情報中継部２０８は、動作Ｖのように、ＲＡＭ２０５内のポート選択条件テーブル２１０から障害通知パケットを受信した＃１のアップリンク側ポート２０２に対応する選択条件情報を取得して障害通知パケットに付加し、選択条件付加パケットとする。選択条件は、第２のスイッチ装置がダウンリンク側ポート２０３からアップリンク側ポート２０２にパケットを中継する際に、負荷分散機構により、障害通知パケットを受信した＃１のアップリンク側ポート２０２が中継先のポートとして選択される条件である。
【００５５】
そして、障害情報中継部２０８は、生成した選択条件付加パケットを、図３の動作VIのように、エンドノード１０２（情報処理装置）が接続される側の＃０又は＃１のダウンリンク側ポート２０３を介して、新たな障害通知パケットとして送信する。
【００５６】
図３（ｂ）に示される第２のスイッチ装置の動作は、障害通知パケットとして、上述の選択条件が付加された選択条件付加パケットを受信した２段目以降の第２のスイッチ装置においても、同様である。即ち、第２のスイッチ装置は、受信した障害通知パケットに、次々と自装置における選択条件情報を障害通知パケットに付加してゆく。
【００５７】
以上が、アップリンク側ポート２０２で障害通知パケットが受信された場合の第２のスイッチ装置の動作であるが、次に、ダウンリンク側ポート２０３で障害通知パケットが受信された場合の第２のスイッチ装置の動作について説明する。特には図示しないが、第２のスイッチ装置内のＣＰＵ２０４の障害情報中継部２０８は、＃０又は＃１のダウンリンク側ポート２０３で他のスイッチ装置１０１から障害通知パケットを受信した場合、以下の動作を実行する。前述したように、ダウンリンク側ポート２０３方向の経路は一意な経路として決定済みである。このため、障害情報中継部２０８は、障害通知パケットを、選択条件情報は付加せずにそのまま、障害通知パケットを受信したダウンリンク側ポート２０３以外の全ての有効なダウンリンク側ポート２０３又はアップリンク側ポート２０２から他のスイッチ装置１０１に送信する。
【００５８】
図３（ｃ）は、スイッチ装置１０１から障害通知パケットを受信したエンドノード１０２（情報処理装置）の動作説明図である。
【００５９】
図３（ｃ）において、送受信部２５２は、スイッチ装置１０１（第１のスイッチ装置又は第２のスイッチ装置）に対してパケットを送受信する。
【００６０】
ＣＰＵ２５０内の障害分析・経路制御部２５４及びＲＡＭ２０５内の障害情報テーブル２５５は、障害情報保持部として動作する。
ＣＰＵ２５０内の障害分析・経路制御部２５４は、送受信部２５２が受信した障害通知パケット（選択条件付加パケット）から、障害影響範囲である１つ以上の宛先ノード情報と、選択条件情報である１つ以上のリンク選択条件を抽出する。そして、ＣＰＵ２５０は、図３（ｃ）の動作VIIのように、ＲＡＭ２５１内の障害情報テーブル２５５に、抽出した宛先ノード情報毎に抽出した１つ以上のリンク選択条件を保持する。
【００６１】
次に、送信ノード（エンドノード１０２）において障害の影響を受けるフローのパケットの送信時の経路制御動作について説明する。送信ノードにおけるパケット送信時の経路制御動作では、送信ノードにおける障害経路通過フローの発見とヘッダ情報変更の処理が実行される。送信ノードは、送信データの宛先に対応する障害情報が記録されている場合、その送信フローが障害箇所を通過するかどうかを記録条件から判断し、障害箇所を通過すると判断した場合は、障害箇所を通過しなくなるように、その送信フローのヘッダ情報を加工する。ヘッダ情報は例えば、レイヤ４（Ｌ４）プロトコルの送信元ポート番号である。Ｌ４プロトコルは例えば、ＵＤＰ（Ｕｓｅｒ  Ｄａｔａ  Ｐｒｏｔｏｃｏｌ）、又はＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）である。
【００６２】
図４は、障害の影響を受けるフローのパケット送信時の経路制御動作の説明図である。まず、図４（ｃ）の送信ノード（エンドノード１０２）から送信される、障害影響範囲に含まれる宛先ノード情報に対応するエンドノード１０２宛てのパケットが、障害が検出されたスイッチ装置１０１（第１のスイッチ装置）まで辿り着く経路を考える。障害情報テーブル２５５内の宛先ノード情報毎のエントリ内の各選択条件情報は、上記経路上の各スイッチ装置１０１（第２のスイッチ装置）のアップリンク側ポート２０２が、そのスイッチ装置１０１の負荷分散機構により選択されるべき選択条件を示している。
【００６３】
エンドノード１０２内のＣＰＵ２５０の宛先チェック部２５３は、自装置からのパケットの送信前に、障害情報テーブル２５５上にそのパケットに設定されている宛先ノード情報に対応するエントリがあるか否かを検索する（図４（ｂ）の動作Ｉ）。
【００６４】
対応するエントリがない場合は、障害が発生したスイッチ装置１０１の障害が検出されたダウンリンク側ポート２０３に、送信されるパケットが到達することはない。このため、宛先チェック部２５３は、パケットをそのまま送受信部２５２から送信する（図４（ｂ）の動作II−Ａ。
【００６５】
対応するエントリがある場合は、宛先チェック部２５３は、障害分析・経路制御部２５４に制御を移す（図４（ｂ）の動作II−Ｂ）。障害分析・経路制御部２５４は、送信パケットがそのエントリに記憶されている全てのリンク選択条件を満たすか否か、即ち、送信パケットが障害経路を通過するか否かを判定する（図４（ｂ）の動作III）。
【００６６】
送信パケットがエントリ内の１つのリンク選択条件でも満たさなければ、そのパケットは自装置から送信された後に障害が発生したスイッチ装置１０１（第１のスイッチ装置）に辿り着くことはないと判定できる。この場合、障害分析・経路制御部２５４は、前述の図４（ｂ）の動作II−Ａの場合と同様に、パケットをそのまま送受信部２５２から送信する（図４（ｂ）の動作IV−Ａ）。
【００６７】
送信パケットがエントリ内の全てのリンク選択条件を満たせば、そのパケットは自装置から送信された後に途中のスイッチ装置１０１（第２のスイッチ装置）を経由して障害が発生したスイッチ装置１０１（第１のスイッチ装置）に辿り着くことになる。この場合、障害が検出されたスイッチ装置１０１において、上記パケットはアップリンク側ポート２０２で受信された後、そのパケットに設定されている宛先ノード情報に対応するエンドノード１０２に向けて、ダウンリンク側ポート２０３に中継されようとする。しかし、そのスイッチ装置１０１（第１のスイッチ装置）内のＲＡＭ２０５に記憶されている宛先ノードテーブル２０９に基づいて選択される中継先のダウンリンク側ポート２０３は、障害の発生により閉塞されている。このため、スイッチ装置１０１内のスイッチ部２０１は、上記パケットをそのパケットに設定されている宛先ノード情報に対応するエンドノード１０２に向けて中継することはできず、そのパケットの配信が不可能となってしまう。
【００６８】
そこで、本実施形態では、送信パケットがエントリ内の全てのリンク選択条件を満たした場合には、障害分析・経路制御部２５４は、送信パケットが障害経路を回避するように、そのパケットのヘッダ情報をそのパケットの配信に影響がでない範囲で加工する。そして、障害分析・経路制御部２５４は、ヘッダ加工後のパケットを、送受信部２５２から送信する（図４（ｂ）の動作IV−Ｂ）。
【００６９】
この加工の後に、そのパケットがエンドノード１０２から送信された場合には、例えばエンドノード１０２に接続されている図４（ａ）に示されるスイッチ装置１０１（第２のスイッチ装置）内のスイッチ部２０１の負荷分散機構において、次の動作が実行される。上記パケットは、図４（ａ）に示されるように、例えば＃０のダウンリンク側ポート２０３で受信された後、実線矢印で示されるように、そこから負荷分散機構に入力する。負荷分散機構は、スイッチ部２０１を制御して、ダウンリンク側ポート２０３で受信されたパケットを、アップリンク側ポート２０２に中継する。
【００７０】
このとき、もしパケットのヘッダが加工されていなければ、スイッチ部２０１は、＃０のダウンリンク側ポート２０３で受信したパケットを、障害が検出されたスイッチ装置１０１（第１のスイッチ装置）に向かう経路上の＃１のアップリンク側ポート２０２に送出する。図４（ａ）のスイッチ部２０１から＃１のアップリンク側ポート２０２に向かう破線矢印に例示される動作Ｖ′である。
【００７１】
しかし、送信元のエンドノード１０２において前述したようにパケットのヘッダが加工されていれば、負荷分散機構は、異なるパケットヘッダに基づいて負荷分散処理を実行する。この結果スイッチ部２０１は、＃０のダウンリンク側ポート２０３で受信したパケットを、障害が検出されたスイッチ装置１０１（第１のスイッチ装置）に向かう経路上の＃１のアップリンク側ポート２０２とは異なる、＃０のアップリンク側ポート２０２に送出する。図４（ａ）のスイッチ部２０１から＃０のアップリンク側ポート２０２に向かう実線矢印に例示される動作Ｖである。
【００７２】
このようにして本実施形態では、パケットの送信元のエンドノード１０２において、障害が検出されたスイッチ装置１０１（第１のスイッチ装置）に、送信されたパケットが到達しないような経路制御を行うことが可能となる。
【００７３】
なお、図１のネットワークシステム１００においては、各Ｓｅｒｖｅｒ（エンドノード１０２）へは、複数のＳｐｉｎｅからの経路が確保されている。このため、例えば図４（ａ）のスイッチ装置１０１の＃１のアップリンク側ポート２０２から送出されたパケットは、障害が検出されたスイッチ装置１０１を含まない経路を経由して宛先ノード（エンドノード１０２）に到達することができる（後述する図７を参照）。上述の如く、本実施形態によれば、障害回避後の障害影響範囲を最小に抑え、また、高速に障害経路を回避することを可能とする。さらに、本実施例によれば、障害の影響を受けるフローのみ経路変更を行うため、障害発生時も送信帯域を有効活用することが可能である。
【００７４】
図５は、障害の影響を受けないフローのパケット送信時の経路制御動作の説明図である。
【００７５】
図５の（ｂ）及び（ｃ）はそれぞれ、図４の（ａ）及び（ｂ）に対応している。図５（ｂ）及び（ｃ）の実線矢印は図４（ａ）及び（ｂ）の実線矢印と同様であり、送信パケット（フロー１）のヘッダの加工により、障害が検出されたスイッチ装置１０１（第１のスイッチ装置）にそのパケットが到達しないように制御される経路を示している。図５（ｂ）及び（ｃ）の動作Ｉ、II−Ｂ、III、IV−Ａ、IV−Ｂ、Ｖ、Ｖ′はそれぞれ、図４（ａ）及び（ｂ）の動作Ｉ、II−Ｂ、III、IV−Ａ、IV−Ｂ、Ｖ、Ｖ′と同じである。
【００７６】
図５（ｂ）の破線矢印は図４（ａ）の破線矢印と同様である。送信パケット（フロー１）のヘッダが加工されずにそのまま送信された場合、そのパケットは障害が検出されたスイッチ装置１０１（第１のスイッチ装置）に到達してしまう。図５（ａ）は、上記スイッチ装置１０１（第１のスイッチ装置）内でのパケットの中継動作を示す図である。図５（ａ）に示されるように、ヘッダが何も加工されずに＃０のアップリンク側ポート２０２に到達したパケットは、そのパケットに付与されている宛先ノード情報に基づいて、スイッチ部２０１により、障害が検出された＃１のダウンリンク側ポート２０３に中継されてしまう。図５（ａ）の動作VI′である。従って、このパケットは、宛先ノード（エンドノード１０２）に配信することができない。本実施形態では、このような事態を回避するために、前述したように、送信パケット（フロー１）のヘッダの加工により、障害が検出されたスイッチ装置１０１（第１のスイッチ装置）にそのパケットが到達しないように制御されるものである。
【００７７】
一方、図５（ａ）の障害が検出されたスイッチ装置１０１までは伝送されるが、＃１のダウンリンク側ポート２０３の先に接続されているエンドノード１０２とは別のエンドノード１０２宛ての送信パケット（フロー２）に対しては、次のような経路制御が行われる。
【００７８】
送信パケット（フロー２）の送信元のエンドノード１０２において、ＣＰＵ２５０内の宛先チェック部２５３は、障害情報テーブル２５５上にそのパケットに設定されている宛先ノード情報に対応するエントリがあるか否かを検索する（図５（ｃ）の動作Ｉ）。今、この宛先ノード情報は、図５（ａ）の障害が検出されたスイッチ装置１０１の障害が検出された＃１のダウンリンク側ポート２０３の先に接続されているエンドノード１０２とは別のエンドノード１０２に対応するものである。従って、障害情報テーブル２５５上では、その宛先ノード情報に対応するエントリは見つからない。この結果、宛先チェック部２５３は、送信パケット（フロー２）をそのまま送受信部２５２から送信する（図５（ｃ）の動作II−Ａ）。
【００７９】
そのパケットがエンドノード１０２から送信された場合、例えばエンドノード１０２に接続されている図５（ｂ）に示されるスイッチ装置１０１（第２のスイッチ装置）内のスイッチ部２０１の負荷分散機構において、次の動作が実行される。上記パケットは、図５（ｂ）に示されるように、例えば＃０のダウンリンク側ポート２０３で受信された後、一点鎖線矢印で示されるように、そこから負荷分散機構に入力する。負荷分散機構は、スイッチ部２０１を制御して、＃０のダウンリンク側ポート２０３で受信したパケットを、障害が検出されたスイッチ装置１０１（第１のスイッチ装置）に向かう経路上の＃１のアップリンク側ポート２０２に送出する。図５（ｂ）のスイッチ部２０１から＃１のアップリンク側ポート２０２に向かう一点鎖線矢印に例示される動作Ｖ“である。
【００８０】
このパケットは、いくつかのスイッチ装置１０１（第２のスイッチ装置）を経由した後、障害が検出された図５（ａ）のスイッチ装置１０１（第１のスイッチ装置）に到達し、例えば＃０のアップリンク側ポート２０２で受信される。このスイッチ装置１０１において、スイッチ部２０１は、そのパケットに付与されている別の宛先ノード情報に基づいて、そのパケットを、図５（ａ）の一点鎖線矢印のように、障害が検出されていない＃０のダウンリンク側ポート２０３に中継する。図５（ａ）の動作VI”である。これにより、そのパケットは、正常に別の宛先ノード（エンドノード１０２）に到達することができる。
【００８１】
図６は、前述した図３（ａ）の第１のスイッチ装置の動作、図３（ｂ）の第２のスイッチ装置の動作、及び図３（ｃ）のエンドノード１０２の動作に基づく、図１のネットワークシステム１００のネットワーク上での障害通知動作例の説明図である。
【００８２】
まず、Ｌｅａｆ＃３のスイッチ装置１０１内のＣＰＵ２０４の障害検出部２０６が、図３（ａ）の第１のスイッチ装置として、ＴｏＲ＃３の＃０のアップリンク側ポート２０２に接続されるＬｅａｆ＃３の＃０のダウンリンク側ポート２０３での障害を検出する。図６の動作Ｉである。この結果、Ｌｅａｆ＃３のＣＰＵ２０４の障害情報生成部２０７が、障害箇所の先のノード情報として「Ｓｅｒｖｅｒ＃５、Ｓｅｒｖｅｒ＃６」のＭＡＣアドレスを障害影響範囲とした障害情報を生成する。そして、Ｌｅａｆ＃３のＣＰＵ２０４の障害情報中継部２０８が、その障害情報を含む障害通知パケットを、障害検出ポート以外のＬｅａｆ＃３の＃１のダウンリンク側ポート２０３と＃０及び＃１のアップリンク側ポート２０２から他のスイッチ装置１０１に通知する。図６の例では、Ｌｅａｆ＃３は、障害通知パケットを、Ｓｐｉｎｅ＃１と、Ｓｐｉｎｅ＃３と、ＴｏＲ＃４に通知する。
【００８３】
以上の第１のスイッチ装置であるＬｅａｆ＃３による障害通知パケットの送信が、第１段目の障害通知である。太い実線矢印線IIで示される経路である。
【００８４】
＃１のダウンリンク側ポート２０３から障害通知パケットを受信したＳｐｉｎｅ＃１内のＣＰＵ２０４の障害情報中継部２０８は、以下の動作を実行する。障害情報中継部２０８は、受信した障害通知パケットをそのまま、＃１のダウンリンク側ポート２０３以外の＃０及び＃２のダウンリンク側ポート２０３から、Ｌｅａｆ＃１及びＬｅａｆ＃５に向けて送信する。
【００８５】
＃１のダウンリンク側ポート２０３から障害通知パケットを受信したＳｐｉｎｅ＃３内のＣＰＵ２０４の障害情報中継部２０８も同様に、以下の動作を実行する。障害情報中継部２０８は、受信した障害通知パケットをそのまま、＃１のダウンリンク側ポート２０３以外の＃０及び＃２のダウンリンク側ポート２０３から、Ｌｅａｆ＃１及びＬｅａｆ＃５に向けて送信する。
【００８６】
＃０のアップリンク側ポート２０２でＬｅａｆ＃３からの障害通知パケットを受信したＴｏＲ＃４内のＣＰＵ２０４の障害情報中継部２０８は、以下の動作を実行する。障害情報中継部２０８は、障害通知パケットを受信した＃０のアップリンク側ポート２０２が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部２０８は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート２０３から、Ｓｅｒｖｅｒ＃７とＳｅｒｖｅｒ＃８に向けて送信する。
【００８７】
以上の第１のスイッチ装置のＬｅａｆ＃３から障害通知パケットを受信した第２のスイッチ装置のＳｐｉｎｅ＃１、Ｓｐｉｎｅ＃３、又はＴｏＲ＃４による選択条件が付加された障害通知パケットの送信が、第２段目の障害通知である。太い一点鎖線矢印線IIIで示される経路である。
【００８８】
＃０及び＃１のアップリンク側ポート２０２でＳｐｉｎｅ＃１又はＳｐｉｎｅ＃３からの障害通知パケットを受信したＬｅａｆ＃１内のＣＰＵ２０４の障害情報中継部２０８は、以下の動作を実行する。障害情報中継部２０８は、障害通知パケットを受信した＃０及び＃１のアップリンク側ポート２０２が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部２０８は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート２０３から、ＴｏＲ＃１とＴｏＲ＃２に向けて送信する。
【００８９】
＃０及び＃１のアップリンク側ポート２０２でＳｐｉｎｅ＃１又はＳｐｉｎｅ＃３からの障害通知パケットを受信したＬｅａｆ＃５内のＣＰＵ２０４の障害情報中継部２０８も同様に、以下の動作を実行する。障害情報中継部２０８は、障害通知パケットを受信した＃０及び＃１のアップリンク側ポート２０２が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部２０８は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート２０３から、ＴｏＲ＃５とＴｏＲ＃６に向けて送信する。
【００９０】
以上の第２のスイッチ装置のＳｐｉｎｅ＃１又はＳｐｉｎｅ＃３から障害通知パケットを受信した第２のスイッチ装置のＬｅａｆ＃１又はＬｅａｆ＃５による新たな選択条件が付加された障害通知パケットの送信が、第３段目の障害通知である。太い細かい破線矢印線IVで示される経路である。
【００９１】
＃０のアップリンク側ポート２０２でＬｅａｆ＃１からの障害通知パケットを受信したＴｏＲ＃１内のＣＰＵ２０４の障害情報中継部２０８は、以下の動作を実行する。障害情報中継部２０８は、障害通知パケットを受信した＃０のアップリンク側ポート２０２が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部２０８は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート２０３から、Ｓｅｒｖｅｒ＃１とＳｅｒｖｅｒ＃２に向けて送信する。
【００９２】
＃０のアップリンク側ポート２０２でＬｅａｆ＃１からの障害通知パケットを受信したＴｏＲ＃２内のＣＰＵ２０４の障害情報中継部２０８も同様に、以下の動作を実行する。障害情報中継部２０８は、障害通知パケットを受信した＃０のアップリンク側ポート２０２が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部２０８は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート２０３から、Ｓｅｒｖｅｒ＃３とＳｅｒｖｅｒ＃４に向けて送信する。
【００９３】
＃０のアップリンク側ポート２０２でＬｅａｆ＃５からの障害通知パケットを受信したＴｏＲ＃５内のＣＰＵ２０４の障害情報中継部２０８も同様に、以下の動作を実行する。障害情報中継部２０８は、障害通知パケットを受信した＃０のアップリンク側ポート２０２が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部２０８は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート２０３から、Ｓｅｒｖｅｒ＃９とＳｅｒｖｅｒ＃１０に向けて送信する。
【００９４】
＃０のアップリンク側ポート２０２でＬｅａｆ＃５からの障害通知パケットを受信したＴｏＲ＃６内のＣＰＵ２０４の障害情報中継部２０８も同様に、以下の動作を実行する。障害情報中継部２０８は、障害通知パケットを受信した＃０のアップリンク側ポート２０２が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部２０８は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート２０３から、Ｓｅｒｖｅｒ＃１１とＳｅｒｖｅｒ＃１２に向けて送信する。
【００９５】
以上の第２のスイッチ装置のＬｅａｆ＃１又はＬｅａｆ＃５から障害通知パケットを受信した第２のスイッチ装置のＴｏＲ＃１、ＴｏＲ＃２、ＴｏＲ＃５，又はＴｏＲ＃６による新たな選択条件が付加された障害通知パケットの送信が、第４段目の障害通知である。太い荒い破線矢印線Ｖで示される経路である。
【００９６】
Ｌｅａｆ＃３の障害検出で障害影響範囲として検出されたＳｅｒｖｅｒ＃５及び＃６以外の各Ｓｅｒｖｅｒ内のＣＰＵ２５０の障害分析・経路制御部２５４はそれぞれ、送受信部２５２を介して上位のＴｏＲからの障害通知パケットを受信すると、以下の動作を実行する。障害分析・経路制御部２５４は、受信した障害通知パケット中の障害影響範囲に含まれる宛先ノード情報毎に、受信した障害通知パケット中の１つ以上の選択条件情報のリンク選択条件を対応付けたエントリを障害情報テーブル２５５に生成する。
【００９７】
以上のようにして、Ｌｅａｆ＃３で検出された障害は、その障害影響範囲として検出されたＳｅｒｖｅｒ＃５及び＃６以外の各Ｓｅｒｖｅｒに、Ｓｐｉｎｅ、Ｌｅａｆ、ＴｏＲをからなるネットワーク段数に依存した固定時間で、障害を通知することが可能となる。
【００９８】
図７は、前述した図４又は図５の動作に基づく、図１のネットワークシステム１００のネットワーク上でのフローの障害回避動作例の説明図である。図７は、図６の説明で前述したように、Ｌｅａｆ＃３のダウンリンク側ポート２０３で検出された障害に対応する障害通知パケットが、その障害影響範囲として検出されたＳｅｒｖｅｒ＃５及び＃６以外の各Ｓｅｒｖｅｒに通知された後の動作を示している。
【００９９】
まず、Ｓｅｒｖｅｒ＃１から送信されるＳｅｒｖｅｒ＃５宛ての障害の影響を受けるフローのパケット送信において、そのヘッダが加工されない場合、そのパケットは、次のように経路制御される。そのパケットは、図７の破線矢印のように、ＴｏＲ＃１→Ｌｅａｆ＃１→Ｓｐｉｎｅ＃１（それぞれ第２のスイッチ装置）の順に中継された後に、障害が検出されたＬｅａｆ＃３（第１のスイッチ装置）の障害が検出されたダウンリンク側ポート２０３に到達してしまう。
【０１００】
本実施形態では、Ｓｅｒｖｅｒ＃１から送信されるＳｅｒｖｅｒ＃５宛ての障害の影響を受けるフローのパケットは、前述した図４（ｂ）の動作Ｉ→II−Ｂ→III→IV−Ｂに従ってヘッダが加工されて、Ｓｅｒｖｅｒ＃１の送受信部２５２から送信される。
【０１０１】
このパケットは、ＴｏＲ＃１（第２のスイッチ装置）のダウンリンク側ポート２０３で受信される。その後、スイッチ部２０１の負荷分散機構により、障害が検出されたスイッチ装置１０１（第１のスイッチ装置）に向かう経路上の例えばアップリンク側ポート２０２とは異なる、Ｌｅａｆ＃２に接続されるアップリンク側ポート２０２に送出される。
【０１０２】
この結果、パケットは、Ｌｅａｆ＃２のダウンリンク側ポート２０３で受信された後、負荷分散機構により、Ｓｐｉｎｅ＃４（Ｓｐｉｎｅ＃２でもよい）に接続されるアップリンク側ポート２０２に中継される。
【０１０３】
これにより、パケットは、Ｓｐｉｎｅ＃４（Ｓｐｉｎｅ＃２でもよい）のダウンリンク側ポート２０３で受信された後、宛先ノードテーブル２０９を用いた経路制御により、Ｌｅａｆ＃４に接続されるダウンリンク側ポート２０３に中継される。
【０１０４】
更に、パケットは、Ｌｅａｆ＃４のアップリンク側ポート２０２で受信された後、前述した図１０に例示される宛先ノードテーブル２０９を用いた経路制御により、ＴｏＲ＃３に向かうダウンリンク側ポート２０３に中継される。
【０１０５】
最後に、パケットは、ＴｏＲ＃３のアップリンク側ポート２０２で受信された後、宛先ノードテーブル２０９を用いた経路制御により、Ｓｅｒｖｅｒ＃５に接続されるダウンリンク側ポート２０３に中継され、Ｓｅｒｖｅｒ＃５に到達する。
【０１０６】
以上のようにして、Ｓｅｒｖｅｒ＃１から送信されたヘッダが加工されたパケットは、図７の実線矢印として示されるように経路制御される。即ち、パケットは、ＴｏＲ＃１→Ｌｅａｆ＃２→Ｓｐｉｎｅ＃４（Ｓｐｉｎｅ＃２でもよい）→Ｌｅａｆ＃４→ＴｏＲ＃３の順に迂回中継された後に、宛先のＳｅｒｖｅｒ＃５に到達することができる。
【０１０７】
Ｓｅｒｖｅｒ＃１から送信されるＳｅｒｖｅｒ＃８宛ての障害の影響を受けないフローのパケットは、図５で説明したように、ヘッダは加工されずにそのまま、Ｓｅｒｖｅｒ＃１の送受信部２５２から送信される（図５（ｃ）の動作II−Ａ）。この結果、パケットは、図７の一点鎖線矢印のように、ＴｏＲ＃１→Ｌｅａｆ＃１→Ｓｐｉｎｅ＃１の順に中継された後に、障害が検出されたＬｅａｆ＃３に到達する。Ｌｅａｆ＃３において、アップリンク側ポート２０２で受信されたパケットは、それに付与されているＳｅｒｖｅｒ＃８宛ての宛先ノード情報に基づき、一点鎖線矢印のように、ＴｏＲ＃４に接続される障害が検出されていないダウンリンク側ポート２０３に中継される。この結果、パケットは、ＴｏＲ＃４のアップリンク側ポート２０２で受信された後、一点鎖線矢印のように、Ｓｅｒｖｅｒ＃８に接続されるダウンリンク側ポート２０３に中継され、Ｓｅｒｖｅｒ＃８に到達する。以上をまとめると、図７はネットワーク上でのフローの障害回避動作を説明している。すなわち、スイッチ装置（Ｌｅａｆ＃３）のダウンリンク側ポートにおいて障害を検出した場合、障害情報すなわち障害ポートの先に接続されるノード群の情報を生成し、その障害情報を含む障害通知パケットを障害のあったそのダウンリンク側ポート以外のポートを介して他のスイッチ装置に通知する。他のスイッチ装置が障害通知パケットを受信したポートが中断を行う。ポートとして選択される条件を障害通知パケットに付加された選択条件付加パケットを送信ノード(Ｓｅｒｖｅｒ＃１)が接続される中継装置（ＴｏＲ＃１）まで伝播する。そして、送信ノード(Ｓｅｒｖｅｒ＃１)は、選択条件付加パケットから抽出される選択条件情報に基づき障害箇所を通過するフローを特定し、障害箇所を外れる様に、すなわち図７の実線で示すフローが選択されるように経路制御を実行する。点線で示すフロー、すなわち障害経路が回避されＳｅｒｖｅｒ＃１からＳｅｒｖｅｒ＃５への通信として、実線で示すフローが選択される。なお、Ｌｅａｆ＃３において、障害検出されダウンリンク側ポート以外のダウンリンク側ポートを通過するフローすなわち１点鎖線で示すフローはＳｅｒｖｅｒ＃１からＳｅｒｖｅｒ＃８への通信経路としてそのまま使用される。このように本発明では、障害の影響を受けるフローの特定とそのフローにおいて経路変更を実行することができる。
【０１０８】
次に、本実施形態において、スイッチ装置１０１内のアップリンク側ポート２０２で障害が検出された場合の動作について説明する。図８は、アップリンク障害時のスイッチ装置１０１の動作説明図であり、図８（ａ）は一部のアップリンク側ポート２０２で障害が検出された場合、図８（ｂ）は全てのアップリンク側ポート２０２で障害が検出された場合である。
【０１０９】
まず、一部のアップリンク側ポート２０２で障害が検出された場合について説明する。
スイッチ装置１０１において、アップリンク側ポート２０２の一部ポート例えば＃０で障害が検出された場合、その障害の検出が負荷分散機構に通知される。負荷分散機構は、障害が検出された＃０のアップリンク側ポート２０２への中継を禁止する。（図８（ａ）の動作Ｉ）。
【０１１０】
負荷分散機構は、ＣＰＵ２０４内の障害検出部２０６に障害を通知する（図８（ａ）の動作II）。この結果、障害検出部２０６は、ＲＡＭ２０５内のポート選択条件テーブル２１０の内容を、障害発生後の条件に変更する（図８（ａ）のIII）。
【０１１１】
その後、スイッチ部２０１内の負荷分散機構は、障害発生後のポート選択条件テーブル２１０の内容に基づいて負荷分散処理を実行する。これにより、今まで＃０のアップリンク側ポート２０２に中継されていたパケットは、＃１のアップリンク側ポート２０２に中継されるようになり、他の迂回経路を経由して宛先のエンドノード１０２に到達する。
【０１１２】
次に、全てのアップリンク側ポート２０２で障害が検出された場合について説明する。
スイッチ装置１０１において、アップリンク側ポート２０２の全ポート例えば＃０及び＃１の両方で障害が検出された場合、その障害の検出がＣＰＵ２０４に通知される。当該スイッチ装置１０１ではアップリンクに向かう経路が全て使用不可となるため、ＣＰＵ２０４は、＃０及び＃１の全てのダウンリンク側ポート２０３を閉塞させることで、障害を他のスイッチ装置１０１及びエンドノード１０２に伝播させる。
【０１１３】
以上説明した動作を実現するための詳細動作について、以下に説明してゆく。
まず、スイッチ装置１０１のスイッチ部２０１内の負荷分散機構（図２（ａ）参照）について説明する。負荷分散機構は、ダウンリンク側ポート２０３から受信したパケットによりハッシュ値を計算する。そして、負荷分散機構は、スイッチ部２０１を制御して、その計算結果値に対応するアップリンク側ポート２０２にパケットを中継させる負荷分散処理を実行する。
【０１１４】
具体的には、負荷分散機構は、ダウンリンク側ポート２０３でパケットｐを受信すると、次式により、パケットｐに対応するハッシュ値ｈを計算する。
ｈ＝Ｈ（ｐ）  ・・・（１）
【０１１５】
上記（１）式において、Ｈは、ＲＡＭ２０５内のポート選択条件テーブル２１０に記憶されているＡｌｇｏｒｉｔｈｍＩＤが示すハッシュ値計算アルゴリズムに従ってハッシュ値を計算する関数である。
【０１１６】
更に、負荷分散機構は、図２（ａ）のＲＡＭ２０５内のポート選択条件テーブル２１０から、現在障害が発生しておらず有効なアップリンク側ポート２０２の数であるリンク数Ｍを取得する。そして、（１）式で算出したハッシュ値ｈと、リンク数Ｍとに基づいて、次式により、有効なＭ個のアップリンク側ポート２０２から１つのアップリンク側ポート２０２を算出する。
Ｎ＝Ｆ（ｈ，Ｍ）  ・・・（２）
【０１１７】
ここで、Ｆは、予め選択された計算アルゴリズムに従って０からＭ−１の値の中から１つを計算する関数である。一般的には、Ｆとして剰余演算関数を採用することができ、その場合上記（２）式は、次式の剰余演算式となる。
Ｎ＝ｈ  ％  Ｍ  ・・・（３）
【０１１８】
「％」は、ｈをＭで割った余りを演算する剰余演算である。この結果、負荷分散機構は、受信したパケットに対して、０からＭ−１の値のうちの１つの数値である値Ｎを算出する。
【０１１９】
ここで、現在有効なアップリンク側ポート２０２の数はリンク数Ｍに等しく、（２）式又は（３）式によって算出される計算結果値Ｎは０〜Ｍ−１までのＭ個の値の何れかに対応する。従って、計算結果値Ｎはアップリンク側ポート２０２のポート番号であると見なすことができる。ただし、特定のポート番号のアップリンク側ポート２０２が例えば障害によって使用できなくなっている場合がある。このような場合に対処するために、図２のポート選択条件テーブル２１０が、現在有効なＭ個のアップリンク側ポート２０２の各ポート番号と（１）式及び（２）式（又は（３）式）により算出され得るＭ個の計算結果値Ｎとの対応表を予め保持する。
【０１２０】
図９は、図２のＲＡＭ２０５に保持されるポート選択条件テーブル２１０の構成例を示す図である。
【０１２１】
ポート選択条件テーブル２１０はまず、図９（ａ）に示される「ＡｌｇｏｒｉｔｈｍＩＤ」を保持する。このＡｌｇｏｒｉｔｈｍＩＤは、上記（１）式のハッシュ関数Ｈ及び上記（２）式の関数Ｆのアルゴリズムを特定するアルゴリズム識別情報である。このＡｌｇｏｒｉｔｈｍＩＤは、後述する障害通知時にエンドノード１０２に通知される。図９（ａ）の例では、ＡｌｇｏｒｉｔｈｍＩＤとして値「１」が保持されている。これは、自装置が（１）式及び（２）式の演算に用いるアルゴリズムの番号が１番、より具体的にはそのアルゴリズムに対応する計算プログラムの識別番号が１番であることを示している。
【０１２２】
前述した（１）式及び（２）式の具体的な演算としては様々なアルゴリズムが存在し、利用者選択やスイッチ装置１０１（例えば、図１のＳｐｉｎｅ、Ｌｅａｆ、ＴｏＲ）毎に異なる可能性がある。このため、本実施形態では、ネットワークシステム１００内で一意にアルゴリズムを特定可能なＡｌｇｏｒｉｔｈｍＩＤの値により、アップリンク側の負荷分散機構のためのアルゴリズムを識別する。アルゴリズムの実態は、例えばプログラムコードで提供され、各スイッチ装置１０１は、それぞれが使用するＡｌｇｏｒｉｔｈｍＩＤに対応するアルゴリズム（プログラムコード）を保有する。
【０１２３】
次に、ポート選択条件テーブル２１０は、図９（ｂ）に示されるリンク数Ｍを記憶する。図９（ｂ）の例では、リンク数Ｍとして値「ｍ」が保持されている。このリンク数Ｍは、スイッチ装置１０１が保有するアップリンク側ポート２０２のうち、障害が発生していない有効なポートの数であり、ＣＰＵ２０４によるアップリンク側ポート２０２の障害検出結果に応じて随時更新される。この処理の詳細については後述する。
【０１２４】
更に、ポート選択条件テーブル２１０は、図９（ｃ）に示される対応表のデータを記憶する。この対応表は、現在有効なＭ個のアップリンク側ポート２０２の各ポート番号「ｕ１、ｕ２、・・・、ｕＭ」と、（１）式及び（２）式（又は（３）式）により算出され得るＭ個の計算結果値「０、１、・・・、Ｍ−１」との対応関係を示す。ＣＰＵ２０４は、図８で前述したように、アップリンク側ポート２０２で障害を検出する毎に、図２（ａ）のポート選択条件テーブル２１０の内容を更新する。具体的には、ＣＰＵ２０４は、図９（ｂ）のリンク数Ｍの値を−１し、図９（ｃ）の対応表において、障害が検出されたアップリンク側ポート２０２のポート番号に対応するエントリを削除して、０〜Ｍ−２までの計算結果Ｎを並び直す。これにより、負荷分散機構は、常に有効なアップリンク側ポート２０２への負荷分散を実行することが可能となる。
【０１２５】
以上より、スイッチ部２０１内の負荷分散機構は、ＲＡＭ２０５内のポート選択条件テーブル２１０からＡｌｇｏｒｉｔｈｍＩＤ（図９（ａ））とリンク数Ｍ（図９（ｂ））を読み出し、ＲＡＭ２０５からそのＡｌｇｏｒｉｔｈｍＩＤに対応する演算プログラムを呼び出す。負荷分散機構は、上記リンク数Ｍと受信したパケットｐを入力として、上記演算プログラムにより、上記（１）式及び（２）式（又は（３）式）の演算を実行し、計算結果Ｎを得る。負荷分散機構は、ＲＡＭ２０５内のポート選択条件テーブル２１０の対応表（図９（ｃ））から、計算結果Ｎに対応するポート番号を決定する。負荷分散機構は、スイッチ部２０１を制御して、ダウンリンク側ポート２０３で受信されたパケットｐを、上記ポート番号に対応するアップリンク側ポート２０２に中継する。
【０１２６】
本実施形態のポート選択条件テーブル２１０は、図３（ｂ）の動作Ｖとして前述したように、スイッチ装置１０１（第２のスイッチ装置）がアップリンク側ポート２０２から障害通知パケットを受信した場合にも使用される。即ち、第２のスイッチ装置内のＣＰＵ２０４の障害情報中継部２０８は、障害通知パケットを受信したアップリンク側ポート２０２がパケットの中継を行うポートとして選択されるリンク選択条件をポート選択条件テーブル２１０から取得する。そして、障害情報中継部２０８は、その取得したリンク選択条件を、障害通知パケットに選択条件情報として付加する。具体的には、障害情報中継部２０８は、図９に例示される構成例１を有するポート選択条件テーブル２１０から、障害通知パケットを受信した＃１のアップリンク側ポート２０２に対応する選択条件情報を取得する。この選択条件情報は、リンク数Ｍと、アルゴリズム識別情報ＡｌｇｏｒｉｔｈｍＩＤと、障害通知パケット受信した＃１のアップリンク側ポート２０２に対応する計算の結果値とを含む。そして、障害情報中継部２０８は、障害通知パケットに上記取得した選択条件情報を追加して付与する。すなわち、新しい障害通知パケットとして、選択条件付加パケットを生成する。
【０１２７】
また、本実施形態のポート選択条件テーブル２１０は、スイッチ装置１０１内のアップリンク側ポート２０２の一部で障害が検出された場合の前述した図８（ａ）での動作IIIにおいて、障害検出部２０６が、その内容を、障害発生後の条件に変更する。具体的には、障害検出部２０６は、図９（ｂ）に例示したポート選択条件テーブル２１０のリンク数Ｍの値を−１し、図９（ｃ）の対応表において、＃０のアップリンク側ポート２０２のポート番号に対応するエントリを削除して、０〜Ｍ−２までの計算結果Ｎを並び直す。
【０１２８】
次に本実施形態において、領域２では、スイッチ装置１０１のスイッチ部２０１は、前述したように、アップリンク側ポート２０２で受信したパケットをダウンリンク側ポート２０３に中継する際に、ＦＤＢを用いた一意な経路制御を実行する。ＦＤＢでは一般に、過去に送受信した実績のある送信元ノード（エンドノード１０２）のＭＡＣアドレスと受信したポートのポート番号との対応関係が、転送データベースとして記憶される。そして、新たなパケットが受信されると、転送データベースにそのパケットの宛先ＭＡＣアドレスと同じＭＡＣアドレスが記憶されていれば、そのＭＡＣアドレスと共に記憶されているポート番号が取得され、そのポート番号に対応するポートにパケットが中継される。なお、宛先ＭＡＣアドレス未学習のパケットはアップリング側ポートに中継される（「第１の領域」の中継方式）。Ｓｐｉｎｅのスイッチで未学習パケットを受信した場合は、宛先なしで廃棄、が通常動作となる。このＳｐｉｎｅまで上がる段階でダウンリンク側ポートのみで学習を行うことになる。
【０１２９】
また、実際には宛先ＭＡＣアドレスに対応するエンドノードが存在するのに中継されずに廃棄されるケースを避けるため、コントローラによりＦＤＢを登録するか、事前に学習パケットをエンドノードから送信する。
【０１３０】
本実施形態では、前述したように、上述のＦＤＢを用いた経路制御が、アップリンク側ポート２０２からダウンリンク側ポート２０３へのパケット中継時において実行される。そして、ＭＡＣアドレスとポート番号との対応関係の学習は、ダウンリンク側ポート２０３において実施される。このようにして、本実施形態では、アップリンク側ポート２０２からダウンリンク側ポート２０３へのパケット中継において、同じ宛先のパケットは障害が発生していなければ常に同じダウンリンク側ポート２０３に中継され、一意な経路制御が実行される。
【０１３１】
また、本実施形態では、前述したように、各スイッチ装置１０１でＦＤＢが確実に設定されるようにするために、各エンドノード１０２側が、Ｓｐｉｎｅのスイッチ装置１０１に向けて、学習パケットを送信する。各スイッチ装置１０１は、この学習パケットを受信することにより、その学習パケットに設定されている送信元ＭＡＣアドレスとその学習パケットを受信したダウンリンク側ポート２０３との対応関係を学習して転送データベースに設定する。学習パケットの送信タイミングは、例えばエンドノード１０２の接続時であってもよいし、定期的であってもよい。
【０１３２】
図１０は、本実施形態において、上記ＭＡＣアドレスとポート番号との対応関係を記憶するための、図２（ａ）に示されるスイッチ装置１０１内のＲＡＭ２０５に記憶される宛先ノードテーブル２０９の構成例１を示す図である。
【０１３３】
宛先ノードテーブル２０９のメモリ番地１、２、・・・、Ｌ毎の各エントリは、ＭＡＣアドレスと、ＶＬＡＮ  ＩＤと、ポートベクトル（以下「ＰｏｒｔＶｅｃｔｏｒ」と記載）を記憶する。ポート番号を０起点とする場合、ＰｏｒｔＶｅｃｔｏｒは、それを２進数で表したときに「１」が立っているビット位置（例えば、１ビット目〜３６ビット目）に対応する値（例えば１〜３６）を−１した値が、ポート番号を示す。このポート番号は、そのエントリに記憶されているＭＡＣアドレスを宛先ＭＡＣアドレスとして有し、そのエントリに記憶されているＶＬＡＮ  ＩＤが設定されたパケットが転送されるべきポートに対応している。
【０１３４】
或る宛先ＭＡＣアドレスとＶＬＡＮ  ＩＤが設定されたパケットが複数のポートに中継されるケースに対応するために、ＰｏｒｔＶｅｃｔｏｒの複数のビット位置に「１」が立ち得る。例えば、図１０のメモリ番地＝「１」では、１６進値で「１」即ち２進値で１ビット目に「１」が立っているＰｏｒｔＶｅｃｔｏｒが登録されている。このため、メモリ番地＝「１」に記憶されているＭＡＣアドレス＝「００：０１：０２：０３：０４：０５」、ＶＬＡＮ  ＩＤ＝「１」を宛先ＭＡＣアドレス及びＶＬＡＮ  ＩＤとして有するパケットは、ポート番号＝「０」のポートに中継される。また、メモリ番地＝「２」では、１６進値で「２」即ち２進値で２ビット目に「１」が立っているＰｏｒｔＶｅｃｔｏｒが登録されている。このため、メモリ番地＝「２」に記憶されているＭＡＣアドレス＝「００：０１：０２：０３：０４：０６」、ＶＬＡＮ  ＩＤ＝「１０」を宛先ＭＡＣアドレス及びＶＬＡＮ  ＩＤとして有するパケットは、ポート番号＝「１」のポートに中継される。更に、メモリ番地＝「３」では、１６進値「１０」は２進値で「１００００」に対応するので５ビット目に「１」が立っているＰｏｒｔＶｅｃｔｏｒが登録されている。このため、メモリ番地＝「３」に記憶されているＭＡＣアドレス＝「００：０１：０２：０３：０４：０７」、ＶＬＡＮ  ＩＤ＝「１」を宛先ＭＡＣアドレス及びＶＬＡＮ  ＩＤとして有するパケットは、ポート番号＝「４」のポートに中継される。
【０１３５】
図２（ａ）において、スイッチ部２０１は、アップリンク側ポート２０２からパケットを受信すると、そのパケットの宛先ＭＡＣアドレスで宛先ノードテーブル２０９のＭＡＣアドレスのフィールドを検索する。そして、スイッチ部２０１は、マッチしたエントリのＰｏｒｔＶｅｃｔｏｒ上（２進値）で「１」が立っているビット位置をポート番号として抽出する。スイッチ部２０１は、そのポート番号に対応するダウンリンク側ポート２０３にパケットを中継する。
【０１３６】
上述の宛先ノードテーブル２０９は、前述した図３（ａ）の動作IIにおいて、第１のスイッチ装置内のＣＰＵ２０４の障害情報生成部２０７が、障害影響範囲を決定する際にも参照する。図１０に例示したように、宛先ノードテーブル２０９は、宛先ノード情報として宛先ノードのＭＡＣアドレスを含む。障害情報生成部２０７は、宛先ノードテーブル２０９の各エントリに記憶されているＰｏｒｔＶｅｃｔｏｒのうち、障害が検出された例えばダウンリンク側ポート２０３のポート番号＝「１」に対応するビット位置に「１」が立っているＰｏｒｔＶｅｃｔｏｒを抽出する。そして、障害情報生成部２０７は、そのＰｏｒｔＶｅｃｔｏｒに対応するエントリに記憶されているＭＡＣアドレスを、宛先ノードテーブル２０９から取得する。このようなエントリは、同時に１つ以上検出されてもよい。そして、障害情報生成部２０７は、その取得した１つ以上のＭＡＣアドレスを障害影響範囲（後述する図１１の障害情報のデータ構成を参照）として含む障害情報を生成する。
【０１３７】
即ち、障害情報生成部２０７は、障害検出部２０６から、障害が検出されたダウンリンク側ポート２０３のポート番号＝「１」を通知される。障害情報生成部２０７は、値「１」（1ビット目が「１」である２進数）を、障害検出ポート番号に対応する１ビットだけ左シフト演算する。即ち、式「１＜＜１」で表される演算が実行される。なお、「＜＜」は左ビットシフト演算の演算記号を示す。障害情報生成部２０７は、その演算結果の２進数値と、宛先ノードテーブル２０９の各エントリのＰｏｒｔＶｅｃｔｏｒの２進数値とのビット論理積を演算する。障害情報生成部２０７は、演算結果が０でなければ、即ち、そのエントリのＰｏｒｔＶｅｃｔｏｒの上記障害が検出されたポート番号に対応する２ビット目に「１」が立っていれば、そのエントリに記憶されているＭａｃアドレスを宛先ノード情報として抽出する。例えば、障害が検出されたポート番号＝「１」に対応して、値「１」を１ビット左シフトすると２進数として２ビット目に１が立つ２進数値「００・・・１０」が得られる。一方、図１０に例示される宛先ノードテーブル２０９のメモリ番地＝「２」のＰｏｒｔＶｅｃｔｏｒ＝０ｘ００００００００２に対応する２進数値も２ビット目に１が立っている。このため、両者のビット論理積の演算を行うと、演算結果は０でない。また、図１０に例示される宛先ノードテーブル２０９のメモリ番地＝「３」のＰｏｒｔＶｅｃｔｏｒ＝０ｘ００００００００ａに対応する２進数値も２ビット目に１が立っている場合がある。従って、このときも、両者のビット論理積の演算を行うと、演算結果は０でない。よって障害情報生成部２０７は、メモリ番地＝「２」と「３」の各エントリ中のＭＡＣアドレス＝「００：０１：０２：０３：０４：０６」と「００：０１：０２：０３：０４：０７」を宛先ノード情報として抽出し、それらを障害影響範囲として含む障害情報を生成する。
【０１３８】
図１１は、図３（ａ）の第１のスイッチ装置で生成され、図３（ｂ）の第２のスイッチ装置で選択条件情報が付加される障害通知パケットの構成例１を示す図である。この構成例１は、図３（ａ）の第１のスイッチ装置のＣＰＵ２０４内の障害情報生成部２０７が生成する障害情報中の障害影響範囲として、図１０に例示される宛先ノードテーブル２０９の構成例１から取得されるＭＡＣアドレスをノードＩＤとして含む場合の例である。この例では、ＭＡＣアドレスは、６バイトのデータサイズを有する。図１１の障害通知パケットの構成例１における各フィールドの意味は、以下の通りである。
【０１３９】
宛先ＭＡＣアドレスは、制御パケットであることを表す予約アドレスである。宛先ＭＡＣアドレスは、「（Ｈ）」の記号が付加されているＨビット群と「（Ｌ）」の記号が付加されているＬビット群を合わせて、全部で６バイト＝４８ビットのデータである。前述したように、障害通知パケットは、各エンドノード１０２に向けてブロードキャストされるパケットであるため、宛先ＭＡＣアドレスとしては、特定の宛先のＭＡＣアドレスではなく、制御パケットを表すアドレスが設定される。
【０１４０】
送信元ＭＡＣアドレスは、障害通知パケットを生成し又は処理するスイッチ装置１０１（図３（ａ）の第１のスイッチ装置及び図３（ｂ）の第２のスイッチ装置）のＭＡＣアドレスである。送信元ＭＡＣアドレスも、宛先ＭＡＣアドレスと同様に、「（Ｈ）」の記号が付加されているＨビット群と「（Ｌ）」の記号が付加されているＬビット群を合わせて、全部で６バイト＝４８ビットのデータである。送信元ＭＡＣアドレスは、障害通知パケットがスイッチ装置１０１で中継される毎に、そのスイッチ装置１０１のＭＡＣアドレスに付け替えられる。
【０１４１】
Ｅｔｈｅｒ  Ｔｙｐｅは、障害通知であることを示す１６ビットの予約値(例えば１６進値「０ｘ７１２」に対応する１６ビット２進値データ)である。他のＥｔｈｅｒ  Ｔｙｐｅと重ならなければ、任意の値を設定してよい。
【０１４２】
障害検知ノードＩＤは、障害が検出されたスイッチ装置１０１（図３（ａ）の第１のスイッチ装置）のＭＡＣアドレスである。障害検知ノードＩＤは、宛先ＭＡＣアドレス等と同様に、「（Ｈ）」の記号が付加されているＨビット群と「（Ｌ）」の記号が付加されているＬビット群を合わせて、全部で６バイト＝４８ビットのデータである。
【０１４３】
障害番号は、障害が検出された各スイッチ装置１０１（図３（ａ）の第１のスイッチ装置）毎に、そのスイッチ装置１０１内での障害発生順に１６ビット値が振られ、複数障害が発生した際の識別に利用される。
【０１４４】
障害影響範囲ノード数＝ｎは、図３（ａ）の第１のスイッチ装置の障害情報生成部２０７により障害影響範囲として検出された、障害が検出されたダウンリンク側ポート２０３の先に接続されるエンドノード１０２の数を示す１６ビット値である。
【０１４５】
障害影響範囲は、図３（ａ）の第１のスイッチ装置の障害情報生成部２０７により障害影響範囲として検出された、障害が検出されたダウンリンク側ポート２０３の先に接続されるｎ個のエンドノード１０２の各ＭＡＣアドレス＝ノードＩＤである。それぞれのノードＩＤは、６バイトのデータサイズを有する。６バイト×ｎが３２ビットで割り切れないときは、末尾１６ビットにパディングが挿入される。
【０１４６】
リンク選択条件リストは、図３（ａ）の第１のスイッチ装置から送信された障害通知パケットがエンドノード１０２に到達するまでにダウンリンク方向に途中ｍ個の図３（ｂ）の第２のスイッチ装置を通過するときに付加される、ｍ個のリンク選択条件のリストである。図１２は、リンク選択条件リストの詳細構成例を示す図である。リンク選択条件リストにおいて、最初の３２ビット中の上位１６ビットには、リンク選択条件数＝ｍが設定され、下位１６ビットにはパディングが設定される。以降、選択条件情報として６４ビットずつｍ組のリンク選択条件が設定される。リンク選択条件としては、リンク数Ｍと障害通知パケットを受信したアップリンク側ポート２０２に対応する計算の結果値Ｎとアルゴリズム識別情報ＡｌｇｏｒｉｔｈｍＩＤとが設定される。このリンク選択条件は、図３（ａ）で説明したように、第２のスイッチ装置において、ＣＰＵ２０４内の障害情報中継部２０８が、ＲＡＭ２０５内のポート選択条件テーブル２１０から取得して設定する。
【０１４７】
図１３は、図３（ｃ）で前述したように、エンドノード１０２内のＣＰＵ２５０の障害分析・経路制御部２５４によって設定される、ＲＡＭ２５１が記憶する障害情報テーブル２５５の構成例１を示す図である。この構成例１は、図３（ａ）の第１のスイッチ装置のＣＰＵ２０４内の障害情報生成部２０７が生成する障害情報中の障害影響範囲として、図１０に例示される宛先ノードテーブル２０９の構成例１から取得されるＭＡＣアドレスをノードＩＤとして含む場合の例である。図３（ｃ）のエンドノード１０２内のＣＰＵ２５０の障害分析・経路制御部２５４は、送受信部２５２から障害通知パケットを受信すると、図１１のデータ構成例１の、障害影響範囲中のｎ個のノードＩＤと、リンク選択条件リスト中のｍ個のリンク選択条件を抽出する。障害分析・経路制御部２５４は、図１３のデータ構成例１を有するＲＡＭ２０５に記憶される障害情報テーブル２５５において、各メモリ番地のエントリの宛先ノードＩＤとして、上記抽出したｎ個のノードＩＤ（ＭＡＣアドレス）をそれぞれ設定する。また、障害分析・経路制御部２５４は、上記障害情報テーブル２５５において、各メモリ番地の上記ｎ個のノードＩＤが設定されたｎ個のエントリの条件１、条件２、・・・の各条件フィールドとして、上記抽出したｍ個のリンク選択条件を、各エントリ共通で設定する。
【０１４８】
障害情報テーブル２５５は、各エントリのノードＩＤ（ＭＡＣアドレス）をキーとするハッシュテーブルを構成する。
【０１４９】
上記エントリ中の条件１、条件２、・・・のｍ個の条件フィールドは、障害通知パケットがエンドノード１０２に到達するまでにダウンリンク方向に途中ｍ個の図３（ｂ）の第２のスイッチ装置を通過する際に付加されるｍ個のリンク選択条件に対応する。今、図１のネットワークシステム１００におけるネットワーク段数をＤとする。この場合、障害情報テーブル２５５に設定される条件１、条件２、・・・の最大数Ｙは、図３（ｂ）の第２のスイッチ装置となり得るスイッチ装置１０１を含む段数、即ち、Ｓｐｉｎｅのネットワーク段を除いた「Ｄ−１」個である。図１の例では、ネットワーク段数はＳｐｉｎｅ、Ｌｅａｆ、ＴｏＲからなる３段であるから、Ｙは、Ｓｐｉｎｅのネットワーク段を除いた３−１＝２（条件１と条件２）である。
【０１５０】
図１３に例示される障害情報テーブル２５５において、「ｎ／ａ」は、未使用のフィールド又はエントリを示すための無効値である。
【０１５１】
図１２に例示したように、障害通知パケットにより通知されるリンク選択条件は、第２のスイッチ装置でのリンク数Ｍ、アルゴリズム識別情報ＡｌｇｏｒｉｔｈｍＩＤ、及び障害通知パケットを受信したアップリンク側ポート２０２に対応する計算の結果値Ｎである。そして、図１３に例示したように、障害情報テーブル２５５は、宛先ノードＩＤ毎に、条件１、条件２、・・・の各条件フィールドを記憶し、各条件フィールドは計算の結果Ｎを記憶する。
【０１５２】
ここで、条件フィールドの１つに対応する第２のスイッチ装置（図３（ｂ）参照）において、複数のアップリンク側ポート２０２で障害通知パケットが受信されるケースがある。例えば、前述した図６において、障害が検出されたＬｅａｆ＃３から送信された障害通知パケットの１つは、Ｓｐｉｎｅ＃１を経由してＬｅａｆ＃１内の例えば＃０のアップリンク側ポート２０２で受信される。また、障害が検出されたＬｅａｆ＃３から送信された障害通知パケットの他の１つは、Ｓｐｉｎｅ＃３を経由してやはりＬｅａｆ＃１内の例えば＃１のアップリンク側ポート２０２で受信される。この場合、Ｌｅａｆ＃１内の＃０及び＃１の２つのアップリンク側ポート２０２で障害通知パケットが受信される。そして、第２のスイッチ装置であるＬｅａｆ＃１は、＃０のアップリンク側ポート２０２で受信された障害通知パケットに、＃０のアップリンク側ポート２０２が選択されるためのリンク選択条件を選択条件情報として付加して、ダウンリンク側ポート２０３から送信する。この障害通知パケットには、リンク選択条件として、＃０のアップリンク側ポート２０２が選択されるための計算の結果値Ｎ＝例えば「０」が付与されている。また、この障害通知パケットには、障害影響範囲として、Ｓｅｒｖｅｒ＃５に対応するノードＩＤと、Ｓｅｒｖｅｒ＃６に対応するノードＩＤとが付与されている。一方、Ｌｅａｆ＃１は、＃１のアップリンク側ポート２０２で受信された障害通知パケットには、＃１のアップリンク側ポート２０２が選択されるためのリンク選択条件を選択条件情報として付加して、ダウンリンク側ポート２０３から送信する。この障害通知パケットには、リンク選択条件として、＃１のアップリンク側ポート２０２が選択されるための計算の結果値Ｎ＝例えば「１」が付与されている。また、この障害通知パケットにも、障害影響範囲として、Ｓｅｒｖｅｒ＃５に対応するノードＩＤと、Ｓｅｒｖｅｒ＃６に対応するノードＩＤとが付与されている。
【０１５３】
図６で、Ｌｅａｆ＃３からの２つの障害通知パケットがエンドノード１０２のＳｅｒｖｅｒ＃１で受信されると、Ｓｅｒｖｅｒ＃１内のＣＰＵ２０４の障害分析・経路制御部２５４（図３（ｃ））は、ＲＡＭ２０５上の障害情報テーブル２５５に障害情報を登録する。このとき、障害分析・経路制御部２５４はまず、図１３に例示される障害情報テーブル２５５に、上記２つの障害通知パケットに障害影響範囲として共通に設定されているＳｅｒｖｅｒ＃５に対応するエントリと、Ｓｅｒｖｅｒ＃６に対応する２つのエントリを生成する。１つのエントリには障害影響範囲として設定されているＳｅｒｖｅｒ＃５に対応するノードＩＤが設定され、他のエントリには障害影響範囲として設定されているＳｅｒｖｅｒ＃６に対応するノードＩＤが設定される。ノードＩＤは、図１１の説明で前述したように、例えばＭＡＣアドレスである。
【０１５４】
続いて、障害分析・経路制御部２５４は、上記各エントリ内の１つの条件フィールドに、受信した１つ目の障害通知パケットに設定されている、Ｌｅａｆ＃３の例えば＃０のアップリンク側ポート２０２が選択されるためのリンク選択条件を設定する。具体的には、上記条件フィールドに、Ｌｅａｆ＃３に対応するリンク数Ｍ、アルゴリズムＩＤ（ＡｌｇｏｒｉｔｈｍＩＤ）、及び＃０のアップリンク側ポート２０２が選択されるための計算の結果値Ｎ＝例えば「０」が登録される。これらの情報は、Ｌｅａｆ＃３である図３（ｂ）の第２のスイッチ装置内のＲＡＭ２０５内のポート選択条件テーブル２１０の、図９（ｂ）、（ａ）に例示される各データ及び、図９（ｃ）に例示される対応表から取得されたものである。
【０１５５】
更に続いて、障害分析・経路制御部２５４は、上記各エントリ内の同じ条件フィールドに、受信した２つ目の障害通知パケットに設定されている、Ｌｅａｆ＃３の例えば＃１のアップリンク側ポート２０２が選択されるためのリンク選択条件を設定する。具体的にはまず、上記条件フィールドの、Ｌｅａｆ＃３に対応するリンク数Ｍ及びアルゴリズムＩＤ（ＡｌｇｏｒｉｔｈｍＩＤ）は、先に１つ目の障害通知パケットに対応して登録されたものと同じである。加えて、上記条件フィールドに、＃１のアップリンク側ポート２０２が選択されるための計算の結果値Ｎ＝例えば「１」が重ねて登録される。この計算の結果値Ｎは、Ｌｅａｆ＃３である図３（ｂ）の第２のスイッチ装置内のＲＡＭ２０５内のポート選択条件テーブル２１０の、図９（ｃ）に例示される対応表から取得されたものである。
【０１５６】
以上のように、同じ宛先ノードＩＤに対応するエントリ中の１つの条件フィールドに関して、リンク数ＭとＡｌｇｏｒｉｔｈｍＩＤは同じでも、複数の計算の結果値Ｎが登録されることになる。図１４は、上述のようなケースに対応可能な、図１３に例示される障害情報テーブル２５５の各エントリの条件１、条件２、・・・の各条件フィールドの詳細構成例を示す図である。図１４（ａ）に示されるように、条件フィールドには、リンク数ＭとアルゴリズムＩＤ（ＡｌｇｏｒｉｔｈｍＩＤ）に加えて、単純な計算の結果値Ｎではなく、計算の結果値ＮのＰｏｒｔＶｅｃｔｏｒが記憶される。このＰｏｒｔＶｅｃｔｏｒは、値「１」（1ビット目が「１」である２進数）を計算の結果値Ｎに対応するビット数だけ左ビットシフト演算をして得られる２進数値（図１４（ａ）では１６進数値で表示されている）である。即ち、式「１＜＜Ｎ」で表される演算結果である。複数の計算の結果値Ｎの登録においては、値「１」を新たに受信された計算の結果値Ｎに対応するビット数だけ左ビットシフト演算をして得た２進数値と、既にあるＰｏｒｔＶｅｃｔｏｒの２進数値とのビット論理和を演算した結果が、新たなＰｏｒｔＶｅｃｔｏｒとなる。即ち、更新前のＰｏｒｔＶｅｃｔｏｒをＰＶで表し、更新後のＰｏｒｔＶｅｃｔｏｒをＰＶ＿ｎｅｗで表せば、式「ＰＶ＿ｎｅｗ＝ＰＶ｜（１＜＜Ｎ）」で表される演算が実行される。ここで、「｜」は、ビット論理和の演算記号を示す。なお、ＰｏｒｔＶｅｃｔｏｒの初期値は、オール「０」である。つまり、ＰｏｒｔＶｅｃｔｏｒ上で「１」が立っている１つ以上のビット位置が、そのＰｏｒｔＶｅｃｔｏｒが記憶される条件フィールドにおける１つ以上の計算の結果値Ｎである。
【０１５７】
エンドノード１０２内のＲＡＭ２５１には、図１４（ｂ）のテーブルデータが記憶される。このテーブルデータは、上記アルゴリズムＩＤの値１、２、３，・・・、Ｎ毎に、演算プログラムコードＰｒｏｇｒａｍ＃１、Ｐｒｏｇｒａｍ＃２、・・・の実体が記憶された図１４（ｃ）のメモリ領域へのポインタを対応付けたエントリを有する。
【０１５８】
図４（ｂ）の説明で前述したように、パケットの送信前に、障害情報テーブル２５５上にそのパケットに設定されている宛先ノードＩＤと等しい宛先ノードＩＤが設定されたエントリが見つかった場合、障害分析・経路制御部２５４は、以下の制御動作を実行する。
【０１５９】
障害分析・経路制御部２５４は、図１３に例示される障害情報テーブル２５５上で特定された上記エントリに記憶されている各条件フィールド内のリンク選択条件毎に、下記演算及び判定を実行する。
【０１６０】
例えば、図１３のメモリ番地１のエントリの条件１に関して、障害分析・経路制御部２５４は、パケットｐに対して、条件１のリンク選択条件の演算「Ｆ（Ｈ（ｐ），Ｍ）」（前述した（１）式及び（２）式を参照）を実行して、計算結果ｎを得る。具体的には、障害分析・経路制御部２５４は、障害情報テーブル２５５の上記エントリの条件１フィールドから、図１４（ａ）のアルゴリズムＩＤを抽出する。そして、障害分析・経路制御部２５４は、図１４（ｂ）のテーブルデータから、上記抽出したアルゴリズムＩＤに対応する、ＲＡＭ２０５に記憶されている図１４（ｃ）の演算プログラムコードＰｒｏｇｒａｍ＃１を呼び出す。障害分析・経路制御部２５４は、障害情報テーブル２５５の上記エントリの条件１フィールドから、図１４（ａ）のリンク数Ｍを抽出する。障害分析・経路制御部２５４は、送信されるパケットｐと、上記リンク数Ｍを入力として、上記演算プログラムコードＰｒｏｇｒａｍ＃１を実行することにより、前述した（１）式及び（２）式（又は（３）式）に対応する演算を実行し、計算結果ｎを算出する。
【０１６１】
障害情報テーブル２５５の上記エントリの条件１フィールドから、図１４（ａ）のＰｏｒｔＶｅｃｔｏｒを抽出する。障害分析・経路制御部２５４は、値「１」（1ビット目が「１」である２進数）を上記計算結果ｎに対応するビット数だけ左シフト演算をして得られる２進数値と、上記ＰｏｒｔＶｅｃｔｏｒの２進数値とのビット論理積を演算する。即ち、ＰｏｒｔＶｅｃｔｏｒをＰＶで表せば、式「ＰＶ  ＆  （１＜＜ｎ）」で表される演算が実行される。ここで、「＆」は、ビット論理積の演算記号を示す。
【０１６２】
障害情報生成部２０７は、上記演算の結果が０でなければ、即ち、条件１フィールドのＰｏｒｔＶｅｃｔｏｒの上記計算結果ｎに対応するビット位置に「１」が立っていれば、送信されるパケットｐは条件１のリンク選択条件にマッチすると判定する。
【０１６３】
エンドノード１０２が上記計算を行うための各スイッチ装置１０１（第２のスイッチ装置）のリンク選択条件に対応する演算アルゴリズムの図１４（ｃ）に例示される演算プログラムコードは、送信ノードである各エンドノード１０２が予め複数保持していてもよい。或いは、図１のネットワークシステム１００の初期化時に、各スイッチ装置１０１が各エンドノード１０２に配布してもよい。
【０１６４】
以上の構成を有する実施形態の、障害のための具体的な制御処理の例について、以下に説明する。
【０１６５】
図１５は、前述した図３（ａ）の第１のスイッチ装置においてＣＰＵ２０４が実行する、リンク障害検出処理の例を示すフローチャートである。この処理は例えば、ＣＰＵ２０４が、特には図示しないＲＯＭ（リードオンリーメモリ）に記憶された障害情報生成処理プログラムを実行する動作である。この処理は、第１のスイッチ装置において、ＣＰＵ２０４の実行機能である障害検出部２０６が、ダウンリンク側ポート２０３のうちの１つで発生した障害を検出することにより（図３（ａ）の動作Ｉ）、起動される。リンク障害検出処理は、図２（ａ）のスイッチ装置１０１におけるＣＰＵ２０４の実行機能である、障害情報生成部２０７と障害情報中継部２０８の一部に対応する。
【０１６６】
まず、ＣＰＵ２０４は、リンク障害が検出されたポートのポート番号ｎを取得する（ステップＳ１５０１）。
【０１６７】
次に、ＣＰＵ２０４は、ポート番号ｎのポートは図３（ａ）のダウンリンク側ポート２０３であるか否かを判定する（ステップＳ１５０２）。
【０１６８】
ステップＳ１５０１の判定がＹＥＳ（ダウンリンク側ポート２０３）である場合、ＣＰＵ２０４は、図３（ａ）の宛先ノードテーブル２０９から、ポート番号ｎのダウンリンク側ポート２０３の先に接続される宛先ノード情報を取得する（ステップＳ１５０３）。この動作の詳細は、図３（ａ）の動作IIの説明において前述した。
【０１６９】
次に、ＣＰＵ２０４は、ステップＳ１５０３で取得した宛先ノード情報を含む障害通知パケットを生成する（ステップＳ１５０４）。障害通知パケットは、前述した図１１及び図１２に例示されるデータ構成を有する。
【０１７０】
そして、ＣＰＵ２０４は、ステップＳ１５０４で生成した障害通知パケットを、ポート番号ｎのダウンリンク側ポート２０３以外の全てのダウンリンク側ポート２０３及びアップリンク側ポート２０２から送信する（ステップＳ１５０５）。この動作の詳細は、図３（ａ）の経路IIIとして前述した。
【０１７１】
ステップＳ１５０１の判定がＮＯ（アップリンク側ポート２０２）である場合、ＣＰＵ２０４は、ポート番号ｎのポートを、スイッチ部２０１内の負荷分散機構による負荷分散先から削除し、ＲＡＭ２０５内のポート選択条件テーブル２１０を更新する（ステップＳ１５０６）。この動作の詳細は、図８の説明で前述した。
【０１７２】
ステップＳ１５０５又はＳ１５０６の処理の後、ＣＰＵ２０４は、図１５のフローチャートで示されるリンク障害検出処理を終了する。
【０１７３】
図１６は、前述した図３（ｂ）の第２のスイッチ装置においてＣＰＵ２０４が実行する、障害通知パケット中継処理の例を示すフローチャートである。この処理は例えば、ＣＰＵ２０４が、特には図示しないＲＯＭに記憶された障害通知パケット中継処理プログラムを実行する動作である。この処理は、第２のスイッチ装置の何れかのポートにおいて障害通知パケットが受信されたことにより（例えば図３（ｂ）の動作IV）、起動される。図３（ｂ）のスイッチ部２０１は、受信したパケットのヘッダにおいて、宛先ＭＡＣアドレスが制御パケットを表す予約アドレスで、Ｅｔｈｅｒ  Ｔｙｐｅが障害通知を示しているときに（図１１参照）、そのパケットを障害通知パケットとしてＣＰＵ２０４に引き渡す。障害通知パケット中継処理は、図２（ａ）のスイッチ装置１０１におけるＣＰＵ２０４の実行機能である障害情報中継部２０８の一部に対応する。
【０１７４】
まず、ＣＰＵ２０４は、障害通知パケットを受信したポートのポート番号ｐを取得する（ステップＳ１６０１）。
【０１７５】
次に、ＣＰＵ２０４は、障害通知パケットの送信元ＭＡＣアドレスを、自装置のＭＡＣアドレスで書き換える（ステップＳ１６０２）。
【０１７６】
続いて、ＣＰＵ２０４は、ポート番号ｐのポートが、ダウンリンク側ポート２０３であるか否かを判定する（ステップＳ１６０３）。
【０１７７】
ステップＳ１６０３の判定がＮＯ（アップリンク側ポート２０２）である場合、ＣＰＵ２０４は、図３（ｂ）のポート選択条件テーブル２１０から、ポート番号ｐに対応する選択条件を取得し、ＲＡＭ２０５上の配列Ｃに格納する（ステップＳ１６０４）。この処理の詳細は、図３（ｂ）の動作Ｖとして前述した。前述したように、図９に例示されるポート選択条件テーブル２１０から取得される選択条件は、リンク数Ｍ、計算の結果値Ｎ、及びＡｌｇｏｒｉｔｈｍＩＤである。
【０１７８】
次に、ＣＰＵ２０４は、受信されステップＳ１６０２が実行された後の図１１に例示される構成を有する障害通知パケットにおいて、リンク選択条件リストのフィールドに、上記配列Ｃのリンク選択条件の内容を図１２に例示されるフォーマットで格納する。また、ＣＰＵ２０４は、図１２のリンク選択条件数のフィールドの値ｍに１をプラスする。ＣＰＵ２０４は、この結果得られるパケットを、前述した選択条件付加パケットとする（以上、ステップＳ１６０５）。この処理の詳細も、図３（ｂ）の動作Ｖとして前述した。
【０１７９】
その後、ＣＰＵ２０４は、ステップＳ１６０５で生成した選択条件付加パケットを、新たな障害通知パケットとして、ダウンリンク側ポート２０３から送出する（ステップＳ１６０６）。この処理の詳細は、図３（ｂ）の動作VIとして前述した。
【０１８０】
ステップＳ１６０３の判定がＮＯ（ダウンリンク側ポート２０３）である場合、ＣＰＵ２０４は、以下の処理を実行する。ＣＰＵ２０４は、受信した障害通知パケットを、選択条件情報は付加せずにそのまま、受信に係るダウンリンク側ポート２０３以外の全ての有効なダウンリンク側ポート２０３又はアップリンク側ポート２０２から送信する（ステップＳ１６０７）。
【０１８１】
ステップＳ１６０６又はＳ１６０７の処理の後、ＣＰＵ２０４は、図１６のフローチャートで示される障害通知パケット中継処理を終了する。
【０１８２】
図１７は、前述した図３（ｃ）のエンドノード１０２においてＣＰＵ２５０が実行するパケット受信処理の例１を示すフローチャートである。この処理は例えば、ＣＰＵ２５０が、特には図示しないＲＯＭに記憶されたパケット受信処理プログラムを実行する動作である。この処理は、常時起動されている。
【０１８３】
ＣＰＵ２５０は通常、図３（ｃ）の送受信部２５２に受信パケットが有るか否かの判定を繰り返し実行している（ステップＳ１７０１の判定がＮＯの繰返し）。
【０１８４】
ステップＳ１７０１の判定がＹＥＳになると、ＣＰＵ２５０は、受信パケットが障害通知パケットであるか否かを判定する（ステップＳ１７０２）。ＣＰＵ２５０は、受信したパケットのヘッダにおいて、宛先ＭＡＣアドレスが制御パケットを表す予約アドレスで、Ｅｔｈｅｒ  Ｔｙｐｅが障害通知を示しているときに（図１１参照）、そのパケットを障害通知パケットであると判定する。
【０１８５】
ステップＳ１７０２の判定がＮＯ（障害通知パケットではない）場合には、ＣＰＵ２５０は、特には図示しない通常のパケット受信処理を実行する（ステップＳ１７０３）。その後、ＣＰＵ２５０は、制御をステップＳ１７０１の受信待機処理に戻る。
【０１８６】
ステップＳ１７０２の判定がＹＥＳ（障害通知パケットである）場合には、ＣＰＵ２５０は、ステップＳ１７０４以下の処理群を実行する。この処理群は、図３（ｃ）のＣＰＵ２５０の障害分析・経路制御部２５４の動作に対応する。
【０１８７】
まず、ＣＰＵ２５０は、受信した図１１に例示される障害通知パケット中の図１２に例示されるリンク選択条件リストから、図１２に例示される条件数ｍを取得する。その後、ＣＰＵ２５０は、リンク選択条件リスト中のリンク選択条件をカウントするためのＲＡＭ２５１中の変数ｉに初期値０を格納する。また、ＣＰＵ２５０は、リンク選択条件を格納するためのＲＡＭ２５１中の配列変数Ｃの内容を空とする（以上、ステップＳ１７０４）。
【０１８８】
その後、ＣＰＵ２５０は、変数ｉの値が値ｍよりも小さいか否かを判定する（ステップＳ１７０５）。
【０１８９】
ステップＳ１７０５の判定がＹＥＳならば、ＣＰＵ２５０は、受信した図１１に例示される障害通知パケット中の図１２に例示されるリンク選択条件リストから、変数ｉの値が示すｉ番目のリンク選択条件｛Ｍ、Ｎ、ＡｌｇｏｒｉｔｈｍＩＤ｝を取得する。図１２の説明で前述したように、Ｍはリンク数、Ｎは計算の結果値、及びＡｌｇｏｒｉｔｈｍＩＤはアルゴリズム識別情報である。ＣＰＵ２５０は、取得したリンク選択条件｛Ｍ、Ｎ、ＡｌｇｏｒｉｔｈｍＩＤ｝を、配列変数Ｃの新たな要素として、配列変数Ｃに追加する。その後、ＣＰＵ２５０は、変数ｉの値を＋１インクリメントする（以上、ステップＳ１７０６）。
【０１９０】
その後、ＣＰＵ２５０は、ステップＳ１７０５の判定に戻り、この判定がＹＥＳならば、次のｉ番目のリンク選択条件の取得を繰り返す。
【０１９１】
以上の処理の繰返しにより、受信した障害通知パケット中のリンク選択条件リストからの、０番目からｍ−１番目までのｍ個のリンク選択条件の配列変数Ｃへの取得が完了すると、ステップＳ１７０５の判定がＮＯとなる。
【０１９２】
その後、ＣＰＵ２５０は、受信した図１２に例示される障害通知パケットから、障害影響範囲ノード数ｎを取得する。その後、ＣＰＵ２５０は、変数ｉに初期値０を格納する（ステップＳ１７０７）。
【０１９３】
ＣＰＵ２５０は、変数ｉの値を、ステップＳ１７１４で＋１ずつインクリメントしながら、ステップＳ１７０８においてステップＳ１７０７で取得した障害影響範囲ノード数ｎよりも小さいと判定する間、ステップＳ１７０９からＳ１７１３までの一連の処理を実行する。
【０１９４】
ステップＳ１７０８の判定がＹＥＳになった後、ＣＰＵ２５０は、以下の処理を実行する。ＣＰＵ２５０は、ＲＡＭ２５１上の配列変数ＩＤＬｉｓｔ［］に得られている、受信した図１２に例示される障害通知パケット中の障害影響範囲（ノードリスト）から、変数ｉの値が示すｉ番目の要素ＩＤＬｉｓｔ［ｉ］のノードＩＤを取得する。そして、ＣＰＵ２５０は、そのノードＩＤを、ＲＡＭ２５１上の変数Ｎｏｄｅ＿ＩＤに格納する（以上、ステップＳ１７０９）。
【０１９５】
次に、ＣＰＵ２５０は、変数Ｎｏｄｅ＿ＩＤに格納されたノードＩＤをキーに、図１３に例示される障害情報テーブル２５５を検索し、上記ノードＩＤと同じ値が宛先ノードＩＤとして記憶されているエントリを取得する。エントリが無い場合には、上記ノードＩＤが宛先ノードＩＤとして設定されたエントリを、障害情報テーブル２５５上に新たに生成する。そして、ＣＰＵ２５０は、そのエントリへのポインタを、ＲＡＭ２５１上の変数Ｅに格納する（以上、ステップＳ１７１０）。
【０１９６】
次に、ＣＰＵ２５０は、ステップＳ１７０６の繰返し処理により配列変数Ｃに格納されているｍ個のリンク選択条件を、ＲＡＭ２５１上の配列変数Ｃ’に移し替え、ＲＡＭ２５１上の繰返し制御用の変数ｊに初期値１を格納する（以上、ステップＳ１７１１）。
【０１９７】
その後、ＣＰＵ２５０は、配列変数Ｃ’の要素が空ではないか（Ｃ’≠｛｝）否かを判定する（ステップＳ１７１２）。
【０１９８】
配列変数Ｃ’の要素が空ではない（ステップＳ１７１２の判定がＹＥＳの）場合には、ＣＰＵ２５０は、次の処理を実行する。ＣＰＵ２５０はまず、配列変数Ｃ’中の先頭の要素Ｃ’［０］のリンク選択条件｛Ｍ、Ｎ、ＡｌｇｏｒｉｔｈｍＩＤ｝を、ＲＡＭ２５１上の一時変数ｔｅｍｐに格納する。次に、ＣＰＵ２５０は、配列変数Ｃ’中から一時変数ｔｅｍｐに対応する先頭の要素を削除する（図中「ｄｅｌｅｔｅ  ｔｅｍｐ  ｆｒｏｍ  Ｃ’」）。次に、ＣＰＵ２５０は、一時変数ｔｅｍｐに格納されているリンク選択条件｛Ｍ、Ｎ、ＡｌｇｏｒｉｔｈｍＩＤ｝から、計算の結果値Ｎを抽出し、ＲＡＭ２５１上の変数ｐに格納する（図中「ｐ←Ｎ  ｏｆ  ｔｅｍｐ」）。次に、ＣＰＵ２５０は、図１４の説明で前述したように、値「１」を、変数ｐに格納されている計算の結果値ｐ（＝Ｎ）に対応するビット数だけ左ビットシフト演算する。即ち、式「１＜＜ｐ」で表される演算が実行される。ＣＰＵ２５０は、その演算結果の２進数値と、ステップＳ１７１０で生成した変数Ｅがポイントする障害情報テーブル２５５のエントリに既に格納されているＰｏｒｔＶｅｃｔｏｒ＝ＰＶの２進数値とのビット論理和を演算した結果を、新たなＰＶの値とする。即ち、式「ＰＶ←ＰＶ｜（１＜＜ｐ）」で表される演算が実行される。更に、ＣＰＵ２５０は、一時変数ｔｅｍｐに格納されているリンク選択条件｛Ｍ、Ｎ、ＡｌｇｏｒｉｔｈｍＩＤ｝中の計算の結果値Ｎを、上記新たなＰＶの値で置き換える（図中「ｒｅｐｌａｃｅ  Ｎ  ｏｆ  ｔｅｍｐ  ｔｏ  ＰＶ」）。この結果、一時変数ｔｅｍｐの内容は、リンク選択条件｛Ｍ、ＰＶ、ＡｌｇｏｒｉｔｈｍＩＤ｝となる。ＣＰＵ２５０は、ＲＡＭ２５１内の図１３に例示される障害情報テーブル２５５の変数Ｅがポイントするエントリ中の、変数ｊの値が示すｊ番目の条件ｊに、一時変数ｔｅｍｐのリンク選択条件｛Ｍ、ＰＶ、ＡｌｇｏｒｉｔｈｍＩＤ｝を記録（上書き）する。最後に、ＣＰＵ２５０は、変数ｊの値を＋１インクリメントする（以上、ステップＳ１７１３）。
【０１９９】
その後、ＣＰＵ２５０は、ステップＳ１７１２の判定処理に戻り、配列変数Ｃ’にリンク選択条件の要素が残っていれば、ステップＳ１７１３の処理を繰り返す。
【０２００】
上述の繰返し処理の結果、配列変数Ｃ’の要素が空になってステップＳ１７１２の判定がＮＯになると、ＣＰＵ２５０は、変数ｉの値を＋１インクリメントし（ステップＳ１７１４）、その後、ステップＳ１７０８の判定処理に戻る。障害影響範囲として通知された未処理の他のノードＩＤがまだあれば、そのノードＩＤについて、ステップＳ１７０９からＳ１７１３までの一連の処理が再び実行され、障害情報テーブル２５５の内容が更新される。
【０２０１】
障害影響範囲として通知された全てのノードＩＤについて障害情報テーブル２５５の更新処理が完了しステップＳ１７０８の判定がＮＯになると、ＣＰＵ２５０は、ステップＳ１７０１の受信待機処理に戻る。
【０２０２】
図１８は、前述した図４（ｂ）のエンドノード１０２においてＣＰＵ２５０が実行するパケット送信処理の例を示すフローチャートである。この処理は例えば、ＣＰＵ２５０が、特には図示しないＲＯＭに記憶されたパケット送信処理プログラムを実行する動作である。この処理は、常時起動されている。
【０２０３】
ＣＰＵ２５０は通常、図４（ｂ）の受信パケットが有るか否かの判定を繰り返し実行している（ステップＳ１８０１の判定がＮＯの繰返し）。
【０２０４】
ステップＳ１８０１の判定がＹＥＳになると、ＣＰＵ２５０は、その送信パケットに対してＲＡＭ２５１内のフローキャッシュを検索する（ステップＳ１８０２）。本実施形態では、過去に実行された同一種の送信パケットに対する処理は、フローキャッシュとしてＲＡＭ２５１に記憶されている。
【０２０５】
ＣＰＵ２５０は、フローキャッシュにヒットしたか否かを判定する（ステップＳ１８０３）。
【０２０６】
ステップＳ１８０３の判定がＹＥＳ（ヒット）ならば、ＣＰＵ２５０は、フローキャッシュに記録されているアクションに応じて、送信パケットのヘッダの加工（後述する）や、送信処理を実行する（ステップＳ１８０４）。その後、ＣＰＵ２５０は、ステップＳ１８０１の送信パケットの待機処理に戻る。
【０２０７】
ステップＳ１８０３の判定がＮＯ（ヒットせず）ならば、ＣＰＵ２５０は、送信パケットから宛先ノードＩＤを取得してＲＡＭ２５１上の変数Ｎｏｄｅ＿ＩＤに格納する（ステップＳ１８０５）。
【０２０８】
そして、ＣＰＵ２５０は、ＲＡＭ２５１内の図１３に例示される障害情報テーブル２５５に、変数Ｎｏｄｅ＿ＩＤの値と同じ宛先ノードＩＤが記憶された障害情報のエントリがあるか否かを判定する（ステップＳ１８０６）。
【０２０９】
以上のステップＳ１８０５とＳ１８０６の処理の詳細は、図４（ｂ）のＣＰＵ２５０の宛先チェック部２５３による動作Ｉとして前述した。
【０２１０】
ステップＳ１８０６の判定がＮＯならば、ＣＰＵ２５０は、ＲＡＭ２５１上のフローキャッシュに今回のフローを送信パケットの通常送信アクションとして記録した後、特には図示しない通常送信処理を実行する（ステップＳ１８１４）。この処理は、図４（ｂ）のＣＰＵ２５０の宛先チェック部２５３による動作II−Ａとして前述した。その後、ＣＰＵ２５０は、ステップＳ１８０１の送信パケットの待機処理に戻る。
【０２１１】
ステップＳ１８０６の判定がＹＥＳならば、ＣＰＵ２５０は、図１３に例示される障害情報テーブル２５５から、変数Ｎｏｄｅ＿ＩＤの値に対応する宛先ノードＩＤが記憶されているエントリＥを取得する（ステップＳ１８０７）。
【０２１２】
次に、ＣＰＵ２５０は、上記エントリＥ内の各条件フィールドを処理するためのＲＡＭ２５１上の繰返し制御用の変数ｊに、初期値１を格納する（ステップＳ１８０８）。
【０２１３】
次に、ＣＰＵ２５０は、上記エントリＥ内の変数ｊの値が示すｊ番目の条件ｊの内容が、図１３で説明した無効値ｎ／ａではなく、かつ変数ｊの値が図１３で説明した条件フィールドの最大数Ｙ以下であるか否かを判定する（ステップＳ１８０９）。図１８のステップＳ１８０９中では、「条件＿ｊ  ｏｆ  Ｅ≠ｎ／ａ  ∧  ｊ≦Ｙ」として示されている。
【０２１４】
ステップＳ１８０９の判定がＹＥＳならば、ＣＰＵ２５０は、送信パケットがエントリＥ中の条件ｊ（図中「条件＿ｊ  ｏｆ  Ｅ」）にマッチするか否かを判定する（ステップＳ１８１０）。このマッチ処理は、図４（ｂ）のＣＰＵ２５０の障害分析・経路制御部２５４による動作IIIとして前述し、その詳細は図１４の説明において前述した。
【０２１５】
ステップＳ１８１０の判定がＮＯになったならば、ＣＰＵ２５０は、ステップＳ１８１４の処理に移行し、送信パケットをそのまま送信する。この処理は、図４（ｂ）のＣＰＵ２５０の障害分析・経路制御部２５４による動作IV−Ａとして前述した。
【０２１６】
ステップＳ１８１０の判定がＹＥＳならば、ＣＰＵ２５０は、変数ｊの値を＋１インクリメントした後、ステップＳ１８０９の判定処理に戻る。変数ｊの新たな値に対応する有効な条件ｊが障害情報テーブル２５５中のエントリＥにまだあれば、ＣＰＵ２５０は、ステップＳ１８１０のマッチ判定処理を繰り返し実行する。
【０２１７】
エントリＥ中の全ての条件フィールドについてステップＳ１８１０で送信パケットとマッチすることが判定され、ステップＳ１８０９で未処理の有効な条件フィールドがなくなったと判定される（判定がＮＯになる）と、ＣＰＵ２５０は、ステップＳ１８１２に移行する。ステップＳ１８１２では、ＣＰＵ２５０は、エントリＥ中の例えば最初の条件１に送信パケットがマッチしないように、送信パケットのヘッダ情報を配信に影響がでない範囲で加工する（ステップＳ１８１２）。
【０２１８】
その後、ＣＰＵ２５０は、ＲＡＭ２５１上のフローキャッシュに今回のフローを送信パケットのヘッダ加工（加工後の値）及び送信のアクションとして記録した後、その送信処理を実行する（ステップＳ１８１３）。この処理は、図４（ｂ）のＣＰＵ２５０の障害分析・経路制御部２５４による動作IV−Ｂとして前述した。その後、ＣＰＵ２５０は、ステップＳ１８０１の送信パケットの待機処理に戻る。
【０２１９】
図１９は、図１８のステップＳ１８１２の送信パケットのヘッダの加工例を示す図である。まず、図１９（ａ）は、送信パケットがマッチする障害情報テーブル２５５上のエントリの宛先ノードと、条件フィールド（条件１、条件２）の例を示している。宛先ノードＩＤとしては、図９のＳｅｒｖｅｒ＃３のＭＡＣアドレス（図中「Ｓｖｒ３  ＭＡＣ」と記載）が記憶されている。条件１としては、演算式Ｆ（Ｈ（ｐ），Ｍ）＝０に対応するリンク選択条件が、図１４（ａ）で前述した形式で記憶されている。この場合、上記演算式のＭがリンク数Ｍであり、「０」が計算の結果値Ｎである。なお、計算の結果値Ｎ＝０は、図１４（ａ）のＰｏｒｔＶｅｃｔｏｒの形式により、２進数値「１」を０ビット左シフト演算した結果として記憶されている。即ち、この演算は、ＰｏｒｔＶｅｃｔｏｒをＰＶと表せば、式「ＰＶ＝１＜＜０＝０ｘ０００００００００００００００１」として表される。そして、アルゴリズムＩＤが指し示す演算プログラムコード（図１４（ｂ）及び（ｃ）参照）が、上記演算式の左辺「Ｆ（Ｈ（ｐ），Ｍ）」に対応する。なお、上記演算式中の「ｐ」は、送信パケットのヘッダを表す。条件２としては、条件１と同様に、演算式Ｆ’（Ｈ（ｐ），Ｍ’）＝０に対応するリンク選択条件が、図１４（ａ）で前述した形式で記憶されている。
【０２２０】
前述した図１８のステップＳ１８０８からＳ１８１１の繰返し処理により、送信パケットが上述の障害情報テーブル２５５中のエントリの条件１と条件２に共にマッチするか否かが判定される。条件１と条件２に対するマッチが共に成立すると、即ち、「送信パケットｐ→Ｆ（Ｈ（ｐ），Ｍ）＝０  ∧  Ｆ’（Ｈ（ｐ），Ｍ’）＝０」であれば、図１８のステップＳ１８１２により、送信パケットのヘッダが加工される。
【０２２１】
ヘッダの加工方式１としては、例えば図１９（ｂ）から（ｃ）への変更のように、レイヤ４プロトコルの送信元ポート番号（図１９（ｂ）または（ｃ）中の「Ｌ４  Ｓｒｃ  Ｐｏｒｔ」フィールド）の値を加工する方式が採用できる。ここで、レイヤ４（Ｌ４）のプロトコルは例えば、ＵＤＰまたはＴＣＰである。このプロトコルタイプは、図１９（ｂ）または（ｃ）に示される送信パケットのヘッダ中の「Ｌ４  Ｔｙｐｅ」フィールドにより指定される。
【０２２２】
加工処理としては、「Ｌ４  Ｓｒｃ  Ｐｏｒｔ」フィールドの値ｘｘｘを＋１ずつｘｘｘ’に変更しながら、変更前と変更後の送信パケットｐとｐ’とに関して、エントリＥ中の例えば最初の条件１について、Ｆ（Ｈ（ｐ），Ｍ）とＦ（Ｈ（ｐ’），Ｍ）を演算する。そして、Ｆ（Ｈ（ｐ），Ｍ）≠Ｆ（Ｈ（ｐ’），Ｍ）、即ちＦ（Ｈ（ｐ），Ｍ）＝０に対してＦ（Ｈ（ｐ’），Ｍ）＝１となったときのフィールド値ｘｘｘ’が、「Ｌ４  Ｓｒｃ  Ｐｏｒｔ」フィールドに新たに設定される。
【０２２３】
この結果、加工前の図１９（ａ）に例示される送信パケットのヘッダが、図１９（ｂ）に例示されるように加工される。前述した（１）式で示されるＨ（ｐ）又はＨ（ｐ’）の計算によく利用されるＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）演算は、余り算であるため、最下位ビットで計算結果の偶奇を制御できる。このため、多くのスイッチ装置１０１では、Ｆ（Ｈ（ｘｘｘ），Ｍ）≠Ｆ（Ｈ（ｘｘｘ＋１），Ｍ）を期待できる。すなわち、原則として、「Ｌ４  Ｓｒｃ  Ｐｏｒｔ」フィールドのフィールド値ｘｘｘに１回１をプラスするだけでよいため、ヘッダの加工処理に計算時間はかからない。
【０２２４】
以上の加工方式１は、「Ｌ４  Ｓｒｃ  Ｐｏｒｔ」フィールドの値を変更しても問題ない、カプセル化を使用するオーバーレイプロトコルに適用できる。具体的には、オーバーレイプロトコルとしては、ＶＸＬＡＮ（Ｖｉｒｔｕａｌ  Ｅｘｔｅｎｓｉｂｌｅ  Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を採用できる。或いは、オーバーレイプロトコルとしては、ＳＴＴ（Ｓｔａｔｅｌｅｓｓ  Ｔｒａｎｓｐｏｒｔ  Ｔｕｎｎｅｌｉｎｇ  ｐｒｏｔｏｃｏｌ  ｆｏｒ  ｎｅｔｗｏｒｋ  ｖｉｒｔｕａｌｉｚａｔｉｏｎ）を採用できる。
【０２２５】
ヘッダの加工方式２としては、送信パケット中の送信元ＭＡＣアドレスを変更する方式が採用できる。送信ノード（エンドノード１０２）毎に障害回避用のＭＡＣアドレスを設定しておき、障害発生時に、障害の影響を受けるフローの送信元ＭＡＣアドレスを変更する。障害回避用のＭＡＣアドレスは図１のネットワークシステム１００内の送信ノード（エンドノード１０２）間で重複しないように決定しておく。
【０２２６】
障害回避用ＭＡＣアドレスの決定例としては、ＭＡＣアドレスの上位４８ビット(０ＵＩ)に、障害回避用に特定の値を使用する。例えば、「Ｃ０：５０：００」である。送信ノードの例えば物理ＮＩＣのＭＡＣアドレスの下位４０ビットを８ビット左シフトして、前述の０ＵＩと結合する。下位８ビットを使用することにより、送信ノード毎に例えば１６個の障害回避用ＭＡＣを作成する。具体的には、送信ノードの例えば物理ＮＩＣのＭＡＣアドレスが「００：９９：０１：ＦＣ：８４：５６」だった場合、障害回避用のＭＡＣアドレスは「Ｃ０：５０：００：Ｃ８：４５：６０」から「Ｃ０：５０：００：ｃ８：４５：６Ｆ」までの１６個となる。
【０２２７】
次に、他の実施形態について説明する。以下に説明する他の実施形態は、宛先ノードテーブル２０９のデータ構成と、障害通知パケットのデータ構成と、障害情報テーブル２５５のデータ構成と、エンドノード１０２におけるパケット受信処理が、上述の実施形態と異なる。
【０２２８】
図２０は、他の実施形態における図２のスイッチ装置１０１内のＲＡＭ２０５に記憶される宛先ノードテーブル２０９の構成例２の説明図であり、宛先ノード情報のグループ化を可能とする構成である。
【０２２９】
前述した宛先ノードテーブル２０９の構成例１は、図１０に例示したようにＭＡＣアドレスと、ＶＬＡＮ  ＩＤと、ＰｏｒｔＶｅｃｔｏｒを記憶するエントリを備える。そして、この宛先ノードテーブル２０９の構成例１は、スイッチ装置１０１におけるアップリンク側ポート２０２からダウンリンク側ポート２０３への中継を行うための宛先ノードテーブルと共用化される構成を有する。
【０２３０】
これに対して、宛先ノードテーブル２０９の構成例２は、スイッチ装置１０１におけるアップリンク側ポート２０２からダウンリンク側ポート２０３への中継を行うための宛先ノードテーブルとは別に用意される。そして、この宛先ノードテーブル２０９の構成例２は、障害が検出されたダウンリンク側ポート２０３の先に接続される宛先ノード（エンドノード１０２）群の特定に、階層的構造を持ち、グループ化可能な位置ＩＤを用いる。
【０２３１】
前述した宛先ノードテーブル２０９の構成例１では、エンドノード１０２の数が増えたときに宛先ＭＡＣアドレスが膨大になってしまう。
【０２３２】
これに対して、他の実施形態における宛先ノードテーブル２０９の構成例２では、エンドノード１０２がグループ化されるため、宛先ノード情報を削減できる。
【０２３３】
図２０を用いてグループ化の手順を説明する。図２０の例では、図１のネットワークシステム１００の構成に対応して、Ｓｐｉｎｅ段の配下に３つのグループが存在する。各グループをＰｏｄと称し、各グループにＰｏｄ−ＩＤを付与し、各エンドノード１０２には、「Ｐｏｄ−ＩＤ＋（Ｐｏｄ内）ＴｏＲ−ＩＤ＋（ＴｏＲ内）Ｓｅｒｖｅｒ−ＩＤ」からなる階層構造のＩＤを付与する。図２０の例では、Ｐｏｄ＃１、Ｐｏｄ＃２、Ｐｏｄ＃３がＰｏｄ−ＩＤに相当する。Ｔｏｒ＃１−１とＴｏｒ＃１−２が、Ｐｏｄ＃１内のＴｏＲ−ＩＤに対応する。Ｔｏｒ＃２−１とＴｏｒ＃２−２が、Ｐｏｄ＃２内のＴｏＲ−ＩＤに対応する。Ｔｏｒ＃３−１とＴｏｒ＃３−２が、Ｐｏｄ＃３内のＴｏＲ−ＩＤに対応する。また、Ｓｖ＃１−１−１とＳｖ＃１−１−２が、Ｔｏｒ＃１−１内のＳｅｒｖｅｒ−ＩＤに対応する。Ｓｖ＃１−２−１とＳｖ＃１−２−２が、Ｔｏｒ＃１−２内のＳｅｒｖｅｒ−ＩＤに対応する。Ｓｖ＃２−１−１とＳｖ＃２−１−２が、Ｔｏｒ＃２−１内のＳｅｒｖｅｒ−ＩＤに対応する。Ｓｖ＃２−２−１とＳｖ＃２−２−２が、Ｔｏｒ＃２−２内のＳｅｒｖｅｒ−ＩＤに対応する。Ｓｖ＃３−１−１とＳｖ＃３−１−２が、Ｔｏｒ＃３−１内のＳｅｒｖｅｒ−ＩＤに対応する。Ｓｖ＃３−２−１とＳｖ＃３−２−２が、Ｔｏｒ＃３−２内のＳｅｒｖｅｒ−ＩＤに対応する。
【０２３４】
他の実施形態における宛先ノードテーブル２０９の構成例２では、「Ｐｏｄ−ＩＤ＋ＴｏＲ−ＩＤ」で同じＴｏＲ配下のエンドノード１０２群をグループ化する。また、Ｐｏｄ−ＩＤで、Ｐｏｄ内のＴｏＲ群、つまりＰｏｄ内のエンドノード１０２群をグループ化する。
【０２３５】
上述のような位置ＩＤを用いたグループ化により、宛先ノードテーブル２０９の登録数、障害時の障害通知パケットの通知量（データサイズ）を大幅に削減することが可能となる。
【０２３６】
なお、図１のネットワークシステム１００内の各エンドノード１０２及び各スイッチ装置１０１は、予め上述の全ての位置ＩＤを知っているものとする。
【０２３７】
図２１は、他の実施形態における位置ＩＤの構成例の説明図である。図２１（ａ）に示されるように、位置ＩＤは、８ビットのＰｏｄ−ＩＤ、８ビットのＴｏＲ−ＩＤ、及び１６ビットのＳｅｒｖｅｒ−ＩＤからなる３２ビットデータと、グループ化のためにこれらの３２ビットデータをマスクするための３２ビットのマスクデータ（Ｍａｓｋ  ｏｆ  Ｌｏｃａｔｏｒ  ＩＤ）からなる。
【０２３８】
図２１（ｂ）は、図２０のＰｏｄ＃１、Ｔｏｒ＃１−２を表す位置ＩＤ、即ち、Ｐｏｄ＃１配下のＴｏｒ＃１−２配下の全てのエンドノード１０２を表す位置ＩＤの例を示す図である。図２１（ｂ）の例では、Ｐｏｄ−ＩＤは、値「１」＝８ビットの２進数で表現される値「０００００００１」を有する。ＴｏＲ−ＩＤは、値「２」＝８ビットの２進数で表現される値「００００００１０」を有する。Ｓｅｒｖｅｒ−ＩＤは、１６ビットが全て「０」である。また、マスクデータは、Ｐｏｄ−ＩＤとＴｏＲ−ＩＤをカバーする上位１６ビットが全て「１」であり、Ｓｅｒｖｅｒ−ＩＤをカバーする下位１６ビットが全て「０」である。このマスクデータにより、Ｐｏｄ−ＩＤ＝値「１」とＴｏＲ−ＩＤ＝値「２」が有効となり、１番目のＰｏｄ−ＩＤ「Ｐｏｄ＃１」と１番目のＰｏｄ−ＩＤ内の２番目のＴｏＲ−ＩＤ「Ｔｏｒ＃１−２」が指し示される。
【０２３９】
図２２は、他の実施形態における上述の位置ＩＤを用いた宛先ノードテーブル２０９の構成例２を示す図である。宛先ノードテーブル２０９の構成例２は、メモリ番地毎に、位置情報と、マスクデータに対応するＭＡＳＫ情報と、図１０の説明で前述したＰｏｒｔＶｅｃｔｏｒとを備える。図２２の例は、図２０におけるＰｏｄ＃１内のＬｅａｆのスイッチ装置１０１が保持する宛先ノードテーブル２０９の内容例を示している。この場合、Ｐｏｄ−ＩＤは共通で、ＴｏＲ−ＩＤの値＝「１」、「２」、「３」、・・・、「Ｎ」毎に、対応する中継先ポートを示すＰｏｒｔＶｅｃｔｏｒを記憶する。図２１（ｂ）の場合と同様に、マスクデータの値は全て、１６進値「０ｘＦＦＦＦ００００」、即ちＰｏｄ−ＩＤとＴｏＲ−ＩＤをカバーする上位１６ビットが全て「１」であり、Ｓｅｒｖｅｒ−ＩＤをカバーする下位１６ビットが全て「０」である。
【０２４０】
図２２の宛先ノードテーブル２０９の構成例２において、例えばメモリ番地＝「１」では、１６進値で「０ｘ００００００００１」、即ち２進値で０ビット目に「１」が立っているＰｏｒｔＶｅｃｔｏｒ値が登録されている。このため、メモリ番地＝「１」に記憶されているＰｏｄ−ＩＤ＝「１」＝「Ｐｏｄ＃１」、ＴｏＲ−ＩＤ＝「１」＝「ＴｏＲ＃１−１」の配下にあるＳｖ＃１−１−１宛て又はＳｖ＃１−１−２宛てのパケットは、ポート番号＝「１」のポートに中継される。このように、図２２の構成例では、宛先ノードテーブル２０９の１つのエントリに記憶されている「位置情報（位置ＩＤ）＋ＭＡＳＫ情報（マスクデータ）」で、２つのエンドノード１０２宛ての宛先ノード情報を表すことができる。
【０２４１】
図２３は、他の実施形態における障害通知パケットの構成例２を示す図である。図１１で前述した障害通知パケットの構成例１と比較して、図２３の障害通知パケットの構成例２は、以下の点が異なる。構成例１における「障害影響範囲ノード数＝ｎ」と「障害影響範囲（ノードＩＤ（６バイト）×ｎ個＋パディング）」が、構成例２における「ＩＤサイズ＝４」と「障害影響範囲の位置ＩＤ」と「位置ＩＤのマスク情報」に置き換わっている。前述したように、障害影響範囲は、障害が検出された１つのダウンリンク側ポート２０３に対応して、グループ化された１つの位置ＩＤとマスク情報（マスクデータ）の組で指定することができる。位置ＩＤおよびマスク情報の各データサイズは共に、例えば４バイト（３２ビット）である。また、位置ＩＤをＭＡＣアドレスとして生成・割当するケースでは、位置ＩＤのデータサイズとしては、６バイトが指定される。図２３の障害通知パケットの構成例２におけるその他の構成は、図１１の障害通知パケットの構成例１と同じでよい。
【０２４２】
図２４は、他の実施形態における障害情報テーブルの構成例２を示す図である。この構成例２は、宛先ノード群の特定に、上述した位置ＩＤを使用する場合の例である。送信ノード（エンドノード１０２）で、図２０で前述した位置ＩＤの階層構造に合わせて、階層的に障害情報テーブル２５５が作られる。図２４の例では、図２４（ａ）に示されるＰｏｄ単位の障害情報を保存するテーブルＰｏｄ＿Ｔａｂｌｅが１つと、図２４（ｂ）に示されるＴｏＲ単位の障害情報を保存するテーブルＴｏＲ＿ＴａｂｌｅがＰｏｄ別に作られる。図２４（ａ）のＰｏｄ＿Ｔａｂｌｅの各エントリは、Ｐｏｄ−ＩＤ（図中「Ｐｏｄ  ＩＤ」と記載）フィールド、「有効？」フィールド、条件１、条件２等の条件フィールド、及び「Ｎｅｘｔ＿Ｔａｂｌｅ」（図中「Ｎｅｘｔ  Ｔａｂｌｅ」と記載）フィールドを有する。「Ｎｅｘｔ＿Ｔａｂｌｅ」フィールドは、図２４（ｂ）のＴｏＲ＿Ｔａｂｌｅへのポインタを記憶する。障害通知パケットで指定された位置ＩＤがＰｏｄ＋ＴｏＲ単位であれば、「Ｎｅｘｔ＿Ｔａｂｌｅ」フィールドにＴｏＲ＿Ｔａｂｌｅへのポインタが記憶される。障害通知パケットで指定された位置ＩＤがＰｏｄの単位であれば、「Ｎｅｘｔ＿Ｔａｂｌｅ」フィールドにはポインタは記憶されない。図２４（ｂ）のＴｏＲ＿Ｔａｂｌｅの各エントリは、ＴｏＲ−ＩＤ（図中「ＴｏＲ  ＩＤ」と記載）フィールド、「有効？」フィールド、及び条件１、条件２等の条件フィールドを有する。図２４（ａ）及び（ｂ）の各テーブルの各エントリに保存される条件１、条件２等の条件フィールドは、図１３及び図１４で説明した障害情報テーブル２５５の構成例１の場合と同じでよい。図２４（ａ）及び（ｂ）の各テーブルの「有効？」フィールドは、そのフィールド値が含まれるエントリに障害情報が保持されているか否かを示す。例えば、図２４（ａ）のＰｏｄ＿Ｔａｂｌｅにおいて、「有効？」フィールドの値が「１」の場合、このエントリの内容は有効であり、「０」の場合、このエントリの内容は無効である。
【０２４３】
図２４に示される障害情報テーブル２５５の構成例２が使用される場合、次のような課題がある。送信ノード（エンドノード１０２）が送信パケットを送信するときに、送信パケット内の宛先のノードＩＤが、障害情報テーブル２５５内のどの「ＰｏｄＩＤ」と「ＴｏＲＩＤ」の組合せのエントリに対応するかを検索するときに、両者の対応付けが必要となる。
【０２４４】
対応付けの例１としては、ノードＩＤの生成と再割当てを行う方法が考えられる。この方法では、ノードＩＤ（例えばＭＡＣアドレス）が、位置ＩＤの条件を満たすように生成され、各エンドノード１０２に割り当てられる。本来ＮＩＣ（ネットワークインタフェースカード）に付与されているＭＡＣアドレスの代わりに、上述のようにして新たに割り当てられたＭＡＣアドレスが利用される。これによりノードＩＤ＝位置ＩＤとなり、パケット送信時の対応関係の検査は不要となる。
【０２４５】
対応付けの例２としては、例えば図２５に例示されるような、ノードＩＤと位置ＩＤの対応テーブルを利用する方法が考えられる。図２５において、ノードＩＤ：ｄｍａｃ＃ｉ（ｉ＝１，２，３，・・・）に対応する位置ＩＤ：ＬｏｃＩｄ＃ｊ（ｊ＝１，２，３，・・・）を保持するハッシュテーブルが作られる。ｄｍａｃ＃ｉは例えばＭＡＣアドレスである。ＬｏｃＩｄ＃ｊは、図２１等に例示される構成を有する。今、送信パケットの宛先ノードとして指定されている検索対象のｄｍａｃ（ＭＡＣアドレス）に対して、「ｎ＝Ｌ（ｄｍａｃ）」で算出される値ｎ（＝１，２，・・・，Ｎ）をインデックスとして、図２５の対応テーブルが参照される。値ｎで参照されるブロックの各スロットのｄｍａｃ＃ｉと検索対象のｄｍａｃとが一致するスロットが検索される。ｄｍａｃとｄｍａｃ＃ｉとが一致したスロットのＬｏｃＩＤ＃ｉが、位置ＩＤとして取得される。そして、その位置ＩＤにより、図２４（ａ）及び（ｂ）に示される障害情報テーブル２５５の各エントリが検索される。
【０２４６】
図２６は、他の実施形態において前述した図３（ｃ）のエンドノード１０２のＣＰＵ２５０が実行するパケット受信処理の例２を示すフローチャートであり、上述した位置ＩＤを使用する場合の例である。この処理は例えば、ＣＰＵ２５０が、特には図示しないＲＯＭに記憶されたパケット受信処理プログラムを実行する動作である。この処理は、常時起動されている。
【０２４７】
図２６のフローチャートにおいて、ステップＳ１７０１からＳ１７０５までの一連の処理は、図１７のそれぞれ同じステップ番号が付与されたステップＳ１７０１からＳ１７０５までの一連の処理と同じである。
【０２４８】
この結果、受信された図２３に例示される障害通知パケット中の図１２に例示されるリンク選択条件リスト中の各リンク選択条件｛Ｍ、Ｎ、ＡｌｇｏｒｉｔｈｍＩＤ｝が、ＲＡＭ２５１内の配列変数Ｃに格納される。
【０２４９】
ステップＳ１７０５の判定がＮＯとなった後、ＣＰＵ２５０は、受信した図２３に例示される障害通知パケットから、障害影響範囲の位置ＩＤ及びそのマスクデータを取得し、それぞれＲＡＭ２５１内の変数Ｌｏｃ＿ｉｄ及びｍａｓｋに格納する（ステップＳ２６０１）。
【０２５０】
次に、ＣＰＵ２５０は、変数Ｌｏｃ＿ｉｄに格納されている位置ＩＤ（図２１（ａ）参照）から、Ｐｏｄ−ＩＤを取得する。その後、ＣＰＵ２５０は、Ｐｏｄ＿Ｔａｂｌｅから、その取得したＰｏｄ−ＩＤが「Ｐｏｄ−ＩＤ」フィールド（図２４（ａ）の「Ｐｏｄ  ＩＤ」）に記憶されているエントリを取得する。そして、ＣＰＵ２５０は、そのエントリへのポインタを、ＲＡＭ２５１上の変数Ｅに格納する（以上、ステップＳ２６０２）。
【０２５１】
続いて、ＣＰＵ２５０は、変数Ｌｏｃ＿ｉｄに格納されている位置ＩＤ（図２１（ａ）の１行面のデータ）のうちＰｏｄＩＤに対応するビット位置に０をセットする。この位置ＩＤのうちＰｏｄＩＤに対応するビット位置を０にした値は、位置ＩＤと、ＰｏｄＩＤに対応するビット位置を０、それ以外を１にセットした値とで、ビット論理積を演算することで得られる。その後、ＣＰＵ２５０は、変数Ｌｏｃ＿ｉｄに格納されている位置ＩＤと、変数ｍａｓｋに格納されているマスクデータ（図２１（ａ）の２行目のデータ）とで、ビット論理積を演算する。即ち、位置ＩＤの値を「Ｌｏｃ＿ｉｄ」で表わせば、位置ＩＤの形式が図２１の例のとき、この一連の演算は、式「Ｌｏｃ＿ｉｄ  ＆  ０ｘ００ＦＦ００００  ＆  ｍａｓｋ」で表される。ここで、「＆」は、ビット論理積の演算記号を示す。そしてＣＰＵ２５０は、このビット論理積の演算結果が０に等しくないか否かを判定する（ステップＳ２６０３）。
【０２５２】
ステップＳ２６０３の判定がＹＥＳ、即ちビット論理積の演算結果が０に等しくなければ、位置ＩＤがＰｏｄ＋ＴｏＲの単位で指定されていると判定できる。この場合、ＣＰＵ２５０は、変数Ｌｏｃ＿ｉｄに格納されている位置ＩＤから更に、ＴｏＲ−ＩＤを取得する。そして、ＣＰＵ２５０は、図２４（ａ）に例示されるＰｏｄ＿Ｔａｂｌｅにおいて、ステップＳ２６０２で取得したエントリ中の「Ｎｅｘｔ＿Ｔａｂｌｅ」フィールド（図２４（ａ）の「Ｎｅｘｔ  Ｔａｂｌｅ」）から、ＴｏＲ＿Ｔａｂｌｅへのポインタを取得する。そして、ＣＰＵ２５０は、そのポインタを、ＲＡＭ２５１上の変数ｔａｂｌｅに格納する。更に、ＣＰＵ２５０は、変数ｔａｂｌｅがポイントするＴｏＲ＿Ｔａｂｌｅから、上記取得したＴｏＲ−ＩＤがＴｏＲ＿Ｔａｂｌｅの「ＴｏＲ−ＩＤ」フィールド（図２４（ｂ）の「ＴｏＲ  ＩＤ」に記憶されているエントリを取得する。そして、ＣＰＵ２５０は、そのエントリへのポインタを、ＲＡＭ２５１上の変数Ｅに上書きする（以上、ステップＳ２６０４）。これにより、変数Ｅがポインタするエントリは例えば、図２４（ｂ）に例示されるＴｏＲ＿Ｔａｂｌｅ上のエントリとなる。
【０２５３】
ステップＳ２６０３の判定がＮＯ、即ちビット論理積の演算結果が０に等しければ、位置ＩＤがＰｏｄの単位で指定されていると判定できる。この場合、ＣＰＵ２５０は、上記ステップＳ２６０４の処理はスキップする。この結果、変数Ｅがポインタするエントリは例えば、図２４（ａ）に例示されるＰｏｄ＿Ｔａｂｌｅ上のエントリとなる。
【０２５４】
次に、ＣＰＵ２５０は、ステップＳ１７０６の繰返し処理により配列変数Ｃに格納されているｍ個のリンク選択条件を、ＲＡＭ２５１上の配列変数Ｃ’に移し替え、ＲＡＭ２５１上の繰返し制御用の変数ｊに初期値１を格納する（以上、ステップＳ２６０５）。
【０２５５】
その後、ＣＰＵ２５０は、配列変数Ｃ’の要素が空ではないか（Ｃ’≠｛｝）否かを判定する（ステップＳ２６０６）。
【０２５６】
配列変数Ｃ’の要素が空ではない（ステップＳ２６０６の判定がＹＥＳの）場合には、ＣＰＵ２５０は、次の処理を実行する。ＣＰＵ２５０はまず、図１７のステップＳ１７１３の場合と同様に、配列変数Ｃ’中の先頭の要素Ｃ’［０］のリンク選択条件｛Ｍ、Ｎ、ＡｌｇｏｒｉｔｈｍＩＤ｝を、ＲＡＭ２５１上の一時変数ｔｅｍｐに格納する。次に、ＣＰＵ２５０は、図１７のステップＳ１７１３の場合と同様に、配列変数Ｃ’中から一時変数ｔｅｍｐに対応する先頭の要素を削除する（図中「ｄｅｌｅｔｅ  ｔｅｍｐ  ｆｒｏｍ  Ｃ’」）。次に、ＣＰＵ２５０は、図１７のステップＳ１７１３と同様に、一時変数ｔｅｍｐに格納されているリンク選択条件｛Ｍ、Ｎ、ＡｌｇｏｒｉｔｈｍＩＤ｝から、計算の結果値Ｎを抽出し、ＲＡＭ２５１上の変数ｐに格納する（図中「ｐ←Ｎ  ｏｆ  ｔｅｍｐ」）。次に、ＣＰＵ２５０は、図１７のステップＳ１７１３と同様に、値「１」を、変数ｐに格納されている計算の結果値ｐ（＝Ｎ）に対応するビット数だけ左ビットシフト演算する。即ち、式「１＜＜ｐ」で表される演算が実行される。
【０２５７】
ＣＰＵ２５０は、図１７のステップＳ１７１３と同様に、その演算結果の２進数値と、変数Ｅがポイントする障害情報テーブル２５５のエントリに既に格納されているＰｏｒｔＶｅｃｔｏｒ＝ＰＶの２進数値とのビット論理和を演算した結果を、新たなＰＶの値とする。即ち、式「ＰＶ←ＰＶ｜（１＜＜ｐ）」で表される演算が実行される。なお、前述したように、変数Ｅは、ステップＳ２６０４が実行された場合、即ち障害通知パケットで指定された位置ＩＤがＰｏｄ＋ＴｏＲ単位ならば、図２４（ｂ）のＴｏＲ＿Ｔａｂｌｅ上のエントリをポイントしている。ステップＳ２６０４が実行されなかった場合、即ち障害通知パケットで指定された位置ＩＤがＰｏｄの単位ならば、図２４（ａ）のＰｏｄ＿Ｔａｂｌｅ上のエントリをポイントしている。更にＣＰＵ２５０は、図１７のステップＳ１７１３と同様に、一時変数ｔｅｍｐに格納されているリンク選択条件｛Ｍ、Ｎ、ＡｌｇｏｒｉｔｈｍＩＤ｝中の計算の結果値Ｎを、上記新たなＰＶ値で置き換える（図中「ｒｅｐｌａｃｅ  Ｎ  ｏｆ  ｔｅｍｐ  ｔｏ  ＰＶ」）。この結果、一時変数ｔｅｍｐの内容は、リンク選択条件｛Ｍ、ＰＶ、ＡｌｇｏｒｉｔｈｍＩＤ｝となる。ＣＰＵ２５０は、ＲＡＭ２５１内の図１３に例示される障害情報テーブル２５５の変数Ｅがポイントするエントリ中の、変数ｊの値が示すｊ番目の条件ｊに、一時変数ｔｅｍｐのリンク選択条件｛Ｍ、ＰＶ、ＡｌｇｏｒｉｔｈｍＩＤ｝を記録（上書き）する。ＣＰＵ２０４は、上記エントリ中の「有効？」フィールドの値を「１」に設定する。上述のエントリ内容の更新は、前述したように、変数Ｅは、ステップＳ２６０４が実行された場合、即ち障害通知パケットで指定された位置ＩＤがＰｏｄ＋ＴｏＲ単位ならば、図２４（ｂ）のＴｏＲ＿Ｔａｂｌｅ上のエントリに対して実行される。一方、上述のエントリの更新は、ステップＳ２６０４が実行されなかった場合、即ち障害通知パケットで指定された位置ＩＤがＰｏｄの単位ならば、図２４（ａ）のＰｏｄ＿Ｔａｂｌｅ上のエントリに対して実行される。最後に、ＣＰＵ２５０は、変数ｊの値を＋１インクリメントする（以上、ステップＳ２６０７）。
【０２５８】
その後、ＣＰＵ２５０は、ステップＳ２６０６の判定処理に戻り、配列変数Ｃ’にリンク選択条件の要素が残っていれば、ステップＳ２６０７の処理を繰り返す。
【０２５９】
上述の繰返し処理の結果、配列変数Ｃ’の要素が空になってステップＳ２６０６の判定がＮＯになると、ＣＰＵ２５０は、ステップＳ１７０１の受信待機処理に戻る。
【０２６０】
以上説明したように、本実施形態では、ダウンリンク側ポート２０３での障害を検出したスイッチ装置１０１（第１のスイッチ装置）は、障害ポートの先に接続されているノード群の情報を障害影響範囲として含む障害情報を通知する。また、アップリンク側ポート２０２から障害通知を受信したスイッチ装置１０１（第２のスイッチ装置）は、障害通知を受信したポートが中継先として選択される条件を付加して障害通知を伝播する。これらの障害通知を受信した情報処理装置（エンドノード１０２）は、障害情報を記憶する。そして、情報処理装置は、パケット送信時に、記憶している障害情報に基づき、障害の影響を受けるフローを特定し、そのフローに所属する送信パケットにおいて障害箇所へ中継される条件をはずれるよう、送信パケットを加工する。このようにして、本実施形態では、障害の影響を受けるフローにおいて経路変更を行うことにより、障害発生時も通信帯域を有効活用可能なネットワークシステムを実現することが可能となる。また、本実施形態では、ネットワーク段数に依存した固定時間で障害を通知でき、高速な障害回避が可能なネットワークシステム１００を実現することが可能となる。更に、本実施形態では、領域１での負荷分散による経路制御と領域２でのダウンリンク側ポートに対するＦＤＢによる経路制御により、コントローラを必須要件としないネットワークシステム１００を実現することが可能となる。
【０２６１】
以上の実施形態に関して、更に以下の付記を開示する。
（付記１）
複数のスイッチ装置と情報処理装置とを有するネットワークシステムにおいて、
前記複数のスイッチ装置のうち、第１のスイッチ装置は、
第１の複数のポート部と、
前記第１の複数のポート部のうち、第１のポート部に発生した障害を検出する検出部と、
障害が検出された前記第１のポート部についての障害情報を生成する生成部と、
前記生成部が生成した障害情報を含む障害通知パケットを、前記第１の複数のポート部のうち、前記第１のポート部以外のポート部を介して他のスイッチ装置に通知する第１の中継部と、
を有し、
前記複数のスイッチ装置のうち、第２のスイッチ装置は、
第２の複数のポート部と、
前記第２の複数のポート部のうち、前記他のスイッチ装置を介して前記障害通知パケットを受信した第２のポート部がパケットの中継を行うポート部として選択される選択条件を示す選択条件情報が前記障害通知パケットに付加された選択条件付加パケットを、前記第２の複数のポート部のうち前記情報処理装置が接続される側の第２のポート部を介して送信する第２の中継部と、
を有し、
前記情報処理装置は、
パケットを送受信する送受信部と、
前記送受信部が受信した選択条件付加パケットから抽出された前記選択条件情報を保持する障害情報保持部と、
前記障害情報保持部が保持した選択条件情報に基づき、パケットの経路制御を行う制御部と、
を有することを特徴とするネットワークシステム。
（付記２）
前記第２のスイッチ装置は、前記第２の複数のポート部のそれぞれに対応する前記選択条件情報を記憶するポート選択条件テーブルを保持し、
前記第２の中継部は、前記障害通知パケットを受信した第２のポート部が前記情報処理装置の側のポートではない場合に、前記ポート選択条件テーブルから前記障害通知パケットを受信した第２のポート部に対応する選択条件情報を取得して前記障害通知パケットに付加して前記選択条件付加パケットとする、
ことを特徴とする付記１に記載のネットワークシステム。
（付記３）
前記ポート選択条件テーブルは、前記第２の複数のポート部のうち、障害が発生していない前記第２のポート部の数であるリンク数と、前記第２のスイッチ装置で受信された前記パケットと前記リンク数とを入力とし前記障害が発生していない第２のポート部のうちの１つを選択するための計算のアルゴリズムを特定するアルゴリズム識別情報と、前記障害が発生していない第２のポート部のそれぞれと前記計算の結果値との対応情報とを、前記第２の複数のポート部のそれぞれに対応する前記選択条件情報として記憶し、
前記第２の中継部は、前記ポート選択条件テーブルから、前記リンク数と、前記アルゴリズム識別情報と、前記障害通知パケットを受信した第２のポート部に対応する前記計算の結果値とを、前記選択条件情報として取得して前記障害通知パケットに付加して前記選択条件付加パケットとする、
ことを特徴とする付記２に記載のネットワークシステム。
（付記４）
前記第２の中継部は、前記障害通知パケットを受信した第２のポート部が前記情報処理装置の側のポートである場合に、前記受信した障害通知パケットをそのまま、前記第２の複数のポート部のうち、前記障害通知パケットが受信された第２のポート部以外の第２のポート部を介して送信する、
ことを特徴とする付記２又は３に記載のネットワークシステム。
（付記５）
前記第１のスイッチ装置は、情報処理装置である宛先ノードに対応する宛先ノード情報と前記第１の複数のポート部のうち前記宛先ノード宛てのパケットを中継するポート部との対応関係を記憶する宛先ノードテーブルを保持し、
前記生成部は、前記障害が検出された第１のポート部に対応する宛先ノード情報を前記宛先ノードテーブルから取得し、前記取得した宛先ノード情報を含む前記障害情報を生成する、
ことを特徴とする付記１乃至４の何れかに記載のネットワークシステム。
（付記６）
前記宛先ノード情報は、前記宛先ノードのＭＡＣアドレスを含み、
前記生成部は、前記障害が検出された第１のポート部に対応する１つ以上のＭＡＣアドレスを前記宛先ノードテーブルから取得し、前記取得した１つ以上のＭＡＣアドレスを障害影響範囲として含む前記障害情報を生成する、
ことを特徴とする付記５に記載のネットワークシステム。
（付記７）
前記宛先ノード情報は、前記宛先ノードのグループの前記ネットワークシステム内の位置を示す位置情報を含み、
前記生成部は、前記障害が検出された第１のポート部に対応する位置情報を前記宛先ノードテーブルから取得し、前記取得した位置情報を障害影響範囲として含む前記障害情報を生成する、
ことを特徴とする付記５に記載のネットワークシステム。
（付記８）
前記宛先ノード情報は、前記宛先ノードのグループの前記ネットワークシステム内での階層を指定するために前記位置情報をマスクするマスク情報を更に含み、
前記生成部は、前記位置情報に対応するマスク情報を前記宛先ノードテーブルから取得し、前記取得したマスク情報を更に含む前記障害情報を生成する、
ことを特徴とする付記７に記載のネットワークシステム。
（付記９）
前記障害情報保持部は、前記受信した選択条件付加パケット中の前記障害影響範囲に含まれる宛先ノード情報毎に、前記受信した選択条件付加パケット中の１つ以上の前記選択条件情報を対応付けたエントリを有する障害情報テーブルを保持し、
前記制御部は、送信される前記パケットの宛先ノード情報に対応するエントリ内の前記１つ以上の選択条件情報を前記障害情報テーブルから取得し、前記取得した１つ以上の選択条件情報に対応する全ての選択条件に前記送信されるパケットがマッチしたときに、前記選択条件にマッチしなくなるように前記送信されるパケットのヘッダを変更する、
ことを特徴とする付記１乃至８の何れかに記載のネットワークシステム。
（付記１０）
複数のスイッチ装置と情報処理装置とを有するネットワークシステムに用いられる前記スイッチ装置であって、
複数のポート部と、
前記複数のポート部のうち、他のスイッチ装置を介して障害通知パケットを受信したポート部がパケットの中継を行うポート部として選択される選択条件を示す選択条件情報が前記障害通知パケットに付加された選択条件付加パケットを、前記複数のポート部のうち前記情報処理装置が接続される側のポート部を介して送信する中継部と、
を有することを特徴とするスイッチ装置。
（付記１１）
複数のスイッチ装置と情報処理装置とを有するネットワークシステムの制御方法であって、
前記複数のスイッチ装置のうち、第１のスイッチ装置において、
前記第１のスイッチ装置が有する第１の複数のポート部のうち、第１のポート部に発生した障害を検出し、
障害が検出された前記第１のポート部についての障害情報を生成し、
前記生成した障害情報を含む障害通知パケットを、前記第１の複数のポート部のうち、前記第１のポート部以外のポート部を介して他のスイッチ装置に通知し、
前記複数のスイッチ装置のうち、第２のスイッチ装置において、
前記第２のスイッチ装置が有する第２の複数のポート部のうち、前記他のスイッチ装置を介して前記障害通知パケットを受信した第２のポート部がパケットの中継を行うポート部として選択される選択条件を示す選択条件情報が前記障害通知パケットに付加された選択条件付加パケットを、前記第２の複数のポート部のうち前記情報処理装置が接続される側の第２のポート部を介して送信し、
前記情報処理装置において、
パケットを送受信し、
前記受信した選択条件付加パケットから抽出された前記選択条件情報を保持し、
前記保持した選択条件情報に基づき、パケットの経路制御を行う、
ことを特徴とするネットワークシステム制御方法。
【符号の説明】
【０２６２】
１０１  スイッチ装置
１０２  エンドノード
１０３  ラック
１０４、１０５  リンク群
２０４、２５０  ＣＰＵ
２０５、２５１  ＲＡＭ
２０６  障害検出部
２０７  障害情報生成部
２０８  障害情報中継部
２０９  宛先ノードテーブル
２１０  ポート選択条件テーブル
２５２  送受信部
２５３  宛先チェック部
２５４  障害分析・経路制御部
２５５  障害情報テーブル
【図１】
0006582723.tif 000002
【図２】
0006582723.tif 000003
【図３】
0006582723.tif 000004
【図４】
0006582723.tif 000005
【図５】
0006582723.tif 000006
【図６】
0006582723.tif 000007
【図７】
0006582723.tif 000008
【図８】
0006582723.tif 000009
【図９】
0006582723.tif 000010
【図１０】
0006582723.tif 000011
【図１１】
0006582723.tif 000012
【図１２】
0006582723.tif 000013
【図１３】
0006582723.tif 000014
【図１４】
0006582723.tif 000015
【図１５】
0006582723.tif 000016
【図１６】
0006582723.tif 000017
【図１７】
0006582723.tif 000018
【図１８】
0006582723.tif 000019
【図１９】
0006582723.tif 000020
【図２０】
0006582723.tif 000021
【図２１】
0006582723.tif 000022
【図２２】
0006582723.tif 000023
【図２３】
0006582723.tif 000024
【図２４】
0006582723.tif 000025
【図２５】
0006582723.tif 000026
【図２６】
0006582723.tif 000027