図1は、実施形態にかかる検査方法の例を説明する図である。図1に示すシステムでは、通信装置20(20a〜20d)と、スイッチ10(10a〜10d)が含まれているが、システム中の通信装置20やスイッチ10の数は任意である。図1の例では、通信装置20aから通信装置20dに至る通信経路として、スイッチ10a、スイッチ10b、スイッチ10dを経由する経路(経路R1)と、スイッチ10a、スイッチ10c、スイッチ10dを経由する経路(経路R2)があるとする。また、各スイッチ10は、受信したパケットのヘッダのハッシュ値を用いて、経路を振り分けるとする。従って、スイッチ10aやスイッチ10dのように、複数の経路が経由しているスイッチ10では、受信パケットのヘッダのハッシュ値に応じて、受信パケットの転送に使用する経路を選択するものとする。
このようなシステムにおいて、通信装置20aが通信装置20d宛てに検査パケットP0(図示せず)を生成したとする。通信装置20aは、検査パケットP0中のヘッダの情報を記憶するとともに、検査パケットP0を通信装置20dに向けて送信したとする。このため、検査パケットP0は、通信装置20aから送信されるとスイッチ10aに到達する。
スイッチ10aは、検査パケットP0のヘッダのハッシュ値を用いて、検査パケットP0をスイッチ10bに転送することを決定する。スイッチ10aは検査パケットP0をスイッチ10bに転送する。スイッチ10bは、スイッチ10aから検査パケットP0を受信すると、検査パケットP0の宛先が通信装置20dであるため、検査パケットP0をスイッチ10dに転送する。スイッチ10dは検査パケットP0の宛先が通信装置20dであるため、検査パケットP0を通信装置20dに転送する。従って、検査パケットP0は、図1の矢印A11に示す経路(経路R1)に沿って転送される。経路R1に障害が発生していない場合、検査パケットP0は、通信装置20dに到達する。
通信装置20dは、検査パケットP0を受信すると、検査パケットP0に応答する応答パケットを、予め決められた数だけ生成する。ここで、予め決められた数は、2以上の任意の数である。通信装置20dは、複数の応答パケットを生成するときに、複数の応答パケットの各々が経由する通信経路が互いに異なる経路となる可能性が高くなるように、個々の応答パケットのヘッダ中の情報が異なる値となるようにする。例えば、通信装置20dは、複数の応答パケットの各々の間で、送信元ポート番号が互いに異なる値となるように設定する。図1では、通信装置20dは応答パケットとして、応答パケットP1とP2を生成したとする。応答パケットP1では、ヘッダ中の送信元ポート番号(SP)がSP#Aであるとする。一方、応答パケットP2では、ヘッダ中の送信元ポート番号がSP#Bであるとする。
さらに、通信装置20dは、応答パケットのうちの一部が通信装置20aに到達しなかった場合に、到達しなかった応答パケットのヘッダ情報を通信装置20aで認識できるように、各応答パケットのデータに「他の応答パケット」のヘッダの情報を含める。ここで、ある応答パケットにとっての「他の応答パケット」は、その応答パケットで受信成功を通知する検査パケットに応答して生成した複数の応答パケットのうちで、その応答パケット以外の応答パケットである。従って、応答パケットP1にとっては、応答パケットP2が他の応答パケットとなる。一方、応答パケットP2にとっては、応答パケットP1が他の応答パケットとなる。従って、応答パケットP1のデータには、応答パケットP2のヘッダ情報H1が含められている。一方、応答パケットP2のデータには、応答パケットP1のヘッダ情報H2が含められている。図1の例では、他の応答パケットの情報として、他の応答パケットのヘッダ中の送信元ポート番号の情報が使用されている。このため、応答パケットP1は、他の応答パケットのヘッダ情報H1として、送信元ポート番号がSP#Bであることをデータに含んでいる。また、応答パケットP2は、他の応答パケットのヘッダ情報H2として、送信元ポート番号がSP#Aであることをデータに含んでいる。
通信装置20dは、応答パケットP1とP2を通信装置20aに向けて送信すると、応答パケットP1とP2は、いずれもスイッチ10dに到達したとする。スイッチ10dは、応答パケットP1のヘッダ情報のハッシュ値から、応答パケットP1の転送先をスイッチ10cに決定したとする。すると、応答パケットP1は、スイッチ10c、スイッチ10aを介して、通信装置20aに至る経路(矢印A12)で転送される。なお、矢印A12の経路は、経路R2にあたるとする。
一方、応答パケットP2について、スイッチ10dは、応答パケットP2のヘッダ情報のハッシュ値から、応答パケットP2の転送先をスイッチ10bに決定したとする。すると、応答パケットP2は、スイッチ10b、スイッチ10aを介して、通信装置20aに至る経路(矢印A13)で転送される。矢印A13は、経路R1に沿った経路である。
経路R1と経路R2のいずれにも障害が発生していない場合、通信装置20aは、応答パケットP1とP2の両方を受信することができる。この場合、通信装置20aと通信装置20dの間の物理ネットワークには障害が発生していない。
経路R1と経路R2のいずれかに障害が発生している場合、通信装置20aは、障害の発生していない経路で転送された応答パケットを受信できる。例えば、通信装置20aは、応答パケットP2を受信したが応答パケットP1を受信しなかったとする。すると、通信装置20aは、受信に成功した応答パケットP2のデータ中のヘッダ情報H2を用いて、受信に失敗した応答パケットP1の存在と、応答パケットP1のヘッダの情報を特定できる。そこで、通信装置20aは、応答パケットP1のヘッダの情報を用いて特定される転送経路に障害が発生していると判定する。なお、ヘッダの情報から転送経路を特定する方法は、任意の既知の方法を使用できる。
ところで、経路R1に障害が発生している場合、検査パケットP0は矢印A11に示すように通信装置20dに到達しない。このため、通信装置20dは応答パケットを生成せず、通信装置20aも応答パケットを受信しない。このように、1つの応答パケットも受信しない場合、通信装置20aは、通信装置20a自身が送信した検査パケットが、宛先の通信装置20dに到達していないと判定する。通信装置20aは、検査パケットP0の送信時に、検査パケットP0のヘッダの情報を記憶しているので、検査パケットP0のヘッダの情報で特定される転送経路に障害が発生していると判定する。
このように、検査パケットを受信した通信装置20において、他の応答パケットのヘッダ情報を含む複数の応答パケットを、異なる経路を用いて転送することにより、検査パケットの送信元の通信装置20は、受信していない応答パケットの存在を認識できる。さらに、受信した応答パケットを用いて、受信していない応答パケットのヘッダの情報を特定することにより、障害の発生した経路を特定できる。さらに、いずれの応答パケットも受信しない場合、通信装置20は、送信した検査パケットの転送経路に障害が発生したと判定できる。従って、実施形態にかかる方法により、冗長化された複数の経路のうちで障害が発生している経路の特定が可能になる。
<装置構成とネットワークの例>
図2は、通信装置20の構成の例を説明する図である。通信装置20は、送信部21、受信部22、分類部23、データ処理部24、検査部30を備える。検査部30は、生成部31、記憶部32、応答部33、複製部34、判定部35を有する。記憶部32は、検査パケットテーブル36を記憶し、さらに、検査部30での処理に使用されるデータ等を保持する。例えば、記憶部32は、ARP(Address Resolution Protocol)テーブルを保持していても良い。
送信部21は、他の通信装置20などの他の装置にパケットを送信する。受信部22は、通信装置20やスイッチ10などの他の装置からパケットを受信する。受信部22は、受信したパケットを分類部23に出力する。
分類部23は、入力されたパケットを、パケットの宛先ポート番号を用いて分類する。パケットの宛先ポート番号が、検査部30で処理される検査パケットや応答パケットを識別するために使用される値である場合、分類部23は、受信パケットを応答部33と判定部35に出力する。以下、検査部30で処理される検査パケットや応答パケットを識別するために使用される値のことを、「検査用ポート番号」と記載することがある。一方、パケットの宛先ポート番号が検査用ポート番号以外の場合、分類部23は、受信パケットをデータ処理部24に出力する。なお、分類部23は、検査用ポート番号を予め記憶しているものとする。データ処理部24は、入力されたパケットを処理し、適宜、送信パケットを生成する。
通信装置20が他の通信装置20から検査パケットを受信した場合、応答部33は、応答パケットのベースとなる情報を生成し、複製部34は、応答部33で生成された情報を用いて、複数の応答パケットを生成する。複製部34は、生成した複数の応答パケットを、送信部21を介して、検査パケットの送信元に送信する。
一方、通信装置20が他の通信装置20から応答パケットを受信した場合、判定部35は、受信した応答パケットのヘッダの情報を取得して、検査パケットの宛先の通信装置20から送信された全ての応答パケットを得られたかを判定する。判定部35は、受信に失敗した応答パケットの転送経路などに障害があると判定する。判定部35の処理の詳細は後述する。生成部31は、通信装置20が検査パケットを送信する場合、経路の状況の検査の対象となっている通信先の通信装置20に宛てた検査パケットを生成する。生成部31は、検査パケットのヘッダ情報を、検査パケットテーブル36に格納する。
図3は、通信装置20のハードウェア構成の例を説明する図である。通信装置20は、プロセッサ101、メモリ102、バス103、ネットワーク接続装置104を備える。メモリ102は、RAM(Random Access Memory)とROM(Read Only Memory)を含む。プロセッサ101は、メモリ102に記憶されたプログラムを実行することができる。バス103は、プロセッサ101、メモリ102、ネットワーク接続装置104を、相互にデータの送受信が可能になるように接続する。ネットワーク接続装置104は、ネットワーク中の他の装置との情報の入出力を行う。ネットワーク接続装置104は、例えば、NIC(Network Interface Card)として実現される。通信装置20において、プロセッサ101は、分類部23、データ処理部24、生成部31、応答部33、複製部34、判定部35として動作する。メモリ102は、記憶部32として動作するほか、適宜、データ処理部24が処理するデータの格納に使用され、データ処理部24の一部としても動作する。ネットワーク接続装置104は、送信部21と受信部22を実現する。
オプションとして、通信装置20は、入力装置、出力装置、可搬記憶媒体駆動装置の1つ以上を有していても良い。入力装置は、キーボードなど、情報の入力に使用される任意の装置であり、出力装置は、ディスプレイなど、データの出力に使用される任意の装置である。可搬記憶媒体駆動装置は、メモリ102中のデータを可搬記憶媒体に出力することができ、また、可搬記憶媒体からプログラムやデータ等を読み出すことができる。ここで、可搬記憶媒体は、持ち運びが可能な任意の記憶媒体である。
通信装置20がコンピュータとして実現される場合、分類部23、データ処理部24、生成部31、応答部33、複製部34、判定部35は、OS(Operating System)等のソフトウェアで実現されうる。また、通信装置20の全体がNICによって実現されても良い。通信装置20の全体がNICによって実現される場合、分類部23、データ処理部24、生成部31、応答部33、複製部34、判定部35の1つ以上がハードウェアによって実現され得る。
図4は、ネットワークの例を説明する図である。図4に示すネットワークには、通信装置20a〜20hと複数のスイッチ10(SW1〜SW10)、管理装置80が含まれている。なお、図4は一例であり、ネットワーク中のスイッチ10の数、通信装置20の数、スイッチ10や通信装置20の接続関係は、実装に応じて変更され得る。
管理装置80は、ネットワーク中の全ての通信装置20と制御回線で接続され得る。通信装置20は、応答パケットの受信状況を用いて、障害が発生していると判定した経路を転送されたヘッダの情報を含む問い合わせを管理装置80に送信する。管理装置80は、通信装置20から受信した問い合わせに含まれているヘッダの情報、ネットワークトポロジ、各スイッチ10での振り分け処理のアルゴリズムなどを用いて、そのヘッダの情報から特定される転送経路を特定する。その後、管理装置80は、特定した転送経路の情報を含む経路情報通知を、問い合わせの送信元の通信装置20に送信してもよい。この場合、通信装置20では、得られた経路情報通知を用いて、障害の発生した経路を特定する情報を取得できる。従って、オペレータは、検査パケットを送信した通信装置20が備える表示装置等から、障害の発生している経路の情報を取得できる。また、管理装置80は、問い合わせ中のヘッダの情報を用いて特定した経路の情報を、オペレータが視認可能な表示装置に表示しても良く、オペレータが使用している端末に、障害の発生した経路を特定する情報を送信しても良い。
スイッチ10にヘッダ情報を通知することにより、スイッチ10から転送先ポートを取得可能な場合、図4の点線で示すように、管理装置80は、ネットワーク中の各スイッチ10と接続されうる。管理装置80は、問い合わせに含まれているヘッダの情報をスイッチ10に送信することにより、スイッチ10からそのスイッチ10での振り分け先を取得することにより、障害の発生している経路を特定する。障害の発生している経路を特定した後に管理装置80が行う処理は、管理装置80がスイッチ10と接続されていない場合と同様である。
<第1の実施形態>
以下、第1の実施形態を、検査パケットの送信処理、複数経路への分散処理、検査パケットの受信処理と応答パケットの送信処理、応答パケットの受信、パケットが消失した経路の問い合わせ、管理装置80での処理に分けて説明する。以下の説明では、いずれの通信装置20による処理であるかを分かりやすくするために、符号の末尾に処理を実行する通信装置20の符号の末尾と同じアルファベットを付けて記載することがある。例えば、生成部31aは通信装置20a中の生成部31であり、判定部35gは通信装置20g中の判定部35である。
(1)検査パケットの送信処理
生成部31は、通信装置20に入力された検査指示に応じて検査パケットを生成する。検査指示は、管理装置80から通信装置20に送信されても良く、また、通信装置20の入力装置からオペレータによって入力されても良い。検査指示には、検査パケットの宛先に割り当てられたIPアドレスが含まれており、オプションとして、検査パケットの送信元ポートとして使用する値が含まれていても良い。
図5は、検査パケットと検査パケットテーブルの例を説明する図である。P5は、検査パケットの例を示す。検査パケットは、Etherヘッダ、IP(Internet Protocol)ヘッダ、UDP(User Datagram Protocol)ヘッダ、UDPペイロードを含む。Etherヘッダは、宛先MAC(Media Access Control)アドレスと送信元MACアドレスを含む。IPヘッダは、送信元IPアドレス、宛先IPアドレス、プロトコル情報(Proto)などを含む。P5の例では、トランスポート層のプロトコルは、UDPであるので、プロトコル情報はUDPを表わす値に設定される。UDPヘッダは、送信元ポート番号(Src Port)と宛先ポート番号(Dst Port)を含む。ここで、生成部31は、検査パケットの宛先の通信装置20の検査部30で処理されるようにするために、宛先ポート番号を、検査用ポート番号に設定する。送信元ポート番号については、生成部31が生成した値か、検査指示に含まれている値が使用される。
UDPペイロードは、IDフィールドとタイプフィールドを含む。IDフィールドには、送信元と宛先の組合せが同じ検査パケットの間での、各検査パケットの識別に使用するIDが格納される。タイプフィールドには、パケットが検査パケットと応答パケットのいずれであるかを示す情報が格納される。パケットが検査パケットである場合はタイプフィールドの値はRequestとなり、パケットが応答パケットである場合はタイプフィールドの値はResponseとなる。
生成部31は、検査パケットを生成すると、検査パケットの情報を、検査パケットテーブル36の検査パケット情報として記録する。
検査パケットテーブル36は、検査パケット情報、応答パケット情報、タイマフィールドを含む。検査パケット情報は、通信装置20自身が送信した検査パケットの情報であり、宛先IPアドレスフィールド、送信元ポート番号フィールド、IDフィールドを含む。宛先IPアドレスフィールドには、検査パケットの宛先のIPアドレスが格納され、送信元ポート番号フィールドには検査パケットの送信元ポート番号が格納される。IDフィールドには、検査パケットのIDが格納される。
応答パケット情報は、エントリ中の情報から特定される検査パケットに対する応答パケットの受信状況の特定に使用する情報であり、応答数フィールド、応答リストフィールド、受信応答数フィールド、受信リストフィールドを含む。応答数フィールドには、通信装置20が受信した応答パケットが応答している検査パケットと同じ検査パケットに対して送信された応答パケットの総数の情報が格納される。応答リストフィールドには、通信装置20が受信した応答パケットが応答している検査パケットと同じ検査パケットに対して送信された複数の応答パケットについて、各々の応答パケットに含まれている送信元ポート番号を記録したリストが格納される。受信応答数フィールドには、通信装置20が受信した応答パケットの数が記録される。受信リストフィールドには、エントリから特定される検査パケットの応答として通信装置20が受信した応答パケット中の送信元ポート番号のリストが格納される。タイマフィールドは、検査パケットを送信してから応答パケットを受け付ける時間であり、タイマフィールドの値が0になると、そのエントリの検査パケットに対する応答の受信を終了する。
図6は、検査パケットの送信処理の例を説明するフローチャートである。図6において、SeqIDは、検査パケットのIDとして使用する値を表わす変数であり、通信装置20の初期化の際には、SeqID=0に設定されている。生成部31は、検査指示の入力があるまで待機する(ステップS1)。生成部31は、検査指示の入力を検出すると、検査指示に含まれている宛先IPアドレス(IPx)とARPテーブルから、宛先となる通信装置20のMACアドレス(MACx)を特定する(ステップS1でYes、ステップS2)。生成部31は、検査指示に送信元ポート番号の指定が含まれているかを判定する(ステップS3)。検査指示に送信元ポート番号の指定が含まれていない場合、生成部31は、送信元ポート番号(SPx)を生成する(ステップS3でNo、ステップS4)。ステップS4において、生成部31は、乱数などを用いて、送信元ポート番号の値がランダムになるように生成する。検査指示に送信元ポート番号が含まれている場合(ステップS3でYes)か、生成部31が送信元ポート番号を生成すると(ステップS4)、生成部31は、検査パケットを生成する(ステップS5)。
検査パケットでは、宛先MACアドレスはステップS2で求められた宛先の通信装置20のMACアドレス(MACx)に設定され、宛先IPアドレスは生成指示で指定されたIPアドレス(IPx)に設定される。検査パケットの送信元MACアドレスとIPアドレスは、検査パケットの送信元の通信装置20に割り当てられた値が設定され、プロトコルはUDPが指定される。検査パケット中の送信元ポート番号は、生成指示で指定された指定値か、ステップS4で生成された送信元ポート番号SPxが設定される。宛先ポート番号は検査用ポート番号に設定され、IDはSeqIDの値に設定される。さらに、検査パケット中のタイプフィールドには、Requestが設定される。生成部31は、検査パケットを生成すると、検査パケットテーブル36中に検査パケットの情報を記録する(ステップS6)。
図5に示す検査パケットテーブル36−1では、宛先IPアドレス、送信元ポート番号、IDの値が検査パケット情報として記録されている。例えば、IPgというIPアドレスが割り当てられた通信装置20gに、送信元ポート番号=12345、ID=1の検査パケットを通信装置20aが送信する場合、検査パケットテーブル36−1の1番目のエントリの情報が記録される。同様に、IPfというIPアドレスが割り当てられた通信装置20fに対して通信装置20aが送信元ポート番号=22334、ID=5の検査パケットを通信装置20aが送信する場合、検査パケットテーブル36−1の2番目のエントリの情報が記録される。
その後、生成部31は、処理対象のエントリのタイマフィールドにタイマ値を設定し、タイマを起動する(ステップS7)。生成部31は、送信部21から検査パケットを宛先に向けて送信する(ステップS8)。その後、生成部31は、変数SeqIDを1つインクリメントして、ステップS1に戻る(ステップS9)。
(2)複数経路への分散処理の例
経路が冗長化されている場合、パケットの転送にいずれの経路を使用するかは、スイッチ10において、ヘッダの中の値を用いて決定される。このため、冗長化されたシステムにおいて通信装置20が検査パケットを送信すると、送信した検査パケットは、複数の経路のいずれかを介して宛先の通信装置20に送信される。以下、図7を参照しながら、転送経路の決定方法を説明する。
図7のパケットP21は転送されるパケットの例である。パケットP21のヘッダ中の情報のうち、宛先MACアドレス、送信元MACアドレス、送信元IPアドレス、宛先IPアドレス、プロトコル、送信元ポート番号、宛先ポート番号が経路決定に使用される。経路決定に使用する情報を、図7のHに示す。複数の経路が経由しているスイッチ10は、経路決定に使用する情報をつなげて得られるビット列から計算されるハッシュ値を、そのスイッチ10を経由している経路数で割ったときに得られる剰余に対応付けて、出力先を記憶している。このため、スイッチ10は、得られた剰余の値に応じて、パケットの転送先を決定する。ネットワーク中のスイッチ10が同様の処理を行うので、パケットの転送経路は、複数の経路に分散される。
以下では、分散処理の例を見やすくするために、図4に示すネットワークよりも通信装置20やスイッチ10の数の小さいネットワークを例として使用する。例えば、通信装置20m、通信装置20n、通信装置20p、通信装置20qの4つの通信装置20が、スイッチ10(SW21〜SW24)を介してケースC1に示すように接続されているとする。この状態で通信装置20mから通信装置20pにパケットを送信する場合、転送経路は、SW21、SW23、SW22を介して通信装置20pに至る経路と、SW21、SW24、SW22を介して通信装置20pに至る経路の2通りがある。通信装置20mからパケットが送信されると、SW21は、パケットP21のHに示す情報のハッシュ値を経路数2で割ったときの剰余を求める。SWは、得られた剰余に応じて、矢印αと矢印βの一方を転送経路として選択する。例えば、矢印αが剰余=0に対応付けられ、矢印βが剰余=1に対応付けられているとする。ここで、パケットP21のヘッダから計算したハッシュ値を用いて得られた剰余が0の場合、パケットP21は、SW21からSW23に転送されるので、SW21、SW23、SW22を介して、通信装置20pに転送される。一方、パケットP21のヘッダから計算したハッシュ値を用いて得られた剰余が1の場合、パケットP21は、SW21からSW24に転送されるので、SW21、SW24、SW22を介して、通信装置20pに転送される。
図8は、検査パケットと応答パケットの転送経路の例を説明する図である。転送経路の決定方法は、検査パケット以外のいずれのパケットでも同様である。例えば、検査パケットの宛先の通信装置20から応答パケットが送信される場合も同様の処理により経路が決定される。
例えば、通信装置20aから送信された検査パケットが、矢印R21に示すように、SW1、SW3、SW9、SW7、SW6を介して、通信装置20gに到達したとする。一方、通信装置20gは、検査パケットに応答する2つの応答パケットであって、互いに送信元ポート番号の異なるパケットを生成して、通信装置20aに向けて送信したとする。この場合も、個々の応答パケットは、図7を参照しながら説明した処理と同様の処理により、経路分散される。例えば、1つの応答パケットは、矢印R22に示すように、SW6、SW8、SW10、SW4、SW1を介して、通信装置20aに到達する経路で転送されたとする。一方、もう1つの応答パケットは、矢印R23に示すように、SW6、SW7、SW9、SW3、SW1を介して、通信装置20aに至る経路で転送され得る。
(3)検査パケットの受信処理と応答パケットの送信処理
図9に示す検査パケットP31は、通信装置20g宛に通信装置20aから送信された検査パケットであるとする。通信装置20gの受信部22gは、検査パケットP31を受信すると、検査パケットP31を分類部23gに出力する。分類部23gは、検査パケットP31中の宛先ポート番号が検査用ポート番号であるので、検査パケットP31を応答部33gと判定部35gに出力する。判定部35gは、検査パケットP31のUDPペイロード中のタイプフィールドの値がRequestであるので、処理対象ではないと判定して処理を終了する。
応答部33gは、検査パケットP31のUDPペイロード中のタイプフィールドの値がRequestであるので、検査パケットP31を用いて、応答パケットを生成するために使用するベースを生成する。
図9は、応答パケットのベースの生成方法の例を説明する図である。応答パケットのベースP32では、宛先MACアドレスとして、検査パケットP31の送信元MACアドレスが使用され、宛先IPアドレスとして、検査パケットP31の送信元IPアドレスが使用される。さらに、応答パケットのベースP32では、送信元MACアドレスとして、検査パケットP31の宛先MACアドレスが使用され、送信元IPアドレスとして、検査パケットP31の宛先IPアドレスが使用される。応答パケットに設定する送信元ポート番号の値は、応答パケットごとに異なる値に設定されるが、ベースP32には適宜、送信元ポート番号が設定される。例えば、ベースP32には、検査パケットの送信元ポート番号が設定され得る。応答パケットのベースP32でも、宛先ポート番号として検査用ポート番号が使用され、UDPペイロード中のIDとして、検査パケットのUDPペイロード中の値が使用される。さらに、応答パケットのベースP32では、タイプフィールドがResponseに設定される。応答部33gは、生成したベースP32を複製部34gに出力する。
図10は、応答パケットの生成方法の例を説明する図である。図10を参照しながら応答パケットP41〜P43が生成される場合に行われる処理の例を説明する。複製部34gは、予め、1つの検査パケットに対して生成する応答パケットの数(応答数)を記憶している。複製部34gは、応答数と同数の送信元ポート番号を決定し、決定した送信元ポート番号を用いて、個々の応答パケットを生成する。さらに、個々の応答パケットのデータに、応答数と、各応答パケットに含まれている送信元ポート番号を含める。複製部34gは、ベースP32中の送信元ポート番号を用いた演算により、送信元ポート番号を決定しても良い。
例えば、図10の例では、複製部34gは、応答パケットP41に使用する送信元ポート番号は、ベースP32中の送信元ポート番号pn1である。複製部34gは、応答パケットP42に使用する送信元ポート番号を、pn1に所定の数を加算して得られるpn2に設定したとする。さらに、複製部34gは、応答パケットP43に使用する送信元ポート番号を、応答パケットP42の送信元ポート番号pn2に所定の数を加算して得られるpn3に設定したとする。複製部34gは、応答パケットP41〜P43のUDPペイロード中に、応答数と各応答パケットP41〜P43の送信元ポート番号のリスト{pn1、pn2、pn3}を含める。複製部34gは、生成した応答パケットP41〜P43の各々を、送信部21gを介して通信装置20a宛に送信する。
なお、いずれの応答パケットにおいても、送信元ポート番号以外の値は、応答パケットのベースP32に設定された値が使用されるので、送信元ポート番号以外の値は応答パケット間で差が無い。このため、パケットP41〜P43のいずれか1つが検査パケットの送信元に到達すると、検査パケットの送信元の通信装置20では、送信された応答パケットの総数や送信された応答パケットの各々でのヘッダ情報を復元できる。
図11は、通信装置20でのパケットの受信処理の例を説明するフローチャートである。通信装置20の受信部22は、パケットを受信するまで待機する(ステップS21でNo)。パケットを受信すると、受信部22は、受信したパケットを分類部23に出力する(ステップS21でYes)。分類部23は、受信したパケットの宛先ポート番号が検査用ポート番号であるかを判定する(ステップS22)。受信したパケットの宛先ポート番号が検査用ポート番号ではない場合、受信したパケットは、検査パケットではなく、応答パケットでもないので、データ処理部24で処理される(ステップS22でNo、ステップS23)。受信パケットの宛先ポート番号が検査用ポート番号である場合、分類部23は、受信パケットを、判定部35と応答部33に出力する(ステップS22でYes)。判定部35と応答部33の各々は、入力されたパケットのタイプフィールドの値がResponseに設定されているかを判定する(ステップS24)。入力されたパケットのタイプフィールドの値がResponseではない場合、応答部33は、検査パケットの受信時の処理を行う(ステップS25)。検査パケットの受信時の処理の一例は、図9、図10を参照しながら説明した処理である。一方、入力されたパケットのタイプフィールドの値がResponseである場合、判定部35は、応答パケットの受信時の処理を行う(ステップS26)。応答パケットの受信時の処理については後述する。ステップS25またはステップS26の処理後、ステップS21以降の処理が繰り返される。
図12は、検査パケットの受信と応答パケットの送信の際の処理の例を説明するフローチャートである。図12は、図11のステップS25の処理の一例である。図12では、応答パケットベースでは送信元ポート番号が0に設定されており、応答パケットベースとは別に、検査パケットの送信元ポート番号が複製部34に通知される場合について説明する。応答部33は、検査パケットを用いて、応答パケットを生成するために使用する応答パケットベースを生成する(ステップS31)。応答パケットベースでは、宛先MACアドレスとして、検査パケットの送信元MACアドレスが使用され、宛先IPアドレスとして、検査パケットの送信元IPアドレスが使用される。送信元MACアドレスには自ノードのMACアドレスが設定され、送信元IPアドレスには自ノードに割り当てられたIPアドレスが使用される。送信元ポート番号(srcport)は0に設定され、宛先ポート番号は検査用ポート番号に設定される。プロトコルはUDPに設定され、IDは検査パケットのIDに設定される。また、設定タイプはResponseに設定される。さらに、応答パケットの総数(respNum)は0に設定される。
複製部34は、変数nを応答数に設定すると共に、変数pを検査パケットの送信元ポート番号に設定した上で、送信ポート番号リスト(SL)を初期化する(ステップS32)。なお、送信ポート番号リストは、応答パケットの生成に使用する送信元ポート番号のリストである。複製部34は、変数nが0であるかを判定する(ステップS33)。変数nが0でない場合、複製部34は、送信ポート番号リストに変数pを追加する(ステップS33でNo、ステップS34)。複製部34は、変数pを1つインクリメントし、変数nを1つデクリメントした後に、ステップS33に戻る(ステップS35)。複製部34は、変数nが0である場合、応答数分の送信元ポート番号を生成したと判定する(ステップS33でYes)。そこで、複製部34は、応答パケットのベースを用いて、応答数と送信ポート番号リストを設定したUDPペイロードを生成する(ステップS36)。
ステップS37において、複製部34は、送信ポート番号リスト(SL)に対するポップ処理により、得られた値を、変数pnに設定する。さらに、複製部34は、応答パケットベースとUDPペイロードを合わせて生成した応答パケットの送信元ポート番号に、変数pnを設定し、設定処理後の応答パケットを送信する(ステップS37)。複製部34は、送信ポート番号リストにデータが含まれているかを判定する(ステップS38)。送信ポート番号リストにデータが含まれている場合、ステップS37以降の処理が繰り返される(ステップS38でNo)。一方、送信ポート番号リストにデータが含まれていない場合、複製部34は、応答パケットの送信が終了したと判定して、処理を終了する(ステップS38でYes)。
(4)応答パケットの受信
通信装置20gから応答パケットP41〜P43が通信装置20a宛に送信された後に、通信装置20aが応答パケットを受信した場合を例として、応答パケットを受信した通信装置20の処理の例を説明する。通信装置20aにおいて、分類部23aは受信部22aを介して受信パケットを取得する。分類部23aは、受信したパケットに検査用ポート番号が使用されていることから、受信したパケットを、応答部33aと判定部35aに出力する。
応答部33aは、応答パケットのタイプ値がResponseであることから、入力されたパケットの処理を行わないことを決定する。一方、判定部35aは、応答パケットのタイプ値がResponseであることから、応答パケットを処理対象と認識する。
図13は、応答パケットの受信処理の例を説明するフローチャートである。図13は、図11のステップS26の処理の一例である。図13を参照しながら、判定部35aでの処理の例を説明する。判定部35aは、受信した応答パケットの送信元IPアドレスとIDを用いて、検査パケットテーブル36から処理対象のエントリを特定する(ステップS41)。例えば、通信装置20aが検査パケットテーブル36−1(図5)を保持していて、通信装置20gからID=1を含む応答パケットを受信したとする。また、通信装置20gのIPアドレスはIPgであるとする。すると、判定部35aは、検査パケットテーブル36−1の1番目のエントリを処理対象として特定する。
判定部35aは、処理対象のエントリで受信応答数=0に設定されているかを判定する(ステップS42)。受信応答数=0のエントリは、これまでに応答パケットを受信していない検査パケットに関するエントリである。そこで、受信応答数=0のエントリが処理対象の場合、判定部35aは、応答数と応答リストを、応答パケット中の値に設定し、受信リストを初期化する(ステップS43)。例えば、判定部35aに入力された応答パケットが応答パケットP41(図10)であるとする。すると、判定部35aは、処理対象のエントリに、応答数=3、応答リスト={pn1,pn2,pn3}を記録する。すなわち、ステップS43の処理では、応答パケットのデータから、受信した応答パケット以外の他の応答パケットの情報を取得している。また、他の応答パケットは、受信した応答パケットと同じ検査パケットに対する応答として送信されたパケットである。
処理対象のエントリでの受信応答数が1以上である場合とステップS43の処理後に、判定部35aは、処理対象のエントリで受信応答数を1つインクリメントし、受信リストに応答パケット中の送信元ポート番号を追加する(ステップS44)。例えば、判定部35aに入力された応答パケットが応答パケットP41(図10)である場合、ステップS43の処理後に、判定部35aは、受信応答数を1に設定し、受信リストに、応答パケットP41の送信元ポート番号pn1を追加する。このため、これらの処理が終わると、検査パケットテーブル36−1の1番目のエントリは、図14に示す検査パケットテーブル36−2の1番目のエントリに示すように変更される。
その後、判定部35aは、受信応答数が応答数と同じになったかを判定する(ステップS45)。受信応答数が応答数と同じになっていない場合、判定部35aは処理を終了する(ステップS45でNo)。この場合、新たにパケットを受信すると、図11〜図13を用いて説明した処理が繰り返される。一方、受信応答数が応答数と同じになった場合、判定部35aは、検査対象の経路に異常が無いことを示す判定(合格判定)を出力し、処理対象のエントリを検査パケットテーブル36から消去する(ステップS45でYes、ステップS46)。
図14に示す検査パケットテーブル36−2の2番目のエントリは、応答パケットの受信によって、受信応答数が応答数と同じになった場合の例である。すると、判定部35aは、IPfというIPアドレスが割り当てられている通信装置20fから通信装置20aに送信された応答パケットの全てが通信装置20aに到達したと判定する。このため、判定部35aは、通信装置20fと通信装置20aの間の通信経路には、物理ネットワーク上では、障害が発生していないと判定する。判定部35aは、判定結果を通信装置20aが保持する表示装置に出力する。なお、判定部35aは、判定結果を送信部21a経由で、オペレータが操作している端末に送信しても良い。このため、オペレータは、通信装置20fと通信装置20aの間の通信に対して、物理ネットワークの障害は発生していないと判定されたことを認識できる。従って、オペレータは、通信装置20f上で動作する仮想マシンと通信装置20a上で動作する仮想マシンの間の通信に障害が発生している場合、仮想ネットワークの障害により、障害が発生していると判定できる。
(5)パケットが消失した経路の問い合わせ
パケットが消失した経路の特定に先立ち、タイマ処理の例を説明する。タイマ処理は、検査パケットに対する全ての応答パケットの受信を完了していない、検査パケットテーブルの全てのエントリに対して実行される。
図15は、タイマ処理の例を説明するフローチャートである。図15では、変数EとIを用いる。変数Eは処理対象のエントリの特定に使用し、変数Iは処理済のエントリ数の計数に使用する。判定部35は、ハードウェアタイマを監視しており、ハードウェアタイマのタイムアウトを待ち合わせる(ステップS51)。判定部35は、検査パケットテーブル36の先頭のエントリE0を取得した上で、EにE0を代入し、変数Iを0に設定する(ステップS52)。判定部35は、エントリEのタイマを1つデクリメントする(ステップS53)。なお、エントリEのタイマは、エントリE中のタイマフィールドの値である。判定部35は、エントリEのタイマが0になっているかを判定する(ステップS54)。エントリEのタイマが0になっていない場合、判定部35は、検査パケットテーブル36から、Eの次のエントリEnを取得し、EにEnを代入する。さらに、判定部35は、変数Iを1つインクリメントする(ステップS54でNo、ステップS55)。判定部35は、変数Iが有効エントリ数未満であるかを判定する(ステップS58)。変数Iが有効エントリ数未満の場合、ステップS53以降の処理が繰り返される(ステップS58でYes)。一方、変数Iが有効エントリ数以上の場合、ステップS51以降の処理が繰り返される(ステップS58でNo)。
エントリEのタイマが0になっている場合、判定部35は、エントリEの宛先までの経路のうち、障害の発生している経路を、管理装置80に問い合わせる(ステップS54でYes、ステップS56)。ステップS56で行われる処理の詳細については後述する。その後、判定部35は、Eの次のエントリEnを取得し、エントリEを消去する。さらに、判定部35は、EにEnを代入し、変数Iを1つインクリメントする(ステップS57)。その後、ステップS58以降の処理が行われる。
図16は、応答パケットの消失例を説明する図である。図16を参照しながら、図15のステップS56の処理の例を説明する。例えば、通信装置20gから通信装置20aに向けて送信されたパケットP41〜P43のうち、パケットP42が転送経路で消失したとする。すると、判定部35aは、検査パケットテーブル36−2の1番目のエントリのタイマ値が0になった時点でも、送信ポート番号=pn2の応答パケットを受信していないと判定する。すると、判定部35aは、受信済みの応答パケットの情報と、受信に失敗した応答パケット中の送信元ポート番号の値pn2を用いて、受信に失敗した応答パケットのヘッダ情報を生成する。判定部35aは、生成したヘッダ情報で特定される経路で障害が発生していると判定して、生成したヘッダ情報を問い合わせリストに含める。
パケットP44は、経路の解析を管理装置80に要求する際に判定部35が使用するパケット(解析要求パケット)である。パケットP44は、IPヘッダ、TCP(Transmission Control Protocol)ヘッダ、問い合わせリスト、問い合わせタイプを含む。問い合わせリストは、通信装置20が受信していない応答パケットのヘッダ情報のリストである。なお、問い合わせリスト中に含まれるヘッダの数は任意である。問い合わせタイプは、応答パケットの受信に失敗したことに起因した問い合わせであるか、応答パケットの受信状況とは関係なく行われた問い合わせであるかを判定する値である。パケットが消失した経路の問い合わせの際には、問い合わせタイプ=パケットロス発生経路に設定される。なお、応答パケットの受信状況とは関係なく行われた問い合わせの場合、問い合わせタイプ=問い合わせに設定される。
図16を参照しながら、検査パケットの送信元が応答パケットの一部を受信していない場合を例として説明したが、検査パケットの送信元が検査パケットの送信から所定の時間が経過しても応答パケットを1つも受信しない可能性もある。このような場合は、検査パケットが宛先に到達していない可能性が高いので、判定部35は、検査パケットのヘッダ情報で特定される経路で障害が発生していると判定する。なお、検査パケットのヘッダの情報は、検査パケットテーブル36に記録されている情報から再現できる。このため、判定部35は、検査パケットは、検査パケットのヘッダ情報を問い合わせリストに含めた上で、管理装置80に経路を問い合わせる。
図17は、経路の問い合わせ処理の例を説明するフローチャートである。図17は、図15のステップS56の処理を詳細に示したものである。判定部35は、問い合わせリスト(QL)を初期化する(ステップS61)。判定部35は、検査パケットテーブル36中でタイマが0になったエントリを処理対象とする。検査パケットテーブル36中の処理対象のエントリの宛先IPアドレスを用いて、ARPテーブルから検査パケットの宛先MACアドレス(MAC1)を取得する(ステップS62)。判定部35は、エントリ中の受信応答数が0であるかを判定する(ステップS63)。
エントリ中の受信応答数が0である場合、検査パケットの宛先の通信装置20から1つも応答パケットを受信していないので、判定部35は、検査パケットの転送経路に障害があると判定する(ステップS63でYes)。そこで、判定部35は、問い合わせの対象のヘッダ情報Hを、検査パケット中のヘッダとする(ステップS64)。すなわち、判定部35は、ヘッダ情報Hにおいて、送信元MACアドレスと送信元IPアドレスを自装置のアドレスとし、宛先IPアドレスを処理対象のエントリ中の宛先IPアドレスとする。判定部35は、ステップS62で求めたMAC1を、ヘッダ情報Hでの宛先MACアドレスに設定する。さらに、判定部35は、ヘッダ情報Hにおいて、送信元ポート番号を処理対象のエントリに含まれている送信元ポート番号とし、宛先ポート番号を検査用ポート番号に設定する。その後、判定部35は、問い合わせリストQLに、生成したヘッダ情報Hを追加し、問い合わせリストQLを用いて経路問い合わせを実施する(ステップS65、S70)。このとき、判定部35は、問い合わせリストを含む解析要求パケットを生成して、送信部21を介して、管理装置80に向けて送信する。
エントリ中の受信応答数が0ではない場合、検査パケットの宛先の通信装置20から送信された応答パケットの一部を受信しているので、判定部35は、受信に失敗した応答パケットの転送経路に障害があると判定する(ステップS63でNo)。受信に失敗した応答パケットのヘッダに含まれている送信元ポート番号は、処理対象のエントリの応答リストに含まれているが、受信リストには含まれていない。そこで、判定部35は、処理対象のエントリの応答リストと受信リストの差分(Sd)を生成する(ステップS66)。例えば、図16のケースでは、通信装置20gから送信された応答パケットのうちP41とP43が通信装置20aで受信されている。このため、応答リストは{pn1,pn2,pn3}であるのに対し、受信リストは{pn1,pn3}である。従って、Sd=pn2となる。なお、1つ以上の応答パケットの受信に失敗した場合、Sdには複数の送信元ポート番号が含まれる。
次に、判定部35は、受信に失敗した応答パケットのヘッダ情報の生成に使用するテンプレートを生成する。すなわち、判定部35は、テンプレートにおいて、宛先MACアドレスと宛先IPアドレスを自装置のアドレスとし、送信元IPアドレスを処理対象のエントリ中の宛先IPアドレスとする。判定部35は、ステップS62で求めたMAC1を、テンプレートでの送信元MACアドレスに設定する。さらに、判定部35は、テンプレートでは、送信元ポート番号を0とし、宛先ポート番号を検査用ポート番号に設定する(ステップS67)。その後、判定部35は、差分Sd中の未処理の送信ポート番号の1つをテンプレートに含め、得られたヘッダ情報を、問い合わせリストQLに追加する(ステップS68)。判定部35は、差分Sdの中で未処理のポート番号が無いかを判定する(ステップS69)。差分Sdの中で未処理のポート番号がある場合、判定部35は、ステップS68に戻る(ステップS69でNo)。差分Sdの中で未処理のポート番号がない場合、判定部35は、問い合わせリストQLを用いて経路問い合わせを実施する(ステップS69でYes、S70)。この場合の経路の問い合わせも、解析要求パケット(図16のP44)を用いて行われても良い。
(6)管理装置80での処理の例
管理装置80は、解析要求パケットを受信すると、解析要求パケットで通知された問い合わせ対象のヘッダ情報と同じヘッダを有するパケットの転送経路を特定する。なお、管理装置80は、予め、ネットワークのトポロジ情報と、各スイッチ10での経路の選択処理のアルゴリズムを保持しており、特定したヘッダ情報とアルゴリズムを用いて、転送経路を特定する。例えば、管理装置80は、経路中に含まれているスイッチ10の各々について、パケットが経由する順に、スイッチ10の識別情報、スイッチ10へのパケットの入力ポートおよび出力ポートを並べた情報を、経路情報として生成できる。管理装置80は、得られた経路情報を、解析要求パケットの送信元に送信する。
図18は、経路の問い合わせを受信した管理装置80での処理の例を説明するフローチャートである。管理装置80は、解析処理を行う対象となるヘッダ情報のリスト(解析対象リスト)を保持しているとする。さらに、管理装置80は、解析結果を経路情報として保持できるとする。
管理装置80は、解析要求パケットを受信したかを判定する(ステップS81)。管理装置80は、解析要求パケットから問い合わせリストを抽出すると、解析対象リストに問い合わせリストを代入し、経路情報RLを初期化する(ステップS82)。管理装置80は、解析対象リストに未処理のヘッダ情報があるかを判定する(ステップS83)。解析対象リストに未処理のヘッダ情報がある場合、管理装置80は、処理対象のヘッダ情報を解析対象リストから選択する(ステップS83でYes、ステップS84)。管理装置80は、選択したヘッダ情報を用いて、経路特定処理を行う(ステップS85)。その後、処理対象のヘッダ情報と得られた経路の組み合わせを経路情報RLに追加し、ステップS83に戻る(ステップS86)。解析対象リストに未処理のヘッダ情報が無い場合、管理装置80は、経路情報RLを、解析要求パケットの送信元に送信し、ステップS81に戻る(ステップS83でNo、ステップS87)。
図19は、管理装置80での経路の特定処理の例を説明するフローチャートである。図19は、図18のステップS85の処理の例である。図19の処理によって生成される経路情報は、問い合わせ対象のヘッダを有するパケットの送信元ノードから受信ノードに至る経路を以下の形式で表わす文字列であるとする。{送信元ノードのID,(スイッチ10のID,スイッチ10の入力ポート,スイッチ10の出力ポート),・・・・,宛先ノードのID}。
管理装置80は、処理対象のヘッダ情報Hを選択するまで経路特定処理は行わない(ステップS91でNo)。管理装置80は、処理対象のヘッダ情報Hを選択すると、トポロジ情報とヘッダ情報H中の送信元アドレスを用いて、パケットの送信元ノードを特定し、経路情報に送信元ノードの情報を追加する(ステップS91でYes、ステップS92)。なお、ステップS92において、送信元アドレスとして、送信元MACアドレスと送信元IPアドレスの1つ以上が使用され得る。次に、管理装置80は、トポロジ情報とヘッダ情報H中の宛先アドレスを用いて、パケットの宛先ノードを特定する(ステップS93)。なお、ステップS93においても、宛先アドレスとして、宛先MACアドレスと宛先IPアドレスの1つ以上が使用され得る。管理装置80は、トポロジ情報を用いて、送信元ノードが直接接続されるスイッチ10のIDと、そのスイッチへのパケットの入力ポート番号Pinと取得する(ステップS94)。管理装置80は、特定したスイッチの出力ポートグループ情報を特定する(ステップS95)。ここで、ポートグループ情報は、特定したスイッチ10において、処理対象のヘッダを有するパケットがPinから入力された場合の出力先となり得るポート番号の組み合わせである。管理装置80は、特定したスイッチ10の分散アルゴリズムから出力ポートPoutを特定する(ステップS96)。ステップS96において、式(1)が使用されうる。
Poutに対応する剰余=F(h,M)・・・(1)
式(1)において、hはヘッダ情報Hのハッシュ値である。Fは剰余算を表わし、hは剰余算での被除数となる。Mはポートグループ情報中に含まれるポート数であり、剰余算での除数として用いられる。管理装置80は、各スイッチ10において、剰余算によって得られる値と、出力ポートとして使用するポートの関係も、予め、アルゴリズムの一部として保持しているとする。
管理装置80は、経路情報に、特定したスイッチ10の識別子(Sw)、パケットの入力ポート(Pin)、パケットの出力ポート(Pout)を、組み合わせて追加する(ステップS97)。管理装置80は、トポロジ情報を用いて、出力先の装置を特定する(ステップS98)。管理装置80は、出力先の装置が宛先ノードであるかを判定する(ステップS99)。出力先の装置が宛先ノードではない場合、特定した出力先の装置はスイッチ10である(ステップS99でNo)。そこで、管理装置80は、特定したスイッチへの、ヘッダ情報Hのヘッダを有するパケットの入力ポートPinを特定すると、ステップS95以降の処理を繰り返す。(ステップS100)。
一方、出力先の装置が宛先ノードである場合、経路の終点まで検索したことになる(ステップS99でYes)。そこで、管理装置80は、経路情報に、宛先ノードのIDを追加する(ステップS101)。
例えば、通信装置20aで受信に失敗した応答パケットP42(図16)が、図8の矢印R22に示すように、SW6、SW8、SW10、SW4、SW1を介して、通信装置20aに至る経路で転送されていたとする。管理装置80は、応答パケットP42の転送経路が問合わせられると、矢印R22の経路中の各スイッチの識別子、入力ポート、出力ポートの組み合わせを経路として通信装置20aに通知する。例えば、管理装置80で生成される経路情報は、ポート番号を「Po」という文字列にポート番号を続けて記載すると、以下のように表わせる。
{通信装置20g,(SW6,Po2,Po4),(SW8,Po2,Po3),(SW10,Po2,Po1),(SW4,Po3,Po1),(SW1,Po4,Po1),通信装置20a}
以上説明したように、第1の実施形態によると、検査パケットを受信した通信装置20は、検査パケットに応答する複数の応答パケットを生成し、各応答パケットに他の応答パケットのヘッダ情報を含める。このため、検査パケットの送信元の通信装置20は、複数の応答パケットのうちの1つでも受信すると、受信していない応答パケットのヘッダを特定できる。さらに、受信していない応答パケットのヘッダの情報を用いて、障害の発生した経路を特定できる。また、検査パケットの送信元の通信装置20は、いずれの応答パケットも受信しない場合、送信した検査パケットの転送経路に障害が発生したと判定できる。従って、経路が冗長化された状態で障害の発生している経路の特定が容易になる。
さらに、検査パケットを受信した通信装置20が、検査パケットの宛先から全ての応答パケットを受信できた場合、物理ネットワークに対する障害が発見されていない。この場合、検査パケットの送信元の通信装置20上で動作する仮想マシンと、応答パケットの送信元の端末装置20上で動作する仮想マシンの間の通信障害は、仮想ネットワークでの問題に起因すると判定できる。
このように、第1の実施形態を用いると、物理ネットワーク上に仮想ネットワークが生成されているシステムでの障害が、物理ネットワークと仮想ネットワークのいずれの障害に起因しているかの切り分けも容易になる。このため、障害からの復旧が容易になる。
<第2の実施形態>
第1の実施形態では、通信装置20において、異なるヘッダを有する複数の応答パケットを送信するが、応答パケットのうちの一部が同じ経路を通る場合もあり得る。そこで、第2の実施形態では、複数の応答パケットを送信する通信装置が、経路の分散状況を学習する場合について説明する。
図20は、第2の実施形態にかかる通信装置50の構成の例を説明する図である。通信装置50は、送信部21、受信部22、分類部23、データ処理部24、検査部51を備える。検査部51は、生成部31、記憶部32、応答部33、複製部54、判定部35、学習部52を有する。記憶部32は検査パケットテーブル36を格納し、学習部52は学習テーブル53を有する。
学習部52は、応答パケットの各々について、使用される転送経路を管理装置80に問い合わせる。学習部52は、管理装置80から得られた経路の情報を用いて、複数の応答パケット間で同じ経路を経由しているものがあるかを判定する。複数の応答パケットの転送経路の分散や重複の状態を特定し、分散した経路に送信される応答パケットのヘッダ情報を学習テーブル53に記録する。複製部54は、学習テーブル53中に記録されたヘッダ情報を用いて、複数の応答パケットを生成する。
送信部21、受信部22、分類部23、データ処理部24、生成部31、記憶部32、応答部33、判定部35での処理と、検査パケットテーブル36は、第2の実施形態でも第1の実施形態と同様である。
通信装置50のハードウェア構成も図3に示すとおりである。通信装置50を実現するプロセッサは、分類部23、データ処理部24、生成部31、応答部33、判定部35、学習部52、複製部54として動作する。なお、学習テーブル53は、適宜、メモリ102に格納される。
図21は、応答パケットの生成方法の例を説明する図である。図21では、通信装置50a〜50fがスイッチ10(SW31〜SW36)を介してケースC11に示すように接続されているとする。さらに、図21では、図を見やすくするために記載していないが、管理装置80は、ネットワーク中の各通信装置50およびスイッチ10と制御用の回線で接続されているとする。
ケースC11に示すネットワークで通信装置50aから通信装置50fに検査パケットが送信され、第1の実施形態と同様の処理により、通信装置50fに検査パケットが到達したとする。通信装置50f中の応答部33fは、第1の実施形態と同様に応答パケットのベースを生成する。通信装置20fが通信装置50aから初めて検査パケットを受信した場合、複製部54fは第1の実施形態と同様の処理により、複数の応答パケットを生成する。例えば、複製数が4である場合、複製部54fは、4つの応答パケットを生成する。生成された応答パケットの各々では、送信元ポート番号の値が互いに異なっている。図21の例では、生成された応答パケット中の送信元ポート番号として、sp31、sp32、sp33、sp34のいずれかが使用されているとする。複製部54fは、生成した4つの応答パケットを、送信部21fを介して送信する。
その後、複製部54fは、生成した4つの応答パケットの各々のヘッダ情報を含む解析要求パケットを生成する。この場合にはパケットロスが発生していないので、複製部54fは、解析要求パケットの問い合わせタイプを「問い合わせ」に設定する。複製部54fは、解析要求パケットを、送信部21f経由で管理装置80に送信する。
管理装置80での解析処理と解析結果の通知処理は、第1の実施形態で説明した処理と同様である。ただし、第2の実施形態では、経路を通知する通知パケットの宛先ポート番号には、検査用ポート番号が指定されているとする。管理装置80での解析の結果、ケースC11に示すとおりに応答パケットが転送されていることが特定されたとする。ここで、経路R31は、送信元ポート番号=sp31の応答パケットが転送された経路である。経路R32は送信元ポート番号=sp32に設定された応答パケットの転送経路であり、経路R33は送信元ポート番号=sp33に設定された応答パケットの転送経路である。さらに、経路R34は、送信元ポート番号=sp34の応答パケットが転送された経路である。
管理装置80から経路の通知が通信装置50fに送信されたとする。分類部23fは、受信部22fを介して通知パケットを取得し、宛先ポート番号に従って、通知パケットを、応答部33f、判定部35f、学習部52fに出力する。応答部33fと判定部35fは、通知パケットを処理対象としない。
学習部52fは、通知パケットを取得すると、通知パケットで通知された経路とヘッダ情報の組み合わせを用いて、各応答パケットに対する転送経路を特定する。学習部52fは、ケースC11に示すように、送信元ポート番号=sp31の応答パケットと送信元ポート番号=sp32の応答パケットが、いずれも、通信装置50fからSW33、SW34、SW31を介して通信装置50aに到達すると判定する。さらに、学習部52fは、送信元ポート番号=sp33の応答パケットと送信元ポート番号=sp34の応答パケットが、いずれも、通信装置50fからSW33、SW36、SW31を介して通信装置50aに到達すると判定する。学習部52fは、以後に通信装置50aから検査パケットを受信したときに、複数の応答パケットを、なるべく異なる経路を介して転送するために、経路が重複しない送信元ポート番号を転送経路と共に、学習テーブル53fに記録する。
学習テーブル53−1は、ケースC11に示す経路が得られた場合に生成される学習テーブル53fの例である。学習テーブル53−1は、エントリごとに、宛先、分散リスト、経路リスト、next値を含む。宛先は、応答パケットの宛先である。ケースC11では、通信装置50a宛に応答パケットが送信されているので、宛先は通信装置50aのIPアドレス(IP50a)に設定される。分散リストは、応答パケットの経路が互いに重複しないように選択した送信元ポート番号のリストである。ケースC11では、送信元ポート番号=sp31の応答パケットと送信元ポート番号=sp32の応答パケットの転送経路が重複しているので、sp31とsp32の一方が、分散リストに含められる。さらに、送信元ポート番号=sp33の応答パケットと送信元ポート番号=sp34の応答パケットの転送経路が重複しているので、sp33とsp34の一方が、分散リストに含められる。学習テーブル53−1の例では、分散リストには、sp31とsp33が記録されている。
経路リストは、分散リスト中の各送信元ポート番号を用いたときに使用される転送経路のリストである。学習テーブル53−1の例では、分散リストにsp31とsp33が記録されているので、経路リストには、R31とR33が記録される。next値は、複製部54がこれまでに使用していない送信元ポート番号を用いて応答パケットを生成する場合に、最初に使用する値である。ケースC11に示すように転送処理が行われた際には、sp31〜sp34が送信元ポート番号として使用されている。そこで、学習部52fは、sp35をnext値に設定する。
次に、図21の処理の後に、再度、通信装置50fが通信装置50aから検査パケットを受信した場合について説明する。この場合も、応答パケットを生成する際の応答パケットのベースの生成は、応答部33fによって、第1の実施形態と同様に行われる。
複製部54fは、分散リスト中の送信元ポート番号を用いて、応答パケットを生成する。学習テーブル53−1を使用した場合、複製部54fは、送信元ポート番号=sp31の応答パケットと、送信元ポート番号=sp33の応答パケットを生成する。この段階で、学習テーブル53−1中の送信元ポート番号を使用した応答パケットの生成は終わっているが、応答パケットの総数は2つであり、応答数である4に届いていない。このように、分散リスト中の送信元ポート番号の全てを用いて応答パケットを生成しても、応答数の応答パケットを生成していない場合、複製部54fは、next値を新たなポート番号として、応答パケットを生成する。学習テーブル53−1では、next値=sp35である。そこで、複製部54fは、送信元ポート番号=sp35の応答パケットと、送信元ポート番号=sp36の応答パケットを生成する。複製部54fは、生成した4つの応答パケットを、送信部21f経由で送信する。その後、複製部54fは、生成した4つの応答パケットのうち、新規に生成された2つの応答パケットの各々のヘッダ情報を用いて、管理装置80に転送経路を問い合わせる。
図22のケースC12は、学習テーブル53−1を用いて生成された応答パケットの転送経路の例を説明する図である。経路R31は、送信元ポート番号=sp31の応答パケットが転送された経路であり、経路R33は送信元ポート番号=sp33に設定された応答パケットの転送経路である。経路R35は、送信元ポート番号=sp35の応答パケットが転送された経路である。さらに、経路R36は、送信元ポート番号=sp36の応答パケットが転送された経路である。学習部52fは、問合わせた経路情報を含む通知パケットを管理装置80から取得すると、図21を参照しながら説明した処理と同様の処理により、各応答パケットに対する転送経路を特定するとともに、学習テーブル53を更新する。例えば、送信元ポート番号=sp35の応答パケットの転送経路はいずれの応答パケットとも重複していないので、学習部52fは、送信元ポート番号=sp35を分散リストに含め、経路R35を経路リストに追加する。一方、送信元ポート番号=sp36の応答パケットと送信元ポート番号=sp31の応答パケットの転送経路が重複しており、送信元ポート番号=sp31の情報が学習テーブル53に記録さている。このため、学習部52fは、送信元ポート番号=sp36の応答パケットの転送経路や送信元ポート番号を学習テーブル53に追加しない。さらに、学習部52fは、通信装置50a宛の応答パケットに使用可能な送信元ポート番号のnext値を、sp37に更新する。このように、学習部52fの処理により、学習テーブル53−1(図21)は、学習テーブル53−2(図22)に示すように更新される。
なお、図21と図22を参照しながら説明した処理では、応答パケットを送信する通信装置50から応答数分の応答パケットが送信されているが、第2の実施形態では、応答数の他に、最小応答数が設定されていても良い。最小応答数は、異なる経路を通って送信できることが確認されている応答パケットだけを用いて応答する際に適用可能な応答パケットの送信数であり、応答数よりも小さな値である。このため、分散リスト中の送信元ポート番号の数が最小応答数を超えている場合は、分散リスト中の送信元ポート番号を用いて、最小応答数と同数の応答パケットが生成される。異なる経路を通って送信できることが確認されている応答パケットを最小応答数と同数だけ送信しない場合には、重複した経路での応答パケットの送信が行われている可能性があるため、応答数分の応答パケットが送信される。
図23は、応答パケットの生成方法の例を説明するフローチャートである。図23は、応答数の他に、最小応答数(RNmin)が設定されている場合に行われる処理の例を示す。
複製部54は、送信元ポートリストと問い合わせリストを初期化する(ステップS111)。複製部54は、学習テーブル53に、応答パケットの宛先に対応するエントリがあるかを判定する(ステップS112)。応答パケットの宛先に対応するエントリが無い場合、複製部54は、変数nを応答数に設定すると共に、変数pを応答パケットベースの送信元ポート番号(SP)に設定する(ステップS113)。複製部54は、変数nが0であるかを判定する(ステップS114)。変数nが0ではない場合、応答数分の応答パケットの生成に使用する送信元ポート番号の決定が終わっていない(ステップS114でNo)。そこで、複製部54は、送信元ポート番号を、変数pに設定したヘッダ情報を、問い合わせリストに追加する(ステップS115)。複製部54は、送信元ポートリストに、変数pを追加する(ステップS116)。複製部54は、変数pを1つインクリメントし、さらに、変数nを1つデクリメントする(ステップS117)。ステップS117の後、ステップS114に戻る。
変数nが0であると判定されると、複製部54は、応答パケットのUDPペイロード中に、生成される応答パケットの数と送信元ポートリストを含める(ステップS125)。複製部54は、応答パケットベースと、ステップS125で設定したUDPペイロードを用いて、送信元ポートリストから選択した値を送信元ポート番号にした応答パケットを送信する(ステップS126)。複製部54は、送信ポート番号リストに未使用のデータが含まれているかを判定する(ステップS127)。送信ポート番号リストに未使用のデータが含まれている場合、複製部54は、ステップS126の処理に戻る(ステップS127でYes)。送信ポート番号リストに未使用のデータが含まれていない場合、複製部54は、問い合わせリストにデータが含まれているかを判定する(ステップS127でNo、ステップS128)。問い合わせリストにデータが含まれていない場合、複製部54は処理を終了する(ステップS128でNo)。問い合わせリストにデータが含まれている場合、複製部54は学習処理を行って、処理を終了する(ステップS128でYes、ステップS129)。
次に、学習テーブル53に応答パケットの宛先に対応するエントリがある場合について説明する(ステップS112でYes)。この場合、複製部54は、変数nを最小応答数(RNmin)に設定すると共に、処理対象のエントリの分散リストを、テンポラリリストに代入する。(ステップS118)。複製部54は、変数nが0であるかを判定する(ステップS119)。
変数nが0ではない場合、最小応答数分の応答パケットの生成に使用する送信元ポート番号の決定が終わっていない(ステップS119でNo)。そこで、複製部54は、テンポラリリストから選択した値を、送信元ポートリストに追加し、変数nを1つデクリメントする(ステップS120)。複製部54は、テンポラリリストに未処理のポート番号があるかを判定する(ステップS121)。テンポラリリストに未処理のポート番号がある場合、複製部54は、ステップS119以降の処理を繰り返す(ステップS121でYes)。一方、テンポラリリストに未処理のポート番号がない場合、複製部54は、変数nが0であるかを判定する(ステップS121でNo、ステップS123)。変数nが0ではない場合、最小応答数分の応答パケットの生成に使用する送信元ポート番号の決定が終わっていない(ステップS123でNo)。しかし、このケースでは、テンポラリリストの全ての値を使用している。すなわち、送信元ポートリスト中の値は、最小応答数よりも小さかったことになる。複製部54は、異なる経路を介して転送されることが確認されている応答パケットのヘッダ情報の数は最小応答数を下回っていることから、応答数分の応答パケットを生成することを決定する。このため、複製部54は、変数nを応答数から、今までに決定された送信元ポート番号の総数(RNmin−n)を差し引いた値に設定するとともに、変数pを、学習テーブル53の処理対象のエントリ中のnext値に設定する(ステップS124)。なお、ステップS124において、変数nに代入される値は、応答数をRNとすると、RN−(RNmin−n)と表記できる。ステップS124の後、複製部54は、ステップS115以降の処理を行う。一方、ステップS119かステップS123において変数nが0であると判定した場合、複製部54は、ステップS125以降の処理を行う。
図24は、経路の分散状況の学習の際に行われる処理の例を説明するフローチャートである。学習部52は、管理装置80への経路問い合わせの結果を取得する(ステップS141)。学習部52は、学習テーブル53から、最後に送信した応答パケットの宛先IPアドレスに対応するエントリの情報を取得する(ステップS142)。学習部52は、取得した結果のうちで未処理のデータがあるかを判定する(ステップS143)。学習部52は、経路問い合わせの結果のうち、処理対象のヘッダと経路の組み合わせを、未処理の組合せから選択する(ステップS144)。学習部52は、ステップS143で取得したエントリの経路リスト中に、選択した経路が含まれているかを判定する(ステップS145)。エントリの経路リスト中に選択した経路が含まれている場合、学習部52は、そのエントリ中の分散リスト中のいずれかの値を用いて生成した応答パケットの転送経路と重複した経路の情報が処理対象になっていると判定する(ステップS145でYes)。このため、学習部52は、選択した経路の情報を学習テーブル53に記録せずに、ステップS143に戻る。
エントリの経路リスト中に選択した経路が含まれていない場合、学習部52は、そのエントリ中の分散リスト中の値を用いて生成した応答パケットの転送経路と重複しない経路の情報を処理対象として選択したと判定する(ステップS145でNo)。そこで、学習部52は、取得したエントリの分散リストに、ステップS144で選択したヘッダ中の送信元ポート番号を追加し、経路リストに選択した経路を追加し、ステップS143に戻る(ステップS146)。
経路問い合わせの結果に含まれているデータの全てについての処理が終わると、学習部52は、学習テーブル53において、処理対象のエントリのnextフィールドの値を更新する(ステップS143でNo、ステップS147)。
このように、第2の実施形態にかかる通信装置50は、通信装置50が送信した応答パケットの転送経路の解析結果を用いて、転送経路が重複しない応答パケットを生成するために使用可能な送信元ポート番号のリストを生成できる。このため、所定の数の応答パケットを、なるべく経路が重複しないように、検査パケットの送信元に送信できるので、物理ネットワーク中の障害の有無を効率的に判定することができる。
<第3の実施形態>
図25は、第3の実施形態で行われる通信の例を説明する図である。第3の実施形態では、検査パケットの送信元が、検査パケットの宛先に到達可能な複数の経路の状況を判定するために、複数の検査パケットを送信する。図25に示すネットワークでは、複数の通信装置60(60a〜60h、60w〜60z)が、スイッチ10(SW1〜SW16)を介して接続されている。このようなネットワークで、通信装置60aが通信装置60zとの間の通信経路の状況を判定するために、複数の検査パケットを送信したとする。図25に示すように、通信装置60aから通信装置60zに宛てた4つの検査パケットが、経路R41、経路R42、経路R43、経路R44の各々を介して、通信装置60zに到達したとする。
このように、複数の検査パケットが送信される場合に、検査パケットを受信した通信装置60xが第1および第2の実施形態と同様の処理を行うと、応答パケットの数が膨大になるおそれがある。そこで、第3の実施形態では、複数の検査パケットに対する応答を1つの応答パケットにまとめる場合について説明する。なお、第3の実施形態でも、応答パケットの消失が送信側の通信装置60aで認識されるように、通信装置60zは、複数の検査パケットに対する応答を含む複数の応答パケットを送信する。
図26は、第3の実施形態にかかる通信装置60の構成の例を説明する図である。通信装置60は、送信部21、受信部22、分類部23、データ処理部24、検査部61を備える。検査部61は、複製部62、記憶部63、判定部66、応答部67を備える他、生成部31、記憶部32、複製部34を有する。記憶部32は、検査パケットテーブル65を格納する。
複製部62は、生成部31で生成された検査パケットを複製すると共に、複製した検査パケット中の送信元ポート番号を変更する。このとき、複製部62は、複数の検査パケットの間で送信元ポート番号を互いに異なるように設定する。記憶部63は、受信状況テーブル64を保持する。受信状況テーブル64は、検査パケットの受信状況を記録している。応答部67は、検査パケットの受信状況を受信状況テーブル64に記録し、応答パケットを送信する条件が整うと、応答パケットのベースを生成する。第3の実施形態では、記憶部32は、検査パケットテーブル36の代わりに検査パケットテーブル65を保持している。検査パケットテーブル65は、検査パケットテーブル36に含まれている情報の他、検査パケットの到達情報も含む。検査パケットテーブル65は、適宜、生成部31、複製部62、判定部66によって更新される。判定部66は、検査パケットの到達状況と応答パケットの受信状況を用いて、応答パケットや検査パケットの転送経路に障害が発生しているかを判定する。
通信装置60のハードウェア構成も図3に示すとおりである。通信装置60を実現するプロセッサは、分類部23、データ処理部24、生成部31、応答部67、判定部66、複製部34、複製部62として動作する。なお、記憶部63は、適宜、メモリ102によって実現される。
以下、第3の実施形態を、検査パケットの送信時の処理、検査パケットを受信した通信装置60での処理、応答パケットの受信時の処理に分けて説明する。
(A)検査パケットの送信時の処理
図27は、第3の実施形態で使用される検査パケットの例を説明する図である。第3の実施形態で使用される検査パケットは、Etherヘッダ、IPヘッダ、UDPヘッダ、UDPペイロードを含む。Etherヘッダ、IPヘッダ、UDPヘッダに含まれる情報要素は、図5を参照しながら説明した検査パケットと同様である。UDPペイロードは、IDフィールド、タイプフィールド、検査数フィールドを含む。検査数は、宛先の通信装置60とIDフィールドの値の組合せが同じ検査パケットの総数である。IDフィールドとタイプフィールドは、図5を参照しながら説明した検査パケットと同様である。
図27に示すパケットP51〜P53は、宛先の通信装置60とIDフィールドの値の組合せが同じ検査パケットの例である。第3の実施形態では、宛先の通信装置60とIDフィールドの値の組合せが同じ複数の検査パケットの各々で、送信元ポート番号が異なるように設定される。例えば、検査パケットP51中の送信元ポート番号はsp1であり、検査パケットP52中の送信元ポート番号はsp2、検査パケットP53中の送信元ポート番号はsp3である。
図28は、検査パケットテーブル65の例を説明する図である。検査パケットテーブル65は、検査パケット情報、応答パケット情報、タイマフィールドを含む。検査パケット情報は、通信装置60自身が送信した検査パケットの情報であり、宛先IPアドレスフィールド、IDフィールド、検査数フィールド、検査リストフィールド、到達検査数フィールド、到達リストフィールドを含む。宛先IPアドレスフィールドには、検査パケットの宛先のIPアドレスが格納され、IDフィールドには、検査パケットのIDが格納される。検査数フィールドには、宛先IPアドレスとID値が同じ検査パケットの総数が記録される。検査リストフィールドには、エントリ中の宛先IPアドレスとID値の組み合わせを有する検査パケットで使用された送信元ポート番号のリストが格納される。
到達検査数は、宛先の通信装置60に所定の期間中に到達した検査パケットの総数であり、到達リストフィールドには、宛先の通信装置60に所定の期間中に到達した検査パケットに含まれている送信元ポートアドレスのリストが格納される。到達検査数と到達リストは、いずれも、応答パケットから取得される情報であり、これらの情報の取得方法については後述する。
応答パケット情報とタイマフィールドは、図5を参照しながら説明した検査パケットテーブル36中の応答パケット情報やタイマフィールドと同様である。
図29は、検査パケットの送信処理の例を説明するフローチャートである。図29において、SeqIDは、検査パケットのIDとして使用する値を表わす変数であり、通信装置60の初期化の際には、SeqID=0に設定されている。
生成部31は、検査指示の入力があるまで待機する(ステップS151でNo)。生成部31は、検査指示の入力を検出すると、検査指示に含まれている宛先IPアドレス(IPα)とARPテーブルから、宛先となる通信装置60のMACアドレス(MACα)を特定する(ステップS151でYes、ステップS152)。
生成部31は、複数の検査パケットの生成に使用される検査パケットベースを生成する(ステップS153)。検査パケットベースでは、宛先MACアドレスはステップS152で求めた宛先の通信装置60のMACアドレス(MACα)に設定され、宛先IPアドレスは生成指示で指定されたIPアドレス(IPα)に設定される。検査パケットの送信元MACアドレスと送信元IPアドレスは、検査パケットの送信元の通信装置20に割り当てられた値が設定され、プロトコルはUDPが指定される。検査パケットベース中の送信元ポート番号は、0などの無効値に設定される。宛先ポート番号は検査用ポート番号に設定され、IDはSeqIDの値に設定される。さらに、検査パケット中のタイプフィールドには、Requestが設定され、検査数と検査リストは初期化されている。
複製部62は、検査パケットベースが生成されると、検査パケットベースを用いて、検査パケットの生成と検査パケットの送信処理を行う(ステップS154)。その後、生成部31は、SeqIDを1つインクリメントして、ステップS151に戻る。
図30は、検査パケットの複製処理の例を説明するフローチャートである。図30は、図29のステップS154の処理の詳細の例である。図30では、送信元ポート番号に使用される値のリストの生成の際に、送信元ポートリストを使用する。送信元ポートリストは、複製部62が保持するリストである。
複製部62は、送信元ポート番号pを生成し、変数nを検査数に設定する。さらに、送信元ポートリストを初期化する(ステップS161)。複製部62は、変数nが0であるかを判定する(ステップS162)。変数nが0ではない場合、複製部62は、送信する検査パケットの数と同数の送信元ポート番号が生成されていないと判定する(ステップS162でNo)。そこで、複製部62は、送信元ポートリストに、生成した送信元ポート番号pを追加する。さらに、pを1つインクリメントし、変数nを1つデクリメントする(ステップS163)。ステップS163の処理の後、ステップS162以降の処理が行われる。
一方、変数nが0である場合、複製部62は、送信する検査パケットの数と同数の送信元ポート番号が生成されたと判定する(ステップS162でYes)。複製部62は、検査パケットベースと送信元ポートリストを用いて、検査パケットテーブル65に、検査パケットの情報を記録する(ステップS164)。ステップS164において、検査パケットテーブル65中の検査リストには、送信元ポートリストの内容が記録される。例えば、通信装置60中の複製部62aが通信装置60z宛の検査パケット用の送信元ポート番号として、sp1、sp2、sp3、sp4を生成したとする。すると、複製部62aは、検査パケットテーブル65aの宛先IPアドレスを通信装置60zのIPアドレス(IP60z)に設定し、検査数を4、検査リストを{sp1,sp2,sp3,sp4}とする。さらに、複製部62aは、IDの値も検査パケットテーブル65aに記録する。このため、通信装置60aから通信装置60zに送信される検査パケットに対する情報が記録されると、図28の1番目のエントリの情報が記録される。
複製部62は、送信元ポートリストから選択した値を送信元ポート番号とした検査パケットを生成すると共に、検査パケットを、送信部21経由で送信する(ステップS165)。複製部62は、送信処理に使用したポート番号を送信元ポートリストから削除する(ステップS166)。複製部62は、未送信のポート番号が送信元ポートリストに含まれているかを判定する(ステップS167)。未送信のポート番号が送信元ポートリストに含まれている場合、複製部62は、ステップS165以降の処理を繰り返す(ステップS167でYes)。未送信のポート番号が送信元ポートリストに含まれていない場合、複製部62は、検査パケットテーブル65のタイマフィールドにタイマ値を設定すると共に、タイマを起動する(ステップS167でNo、ステップS168)。
(B)検査パケットを受信した通信装置60での処理
通信装置60zの受信部22zは、通信装置60aから送信された検査パケットを受信したとする。受信部22zは、受信した検査パケットを分類部23zに出力する。分類部23zは、検査パケット中の宛先ポート番号が検査用ポート番号であるので、検査パケットP31を応答部67zと判定部66zに出力する。応答部67zは、検査パケットの受信状況を、受信状況テーブル64zに記録する。
図31は、受信状況テーブル64の例を説明する図である。受信状況テーブル64は、検査パケットの受信状況の記録に使用される。受信状況テーブル64は、送信元IPアドレスフィールド、IDフィールド、ヘッダ情報フィールド、検査数フィールド、受信検査数フィールド、受信リストフィールド、タイマフィールドを含む。応答部67zは、検査パケットの送信元IPアドレスを送信元IPアドレスフィールドに記録し、検査パケット中のIDをIDフィールドに記録する。応答部67zは、検査パケットのヘッダ情報をヘッダ情報フィールドに記録すると共に、検査パケットのUDPペイロード中の検査数を検査数フィールドに記録する。さらに、応答部67zは、検査パケットが入力されるたびに、入力された検査パケットの送信元IPアドレスとIDの組み合わせを含むエントリ中の受信検査数を1つインクリメントし、入力された検査パケット中の送信元ポート番号を受信リストに追加する。
例えば、通信装置60aから通信装置60zに宛てて送信された4つの検査パケットのうち、送信元ポート番号=sp1とsp2の検査パケットが通信装置60zで受信されたとする。この場合、応答部67zの処理により、図31に示す受信状況テーブル64の1番目のエントリの情報が記録される。なお、通信装置60aに割り当てられたIPアドレスはIP60aであるとする。図31に示すように、受信状況テーブル64では、通信装置60から送信された複数の検査パケットの受信結果が、送信元IPアドレスとIDの組み合わせごとにまとめて管理される。
図32は、検査パケットの受信処理の例を説明するフローチャートである。検査パケットが入力されると、応答部67は、検査パケットの送信元アドレスとIDを用いて、受信状況テーブル64を検索し、検査パケットの送信元アドレスとIDを含む処理対象のエントリが存在するかを判定する(ステップS171、S172)。処理対象のエントリが存在しない場合、応答部67は、受信状況テーブル64に、新たなエントリを生成する(ステップS172でNo、ステップS173)。さらに、応答部67は、生成したエントリの送信元IPフィールド、IDフィールド、検査数フィールドの各々に、検査パケットから得られる情報を記録すると共に、検査パケットのヘッダをヘッダ情報フィールドに格納する。さらに、応答部67は、新たに生成したエントリの受信検査数を0に設定し、受信リストを初期化する。その後、新たに生成したエントリにタイマ値を設定し、タイマを起動する(ステップS174)。
応答部67は、処理対象のエントリで、受信検査数を1つインクリメントし、受信リストに検査パケットの送信元ポート番号を追加する(ステップS175)。応答部67は、受信検査数と検査数が同じであるかを判定する(ステップS176)。受信検査数と検査数が同じではない場合、未受信の検査パケットがあるので、応答部67は処理を終了する(ステップS176でNo)。
一方、受信検査数と検査数が同じになると、応答部67は、処理中の検査パケットの送信元とIDの組み合わせで特定される検査パケットは、全て受信したと判定する(ステップS176でYes)。そこで、応答部67は応答パケットベースを生成し、複製部34は応答パケットの送信処理を行う(ステップS177)。その後、応答部67は、応答パケットの宛先から送信された検査パケットについてのエントリを、受信状況テーブル64から削除する(ステップS178)。
ステップS172において処理対象のエントリが検索された場合も、ステップS175以降の処理が行われる。
図32のステップS176〜S178を参照しながら、検査パケットの送信元とIDの組み合わせが同じ全ての検査パケットを受信した後で応答パケットが送信されることを説明した。しかし、所定期間中に全ての検査パケットを受信しない場合でも、タイムアウトが発生すると応答パケットが送信される。以下、タイムアウト処理について説明する。
図33は、タイマ処理の例を説明するフローチャートである。なお、図33は一例であり、実装に応じて、ステップS182とS183の順序は、互いに変更され得る。ハードウェアタイマのタイムアウトが発生すると、記憶部32でのタイマ処理が行われる(ステップS181、S182)。記憶部32でのタイマ処理により、検査パケットテーブル65でのタイマの値が小さくなる。検査パケットテーブル65は、自装置が検査パケットを送信したときに使用するテーブルである。従って、ステップS182での処理は、図15のステップS52〜S58を参照しながら説明した処理と同様である。次に、記憶部63でのタイマ処理が行われる(ステップS183)。記憶部63でのタイマ処理により、受信状況テーブル64でのタイマの値が小さくなる。受信状況テーブル64は、他の通信装置60から送信された検査パケットを受信したときに使用するテーブルである。ステップS183での処理の詳細を、図34を参照しながら説明する。
図34は、タイマ処理の例を説明するフローチャートである。応答部67は、受信状況テーブル64の先頭のエントリE0を取得した上で、EにE0を代入し、変数Iを0に設定する(ステップS191)。応答部67は、エントリEのタイマを1つデクリメントし、エントリEのタイマが0になっているかを判定する(ステップS192、S193)。
ステップS193において、エントリEのタイマが0になっていない場合、応答部67は、受信状況テーブル64から、Eの次のエントリEnを取得し、EにEnを代入する。さらに、応答部67は、変数Iを1つインクリメントする(ステップS193でNo、ステップS194)。応答部67は、変数Iが有効エントリ数未満かを判定する(ステップS197)。変数Iが有効エントリ数未満である場合、ステップS192以降の処理が繰り返される(ステップS197でYes)。一方、変数Iが有効エントリ数以上の場合、応答部67は処理を終了する(ステップS197でNo)。
ステップS193において、エントリEのタイマが0になっている場合、応答部67と複製部34は、エントリEに含まれている送信元IPアドレスに宛てた応答パケットの送信処理を行う(ステップS195)。ステップS195で行われる処理の詳細については後述する。その後、応答部67は、Eの次のエントリEnを取得し、エントリEを消去する。さらに、応答部67は、EにEnを代入し、変数Iを1つインクリメントする(ステップS196)。その後、ステップS197以降の処理が行われる。
図35は、応答パケットのベースの生成処理の例を説明するフローチャートである。応答部67は、受信状況テーブル64から応答パケットの送信先の情報を含むエントリを読み込む(ステップS201)。応答パケットの送信先の情報を含むエントリは、送信元とIDの組み合わせが同じ全ての検査パケットを受信したことが確認された検査パケットのエントリか、図34のステップS195に示すようにタイムアウトしたエントリである。
応答部67は、読み込んだエントリの情報を用いて、応答パケットベースを生成する(ステップS202)。応答パケットベースでは、宛先MACアドレスとして、読み込んだエントリ中のヘッダ情報に含まれている送信元MACアドレスが使用され、宛先IPアドレスとして、検査パケットの送信元IPアドレスが使用される。送信元MACアドレスには自ノードのMACアドレスが設定され、送信元IPアドレスには自ノードに割り当てられたIPアドレスが使用される。送信元ポート番号は0に設定され、宛先ポート番号は検査用ポート番号に設定される。プロトコルはUDPに設定され、IDは検査パケットのIDに設定される。また、設定タイプはResponseに設定される。さらに、応答パケットの総数は0に設定される。さらに、読み込んだエントリ中の受信検査数と受信リストも応答パケットベースに含められる。生成された応答パケットベースの例を、図36のP61に示す。
図36は、応答パケットベースと、応答パケットの例を説明する図である。P61に示す応答パケットベースは、通信装置60zが通信装置60aから送信された4つの検査パケットを受信できた場合に、応答部67zで生成される応答ベースの例である。P61では受信検査数=4で、受信した検査パケット中の送信元ポート番号は、sp1、sp2、sp3、sp4である。応答部67zは、生成した応答パケットベースを複製部34に出力する。
P61に示すように、応答パケットベースには、複数の検査パケットの受信状況が記録される。このため、応答パケットベースを用いて生成される応答パケットの各々には、応答パケットに含まれている受信状況を示す情報が記録される。換言すると、第3の実施形態で用いられる応答パケットには、複数の検査パケットの受信状況が含まれているので、通信装置60は、複数の検査パケットに対する応答を1つの応答パケットにまとめているといえる。
図36の例では、複製部34zは、3つの応答パケットを通信装置60aに向けて送信することを決定したとする。複製部34zは、応答パケットベースP61のうちの、送信元ポート番号を応答パケットごとに設定すると共に、UDPペイロード中に、各応答パケットでの送信元ポート番号のリストと、応答パケットの総数(応答数)を追加する。複製部34zの処理により、応答パケットP62〜P64が生成される。応答パケットの生成の際の処理の詳細は、図12を参照しながら説明したステップS32〜S38と同様である。複製部34zは、送信部21zを介して、生成した応答パケットP62〜P64を、通信装置60aに向けて送信する。
(C)応答パケットの受信時の処理
通信装置60zから応答パケットP62〜P64が通信装置60a宛に送信された後に、通信装置60aが応答パケットを受信した場合を例として、応答パケットを受信した通信装置60の処理の例を説明する。
図37は、応答パケットの受信処理の例を説明するフローチャートである。分類部23aは、受信部22aが受信した応答パケットを、判定部66aと応答部67aに出力する。判定部66aは、入力された応答パケットの送信元IPアドレスとIDを用いて、検査パケットテーブル36から処理対象のエントリを特定する(ステップS211)。
判定部66aは、処理対象のエントリで受信応答数=0が設定されているかを判定する(ステップS212)。受信応答数=0のエントリは、これまでに応答パケットを受信していない検査パケットに関するエントリである。そこで、受信応答数=0のエントリが処理対象の場合、判定部66aは、処理対象のエントリ中の到達検査数、到達リスト、応答数、応答リストの各々を、応答パケット中の値に設定し、受信リストを初期化する(ステップS213)。例えば、判定部66aに入力された応答パケットが応答パケットP63(図36)であるとする。すると、判定部66aは、処理対象のエントリを以下の情報を含む状態にする。
宛先IPアドレス:IP60z(通信装置60z)
ID :1
検査数 :4
検査リスト :{sp1,sp2,sp3,sp4}
到達検査数 :4
到達リスト :{sp1,sp2,sp3,sp4}
応答数 :3
応答リスト :{pn21,pn22,pn23}
処理対象のエントリでの受信応答数が1以上である場合とステップS213の処理後に、判定部66aは、処理対象のエントリで受信応答数を1つインクリメントし、受信リストに応答パケット中の送信元ポート番号を追加する(ステップS214)。例えば、判定部66aに入力された応答パケットが応答パケットP63(図36)である場合、ステップS213の処理後に、判定部66aは、受信応答数を1に設定し、受信リストに、応答パケットP63の送信元ポート番号pn22を追加する。
その後、判定部66aは、受信応答数が応答数と同じになったかを判定する(ステップS215)。受信応答数が応答数と同じになっていない場合、判定部66aは処理を終了する(ステップS215でNo)。この場合、新たに応答パケットを受信すると、図37の処理が繰り返される。一方、受信応答数が応答数と同じになった場合、判定部66aは、全ての応答パケットを受信したと判定して、検査パケットの到達状況を用いた判定処理を行う(ステップS215でYes、ステップS216)。その後、判定部66aは、処理対象のエントリを検査パケットテーブル65から消去する(ステップS217)
図38は、検査パケットテーブル65の例を説明する図である。検査パケットテーブル65の1つ目のエントリは、通信装置60z宛にID=1を用いて送信した検査パケットの送信元ポート番号のリスト、検査パケットの到達情報、通信装置60zからの応答パケットの受信状況を表わしている。従って、通信装置60aが図38に示す検査パケットテーブル65を有している場合、判定部66aは、通信装置60zに対して送信した全ての検査パケットが通信装置60zに到達したと判定できる。換言すると、判定部66aは、通信装置60zに対して送信した検査パケットの転送経路のいずれにも障害が発生していないと判定できる。さらに、タイマがタイムアップするか、全ての応答パケットを受信すると、判定部66aは、応答パケットの転送経路についての判定処理を行うことができる。
検査パケットテーブル65の2つ目のエントリは、通信装置60w(IP60w)宛にID=5を用いて送信した検査パケットや応答パケットの情報を記録している。通信装置60aは、通信装置60wに対して{sp11,sp12,sp13,sp14}の検査パケットを送信している。しかし、通信装置60wから受信した応答パケットでは、到達検査数=3であり、検査リストは{sp11,sp12,sp14}である。従って、通信装置60aから送信された検査パケットのうち、送信元ポート番号=sp13の検査パケットが通信装置60wに到達していないことになる。
図39は、経路の問い合わせ処理の例を説明するフローチャートである。図39の処理は一例であり、実装に応じて変更され得る。例えば、ステップS223〜S227による検査パケットの到達状況を用いた判定の前に、ステップS228〜S232に示す応答パケットの受信状況を用いた判定が行われても良い。図39の判定処理は、図37のステップS216か、検査パケットテーブル65のエントリ中のタイマがタイムアップしたときに行われる。なお、検査パケットテーブル65のエントリ中のタイマ値の変動は、図15や図33を用いて説明した処理と同様に行われる。
経路の問い合わせ処理を開始する際に、判定部66は、問い合わせリストを初期化する(ステップS221)。判定部66は、検査パケットテーブル65中の処理対象のエントリの宛先IPアドレスを用いて、ARPテーブルから検査パケットの宛先MACアドレスを取得する(ステップS222)。判定部66は、処理対象のエントリについて、到達検査数と検査数が一致しているかを判定する(ステップS223)。
到達検査数と検査数が一致していない場合、検査パケットの一部が宛先に到達していないことになるので、判定部66は、到達していない検査パケットのヘッダを用いて特定される経路に障害が発生していると判定する(ステップS223でNo)。判定部66は、検査リストと到達リストの差分(Sd1)を作成し、検査パケットのヘッダ情報の生成に使用するテンプレートT1を生成する(ステップS224、S225)。テンプレートT1の生成の際に、判定部66は、送信元MACアドレスと送信元IPアドレスを、いずれも自ノードに割り当てられたアドレスに設定する。判定部66は、テンプレートT1中の宛先MACアドレスをステップS222で特定したMACアドレスに設定し、宛先IPアドレスをエントリ中の宛先IPアドレスとする。さらに、判定部66は、テンプレートT1中の宛先ポート番号を、検査用のポート番号に設定する。その後、判定部66は、差分Sd1中の送信元ポート番号の1つを、ヘッダ情報のテンプレートT1に含め、得られたヘッダ情報を問い合わせリストに追加する(ステップS226)。判定部66は、差分Sd1の中で未処理のポート番号があるかを判定する(ステップS227)。未処理のポート番号がある場合、ステップS226に戻る(ステップS227でYes)。
次に、応答パケットの転送経路に対する判定について説明する。ステップS227の処理後か、ステップS223で到達検査数と検査数が一致していると判定されると、ステップS228以降の処理が行われる。ここで、到達検査数と検査数が一致している場合、検査パケットの全てが宛先に到達していることになるので、判定部66は、検査パケットのヘッダを用いて特定される経路には障害が発生していないと判定している(ステップS223でYes)。
判定部66は、処理対象のエントリについて、受信応答数と応答数が一致しているかを判定する(ステップS228)。受信応答数と応答数が一致していない場合、応答パケットの一部を受信していないことになるので、判定部66は、未受信の応答パケットのヘッダを用いて特定される経路に障害が発生していると判定する(ステップS228でNo)。判定部66は、応答リストと受信リストの差分(Sd2)を作成し、応答パケットのヘッダ情報の生成に使用するテンプレートT2を生成する(ステップS229、S230)。テンプレートT2の生成の際に、判定部66は、宛先MACアドレスと宛先IPアドレスを、いずれも自ノードに割り当てられたアドレスに設定する。判定部66は、テンプレートT2中の送信元MACアドレスをステップS222で特定したMACアドレスに設定し、送信元IPアドレスをエントリ中の宛先IPアドレスとする。さらに、判定部66は、テンプレートT2中の宛先ポート番号を、検査用のポート番号に設定する。その後、判定部66は、差分Sd2中の送信元ポート番号の1つを、ヘッダ情報のテンプレートT2に含め、得られたヘッダ情報を問い合わせリストに追加する(ステップS231)。判定部66は、差分Sd2の中で未処理のポート番号があるかを判定する(ステップS232)。未処理のポート番号がある場合、ステップS231に戻る(ステップS232でYes)。その後、判定部66は、問い合わせリストを用いて、管理装置80に対して、問い合わせリスト中の各ヘッダで特定される経路を問い合わせ、適宜、得られた結果を出力する(ステップS232でNo、ステップS234)。なお、管理装置80での経路の検索と、経路の通信装置60への通知は、第1の実施形態と同様である。
判定部66は、処理対象のエントリについて、受信応答数と応答数が一致している場合、問い合わせリストにデータが含まれているかを判定する(ステップS228でYes、ステップS233)。問い合わせリストにデータが含まれている場合、ステップS234の処理が行われる。問い合わせリストにデータが含まれていない場合、判定部66は、全ての検査パケットと応答パケットの送受信に成功したことから、全ての検査パケットと応答パケットの送受信に使用された経路に障害が発生していないと判定している(ステップS233でNo)。そこで、判定部66は、表示デバイス等に合格判定を出力して処理を終了する(ステップS235)。
このように第3の実施形態によると、複数の検査パケットに対する応答を1つの応答パケットにまとめることにより、応答パケットの数が膨大になることを防ぐことができる。さらに、検査パケットの送信元とIDの組み合わせごとにまとめた検査パケットのグループの1つについて、複数の応答パケットが送信され、各応答パケットには他の応答パケットの情報が含まれている。また、他の応答パケットは、他の応答パケットの情報を含む応答パケットと同じ検査パケットに対する応答である。従って、第3の実施形態についても、検査パケットの到達状況と、応答パケットの受信状況を用いて、物理ネットワークで障害が発生している経路を特定することができる。
第3の実施形態では、複数の検査パケットが送信されるので、検査パケットの送信元から検査パケットの宛先にいたる複数の経路についての障害の有無が検討される。このため、ネットワーク中で障害が発生しているノードやアプリケーションが特定されていない場合にも有効である。
<その他>
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
例えば、通信装置20、50、60が生成する応答パケットの数は、実装に応じて、任意に変更され得る。さらに、通信装置60が1回の検査で送信する検査パケットの数も、実装に応じて任意に変更され得る。
応答パケット中の送信元ポート番号を決定する際の演算は実装に応じて決定され得る。以上の例では、応答パケット中の送信元ポート番号を決定する際に、検査パケットの送信ポートに所定の値が加算される場合を例として説明したが、検査パケットの送信ポートから所定の値が減算されても良く、さらに他の演算が行われても良い。
実施形態にかかる通信装置20、50、60以外の通信装置も含むネットワークに対応させるために、判定部35は、受信パケット中のデータに、受信したパケット以外のパケットのヘッダ情報が含まれているかを判定するように変形されても良い。この場合、判定部35は、受信した応答パケットのデータに、受信したパケット以外のパケットのヘッダ情報が含まれていることを特定すると、図13に示す受信処理を行う。例えば、図13において、ステップS42とステップS43の間で、応答パケット中に他の応答パケットの情報が含まれているかを判定する処理が含められても良い。
以上の例では、検査パケットと応答パケットは、UDPパケットが使用される場合を例として説明したが、検査パケットや応答パケットに使用されるプロトコルは、実装に応じて変更され得る。例えば、ICMP(Internet Control Message Protocol)などが使用されてもよい。
第3の実施形態において、第2の実施形態と同様に、応答パケットの送信側の通信装置60が経路の重複状況を学習するように変形されても良い。さらに、第3の実施形態では、複数の検査パケットを送信する送信元の通信装置60においても、送信した検査パケットの転送経路を管理装置80に問合わせて学習するように変形されても良い。この場合、送信側の通信装置60は、以後に同じ通信装置60に検査パケットを送信する場合に、なるべく転送経路が重複しないように、複数の検査パケットを送信することができる。
以上の各実施形態において、検査パケットの送信のタイミングは実装に応じて任意に変更され得る。例えば、オペレータがある特定の通信装置20から検査パケットの宛先を指定してコマンドを実行することで、検査パケットの送信が行われても良い。また、オペレータが管理コンソールを用いて、検査パケットの送信元と検査パケットの宛先を指定してコマンドを実行しても良い。さらに、オペレータは、予め、システムに、検査パケットの送信元、検査パケットの宛先、検査を行う時間間隔の組み合わせを設定して、所定の時間ごとに、システム中の転送経路の状況の確認を行っても良い。さらに、オペレータは、検査パケットの送信に関するコマンドを実行する際に、検査パケットの送信元ポート番号を指定しても良い。オペレータからの指定がある場合には、通信装置20は、指定された送信元ポート番号を用いて検査パケットを生成する。また、以上の変形は、システムに通信装置20が使用されている場合に限られず、通信装置50、通信装置60が用いられているシステムでも適用可能である。
検査パケットの送信が、システム中での障害の発生のときに行われることが予め設定により判定部35や判定部66で認識されてもよい。この場合、判定部35や判定部66は、応答パケットの全てを受信すると、合格判定の代わりに、仮想ネットワークでの障害が発生している可能性があることを通知するメッセージを生成しても良い。
以上の説明で使用したテーブルやパケットのフォーマット等は一例であり、実装に応じて、テーブルやパケット中の情報要素は変更され得る。
トラフィック分散のために行われる演算も実装に応じて変更され得る。例えば、図7で説明したように7種類の情報要素を用いずに5種類の情報要素を用いてハッシュ関数を求めても良い。この場合、宛先MACアドレス、送信元MACアドレス、送信元IPアドレス、宛先IPアドレス、プロトコルの情報を用いてハッシュ値が計算される。さらに、ハッシュ値を求める際に使用されるハッシュ関数も、実装に応じて任意に選択され得る。さらに、トラフィック分散のために使用される関数は、剰余関数に限られない。
上述の第1〜第3の実施形態を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
通信先装置との間の通信状況を検査する通信装置に、
前記通信先装置に向けて、検査パケットを送信し、
前記通信先装置から前記検査パケットに応答する応答パケットを受信すると、前記応答パケットのデータに、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信される他の応答パケットのヘッダ情報が含まれているかを判定し、
受信した応答パケットが前記ヘッダ情報を含む場合、所定時間中に前記他の応答パケットを受信しなければ、前記通信先装置との間の経路のうち、前記ヘッダ情報を用いて特定される経路に障害があると判定する
処理を行わせることを特徴とする判定プログラム。
(付記2)
前記通信装置に、
前記検査パケットの送信前に前記検査パケットに含まれているヘッダを記憶し、
前記通信先装置から前記検査パケットに応答する応答パケットを受信しない場合、前記検査パケットの転送に失敗した可能性があると判定し、
前記検査パケットに含まれているヘッダを用いて特定される経路を、障害が発生している可能性のある経路に決定する
処理を行わせることを特徴とする付記1に記載の判定プログラム。
(付記3)
前記通信装置に、
前記通信先装置から受信した応答パケットから、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信される全ての応答パケットの各々についてのヘッダの情報を取得し、
前記受信した応答パケットから取得した情報と、受信パケットのヘッダを用いて、前記全ての応答パケットを受信したかを判定し、
前記全ての応答パケットを受信すると、前記通信装置と前記通信先装置の間の通信経路には障害が発生していないと判定する
処理を行わせることを特徴とする付記1または2に記載の判定プログラム。
(付記4)
前記通信先装置に宛てて1回の検査で送信する複数の検査パケットに、検査の回数ごとに設定される識別番号として所定値を設定すると共に、前記複数の検査パケットの間で互いに異なる送信元ポート番号を設定し、
前記複数の検査パケットを前記通信先装置に向けて送信し、
前記識別番号が前記所定値に設定され、かつ、前記通信先装置が受信に成功した検査パケットの送信元ポート番号を表わすリストが前記応答パケットに含まれている場合、前記リストに含まれていない検査パケットの転送に使用された経路に障害があると判定する
処理を前記通信装置に行わせることを特徴とする付記1〜3のいずれか1項に記載の判定プログラム。
(付記5)
前記通信装置に、
他の通信装置から前記通信装置との間の通信状況の検査に使用する第1の検査パケットを受信すると、前記第1の検査パケットに応答する複数のパケットを、前記複数のパケットの各々の間で異なる送信元ポート番号を用いて生成し、
ネットワークの管理情報を保持する管理装置に、前記複数のパケットの各々のヘッダの情報を通知すると共に、前記管理装置から前記複数のパケットの各々の転送経路を取得し、
前記複数のパケットのうちで転送経路が異なるパケットに含まれる送信元ポート番号を記憶部に記憶し、
前記他の通信装置から第2の検査パケットを受信すると、前記記憶部に記憶している送信元ポート番号を用いた複数のパケットを前記第2の検査パケットに対する応答として送信する
処理を行わせることを特徴とする付記1〜4のいずれか1項に記載の判定プログラム。
(付記6)
通信先装置との間の通信状況を検査する通信装置であって、
前記通信先装置に向けて、検査パケットを送信する送信部と、
前記通信先装置から前記検査パケットに応答する応答パケットを受信する受信部と、
前記応答パケットのデータに、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信される他の応答パケットのヘッダ情報が含まれている場合、所定時間中に前記他の応答パケットを受信しなければ、前記通信先装置との間の経路のうち、前記ヘッダ情報を用いて特定される経路に障害があると判定する判定部
を備えることを特徴とする通信装置。
(付記7)
前記検査パケットの送信前に前記検査パケットに含まれているヘッダを記憶する記憶部をさらに備え、
前記判定部は、
前記通信先装置から前記検査パケットに応答する応答パケットを受信しない場合、前記検査パケットの転送に失敗した可能性があると判定し、
前記検査パケットに含まれているヘッダを用いて特定される経路を、障害が発生している可能性のある経路に決定する
ことを特徴とする付記6に記載の通信装置。
(付記8)
前記判定部は、
前記通信先装置から受信した応答パケットから、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信される全ての応答パケットの各々についてのヘッダの情報を取得し、
前記受信した応答パケットから取得した情報と、受信パケットのヘッダを用いて、前記全ての応答パケットを受信したかを判定し、
前記全ての応答パケットを受信すると、前記通信装置と前記通信先装置の間の通信経路には障害が発生していないと判定する
ことを特徴とする付記6または7に記載の通信装置。
(付記9)
前記通信先装置に宛てた検査パケットのベースを、検査の回数ごとに設定される識別番号として所定値を含めて生成する生成部と、
前記検査パケットのベースを複製した上で、互いに異なる送信元ポート番号を設定することにより、複数の検査パケットを生成する複製部
をさらに備え、
前記送信部は、前記複数の検査パケットを前記通信先装置に向けて送信し、
前記判定部は、前記識別番号が前記所定値に設定され、かつ、前記通信先装置が受信に成功した検査パケットの送信元ポート番号を表わすリストが前記応答パケットに含まれている場合、前記リストに含まれていない検査パケットの転送に使用された経路に障害があると判定する
ことを特徴とする付記6〜8のいずれか1項に記載の通信装置。
(付記10)
他の通信装置から前記通信装置との間の通信状況の検査に使用する第1の検査パケットを前記受信部が受信すると、前記第1の検査パケットへの応答のベースを生成する応答部と、
前記第1の検査パケットへの応答のベースを複製すると共に、互いに異なる送信元ポート番号を用いて、複数のパケットを生成する他の複製部と、
ネットワークの管理情報を保持する管理装置に、前記複数のパケットの各々のヘッダの情報を通知すると共に、前記管理装置から前記複数のパケットの各々の転送経路を取得することにより、前記複数のパケットのうちで転送経路が異なるパケットに含まれる送信元ポート番号を学習する学習部
を備え、
前記他の複製部は、前記他の通信装置から前記受信部が第2の検査パケットを受信すると、前記学習部で学習した送信元ポート番号を用いた複数のパケットを前記第2の検査パケットに対する応答として生成する
ことを特徴とする付記6〜9のいずれか1項に記載の通信装置。
(付記11)
通信先装置との間の通信状況を検査する通信装置は、前記通信先装置に向けて、検査パケットを送信し、
前記通信先装置は、
前記検査パケットを受信すると、転送経路の振分に用いられるヘッダ情報が異なる複数の応答パケットを、各応答パケットのデータに前記複数の応答パケットのうちで当該応答パケットとは異なるパケットのヘッダ情報を含めて、前記検査パケットに対する応答として生成し、
前記複数の応答パケットを前記通信装置に送信し、
前記通信装置は、
前記通信先装置から受信した応答パケットのデータから、前記複数の応答パケットのうちで前記通信装置が受信した応答パケット以外のパケットのヘッダ情報を抽出し、
前記複数の応答パケットの全てを所定の時間内に受信しない場合、前記通信先装置との間の経路のうち、未受信の応答パケット中のヘッダ情報を用いて特定される経路に障害があると判定する
ことを特徴とする判定方法。
(付記12)
前記通信装置が、
前記検査パケットの送信前に前記検査パケットに含まれているヘッダを記憶し、
前記通信先装置から前記検査パケットに応答する応答パケットを受信しない場合、前記検査パケットの転送に失敗した可能性があると判定し、
前記検査パケットに含まれているヘッダを用いて特定される経路を、障害が発生している可能性のある経路に決定する
ことを特徴とする付記11に記載の判定方法。
(付記13)
前記通信装置が、
前記通信先装置から受信した応答パケットから、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信される全ての応答パケットの各々についてのヘッダの情報を取得し、
前記受信した応答パケットから取得した情報と、受信パケットのヘッダを用いて、前記全ての応答パケットを受信したかを判定し、
前記全ての応答パケットを受信すると、前記通信装置と前記通信先装置の間の通信経路には障害が発生していないと判定する
ことを特徴とする付記11または12に記載の判定方法。
(付記14)
前記通信先装置に宛てて1回の検査で送信する複数の検査パケットに、検査の回数ごとに設定される識別番号として所定値を設定すると共に、前記複数の検査パケットの間で互いに異なる送信元ポート番号を設定し、
前記複数の検査パケットを前記通信先装置に向けて送信し、
前記識別番号が前記所定値に設定され、かつ、前記通信先装置が受信に成功した検査パケットの送信元ポート番号を表わすリストが前記応答パケットに含まれている場合、前記リストに含まれていない検査パケットの転送に使用された経路に障害があると判定する
処理を前記通信装置が行うことを特徴とする付記11〜13のいずれか1項に記載の判定方法。
(付記15)
前記通信装置は、
他の通信装置から前記通信装置との間の通信状況の検査に使用する第1の検査パケットを受信すると、前記第1の検査パケットに応答する複数のパケットを、前記複数のパケットの各々の間で異なる送信元ポート番号を用いて生成し、
ネットワークの管理情報を保持する管理装置に、前記複数のパケットの各々のヘッダの情報を通知すると共に、前記管理装置から前記複数のパケットの各々の転送経路を取得し、
前記複数のパケットのうちで転送経路が異なるパケットに含まれる送信元ポート番号を記憶部に記憶し、
前記他の通信装置から第2の検査パケットを受信すると、前記記憶部に記憶している送信元ポート番号を用いた複数のパケットを前記第2の検査パケットに対する応答として送信する
ことを特徴とする付記11〜14のいずれか1項に記載の判定方法。