クラウドサービスなどを提供するデータセンタでは、要求される通信帯域が増大しており、ネットワークのマルチパス構成が主流となっている。また、マルチパスネットワークでは、障害発生時に不通となる経路の排除(障害回避)が不可欠であるが、障害回避に関して、不通時間の最小化および障害回避後の影響最小化が強く求められている。
本実施形態は、以下の構成を含む。
・障害を検出した場合に障害箇所(ポート)の先に接続されているノード群の情報を障害影響範囲として含む障害情報を通知するスイッチ装置。
・上記障害通知を受信した場合、その通知を受信したポートが中継先として選択される条件を付加して障害通知を伝播するスイッチ装置。
・上記障害通知を受信した場合、その情報を記録し、その情報に基づき障害の影響を受けるフローを特定し、障害箇所へ中継される条件をはずれるよう、そのフローに所属するパケットを加工する送信ノード。ここで、障害影響範囲は、障害箇所の先に接続される宛先ノード群の情報、例えばMAC(Media Access Control)アドレス等である。
本実施形態では、ルーティングプロトコルを用いないネットワークに上記の構成を適用することにより、ネットワーク段数に依存した固定時間で障害を通知でき、高速な障害回避が可能なネットワークシステムを実現する。また、障害の影響を受けるフローが経路変更を行うことにより障害発生時も通信帯域を有効活用可能なネットワークシステムを実現する。
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。図1は、ネットワークシステム100の実施形態が対象とするネットワークの構成例を示す図である。
図1に例示されるネットワークシステム100は、例えばデータセンタのネットワークを構成する。
このネットワークシステム100は、複数のスイッチ装置101が、Spine(幹)、Leaf(葉)、ToR(Top of Rack)という3つの役割を与えられて、いわゆるFat Treeと呼ばれる、3段構造のネットワークを構成する。
第1段(最上位段)は例えば、Spine#1、Spine#2、Spine#3、及びSpine#4の4つのスイッチ装置101を有する。
第2段は例えば、Leaf#1、Leaf#2、・・・、Leaf#6の6つのスイッチ装置101を有する。
第3段(最下位段)は例えば、ToR#1、ToR#2、・・・、ToR#6の6つのスイッチ装置101を有する。
ToR#1の下流(以下「ダウンリンク」と呼ぶ)側の2つのポートはそれぞれ、ラック103(#1)に収容されるサーバコンピュータであるServer#1及びServer#2に接続される。ToR#2のダウンリンク側の2つのポートはそれぞれ同様に、ラック103(#2)に収容されるServer#3及びServer#4に接続される。ToR#3のダウンリンク側の2つのポートはそれぞれ同様に、ラック103(#3)に収容されるServer#5及びServer#6に接続される。ToR#4のダウンリンク側の2つのポートはそれぞれ同様に、ラック103(#4)に収容されるServer#7及びServer#8に接続される。ToR#5のダウンリンク側の2つのポートはそれぞれ同様に、ラック103(#5)に収容されるServer#9及びServer#10に接続される。ToR#6のダウンリンク側の2つのポートはそれぞれ同様に、ラック103(#6)に収容されるServer#11及びServer#12に接続される。なお、Server#1〜Server#12は、サーバコンピュータに限られず、他のネットワークに接続するルータ装置等であってもよい。以下の説明では、Server#1〜Server#12を、エンドノード102と総称する。このエンドノード102は、情報処理装置に対応している。
ToR#1の上流(以下「アップリンク」と呼ぶ)側の第1及び第2のポートはそれぞれ、リンク群104(#1)によって、第2段のLeaf#1及びLeaf#2のダウンリンク側の各第1のポートに接続される。ToR#2のアップリンク側の第1及び第2のポートはそれぞれ、リンク群104(#2)によって、第2段のLeaf#1及びLeaf#2のダウンリンク側の各第2のポートに接続される。ToR#3のアップリンク側の第1及び第2のポートはそれぞれ、リンク群104(#3)によって、第2段のLeaf#3及びLeaf#4のダウンリンク側の各第1のポートに接続される。ToR#4のアップリンク側の第1及び第2のポートはそれぞれ、リンク群104(#4)によって、第2段のLeaf#3及びLeaf#4のダウンリンク側の各第2のポートに接続される。ToR#5のアップリンク側の第1及び第2のポートはそれぞれ、リンク群104(#5)によって、第2段のLeaf#5及びLeaf#6のダウンリンク側の各第1のポートに接続される。ToR#6のアップリンク側の第1及び第2のポートはそれぞれ、リンク群104(#6)によって、第2段のLeaf#5及びLeaf#6のダウンリンク側の各第2のポートに接続される。
Leaf#1のアップリンク側の第1及び第2のポートはそれぞれ、リンク群105(#1)によって、第1段のSpine#1及びSpine#3のダウンリンク側の各第1のポートに接続される。Leaf#2のアップリンク側の第1及び第2のポートはそれぞれ、リンク群105(#2)によって、第1段のSpine#2及びSpine#4のダウンリンク側の各第1のポートに接続される。Leaf#3のアップリンク側の第1及び第2のポートはそれぞれ、リンク群105(#3)によって、第1段のSpine#1及びSpine#3のダウンリンク側の各第2のポートに接続される。Leaf#4のアップリンク側の第1及び第2のポートはそれぞれ、リンク群105(#4)によって、第1段のSpine#2及びSpine#4のダウンリンク側の各第2のポートに接続される。Leaf#5のアップリンク側の第1及び第2のポートはそれぞれ、リンク群105(#5)によって、第1段のSpine#1及びSpine#3のダウンリンク側の各第3のポートに接続される。Leaf#6のアップリンク側の第1及び第2のポートはそれぞれ、リンク群105(#6)によって、第1段のSpine#2及びSpine#4のダウンリンク側の各第3のポートに接続される。
以下の説明において、ネットワークシステム100を構成する各スイッチ装置101と各エンドノード102を総称して、ノードと記載することがある。また、それぞれに付与されるMACアドレスのことを、ノードIDと記載することがある。
以上のように、図1に示されるネットワークシステム100のネットワークのトポロジは、第3段(最下位段)から第1段(最上位段)に向かうアップリンク側に、複数のリンク104(第3段から第2段)又は105(第2段から第1段)が存在する。逆に、各段の各スイッチ装置101からエンドノード102に向けては、自装置の配下のエンドノード102へ向けて、一意に経路が決定される。障害がなければ、どの最上流のSpineからも、全てのServerへの経路が存在する。即ち、障害が発生していない場合、どの経路が選択されてもパケットは目的とする宛先まで届くことができるため、アップリンク側では、各スイッチ装置101が複数のアップリンク側のリンクに接続されている複数のポートの中から1つを負荷分散機構により選択しながら、中継を行う。
図1に示される大規模化が可能なマルチパス構成のネットワークシステム100の経路制御領域は、以下の特性の異なる中継方式を用いる2つの領域を含む。
領域1:スイッチ装置101のダウンリンク側(エンドノード側)ポートに宛先が存在せず、エンドノード102から最上位段のSpineのスイッチ装置101での折返し点に向けたパケット伝送において、上流に向けて複数の経路が存在する領域である。言い換えれば、領域1は、送信元のエンドノード102から宛先のエンドノード102までのパケット伝送経路のうち、送信元のエンドノード102から最上位段のSpineのスイッチ装置101での折返し点までの領域である。
領域2:スイッチ装置101のエンドノード102側ポートに宛先が存在し、Spineのスイッチ装置101での折返し点からエンドノード102へ向けたパケット伝送において、一意に経路が決定される領域である。言い換えれば、領域2は、送信元のエンドノード102から宛先のエンドノード102までのパケット伝送経路のうち、最上位段のSpineのスイッチ装置101での折返し点から宛先のエンドノード102までの領域である。
一般的なOpenFlow方式では、スイッチ装置は、ACL(Access Contrl List)を用いたフロー制御を実行する。ACL方式では、スイッチ装置がアクセスコントロールリストを保持する。スイッチ装置は、パケットを受信したときに、このリストの各条件とパケットのフィールドとのマッチングを行い、マッチした条件に対応するポートにパケットを中継する。しかし、ACL方式では、ネットワークシステム上でフローを集中的に制御して各スイッチ装置にACLを設定するためのコントローラが必要となる。
これに対して、本実施形態のスイッチ装置101は、領域1について、複数のリンク104又は105を終端する有効な(未障害の)複数のアップリンク側ポートを、LAG方式により、フロー毎に1つの論理的なポートとみなす。この上で、スイッチ装置101は、領域1について、スイッチ部を制御して、ダウンリンク側ポートからアップリンク側ポートにパケットを中継させる負荷分散処理を実行する。
また、本実施形態では、領域2では、スイッチ装置101がアップリンク側ポートからダウンリンク側ポートへのパケット中継時において、FDB(Forwarding Data Base)を用いた一意な経路制御を実行する。即ち、ダウンリンク側ポートにおいて宛先MACアドレスとポート番号との対応関係を学習してFDBへの登録を行い、このFDBにより経路制御を行う。これにより、アップリンク側ポートからダウンリンク側ポートへのパケット中継において、同じ宛先のパケットは障害が発生していなければ常に同じダウンリンク側ポートに中継され、一意な経路制御が実行される。このとき、FDBが確実に設定されるよう、エンドノード102からSpineのスイッチ装置101へ向けて、学習パケットを送信する。
本実施形態は、以上の領域1での負荷分散による経路制御と領域2でのダウンリンク側ポートに対するFDBによる経路制御により、コントローラを必須要件としないネットワークシステム100を実現するものである。
図2(a)及び(b)はそれぞれ、図1のスイッチ装置101とエンドノード102の構成例を示す各ブロック図である。図1のSpine、Leaf、ToRの各段の各スイッチ装置101は、ネットワーク階段が異なるだけで、構成は共通である。なお、それぞれに割り当てられる機能に応じて、各段のスイッチ装置101の構成が異なるようにしてもよい。
図2(a)に示されるスイッチ装置101は、スイッチ部201、アップリンク側ポート202、ダウンリンク側ポート203、CPU(中央演算処理装置)204、及びRAM(ランダムアクセスメモリ)205を備える。
アップリンク側ポート202は、スイッチ装置101が図1のLeafならば、リンク群105を終端して、Spineのスイッチ装置101のダウンリンク側ポート203との間でパケットを授受する。また、アップリンク側ポート202は、スイッチ装置101が図1のToRならば、リンク群104を終端して、Leafのスイッチ装置101のダウンリンク側ポート203との間でパケットを授受する。図2(a)の例では、アップリンク側ポート202は#0と#1の2つが実装され2本のリンクを終端する例が示されているが、これに限られるものではなく、より多くのアップリンク側ポート202が実装されてもよい。
ダウンリンク側ポート203は、スイッチ装置101が図1のSpineならば、リンク群105を終端して、Leafのスイッチ装置101のアップリンク側ポート202との間でパケットを授受する。また、ダウンリンク側ポート203は、スイッチ装置101が図1のLeafならば、リンク群104を終端して、ToRのスイッチ装置101のアップリンク側ポート202との間でパケットを授受する。更に、ダウンリンク側ポート203は、スイッチ装置101が図1のToRならば、Serverのエンドノード102に接続されるリンクを終端して、Server#のエンドノード102の送受信部(図2(b)の252)のポートとの間でパケットを授受する。図2(a)の例では、ダウンリンク側ポート203は#0と#1の2つが実装され2本のリンクを終端する例が示されているが、これに限られるものではなく、より多くのダウンリンク側ポート203が実装されてもよい。
スイッチ部201は、アップリンク側ポート202とダウンリンク側ポート203間、アップリンク側ポート202相互間、又はダウンリンク側ポート203相互間で、パケットを中継する。
CPU204は、スイッチ装置101の全体の動作を制御し、特には図示しないROM(リードオンリーメモリ)に記憶された制御プログラムを実行する。これによって、CPU204は、スイッチ部201の中継機能のほか、図2(a)に示される障害検出部206、障害情報生成部207、及び障害情報中継部208の各機能の動作を制御する。なお、これらの機能は例えば、FPGA(Field Programmable Gate Array)によるハードウェアあるいはFPGAとCPUを組み合わせたハードウェアにより実装されてもよい。
RAM205は、後述する宛先ノードテーブル209及びポート選択条件テーブル210を保持する。
図2(b)に示されるエンドノード102は、CPU250、及びRAM251、及び送受信部252を備える。
CPU250は、送受信部252を介してパケットの送受信の動作を制御するほか、図2(b)に示される宛先チェック部253及び障害分析・経路制御部254の各機能の動作を制御する。なお、これらの機能は例えば、CPU204の場合と同様に、FPGAによるハードウェアあるいはFPGAとCPUを組み合わせたハードウェアにより実装されてもよい。
RAM251は、後述する障害情報テーブル255(障害情報保持部)を記憶する。
宛先チェック部253及び障害分析・経路制御部254は、障害情報テーブル255が保持した選択条件情報に基づきパケットの経路制御を行う制御部として動作する。
図2に示される構成を有するスイッチ装置101及びエンドノード102を含む図1のネットワークシステム100におけるパケットの経路制御の基本的な動作について、まず説明する。
始めに、スイッチ装置101内のダウンリンク側ポート203及びアップリンク側ポート202で障害が検出された場合の動作について説明する。
まず、ダウンリンク側ポート203で障害が検出された場合の障害通知・伝播動作について説明する。障害通知・伝播動作では、スイッチ装置101が、障害の影響範囲と障害経路へ向けたリンク選択条件を送信ノードへ通知する。即ち、スイッチ装置101は、障害を検知した場合、障害箇所の先に接続されるエンドノード102群の情報(宛先情報)が格納された障害通知パケットを、障害を検知したスイッチ装置101に接続される他スイッチ装置101に通知する。障害通知パケットを受信したスイッチ装置101は、その障害通知パケットを受信したアップリンク側ポート202が中継先リンクとして選択される条件を付加して、他スイッチ装置101に転送する。上記障害通知パケットの中継処理が、その障害通知パケットが送信ノードであるエンドノード102に届くまで繰り返し実行される。そして、障害通知パケットを受信した送信ノードは、宛先情報に対応する障害箇所を通過する条件(障害箇所へ向かう各スイッチ装置101のリンク選択条件の組)を記録する。
図3は、ダウンリンク障害時のスイッチ装置101とエンドノード102の障害通知・伝播動作の説明図である。
スイッチ装置101は、障害発生時の機能により、障害が検出されたスイッチ装置101と、障害が検出されたスイッチ装置101から障害通知を受信したスイッチ装置101とに分かれる。以後、前者を第1のスイッチ装置、後者を第2のスイッチ装置と称する。第1のスイッチ装置になり得るのは、それ自身がダウンリンク側ポート203で障害を検出し、かつダウンリンク側ポート203がエンドノード102(Server)に直接接続されていないスイッチ装置101であり、図1のSpine又はLeafが該当する。また、第2のスイッチ装置になり得るのは、障害通知をアップリンク側ポート202から受け取るスイッチ装置101であり、図1のLeaf又はToRが該当する。
図3(a)は、障害検出時の第1のスイッチ装置の動作説明図である。
まず、CPU204の実行機能の障害検出部206(検出部)が、#0、#1のダウンリンク側ポート203のうち、例えば#1(ポート番号=「1」)のダウンリンク側ポート203(第1のポート部)で発生した障害を検出する。図3(a)の動作Iである。
次に、CPU204の実行機能の障害情報生成部207(生成部)は、障害が検出された#1のダウンリンク側ポート203についての障害情報を生成する。障害情報生成部207は、障害が検出された例えば#1のダウンリンク側ポート203に対応する宛先ノード情報を宛先ノードテーブル209から取得し、その取得した宛先ノード情報を含む障害情報を生成する。前述したように、自装置の配下のエンドノード102に向けては自装置から一意に経路が決定するので、上述の処理の障害情報の生成処理により、障害検出ポートの先に接続される宛先ノード情報を含む障害情報が生成される。以上、図3(a)の動作IIである。
最後に、CPU204の実行機能の障害情報中継部208(第1の中継部)が、障害情報生成部207が生成した障害情報を含む障害通知パケットを、図3(a)のIIIで示される経路で、他のスイッチ装置101に通知する。即ち、障害情報中継部208は、障害情報が検出された#1のダウンリンク側ポート203(第1のポート部)以外の、図3(a)のIIIとして示される#0のダウンリンク側ポート203及び#0と#1のアップリンク側ポート202に、障害通知パケットを送出する。
次に、図3(b)は、他のスイッチ装置101から、例えば#1のアップリンク側ポート202(第2のポート部)を介して障害通知パケット(後述する選択条件付加パケットも含む)を受信したスイッチ装置101である第2のスイッチ装置の動作説明図である。
CPU204の実行機能の障害情報中継部208(第2の中継部)は、動作IVの経路で#1のアップリンク側ポート202を介して障害通知パケットを受信する。障害情報中継部208は、動作Vのように、RAM205内のポート選択条件テーブル210から障害通知パケットを受信した#1のアップリンク側ポート202に対応する選択条件情報を取得して障害通知パケットに付加し、選択条件付加パケットとする。選択条件は、第2のスイッチ装置がダウンリンク側ポート203からアップリンク側ポート202にパケットを中継する際に、負荷分散機構により、障害通知パケットを受信した#1のアップリンク側ポート202が中継先のポートとして選択される条件である。
そして、障害情報中継部208は、生成した選択条件付加パケットを、図3の動作VIのように、エンドノード102(情報処理装置)が接続される側の#0又は#1のダウンリンク側ポート203を介して、新たな障害通知パケットとして送信する。
図3(b)に示される第2のスイッチ装置の動作は、障害通知パケットとして、上述の選択条件が付加された選択条件付加パケットを受信した2段目以降の第2のスイッチ装置においても、同様である。即ち、第2のスイッチ装置は、受信した障害通知パケットに、次々と自装置における選択条件情報を障害通知パケットに付加してゆく。
以上が、アップリンク側ポート202で障害通知パケットが受信された場合の第2のスイッチ装置の動作であるが、次に、ダウンリンク側ポート203で障害通知パケットが受信された場合の第2のスイッチ装置の動作について説明する。特には図示しないが、第2のスイッチ装置内のCPU204の障害情報中継部208は、#0又は#1のダウンリンク側ポート203で他のスイッチ装置101から障害通知パケットを受信した場合、以下の動作を実行する。前述したように、ダウンリンク側ポート203方向の経路は一意な経路として決定済みである。このため、障害情報中継部208は、障害通知パケットを、選択条件情報は付加せずにそのまま、障害通知パケットを受信したダウンリンク側ポート203以外の全ての有効なダウンリンク側ポート203又はアップリンク側ポート202から他のスイッチ装置101に送信する。
図3(c)は、スイッチ装置101から障害通知パケットを受信したエンドノード102(情報処理装置)の動作説明図である。
図3(c)において、送受信部252は、スイッチ装置101(第1のスイッチ装置又は第2のスイッチ装置)に対してパケットを送受信する。
CPU250内の障害分析・経路制御部254及びRAM205内の障害情報テーブル255は、障害情報保持部として動作する。
CPU250内の障害分析・経路制御部254は、送受信部252が受信した障害通知パケット(選択条件付加パケット)から、障害影響範囲である1つ以上の宛先ノード情報と、選択条件情報である1つ以上のリンク選択条件を抽出する。そして、CPU250は、図3(c)の動作VIIのように、RAM251内の障害情報テーブル255に、抽出した宛先ノード情報毎に抽出した1つ以上のリンク選択条件を保持する。
次に、送信ノード(エンドノード102)において障害の影響を受けるフローのパケットの送信時の経路制御動作について説明する。送信ノードにおけるパケット送信時の経路制御動作では、送信ノードにおける障害経路通過フローの発見とヘッダ情報変更の処理が実行される。送信ノードは、送信データの宛先に対応する障害情報が記録されている場合、その送信フローが障害箇所を通過するかどうかを記録条件から判断し、障害箇所を通過すると判断した場合は、障害箇所を通過しなくなるように、その送信フローのヘッダ情報を加工する。ヘッダ情報は例えば、レイヤ4(L4)プロトコルの送信元ポート番号である。L4プロトコルは例えば、UDP(User Data Protocol)、又はTCP(Transmission Control Protocol)である。
図4は、障害の影響を受けるフローのパケット送信時の経路制御動作の説明図である。まず、図4(c)の送信ノード(エンドノード102)から送信される、障害影響範囲に含まれる宛先ノード情報に対応するエンドノード102宛てのパケットが、障害が検出されたスイッチ装置101(第1のスイッチ装置)まで辿り着く経路を考える。障害情報テーブル255内の宛先ノード情報毎のエントリ内の各選択条件情報は、上記経路上の各スイッチ装置101(第2のスイッチ装置)のアップリンク側ポート202が、そのスイッチ装置101の負荷分散機構により選択されるべき選択条件を示している。
エンドノード102内のCPU250の宛先チェック部253は、自装置からのパケットの送信前に、障害情報テーブル255上にそのパケットに設定されている宛先ノード情報に対応するエントリがあるか否かを検索する(図4(b)の動作I)。
対応するエントリがない場合は、障害が発生したスイッチ装置101の障害が検出されたダウンリンク側ポート203に、送信されるパケットが到達することはない。このため、宛先チェック部253は、パケットをそのまま送受信部252から送信する(図4(b)の動作II−A。
対応するエントリがある場合は、宛先チェック部253は、障害分析・経路制御部254に制御を移す(図4(b)の動作II−B)。障害分析・経路制御部254は、送信パケットがそのエントリに記憶されている全てのリンク選択条件を満たすか否か、即ち、送信パケットが障害経路を通過するか否かを判定する(図4(b)の動作III)。
送信パケットがエントリ内の1つのリンク選択条件でも満たさなければ、そのパケットは自装置から送信された後に障害が発生したスイッチ装置101(第1のスイッチ装置)に辿り着くことはないと判定できる。この場合、障害分析・経路制御部254は、前述の図4(b)の動作II−Aの場合と同様に、パケットをそのまま送受信部252から送信する(図4(b)の動作IV−A)。
送信パケットがエントリ内の全てのリンク選択条件を満たせば、そのパケットは自装置から送信された後に途中のスイッチ装置101(第2のスイッチ装置)を経由して障害が発生したスイッチ装置101(第1のスイッチ装置)に辿り着くことになる。この場合、障害が検出されたスイッチ装置101において、上記パケットはアップリンク側ポート202で受信された後、そのパケットに設定されている宛先ノード情報に対応するエンドノード102に向けて、ダウンリンク側ポート203に中継されようとする。しかし、そのスイッチ装置101(第1のスイッチ装置)内のRAM205に記憶されている宛先ノードテーブル209に基づいて選択される中継先のダウンリンク側ポート203は、障害の発生により閉塞されている。このため、スイッチ装置101内のスイッチ部201は、上記パケットをそのパケットに設定されている宛先ノード情報に対応するエンドノード102に向けて中継することはできず、そのパケットの配信が不可能となってしまう。
そこで、本実施形態では、送信パケットがエントリ内の全てのリンク選択条件を満たした場合には、障害分析・経路制御部254は、送信パケットが障害経路を回避するように、そのパケットのヘッダ情報をそのパケットの配信に影響がでない範囲で加工する。そして、障害分析・経路制御部254は、ヘッダ加工後のパケットを、送受信部252から送信する(図4(b)の動作IV−B)。
この加工の後に、そのパケットがエンドノード102から送信された場合には、例えばエンドノード102に接続されている図4(a)に示されるスイッチ装置101(第2のスイッチ装置)内のスイッチ部201の負荷分散機構において、次の動作が実行される。上記パケットは、図4(a)に示されるように、例えば#0のダウンリンク側ポート203で受信された後、実線矢印で示されるように、そこから負荷分散機構に入力する。負荷分散機構は、スイッチ部201を制御して、ダウンリンク側ポート203で受信されたパケットを、アップリンク側ポート202に中継する。
このとき、もしパケットのヘッダが加工されていなければ、スイッチ部201は、#0のダウンリンク側ポート203で受信したパケットを、障害が検出されたスイッチ装置101(第1のスイッチ装置)に向かう経路上の#1のアップリンク側ポート202に送出する。図4(a)のスイッチ部201から#1のアップリンク側ポート202に向かう破線矢印に例示される動作V′である。
しかし、送信元のエンドノード102において前述したようにパケットのヘッダが加工されていれば、負荷分散機構は、異なるパケットヘッダに基づいて負荷分散処理を実行する。この結果スイッチ部201は、#0のダウンリンク側ポート203で受信したパケットを、障害が検出されたスイッチ装置101(第1のスイッチ装置)に向かう経路上の#1のアップリンク側ポート202とは異なる、#0のアップリンク側ポート202に送出する。図4(a)のスイッチ部201から#0のアップリンク側ポート202に向かう実線矢印に例示される動作Vである。
このようにして本実施形態では、パケットの送信元のエンドノード102において、障害が検出されたスイッチ装置101(第1のスイッチ装置)に、送信されたパケットが到達しないような経路制御を行うことが可能となる。
なお、図1のネットワークシステム100においては、各Server(エンドノード102)へは、複数のSpineからの経路が確保されている。このため、例えば図4(a)のスイッチ装置101の#1のアップリンク側ポート202から送出されたパケットは、障害が検出されたスイッチ装置101を含まない経路を経由して宛先ノード(エンドノード102)に到達することができる(後述する図7を参照)。上述の如く、本実施形態によれば、障害回避後の障害影響範囲を最小に抑え、また、高速に障害経路を回避することを可能とする。さらに、本実施例によれば、障害の影響を受けるフローのみ経路変更を行うため、障害発生時も送信帯域を有効活用することが可能である。
図5は、障害の影響を受けないフローのパケット送信時の経路制御動作の説明図である。
図5の(b)及び(c)はそれぞれ、図4の(a)及び(b)に対応している。図5(b)及び(c)の実線矢印は図4(a)及び(b)の実線矢印と同様であり、送信パケット(フロー1)のヘッダの加工により、障害が検出されたスイッチ装置101(第1のスイッチ装置)にそのパケットが到達しないように制御される経路を示している。図5(b)及び(c)の動作I、II−B、III、IV−A、IV−B、V、V′はそれぞれ、図4(a)及び(b)の動作I、II−B、III、IV−A、IV−B、V、V′と同じである。
図5(b)の破線矢印は図4(a)の破線矢印と同様である。送信パケット(フロー1)のヘッダが加工されずにそのまま送信された場合、そのパケットは障害が検出されたスイッチ装置101(第1のスイッチ装置)に到達してしまう。図5(a)は、上記スイッチ装置101(第1のスイッチ装置)内でのパケットの中継動作を示す図である。図5(a)に示されるように、ヘッダが何も加工されずに#0のアップリンク側ポート202に到達したパケットは、そのパケットに付与されている宛先ノード情報に基づいて、スイッチ部201により、障害が検出された#1のダウンリンク側ポート203に中継されてしまう。図5(a)の動作VI′である。従って、このパケットは、宛先ノード(エンドノード102)に配信することができない。本実施形態では、このような事態を回避するために、前述したように、送信パケット(フロー1)のヘッダの加工により、障害が検出されたスイッチ装置101(第1のスイッチ装置)にそのパケットが到達しないように制御されるものである。
一方、図5(a)の障害が検出されたスイッチ装置101までは伝送されるが、#1のダウンリンク側ポート203の先に接続されているエンドノード102とは別のエンドノード102宛ての送信パケット(フロー2)に対しては、次のような経路制御が行われる。
送信パケット(フロー2)の送信元のエンドノード102において、CPU250内の宛先チェック部253は、障害情報テーブル255上にそのパケットに設定されている宛先ノード情報に対応するエントリがあるか否かを検索する(図5(c)の動作I)。今、この宛先ノード情報は、図5(a)の障害が検出されたスイッチ装置101の障害が検出された#1のダウンリンク側ポート203の先に接続されているエンドノード102とは別のエンドノード102に対応するものである。従って、障害情報テーブル255上では、その宛先ノード情報に対応するエントリは見つからない。この結果、宛先チェック部253は、送信パケット(フロー2)をそのまま送受信部252から送信する(図5(c)の動作II−A)。
そのパケットがエンドノード102から送信された場合、例えばエンドノード102に接続されている図5(b)に示されるスイッチ装置101(第2のスイッチ装置)内のスイッチ部201の負荷分散機構において、次の動作が実行される。上記パケットは、図5(b)に示されるように、例えば#0のダウンリンク側ポート203で受信された後、一点鎖線矢印で示されるように、そこから負荷分散機構に入力する。負荷分散機構は、スイッチ部201を制御して、#0のダウンリンク側ポート203で受信したパケットを、障害が検出されたスイッチ装置101(第1のスイッチ装置)に向かう経路上の#1のアップリンク側ポート202に送出する。図5(b)のスイッチ部201から#1のアップリンク側ポート202に向かう一点鎖線矢印に例示される動作V“である。
このパケットは、いくつかのスイッチ装置101(第2のスイッチ装置)を経由した後、障害が検出された図5(a)のスイッチ装置101(第1のスイッチ装置)に到達し、例えば#0のアップリンク側ポート202で受信される。このスイッチ装置101において、スイッチ部201は、そのパケットに付与されている別の宛先ノード情報に基づいて、そのパケットを、図5(a)の一点鎖線矢印のように、障害が検出されていない#0のダウンリンク側ポート203に中継する。図5(a)の動作VI”である。これにより、そのパケットは、正常に別の宛先ノード(エンドノード102)に到達することができる。
図6は、前述した図3(a)の第1のスイッチ装置の動作、図3(b)の第2のスイッチ装置の動作、及び図3(c)のエンドノード102の動作に基づく、図1のネットワークシステム100のネットワーク上での障害通知動作例の説明図である。
まず、Leaf#3のスイッチ装置101内のCPU204の障害検出部206が、図3(a)の第1のスイッチ装置として、ToR#3の#0のアップリンク側ポート202に接続されるLeaf#3の#0のダウンリンク側ポート203での障害を検出する。図6の動作Iである。この結果、Leaf#3のCPU204の障害情報生成部207が、障害箇所の先のノード情報として「Server#5、Server#6」のMACアドレスを障害影響範囲とした障害情報を生成する。そして、Leaf#3のCPU204の障害情報中継部208が、その障害情報を含む障害通知パケットを、障害検出ポート以外のLeaf#3の#1のダウンリンク側ポート203と#0及び#1のアップリンク側ポート202から他のスイッチ装置101に通知する。図6の例では、Leaf#3は、障害通知パケットを、Spine#1と、Spine#3と、ToR#4に通知する。
以上の第1のスイッチ装置であるLeaf#3による障害通知パケットの送信が、第1段目の障害通知である。太い実線矢印線IIで示される経路である。
#1のダウンリンク側ポート203から障害通知パケットを受信したSpine#1内のCPU204の障害情報中継部208は、以下の動作を実行する。障害情報中継部208は、受信した障害通知パケットをそのまま、#1のダウンリンク側ポート203以外の#0及び#2のダウンリンク側ポート203から、Leaf#1及びLeaf#5に向けて送信する。
#1のダウンリンク側ポート203から障害通知パケットを受信したSpine#3内のCPU204の障害情報中継部208も同様に、以下の動作を実行する。障害情報中継部208は、受信した障害通知パケットをそのまま、#1のダウンリンク側ポート203以外の#0及び#2のダウンリンク側ポート203から、Leaf#1及びLeaf#5に向けて送信する。
#0のアップリンク側ポート202でLeaf#3からの障害通知パケットを受信したToR#4内のCPU204の障害情報中継部208は、以下の動作を実行する。障害情報中継部208は、障害通知パケットを受信した#0のアップリンク側ポート202が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部208は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート203から、Server#7とServer#8に向けて送信する。
以上の第1のスイッチ装置のLeaf#3から障害通知パケットを受信した第2のスイッチ装置のSpine#1、Spine#3、又はToR#4による選択条件が付加された障害通知パケットの送信が、第2段目の障害通知である。太い一点鎖線矢印線IIIで示される経路である。
#0及び#1のアップリンク側ポート202でSpine#1又はSpine#3からの障害通知パケットを受信したLeaf#1内のCPU204の障害情報中継部208は、以下の動作を実行する。障害情報中継部208は、障害通知パケットを受信した#0及び#1のアップリンク側ポート202が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部208は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート203から、ToR#1とToR#2に向けて送信する。
#0及び#1のアップリンク側ポート202でSpine#1又はSpine#3からの障害通知パケットを受信したLeaf#5内のCPU204の障害情報中継部208も同様に、以下の動作を実行する。障害情報中継部208は、障害通知パケットを受信した#0及び#1のアップリンク側ポート202が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部208は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート203から、ToR#5とToR#6に向けて送信する。
以上の第2のスイッチ装置のSpine#1又はSpine#3から障害通知パケットを受信した第2のスイッチ装置のLeaf#1又はLeaf#5による新たな選択条件が付加された障害通知パケットの送信が、第3段目の障害通知である。太い細かい破線矢印線IVで示される経路である。
#0のアップリンク側ポート202でLeaf#1からの障害通知パケットを受信したToR#1内のCPU204の障害情報中継部208は、以下の動作を実行する。障害情報中継部208は、障害通知パケットを受信した#0のアップリンク側ポート202が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部208は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート203から、Server#1とServer#2に向けて送信する。
#0のアップリンク側ポート202でLeaf#1からの障害通知パケットを受信したToR#2内のCPU204の障害情報中継部208も同様に、以下の動作を実行する。障害情報中継部208は、障害通知パケットを受信した#0のアップリンク側ポート202が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部208は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート203から、Server#3とServer#4に向けて送信する。
#0のアップリンク側ポート202でLeaf#5からの障害通知パケットを受信したToR#5内のCPU204の障害情報中継部208も同様に、以下の動作を実行する。障害情報中継部208は、障害通知パケットを受信した#0のアップリンク側ポート202が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部208は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート203から、Server#9とServer#10に向けて送信する。
#0のアップリンク側ポート202でLeaf#5からの障害通知パケットを受信したToR#6内のCPU204の障害情報中継部208も同様に、以下の動作を実行する。障害情報中継部208は、障害通知パケットを受信した#0のアップリンク側ポート202が前述した負荷分散機構により選択されるための選択条件を示す選択条件情報を障害通知パケットに付加して選択条件付加パケットを生成する。そして、障害情報中継部208は、この選択条件付加パケットを新たな障害通知パケットとして、全てのダウンリンク側ポート203から、Server#11とServer#12に向けて送信する。
以上の第2のスイッチ装置のLeaf#1又はLeaf#5から障害通知パケットを受信した第2のスイッチ装置のToR#1、ToR#2、ToR#5,又はToR#6による新たな選択条件が付加された障害通知パケットの送信が、第4段目の障害通知である。太い荒い破線矢印線Vで示される経路である。
Leaf#3の障害検出で障害影響範囲として検出されたServer#5及び#6以外の各Server内のCPU250の障害分析・経路制御部254はそれぞれ、送受信部252を介して上位のToRからの障害通知パケットを受信すると、以下の動作を実行する。障害分析・経路制御部254は、受信した障害通知パケット中の障害影響範囲に含まれる宛先ノード情報毎に、受信した障害通知パケット中の1つ以上の選択条件情報のリンク選択条件を対応付けたエントリを障害情報テーブル255に生成する。
以上のようにして、Leaf#3で検出された障害は、その障害影響範囲として検出されたServer#5及び#6以外の各Serverに、Spine、Leaf、ToRをからなるネットワーク段数に依存した固定時間で、障害を通知することが可能となる。
図7は、前述した図4又は図5の動作に基づく、図1のネットワークシステム100のネットワーク上でのフローの障害回避動作例の説明図である。図7は、図6の説明で前述したように、Leaf#3のダウンリンク側ポート203で検出された障害に対応する障害通知パケットが、その障害影響範囲として検出されたServer#5及び#6以外の各Serverに通知された後の動作を示している。
まず、Server#1から送信されるServer#5宛ての障害の影響を受けるフローのパケット送信において、そのヘッダが加工されない場合、そのパケットは、次のように経路制御される。そのパケットは、図7の破線矢印のように、ToR#1→Leaf#1→Spine#1(それぞれ第2のスイッチ装置)の順に中継された後に、障害が検出されたLeaf#3(第1のスイッチ装置)の障害が検出されたダウンリンク側ポート203に到達してしまう。
本実施形態では、Server#1から送信されるServer#5宛ての障害の影響を受けるフローのパケットは、前述した図4(b)の動作I→II−B→III→IV−Bに従ってヘッダが加工されて、Server#1の送受信部252から送信される。
このパケットは、ToR#1(第2のスイッチ装置)のダウンリンク側ポート203で受信される。その後、スイッチ部201の負荷分散機構により、障害が検出されたスイッチ装置101(第1のスイッチ装置)に向かう経路上の例えばアップリンク側ポート202とは異なる、Leaf#2に接続されるアップリンク側ポート202に送出される。
この結果、パケットは、Leaf#2のダウンリンク側ポート203で受信された後、負荷分散機構により、Spine#4(Spine#2でもよい)に接続されるアップリンク側ポート202に中継される。
これにより、パケットは、Spine#4(Spine#2でもよい)のダウンリンク側ポート203で受信された後、宛先ノードテーブル209を用いた経路制御により、Leaf#4に接続されるダウンリンク側ポート203に中継される。
更に、パケットは、Leaf#4のアップリンク側ポート202で受信された後、前述した図10に例示される宛先ノードテーブル209を用いた経路制御により、ToR#3に向かうダウンリンク側ポート203に中継される。
最後に、パケットは、ToR#3のアップリンク側ポート202で受信された後、宛先ノードテーブル209を用いた経路制御により、Server#5に接続されるダウンリンク側ポート203に中継され、Server#5に到達する。
以上のようにして、Server#1から送信されたヘッダが加工されたパケットは、図7の実線矢印として示されるように経路制御される。即ち、パケットは、ToR#1→Leaf#2→Spine#4(Spine#2でもよい)→Leaf#4→ToR#3の順に迂回中継された後に、宛先のServer#5に到達することができる。
Server#1から送信されるServer#8宛ての障害の影響を受けないフローのパケットは、図5で説明したように、ヘッダは加工されずにそのまま、Server#1の送受信部252から送信される(図5(c)の動作II−A)。この結果、パケットは、図7の一点鎖線矢印のように、ToR#1→Leaf#1→Spine#1の順に中継された後に、障害が検出されたLeaf#3に到達する。Leaf#3において、アップリンク側ポート202で受信されたパケットは、それに付与されているServer#8宛ての宛先ノード情報に基づき、一点鎖線矢印のように、ToR#4に接続される障害が検出されていないダウンリンク側ポート203に中継される。この結果、パケットは、ToR#4のアップリンク側ポート202で受信された後、一点鎖線矢印のように、Server#8に接続されるダウンリンク側ポート203に中継され、Server#8に到達する。以上をまとめると、図7はネットワーク上でのフローの障害回避動作を説明している。すなわち、スイッチ装置(Leaf#3)のダウンリンク側ポートにおいて障害を検出した場合、障害情報すなわち障害ポートの先に接続されるノード群の情報を生成し、その障害情報を含む障害通知パケットを障害のあったそのダウンリンク側ポート以外のポートを介して他のスイッチ装置に通知する。他のスイッチ装置が障害通知パケットを受信したポートが中断を行う。ポートとして選択される条件を障害通知パケットに付加された選択条件付加パケットを送信ノード(Server#1)が接続される中継装置(ToR#1)まで伝播する。そして、送信ノード(Server#1)は、選択条件付加パケットから抽出される選択条件情報に基づき障害箇所を通過するフローを特定し、障害箇所を外れる様に、すなわち図7の実線で示すフローが選択されるように経路制御を実行する。点線で示すフロー、すなわち障害経路が回避されServer#1からServer#5への通信として、実線で示すフローが選択される。なお、Leaf#3において、障害検出されダウンリンク側ポート以外のダウンリンク側ポートを通過するフローすなわち1点鎖線で示すフローはServer#1からServer#8への通信経路としてそのまま使用される。このように本発明では、障害の影響を受けるフローの特定とそのフローにおいて経路変更を実行することができる。
次に、本実施形態において、スイッチ装置101内のアップリンク側ポート202で障害が検出された場合の動作について説明する。図8は、アップリンク障害時のスイッチ装置101の動作説明図であり、図8(a)は一部のアップリンク側ポート202で障害が検出された場合、図8(b)は全てのアップリンク側ポート202で障害が検出された場合である。
まず、一部のアップリンク側ポート202で障害が検出された場合について説明する。
スイッチ装置101において、アップリンク側ポート202の一部ポート例えば#0で障害が検出された場合、その障害の検出が負荷分散機構に通知される。負荷分散機構は、障害が検出された#0のアップリンク側ポート202への中継を禁止する。(図8(a)の動作I)。
負荷分散機構は、CPU204内の障害検出部206に障害を通知する(図8(a)の動作II)。この結果、障害検出部206は、RAM205内のポート選択条件テーブル210の内容を、障害発生後の条件に変更する(図8(a)のIII)。
その後、スイッチ部201内の負荷分散機構は、障害発生後のポート選択条件テーブル210の内容に基づいて負荷分散処理を実行する。これにより、今まで#0のアップリンク側ポート202に中継されていたパケットは、#1のアップリンク側ポート202に中継されるようになり、他の迂回経路を経由して宛先のエンドノード102に到達する。
次に、全てのアップリンク側ポート202で障害が検出された場合について説明する。
スイッチ装置101において、アップリンク側ポート202の全ポート例えば#0及び#1の両方で障害が検出された場合、その障害の検出がCPU204に通知される。当該スイッチ装置101ではアップリンクに向かう経路が全て使用不可となるため、CPU204は、#0及び#1の全てのダウンリンク側ポート203を閉塞させることで、障害を他のスイッチ装置101及びエンドノード102に伝播させる。
以上説明した動作を実現するための詳細動作について、以下に説明してゆく。
まず、スイッチ装置101のスイッチ部201内の負荷分散機構(図2(a)参照)について説明する。負荷分散機構は、ダウンリンク側ポート203から受信したパケットによりハッシュ値を計算する。そして、負荷分散機構は、スイッチ部201を制御して、その計算結果値に対応するアップリンク側ポート202にパケットを中継させる負荷分散処理を実行する。
具体的には、負荷分散機構は、ダウンリンク側ポート203でパケットpを受信すると、次式により、パケットpに対応するハッシュ値hを計算する。
h=H(p) ・・・(1)
上記(1)式において、Hは、RAM205内のポート選択条件テーブル210に記憶されているAlgorithmIDが示すハッシュ値計算アルゴリズムに従ってハッシュ値を計算する関数である。
更に、負荷分散機構は、図2(a)のRAM205内のポート選択条件テーブル210から、現在障害が発生しておらず有効なアップリンク側ポート202の数であるリンク数Mを取得する。そして、(1)式で算出したハッシュ値hと、リンク数Mとに基づいて、次式により、有効なM個のアップリンク側ポート202から1つのアップリンク側ポート202を算出する。
N=F(h,M) ・・・(2)
ここで、Fは、予め選択された計算アルゴリズムに従って0からM−1の値の中から1つを計算する関数である。一般的には、Fとして剰余演算関数を採用することができ、その場合上記(2)式は、次式の剰余演算式となる。
N=h % M ・・・(3)
「%」は、hをMで割った余りを演算する剰余演算である。この結果、負荷分散機構は、受信したパケットに対して、0からM−1の値のうちの1つの数値である値Nを算出する。
ここで、現在有効なアップリンク側ポート202の数はリンク数Mに等しく、(2)式又は(3)式によって算出される計算結果値Nは0〜M−1までのM個の値の何れかに対応する。従って、計算結果値Nはアップリンク側ポート202のポート番号であると見なすことができる。ただし、特定のポート番号のアップリンク側ポート202が例えば障害によって使用できなくなっている場合がある。このような場合に対処するために、図2のポート選択条件テーブル210が、現在有効なM個のアップリンク側ポート202の各ポート番号と(1)式及び(2)式(又は(3)式)により算出され得るM個の計算結果値Nとの対応表を予め保持する。
図9は、図2のRAM205に保持されるポート選択条件テーブル210の構成例を示す図である。
ポート選択条件テーブル210はまず、図9(a)に示される「AlgorithmID」を保持する。このAlgorithmIDは、上記(1)式のハッシュ関数H及び上記(2)式の関数Fのアルゴリズムを特定するアルゴリズム識別情報である。このAlgorithmIDは、後述する障害通知時にエンドノード102に通知される。図9(a)の例では、AlgorithmIDとして値「1」が保持されている。これは、自装置が(1)式及び(2)式の演算に用いるアルゴリズムの番号が1番、より具体的にはそのアルゴリズムに対応する計算プログラムの識別番号が1番であることを示している。
前述した(1)式及び(2)式の具体的な演算としては様々なアルゴリズムが存在し、利用者選択やスイッチ装置101(例えば、図1のSpine、Leaf、ToR)毎に異なる可能性がある。このため、本実施形態では、ネットワークシステム100内で一意にアルゴリズムを特定可能なAlgorithmIDの値により、アップリンク側の負荷分散機構のためのアルゴリズムを識別する。アルゴリズムの実態は、例えばプログラムコードで提供され、各スイッチ装置101は、それぞれが使用するAlgorithmIDに対応するアルゴリズム(プログラムコード)を保有する。
次に、ポート選択条件テーブル210は、図9(b)に示されるリンク数Mを記憶する。図9(b)の例では、リンク数Mとして値「m」が保持されている。このリンク数Mは、スイッチ装置101が保有するアップリンク側ポート202のうち、障害が発生していない有効なポートの数であり、CPU204によるアップリンク側ポート202の障害検出結果に応じて随時更新される。この処理の詳細については後述する。
更に、ポート選択条件テーブル210は、図9(c)に示される対応表のデータを記憶する。この対応表は、現在有効なM個のアップリンク側ポート202の各ポート番号「u1、u2、・・・、uM」と、(1)式及び(2)式(又は(3)式)により算出され得るM個の計算結果値「0、1、・・・、M−1」との対応関係を示す。CPU204は、図8で前述したように、アップリンク側ポート202で障害を検出する毎に、図2(a)のポート選択条件テーブル210の内容を更新する。具体的には、CPU204は、図9(b)のリンク数Mの値を−1し、図9(c)の対応表において、障害が検出されたアップリンク側ポート202のポート番号に対応するエントリを削除して、0〜M−2までの計算結果Nを並び直す。これにより、負荷分散機構は、常に有効なアップリンク側ポート202への負荷分散を実行することが可能となる。
以上より、スイッチ部201内の負荷分散機構は、RAM205内のポート選択条件テーブル210からAlgorithmID(図9(a))とリンク数M(図9(b))を読み出し、RAM205からそのAlgorithmIDに対応する演算プログラムを呼び出す。負荷分散機構は、上記リンク数Mと受信したパケットpを入力として、上記演算プログラムにより、上記(1)式及び(2)式(又は(3)式)の演算を実行し、計算結果Nを得る。負荷分散機構は、RAM205内のポート選択条件テーブル210の対応表(図9(c))から、計算結果Nに対応するポート番号を決定する。負荷分散機構は、スイッチ部201を制御して、ダウンリンク側ポート203で受信されたパケットpを、上記ポート番号に対応するアップリンク側ポート202に中継する。
本実施形態のポート選択条件テーブル210は、図3(b)の動作Vとして前述したように、スイッチ装置101(第2のスイッチ装置)がアップリンク側ポート202から障害通知パケットを受信した場合にも使用される。即ち、第2のスイッチ装置内のCPU204の障害情報中継部208は、障害通知パケットを受信したアップリンク側ポート202がパケットの中継を行うポートとして選択されるリンク選択条件をポート選択条件テーブル210から取得する。そして、障害情報中継部208は、その取得したリンク選択条件を、障害通知パケットに選択条件情報として付加する。具体的には、障害情報中継部208は、図9に例示される構成例1を有するポート選択条件テーブル210から、障害通知パケットを受信した#1のアップリンク側ポート202に対応する選択条件情報を取得する。この選択条件情報は、リンク数Mと、アルゴリズム識別情報AlgorithmIDと、障害通知パケット受信した#1のアップリンク側ポート202に対応する計算の結果値とを含む。そして、障害情報中継部208は、障害通知パケットに上記取得した選択条件情報を追加して付与する。すなわち、新しい障害通知パケットとして、選択条件付加パケットを生成する。
また、本実施形態のポート選択条件テーブル210は、スイッチ装置101内のアップリンク側ポート202の一部で障害が検出された場合の前述した図8(a)での動作IIIにおいて、障害検出部206が、その内容を、障害発生後の条件に変更する。具体的には、障害検出部206は、図9(b)に例示したポート選択条件テーブル210のリンク数Mの値を−1し、図9(c)の対応表において、#0のアップリンク側ポート202のポート番号に対応するエントリを削除して、0〜M−2までの計算結果Nを並び直す。
次に本実施形態において、領域2では、スイッチ装置101のスイッチ部201は、前述したように、アップリンク側ポート202で受信したパケットをダウンリンク側ポート203に中継する際に、FDBを用いた一意な経路制御を実行する。FDBでは一般に、過去に送受信した実績のある送信元ノード(エンドノード102)のMACアドレスと受信したポートのポート番号との対応関係が、転送データベースとして記憶される。そして、新たなパケットが受信されると、転送データベースにそのパケットの宛先MACアドレスと同じMACアドレスが記憶されていれば、そのMACアドレスと共に記憶されているポート番号が取得され、そのポート番号に対応するポートにパケットが中継される。なお、宛先MACアドレス未学習のパケットはアップリング側ポートに中継される(「第1の領域」の中継方式)。Spineのスイッチで未学習パケットを受信した場合は、宛先なしで廃棄、が通常動作となる。このSpineまで上がる段階でダウンリンク側ポートのみで学習を行うことになる。
また、実際には宛先MACアドレスに対応するエンドノードが存在するのに中継されずに廃棄されるケースを避けるため、コントローラによりFDBを登録するか、事前に学習パケットをエンドノードから送信する。
本実施形態では、前述したように、上述のFDBを用いた経路制御が、アップリンク側ポート202からダウンリンク側ポート203へのパケット中継時において実行される。そして、MACアドレスとポート番号との対応関係の学習は、ダウンリンク側ポート203において実施される。このようにして、本実施形態では、アップリンク側ポート202からダウンリンク側ポート203へのパケット中継において、同じ宛先のパケットは障害が発生していなければ常に同じダウンリンク側ポート203に中継され、一意な経路制御が実行される。
また、本実施形態では、前述したように、各スイッチ装置101でFDBが確実に設定されるようにするために、各エンドノード102側が、Spineのスイッチ装置101に向けて、学習パケットを送信する。各スイッチ装置101は、この学習パケットを受信することにより、その学習パケットに設定されている送信元MACアドレスとその学習パケットを受信したダウンリンク側ポート203との対応関係を学習して転送データベースに設定する。学習パケットの送信タイミングは、例えばエンドノード102の接続時であってもよいし、定期的であってもよい。
図10は、本実施形態において、上記MACアドレスとポート番号との対応関係を記憶するための、図2(a)に示されるスイッチ装置101内のRAM205に記憶される宛先ノードテーブル209の構成例1を示す図である。
宛先ノードテーブル209のメモリ番地1、2、・・・、L毎の各エントリは、MACアドレスと、VLAN IDと、ポートベクトル(以下「PortVector」と記載)を記憶する。ポート番号を0起点とする場合、PortVectorは、それを2進数で表したときに「1」が立っているビット位置(例えば、1ビット目〜36ビット目)に対応する値(例えば1〜36)を−1した値が、ポート番号を示す。このポート番号は、そのエントリに記憶されているMACアドレスを宛先MACアドレスとして有し、そのエントリに記憶されているVLAN IDが設定されたパケットが転送されるべきポートに対応している。
或る宛先MACアドレスとVLAN IDが設定されたパケットが複数のポートに中継されるケースに対応するために、PortVectorの複数のビット位置に「1」が立ち得る。例えば、図10のメモリ番地=「1」では、16進値で「1」即ち2進値で1ビット目に「1」が立っているPortVectorが登録されている。このため、メモリ番地=「1」に記憶されているMACアドレス=「00:01:02:03:04:05」、VLAN ID=「1」を宛先MACアドレス及びVLAN IDとして有するパケットは、ポート番号=「0」のポートに中継される。また、メモリ番地=「2」では、16進値で「2」即ち2進値で2ビット目に「1」が立っているPortVectorが登録されている。このため、メモリ番地=「2」に記憶されているMACアドレス=「00:01:02:03:04:06」、VLAN ID=「10」を宛先MACアドレス及びVLAN IDとして有するパケットは、ポート番号=「1」のポートに中継される。更に、メモリ番地=「3」では、16進値「10」は2進値で「10000」に対応するので5ビット目に「1」が立っているPortVectorが登録されている。このため、メモリ番地=「3」に記憶されているMACアドレス=「00:01:02:03:04:07」、VLAN ID=「1」を宛先MACアドレス及びVLAN IDとして有するパケットは、ポート番号=「4」のポートに中継される。
図2(a)において、スイッチ部201は、アップリンク側ポート202からパケットを受信すると、そのパケットの宛先MACアドレスで宛先ノードテーブル209のMACアドレスのフィールドを検索する。そして、スイッチ部201は、マッチしたエントリのPortVector上(2進値)で「1」が立っているビット位置をポート番号として抽出する。スイッチ部201は、そのポート番号に対応するダウンリンク側ポート203にパケットを中継する。
上述の宛先ノードテーブル209は、前述した図3(a)の動作IIにおいて、第1のスイッチ装置内のCPU204の障害情報生成部207が、障害影響範囲を決定する際にも参照する。図10に例示したように、宛先ノードテーブル209は、宛先ノード情報として宛先ノードのMACアドレスを含む。障害情報生成部207は、宛先ノードテーブル209の各エントリに記憶されているPortVectorのうち、障害が検出された例えばダウンリンク側ポート203のポート番号=「1」に対応するビット位置に「1」が立っているPortVectorを抽出する。そして、障害情報生成部207は、そのPortVectorに対応するエントリに記憶されているMACアドレスを、宛先ノードテーブル209から取得する。このようなエントリは、同時に1つ以上検出されてもよい。そして、障害情報生成部207は、その取得した1つ以上のMACアドレスを障害影響範囲(後述する図11の障害情報のデータ構成を参照)として含む障害情報を生成する。
即ち、障害情報生成部207は、障害検出部206から、障害が検出されたダウンリンク側ポート203のポート番号=「1」を通知される。障害情報生成部207は、値「1」(1ビット目が「1」である2進数)を、障害検出ポート番号に対応する1ビットだけ左シフト演算する。即ち、式「1<<1」で表される演算が実行される。なお、「<<」は左ビットシフト演算の演算記号を示す。障害情報生成部207は、その演算結果の2進数値と、宛先ノードテーブル209の各エントリのPortVectorの2進数値とのビット論理積を演算する。障害情報生成部207は、演算結果が0でなければ、即ち、そのエントリのPortVectorの上記障害が検出されたポート番号に対応する2ビット目に「1」が立っていれば、そのエントリに記憶されているMacアドレスを宛先ノード情報として抽出する。例えば、障害が検出されたポート番号=「1」に対応して、値「1」を1ビット左シフトすると2進数として2ビット目に1が立つ2進数値「00・・・10」が得られる。一方、図10に例示される宛先ノードテーブル209のメモリ番地=「2」のPortVector=0x000000002に対応する2進数値も2ビット目に1が立っている。このため、両者のビット論理積の演算を行うと、演算結果は0でない。また、図10に例示される宛先ノードテーブル209のメモリ番地=「3」のPortVector=0x00000000aに対応する2進数値も2ビット目に1が立っている場合がある。従って、このときも、両者のビット論理積の演算を行うと、演算結果は0でない。よって障害情報生成部207は、メモリ番地=「2」と「3」の各エントリ中のMACアドレス=「00:01:02:03:04:06」と「00:01:02:03:04:07」を宛先ノード情報として抽出し、それらを障害影響範囲として含む障害情報を生成する。
図11は、図3(a)の第1のスイッチ装置で生成され、図3(b)の第2のスイッチ装置で選択条件情報が付加される障害通知パケットの構成例1を示す図である。この構成例1は、図3(a)の第1のスイッチ装置のCPU204内の障害情報生成部207が生成する障害情報中の障害影響範囲として、図10に例示される宛先ノードテーブル209の構成例1から取得されるMACアドレスをノードIDとして含む場合の例である。この例では、MACアドレスは、6バイトのデータサイズを有する。図11の障害通知パケットの構成例1における各フィールドの意味は、以下の通りである。
宛先MACアドレスは、制御パケットであることを表す予約アドレスである。宛先MACアドレスは、「(H)」の記号が付加されているHビット群と「(L)」の記号が付加されているLビット群を合わせて、全部で6バイト=48ビットのデータである。前述したように、障害通知パケットは、各エンドノード102に向けてブロードキャストされるパケットであるため、宛先MACアドレスとしては、特定の宛先のMACアドレスではなく、制御パケットを表すアドレスが設定される。
送信元MACアドレスは、障害通知パケットを生成し又は処理するスイッチ装置101(図3(a)の第1のスイッチ装置及び図3(b)の第2のスイッチ装置)のMACアドレスである。送信元MACアドレスも、宛先MACアドレスと同様に、「(H)」の記号が付加されているHビット群と「(L)」の記号が付加されているLビット群を合わせて、全部で6バイト=48ビットのデータである。送信元MACアドレスは、障害通知パケットがスイッチ装置101で中継される毎に、そのスイッチ装置101のMACアドレスに付け替えられる。
Ether Typeは、障害通知であることを示す16ビットの予約値(例えば16進値「0x712」に対応する16ビット2進値データ)である。他のEther Typeと重ならなければ、任意の値を設定してよい。
障害検知ノードIDは、障害が検出されたスイッチ装置101(図3(a)の第1のスイッチ装置)のMACアドレスである。障害検知ノードIDは、宛先MACアドレス等と同様に、「(H)」の記号が付加されているHビット群と「(L)」の記号が付加されているLビット群を合わせて、全部で6バイト=48ビットのデータである。
障害番号は、障害が検出された各スイッチ装置101(図3(a)の第1のスイッチ装置)毎に、そのスイッチ装置101内での障害発生順に16ビット値が振られ、複数障害が発生した際の識別に利用される。
障害影響範囲ノード数=nは、図3(a)の第1のスイッチ装置の障害情報生成部207により障害影響範囲として検出された、障害が検出されたダウンリンク側ポート203の先に接続されるエンドノード102の数を示す16ビット値である。
障害影響範囲は、図3(a)の第1のスイッチ装置の障害情報生成部207により障害影響範囲として検出された、障害が検出されたダウンリンク側ポート203の先に接続されるn個のエンドノード102の各MACアドレス=ノードIDである。それぞれのノードIDは、6バイトのデータサイズを有する。6バイト×nが32ビットで割り切れないときは、末尾16ビットにパディングが挿入される。
リンク選択条件リストは、図3(a)の第1のスイッチ装置から送信された障害通知パケットがエンドノード102に到達するまでにダウンリンク方向に途中m個の図3(b)の第2のスイッチ装置を通過するときに付加される、m個のリンク選択条件のリストである。図12は、リンク選択条件リストの詳細構成例を示す図である。リンク選択条件リストにおいて、最初の32ビット中の上位16ビットには、リンク選択条件数=mが設定され、下位16ビットにはパディングが設定される。以降、選択条件情報として64ビットずつm組のリンク選択条件が設定される。リンク選択条件としては、リンク数Mと障害通知パケットを受信したアップリンク側ポート202に対応する計算の結果値Nとアルゴリズム識別情報AlgorithmIDとが設定される。このリンク選択条件は、図3(a)で説明したように、第2のスイッチ装置において、CPU204内の障害情報中継部208が、RAM205内のポート選択条件テーブル210から取得して設定する。
図13は、図3(c)で前述したように、エンドノード102内のCPU250の障害分析・経路制御部254によって設定される、RAM251が記憶する障害情報テーブル255の構成例1を示す図である。この構成例1は、図3(a)の第1のスイッチ装置のCPU204内の障害情報生成部207が生成する障害情報中の障害影響範囲として、図10に例示される宛先ノードテーブル209の構成例1から取得されるMACアドレスをノードIDとして含む場合の例である。図3(c)のエンドノード102内のCPU250の障害分析・経路制御部254は、送受信部252から障害通知パケットを受信すると、図11のデータ構成例1の、障害影響範囲中のn個のノードIDと、リンク選択条件リスト中のm個のリンク選択条件を抽出する。障害分析・経路制御部254は、図13のデータ構成例1を有するRAM205に記憶される障害情報テーブル255において、各メモリ番地のエントリの宛先ノードIDとして、上記抽出したn個のノードID(MACアドレス)をそれぞれ設定する。また、障害分析・経路制御部254は、上記障害情報テーブル255において、各メモリ番地の上記n個のノードIDが設定されたn個のエントリの条件1、条件2、・・・の各条件フィールドとして、上記抽出したm個のリンク選択条件を、各エントリ共通で設定する。
障害情報テーブル255は、各エントリのノードID(MACアドレス)をキーとするハッシュテーブルを構成する。
上記エントリ中の条件1、条件2、・・・のm個の条件フィールドは、障害通知パケットがエンドノード102に到達するまでにダウンリンク方向に途中m個の図3(b)の第2のスイッチ装置を通過する際に付加されるm個のリンク選択条件に対応する。今、図1のネットワークシステム100におけるネットワーク段数をDとする。この場合、障害情報テーブル255に設定される条件1、条件2、・・・の最大数Yは、図3(b)の第2のスイッチ装置となり得るスイッチ装置101を含む段数、即ち、Spineのネットワーク段を除いた「D−1」個である。図1の例では、ネットワーク段数はSpine、Leaf、ToRからなる3段であるから、Yは、Spineのネットワーク段を除いた3−1=2(条件1と条件2)である。
図13に例示される障害情報テーブル255において、「n/a」は、未使用のフィールド又はエントリを示すための無効値である。
図12に例示したように、障害通知パケットにより通知されるリンク選択条件は、第2のスイッチ装置でのリンク数M、アルゴリズム識別情報AlgorithmID、及び障害通知パケットを受信したアップリンク側ポート202に対応する計算の結果値Nである。そして、図13に例示したように、障害情報テーブル255は、宛先ノードID毎に、条件1、条件2、・・・の各条件フィールドを記憶し、各条件フィールドは計算の結果Nを記憶する。
ここで、条件フィールドの1つに対応する第2のスイッチ装置(図3(b)参照)において、複数のアップリンク側ポート202で障害通知パケットが受信されるケースがある。例えば、前述した図6において、障害が検出されたLeaf#3から送信された障害通知パケットの1つは、Spine#1を経由してLeaf#1内の例えば#0のアップリンク側ポート202で受信される。また、障害が検出されたLeaf#3から送信された障害通知パケットの他の1つは、Spine#3を経由してやはりLeaf#1内の例えば#1のアップリンク側ポート202で受信される。この場合、Leaf#1内の#0及び#1の2つのアップリンク側ポート202で障害通知パケットが受信される。そして、第2のスイッチ装置であるLeaf#1は、#0のアップリンク側ポート202で受信された障害通知パケットに、#0のアップリンク側ポート202が選択されるためのリンク選択条件を選択条件情報として付加して、ダウンリンク側ポート203から送信する。この障害通知パケットには、リンク選択条件として、#0のアップリンク側ポート202が選択されるための計算の結果値N=例えば「0」が付与されている。また、この障害通知パケットには、障害影響範囲として、Server#5に対応するノードIDと、Server#6に対応するノードIDとが付与されている。一方、Leaf#1は、#1のアップリンク側ポート202で受信された障害通知パケットには、#1のアップリンク側ポート202が選択されるためのリンク選択条件を選択条件情報として付加して、ダウンリンク側ポート203から送信する。この障害通知パケットには、リンク選択条件として、#1のアップリンク側ポート202が選択されるための計算の結果値N=例えば「1」が付与されている。また、この障害通知パケットにも、障害影響範囲として、Server#5に対応するノードIDと、Server#6に対応するノードIDとが付与されている。
図6で、Leaf#3からの2つの障害通知パケットがエンドノード102のServer#1で受信されると、Server#1内のCPU204の障害分析・経路制御部254(図3(c))は、RAM205上の障害情報テーブル255に障害情報を登録する。このとき、障害分析・経路制御部254はまず、図13に例示される障害情報テーブル255に、上記2つの障害通知パケットに障害影響範囲として共通に設定されているServer#5に対応するエントリと、Server#6に対応する2つのエントリを生成する。1つのエントリには障害影響範囲として設定されているServer#5に対応するノードIDが設定され、他のエントリには障害影響範囲として設定されているServer#6に対応するノードIDが設定される。ノードIDは、図11の説明で前述したように、例えばMACアドレスである。
続いて、障害分析・経路制御部254は、上記各エントリ内の1つの条件フィールドに、受信した1つ目の障害通知パケットに設定されている、Leaf#3の例えば#0のアップリンク側ポート202が選択されるためのリンク選択条件を設定する。具体的には、上記条件フィールドに、Leaf#3に対応するリンク数M、アルゴリズムID(AlgorithmID)、及び#0のアップリンク側ポート202が選択されるための計算の結果値N=例えば「0」が登録される。これらの情報は、Leaf#3である図3(b)の第2のスイッチ装置内のRAM205内のポート選択条件テーブル210の、図9(b)、(a)に例示される各データ及び、図9(c)に例示される対応表から取得されたものである。
更に続いて、障害分析・経路制御部254は、上記各エントリ内の同じ条件フィールドに、受信した2つ目の障害通知パケットに設定されている、Leaf#3の例えば#1のアップリンク側ポート202が選択されるためのリンク選択条件を設定する。具体的にはまず、上記条件フィールドの、Leaf#3に対応するリンク数M及びアルゴリズムID(AlgorithmID)は、先に1つ目の障害通知パケットに対応して登録されたものと同じである。加えて、上記条件フィールドに、#1のアップリンク側ポート202が選択されるための計算の結果値N=例えば「1」が重ねて登録される。この計算の結果値Nは、Leaf#3である図3(b)の第2のスイッチ装置内のRAM205内のポート選択条件テーブル210の、図9(c)に例示される対応表から取得されたものである。
以上のように、同じ宛先ノードIDに対応するエントリ中の1つの条件フィールドに関して、リンク数MとAlgorithmIDは同じでも、複数の計算の結果値Nが登録されることになる。図14は、上述のようなケースに対応可能な、図13に例示される障害情報テーブル255の各エントリの条件1、条件2、・・・の各条件フィールドの詳細構成例を示す図である。図14(a)に示されるように、条件フィールドには、リンク数MとアルゴリズムID(AlgorithmID)に加えて、単純な計算の結果値Nではなく、計算の結果値NのPortVectorが記憶される。このPortVectorは、値「1」(1ビット目が「1」である2進数)を計算の結果値Nに対応するビット数だけ左ビットシフト演算をして得られる2進数値(図14(a)では16進数値で表示されている)である。即ち、式「1<<N」で表される演算結果である。複数の計算の結果値Nの登録においては、値「1」を新たに受信された計算の結果値Nに対応するビット数だけ左ビットシフト演算をして得た2進数値と、既にあるPortVectorの2進数値とのビット論理和を演算した結果が、新たなPortVectorとなる。即ち、更新前のPortVectorをPVで表し、更新後のPortVectorをPV_newで表せば、式「PV_new=PV|(1<<N)」で表される演算が実行される。ここで、「|」は、ビット論理和の演算記号を示す。なお、PortVectorの初期値は、オール「0」である。つまり、PortVector上で「1」が立っている1つ以上のビット位置が、そのPortVectorが記憶される条件フィールドにおける1つ以上の計算の結果値Nである。
エンドノード102内のRAM251には、図14(b)のテーブルデータが記憶される。このテーブルデータは、上記アルゴリズムIDの値1、2、3,・・・、N毎に、演算プログラムコードProgram#1、Program#2、・・・の実体が記憶された図14(c)のメモリ領域へのポインタを対応付けたエントリを有する。
図4(b)の説明で前述したように、パケットの送信前に、障害情報テーブル255上にそのパケットに設定されている宛先ノードIDと等しい宛先ノードIDが設定されたエントリが見つかった場合、障害分析・経路制御部254は、以下の制御動作を実行する。
障害分析・経路制御部254は、図13に例示される障害情報テーブル255上で特定された上記エントリに記憶されている各条件フィールド内のリンク選択条件毎に、下記演算及び判定を実行する。
例えば、図13のメモリ番地1のエントリの条件1に関して、障害分析・経路制御部254は、パケットpに対して、条件1のリンク選択条件の演算「F(H(p),M)」(前述した(1)式及び(2)式を参照)を実行して、計算結果nを得る。具体的には、障害分析・経路制御部254は、障害情報テーブル255の上記エントリの条件1フィールドから、図14(a)のアルゴリズムIDを抽出する。そして、障害分析・経路制御部254は、図14(b)のテーブルデータから、上記抽出したアルゴリズムIDに対応する、RAM205に記憶されている図14(c)の演算プログラムコードProgram#1を呼び出す。障害分析・経路制御部254は、障害情報テーブル255の上記エントリの条件1フィールドから、図14(a)のリンク数Mを抽出する。障害分析・経路制御部254は、送信されるパケットpと、上記リンク数Mを入力として、上記演算プログラムコードProgram#1を実行することにより、前述した(1)式及び(2)式(又は(3)式)に対応する演算を実行し、計算結果nを算出する。
障害情報テーブル255の上記エントリの条件1フィールドから、図14(a)のPortVectorを抽出する。障害分析・経路制御部254は、値「1」(1ビット目が「1」である2進数)を上記計算結果nに対応するビット数だけ左シフト演算をして得られる2進数値と、上記PortVectorの2進数値とのビット論理積を演算する。即ち、PortVectorをPVで表せば、式「PV & (1<<n)」で表される演算が実行される。ここで、「&」は、ビット論理積の演算記号を示す。
障害情報生成部207は、上記演算の結果が0でなければ、即ち、条件1フィールドのPortVectorの上記計算結果nに対応するビット位置に「1」が立っていれば、送信されるパケットpは条件1のリンク選択条件にマッチすると判定する。
エンドノード102が上記計算を行うための各スイッチ装置101(第2のスイッチ装置)のリンク選択条件に対応する演算アルゴリズムの図14(c)に例示される演算プログラムコードは、送信ノードである各エンドノード102が予め複数保持していてもよい。或いは、図1のネットワークシステム100の初期化時に、各スイッチ装置101が各エンドノード102に配布してもよい。
以上の構成を有する実施形態の、障害のための具体的な制御処理の例について、以下に説明する。
図15は、前述した図3(a)の第1のスイッチ装置においてCPU204が実行する、リンク障害検出処理の例を示すフローチャートである。この処理は例えば、CPU204が、特には図示しないROM(リードオンリーメモリ)に記憶された障害情報生成処理プログラムを実行する動作である。この処理は、第1のスイッチ装置において、CPU204の実行機能である障害検出部206が、ダウンリンク側ポート203のうちの1つで発生した障害を検出することにより(図3(a)の動作I)、起動される。リンク障害検出処理は、図2(a)のスイッチ装置101におけるCPU204の実行機能である、障害情報生成部207と障害情報中継部208の一部に対応する。
まず、CPU204は、リンク障害が検出されたポートのポート番号nを取得する(ステップS1501)。
次に、CPU204は、ポート番号nのポートは図3(a)のダウンリンク側ポート203であるか否かを判定する(ステップS1502)。
ステップS1501の判定がYES(ダウンリンク側ポート203)である場合、CPU204は、図3(a)の宛先ノードテーブル209から、ポート番号nのダウンリンク側ポート203の先に接続される宛先ノード情報を取得する(ステップS1503)。この動作の詳細は、図3(a)の動作IIの説明において前述した。
次に、CPU204は、ステップS1503で取得した宛先ノード情報を含む障害通知パケットを生成する(ステップS1504)。障害通知パケットは、前述した図11及び図12に例示されるデータ構成を有する。
そして、CPU204は、ステップS1504で生成した障害通知パケットを、ポート番号nのダウンリンク側ポート203以外の全てのダウンリンク側ポート203及びアップリンク側ポート202から送信する(ステップS1505)。この動作の詳細は、図3(a)の経路IIIとして前述した。
ステップS1501の判定がNO(アップリンク側ポート202)である場合、CPU204は、ポート番号nのポートを、スイッチ部201内の負荷分散機構による負荷分散先から削除し、RAM205内のポート選択条件テーブル210を更新する(ステップS1506)。この動作の詳細は、図8の説明で前述した。
ステップS1505又はS1506の処理の後、CPU204は、図15のフローチャートで示されるリンク障害検出処理を終了する。
図16は、前述した図3(b)の第2のスイッチ装置においてCPU204が実行する、障害通知パケット中継処理の例を示すフローチャートである。この処理は例えば、CPU204が、特には図示しないROMに記憶された障害通知パケット中継処理プログラムを実行する動作である。この処理は、第2のスイッチ装置の何れかのポートにおいて障害通知パケットが受信されたことにより(例えば図3(b)の動作IV)、起動される。図3(b)のスイッチ部201は、受信したパケットのヘッダにおいて、宛先MACアドレスが制御パケットを表す予約アドレスで、Ether Typeが障害通知を示しているときに(図11参照)、そのパケットを障害通知パケットとしてCPU204に引き渡す。障害通知パケット中継処理は、図2(a)のスイッチ装置101におけるCPU204の実行機能である障害情報中継部208の一部に対応する。
まず、CPU204は、障害通知パケットを受信したポートのポート番号pを取得する(ステップS1601)。
次に、CPU204は、障害通知パケットの送信元MACアドレスを、自装置のMACアドレスで書き換える(ステップS1602)。
続いて、CPU204は、ポート番号pのポートが、ダウンリンク側ポート203であるか否かを判定する(ステップS1603)。
ステップS1603の判定がNO(アップリンク側ポート202)である場合、CPU204は、図3(b)のポート選択条件テーブル210から、ポート番号pに対応する選択条件を取得し、RAM205上の配列Cに格納する(ステップS1604)。この処理の詳細は、図3(b)の動作Vとして前述した。前述したように、図9に例示されるポート選択条件テーブル210から取得される選択条件は、リンク数M、計算の結果値N、及びAlgorithmIDである。
次に、CPU204は、受信されステップS1602が実行された後の図11に例示される構成を有する障害通知パケットにおいて、リンク選択条件リストのフィールドに、上記配列Cのリンク選択条件の内容を図12に例示されるフォーマットで格納する。また、CPU204は、図12のリンク選択条件数のフィールドの値mに1をプラスする。CPU204は、この結果得られるパケットを、前述した選択条件付加パケットとする(以上、ステップS1605)。この処理の詳細も、図3(b)の動作Vとして前述した。
その後、CPU204は、ステップS1605で生成した選択条件付加パケットを、新たな障害通知パケットとして、ダウンリンク側ポート203から送出する(ステップS1606)。この処理の詳細は、図3(b)の動作VIとして前述した。
ステップS1603の判定がNO(ダウンリンク側ポート203)である場合、CPU204は、以下の処理を実行する。CPU204は、受信した障害通知パケットを、選択条件情報は付加せずにそのまま、受信に係るダウンリンク側ポート203以外の全ての有効なダウンリンク側ポート203又はアップリンク側ポート202から送信する(ステップS1607)。
ステップS1606又はS1607の処理の後、CPU204は、図16のフローチャートで示される障害通知パケット中継処理を終了する。
図17は、前述した図3(c)のエンドノード102においてCPU250が実行するパケット受信処理の例1を示すフローチャートである。この処理は例えば、CPU250が、特には図示しないROMに記憶されたパケット受信処理プログラムを実行する動作である。この処理は、常時起動されている。
CPU250は通常、図3(c)の送受信部252に受信パケットが有るか否かの判定を繰り返し実行している(ステップS1701の判定がNOの繰返し)。
ステップS1701の判定がYESになると、CPU250は、受信パケットが障害通知パケットであるか否かを判定する(ステップS1702)。CPU250は、受信したパケットのヘッダにおいて、宛先MACアドレスが制御パケットを表す予約アドレスで、Ether Typeが障害通知を示しているときに(図11参照)、そのパケットを障害通知パケットであると判定する。
ステップS1702の判定がNO(障害通知パケットではない)場合には、CPU250は、特には図示しない通常のパケット受信処理を実行する(ステップS1703)。その後、CPU250は、制御をステップS1701の受信待機処理に戻る。
ステップS1702の判定がYES(障害通知パケットである)場合には、CPU250は、ステップS1704以下の処理群を実行する。この処理群は、図3(c)のCPU250の障害分析・経路制御部254の動作に対応する。
まず、CPU250は、受信した図11に例示される障害通知パケット中の図12に例示されるリンク選択条件リストから、図12に例示される条件数mを取得する。その後、CPU250は、リンク選択条件リスト中のリンク選択条件をカウントするためのRAM251中の変数iに初期値0を格納する。また、CPU250は、リンク選択条件を格納するためのRAM251中の配列変数Cの内容を空とする(以上、ステップS1704)。
その後、CPU250は、変数iの値が値mよりも小さいか否かを判定する(ステップS1705)。
ステップS1705の判定がYESならば、CPU250は、受信した図11に例示される障害通知パケット中の図12に例示されるリンク選択条件リストから、変数iの値が示すi番目のリンク選択条件{M、N、AlgorithmID}を取得する。図12の説明で前述したように、Mはリンク数、Nは計算の結果値、及びAlgorithmIDはアルゴリズム識別情報である。CPU250は、取得したリンク選択条件{M、N、AlgorithmID}を、配列変数Cの新たな要素として、配列変数Cに追加する。その後、CPU250は、変数iの値を+1インクリメントする(以上、ステップS1706)。
その後、CPU250は、ステップS1705の判定に戻り、この判定がYESならば、次のi番目のリンク選択条件の取得を繰り返す。
以上の処理の繰返しにより、受信した障害通知パケット中のリンク選択条件リストからの、0番目からm−1番目までのm個のリンク選択条件の配列変数Cへの取得が完了すると、ステップS1705の判定がNOとなる。
その後、CPU250は、受信した図12に例示される障害通知パケットから、障害影響範囲ノード数nを取得する。その後、CPU250は、変数iに初期値0を格納する(ステップS1707)。
CPU250は、変数iの値を、ステップS1714で+1ずつインクリメントしながら、ステップS1708においてステップS1707で取得した障害影響範囲ノード数nよりも小さいと判定する間、ステップS1709からS1713までの一連の処理を実行する。
ステップS1708の判定がYESになった後、CPU250は、以下の処理を実行する。CPU250は、RAM251上の配列変数IDList[]に得られている、受信した図12に例示される障害通知パケット中の障害影響範囲(ノードリスト)から、変数iの値が示すi番目の要素IDList[i]のノードIDを取得する。そして、CPU250は、そのノードIDを、RAM251上の変数Node_IDに格納する(以上、ステップS1709)。
次に、CPU250は、変数Node_IDに格納されたノードIDをキーに、図13に例示される障害情報テーブル255を検索し、上記ノードIDと同じ値が宛先ノードIDとして記憶されているエントリを取得する。エントリが無い場合には、上記ノードIDが宛先ノードIDとして設定されたエントリを、障害情報テーブル255上に新たに生成する。そして、CPU250は、そのエントリへのポインタを、RAM251上の変数Eに格納する(以上、ステップS1710)。
次に、CPU250は、ステップS1706の繰返し処理により配列変数Cに格納されているm個のリンク選択条件を、RAM251上の配列変数C’に移し替え、RAM251上の繰返し制御用の変数jに初期値1を格納する(以上、ステップS1711)。
その後、CPU250は、配列変数C’の要素が空ではないか(C’≠{})否かを判定する(ステップS1712)。
配列変数C’の要素が空ではない(ステップS1712の判定がYESの)場合には、CPU250は、次の処理を実行する。CPU250はまず、配列変数C’中の先頭の要素C’[0]のリンク選択条件{M、N、AlgorithmID}を、RAM251上の一時変数tempに格納する。次に、CPU250は、配列変数C’中から一時変数tempに対応する先頭の要素を削除する(図中「delete temp from C’」)。次に、CPU250は、一時変数tempに格納されているリンク選択条件{M、N、AlgorithmID}から、計算の結果値Nを抽出し、RAM251上の変数pに格納する(図中「p←N of temp」)。次に、CPU250は、図14の説明で前述したように、値「1」を、変数pに格納されている計算の結果値p(=N)に対応するビット数だけ左ビットシフト演算する。即ち、式「1<<p」で表される演算が実行される。CPU250は、その演算結果の2進数値と、ステップS1710で生成した変数Eがポイントする障害情報テーブル255のエントリに既に格納されているPortVector=PVの2進数値とのビット論理和を演算した結果を、新たなPVの値とする。即ち、式「PV←PV|(1<<p)」で表される演算が実行される。更に、CPU250は、一時変数tempに格納されているリンク選択条件{M、N、AlgorithmID}中の計算の結果値Nを、上記新たなPVの値で置き換える(図中「replace N of temp to PV」)。この結果、一時変数tempの内容は、リンク選択条件{M、PV、AlgorithmID}となる。CPU250は、RAM251内の図13に例示される障害情報テーブル255の変数Eがポイントするエントリ中の、変数jの値が示すj番目の条件jに、一時変数tempのリンク選択条件{M、PV、AlgorithmID}を記録(上書き)する。最後に、CPU250は、変数jの値を+1インクリメントする(以上、ステップS1713)。
その後、CPU250は、ステップS1712の判定処理に戻り、配列変数C’にリンク選択条件の要素が残っていれば、ステップS1713の処理を繰り返す。
上述の繰返し処理の結果、配列変数C’の要素が空になってステップS1712の判定がNOになると、CPU250は、変数iの値を+1インクリメントし(ステップS1714)、その後、ステップS1708の判定処理に戻る。障害影響範囲として通知された未処理の他のノードIDがまだあれば、そのノードIDについて、ステップS1709からS1713までの一連の処理が再び実行され、障害情報テーブル255の内容が更新される。
障害影響範囲として通知された全てのノードIDについて障害情報テーブル255の更新処理が完了しステップS1708の判定がNOになると、CPU250は、ステップS1701の受信待機処理に戻る。
図18は、前述した図4(b)のエンドノード102においてCPU250が実行するパケット送信処理の例を示すフローチャートである。この処理は例えば、CPU250が、特には図示しないROMに記憶されたパケット送信処理プログラムを実行する動作である。この処理は、常時起動されている。
CPU250は通常、図4(b)の受信パケットが有るか否かの判定を繰り返し実行している(ステップS1801の判定がNOの繰返し)。
ステップS1801の判定がYESになると、CPU250は、その送信パケットに対してRAM251内のフローキャッシュを検索する(ステップS1802)。本実施形態では、過去に実行された同一種の送信パケットに対する処理は、フローキャッシュとしてRAM251に記憶されている。
CPU250は、フローキャッシュにヒットしたか否かを判定する(ステップS1803)。
ステップS1803の判定がYES(ヒット)ならば、CPU250は、フローキャッシュに記録されているアクションに応じて、送信パケットのヘッダの加工(後述する)や、送信処理を実行する(ステップS1804)。その後、CPU250は、ステップS1801の送信パケットの待機処理に戻る。
ステップS1803の判定がNO(ヒットせず)ならば、CPU250は、送信パケットから宛先ノードIDを取得してRAM251上の変数Node_IDに格納する(ステップS1805)。
そして、CPU250は、RAM251内の図13に例示される障害情報テーブル255に、変数Node_IDの値と同じ宛先ノードIDが記憶された障害情報のエントリがあるか否かを判定する(ステップS1806)。
以上のステップS1805とS1806の処理の詳細は、図4(b)のCPU250の宛先チェック部253による動作Iとして前述した。
ステップS1806の判定がNOならば、CPU250は、RAM251上のフローキャッシュに今回のフローを送信パケットの通常送信アクションとして記録した後、特には図示しない通常送信処理を実行する(ステップS1814)。この処理は、図4(b)のCPU250の宛先チェック部253による動作II−Aとして前述した。その後、CPU250は、ステップS1801の送信パケットの待機処理に戻る。
ステップS1806の判定がYESならば、CPU250は、図13に例示される障害情報テーブル255から、変数Node_IDの値に対応する宛先ノードIDが記憶されているエントリEを取得する(ステップS1807)。
次に、CPU250は、上記エントリE内の各条件フィールドを処理するためのRAM251上の繰返し制御用の変数jに、初期値1を格納する(ステップS1808)。
次に、CPU250は、上記エントリE内の変数jの値が示すj番目の条件jの内容が、図13で説明した無効値n/aではなく、かつ変数jの値が図13で説明した条件フィールドの最大数Y以下であるか否かを判定する(ステップS1809)。図18のステップS1809中では、「条件_j of E≠n/a ∧ j≦Y」として示されている。
ステップS1809の判定がYESならば、CPU250は、送信パケットがエントリE中の条件j(図中「条件_j of E」)にマッチするか否かを判定する(ステップS1810)。このマッチ処理は、図4(b)のCPU250の障害分析・経路制御部254による動作IIIとして前述し、その詳細は図14の説明において前述した。
ステップS1810の判定がNOになったならば、CPU250は、ステップS1814の処理に移行し、送信パケットをそのまま送信する。この処理は、図4(b)のCPU250の障害分析・経路制御部254による動作IV−Aとして前述した。
ステップS1810の判定がYESならば、CPU250は、変数jの値を+1インクリメントした後、ステップS1809の判定処理に戻る。変数jの新たな値に対応する有効な条件jが障害情報テーブル255中のエントリEにまだあれば、CPU250は、ステップS1810のマッチ判定処理を繰り返し実行する。
エントリE中の全ての条件フィールドについてステップS1810で送信パケットとマッチすることが判定され、ステップS1809で未処理の有効な条件フィールドがなくなったと判定される(判定がNOになる)と、CPU250は、ステップS1812に移行する。ステップS1812では、CPU250は、エントリE中の例えば最初の条件1に送信パケットがマッチしないように、送信パケットのヘッダ情報を配信に影響がでない範囲で加工する(ステップS1812)。
その後、CPU250は、RAM251上のフローキャッシュに今回のフローを送信パケットのヘッダ加工(加工後の値)及び送信のアクションとして記録した後、その送信処理を実行する(ステップS1813)。この処理は、図4(b)のCPU250の障害分析・経路制御部254による動作IV−Bとして前述した。その後、CPU250は、ステップS1801の送信パケットの待機処理に戻る。
図19は、図18のステップS1812の送信パケットのヘッダの加工例を示す図である。まず、図19(a)は、送信パケットがマッチする障害情報テーブル255上のエントリの宛先ノードと、条件フィールド(条件1、条件2)の例を示している。宛先ノードIDとしては、図9のServer#3のMACアドレス(図中「Svr3 MAC」と記載)が記憶されている。条件1としては、演算式F(H(p),M)=0に対応するリンク選択条件が、図14(a)で前述した形式で記憶されている。この場合、上記演算式のMがリンク数Mであり、「0」が計算の結果値Nである。なお、計算の結果値N=0は、図14(a)のPortVectorの形式により、2進数値「1」を0ビット左シフト演算した結果として記憶されている。即ち、この演算は、PortVectorをPVと表せば、式「PV=1<<0=0x0000000000000001」として表される。そして、アルゴリズムIDが指し示す演算プログラムコード(図14(b)及び(c)参照)が、上記演算式の左辺「F(H(p),M)」に対応する。なお、上記演算式中の「p」は、送信パケットのヘッダを表す。条件2としては、条件1と同様に、演算式F’(H(p),M’)=0に対応するリンク選択条件が、図14(a)で前述した形式で記憶されている。
前述した図18のステップS1808からS1811の繰返し処理により、送信パケットが上述の障害情報テーブル255中のエントリの条件1と条件2に共にマッチするか否かが判定される。条件1と条件2に対するマッチが共に成立すると、即ち、「送信パケットp→F(H(p),M)=0 ∧ F’(H(p),M’)=0」であれば、図18のステップS1812により、送信パケットのヘッダが加工される。
ヘッダの加工方式1としては、例えば図19(b)から(c)への変更のように、レイヤ4プロトコルの送信元ポート番号(図19(b)または(c)中の「L4 Src Port」フィールド)の値を加工する方式が採用できる。ここで、レイヤ4(L4)のプロトコルは例えば、UDPまたはTCPである。このプロトコルタイプは、図19(b)または(c)に示される送信パケットのヘッダ中の「L4 Type」フィールドにより指定される。
加工処理としては、「L4 Src Port」フィールドの値xxxを+1ずつxxx’に変更しながら、変更前と変更後の送信パケットpとp’とに関して、エントリE中の例えば最初の条件1について、F(H(p),M)とF(H(p’),M)を演算する。そして、F(H(p),M)≠F(H(p’),M)、即ちF(H(p),M)=0に対してF(H(p’),M)=1となったときのフィールド値xxx’が、「L4 Src Port」フィールドに新たに設定される。
この結果、加工前の図19(a)に例示される送信パケットのヘッダが、図19(b)に例示されるように加工される。前述した(1)式で示されるH(p)又はH(p’)の計算によく利用されるCRC(Cyclic Redundancy Check)演算は、余り算であるため、最下位ビットで計算結果の偶奇を制御できる。このため、多くのスイッチ装置101では、F(H(xxx),M)≠F(H(xxx+1),M)を期待できる。すなわち、原則として、「L4 Src Port」フィールドのフィールド値xxxに1回1をプラスするだけでよいため、ヘッダの加工処理に計算時間はかからない。
以上の加工方式1は、「L4 Src Port」フィールドの値を変更しても問題ない、カプセル化を使用するオーバーレイプロトコルに適用できる。具体的には、オーバーレイプロトコルとしては、VXLAN(Virtual Extensible Local Area Network)を採用できる。或いは、オーバーレイプロトコルとしては、STT(Stateless Transport Tunneling protocol for network virtualization)を採用できる。
ヘッダの加工方式2としては、送信パケット中の送信元MACアドレスを変更する方式が採用できる。送信ノード(エンドノード102)毎に障害回避用のMACアドレスを設定しておき、障害発生時に、障害の影響を受けるフローの送信元MACアドレスを変更する。障害回避用のMACアドレスは図1のネットワークシステム100内の送信ノード(エンドノード102)間で重複しないように決定しておく。
障害回避用MACアドレスの決定例としては、MACアドレスの上位48ビット(0UI)に、障害回避用に特定の値を使用する。例えば、「C0:50:00」である。送信ノードの例えば物理NICのMACアドレスの下位40ビットを8ビット左シフトして、前述の0UIと結合する。下位8ビットを使用することにより、送信ノード毎に例えば16個の障害回避用MACを作成する。具体的には、送信ノードの例えば物理NICのMACアドレスが「00:99:01:FC:84:56」だった場合、障害回避用のMACアドレスは「C0:50:00:C8:45:60」から「C0:50:00:c8:45:6F」までの16個となる。
次に、他の実施形態について説明する。以下に説明する他の実施形態は、宛先ノードテーブル209のデータ構成と、障害通知パケットのデータ構成と、障害情報テーブル255のデータ構成と、エンドノード102におけるパケット受信処理が、上述の実施形態と異なる。
図20は、他の実施形態における図2のスイッチ装置101内のRAM205に記憶される宛先ノードテーブル209の構成例2の説明図であり、宛先ノード情報のグループ化を可能とする構成である。
前述した宛先ノードテーブル209の構成例1は、図10に例示したようにMACアドレスと、VLAN IDと、PortVectorを記憶するエントリを備える。そして、この宛先ノードテーブル209の構成例1は、スイッチ装置101におけるアップリンク側ポート202からダウンリンク側ポート203への中継を行うための宛先ノードテーブルと共用化される構成を有する。
これに対して、宛先ノードテーブル209の構成例2は、スイッチ装置101におけるアップリンク側ポート202からダウンリンク側ポート203への中継を行うための宛先ノードテーブルとは別に用意される。そして、この宛先ノードテーブル209の構成例2は、障害が検出されたダウンリンク側ポート203の先に接続される宛先ノード(エンドノード102)群の特定に、階層的構造を持ち、グループ化可能な位置IDを用いる。
前述した宛先ノードテーブル209の構成例1では、エンドノード102の数が増えたときに宛先MACアドレスが膨大になってしまう。
これに対して、他の実施形態における宛先ノードテーブル209の構成例2では、エンドノード102がグループ化されるため、宛先ノード情報を削減できる。
図20を用いてグループ化の手順を説明する。図20の例では、図1のネットワークシステム100の構成に対応して、Spine段の配下に3つのグループが存在する。各グループをPodと称し、各グループにPod−IDを付与し、各エンドノード102には、「Pod−ID+(Pod内)ToR−ID+(ToR内)Server−ID」からなる階層構造のIDを付与する。図20の例では、Pod#1、Pod#2、Pod#3がPod−IDに相当する。Tor#1−1とTor#1−2が、Pod#1内のToR−IDに対応する。Tor#2−1とTor#2−2が、Pod#2内のToR−IDに対応する。Tor#3−1とTor#3−2が、Pod#3内のToR−IDに対応する。また、Sv#1−1−1とSv#1−1−2が、Tor#1−1内のServer−IDに対応する。Sv#1−2−1とSv#1−2−2が、Tor#1−2内のServer−IDに対応する。Sv#2−1−1とSv#2−1−2が、Tor#2−1内のServer−IDに対応する。Sv#2−2−1とSv#2−2−2が、Tor#2−2内のServer−IDに対応する。Sv#3−1−1とSv#3−1−2が、Tor#3−1内のServer−IDに対応する。Sv#3−2−1とSv#3−2−2が、Tor#3−2内のServer−IDに対応する。
他の実施形態における宛先ノードテーブル209の構成例2では、「Pod−ID+ToR−ID」で同じToR配下のエンドノード102群をグループ化する。また、Pod−IDで、Pod内のToR群、つまりPod内のエンドノード102群をグループ化する。
上述のような位置IDを用いたグループ化により、宛先ノードテーブル209の登録数、障害時の障害通知パケットの通知量(データサイズ)を大幅に削減することが可能となる。
なお、図1のネットワークシステム100内の各エンドノード102及び各スイッチ装置101は、予め上述の全ての位置IDを知っているものとする。
図21は、他の実施形態における位置IDの構成例の説明図である。図21(a)に示されるように、位置IDは、8ビットのPod−ID、8ビットのToR−ID、及び16ビットのServer−IDからなる32ビットデータと、グループ化のためにこれらの32ビットデータをマスクするための32ビットのマスクデータ(Mask of Locator ID)からなる。
図21(b)は、図20のPod#1、Tor#1−2を表す位置ID、即ち、Pod#1配下のTor#1−2配下の全てのエンドノード102を表す位置IDの例を示す図である。図21(b)の例では、Pod−IDは、値「1」=8ビットの2進数で表現される値「00000001」を有する。ToR−IDは、値「2」=8ビットの2進数で表現される値「00000010」を有する。Server−IDは、16ビットが全て「0」である。また、マスクデータは、Pod−IDとToR−IDをカバーする上位16ビットが全て「1」であり、Server−IDをカバーする下位16ビットが全て「0」である。このマスクデータにより、Pod−ID=値「1」とToR−ID=値「2」が有効となり、1番目のPod−ID「Pod#1」と1番目のPod−ID内の2番目のToR−ID「Tor#1−2」が指し示される。
図22は、他の実施形態における上述の位置IDを用いた宛先ノードテーブル209の構成例2を示す図である。宛先ノードテーブル209の構成例2は、メモリ番地毎に、位置情報と、マスクデータに対応するMASK情報と、図10の説明で前述したPortVectorとを備える。図22の例は、図20におけるPod#1内のLeafのスイッチ装置101が保持する宛先ノードテーブル209の内容例を示している。この場合、Pod−IDは共通で、ToR−IDの値=「1」、「2」、「3」、・・・、「N」毎に、対応する中継先ポートを示すPortVectorを記憶する。図21(b)の場合と同様に、マスクデータの値は全て、16進値「0xFFFF0000」、即ちPod−IDとToR−IDをカバーする上位16ビットが全て「1」であり、Server−IDをカバーする下位16ビットが全て「0」である。
図22の宛先ノードテーブル209の構成例2において、例えばメモリ番地=「1」では、16進値で「0x000000001」、即ち2進値で0ビット目に「1」が立っているPortVector値が登録されている。このため、メモリ番地=「1」に記憶されているPod−ID=「1」=「Pod#1」、ToR−ID=「1」=「ToR#1−1」の配下にあるSv#1−1−1宛て又はSv#1−1−2宛てのパケットは、ポート番号=「1」のポートに中継される。このように、図22の構成例では、宛先ノードテーブル209の1つのエントリに記憶されている「位置情報(位置ID)+MASK情報(マスクデータ)」で、2つのエンドノード102宛ての宛先ノード情報を表すことができる。
図23は、他の実施形態における障害通知パケットの構成例2を示す図である。図11で前述した障害通知パケットの構成例1と比較して、図23の障害通知パケットの構成例2は、以下の点が異なる。構成例1における「障害影響範囲ノード数=n」と「障害影響範囲(ノードID(6バイト)×n個+パディング)」が、構成例2における「IDサイズ=4」と「障害影響範囲の位置ID」と「位置IDのマスク情報」に置き換わっている。前述したように、障害影響範囲は、障害が検出された1つのダウンリンク側ポート203に対応して、グループ化された1つの位置IDとマスク情報(マスクデータ)の組で指定することができる。位置IDおよびマスク情報の各データサイズは共に、例えば4バイト(32ビット)である。また、位置IDをMACアドレスとして生成・割当するケースでは、位置IDのデータサイズとしては、6バイトが指定される。図23の障害通知パケットの構成例2におけるその他の構成は、図11の障害通知パケットの構成例1と同じでよい。
図24は、他の実施形態における障害情報テーブルの構成例2を示す図である。この構成例2は、宛先ノード群の特定に、上述した位置IDを使用する場合の例である。送信ノード(エンドノード102)で、図20で前述した位置IDの階層構造に合わせて、階層的に障害情報テーブル255が作られる。図24の例では、図24(a)に示されるPod単位の障害情報を保存するテーブルPod_Tableが1つと、図24(b)に示されるToR単位の障害情報を保存するテーブルToR_TableがPod別に作られる。図24(a)のPod_Tableの各エントリは、Pod−ID(図中「Pod ID」と記載)フィールド、「有効?」フィールド、条件1、条件2等の条件フィールド、及び「Next_Table」(図中「Next Table」と記載)フィールドを有する。「Next_Table」フィールドは、図24(b)のToR_Tableへのポインタを記憶する。障害通知パケットで指定された位置IDがPod+ToR単位であれば、「Next_Table」フィールドにToR_Tableへのポインタが記憶される。障害通知パケットで指定された位置IDがPodの単位であれば、「Next_Table」フィールドにはポインタは記憶されない。図24(b)のToR_Tableの各エントリは、ToR−ID(図中「ToR ID」と記載)フィールド、「有効?」フィールド、及び条件1、条件2等の条件フィールドを有する。図24(a)及び(b)の各テーブルの各エントリに保存される条件1、条件2等の条件フィールドは、図13及び図14で説明した障害情報テーブル255の構成例1の場合と同じでよい。図24(a)及び(b)の各テーブルの「有効?」フィールドは、そのフィールド値が含まれるエントリに障害情報が保持されているか否かを示す。例えば、図24(a)のPod_Tableにおいて、「有効?」フィールドの値が「1」の場合、このエントリの内容は有効であり、「0」の場合、このエントリの内容は無効である。
図24に示される障害情報テーブル255の構成例2が使用される場合、次のような課題がある。送信ノード(エンドノード102)が送信パケットを送信するときに、送信パケット内の宛先のノードIDが、障害情報テーブル255内のどの「PodID」と「ToRID」の組合せのエントリに対応するかを検索するときに、両者の対応付けが必要となる。
対応付けの例1としては、ノードIDの生成と再割当てを行う方法が考えられる。この方法では、ノードID(例えばMACアドレス)が、位置IDの条件を満たすように生成され、各エンドノード102に割り当てられる。本来NIC(ネットワークインタフェースカード)に付与されているMACアドレスの代わりに、上述のようにして新たに割り当てられたMACアドレスが利用される。これによりノードID=位置IDとなり、パケット送信時の対応関係の検査は不要となる。
対応付けの例2としては、例えば図25に例示されるような、ノードIDと位置IDの対応テーブルを利用する方法が考えられる。図25において、ノードID:dmac#i(i=1,2,3,・・・)に対応する位置ID:LocId#j(j=1,2,3,・・・)を保持するハッシュテーブルが作られる。dmac#iは例えばMACアドレスである。LocId#jは、図21等に例示される構成を有する。今、送信パケットの宛先ノードとして指定されている検索対象のdmac(MACアドレス)に対して、「n=L(dmac)」で算出される値n(=1,2,・・・,N)をインデックスとして、図25の対応テーブルが参照される。値nで参照されるブロックの各スロットのdmac#iと検索対象のdmacとが一致するスロットが検索される。dmacとdmac#iとが一致したスロットのLocID#iが、位置IDとして取得される。そして、その位置IDにより、図24(a)及び(b)に示される障害情報テーブル255の各エントリが検索される。
図26は、他の実施形態において前述した図3(c)のエンドノード102のCPU250が実行するパケット受信処理の例2を示すフローチャートであり、上述した位置IDを使用する場合の例である。この処理は例えば、CPU250が、特には図示しないROMに記憶されたパケット受信処理プログラムを実行する動作である。この処理は、常時起動されている。
図26のフローチャートにおいて、ステップS1701からS1705までの一連の処理は、図17のそれぞれ同じステップ番号が付与されたステップS1701からS1705までの一連の処理と同じである。
この結果、受信された図23に例示される障害通知パケット中の図12に例示されるリンク選択条件リスト中の各リンク選択条件{M、N、AlgorithmID}が、RAM251内の配列変数Cに格納される。
ステップS1705の判定がNOとなった後、CPU250は、受信した図23に例示される障害通知パケットから、障害影響範囲の位置ID及びそのマスクデータを取得し、それぞれRAM251内の変数Loc_id及びmaskに格納する(ステップS2601)。
次に、CPU250は、変数Loc_idに格納されている位置ID(図21(a)参照)から、Pod−IDを取得する。その後、CPU250は、Pod_Tableから、その取得したPod−IDが「Pod−ID」フィールド(図24(a)の「Pod ID」)に記憶されているエントリを取得する。そして、CPU250は、そのエントリへのポインタを、RAM251上の変数Eに格納する(以上、ステップS2602)。
続いて、CPU250は、変数Loc_idに格納されている位置ID(図21(a)の1行面のデータ)のうちPodIDに対応するビット位置に0をセットする。この位置IDのうちPodIDに対応するビット位置を0にした値は、位置IDと、PodIDに対応するビット位置を0、それ以外を1にセットした値とで、ビット論理積を演算することで得られる。その後、CPU250は、変数Loc_idに格納されている位置IDと、変数maskに格納されているマスクデータ(図21(a)の2行目のデータ)とで、ビット論理積を演算する。即ち、位置IDの値を「Loc_id」で表わせば、位置IDの形式が図21の例のとき、この一連の演算は、式「Loc_id & 0x00FF0000 & mask」で表される。ここで、「&」は、ビット論理積の演算記号を示す。そしてCPU250は、このビット論理積の演算結果が0に等しくないか否かを判定する(ステップS2603)。
ステップS2603の判定がYES、即ちビット論理積の演算結果が0に等しくなければ、位置IDがPod+ToRの単位で指定されていると判定できる。この場合、CPU250は、変数Loc_idに格納されている位置IDから更に、ToR−IDを取得する。そして、CPU250は、図24(a)に例示されるPod_Tableにおいて、ステップS2602で取得したエントリ中の「Next_Table」フィールド(図24(a)の「Next Table」)から、ToR_Tableへのポインタを取得する。そして、CPU250は、そのポインタを、RAM251上の変数tableに格納する。更に、CPU250は、変数tableがポイントするToR_Tableから、上記取得したToR−IDがToR_Tableの「ToR−ID」フィールド(図24(b)の「ToR ID」に記憶されているエントリを取得する。そして、CPU250は、そのエントリへのポインタを、RAM251上の変数Eに上書きする(以上、ステップS2604)。これにより、変数Eがポインタするエントリは例えば、図24(b)に例示されるToR_Table上のエントリとなる。
ステップS2603の判定がNO、即ちビット論理積の演算結果が0に等しければ、位置IDがPodの単位で指定されていると判定できる。この場合、CPU250は、上記ステップS2604の処理はスキップする。この結果、変数Eがポインタするエントリは例えば、図24(a)に例示されるPod_Table上のエントリとなる。
次に、CPU250は、ステップS1706の繰返し処理により配列変数Cに格納されているm個のリンク選択条件を、RAM251上の配列変数C’に移し替え、RAM251上の繰返し制御用の変数jに初期値1を格納する(以上、ステップS2605)。
その後、CPU250は、配列変数C’の要素が空ではないか(C’≠{})否かを判定する(ステップS2606)。
配列変数C’の要素が空ではない(ステップS2606の判定がYESの)場合には、CPU250は、次の処理を実行する。CPU250はまず、図17のステップS1713の場合と同様に、配列変数C’中の先頭の要素C’[0]のリンク選択条件{M、N、AlgorithmID}を、RAM251上の一時変数tempに格納する。次に、CPU250は、図17のステップS1713の場合と同様に、配列変数C’中から一時変数tempに対応する先頭の要素を削除する(図中「delete temp from C’」)。次に、CPU250は、図17のステップS1713と同様に、一時変数tempに格納されているリンク選択条件{M、N、AlgorithmID}から、計算の結果値Nを抽出し、RAM251上の変数pに格納する(図中「p←N of temp」)。次に、CPU250は、図17のステップS1713と同様に、値「1」を、変数pに格納されている計算の結果値p(=N)に対応するビット数だけ左ビットシフト演算する。即ち、式「1<<p」で表される演算が実行される。
CPU250は、図17のステップS1713と同様に、その演算結果の2進数値と、変数Eがポイントする障害情報テーブル255のエントリに既に格納されているPortVector=PVの2進数値とのビット論理和を演算した結果を、新たなPVの値とする。即ち、式「PV←PV|(1<<p)」で表される演算が実行される。なお、前述したように、変数Eは、ステップS2604が実行された場合、即ち障害通知パケットで指定された位置IDがPod+ToR単位ならば、図24(b)のToR_Table上のエントリをポイントしている。ステップS2604が実行されなかった場合、即ち障害通知パケットで指定された位置IDがPodの単位ならば、図24(a)のPod_Table上のエントリをポイントしている。更にCPU250は、図17のステップS1713と同様に、一時変数tempに格納されているリンク選択条件{M、N、AlgorithmID}中の計算の結果値Nを、上記新たなPV値で置き換える(図中「replace N of temp to PV」)。この結果、一時変数tempの内容は、リンク選択条件{M、PV、AlgorithmID}となる。CPU250は、RAM251内の図13に例示される障害情報テーブル255の変数Eがポイントするエントリ中の、変数jの値が示すj番目の条件jに、一時変数tempのリンク選択条件{M、PV、AlgorithmID}を記録(上書き)する。CPU204は、上記エントリ中の「有効?」フィールドの値を「1」に設定する。上述のエントリ内容の更新は、前述したように、変数Eは、ステップS2604が実行された場合、即ち障害通知パケットで指定された位置IDがPod+ToR単位ならば、図24(b)のToR_Table上のエントリに対して実行される。一方、上述のエントリの更新は、ステップS2604が実行されなかった場合、即ち障害通知パケットで指定された位置IDがPodの単位ならば、図24(a)のPod_Table上のエントリに対して実行される。最後に、CPU250は、変数jの値を+1インクリメントする(以上、ステップS2607)。
その後、CPU250は、ステップS2606の判定処理に戻り、配列変数C’にリンク選択条件の要素が残っていれば、ステップS2607の処理を繰り返す。
上述の繰返し処理の結果、配列変数C’の要素が空になってステップS2606の判定がNOになると、CPU250は、ステップS1701の受信待機処理に戻る。
以上説明したように、本実施形態では、ダウンリンク側ポート203での障害を検出したスイッチ装置101(第1のスイッチ装置)は、障害ポートの先に接続されているノード群の情報を障害影響範囲として含む障害情報を通知する。また、アップリンク側ポート202から障害通知を受信したスイッチ装置101(第2のスイッチ装置)は、障害通知を受信したポートが中継先として選択される条件を付加して障害通知を伝播する。これらの障害通知を受信した情報処理装置(エンドノード102)は、障害情報を記憶する。そして、情報処理装置は、パケット送信時に、記憶している障害情報に基づき、障害の影響を受けるフローを特定し、そのフローに所属する送信パケットにおいて障害箇所へ中継される条件をはずれるよう、送信パケットを加工する。このようにして、本実施形態では、障害の影響を受けるフローにおいて経路変更を行うことにより、障害発生時も通信帯域を有効活用可能なネットワークシステムを実現することが可能となる。また、本実施形態では、ネットワーク段数に依存した固定時間で障害を通知でき、高速な障害回避が可能なネットワークシステム100を実現することが可能となる。更に、本実施形態では、領域1での負荷分散による経路制御と領域2でのダウンリンク側ポートに対するFDBによる経路制御により、コントローラを必須要件としないネットワークシステム100を実現することが可能となる。
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
複数のスイッチ装置と情報処理装置とを有するネットワークシステムにおいて、
前記複数のスイッチ装置のうち、第1のスイッチ装置は、
第1の複数のポート部と、
前記第1の複数のポート部のうち、第1のポート部に発生した障害を検出する検出部と、
障害が検出された前記第1のポート部についての障害情報を生成する生成部と、
前記生成部が生成した障害情報を含む障害通知パケットを、前記第1の複数のポート部のうち、前記第1のポート部以外のポート部を介して他のスイッチ装置に通知する第1の中継部と、
を有し、
前記複数のスイッチ装置のうち、第2のスイッチ装置は、
第2の複数のポート部と、
前記第2の複数のポート部のうち、前記他のスイッチ装置を介して前記障害通知パケットを受信した第2のポート部がパケットの中継を行うポート部として選択される選択条件を示す選択条件情報が前記障害通知パケットに付加された選択条件付加パケットを、前記第2の複数のポート部のうち前記情報処理装置が接続される側の第2のポート部を介して送信する第2の中継部と、
を有し、
前記情報処理装置は、
パケットを送受信する送受信部と、
前記送受信部が受信した選択条件付加パケットから抽出された前記選択条件情報を保持する障害情報保持部と、
前記障害情報保持部が保持した選択条件情報に基づき、パケットの経路制御を行う制御部と、
を有することを特徴とするネットワークシステム。
(付記2)
前記第2のスイッチ装置は、前記第2の複数のポート部のそれぞれに対応する前記選択条件情報を記憶するポート選択条件テーブルを保持し、
前記第2の中継部は、前記障害通知パケットを受信した第2のポート部が前記情報処理装置の側のポートではない場合に、前記ポート選択条件テーブルから前記障害通知パケットを受信した第2のポート部に対応する選択条件情報を取得して前記障害通知パケットに付加して前記選択条件付加パケットとする、
ことを特徴とする付記1に記載のネットワークシステム。
(付記3)
前記ポート選択条件テーブルは、前記第2の複数のポート部のうち、障害が発生していない前記第2のポート部の数であるリンク数と、前記第2のスイッチ装置で受信された前記パケットと前記リンク数とを入力とし前記障害が発生していない第2のポート部のうちの1つを選択するための計算のアルゴリズムを特定するアルゴリズム識別情報と、前記障害が発生していない第2のポート部のそれぞれと前記計算の結果値との対応情報とを、前記第2の複数のポート部のそれぞれに対応する前記選択条件情報として記憶し、
前記第2の中継部は、前記ポート選択条件テーブルから、前記リンク数と、前記アルゴリズム識別情報と、前記障害通知パケットを受信した第2のポート部に対応する前記計算の結果値とを、前記選択条件情報として取得して前記障害通知パケットに付加して前記選択条件付加パケットとする、
ことを特徴とする付記2に記載のネットワークシステム。
(付記4)
前記第2の中継部は、前記障害通知パケットを受信した第2のポート部が前記情報処理装置の側のポートである場合に、前記受信した障害通知パケットをそのまま、前記第2の複数のポート部のうち、前記障害通知パケットが受信された第2のポート部以外の第2のポート部を介して送信する、
ことを特徴とする付記2又は3に記載のネットワークシステム。
(付記5)
前記第1のスイッチ装置は、情報処理装置である宛先ノードに対応する宛先ノード情報と前記第1の複数のポート部のうち前記宛先ノード宛てのパケットを中継するポート部との対応関係を記憶する宛先ノードテーブルを保持し、
前記生成部は、前記障害が検出された第1のポート部に対応する宛先ノード情報を前記宛先ノードテーブルから取得し、前記取得した宛先ノード情報を含む前記障害情報を生成する、
ことを特徴とする付記1乃至4の何れかに記載のネットワークシステム。
(付記6)
前記宛先ノード情報は、前記宛先ノードのMACアドレスを含み、
前記生成部は、前記障害が検出された第1のポート部に対応する1つ以上のMACアドレスを前記宛先ノードテーブルから取得し、前記取得した1つ以上のMACアドレスを障害影響範囲として含む前記障害情報を生成する、
ことを特徴とする付記5に記載のネットワークシステム。
(付記7)
前記宛先ノード情報は、前記宛先ノードのグループの前記ネットワークシステム内の位置を示す位置情報を含み、
前記生成部は、前記障害が検出された第1のポート部に対応する位置情報を前記宛先ノードテーブルから取得し、前記取得した位置情報を障害影響範囲として含む前記障害情報を生成する、
ことを特徴とする付記5に記載のネットワークシステム。
(付記8)
前記宛先ノード情報は、前記宛先ノードのグループの前記ネットワークシステム内での階層を指定するために前記位置情報をマスクするマスク情報を更に含み、
前記生成部は、前記位置情報に対応するマスク情報を前記宛先ノードテーブルから取得し、前記取得したマスク情報を更に含む前記障害情報を生成する、
ことを特徴とする付記7に記載のネットワークシステム。
(付記9)
前記障害情報保持部は、前記受信した選択条件付加パケット中の前記障害影響範囲に含まれる宛先ノード情報毎に、前記受信した選択条件付加パケット中の1つ以上の前記選択条件情報を対応付けたエントリを有する障害情報テーブルを保持し、
前記制御部は、送信される前記パケットの宛先ノード情報に対応するエントリ内の前記1つ以上の選択条件情報を前記障害情報テーブルから取得し、前記取得した1つ以上の選択条件情報に対応する全ての選択条件に前記送信されるパケットがマッチしたときに、前記選択条件にマッチしなくなるように前記送信されるパケットのヘッダを変更する、
ことを特徴とする付記1乃至8の何れかに記載のネットワークシステム。
(付記10)
複数のスイッチ装置と情報処理装置とを有するネットワークシステムに用いられる前記スイッチ装置であって、
複数のポート部と、
前記複数のポート部のうち、他のスイッチ装置を介して障害通知パケットを受信したポート部がパケットの中継を行うポート部として選択される選択条件を示す選択条件情報が前記障害通知パケットに付加された選択条件付加パケットを、前記複数のポート部のうち前記情報処理装置が接続される側のポート部を介して送信する中継部と、
を有することを特徴とするスイッチ装置。
(付記11)
複数のスイッチ装置と情報処理装置とを有するネットワークシステムの制御方法であって、
前記複数のスイッチ装置のうち、第1のスイッチ装置において、
前記第1のスイッチ装置が有する第1の複数のポート部のうち、第1のポート部に発生した障害を検出し、
障害が検出された前記第1のポート部についての障害情報を生成し、
前記生成した障害情報を含む障害通知パケットを、前記第1の複数のポート部のうち、前記第1のポート部以外のポート部を介して他のスイッチ装置に通知し、
前記複数のスイッチ装置のうち、第2のスイッチ装置において、
前記第2のスイッチ装置が有する第2の複数のポート部のうち、前記他のスイッチ装置を介して前記障害通知パケットを受信した第2のポート部がパケットの中継を行うポート部として選択される選択条件を示す選択条件情報が前記障害通知パケットに付加された選択条件付加パケットを、前記第2の複数のポート部のうち前記情報処理装置が接続される側の第2のポート部を介して送信し、
前記情報処理装置において、
パケットを送受信し、
前記受信した選択条件付加パケットから抽出された前記選択条件情報を保持し、
前記保持した選択条件情報に基づき、パケットの経路制御を行う、
ことを特徴とするネットワークシステム制御方法。