(57)【要約】【課題】障害の発生した経路を特定可能にする。【解決手段】判定プログラムは、通信先装置との間の通信状況を検査する通信装置で実行される。通信装置は、通信先装置に向けて、検査パケットを送信する。通信装置は、通信先装置から検査パケットに応答する応答パケットを受信すると、応答パケットのデータに、他の応答パケットのヘッダ情報が含まれているかを判定する。他の応答パケットは、応答パケットにより通信先装置での受信が確認される検査パケットに対する応答として通信先装置から送信されるパケットである。通信装置は、受信した応答パケットがヘッダ情報を含む場合、所定時間中に他の応答パケットを受信しなければ、通信先装置との間の経路のうち、ヘッダ情報を用いて特定される経路に障害があると判定する【選択図】図１
2018026727.tif 000002
【特許請求の範囲】
【請求項１】
通信先装置との間の通信状況を検査する通信装置に、
前記通信先装置に向けて、検査パケットを送信し、
前記通信先装置から前記検査パケットに応答する応答パケットを受信すると、前記応答パケットのデータに、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信される他の応答パケットのヘッダ情報が含まれているかを判定し、
受信した応答パケットが前記ヘッダ情報を含む場合、所定時間中に前記他の応答パケットを受信しなければ、前記通信先装置との間の経路のうち、前記ヘッダ情報を用いて特定される経路に障害があると判定する
処理を行わせることを特徴とする判定プログラム。
【請求項２】
前記通信装置に、
前記検査パケットの送信前に前記検査パケットに含まれているヘッダを記憶し、
前記通信先装置から前記検査パケットに応答する応答パケットを受信しない場合、前記検査パケットの転送に失敗した可能性があると判定し、
前記検査パケットに含まれているヘッダを用いて特定される経路を、障害が発生している可能性のある経路に決定する
処理を行わせることを特徴とする請求項１に記載の判定プログラム。
【請求項３】
前記通信装置に、
前記通信先装置から受信した応答パケットから、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信される全ての応答パケットの各々についてのヘッダの情報を取得し、
前記受信した応答パケットから取得した情報と、受信パケットのヘッダを用いて、前記全ての応答パケットを受信したかを判定し、
前記全ての応答パケットを受信すると、前記通信装置と前記通信先装置の間の通信経路には障害が発生していないと判定する
処理を行わせることを特徴とする請求項１または２に記載の判定プログラム。
【請求項４】
前記通信先装置に宛てて１回の検査で送信する複数の検査パケットに、検査の回数ごとに設定される識別番号として所定値を設定すると共に、前記複数の検査パケットの間で互いに異なる送信元ポート番号を設定し、
前記複数の検査パケットを前記通信先装置に向けて送信し、
前記識別番号が前記所定値に設定され、かつ、前記通信先装置が受信に成功した検査パケットの送信元ポート番号を表わすリストが前記応答パケットに含まれている場合、前記リストに含まれていない検査パケットの転送に使用された経路に障害があると判定する
処理を前記通信装置に行わせることを特徴とする請求項１〜３のいずれか１項に記載の判定プログラム。
【請求項５】
前記通信装置に、
他の通信装置から前記通信装置との間の通信状況の検査に使用する第１の検査パケットを受信すると、前記第１の検査パケットに応答する複数のパケットを、前記複数のパケットの各々の間で異なる送信元ポート番号を用いて生成し、
ネットワークの管理情報を保持する管理装置に、前記複数のパケットの各々のヘッダの情報を通知すると共に、前記管理装置から前記複数のパケットの各々の転送経路を取得し、
前記複数のパケットのうちで転送経路が異なるパケットに含まれる送信元ポート番号を記憶部に記憶し、
前記他の通信装置から第２の検査パケットを受信すると、前記記憶部に記憶している送信元ポート番号を用いた複数のパケットを前記第２の検査パケットに対する応答として送信する
処理を行わせることを特徴とする請求項１〜４のいずれか１項に記載の判定プログラム。
【請求項６】
通信先装置との間の通信状況を検査する通信装置であって、
前記通信先装置に向けて、検査パケットを送信する送信部と、
前記通信先装置から前記検査パケットに応答する応答パケットを受信する受信部と、
前記応答パケットのデータに、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信される他の応答パケットのヘッダ情報が含まれている場合、所定時間中に前記他の応答パケットを受信しなければ、前記通信先装置との間の経路のうち、前記ヘッダ情報を用いて特定される経路に障害があると判定する判定部
を備えることを特徴とする通信装置。
【請求項７】
通信先装置との間の通信状況を検査する通信装置は、前記通信先装置に向けて、検査パケットを送信し、
前記通信先装置は、
前記検査パケットを受信すると、転送経路の振分に用いられるヘッダ情報が異なる複数の応答パケットを、各応答パケットのデータに前記複数の応答パケットのうちで当該応答パケットとは異なるパケットのヘッダ情報を含めて、前記検査パケットに対する応答として生成し、
前記複数の応答パケットを前記通信装置に送信し、
前記通信装置は、
前記通信先装置から受信した応答パケットのデータから、前記複数の応答パケットのうちで前記通信装置が受信した応答パケット以外のパケットのヘッダ情報を抽出し、
前記複数の応答パケットの全てを所定の時間内に受信しない場合、前記通信先装置との間の経路のうち、未受信の応答パケット中のヘッダ情報を用いて特定される経路に障害があると判定する
ことを特徴とする判定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、経路中の障害についての判定プログラムと判定方法に関する。
【背景技術】
【０００２】
データセンタなどにおいて、複数の物理サーバを有線で接続して物理ネットワークを生成し、物理ネットワーク中の物理サーバで仮想マシンや仮想スイッチを動作させることにより、仮想ネットワークが生成されることが増えてきている。物理ネットワーク上に仮想ネットワークが生成されているシステムにおいても、システム障害に対する対策や通信速度の確保のために、装置間の通信に複数の経路が使用されることもある。
【０００３】
仮想ネットワーク中の仮想マシン同士での通信の際には、通信を行う仮想マシンの各々が動作している物理サーバ間での通信が発生する。このため、物理ネットワーク上に仮想ネットワークが生成されているシステムでは、障害の原因が仮想ネットワークにある場合と、障害の原因が物理ネットワークにある場合の両方が考えられる。従って、システム障害に対処する際には、障害の原因が物理ネットワークでの障害に起因しているのか、仮想ネットワークでの問題に起因しているのかをオペレータが特定することが求められる。そこで、オペレータは、物理ネットワークでの障害の有無を判定し、物理ネットワークでは障害が発生していない場合、仮想ネットワーク上の障害によって、通信障害が起こっていると判定する。
【０００４】
しかし、物理ネットワーク中に含まれている物理サーバでの死活監視やログ解析だけでは、障害の発生している箇所の発見が難しい場合もある。このため、検査パケットを用いてパケットの消失が発生しているかを判定されることがある。
【０００５】
関連する技術として、宛先情報を設定したヘッダ部に経路情報を付加したパケットを用いた試験方法が提案されている（例えば、特許文献１）。この試験方法では、送信元から送信されたパケットを、中継ノードが経由情報に基づいて転送し、送信元の装置は、宛先情報で特定された宛先からの応答パケットの有無に基づいて通信経路の状況を判定する。また、管理計算機が送信したフレームを受信したノードが、通信ネットワークにおけるフレームの伝達経路を示す経路情報に基づいて受信フレームを転送するとともに、管理計算機に応答を返すシステムも提案されている。このシステムでは管理計算機は、ネットワーク中のノードからの応答の受信状況に基づいて障害の発生個所を特定する（例えば、特許文献２）。パケットを受信すると冗長パケットを生成し、受信パケットと冗長パケットを異なる経路を用いて宛先のネットワークに転送することで、いずれかの経路でパケットロスが発生しても復元を可能にする通信方法も提案されている（例えば、特許文献３）
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平９−２７０８２２号公報
【特許文献２】国際公開第２０１０／０６４５３２号
【特許文献３】特開２００４−２７４７０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
通信装置から通信先の装置に至る経路の障害の検出を行うために、通信装置が、検査パケットを送信し、送信した検査パケットに対する応答パケットを受信するかを判定することがある。しかし、通信装置から通信先の装置に至る経路が冗長化されている場合、検査パケットと応答パケットが異なる経路を通って転送される可能性があるので、障害の発生している経路を特定することは難しい。すなわち、検査パケットの送信元が応答パケットを受信しない場合、応答パケットの転送経路に障害がある可能性と、検査パケットの転送経路に障害がある可能性があるが、いずれの経路に障害が発生しているかを特定することは困難である。
【０００８】
本発明は、１つの側面では、障害の発生した経路を特定可能にすることを目的とする。
【課題を解決するための手段】
【０００９】
ある態様にかかる判定プログラムは、通信先装置との間の通信状況を検査する通信装置で実行される。通信装置は、前記通信先装置に向けて、検査パケットを送信する。通信装置は、前記通信先装置から前記検査パケットに応答する応答パケットを受信すると、前記応答パケットのデータに、他の応答パケットのヘッダ情報が含まれているかを判定する。他の応答パケットは、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信されるパケットである。通信装置は、受信した応答パケットが前記ヘッダ情報を含む場合、所定時間中に前記他の応答パケットを受信しなければ、前記通信先装置との間の経路のうち、前記ヘッダ情報を用いて特定される経路に障害があると判定する。
【発明の効果】
【００１０】
障害の発生した経路を特定できる。
【図面の簡単な説明】
【００１１】
【図１】実施形態にかかる検査方法の例を説明する図である。
【図２】通信装置の構成の例を説明する図である。
【図３】通信装置のハードウェア構成の例を説明する図である。
【図４】ネットワークの例を説明する図である。
【図５】検査パケットと検査パケットテーブルの例を説明する図である。
【図６】検査パケットの送信処理の例を説明するフローチャートである。
【図７】スイッチによるトラフィック分散処理の例を説明する図である。
【図８】検査パケットと応答パケットの転送経路の例を説明する図である。
【図９】応答パケットのベースの生成方法の例を説明する図である。
【図１０】応答パケットの生成方法の例を説明する図である。
【図１１】通信装置でのパケットの受信処理の例を説明するフローチャートである。
【図１２】検査パケットの受信と応答パケットの送信の際の処理の例を説明するフローチャートである。
【図１３】応答パケットの受信処理の例を説明するフローチャートである。
【図１４】検査パケットテーブルの例を説明する図である。
【図１５】タイマ処理の例を説明するフローチャートである。
【図１６】応答パケットの消失例を説明する図である。
【図１７】経路の問い合わせ処理の例を説明するフローチャートである。
【図１８】経路の問い合わせを受信した管理装置での処理の例を説明するフローチャートである。
【図１９】管理装置での経路の特定処理の例を説明するフローチャートである。
【図２０】第２の実施形態にかかる通信装置の構成の例を説明する図である。
【図２１】応答パケットの生成方法の例を説明する図である。
【図２２】応答パケットの生成方法の例を説明する図である。
【図２３】応答パケットの生成方法の例を説明するフローチャートである。
【図２４】経路の分散状況の学習の際に行われる処理の例を説明するフローチャートである。
【図２５】第３の実施形態で行われる通信の例を説明する図である。
【図２６】第３の実施形態にかかる通信装置の構成の例を説明する図である。
【図２７】検査パケットの例を説明する図である。
【図２８】検査パケットテーブルの例を説明する図である。
【図２９】検査パケットの送信処理の例を説明するフローチャートである。
【図３０】検査パケットの複製処理の例を説明するフローチャートである。
【図３１】受信状況テーブルの例を説明する図である。
【図３２】検査パケットの受信処理の例を説明するフローチャートである。
【図３３】タイマ処理の例を説明するフローチャートである。
【図３４】タイマ処理の例を説明するフローチャートである。
【図３５】応答パケットのベースの生成処理の例を説明するフローチャートである。
【図３６】応答パケットの例を説明する図である。
【図３７】応答パケットの受信処理の例を説明するフローチャートである。
【図３８】検査パケットテーブルの例を説明する図である。
【図３９】経路の問い合わせ処理の例を説明するフローチャートである。
【発明を実施するための形態】
【００１２】
図１は、実施形態にかかる検査方法の例を説明する図である。図１に示すシステムでは、通信装置２０（２０ａ〜２０ｄ）と、スイッチ１０（１０ａ〜１０ｄ）が含まれているが、システム中の通信装置２０やスイッチ１０の数は任意である。図１の例では、通信装置２０ａから通信装置２０ｄに至る通信経路として、スイッチ１０ａ、スイッチ１０ｂ、スイッチ１０ｄを経由する経路（経路Ｒ１）と、スイッチ１０ａ、スイッチ１０ｃ、スイッチ１０ｄを経由する経路（経路Ｒ２）があるとする。また、各スイッチ１０は、受信したパケットのヘッダのハッシュ値を用いて、経路を振り分けるとする。従って、スイッチ１０ａやスイッチ１０ｄのように、複数の経路が経由しているスイッチ１０では、受信パケットのヘッダのハッシュ値に応じて、受信パケットの転送に使用する経路を選択するものとする。
【００１３】
このようなシステムにおいて、通信装置２０ａが通信装置２０ｄ宛てに検査パケットＰ０（図示せず）を生成したとする。通信装置２０ａは、検査パケットＰ０中のヘッダの情報を記憶するとともに、検査パケットＰ０を通信装置２０ｄに向けて送信したとする。このため、検査パケットＰ０は、通信装置２０ａから送信されるとスイッチ１０ａに到達する。
【００１４】
スイッチ１０ａは、検査パケットＰ０のヘッダのハッシュ値を用いて、検査パケットＰ０をスイッチ１０ｂに転送することを決定する。スイッチ１０ａは検査パケットＰ０をスイッチ１０ｂに転送する。スイッチ１０ｂは、スイッチ１０ａから検査パケットＰ０を受信すると、検査パケットＰ０の宛先が通信装置２０ｄであるため、検査パケットＰ０をスイッチ１０ｄに転送する。スイッチ１０ｄは検査パケットＰ０の宛先が通信装置２０ｄであるため、検査パケットＰ０を通信装置２０ｄに転送する。従って、検査パケットＰ０は、図１の矢印Ａ１１に示す経路（経路Ｒ１）に沿って転送される。経路Ｒ１に障害が発生していない場合、検査パケットＰ０は、通信装置２０ｄに到達する。
【００１５】
通信装置２０ｄは、検査パケットＰ０を受信すると、検査パケットＰ０に応答する応答パケットを、予め決められた数だけ生成する。ここで、予め決められた数は、２以上の任意の数である。通信装置２０ｄは、複数の応答パケットを生成するときに、複数の応答パケットの各々が経由する通信経路が互いに異なる経路となる可能性が高くなるように、個々の応答パケットのヘッダ中の情報が異なる値となるようにする。例えば、通信装置２０ｄは、複数の応答パケットの各々の間で、送信元ポート番号が互いに異なる値となるように設定する。図１では、通信装置２０ｄは応答パケットとして、応答パケットＰ１とＰ２を生成したとする。応答パケットＰ１では、ヘッダ中の送信元ポート番号（ＳＰ）がＳＰ＃Ａであるとする。一方、応答パケットＰ２では、ヘッダ中の送信元ポート番号がＳＰ＃Ｂであるとする。
【００１６】
さらに、通信装置２０ｄは、応答パケットのうちの一部が通信装置２０ａに到達しなかった場合に、到達しなかった応答パケットのヘッダ情報を通信装置２０ａで認識できるように、各応答パケットのデータに「他の応答パケット」のヘッダの情報を含める。ここで、ある応答パケットにとっての「他の応答パケット」は、その応答パケットで受信成功を通知する検査パケットに応答して生成した複数の応答パケットのうちで、その応答パケット以外の応答パケットである。従って、応答パケットＰ１にとっては、応答パケットＰ２が他の応答パケットとなる。一方、応答パケットＰ２にとっては、応答パケットＰ１が他の応答パケットとなる。従って、応答パケットＰ１のデータには、応答パケットＰ２のヘッダ情報Ｈ１が含められている。一方、応答パケットＰ２のデータには、応答パケットＰ１のヘッダ情報Ｈ２が含められている。図１の例では、他の応答パケットの情報として、他の応答パケットのヘッダ中の送信元ポート番号の情報が使用されている。このため、応答パケットＰ１は、他の応答パケットのヘッダ情報Ｈ１として、送信元ポート番号がＳＰ＃Ｂであることをデータに含んでいる。また、応答パケットＰ２は、他の応答パケットのヘッダ情報Ｈ２として、送信元ポート番号がＳＰ＃Ａであることをデータに含んでいる。
【００１７】
通信装置２０ｄは、応答パケットＰ１とＰ２を通信装置２０ａに向けて送信すると、応答パケットＰ１とＰ２は、いずれもスイッチ１０ｄに到達したとする。スイッチ１０ｄは、応答パケットＰ１のヘッダ情報のハッシュ値から、応答パケットＰ１の転送先をスイッチ１０ｃに決定したとする。すると、応答パケットＰ１は、スイッチ１０ｃ、スイッチ１０ａを介して、通信装置２０ａに至る経路（矢印Ａ１２）で転送される。なお、矢印Ａ１２の経路は、経路Ｒ２にあたるとする。
【００１８】
一方、応答パケットＰ２について、スイッチ１０ｄは、応答パケットＰ２のヘッダ情報のハッシュ値から、応答パケットＰ２の転送先をスイッチ１０ｂに決定したとする。すると、応答パケットＰ２は、スイッチ１０ｂ、スイッチ１０ａを介して、通信装置２０ａに至る経路（矢印Ａ１３）で転送される。矢印Ａ１３は、経路Ｒ１に沿った経路である。
【００１９】
経路Ｒ１と経路Ｒ２のいずれにも障害が発生していない場合、通信装置２０ａは、応答パケットＰ１とＰ２の両方を受信することができる。この場合、通信装置２０ａと通信装置２０ｄの間の物理ネットワークには障害が発生していない。
【００２０】
経路Ｒ１と経路Ｒ２のいずれかに障害が発生している場合、通信装置２０ａは、障害の発生していない経路で転送された応答パケットを受信できる。例えば、通信装置２０ａは、応答パケットＰ２を受信したが応答パケットＰ１を受信しなかったとする。すると、通信装置２０ａは、受信に成功した応答パケットＰ２のデータ中のヘッダ情報Ｈ２を用いて、受信に失敗した応答パケットＰ１の存在と、応答パケットＰ１のヘッダの情報を特定できる。そこで、通信装置２０ａは、応答パケットＰ１のヘッダの情報を用いて特定される転送経路に障害が発生していると判定する。なお、ヘッダの情報から転送経路を特定する方法は、任意の既知の方法を使用できる。
【００２１】
ところで、経路Ｒ１に障害が発生している場合、検査パケットＰ０は矢印Ａ１１に示すように通信装置２０ｄに到達しない。このため、通信装置２０ｄは応答パケットを生成せず、通信装置２０ａも応答パケットを受信しない。このように、１つの応答パケットも受信しない場合、通信装置２０ａは、通信装置２０ａ自身が送信した検査パケットが、宛先の通信装置２０ｄに到達していないと判定する。通信装置２０ａは、検査パケットＰ０の送信時に、検査パケットＰ０のヘッダの情報を記憶しているので、検査パケットＰ０のヘッダの情報で特定される転送経路に障害が発生していると判定する。
【００２２】
このように、検査パケットを受信した通信装置２０において、他の応答パケットのヘッダ情報を含む複数の応答パケットを、異なる経路を用いて転送することにより、検査パケットの送信元の通信装置２０は、受信していない応答パケットの存在を認識できる。さらに、受信した応答パケットを用いて、受信していない応答パケットのヘッダの情報を特定することにより、障害の発生した経路を特定できる。さらに、いずれの応答パケットも受信しない場合、通信装置２０は、送信した検査パケットの転送経路に障害が発生したと判定できる。従って、実施形態にかかる方法により、冗長化された複数の経路のうちで障害が発生している経路の特定が可能になる。
【００２３】
＜装置構成とネットワークの例＞
図２は、通信装置２０の構成の例を説明する図である。通信装置２０は、送信部２１、受信部２２、分類部２３、データ処理部２４、検査部３０を備える。検査部３０は、生成部３１、記憶部３２、応答部３３、複製部３４、判定部３５を有する。記憶部３２は、検査パケットテーブル３６を記憶し、さらに、検査部３０での処理に使用されるデータ等を保持する。例えば、記憶部３２は、ＡＲＰ（Address Resolution Protocol）テーブルを保持していても良い。
【００２４】
送信部２１は、他の通信装置２０などの他の装置にパケットを送信する。受信部２２は、通信装置２０やスイッチ１０などの他の装置からパケットを受信する。受信部２２は、受信したパケットを分類部２３に出力する。
【００２５】
分類部２３は、入力されたパケットを、パケットの宛先ポート番号を用いて分類する。パケットの宛先ポート番号が、検査部３０で処理される検査パケットや応答パケットを識別するために使用される値である場合、分類部２３は、受信パケットを応答部３３と判定部３５に出力する。以下、検査部３０で処理される検査パケットや応答パケットを識別するために使用される値のことを、「検査用ポート番号」と記載することがある。一方、パケットの宛先ポート番号が検査用ポート番号以外の場合、分類部２３は、受信パケットをデータ処理部２４に出力する。なお、分類部２３は、検査用ポート番号を予め記憶しているものとする。データ処理部２４は、入力されたパケットを処理し、適宜、送信パケットを生成する。
【００２６】
通信装置２０が他の通信装置２０から検査パケットを受信した場合、応答部３３は、応答パケットのベースとなる情報を生成し、複製部３４は、応答部３３で生成された情報を用いて、複数の応答パケットを生成する。複製部３４は、生成した複数の応答パケットを、送信部２１を介して、検査パケットの送信元に送信する。
【００２７】
一方、通信装置２０が他の通信装置２０から応答パケットを受信した場合、判定部３５は、受信した応答パケットのヘッダの情報を取得して、検査パケットの宛先の通信装置２０から送信された全ての応答パケットを得られたかを判定する。判定部３５は、受信に失敗した応答パケットの転送経路などに障害があると判定する。判定部３５の処理の詳細は後述する。生成部３１は、通信装置２０が検査パケットを送信する場合、経路の状況の検査の対象となっている通信先の通信装置２０に宛てた検査パケットを生成する。生成部３１は、検査パケットのヘッダ情報を、検査パケットテーブル３６に格納する。
【００２８】
図３は、通信装置２０のハードウェア構成の例を説明する図である。通信装置２０は、プロセッサ１０１、メモリ１０２、バス１０３、ネットワーク接続装置１０４を備える。メモリ１０２は、ＲＡＭ（Random Access Memory）とＲＯＭ（Read Only Memory）を含む。プロセッサ１０１は、メモリ１０２に記憶されたプログラムを実行することができる。バス１０３は、プロセッサ１０１、メモリ１０２、ネットワーク接続装置１０４を、相互にデータの送受信が可能になるように接続する。ネットワーク接続装置１０４は、ネットワーク中の他の装置との情報の入出力を行う。ネットワーク接続装置１０４は、例えば、ＮＩＣ（Network Interface Card）として実現される。通信装置２０において、プロセッサ１０１は、分類部２３、データ処理部２４、生成部３１、応答部３３、複製部３４、判定部３５として動作する。メモリ１０２は、記憶部３２として動作するほか、適宜、データ処理部２４が処理するデータの格納に使用され、データ処理部２４の一部としても動作する。ネットワーク接続装置１０４は、送信部２１と受信部２２を実現する。
【００２９】
オプションとして、通信装置２０は、入力装置、出力装置、可搬記憶媒体駆動装置の１つ以上を有していても良い。入力装置は、キーボードなど、情報の入力に使用される任意の装置であり、出力装置は、ディスプレイなど、データの出力に使用される任意の装置である。可搬記憶媒体駆動装置は、メモリ１０２中のデータを可搬記憶媒体に出力することができ、また、可搬記憶媒体からプログラムやデータ等を読み出すことができる。ここで、可搬記憶媒体は、持ち運びが可能な任意の記憶媒体である。
【００３０】
通信装置２０がコンピュータとして実現される場合、分類部２３、データ処理部２４、生成部３１、応答部３３、複製部３４、判定部３５は、ＯＳ（Operating System）等のソフトウェアで実現されうる。また、通信装置２０の全体がＮＩＣによって実現されても良い。通信装置２０の全体がＮＩＣによって実現される場合、分類部２３、データ処理部２４、生成部３１、応答部３３、複製部３４、判定部３５の１つ以上がハードウェアによって実現され得る。
【００３１】
図４は、ネットワークの例を説明する図である。図４に示すネットワークには、通信装置２０ａ〜２０ｈと複数のスイッチ１０（ＳＷ１〜ＳＷ１０）、管理装置８０が含まれている。なお、図４は一例であり、ネットワーク中のスイッチ１０の数、通信装置２０の数、スイッチ１０や通信装置２０の接続関係は、実装に応じて変更され得る。
【００３２】
管理装置８０は、ネットワーク中の全ての通信装置２０と制御回線で接続され得る。通信装置２０は、応答パケットの受信状況を用いて、障害が発生していると判定した経路を転送されたヘッダの情報を含む問い合わせを管理装置８０に送信する。管理装置８０は、通信装置２０から受信した問い合わせに含まれているヘッダの情報、ネットワークトポロジ、各スイッチ１０での振り分け処理のアルゴリズムなどを用いて、そのヘッダの情報から特定される転送経路を特定する。その後、管理装置８０は、特定した転送経路の情報を含む経路情報通知を、問い合わせの送信元の通信装置２０に送信してもよい。この場合、通信装置２０では、得られた経路情報通知を用いて、障害の発生した経路を特定する情報を取得できる。従って、オペレータは、検査パケットを送信した通信装置２０が備える表示装置等から、障害の発生している経路の情報を取得できる。また、管理装置８０は、問い合わせ中のヘッダの情報を用いて特定した経路の情報を、オペレータが視認可能な表示装置に表示しても良く、オペレータが使用している端末に、障害の発生した経路を特定する情報を送信しても良い。
【００３３】
スイッチ１０にヘッダ情報を通知することにより、スイッチ１０から転送先ポートを取得可能な場合、図４の点線で示すように、管理装置８０は、ネットワーク中の各スイッチ１０と接続されうる。管理装置８０は、問い合わせに含まれているヘッダの情報をスイッチ１０に送信することにより、スイッチ１０からそのスイッチ１０での振り分け先を取得することにより、障害の発生している経路を特定する。障害の発生している経路を特定した後に管理装置８０が行う処理は、管理装置８０がスイッチ１０と接続されていない場合と同様である。
【００３４】
＜第１の実施形態＞
以下、第１の実施形態を、検査パケットの送信処理、複数経路への分散処理、検査パケットの受信処理と応答パケットの送信処理、応答パケットの受信、パケットが消失した経路の問い合わせ、管理装置８０での処理に分けて説明する。以下の説明では、いずれの通信装置２０による処理であるかを分かりやすくするために、符号の末尾に処理を実行する通信装置２０の符号の末尾と同じアルファベットを付けて記載することがある。例えば、生成部３１ａは通信装置２０ａ中の生成部３１であり、判定部３５ｇは通信装置２０ｇ中の判定部３５である。
【００３５】
（１）検査パケットの送信処理
生成部３１は、通信装置２０に入力された検査指示に応じて検査パケットを生成する。検査指示は、管理装置８０から通信装置２０に送信されても良く、また、通信装置２０の入力装置からオペレータによって入力されても良い。検査指示には、検査パケットの宛先に割り当てられたＩＰアドレスが含まれており、オプションとして、検査パケットの送信元ポートとして使用する値が含まれていても良い。
【００３６】
図５は、検査パケットと検査パケットテーブルの例を説明する図である。Ｐ５は、検査パケットの例を示す。検査パケットは、Ｅｔｈｅｒヘッダ、ＩＰ（Internet Protocol）ヘッダ、ＵＤＰ（User Datagram Protocol）ヘッダ、ＵＤＰペイロードを含む。Ｅｔｈｅｒヘッダは、宛先ＭＡＣ（Media Access Control）アドレスと送信元ＭＡＣアドレスを含む。ＩＰヘッダは、送信元ＩＰアドレス、宛先ＩＰアドレス、プロトコル情報（Ｐｒｏｔｏ）などを含む。Ｐ５の例では、トランスポート層のプロトコルは、ＵＤＰであるので、プロトコル情報はＵＤＰを表わす値に設定される。ＵＤＰヘッダは、送信元ポート番号（Ｓｒｃ  Ｐｏｒｔ）と宛先ポート番号（Ｄｓｔ  Ｐｏｒｔ）を含む。ここで、生成部３１は、検査パケットの宛先の通信装置２０の検査部３０で処理されるようにするために、宛先ポート番号を、検査用ポート番号に設定する。送信元ポート番号については、生成部３１が生成した値か、検査指示に含まれている値が使用される。
【００３７】
ＵＤＰペイロードは、ＩＤフィールドとタイプフィールドを含む。ＩＤフィールドには、送信元と宛先の組合せが同じ検査パケットの間での、各検査パケットの識別に使用するＩＤが格納される。タイプフィールドには、パケットが検査パケットと応答パケットのいずれであるかを示す情報が格納される。パケットが検査パケットである場合はタイプフィールドの値はＲｅｑｕｅｓｔとなり、パケットが応答パケットである場合はタイプフィールドの値はＲｅｓｐｏｎｓｅとなる。
【００３８】
生成部３１は、検査パケットを生成すると、検査パケットの情報を、検査パケットテーブル３６の検査パケット情報として記録する。
【００３９】
検査パケットテーブル３６は、検査パケット情報、応答パケット情報、タイマフィールドを含む。検査パケット情報は、通信装置２０自身が送信した検査パケットの情報であり、宛先ＩＰアドレスフィールド、送信元ポート番号フィールド、ＩＤフィールドを含む。宛先ＩＰアドレスフィールドには、検査パケットの宛先のＩＰアドレスが格納され、送信元ポート番号フィールドには検査パケットの送信元ポート番号が格納される。ＩＤフィールドには、検査パケットのＩＤが格納される。
【００４０】
応答パケット情報は、エントリ中の情報から特定される検査パケットに対する応答パケットの受信状況の特定に使用する情報であり、応答数フィールド、応答リストフィールド、受信応答数フィールド、受信リストフィールドを含む。応答数フィールドには、通信装置２０が受信した応答パケットが応答している検査パケットと同じ検査パケットに対して送信された応答パケットの総数の情報が格納される。応答リストフィールドには、通信装置２０が受信した応答パケットが応答している検査パケットと同じ検査パケットに対して送信された複数の応答パケットについて、各々の応答パケットに含まれている送信元ポート番号を記録したリストが格納される。受信応答数フィールドには、通信装置２０が受信した応答パケットの数が記録される。受信リストフィールドには、エントリから特定される検査パケットの応答として通信装置２０が受信した応答パケット中の送信元ポート番号のリストが格納される。タイマフィールドは、検査パケットを送信してから応答パケットを受け付ける時間であり、タイマフィールドの値が０になると、そのエントリの検査パケットに対する応答の受信を終了する。
【００４１】
図６は、検査パケットの送信処理の例を説明するフローチャートである。図６において、ＳｅｑＩＤは、検査パケットのＩＤとして使用する値を表わす変数であり、通信装置２０の初期化の際には、ＳｅｑＩＤ＝０に設定されている。生成部３１は、検査指示の入力があるまで待機する（ステップＳ１）。生成部３１は、検査指示の入力を検出すると、検査指示に含まれている宛先ＩＰアドレス（ＩＰｘ）とＡＲＰテーブルから、宛先となる通信装置２０のＭＡＣアドレス（ＭＡＣｘ）を特定する（ステップＳ１でＹｅｓ、ステップＳ２）。生成部３１は、検査指示に送信元ポート番号の指定が含まれているかを判定する（ステップＳ３）。検査指示に送信元ポート番号の指定が含まれていない場合、生成部３１は、送信元ポート番号（ＳＰｘ）を生成する（ステップＳ３でＮｏ、ステップＳ４）。ステップＳ４において、生成部３１は、乱数などを用いて、送信元ポート番号の値がランダムになるように生成する。検査指示に送信元ポート番号が含まれている場合（ステップＳ３でＹｅｓ）か、生成部３１が送信元ポート番号を生成すると（ステップＳ４）、生成部３１は、検査パケットを生成する（ステップＳ５）。
【００４２】
検査パケットでは、宛先ＭＡＣアドレスはステップＳ２で求められた宛先の通信装置２０のＭＡＣアドレス（ＭＡＣｘ）に設定され、宛先ＩＰアドレスは生成指示で指定されたＩＰアドレス（ＩＰｘ）に設定される。検査パケットの送信元ＭＡＣアドレスとＩＰアドレスは、検査パケットの送信元の通信装置２０に割り当てられた値が設定され、プロトコルはＵＤＰが指定される。検査パケット中の送信元ポート番号は、生成指示で指定された指定値か、ステップＳ４で生成された送信元ポート番号ＳＰｘが設定される。宛先ポート番号は検査用ポート番号に設定され、ＩＤはＳｅｑＩＤの値に設定される。さらに、検査パケット中のタイプフィールドには、Ｒｅｑｕｅｓｔが設定される。生成部３１は、検査パケットを生成すると、検査パケットテーブル３６中に検査パケットの情報を記録する（ステップＳ６）。
【００４３】
図５に示す検査パケットテーブル３６−１では、宛先ＩＰアドレス、送信元ポート番号、ＩＤの値が検査パケット情報として記録されている。例えば、ＩＰｇというＩＰアドレスが割り当てられた通信装置２０ｇに、送信元ポート番号＝１２３４５、ＩＤ＝１の検査パケットを通信装置２０ａが送信する場合、検査パケットテーブル３６−１の１番目のエントリの情報が記録される。同様に、ＩＰｆというＩＰアドレスが割り当てられた通信装置２０ｆに対して通信装置２０ａが送信元ポート番号＝２２３３４、ＩＤ＝５の検査パケットを通信装置２０ａが送信する場合、検査パケットテーブル３６−１の２番目のエントリの情報が記録される。
【００４４】
その後、生成部３１は、処理対象のエントリのタイマフィールドにタイマ値を設定し、タイマを起動する（ステップＳ７）。生成部３１は、送信部２１から検査パケットを宛先に向けて送信する（ステップＳ８）。その後、生成部３１は、変数ＳｅｑＩＤを１つインクリメントして、ステップＳ１に戻る（ステップＳ９）。
【００４５】
（２）複数経路への分散処理の例
経路が冗長化されている場合、パケットの転送にいずれの経路を使用するかは、スイッチ１０において、ヘッダの中の値を用いて決定される。このため、冗長化されたシステムにおいて通信装置２０が検査パケットを送信すると、送信した検査パケットは、複数の経路のいずれかを介して宛先の通信装置２０に送信される。以下、図７を参照しながら、転送経路の決定方法を説明する。
【００４６】
図７のパケットＰ２１は転送されるパケットの例である。パケットＰ２１のヘッダ中の情報のうち、宛先ＭＡＣアドレス、送信元ＭＡＣアドレス、送信元ＩＰアドレス、宛先ＩＰアドレス、プロトコル、送信元ポート番号、宛先ポート番号が経路決定に使用される。経路決定に使用する情報を、図７のＨに示す。複数の経路が経由しているスイッチ１０は、経路決定に使用する情報をつなげて得られるビット列から計算されるハッシュ値を、そのスイッチ１０を経由している経路数で割ったときに得られる剰余に対応付けて、出力先を記憶している。このため、スイッチ１０は、得られた剰余の値に応じて、パケットの転送先を決定する。ネットワーク中のスイッチ１０が同様の処理を行うので、パケットの転送経路は、複数の経路に分散される。
【００４７】
以下では、分散処理の例を見やすくするために、図４に示すネットワークよりも通信装置２０やスイッチ１０の数の小さいネットワークを例として使用する。例えば、通信装置２０ｍ、通信装置２０ｎ、通信装置２０ｐ、通信装置２０ｑの４つの通信装置２０が、スイッチ１０（ＳＷ２１〜ＳＷ２４）を介してケースＣ１に示すように接続されているとする。この状態で通信装置２０ｍから通信装置２０ｐにパケットを送信する場合、転送経路は、ＳＷ２１、ＳＷ２３、ＳＷ２２を介して通信装置２０ｐに至る経路と、ＳＷ２１、ＳＷ２４、ＳＷ２２を介して通信装置２０ｐに至る経路の２通りがある。通信装置２０ｍからパケットが送信されると、ＳＷ２１は、パケットＰ２１のＨに示す情報のハッシュ値を経路数２で割ったときの剰余を求める。ＳＷは、得られた剰余に応じて、矢印αと矢印βの一方を転送経路として選択する。例えば、矢印αが剰余＝０に対応付けられ、矢印βが剰余＝１に対応付けられているとする。ここで、パケットＰ２１のヘッダから計算したハッシュ値を用いて得られた剰余が０の場合、パケットＰ２１は、ＳＷ２１からＳＷ２３に転送されるので、ＳＷ２１、ＳＷ２３、ＳＷ２２を介して、通信装置２０ｐに転送される。一方、パケットＰ２１のヘッダから計算したハッシュ値を用いて得られた剰余が１の場合、パケットＰ２１は、ＳＷ２１からＳＷ２４に転送されるので、ＳＷ２１、ＳＷ２４、ＳＷ２２を介して、通信装置２０ｐに転送される。
【００４８】
図８は、検査パケットと応答パケットの転送経路の例を説明する図である。転送経路の決定方法は、検査パケット以外のいずれのパケットでも同様である。例えば、検査パケットの宛先の通信装置２０から応答パケットが送信される場合も同様の処理により経路が決定される。
【００４９】
例えば、通信装置２０ａから送信された検査パケットが、矢印Ｒ２１に示すように、ＳＷ１、ＳＷ３、ＳＷ９、ＳＷ７、ＳＷ６を介して、通信装置２０ｇに到達したとする。一方、通信装置２０ｇは、検査パケットに応答する２つの応答パケットであって、互いに送信元ポート番号の異なるパケットを生成して、通信装置２０ａに向けて送信したとする。この場合も、個々の応答パケットは、図７を参照しながら説明した処理と同様の処理により、経路分散される。例えば、１つの応答パケットは、矢印Ｒ２２に示すように、ＳＷ６、ＳＷ８、ＳＷ１０、ＳＷ４、ＳＷ１を介して、通信装置２０ａに到達する経路で転送されたとする。一方、もう１つの応答パケットは、矢印Ｒ２３に示すように、ＳＷ６、ＳＷ７、ＳＷ９、ＳＷ３、ＳＷ１を介して、通信装置２０ａに至る経路で転送され得る。
【００５０】
（３）検査パケットの受信処理と応答パケットの送信処理
図９に示す検査パケットＰ３１は、通信装置２０ｇ宛に通信装置２０ａから送信された検査パケットであるとする。通信装置２０ｇの受信部２２ｇは、検査パケットＰ３１を受信すると、検査パケットＰ３１を分類部２３ｇに出力する。分類部２３ｇは、検査パケットＰ３１中の宛先ポート番号が検査用ポート番号であるので、検査パケットＰ３１を応答部３３ｇと判定部３５ｇに出力する。判定部３５ｇは、検査パケットＰ３１のＵＤＰペイロード中のタイプフィールドの値がＲｅｑｕｅｓｔであるので、処理対象ではないと判定して処理を終了する。
【００５１】
応答部３３ｇは、検査パケットＰ３１のＵＤＰペイロード中のタイプフィールドの値がＲｅｑｕｅｓｔであるので、検査パケットＰ３１を用いて、応答パケットを生成するために使用するベースを生成する。
【００５２】
図９は、応答パケットのベースの生成方法の例を説明する図である。応答パケットのベースＰ３２では、宛先ＭＡＣアドレスとして、検査パケットＰ３１の送信元ＭＡＣアドレスが使用され、宛先ＩＰアドレスとして、検査パケットＰ３１の送信元ＩＰアドレスが使用される。さらに、応答パケットのベースＰ３２では、送信元ＭＡＣアドレスとして、検査パケットＰ３１の宛先ＭＡＣアドレスが使用され、送信元ＩＰアドレスとして、検査パケットＰ３１の宛先ＩＰアドレスが使用される。応答パケットに設定する送信元ポート番号の値は、応答パケットごとに異なる値に設定されるが、ベースＰ３２には適宜、送信元ポート番号が設定される。例えば、ベースＰ３２には、検査パケットの送信元ポート番号が設定され得る。応答パケットのベースＰ３２でも、宛先ポート番号として検査用ポート番号が使用され、ＵＤＰペイロード中のＩＤとして、検査パケットのＵＤＰペイロード中の値が使用される。さらに、応答パケットのベースＰ３２では、タイプフィールドがＲｅｓｐｏｎｓｅに設定される。応答部３３ｇは、生成したベースＰ３２を複製部３４ｇに出力する。
【００５３】
図１０は、応答パケットの生成方法の例を説明する図である。図１０を参照しながら応答パケットＰ４１〜Ｐ４３が生成される場合に行われる処理の例を説明する。複製部３４ｇは、予め、１つの検査パケットに対して生成する応答パケットの数（応答数）を記憶している。複製部３４ｇは、応答数と同数の送信元ポート番号を決定し、決定した送信元ポート番号を用いて、個々の応答パケットを生成する。さらに、個々の応答パケットのデータに、応答数と、各応答パケットに含まれている送信元ポート番号を含める。複製部３４ｇは、ベースＰ３２中の送信元ポート番号を用いた演算により、送信元ポート番号を決定しても良い。
【００５４】
例えば、図１０の例では、複製部３４ｇは、応答パケットＰ４１に使用する送信元ポート番号は、ベースＰ３２中の送信元ポート番号ｐｎ１である。複製部３４ｇは、応答パケットＰ４２に使用する送信元ポート番号を、ｐｎ１に所定の数を加算して得られるｐｎ２に設定したとする。さらに、複製部３４ｇは、応答パケットＰ４３に使用する送信元ポート番号を、応答パケットＰ４２の送信元ポート番号ｐｎ２に所定の数を加算して得られるｐｎ３に設定したとする。複製部３４ｇは、応答パケットＰ４１〜Ｐ４３のＵＤＰペイロード中に、応答数と各応答パケットＰ４１〜Ｐ４３の送信元ポート番号のリスト｛ｐｎ１、ｐｎ２、ｐｎ３｝を含める。複製部３４ｇは、生成した応答パケットＰ４１〜Ｐ４３の各々を、送信部２１ｇを介して通信装置２０ａ宛に送信する。
【００５５】
なお、いずれの応答パケットにおいても、送信元ポート番号以外の値は、応答パケットのベースＰ３２に設定された値が使用されるので、送信元ポート番号以外の値は応答パケット間で差が無い。このため、パケットＰ４１〜Ｐ４３のいずれか１つが検査パケットの送信元に到達すると、検査パケットの送信元の通信装置２０では、送信された応答パケットの総数や送信された応答パケットの各々でのヘッダ情報を復元できる。
【００５６】
図１１は、通信装置２０でのパケットの受信処理の例を説明するフローチャートである。通信装置２０の受信部２２は、パケットを受信するまで待機する（ステップＳ２１でＮｏ）。パケットを受信すると、受信部２２は、受信したパケットを分類部２３に出力する（ステップＳ２１でＹｅｓ）。分類部２３は、受信したパケットの宛先ポート番号が検査用ポート番号であるかを判定する（ステップＳ２２）。受信したパケットの宛先ポート番号が検査用ポート番号ではない場合、受信したパケットは、検査パケットではなく、応答パケットでもないので、データ処理部２４で処理される（ステップＳ２２でＮｏ、ステップＳ２３）。受信パケットの宛先ポート番号が検査用ポート番号である場合、分類部２３は、受信パケットを、判定部３５と応答部３３に出力する（ステップＳ２２でＹｅｓ）。判定部３５と応答部３３の各々は、入力されたパケットのタイプフィールドの値がＲｅｓｐｏｎｓｅに設定されているかを判定する（ステップＳ２４）。入力されたパケットのタイプフィールドの値がＲｅｓｐｏｎｓｅではない場合、応答部３３は、検査パケットの受信時の処理を行う（ステップＳ２５）。検査パケットの受信時の処理の一例は、図９、図１０を参照しながら説明した処理である。一方、入力されたパケットのタイプフィールドの値がＲｅｓｐｏｎｓｅである場合、判定部３５は、応答パケットの受信時の処理を行う（ステップＳ２６）。応答パケットの受信時の処理については後述する。ステップＳ２５またはステップＳ２６の処理後、ステップＳ２１以降の処理が繰り返される。
【００５７】
図１２は、検査パケットの受信と応答パケットの送信の際の処理の例を説明するフローチャートである。図１２は、図１１のステップＳ２５の処理の一例である。図１２では、応答パケットベースでは送信元ポート番号が０に設定されており、応答パケットベースとは別に、検査パケットの送信元ポート番号が複製部３４に通知される場合について説明する。応答部３３は、検査パケットを用いて、応答パケットを生成するために使用する応答パケットベースを生成する（ステップＳ３１）。応答パケットベースでは、宛先ＭＡＣアドレスとして、検査パケットの送信元ＭＡＣアドレスが使用され、宛先ＩＰアドレスとして、検査パケットの送信元ＩＰアドレスが使用される。送信元ＭＡＣアドレスには自ノードのＭＡＣアドレスが設定され、送信元ＩＰアドレスには自ノードに割り当てられたＩＰアドレスが使用される。送信元ポート番号（ｓｒｃｐｏｒｔ）は０に設定され、宛先ポート番号は検査用ポート番号に設定される。プロトコルはＵＤＰに設定され、ＩＤは検査パケットのＩＤに設定される。また、設定タイプはＲｅｓｐｏｎｓｅに設定される。さらに、応答パケットの総数（ｒｅｓｐＮｕｍ）は０に設定される。
【００５８】
複製部３４は、変数ｎを応答数に設定すると共に、変数ｐを検査パケットの送信元ポート番号に設定した上で、送信ポート番号リスト（ＳＬ）を初期化する（ステップＳ３２）。なお、送信ポート番号リストは、応答パケットの生成に使用する送信元ポート番号のリストである。複製部３４は、変数ｎが０であるかを判定する（ステップＳ３３）。変数ｎが０でない場合、複製部３４は、送信ポート番号リストに変数ｐを追加する（ステップＳ３３でＮｏ、ステップＳ３４）。複製部３４は、変数ｐを１つインクリメントし、変数ｎを１つデクリメントした後に、ステップＳ３３に戻る（ステップＳ３５）。複製部３４は、変数ｎが０である場合、応答数分の送信元ポート番号を生成したと判定する（ステップＳ３３でＹｅｓ）。そこで、複製部３４は、応答パケットのベースを用いて、応答数と送信ポート番号リストを設定したＵＤＰペイロードを生成する（ステップＳ３６）。
【００５９】
ステップＳ３７において、複製部３４は、送信ポート番号リスト（ＳＬ）に対するポップ処理により、得られた値を、変数ｐｎに設定する。さらに、複製部３４は、応答パケットベースとＵＤＰペイロードを合わせて生成した応答パケットの送信元ポート番号に、変数ｐｎを設定し、設定処理後の応答パケットを送信する（ステップＳ３７）。複製部３４は、送信ポート番号リストにデータが含まれているかを判定する（ステップＳ３８）。送信ポート番号リストにデータが含まれている場合、ステップＳ３７以降の処理が繰り返される（ステップＳ３８でＮｏ）。一方、送信ポート番号リストにデータが含まれていない場合、複製部３４は、応答パケットの送信が終了したと判定して、処理を終了する（ステップＳ３８でＹｅｓ）。
【００６０】
（４）応答パケットの受信
通信装置２０ｇから応答パケットＰ４１〜Ｐ４３が通信装置２０ａ宛に送信された後に、通信装置２０ａが応答パケットを受信した場合を例として、応答パケットを受信した通信装置２０の処理の例を説明する。通信装置２０ａにおいて、分類部２３ａは受信部２２ａを介して受信パケットを取得する。分類部２３ａは、受信したパケットに検査用ポート番号が使用されていることから、受信したパケットを、応答部３３ａと判定部３５ａに出力する。
【００６１】
応答部３３ａは、応答パケットのタイプ値がＲｅｓｐｏｎｓｅであることから、入力されたパケットの処理を行わないことを決定する。一方、判定部３５ａは、応答パケットのタイプ値がＲｅｓｐｏｎｓｅであることから、応答パケットを処理対象と認識する。
【００６２】
図１３は、応答パケットの受信処理の例を説明するフローチャートである。図１３は、図１１のステップＳ２６の処理の一例である。図１３を参照しながら、判定部３５ａでの処理の例を説明する。判定部３５ａは、受信した応答パケットの送信元ＩＰアドレスとＩＤを用いて、検査パケットテーブル３６から処理対象のエントリを特定する（ステップＳ４１）。例えば、通信装置２０ａが検査パケットテーブル３６−１（図５）を保持していて、通信装置２０ｇからＩＤ＝１を含む応答パケットを受信したとする。また、通信装置２０ｇのＩＰアドレスはＩＰｇであるとする。すると、判定部３５ａは、検査パケットテーブル３６−１の１番目のエントリを処理対象として特定する。
【００６３】
判定部３５ａは、処理対象のエントリで受信応答数＝０に設定されているかを判定する（ステップＳ４２）。受信応答数＝０のエントリは、これまでに応答パケットを受信していない検査パケットに関するエントリである。そこで、受信応答数＝０のエントリが処理対象の場合、判定部３５ａは、応答数と応答リストを、応答パケット中の値に設定し、受信リストを初期化する（ステップＳ４３）。例えば、判定部３５ａに入力された応答パケットが応答パケットＰ４１（図１０）であるとする。すると、判定部３５ａは、処理対象のエントリに、応答数＝３、応答リスト＝｛ｐｎ１，ｐｎ２，ｐｎ３｝を記録する。すなわち、ステップＳ４３の処理では、応答パケットのデータから、受信した応答パケット以外の他の応答パケットの情報を取得している。また、他の応答パケットは、受信した応答パケットと同じ検査パケットに対する応答として送信されたパケットである。
【００６４】
処理対象のエントリでの受信応答数が１以上である場合とステップＳ４３の処理後に、判定部３５ａは、処理対象のエントリで受信応答数を１つインクリメントし、受信リストに応答パケット中の送信元ポート番号を追加する（ステップＳ４４）。例えば、判定部３５ａに入力された応答パケットが応答パケットＰ４１（図１０）である場合、ステップＳ４３の処理後に、判定部３５ａは、受信応答数を１に設定し、受信リストに、応答パケットＰ４１の送信元ポート番号ｐｎ１を追加する。このため、これらの処理が終わると、検査パケットテーブル３６−１の１番目のエントリは、図１４に示す検査パケットテーブル３６−２の１番目のエントリに示すように変更される。
【００６５】
その後、判定部３５ａは、受信応答数が応答数と同じになったかを判定する（ステップＳ４５）。受信応答数が応答数と同じになっていない場合、判定部３５ａは処理を終了する（ステップＳ４５でＮｏ）。この場合、新たにパケットを受信すると、図１１〜図１３を用いて説明した処理が繰り返される。一方、受信応答数が応答数と同じになった場合、判定部３５ａは、検査対象の経路に異常が無いことを示す判定（合格判定）を出力し、処理対象のエントリを検査パケットテーブル３６から消去する（ステップＳ４５でＹｅｓ、ステップＳ４６）。
【００６６】
図１４に示す検査パケットテーブル３６−２の２番目のエントリは、応答パケットの受信によって、受信応答数が応答数と同じになった場合の例である。すると、判定部３５ａは、ＩＰｆというＩＰアドレスが割り当てられている通信装置２０ｆから通信装置２０ａに送信された応答パケットの全てが通信装置２０ａに到達したと判定する。このため、判定部３５ａは、通信装置２０ｆと通信装置２０ａの間の通信経路には、物理ネットワーク上では、障害が発生していないと判定する。判定部３５ａは、判定結果を通信装置２０ａが保持する表示装置に出力する。なお、判定部３５ａは、判定結果を送信部２１ａ経由で、オペレータが操作している端末に送信しても良い。このため、オペレータは、通信装置２０ｆと通信装置２０ａの間の通信に対して、物理ネットワークの障害は発生していないと判定されたことを認識できる。従って、オペレータは、通信装置２０ｆ上で動作する仮想マシンと通信装置２０ａ上で動作する仮想マシンの間の通信に障害が発生している場合、仮想ネットワークの障害により、障害が発生していると判定できる。
【００６７】
（５）パケットが消失した経路の問い合わせ
パケットが消失した経路の特定に先立ち、タイマ処理の例を説明する。タイマ処理は、検査パケットに対する全ての応答パケットの受信を完了していない、検査パケットテーブルの全てのエントリに対して実行される。
【００６８】
図１５は、タイマ処理の例を説明するフローチャートである。図１５では、変数ＥとＩを用いる。変数Ｅは処理対象のエントリの特定に使用し、変数Ｉは処理済のエントリ数の計数に使用する。判定部３５は、ハードウェアタイマを監視しており、ハードウェアタイマのタイムアウトを待ち合わせる（ステップＳ５１）。判定部３５は、検査パケットテーブル３６の先頭のエントリＥ０を取得した上で、ＥにＥ０を代入し、変数Ｉを０に設定する（ステップＳ５２）。判定部３５は、エントリＥのタイマを１つデクリメントする（ステップＳ５３）。なお、エントリＥのタイマは、エントリＥ中のタイマフィールドの値である。判定部３５は、エントリＥのタイマが０になっているかを判定する（ステップＳ５４）。エントリＥのタイマが０になっていない場合、判定部３５は、検査パケットテーブル３６から、Ｅの次のエントリＥｎを取得し、ＥにＥｎを代入する。さらに、判定部３５は、変数Ｉを１つインクリメントする（ステップＳ５４でＮｏ、ステップＳ５５）。判定部３５は、変数Ｉが有効エントリ数未満であるかを判定する（ステップＳ５８）。変数Ｉが有効エントリ数未満の場合、ステップＳ５３以降の処理が繰り返される（ステップＳ５８でＹｅｓ）。一方、変数Ｉが有効エントリ数以上の場合、ステップＳ５１以降の処理が繰り返される（ステップＳ５８でＮｏ）。
【００６９】
エントリＥのタイマが０になっている場合、判定部３５は、エントリＥの宛先までの経路のうち、障害の発生している経路を、管理装置８０に問い合わせる（ステップＳ５４でＹｅｓ、ステップＳ５６）。ステップＳ５６で行われる処理の詳細については後述する。その後、判定部３５は、Ｅの次のエントリＥｎを取得し、エントリＥを消去する。さらに、判定部３５は、ＥにＥｎを代入し、変数Ｉを１つインクリメントする（ステップＳ５７）。その後、ステップＳ５８以降の処理が行われる。
【００７０】
図１６は、応答パケットの消失例を説明する図である。図１６を参照しながら、図１５のステップＳ５６の処理の例を説明する。例えば、通信装置２０ｇから通信装置２０ａに向けて送信されたパケットＰ４１〜Ｐ４３のうち、パケットＰ４２が転送経路で消失したとする。すると、判定部３５ａは、検査パケットテーブル３６−２の１番目のエントリのタイマ値が０になった時点でも、送信ポート番号＝ｐｎ２の応答パケットを受信していないと判定する。すると、判定部３５ａは、受信済みの応答パケットの情報と、受信に失敗した応答パケット中の送信元ポート番号の値ｐｎ２を用いて、受信に失敗した応答パケットのヘッダ情報を生成する。判定部３５ａは、生成したヘッダ情報で特定される経路で障害が発生していると判定して、生成したヘッダ情報を問い合わせリストに含める。
【００７１】
パケットＰ４４は、経路の解析を管理装置８０に要求する際に判定部３５が使用するパケット（解析要求パケット）である。パケットＰ４４は、ＩＰヘッダ、ＴＣＰ（Transmission Control Protocol）ヘッダ、問い合わせリスト、問い合わせタイプを含む。問い合わせリストは、通信装置２０が受信していない応答パケットのヘッダ情報のリストである。なお、問い合わせリスト中に含まれるヘッダの数は任意である。問い合わせタイプは、応答パケットの受信に失敗したことに起因した問い合わせであるか、応答パケットの受信状況とは関係なく行われた問い合わせであるかを判定する値である。パケットが消失した経路の問い合わせの際には、問い合わせタイプ＝パケットロス発生経路に設定される。なお、応答パケットの受信状況とは関係なく行われた問い合わせの場合、問い合わせタイプ＝問い合わせに設定される。
【００７２】
図１６を参照しながら、検査パケットの送信元が応答パケットの一部を受信していない場合を例として説明したが、検査パケットの送信元が検査パケットの送信から所定の時間が経過しても応答パケットを１つも受信しない可能性もある。このような場合は、検査パケットが宛先に到達していない可能性が高いので、判定部３５は、検査パケットのヘッダ情報で特定される経路で障害が発生していると判定する。なお、検査パケットのヘッダの情報は、検査パケットテーブル３６に記録されている情報から再現できる。このため、判定部３５は、検査パケットは、検査パケットのヘッダ情報を問い合わせリストに含めた上で、管理装置８０に経路を問い合わせる。
【００７３】
図１７は、経路の問い合わせ処理の例を説明するフローチャートである。図１７は、図１５のステップＳ５６の処理を詳細に示したものである。判定部３５は、問い合わせリスト（ＱＬ）を初期化する（ステップＳ６１）。判定部３５は、検査パケットテーブル３６中でタイマが０になったエントリを処理対象とする。検査パケットテーブル３６中の処理対象のエントリの宛先ＩＰアドレスを用いて、ＡＲＰテーブルから検査パケットの宛先ＭＡＣアドレス（ＭＡＣ１）を取得する（ステップＳ６２）。判定部３５は、エントリ中の受信応答数が０であるかを判定する（ステップＳ６３）。
【００７４】
エントリ中の受信応答数が０である場合、検査パケットの宛先の通信装置２０から１つも応答パケットを受信していないので、判定部３５は、検査パケットの転送経路に障害があると判定する（ステップＳ６３でＹｅｓ）。そこで、判定部３５は、問い合わせの対象のヘッダ情報Ｈを、検査パケット中のヘッダとする（ステップＳ６４）。すなわち、判定部３５は、ヘッダ情報Ｈにおいて、送信元ＭＡＣアドレスと送信元ＩＰアドレスを自装置のアドレスとし、宛先ＩＰアドレスを処理対象のエントリ中の宛先ＩＰアドレスとする。判定部３５は、ステップＳ６２で求めたＭＡＣ１を、ヘッダ情報Ｈでの宛先ＭＡＣアドレスに設定する。さらに、判定部３５は、ヘッダ情報Ｈにおいて、送信元ポート番号を処理対象のエントリに含まれている送信元ポート番号とし、宛先ポート番号を検査用ポート番号に設定する。その後、判定部３５は、問い合わせリストＱＬに、生成したヘッダ情報Ｈを追加し、問い合わせリストＱＬを用いて経路問い合わせを実施する（ステップＳ６５、Ｓ７０）。このとき、判定部３５は、問い合わせリストを含む解析要求パケットを生成して、送信部２１を介して、管理装置８０に向けて送信する。
【００７５】
エントリ中の受信応答数が０ではない場合、検査パケットの宛先の通信装置２０から送信された応答パケットの一部を受信しているので、判定部３５は、受信に失敗した応答パケットの転送経路に障害があると判定する（ステップＳ６３でＮｏ）。受信に失敗した応答パケットのヘッダに含まれている送信元ポート番号は、処理対象のエントリの応答リストに含まれているが、受信リストには含まれていない。そこで、判定部３５は、処理対象のエントリの応答リストと受信リストの差分（Ｓｄ）を生成する（ステップＳ６６）。例えば、図１６のケースでは、通信装置２０ｇから送信された応答パケットのうちＰ４１とＰ４３が通信装置２０ａで受信されている。このため、応答リストは｛ｐｎ１，ｐｎ２，ｐｎ３｝であるのに対し、受信リストは｛ｐｎ１，ｐｎ３｝である。従って、Ｓｄ＝ｐｎ２となる。なお、１つ以上の応答パケットの受信に失敗した場合、Ｓｄには複数の送信元ポート番号が含まれる。
【００７６】
次に、判定部３５は、受信に失敗した応答パケットのヘッダ情報の生成に使用するテンプレートを生成する。すなわち、判定部３５は、テンプレートにおいて、宛先ＭＡＣアドレスと宛先ＩＰアドレスを自装置のアドレスとし、送信元ＩＰアドレスを処理対象のエントリ中の宛先ＩＰアドレスとする。判定部３５は、ステップＳ６２で求めたＭＡＣ１を、テンプレートでの送信元ＭＡＣアドレスに設定する。さらに、判定部３５は、テンプレートでは、送信元ポート番号を０とし、宛先ポート番号を検査用ポート番号に設定する（ステップＳ６７）。その後、判定部３５は、差分Ｓｄ中の未処理の送信ポート番号の１つをテンプレートに含め、得られたヘッダ情報を、問い合わせリストＱＬに追加する（ステップＳ６８）。判定部３５は、差分Ｓｄの中で未処理のポート番号が無いかを判定する（ステップＳ６９）。差分Ｓｄの中で未処理のポート番号がある場合、判定部３５は、ステップＳ６８に戻る（ステップＳ６９でＮｏ）。差分Ｓｄの中で未処理のポート番号がない場合、判定部３５は、問い合わせリストＱＬを用いて経路問い合わせを実施する（ステップＳ６９でＹｅｓ、Ｓ７０）。この場合の経路の問い合わせも、解析要求パケット（図１６のＰ４４）を用いて行われても良い。
【００７７】
（６）管理装置８０での処理の例
管理装置８０は、解析要求パケットを受信すると、解析要求パケットで通知された問い合わせ対象のヘッダ情報と同じヘッダを有するパケットの転送経路を特定する。なお、管理装置８０は、予め、ネットワークのトポロジ情報と、各スイッチ１０での経路の選択処理のアルゴリズムを保持しており、特定したヘッダ情報とアルゴリズムを用いて、転送経路を特定する。例えば、管理装置８０は、経路中に含まれているスイッチ１０の各々について、パケットが経由する順に、スイッチ１０の識別情報、スイッチ１０へのパケットの入力ポートおよび出力ポートを並べた情報を、経路情報として生成できる。管理装置８０は、得られた経路情報を、解析要求パケットの送信元に送信する。
【００７８】
図１８は、経路の問い合わせを受信した管理装置８０での処理の例を説明するフローチャートである。管理装置８０は、解析処理を行う対象となるヘッダ情報のリスト（解析対象リスト）を保持しているとする。さらに、管理装置８０は、解析結果を経路情報として保持できるとする。
【００７９】
管理装置８０は、解析要求パケットを受信したかを判定する（ステップＳ８１）。管理装置８０は、解析要求パケットから問い合わせリストを抽出すると、解析対象リストに問い合わせリストを代入し、経路情報ＲＬを初期化する（ステップＳ８２）。管理装置８０は、解析対象リストに未処理のヘッダ情報があるかを判定する（ステップＳ８３）。解析対象リストに未処理のヘッダ情報がある場合、管理装置８０は、処理対象のヘッダ情報を解析対象リストから選択する（ステップＳ８３でＹｅｓ、ステップＳ８４）。管理装置８０は、選択したヘッダ情報を用いて、経路特定処理を行う（ステップＳ８５）。その後、処理対象のヘッダ情報と得られた経路の組み合わせを経路情報ＲＬに追加し、ステップＳ８３に戻る（ステップＳ８６）。解析対象リストに未処理のヘッダ情報が無い場合、管理装置８０は、経路情報ＲＬを、解析要求パケットの送信元に送信し、ステップＳ８１に戻る（ステップＳ８３でＮｏ、ステップＳ８７）。
【００８０】
図１９は、管理装置８０での経路の特定処理の例を説明するフローチャートである。図１９は、図１８のステップＳ８５の処理の例である。図１９の処理によって生成される経路情報は、問い合わせ対象のヘッダを有するパケットの送信元ノードから受信ノードに至る経路を以下の形式で表わす文字列であるとする。｛送信元ノードのＩＤ，（スイッチ１０のＩＤ，スイッチ１０の入力ポート，スイッチ１０の出力ポート），・・・・，宛先ノードのＩＤ｝。
【００８１】
管理装置８０は、処理対象のヘッダ情報Ｈを選択するまで経路特定処理は行わない（ステップＳ９１でＮｏ）。管理装置８０は、処理対象のヘッダ情報Ｈを選択すると、トポロジ情報とヘッダ情報Ｈ中の送信元アドレスを用いて、パケットの送信元ノードを特定し、経路情報に送信元ノードの情報を追加する（ステップＳ９１でＹｅｓ、ステップＳ９２）。なお、ステップＳ９２において、送信元アドレスとして、送信元ＭＡＣアドレスと送信元ＩＰアドレスの１つ以上が使用され得る。次に、管理装置８０は、トポロジ情報とヘッダ情報Ｈ中の宛先アドレスを用いて、パケットの宛先ノードを特定する（ステップＳ９３）。なお、ステップＳ９３においても、宛先アドレスとして、宛先ＭＡＣアドレスと宛先ＩＰアドレスの１つ以上が使用され得る。管理装置８０は、トポロジ情報を用いて、送信元ノードが直接接続されるスイッチ１０のＩＤと、そのスイッチへのパケットの入力ポート番号Ｐｉｎと取得する（ステップＳ９４）。管理装置８０は、特定したスイッチの出力ポートグループ情報を特定する（ステップＳ９５）。ここで、ポートグループ情報は、特定したスイッチ１０において、処理対象のヘッダを有するパケットがＰｉｎから入力された場合の出力先となり得るポート番号の組み合わせである。管理装置８０は、特定したスイッチ１０の分散アルゴリズムから出力ポートＰｏｕｔを特定する（ステップＳ９６）。ステップＳ９６において、式（１）が使用されうる。
Ｐｏｕｔに対応する剰余＝Ｆ（ｈ，Ｍ）・・・（１）
式（１）において、ｈはヘッダ情報Ｈのハッシュ値である。Ｆは剰余算を表わし、ｈは剰余算での被除数となる。Ｍはポートグループ情報中に含まれるポート数であり、剰余算での除数として用いられる。管理装置８０は、各スイッチ１０において、剰余算によって得られる値と、出力ポートとして使用するポートの関係も、予め、アルゴリズムの一部として保持しているとする。
【００８２】
管理装置８０は、経路情報に、特定したスイッチ１０の識別子（Ｓｗ）、パケットの入力ポート（Ｐｉｎ）、パケットの出力ポート（Ｐｏｕｔ）を、組み合わせて追加する（ステップＳ９７）。管理装置８０は、トポロジ情報を用いて、出力先の装置を特定する（ステップＳ９８）。管理装置８０は、出力先の装置が宛先ノードであるかを判定する（ステップＳ９９）。出力先の装置が宛先ノードではない場合、特定した出力先の装置はスイッチ１０である（ステップＳ９９でＮｏ）。そこで、管理装置８０は、特定したスイッチへの、ヘッダ情報Ｈのヘッダを有するパケットの入力ポートＰｉｎを特定すると、ステップＳ９５以降の処理を繰り返す。（ステップＳ１００）。
【００８３】
一方、出力先の装置が宛先ノードである場合、経路の終点まで検索したことになる（ステップＳ９９でＹｅｓ）。そこで、管理装置８０は、経路情報に、宛先ノードのＩＤを追加する（ステップＳ１０１）。
【００８４】
例えば、通信装置２０ａで受信に失敗した応答パケットＰ４２（図１６）が、図８の矢印Ｒ２２に示すように、ＳＷ６、ＳＷ８、ＳＷ１０、ＳＷ４、ＳＷ１を介して、通信装置２０ａに至る経路で転送されていたとする。管理装置８０は、応答パケットＰ４２の転送経路が問合わせられると、矢印Ｒ２２の経路中の各スイッチの識別子、入力ポート、出力ポートの組み合わせを経路として通信装置２０ａに通知する。例えば、管理装置８０で生成される経路情報は、ポート番号を「Ｐｏ」という文字列にポート番号を続けて記載すると、以下のように表わせる。
【００８５】
｛通信装置２０ｇ，（ＳＷ６，Ｐｏ２，Ｐｏ４），（ＳＷ８，Ｐｏ２，Ｐｏ３），（ＳＷ１０，Ｐｏ２，Ｐｏ１），（ＳＷ４，Ｐｏ３，Ｐｏ１），（ＳＷ１，Ｐｏ４，Ｐｏ１），通信装置２０ａ｝
【００８６】
以上説明したように、第１の実施形態によると、検査パケットを受信した通信装置２０は、検査パケットに応答する複数の応答パケットを生成し、各応答パケットに他の応答パケットのヘッダ情報を含める。このため、検査パケットの送信元の通信装置２０は、複数の応答パケットのうちの１つでも受信すると、受信していない応答パケットのヘッダを特定できる。さらに、受信していない応答パケットのヘッダの情報を用いて、障害の発生した経路を特定できる。また、検査パケットの送信元の通信装置２０は、いずれの応答パケットも受信しない場合、送信した検査パケットの転送経路に障害が発生したと判定できる。従って、経路が冗長化された状態で障害の発生している経路の特定が容易になる。
【００８７】
さらに、検査パケットを受信した通信装置２０が、検査パケットの宛先から全ての応答パケットを受信できた場合、物理ネットワークに対する障害が発見されていない。この場合、検査パケットの送信元の通信装置２０上で動作する仮想マシンと、応答パケットの送信元の端末装置２０上で動作する仮想マシンの間の通信障害は、仮想ネットワークでの問題に起因すると判定できる。
【００８８】
このように、第１の実施形態を用いると、物理ネットワーク上に仮想ネットワークが生成されているシステムでの障害が、物理ネットワークと仮想ネットワークのいずれの障害に起因しているかの切り分けも容易になる。このため、障害からの復旧が容易になる。
【００８９】
＜第２の実施形態＞
第１の実施形態では、通信装置２０において、異なるヘッダを有する複数の応答パケットを送信するが、応答パケットのうちの一部が同じ経路を通る場合もあり得る。そこで、第２の実施形態では、複数の応答パケットを送信する通信装置が、経路の分散状況を学習する場合について説明する。
【００９０】
図２０は、第２の実施形態にかかる通信装置５０の構成の例を説明する図である。通信装置５０は、送信部２１、受信部２２、分類部２３、データ処理部２４、検査部５１を備える。検査部５１は、生成部３１、記憶部３２、応答部３３、複製部５４、判定部３５、学習部５２を有する。記憶部３２は検査パケットテーブル３６を格納し、学習部５２は学習テーブル５３を有する。
【００９１】
学習部５２は、応答パケットの各々について、使用される転送経路を管理装置８０に問い合わせる。学習部５２は、管理装置８０から得られた経路の情報を用いて、複数の応答パケット間で同じ経路を経由しているものがあるかを判定する。複数の応答パケットの転送経路の分散や重複の状態を特定し、分散した経路に送信される応答パケットのヘッダ情報を学習テーブル５３に記録する。複製部５４は、学習テーブル５３中に記録されたヘッダ情報を用いて、複数の応答パケットを生成する。
【００９２】
送信部２１、受信部２２、分類部２３、データ処理部２４、生成部３１、記憶部３２、応答部３３、判定部３５での処理と、検査パケットテーブル３６は、第２の実施形態でも第１の実施形態と同様である。
【００９３】
通信装置５０のハードウェア構成も図３に示すとおりである。通信装置５０を実現するプロセッサは、分類部２３、データ処理部２４、生成部３１、応答部３３、判定部３５、学習部５２、複製部５４として動作する。なお、学習テーブル５３は、適宜、メモリ１０２に格納される。
【００９４】
図２１は、応答パケットの生成方法の例を説明する図である。図２１では、通信装置５０ａ〜５０ｆがスイッチ１０（ＳＷ３１〜ＳＷ３６）を介してケースＣ１１に示すように接続されているとする。さらに、図２１では、図を見やすくするために記載していないが、管理装置８０は、ネットワーク中の各通信装置５０およびスイッチ１０と制御用の回線で接続されているとする。
【００９５】
ケースＣ１１に示すネットワークで通信装置５０ａから通信装置５０ｆに検査パケットが送信され、第１の実施形態と同様の処理により、通信装置５０ｆに検査パケットが到達したとする。通信装置５０ｆ中の応答部３３ｆは、第１の実施形態と同様に応答パケットのベースを生成する。通信装置２０ｆが通信装置５０ａから初めて検査パケットを受信した場合、複製部５４ｆは第１の実施形態と同様の処理により、複数の応答パケットを生成する。例えば、複製数が４である場合、複製部５４ｆは、４つの応答パケットを生成する。生成された応答パケットの各々では、送信元ポート番号の値が互いに異なっている。図２１の例では、生成された応答パケット中の送信元ポート番号として、ｓｐ３１、ｓｐ３２、ｓｐ３３、ｓｐ３４のいずれかが使用されているとする。複製部５４ｆは、生成した４つの応答パケットを、送信部２１ｆを介して送信する。
【００９６】
その後、複製部５４ｆは、生成した４つの応答パケットの各々のヘッダ情報を含む解析要求パケットを生成する。この場合にはパケットロスが発生していないので、複製部５４ｆは、解析要求パケットの問い合わせタイプを「問い合わせ」に設定する。複製部５４ｆは、解析要求パケットを、送信部２１ｆ経由で管理装置８０に送信する。
【００９７】
管理装置８０での解析処理と解析結果の通知処理は、第１の実施形態で説明した処理と同様である。ただし、第２の実施形態では、経路を通知する通知パケットの宛先ポート番号には、検査用ポート番号が指定されているとする。管理装置８０での解析の結果、ケースＣ１１に示すとおりに応答パケットが転送されていることが特定されたとする。ここで、経路Ｒ３１は、送信元ポート番号＝ｓｐ３１の応答パケットが転送された経路である。経路Ｒ３２は送信元ポート番号＝ｓｐ３２に設定された応答パケットの転送経路であり、経路Ｒ３３は送信元ポート番号＝ｓｐ３３に設定された応答パケットの転送経路である。さらに、経路Ｒ３４は、送信元ポート番号＝ｓｐ３４の応答パケットが転送された経路である。
【００９８】
管理装置８０から経路の通知が通信装置５０ｆに送信されたとする。分類部２３ｆは、受信部２２ｆを介して通知パケットを取得し、宛先ポート番号に従って、通知パケットを、応答部３３ｆ、判定部３５ｆ、学習部５２ｆに出力する。応答部３３ｆと判定部３５ｆは、通知パケットを処理対象としない。
【００９９】
学習部５２ｆは、通知パケットを取得すると、通知パケットで通知された経路とヘッダ情報の組み合わせを用いて、各応答パケットに対する転送経路を特定する。学習部５２ｆは、ケースＣ１１に示すように、送信元ポート番号＝ｓｐ３１の応答パケットと送信元ポート番号＝ｓｐ３２の応答パケットが、いずれも、通信装置５０ｆからＳＷ３３、ＳＷ３４、ＳＷ３１を介して通信装置５０ａに到達すると判定する。さらに、学習部５２ｆは、送信元ポート番号＝ｓｐ３３の応答パケットと送信元ポート番号＝ｓｐ３４の応答パケットが、いずれも、通信装置５０ｆからＳＷ３３、ＳＷ３６、ＳＷ３１を介して通信装置５０ａに到達すると判定する。学習部５２ｆは、以後に通信装置５０ａから検査パケットを受信したときに、複数の応答パケットを、なるべく異なる経路を介して転送するために、経路が重複しない送信元ポート番号を転送経路と共に、学習テーブル５３ｆに記録する。
【０１００】
学習テーブル５３−１は、ケースＣ１１に示す経路が得られた場合に生成される学習テーブル５３ｆの例である。学習テーブル５３−１は、エントリごとに、宛先、分散リスト、経路リスト、ｎｅｘｔ値を含む。宛先は、応答パケットの宛先である。ケースＣ１１では、通信装置５０ａ宛に応答パケットが送信されているので、宛先は通信装置５０ａのＩＰアドレス（ＩＰ５０ａ）に設定される。分散リストは、応答パケットの経路が互いに重複しないように選択した送信元ポート番号のリストである。ケースＣ１１では、送信元ポート番号＝ｓｐ３１の応答パケットと送信元ポート番号＝ｓｐ３２の応答パケットの転送経路が重複しているので、ｓｐ３１とｓｐ３２の一方が、分散リストに含められる。さらに、送信元ポート番号＝ｓｐ３３の応答パケットと送信元ポート番号＝ｓｐ３４の応答パケットの転送経路が重複しているので、ｓｐ３３とｓｐ３４の一方が、分散リストに含められる。学習テーブル５３−１の例では、分散リストには、ｓｐ３１とｓｐ３３が記録されている。
【０１０１】
経路リストは、分散リスト中の各送信元ポート番号を用いたときに使用される転送経路のリストである。学習テーブル５３−１の例では、分散リストにｓｐ３１とｓｐ３３が記録されているので、経路リストには、Ｒ３１とＲ３３が記録される。ｎｅｘｔ値は、複製部５４がこれまでに使用していない送信元ポート番号を用いて応答パケットを生成する場合に、最初に使用する値である。ケースＣ１１に示すように転送処理が行われた際には、ｓｐ３１〜ｓｐ３４が送信元ポート番号として使用されている。そこで、学習部５２ｆは、ｓｐ３５をｎｅｘｔ値に設定する。
【０１０２】
次に、図２１の処理の後に、再度、通信装置５０ｆが通信装置５０ａから検査パケットを受信した場合について説明する。この場合も、応答パケットを生成する際の応答パケットのベースの生成は、応答部３３ｆによって、第１の実施形態と同様に行われる。
【０１０３】
複製部５４ｆは、分散リスト中の送信元ポート番号を用いて、応答パケットを生成する。学習テーブル５３−１を使用した場合、複製部５４ｆは、送信元ポート番号＝ｓｐ３１の応答パケットと、送信元ポート番号＝ｓｐ３３の応答パケットを生成する。この段階で、学習テーブル５３−１中の送信元ポート番号を使用した応答パケットの生成は終わっているが、応答パケットの総数は２つであり、応答数である４に届いていない。このように、分散リスト中の送信元ポート番号の全てを用いて応答パケットを生成しても、応答数の応答パケットを生成していない場合、複製部５４ｆは、ｎｅｘｔ値を新たなポート番号として、応答パケットを生成する。学習テーブル５３−１では、ｎｅｘｔ値＝ｓｐ３５である。そこで、複製部５４ｆは、送信元ポート番号＝ｓｐ３５の応答パケットと、送信元ポート番号＝ｓｐ３６の応答パケットを生成する。複製部５４ｆは、生成した４つの応答パケットを、送信部２１ｆ経由で送信する。その後、複製部５４ｆは、生成した４つの応答パケットのうち、新規に生成された２つの応答パケットの各々のヘッダ情報を用いて、管理装置８０に転送経路を問い合わせる。
【０１０４】
図２２のケースＣ１２は、学習テーブル５３−１を用いて生成された応答パケットの転送経路の例を説明する図である。経路Ｒ３１は、送信元ポート番号＝ｓｐ３１の応答パケットが転送された経路であり、経路Ｒ３３は送信元ポート番号＝ｓｐ３３に設定された応答パケットの転送経路である。経路Ｒ３５は、送信元ポート番号＝ｓｐ３５の応答パケットが転送された経路である。さらに、経路Ｒ３６は、送信元ポート番号＝ｓｐ３６の応答パケットが転送された経路である。学習部５２ｆは、問合わせた経路情報を含む通知パケットを管理装置８０から取得すると、図２１を参照しながら説明した処理と同様の処理により、各応答パケットに対する転送経路を特定するとともに、学習テーブル５３を更新する。例えば、送信元ポート番号＝ｓｐ３５の応答パケットの転送経路はいずれの応答パケットとも重複していないので、学習部５２ｆは、送信元ポート番号＝ｓｐ３５を分散リストに含め、経路Ｒ３５を経路リストに追加する。一方、送信元ポート番号＝ｓｐ３６の応答パケットと送信元ポート番号＝ｓｐ３１の応答パケットの転送経路が重複しており、送信元ポート番号＝ｓｐ３１の情報が学習テーブル５３に記録さている。このため、学習部５２ｆは、送信元ポート番号＝ｓｐ３６の応答パケットの転送経路や送信元ポート番号を学習テーブル５３に追加しない。さらに、学習部５２ｆは、通信装置５０ａ宛の応答パケットに使用可能な送信元ポート番号のｎｅｘｔ値を、ｓｐ３７に更新する。このように、学習部５２ｆの処理により、学習テーブル５３−１（図２１）は、学習テーブル５３−２（図２２）に示すように更新される。
【０１０５】
なお、図２１と図２２を参照しながら説明した処理では、応答パケットを送信する通信装置５０から応答数分の応答パケットが送信されているが、第２の実施形態では、応答数の他に、最小応答数が設定されていても良い。最小応答数は、異なる経路を通って送信できることが確認されている応答パケットだけを用いて応答する際に適用可能な応答パケットの送信数であり、応答数よりも小さな値である。このため、分散リスト中の送信元ポート番号の数が最小応答数を超えている場合は、分散リスト中の送信元ポート番号を用いて、最小応答数と同数の応答パケットが生成される。異なる経路を通って送信できることが確認されている応答パケットを最小応答数と同数だけ送信しない場合には、重複した経路での応答パケットの送信が行われている可能性があるため、応答数分の応答パケットが送信される。
【０１０６】
図２３は、応答パケットの生成方法の例を説明するフローチャートである。図２３は、応答数の他に、最小応答数（ＲＮｍｉｎ）が設定されている場合に行われる処理の例を示す。
【０１０７】
複製部５４は、送信元ポートリストと問い合わせリストを初期化する（ステップＳ１１１）。複製部５４は、学習テーブル５３に、応答パケットの宛先に対応するエントリがあるかを判定する（ステップＳ１１２）。応答パケットの宛先に対応するエントリが無い場合、複製部５４は、変数ｎを応答数に設定すると共に、変数ｐを応答パケットベースの送信元ポート番号（ＳＰ）に設定する（ステップＳ１１３）。複製部５４は、変数ｎが０であるかを判定する（ステップＳ１１４）。変数ｎが０ではない場合、応答数分の応答パケットの生成に使用する送信元ポート番号の決定が終わっていない（ステップＳ１１４でＮｏ）。そこで、複製部５４は、送信元ポート番号を、変数ｐに設定したヘッダ情報を、問い合わせリストに追加する（ステップＳ１１５）。複製部５４は、送信元ポートリストに、変数ｐを追加する（ステップＳ１１６）。複製部５４は、変数ｐを１つインクリメントし、さらに、変数ｎを１つデクリメントする（ステップＳ１１７）。ステップＳ１１７の後、ステップＳ１１４に戻る。
【０１０８】
変数ｎが０であると判定されると、複製部５４は、応答パケットのＵＤＰペイロード中に、生成される応答パケットの数と送信元ポートリストを含める（ステップＳ１２５）。複製部５４は、応答パケットベースと、ステップＳ１２５で設定したＵＤＰペイロードを用いて、送信元ポートリストから選択した値を送信元ポート番号にした応答パケットを送信する（ステップＳ１２６）。複製部５４は、送信ポート番号リストに未使用のデータが含まれているかを判定する（ステップＳ１２７）。送信ポート番号リストに未使用のデータが含まれている場合、複製部５４は、ステップＳ１２６の処理に戻る（ステップＳ１２７でＹｅｓ）。送信ポート番号リストに未使用のデータが含まれていない場合、複製部５４は、問い合わせリストにデータが含まれているかを判定する（ステップＳ１２７でＮｏ、ステップＳ１２８）。問い合わせリストにデータが含まれていない場合、複製部５４は処理を終了する（ステップＳ１２８でＮｏ）。問い合わせリストにデータが含まれている場合、複製部５４は学習処理を行って、処理を終了する（ステップＳ１２８でＹｅｓ、ステップＳ１２９）。
【０１０９】
次に、学習テーブル５３に応答パケットの宛先に対応するエントリがある場合について説明する（ステップＳ１１２でＹｅｓ）。この場合、複製部５４は、変数ｎを最小応答数（ＲＮｍｉｎ）に設定すると共に、処理対象のエントリの分散リストを、テンポラリリストに代入する。（ステップＳ１１８）。複製部５４は、変数ｎが０であるかを判定する（ステップＳ１１９）。
【０１１０】
変数ｎが０ではない場合、最小応答数分の応答パケットの生成に使用する送信元ポート番号の決定が終わっていない（ステップＳ１１９でＮｏ）。そこで、複製部５４は、テンポラリリストから選択した値を、送信元ポートリストに追加し、変数ｎを１つデクリメントする（ステップＳ１２０）。複製部５４は、テンポラリリストに未処理のポート番号があるかを判定する（ステップＳ１２１）。テンポラリリストに未処理のポート番号がある場合、複製部５４は、ステップＳ１１９以降の処理を繰り返す（ステップＳ１２１でＹｅｓ）。一方、テンポラリリストに未処理のポート番号がない場合、複製部５４は、変数ｎが０であるかを判定する（ステップＳ１２１でＮｏ、ステップＳ１２３）。変数ｎが０ではない場合、最小応答数分の応答パケットの生成に使用する送信元ポート番号の決定が終わっていない（ステップＳ１２３でＮｏ）。しかし、このケースでは、テンポラリリストの全ての値を使用している。すなわち、送信元ポートリスト中の値は、最小応答数よりも小さかったことになる。複製部５４は、異なる経路を介して転送されることが確認されている応答パケットのヘッダ情報の数は最小応答数を下回っていることから、応答数分の応答パケットを生成することを決定する。このため、複製部５４は、変数ｎを応答数から、今までに決定された送信元ポート番号の総数（ＲＮｍｉｎ−ｎ）を差し引いた値に設定するとともに、変数ｐを、学習テーブル５３の処理対象のエントリ中のｎｅｘｔ値に設定する（ステップＳ１２４）。なお、ステップＳ１２４において、変数ｎに代入される値は、応答数をＲＮとすると、ＲＮ−（ＲＮｍｉｎ−ｎ）と表記できる。ステップＳ１２４の後、複製部５４は、ステップＳ１１５以降の処理を行う。一方、ステップＳ１１９かステップＳ１２３において変数ｎが０であると判定した場合、複製部５４は、ステップＳ１２５以降の処理を行う。
【０１１１】
図２４は、経路の分散状況の学習の際に行われる処理の例を説明するフローチャートである。学習部５２は、管理装置８０への経路問い合わせの結果を取得する（ステップＳ１４１）。学習部５２は、学習テーブル５３から、最後に送信した応答パケットの宛先ＩＰアドレスに対応するエントリの情報を取得する（ステップＳ１４２）。学習部５２は、取得した結果のうちで未処理のデータがあるかを判定する（ステップＳ１４３）。学習部５２は、経路問い合わせの結果のうち、処理対象のヘッダと経路の組み合わせを、未処理の組合せから選択する（ステップＳ１４４）。学習部５２は、ステップＳ１４３で取得したエントリの経路リスト中に、選択した経路が含まれているかを判定する（ステップＳ１４５）。エントリの経路リスト中に選択した経路が含まれている場合、学習部５２は、そのエントリ中の分散リスト中のいずれかの値を用いて生成した応答パケットの転送経路と重複した経路の情報が処理対象になっていると判定する（ステップＳ１４５でＹｅｓ）。このため、学習部５２は、選択した経路の情報を学習テーブル５３に記録せずに、ステップＳ１４３に戻る。
【０１１２】
エントリの経路リスト中に選択した経路が含まれていない場合、学習部５２は、そのエントリ中の分散リスト中の値を用いて生成した応答パケットの転送経路と重複しない経路の情報を処理対象として選択したと判定する（ステップＳ１４５でＮｏ）。そこで、学習部５２は、取得したエントリの分散リストに、ステップＳ１４４で選択したヘッダ中の送信元ポート番号を追加し、経路リストに選択した経路を追加し、ステップＳ１４３に戻る（ステップＳ１４６）。
【０１１３】
経路問い合わせの結果に含まれているデータの全てについての処理が終わると、学習部５２は、学習テーブル５３において、処理対象のエントリのｎｅｘｔフィールドの値を更新する（ステップＳ１４３でＮｏ、ステップＳ１４７）。
【０１１４】
このように、第２の実施形態にかかる通信装置５０は、通信装置５０が送信した応答パケットの転送経路の解析結果を用いて、転送経路が重複しない応答パケットを生成するために使用可能な送信元ポート番号のリストを生成できる。このため、所定の数の応答パケットを、なるべく経路が重複しないように、検査パケットの送信元に送信できるので、物理ネットワーク中の障害の有無を効率的に判定することができる。
【０１１５】
＜第３の実施形態＞
図２５は、第３の実施形態で行われる通信の例を説明する図である。第３の実施形態では、検査パケットの送信元が、検査パケットの宛先に到達可能な複数の経路の状況を判定するために、複数の検査パケットを送信する。図２５に示すネットワークでは、複数の通信装置６０（６０ａ〜６０ｈ、６０ｗ〜６０ｚ）が、スイッチ１０（ＳＷ１〜ＳＷ１６）を介して接続されている。このようなネットワークで、通信装置６０ａが通信装置６０ｚとの間の通信経路の状況を判定するために、複数の検査パケットを送信したとする。図２５に示すように、通信装置６０ａから通信装置６０ｚに宛てた４つの検査パケットが、経路Ｒ４１、経路Ｒ４２、経路Ｒ４３、経路Ｒ４４の各々を介して、通信装置６０ｚに到達したとする。
【０１１６】
このように、複数の検査パケットが送信される場合に、検査パケットを受信した通信装置６０ｘが第１および第２の実施形態と同様の処理を行うと、応答パケットの数が膨大になるおそれがある。そこで、第３の実施形態では、複数の検査パケットに対する応答を１つの応答パケットにまとめる場合について説明する。なお、第３の実施形態でも、応答パケットの消失が送信側の通信装置６０ａで認識されるように、通信装置６０ｚは、複数の検査パケットに対する応答を含む複数の応答パケットを送信する。
【０１１７】
図２６は、第３の実施形態にかかる通信装置６０の構成の例を説明する図である。通信装置６０は、送信部２１、受信部２２、分類部２３、データ処理部２４、検査部６１を備える。検査部６１は、複製部６２、記憶部６３、判定部６６、応答部６７を備える他、生成部３１、記憶部３２、複製部３４を有する。記憶部３２は、検査パケットテーブル６５を格納する。
【０１１８】
複製部６２は、生成部３１で生成された検査パケットを複製すると共に、複製した検査パケット中の送信元ポート番号を変更する。このとき、複製部６２は、複数の検査パケットの間で送信元ポート番号を互いに異なるように設定する。記憶部６３は、受信状況テーブル６４を保持する。受信状況テーブル６４は、検査パケットの受信状況を記録している。応答部６７は、検査パケットの受信状況を受信状況テーブル６４に記録し、応答パケットを送信する条件が整うと、応答パケットのベースを生成する。第３の実施形態では、記憶部３２は、検査パケットテーブル３６の代わりに検査パケットテーブル６５を保持している。検査パケットテーブル６５は、検査パケットテーブル３６に含まれている情報の他、検査パケットの到達情報も含む。検査パケットテーブル６５は、適宜、生成部３１、複製部６２、判定部６６によって更新される。判定部６６は、検査パケットの到達状況と応答パケットの受信状況を用いて、応答パケットや検査パケットの転送経路に障害が発生しているかを判定する。
【０１１９】
通信装置６０のハードウェア構成も図３に示すとおりである。通信装置６０を実現するプロセッサは、分類部２３、データ処理部２４、生成部３１、応答部６７、判定部６６、複製部３４、複製部６２として動作する。なお、記憶部６３は、適宜、メモリ１０２によって実現される。
【０１２０】
以下、第３の実施形態を、検査パケットの送信時の処理、検査パケットを受信した通信装置６０での処理、応答パケットの受信時の処理に分けて説明する。
【０１２１】
（Ａ）検査パケットの送信時の処理
図２７は、第３の実施形態で使用される検査パケットの例を説明する図である。第３の実施形態で使用される検査パケットは、Ｅｔｈｅｒヘッダ、ＩＰヘッダ、ＵＤＰヘッダ、ＵＤＰペイロードを含む。Ｅｔｈｅｒヘッダ、ＩＰヘッダ、ＵＤＰヘッダに含まれる情報要素は、図５を参照しながら説明した検査パケットと同様である。ＵＤＰペイロードは、ＩＤフィールド、タイプフィールド、検査数フィールドを含む。検査数は、宛先の通信装置６０とＩＤフィールドの値の組合せが同じ検査パケットの総数である。ＩＤフィールドとタイプフィールドは、図５を参照しながら説明した検査パケットと同様である。
【０１２２】
図２７に示すパケットＰ５１〜Ｐ５３は、宛先の通信装置６０とＩＤフィールドの値の組合せが同じ検査パケットの例である。第３の実施形態では、宛先の通信装置６０とＩＤフィールドの値の組合せが同じ複数の検査パケットの各々で、送信元ポート番号が異なるように設定される。例えば、検査パケットＰ５１中の送信元ポート番号はｓｐ１であり、検査パケットＰ５２中の送信元ポート番号はｓｐ２、検査パケットＰ５３中の送信元ポート番号はｓｐ３である。
【０１２３】
図２８は、検査パケットテーブル６５の例を説明する図である。検査パケットテーブル６５は、検査パケット情報、応答パケット情報、タイマフィールドを含む。検査パケット情報は、通信装置６０自身が送信した検査パケットの情報であり、宛先ＩＰアドレスフィールド、ＩＤフィールド、検査数フィールド、検査リストフィールド、到達検査数フィールド、到達リストフィールドを含む。宛先ＩＰアドレスフィールドには、検査パケットの宛先のＩＰアドレスが格納され、ＩＤフィールドには、検査パケットのＩＤが格納される。検査数フィールドには、宛先ＩＰアドレスとＩＤ値が同じ検査パケットの総数が記録される。検査リストフィールドには、エントリ中の宛先ＩＰアドレスとＩＤ値の組み合わせを有する検査パケットで使用された送信元ポート番号のリストが格納される。
【０１２４】
到達検査数は、宛先の通信装置６０に所定の期間中に到達した検査パケットの総数であり、到達リストフィールドには、宛先の通信装置６０に所定の期間中に到達した検査パケットに含まれている送信元ポートアドレスのリストが格納される。到達検査数と到達リストは、いずれも、応答パケットから取得される情報であり、これらの情報の取得方法については後述する。
【０１２５】
応答パケット情報とタイマフィールドは、図５を参照しながら説明した検査パケットテーブル３６中の応答パケット情報やタイマフィールドと同様である。
【０１２６】
図２９は、検査パケットの送信処理の例を説明するフローチャートである。図２９において、ＳｅｑＩＤは、検査パケットのＩＤとして使用する値を表わす変数であり、通信装置６０の初期化の際には、ＳｅｑＩＤ＝０に設定されている。
【０１２７】
生成部３１は、検査指示の入力があるまで待機する（ステップＳ１５１でＮｏ）。生成部３１は、検査指示の入力を検出すると、検査指示に含まれている宛先ＩＰアドレス（ＩＰα）とＡＲＰテーブルから、宛先となる通信装置６０のＭＡＣアドレス（ＭＡＣα）を特定する（ステップＳ１５１でＹｅｓ、ステップＳ１５２）。
【０１２８】
生成部３１は、複数の検査パケットの生成に使用される検査パケットベースを生成する（ステップＳ１５３）。検査パケットベースでは、宛先ＭＡＣアドレスはステップＳ１５２で求めた宛先の通信装置６０のＭＡＣアドレス（ＭＡＣα）に設定され、宛先ＩＰアドレスは生成指示で指定されたＩＰアドレス（ＩＰα）に設定される。検査パケットの送信元ＭＡＣアドレスと送信元ＩＰアドレスは、検査パケットの送信元の通信装置２０に割り当てられた値が設定され、プロトコルはＵＤＰが指定される。検査パケットベース中の送信元ポート番号は、０などの無効値に設定される。宛先ポート番号は検査用ポート番号に設定され、ＩＤはＳｅｑＩＤの値に設定される。さらに、検査パケット中のタイプフィールドには、Ｒｅｑｕｅｓｔが設定され、検査数と検査リストは初期化されている。
【０１２９】
複製部６２は、検査パケットベースが生成されると、検査パケットベースを用いて、検査パケットの生成と検査パケットの送信処理を行う（ステップＳ１５４）。その後、生成部３１は、ＳｅｑＩＤを１つインクリメントして、ステップＳ１５１に戻る。
【０１３０】
図３０は、検査パケットの複製処理の例を説明するフローチャートである。図３０は、図２９のステップＳ１５４の処理の詳細の例である。図３０では、送信元ポート番号に使用される値のリストの生成の際に、送信元ポートリストを使用する。送信元ポートリストは、複製部６２が保持するリストである。
【０１３１】
複製部６２は、送信元ポート番号ｐを生成し、変数ｎを検査数に設定する。さらに、送信元ポートリストを初期化する（ステップＳ１６１）。複製部６２は、変数ｎが０であるかを判定する（ステップＳ１６２）。変数ｎが０ではない場合、複製部６２は、送信する検査パケットの数と同数の送信元ポート番号が生成されていないと判定する（ステップＳ１６２でＮｏ）。そこで、複製部６２は、送信元ポートリストに、生成した送信元ポート番号ｐを追加する。さらに、ｐを１つインクリメントし、変数ｎを１つデクリメントする（ステップＳ１６３）。ステップＳ１６３の処理の後、ステップＳ１６２以降の処理が行われる。
【０１３２】
一方、変数ｎが０である場合、複製部６２は、送信する検査パケットの数と同数の送信元ポート番号が生成されたと判定する（ステップＳ１６２でＹｅｓ）。複製部６２は、検査パケットベースと送信元ポートリストを用いて、検査パケットテーブル６５に、検査パケットの情報を記録する（ステップＳ１６４）。ステップＳ１６４において、検査パケットテーブル６５中の検査リストには、送信元ポートリストの内容が記録される。例えば、通信装置６０中の複製部６２ａが通信装置６０ｚ宛の検査パケット用の送信元ポート番号として、ｓｐ１、ｓｐ２、ｓｐ３、ｓｐ４を生成したとする。すると、複製部６２ａは、検査パケットテーブル６５ａの宛先ＩＰアドレスを通信装置６０ｚのＩＰアドレス（ＩＰ６０ｚ）に設定し、検査数を４、検査リストを｛ｓｐ１，ｓｐ２，ｓｐ３，ｓｐ４｝とする。さらに、複製部６２ａは、ＩＤの値も検査パケットテーブル６５ａに記録する。このため、通信装置６０ａから通信装置６０ｚに送信される検査パケットに対する情報が記録されると、図２８の１番目のエントリの情報が記録される。
【０１３３】
複製部６２は、送信元ポートリストから選択した値を送信元ポート番号とした検査パケットを生成すると共に、検査パケットを、送信部２１経由で送信する（ステップＳ１６５）。複製部６２は、送信処理に使用したポート番号を送信元ポートリストから削除する（ステップＳ１６６）。複製部６２は、未送信のポート番号が送信元ポートリストに含まれているかを判定する（ステップＳ１６７）。未送信のポート番号が送信元ポートリストに含まれている場合、複製部６２は、ステップＳ１６５以降の処理を繰り返す（ステップＳ１６７でＹｅｓ）。未送信のポート番号が送信元ポートリストに含まれていない場合、複製部６２は、検査パケットテーブル６５のタイマフィールドにタイマ値を設定すると共に、タイマを起動する（ステップＳ１６７でＮｏ、ステップＳ１６８）。
【０１３４】
（Ｂ）検査パケットを受信した通信装置６０での処理
通信装置６０ｚの受信部２２ｚは、通信装置６０ａから送信された検査パケットを受信したとする。受信部２２ｚは、受信した検査パケットを分類部２３ｚに出力する。分類部２３ｚは、検査パケット中の宛先ポート番号が検査用ポート番号であるので、検査パケットＰ３１を応答部６７ｚと判定部６６ｚに出力する。応答部６７ｚは、検査パケットの受信状況を、受信状況テーブル６４ｚに記録する。
【０１３５】
図３１は、受信状況テーブル６４の例を説明する図である。受信状況テーブル６４は、検査パケットの受信状況の記録に使用される。受信状況テーブル６４は、送信元ＩＰアドレスフィールド、ＩＤフィールド、ヘッダ情報フィールド、検査数フィールド、受信検査数フィールド、受信リストフィールド、タイマフィールドを含む。応答部６７ｚは、検査パケットの送信元ＩＰアドレスを送信元ＩＰアドレスフィールドに記録し、検査パケット中のＩＤをＩＤフィールドに記録する。応答部６７ｚは、検査パケットのヘッダ情報をヘッダ情報フィールドに記録すると共に、検査パケットのＵＤＰペイロード中の検査数を検査数フィールドに記録する。さらに、応答部６７ｚは、検査パケットが入力されるたびに、入力された検査パケットの送信元ＩＰアドレスとＩＤの組み合わせを含むエントリ中の受信検査数を１つインクリメントし、入力された検査パケット中の送信元ポート番号を受信リストに追加する。
【０１３６】
例えば、通信装置６０ａから通信装置６０ｚに宛てて送信された４つの検査パケットのうち、送信元ポート番号＝ｓｐ１とｓｐ２の検査パケットが通信装置６０ｚで受信されたとする。この場合、応答部６７ｚの処理により、図３１に示す受信状況テーブル６４の１番目のエントリの情報が記録される。なお、通信装置６０ａに割り当てられたＩＰアドレスはＩＰ６０ａであるとする。図３１に示すように、受信状況テーブル６４では、通信装置６０から送信された複数の検査パケットの受信結果が、送信元ＩＰアドレスとＩＤの組み合わせごとにまとめて管理される。
【０１３７】
図３２は、検査パケットの受信処理の例を説明するフローチャートである。検査パケットが入力されると、応答部６７は、検査パケットの送信元アドレスとＩＤを用いて、受信状況テーブル６４を検索し、検査パケットの送信元アドレスとＩＤを含む処理対象のエントリが存在するかを判定する（ステップＳ１７１、Ｓ１７２）。処理対象のエントリが存在しない場合、応答部６７は、受信状況テーブル６４に、新たなエントリを生成する（ステップＳ１７２でＮｏ、ステップＳ１７３）。さらに、応答部６７は、生成したエントリの送信元ＩＰフィールド、ＩＤフィールド、検査数フィールドの各々に、検査パケットから得られる情報を記録すると共に、検査パケットのヘッダをヘッダ情報フィールドに格納する。さらに、応答部６７は、新たに生成したエントリの受信検査数を０に設定し、受信リストを初期化する。その後、新たに生成したエントリにタイマ値を設定し、タイマを起動する（ステップＳ１７４）。
【０１３８】
応答部６７は、処理対象のエントリで、受信検査数を１つインクリメントし、受信リストに検査パケットの送信元ポート番号を追加する（ステップＳ１７５）。応答部６７は、受信検査数と検査数が同じであるかを判定する（ステップＳ１７６）。受信検査数と検査数が同じではない場合、未受信の検査パケットがあるので、応答部６７は処理を終了する（ステップＳ１７６でＮｏ）。
【０１３９】
一方、受信検査数と検査数が同じになると、応答部６７は、処理中の検査パケットの送信元とＩＤの組み合わせで特定される検査パケットは、全て受信したと判定する（ステップＳ１７６でＹｅｓ）。そこで、応答部６７は応答パケットベースを生成し、複製部３４は応答パケットの送信処理を行う（ステップＳ１７７）。その後、応答部６７は、応答パケットの宛先から送信された検査パケットについてのエントリを、受信状況テーブル６４から削除する（ステップＳ１７８）。
【０１４０】
ステップＳ１７２において処理対象のエントリが検索された場合も、ステップＳ１７５以降の処理が行われる。
【０１４１】
図３２のステップＳ１７６〜Ｓ１７８を参照しながら、検査パケットの送信元とＩＤの組み合わせが同じ全ての検査パケットを受信した後で応答パケットが送信されることを説明した。しかし、所定期間中に全ての検査パケットを受信しない場合でも、タイムアウトが発生すると応答パケットが送信される。以下、タイムアウト処理について説明する。
【０１４２】
図３３は、タイマ処理の例を説明するフローチャートである。なお、図３３は一例であり、実装に応じて、ステップＳ１８２とＳ１８３の順序は、互いに変更され得る。ハードウェアタイマのタイムアウトが発生すると、記憶部３２でのタイマ処理が行われる（ステップＳ１８１、Ｓ１８２）。記憶部３２でのタイマ処理により、検査パケットテーブル６５でのタイマの値が小さくなる。検査パケットテーブル６５は、自装置が検査パケットを送信したときに使用するテーブルである。従って、ステップＳ１８２での処理は、図１５のステップＳ５２〜Ｓ５８を参照しながら説明した処理と同様である。次に、記憶部６３でのタイマ処理が行われる（ステップＳ１８３）。記憶部６３でのタイマ処理により、受信状況テーブル６４でのタイマの値が小さくなる。受信状況テーブル６４は、他の通信装置６０から送信された検査パケットを受信したときに使用するテーブルである。ステップＳ１８３での処理の詳細を、図３４を参照しながら説明する。
【０１４３】
図３４は、タイマ処理の例を説明するフローチャートである。応答部６７は、受信状況テーブル６４の先頭のエントリＥ０を取得した上で、ＥにＥ０を代入し、変数Ｉを０に設定する（ステップＳ１９１）。応答部６７は、エントリＥのタイマを１つデクリメントし、エントリＥのタイマが０になっているかを判定する（ステップＳ１９２、Ｓ１９３）。
【０１４４】
ステップＳ１９３において、エントリＥのタイマが０になっていない場合、応答部６７は、受信状況テーブル６４から、Ｅの次のエントリＥｎを取得し、ＥにＥｎを代入する。さらに、応答部６７は、変数Ｉを１つインクリメントする（ステップＳ１９３でＮｏ、ステップＳ１９４）。応答部６７は、変数Ｉが有効エントリ数未満かを判定する（ステップＳ１９７）。変数Ｉが有効エントリ数未満である場合、ステップＳ１９２以降の処理が繰り返される（ステップＳ１９７でＹｅｓ）。一方、変数Ｉが有効エントリ数以上の場合、応答部６７は処理を終了する（ステップＳ１９７でＮｏ）。
【０１４５】
ステップＳ１９３において、エントリＥのタイマが０になっている場合、応答部６７と複製部３４は、エントリＥに含まれている送信元ＩＰアドレスに宛てた応答パケットの送信処理を行う（ステップＳ１９５）。ステップＳ１９５で行われる処理の詳細については後述する。その後、応答部６７は、Ｅの次のエントリＥｎを取得し、エントリＥを消去する。さらに、応答部６７は、ＥにＥｎを代入し、変数Ｉを１つインクリメントする（ステップＳ１９６）。その後、ステップＳ１９７以降の処理が行われる。
【０１４６】
図３５は、応答パケットのベースの生成処理の例を説明するフローチャートである。応答部６７は、受信状況テーブル６４から応答パケットの送信先の情報を含むエントリを読み込む（ステップＳ２０１）。応答パケットの送信先の情報を含むエントリは、送信元とＩＤの組み合わせが同じ全ての検査パケットを受信したことが確認された検査パケットのエントリか、図３４のステップＳ１９５に示すようにタイムアウトしたエントリである。
応答部６７は、読み込んだエントリの情報を用いて、応答パケットベースを生成する（ステップＳ２０２）。応答パケットベースでは、宛先ＭＡＣアドレスとして、読み込んだエントリ中のヘッダ情報に含まれている送信元ＭＡＣアドレスが使用され、宛先ＩＰアドレスとして、検査パケットの送信元ＩＰアドレスが使用される。送信元ＭＡＣアドレスには自ノードのＭＡＣアドレスが設定され、送信元ＩＰアドレスには自ノードに割り当てられたＩＰアドレスが使用される。送信元ポート番号は０に設定され、宛先ポート番号は検査用ポート番号に設定される。プロトコルはＵＤＰに設定され、ＩＤは検査パケットのＩＤに設定される。また、設定タイプはＲｅｓｐｏｎｓｅに設定される。さらに、応答パケットの総数は０に設定される。さらに、読み込んだエントリ中の受信検査数と受信リストも応答パケットベースに含められる。生成された応答パケットベースの例を、図３６のＰ６１に示す。
【０１４７】
図３６は、応答パケットベースと、応答パケットの例を説明する図である。Ｐ６１に示す応答パケットベースは、通信装置６０ｚが通信装置６０ａから送信された４つの検査パケットを受信できた場合に、応答部６７ｚで生成される応答ベースの例である。Ｐ６１では受信検査数＝４で、受信した検査パケット中の送信元ポート番号は、ｓｐ１、ｓｐ２、ｓｐ３、ｓｐ４である。応答部６７ｚは、生成した応答パケットベースを複製部３４に出力する。
【０１４８】
Ｐ６１に示すように、応答パケットベースには、複数の検査パケットの受信状況が記録される。このため、応答パケットベースを用いて生成される応答パケットの各々には、応答パケットに含まれている受信状況を示す情報が記録される。換言すると、第３の実施形態で用いられる応答パケットには、複数の検査パケットの受信状況が含まれているので、通信装置６０は、複数の検査パケットに対する応答を１つの応答パケットにまとめているといえる。
【０１４９】
図３６の例では、複製部３４ｚは、３つの応答パケットを通信装置６０ａに向けて送信することを決定したとする。複製部３４ｚは、応答パケットベースＰ６１のうちの、送信元ポート番号を応答パケットごとに設定すると共に、ＵＤＰペイロード中に、各応答パケットでの送信元ポート番号のリストと、応答パケットの総数（応答数）を追加する。複製部３４ｚの処理により、応答パケットＰ６２〜Ｐ６４が生成される。応答パケットの生成の際の処理の詳細は、図１２を参照しながら説明したステップＳ３２〜Ｓ３８と同様である。複製部３４ｚは、送信部２１ｚを介して、生成した応答パケットＰ６２〜Ｐ６４を、通信装置６０ａに向けて送信する。
【０１５０】
（Ｃ）応答パケットの受信時の処理
通信装置６０ｚから応答パケットＰ６２〜Ｐ６４が通信装置６０ａ宛に送信された後に、通信装置６０ａが応答パケットを受信した場合を例として、応答パケットを受信した通信装置６０の処理の例を説明する。
【０１５１】
図３７は、応答パケットの受信処理の例を説明するフローチャートである。分類部２３ａは、受信部２２ａが受信した応答パケットを、判定部６６ａと応答部６７ａに出力する。判定部６６ａは、入力された応答パケットの送信元ＩＰアドレスとＩＤを用いて、検査パケットテーブル３６から処理対象のエントリを特定する（ステップＳ２１１）。
【０１５２】
判定部６６ａは、処理対象のエントリで受信応答数＝０が設定されているかを判定する（ステップＳ２１２）。受信応答数＝０のエントリは、これまでに応答パケットを受信していない検査パケットに関するエントリである。そこで、受信応答数＝０のエントリが処理対象の場合、判定部６６ａは、処理対象のエントリ中の到達検査数、到達リスト、応答数、応答リストの各々を、応答パケット中の値に設定し、受信リストを初期化する（ステップＳ２１３）。例えば、判定部６６ａに入力された応答パケットが応答パケットＰ６３（図３６）であるとする。すると、判定部６６ａは、処理対象のエントリを以下の情報を含む状態にする。
【０１５３】
宛先ＩＰアドレス：ＩＰ６０ｚ（通信装置６０ｚ）
ＩＤ            ：１
検査数          ：４
検査リスト      ：｛ｓｐ１，ｓｐ２，ｓｐ３，ｓｐ４｝
到達検査数      ：４
到達リスト      ：｛ｓｐ１，ｓｐ２，ｓｐ３，ｓｐ４｝
応答数          ：３
応答リスト      ：｛ｐｎ２１，ｐｎ２２，ｐｎ２３｝
【０１５４】
処理対象のエントリでの受信応答数が１以上である場合とステップＳ２１３の処理後に、判定部６６ａは、処理対象のエントリで受信応答数を１つインクリメントし、受信リストに応答パケット中の送信元ポート番号を追加する（ステップＳ２１４）。例えば、判定部６６ａに入力された応答パケットが応答パケットＰ６３（図３６）である場合、ステップＳ２１３の処理後に、判定部６６ａは、受信応答数を１に設定し、受信リストに、応答パケットＰ６３の送信元ポート番号ｐｎ２２を追加する。
【０１５５】
その後、判定部６６ａは、受信応答数が応答数と同じになったかを判定する（ステップＳ２１５）。受信応答数が応答数と同じになっていない場合、判定部６６ａは処理を終了する（ステップＳ２１５でＮｏ）。この場合、新たに応答パケットを受信すると、図３７の処理が繰り返される。一方、受信応答数が応答数と同じになった場合、判定部６６ａは、全ての応答パケットを受信したと判定して、検査パケットの到達状況を用いた判定処理を行う（ステップＳ２１５でＹｅｓ、ステップＳ２１６）。その後、判定部６６ａは、処理対象のエントリを検査パケットテーブル６５から消去する（ステップＳ２１７）
図３８は、検査パケットテーブル６５の例を説明する図である。検査パケットテーブル６５の１つ目のエントリは、通信装置６０ｚ宛にＩＤ＝１を用いて送信した検査パケットの送信元ポート番号のリスト、検査パケットの到達情報、通信装置６０ｚからの応答パケットの受信状況を表わしている。従って、通信装置６０ａが図３８に示す検査パケットテーブル６５を有している場合、判定部６６ａは、通信装置６０ｚに対して送信した全ての検査パケットが通信装置６０ｚに到達したと判定できる。換言すると、判定部６６ａは、通信装置６０ｚに対して送信した検査パケットの転送経路のいずれにも障害が発生していないと判定できる。さらに、タイマがタイムアップするか、全ての応答パケットを受信すると、判定部６６ａは、応答パケットの転送経路についての判定処理を行うことができる。
【０１５６】
検査パケットテーブル６５の２つ目のエントリは、通信装置６０ｗ（ＩＰ６０ｗ）宛にＩＤ＝５を用いて送信した検査パケットや応答パケットの情報を記録している。通信装置６０ａは、通信装置６０ｗに対して｛ｓｐ１１，ｓｐ１２，ｓｐ１３，ｓｐ１４｝の検査パケットを送信している。しかし、通信装置６０ｗから受信した応答パケットでは、到達検査数＝３であり、検査リストは｛ｓｐ１１，ｓｐ１２，ｓｐ１４｝である。従って、通信装置６０ａから送信された検査パケットのうち、送信元ポート番号＝ｓｐ１３の検査パケットが通信装置６０ｗに到達していないことになる。
【０１５７】
図３９は、経路の問い合わせ処理の例を説明するフローチャートである。図３９の処理は一例であり、実装に応じて変更され得る。例えば、ステップＳ２２３〜Ｓ２２７による検査パケットの到達状況を用いた判定の前に、ステップＳ２２８〜Ｓ２３２に示す応答パケットの受信状況を用いた判定が行われても良い。図３９の判定処理は、図３７のステップＳ２１６か、検査パケットテーブル６５のエントリ中のタイマがタイムアップしたときに行われる。なお、検査パケットテーブル６５のエントリ中のタイマ値の変動は、図１５や図３３を用いて説明した処理と同様に行われる。
【０１５８】
経路の問い合わせ処理を開始する際に、判定部６６は、問い合わせリストを初期化する（ステップＳ２２１）。判定部６６は、検査パケットテーブル６５中の処理対象のエントリの宛先ＩＰアドレスを用いて、ＡＲＰテーブルから検査パケットの宛先ＭＡＣアドレスを取得する（ステップＳ２２２）。判定部６６は、処理対象のエントリについて、到達検査数と検査数が一致しているかを判定する（ステップＳ２２３）。
【０１５９】
到達検査数と検査数が一致していない場合、検査パケットの一部が宛先に到達していないことになるので、判定部６６は、到達していない検査パケットのヘッダを用いて特定される経路に障害が発生していると判定する（ステップＳ２２３でＮｏ）。判定部６６は、検査リストと到達リストの差分（Ｓｄ１）を作成し、検査パケットのヘッダ情報の生成に使用するテンプレートＴ１を生成する（ステップＳ２２４、Ｓ２２５）。テンプレートＴ１の生成の際に、判定部６６は、送信元ＭＡＣアドレスと送信元ＩＰアドレスを、いずれも自ノードに割り当てられたアドレスに設定する。判定部６６は、テンプレートＴ１中の宛先ＭＡＣアドレスをステップＳ２２２で特定したＭＡＣアドレスに設定し、宛先ＩＰアドレスをエントリ中の宛先ＩＰアドレスとする。さらに、判定部６６は、テンプレートＴ１中の宛先ポート番号を、検査用のポート番号に設定する。その後、判定部６６は、差分Ｓｄ１中の送信元ポート番号の１つを、ヘッダ情報のテンプレートＴ１に含め、得られたヘッダ情報を問い合わせリストに追加する（ステップＳ２２６）。判定部６６は、差分Ｓｄ１の中で未処理のポート番号があるかを判定する（ステップＳ２２７）。未処理のポート番号がある場合、ステップＳ２２６に戻る（ステップＳ２２７でＹｅｓ）。
【０１６０】
次に、応答パケットの転送経路に対する判定について説明する。ステップＳ２２７の処理後か、ステップＳ２２３で到達検査数と検査数が一致していると判定されると、ステップＳ２２８以降の処理が行われる。ここで、到達検査数と検査数が一致している場合、検査パケットの全てが宛先に到達していることになるので、判定部６６は、検査パケットのヘッダを用いて特定される経路には障害が発生していないと判定している（ステップＳ２２３でＹｅｓ）。
【０１６１】
判定部６６は、処理対象のエントリについて、受信応答数と応答数が一致しているかを判定する（ステップＳ２２８）。受信応答数と応答数が一致していない場合、応答パケットの一部を受信していないことになるので、判定部６６は、未受信の応答パケットのヘッダを用いて特定される経路に障害が発生していると判定する（ステップＳ２２８でＮｏ）。判定部６６は、応答リストと受信リストの差分（Ｓｄ２）を作成し、応答パケットのヘッダ情報の生成に使用するテンプレートＴ２を生成する（ステップＳ２２９、Ｓ２３０）。テンプレートＴ２の生成の際に、判定部６６は、宛先ＭＡＣアドレスと宛先ＩＰアドレスを、いずれも自ノードに割り当てられたアドレスに設定する。判定部６６は、テンプレートＴ２中の送信元ＭＡＣアドレスをステップＳ２２２で特定したＭＡＣアドレスに設定し、送信元ＩＰアドレスをエントリ中の宛先ＩＰアドレスとする。さらに、判定部６６は、テンプレートＴ２中の宛先ポート番号を、検査用のポート番号に設定する。その後、判定部６６は、差分Ｓｄ２中の送信元ポート番号の１つを、ヘッダ情報のテンプレートＴ２に含め、得られたヘッダ情報を問い合わせリストに追加する（ステップＳ２３１）。判定部６６は、差分Ｓｄ２の中で未処理のポート番号があるかを判定する（ステップＳ２３２）。未処理のポート番号がある場合、ステップＳ２３１に戻る（ステップＳ２３２でＹｅｓ）。その後、判定部６６は、問い合わせリストを用いて、管理装置８０に対して、問い合わせリスト中の各ヘッダで特定される経路を問い合わせ、適宜、得られた結果を出力する（ステップＳ２３２でＮｏ、ステップＳ２３４）。なお、管理装置８０での経路の検索と、経路の通信装置６０への通知は、第１の実施形態と同様である。
【０１６２】
判定部６６は、処理対象のエントリについて、受信応答数と応答数が一致している場合、問い合わせリストにデータが含まれているかを判定する（ステップＳ２２８でＹｅｓ、ステップＳ２３３）。問い合わせリストにデータが含まれている場合、ステップＳ２３４の処理が行われる。問い合わせリストにデータが含まれていない場合、判定部６６は、全ての検査パケットと応答パケットの送受信に成功したことから、全ての検査パケットと応答パケットの送受信に使用された経路に障害が発生していないと判定している（ステップＳ２３３でＮｏ）。そこで、判定部６６は、表示デバイス等に合格判定を出力して処理を終了する（ステップＳ２３５）。
【０１６３】
このように第３の実施形態によると、複数の検査パケットに対する応答を１つの応答パケットにまとめることにより、応答パケットの数が膨大になることを防ぐことができる。さらに、検査パケットの送信元とＩＤの組み合わせごとにまとめた検査パケットのグループの１つについて、複数の応答パケットが送信され、各応答パケットには他の応答パケットの情報が含まれている。また、他の応答パケットは、他の応答パケットの情報を含む応答パケットと同じ検査パケットに対する応答である。従って、第３の実施形態についても、検査パケットの到達状況と、応答パケットの受信状況を用いて、物理ネットワークで障害が発生している経路を特定することができる。
【０１６４】
第３の実施形態では、複数の検査パケットが送信されるので、検査パケットの送信元から検査パケットの宛先にいたる複数の経路についての障害の有無が検討される。このため、ネットワーク中で障害が発生しているノードやアプリケーションが特定されていない場合にも有効である。
【０１６５】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【０１６６】
例えば、通信装置２０、５０、６０が生成する応答パケットの数は、実装に応じて、任意に変更され得る。さらに、通信装置６０が１回の検査で送信する検査パケットの数も、実装に応じて任意に変更され得る。
【０１６７】
応答パケット中の送信元ポート番号を決定する際の演算は実装に応じて決定され得る。以上の例では、応答パケット中の送信元ポート番号を決定する際に、検査パケットの送信ポートに所定の値が加算される場合を例として説明したが、検査パケットの送信ポートから所定の値が減算されても良く、さらに他の演算が行われても良い。
【０１６８】
実施形態にかかる通信装置２０、５０、６０以外の通信装置も含むネットワークに対応させるために、判定部３５は、受信パケット中のデータに、受信したパケット以外のパケットのヘッダ情報が含まれているかを判定するように変形されても良い。この場合、判定部３５は、受信した応答パケットのデータに、受信したパケット以外のパケットのヘッダ情報が含まれていることを特定すると、図１３に示す受信処理を行う。例えば、図１３において、ステップＳ４２とステップＳ４３の間で、応答パケット中に他の応答パケットの情報が含まれているかを判定する処理が含められても良い。
【０１６９】
以上の例では、検査パケットと応答パケットは、ＵＤＰパケットが使用される場合を例として説明したが、検査パケットや応答パケットに使用されるプロトコルは、実装に応じて変更され得る。例えば、ＩＣＭＰ（Internet Control Message Protocol）などが使用されてもよい。
【０１７０】
第３の実施形態において、第２の実施形態と同様に、応答パケットの送信側の通信装置６０が経路の重複状況を学習するように変形されても良い。さらに、第３の実施形態では、複数の検査パケットを送信する送信元の通信装置６０においても、送信した検査パケットの転送経路を管理装置８０に問合わせて学習するように変形されても良い。この場合、送信側の通信装置６０は、以後に同じ通信装置６０に検査パケットを送信する場合に、なるべく転送経路が重複しないように、複数の検査パケットを送信することができる。
【０１７１】
以上の各実施形態において、検査パケットの送信のタイミングは実装に応じて任意に変更され得る。例えば、オペレータがある特定の通信装置２０から検査パケットの宛先を指定してコマンドを実行することで、検査パケットの送信が行われても良い。また、オペレータが管理コンソールを用いて、検査パケットの送信元と検査パケットの宛先を指定してコマンドを実行しても良い。さらに、オペレータは、予め、システムに、検査パケットの送信元、検査パケットの宛先、検査を行う時間間隔の組み合わせを設定して、所定の時間ごとに、システム中の転送経路の状況の確認を行っても良い。さらに、オペレータは、検査パケットの送信に関するコマンドを実行する際に、検査パケットの送信元ポート番号を指定しても良い。オペレータからの指定がある場合には、通信装置２０は、指定された送信元ポート番号を用いて検査パケットを生成する。また、以上の変形は、システムに通信装置２０が使用されている場合に限られず、通信装置５０、通信装置６０が用いられているシステムでも適用可能である。
【０１７２】
検査パケットの送信が、システム中での障害の発生のときに行われることが予め設定により判定部３５や判定部６６で認識されてもよい。この場合、判定部３５や判定部６６は、応答パケットの全てを受信すると、合格判定の代わりに、仮想ネットワークでの障害が発生している可能性があることを通知するメッセージを生成しても良い。
【０１７３】
以上の説明で使用したテーブルやパケットのフォーマット等は一例であり、実装に応じて、テーブルやパケット中の情報要素は変更され得る。
【０１７４】
トラフィック分散のために行われる演算も実装に応じて変更され得る。例えば、図７で説明したように７種類の情報要素を用いずに５種類の情報要素を用いてハッシュ関数を求めても良い。この場合、宛先ＭＡＣアドレス、送信元ＭＡＣアドレス、送信元ＩＰアドレス、宛先ＩＰアドレス、プロトコルの情報を用いてハッシュ値が計算される。さらに、ハッシュ値を求める際に使用されるハッシュ関数も、実装に応じて任意に選択され得る。さらに、トラフィック分散のために使用される関数は、剰余関数に限られない。
【０１７５】
上述の第１〜第３の実施形態を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
通信先装置との間の通信状況を検査する通信装置に、
前記通信先装置に向けて、検査パケットを送信し、
前記通信先装置から前記検査パケットに応答する応答パケットを受信すると、前記応答パケットのデータに、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信される他の応答パケットのヘッダ情報が含まれているかを判定し、
受信した応答パケットが前記ヘッダ情報を含む場合、所定時間中に前記他の応答パケットを受信しなければ、前記通信先装置との間の経路のうち、前記ヘッダ情報を用いて特定される経路に障害があると判定する
処理を行わせることを特徴とする判定プログラム。
（付記２）
前記通信装置に、
前記検査パケットの送信前に前記検査パケットに含まれているヘッダを記憶し、
前記通信先装置から前記検査パケットに応答する応答パケットを受信しない場合、前記検査パケットの転送に失敗した可能性があると判定し、
前記検査パケットに含まれているヘッダを用いて特定される経路を、障害が発生している可能性のある経路に決定する
処理を行わせることを特徴とする付記１に記載の判定プログラム。
（付記３）
前記通信装置に、
前記通信先装置から受信した応答パケットから、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信される全ての応答パケットの各々についてのヘッダの情報を取得し、
前記受信した応答パケットから取得した情報と、受信パケットのヘッダを用いて、前記全ての応答パケットを受信したかを判定し、
前記全ての応答パケットを受信すると、前記通信装置と前記通信先装置の間の通信経路には障害が発生していないと判定する
処理を行わせることを特徴とする付記１または２に記載の判定プログラム。
（付記４）
前記通信先装置に宛てて１回の検査で送信する複数の検査パケットに、検査の回数ごとに設定される識別番号として所定値を設定すると共に、前記複数の検査パケットの間で互いに異なる送信元ポート番号を設定し、
前記複数の検査パケットを前記通信先装置に向けて送信し、
前記識別番号が前記所定値に設定され、かつ、前記通信先装置が受信に成功した検査パケットの送信元ポート番号を表わすリストが前記応答パケットに含まれている場合、前記リストに含まれていない検査パケットの転送に使用された経路に障害があると判定する
処理を前記通信装置に行わせることを特徴とする付記１〜３のいずれか１項に記載の判定プログラム。
（付記５）
前記通信装置に、
他の通信装置から前記通信装置との間の通信状況の検査に使用する第１の検査パケットを受信すると、前記第１の検査パケットに応答する複数のパケットを、前記複数のパケットの各々の間で異なる送信元ポート番号を用いて生成し、
ネットワークの管理情報を保持する管理装置に、前記複数のパケットの各々のヘッダの情報を通知すると共に、前記管理装置から前記複数のパケットの各々の転送経路を取得し、
前記複数のパケットのうちで転送経路が異なるパケットに含まれる送信元ポート番号を記憶部に記憶し、
前記他の通信装置から第２の検査パケットを受信すると、前記記憶部に記憶している送信元ポート番号を用いた複数のパケットを前記第２の検査パケットに対する応答として送信する
処理を行わせることを特徴とする付記１〜４のいずれか１項に記載の判定プログラム。
（付記６）
通信先装置との間の通信状況を検査する通信装置であって、
前記通信先装置に向けて、検査パケットを送信する送信部と、
前記通信先装置から前記検査パケットに応答する応答パケットを受信する受信部と、
前記応答パケットのデータに、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信される他の応答パケットのヘッダ情報が含まれている場合、所定時間中に前記他の応答パケットを受信しなければ、前記通信先装置との間の経路のうち、前記ヘッダ情報を用いて特定される経路に障害があると判定する判定部
を備えることを特徴とする通信装置。
（付記７）
前記検査パケットの送信前に前記検査パケットに含まれているヘッダを記憶する記憶部をさらに備え、
前記判定部は、
前記通信先装置から前記検査パケットに応答する応答パケットを受信しない場合、前記検査パケットの転送に失敗した可能性があると判定し、
前記検査パケットに含まれているヘッダを用いて特定される経路を、障害が発生している可能性のある経路に決定する
ことを特徴とする付記６に記載の通信装置。
（付記８）
前記判定部は、
前記通信先装置から受信した応答パケットから、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信される全ての応答パケットの各々についてのヘッダの情報を取得し、
前記受信した応答パケットから取得した情報と、受信パケットのヘッダを用いて、前記全ての応答パケットを受信したかを判定し、
前記全ての応答パケットを受信すると、前記通信装置と前記通信先装置の間の通信経路には障害が発生していないと判定する
ことを特徴とする付記６または７に記載の通信装置。
（付記９）
前記通信先装置に宛てた検査パケットのベースを、検査の回数ごとに設定される識別番号として所定値を含めて生成する生成部と、
前記検査パケットのベースを複製した上で、互いに異なる送信元ポート番号を設定することにより、複数の検査パケットを生成する複製部
をさらに備え、
前記送信部は、前記複数の検査パケットを前記通信先装置に向けて送信し、
前記判定部は、前記識別番号が前記所定値に設定され、かつ、前記通信先装置が受信に成功した検査パケットの送信元ポート番号を表わすリストが前記応答パケットに含まれている場合、前記リストに含まれていない検査パケットの転送に使用された経路に障害があると判定する
ことを特徴とする付記６〜８のいずれか１項に記載の通信装置。
（付記１０）
他の通信装置から前記通信装置との間の通信状況の検査に使用する第１の検査パケットを前記受信部が受信すると、前記第１の検査パケットへの応答のベースを生成する応答部と、
前記第１の検査パケットへの応答のベースを複製すると共に、互いに異なる送信元ポート番号を用いて、複数のパケットを生成する他の複製部と、
ネットワークの管理情報を保持する管理装置に、前記複数のパケットの各々のヘッダの情報を通知すると共に、前記管理装置から前記複数のパケットの各々の転送経路を取得することにより、前記複数のパケットのうちで転送経路が異なるパケットに含まれる送信元ポート番号を学習する学習部
を備え、
前記他の複製部は、前記他の通信装置から前記受信部が第２の検査パケットを受信すると、前記学習部で学習した送信元ポート番号を用いた複数のパケットを前記第２の検査パケットに対する応答として生成する
ことを特徴とする付記６〜９のいずれか１項に記載の通信装置。
（付記１１）
通信先装置との間の通信状況を検査する通信装置は、前記通信先装置に向けて、検査パケットを送信し、
前記通信先装置は、
前記検査パケットを受信すると、転送経路の振分に用いられるヘッダ情報が異なる複数の応答パケットを、各応答パケットのデータに前記複数の応答パケットのうちで当該応答パケットとは異なるパケットのヘッダ情報を含めて、前記検査パケットに対する応答として生成し、
前記複数の応答パケットを前記通信装置に送信し、
前記通信装置は、
前記通信先装置から受信した応答パケットのデータから、前記複数の応答パケットのうちで前記通信装置が受信した応答パケット以外のパケットのヘッダ情報を抽出し、
前記複数の応答パケットの全てを所定の時間内に受信しない場合、前記通信先装置との間の経路のうち、未受信の応答パケット中のヘッダ情報を用いて特定される経路に障害があると判定する
ことを特徴とする判定方法。
（付記１２）
前記通信装置が、
前記検査パケットの送信前に前記検査パケットに含まれているヘッダを記憶し、
前記通信先装置から前記検査パケットに応答する応答パケットを受信しない場合、前記検査パケットの転送に失敗した可能性があると判定し、
前記検査パケットに含まれているヘッダを用いて特定される経路を、障害が発生している可能性のある経路に決定する
ことを特徴とする付記１１に記載の判定方法。
（付記１３）
前記通信装置が、
前記通信先装置から受信した応答パケットから、当該応答パケットにより前記通信先装置での受信が確認される検査パケットに対する応答として前記通信先装置から送信される全ての応答パケットの各々についてのヘッダの情報を取得し、
前記受信した応答パケットから取得した情報と、受信パケットのヘッダを用いて、前記全ての応答パケットを受信したかを判定し、
前記全ての応答パケットを受信すると、前記通信装置と前記通信先装置の間の通信経路には障害が発生していないと判定する
ことを特徴とする付記１１または１２に記載の判定方法。
（付記１４）
前記通信先装置に宛てて１回の検査で送信する複数の検査パケットに、検査の回数ごとに設定される識別番号として所定値を設定すると共に、前記複数の検査パケットの間で互いに異なる送信元ポート番号を設定し、
前記複数の検査パケットを前記通信先装置に向けて送信し、
前記識別番号が前記所定値に設定され、かつ、前記通信先装置が受信に成功した検査パケットの送信元ポート番号を表わすリストが前記応答パケットに含まれている場合、前記リストに含まれていない検査パケットの転送に使用された経路に障害があると判定する
処理を前記通信装置が行うことを特徴とする付記１１〜１３のいずれか１項に記載の判定方法。
（付記１５）
前記通信装置は、
他の通信装置から前記通信装置との間の通信状況の検査に使用する第１の検査パケットを受信すると、前記第１の検査パケットに応答する複数のパケットを、前記複数のパケットの各々の間で異なる送信元ポート番号を用いて生成し、
ネットワークの管理情報を保持する管理装置に、前記複数のパケットの各々のヘッダの情報を通知すると共に、前記管理装置から前記複数のパケットの各々の転送経路を取得し、
前記複数のパケットのうちで転送経路が異なるパケットに含まれる送信元ポート番号を記憶部に記憶し、
前記他の通信装置から第２の検査パケットを受信すると、前記記憶部に記憶している送信元ポート番号を用いた複数のパケットを前記第２の検査パケットに対する応答として送信する
ことを特徴とする付記１１〜１４のいずれか１項に記載の判定方法。
【符号の説明】
【０１７６】
１０  スイッチ
２０、５０、６０  通信装置
２１  送信部
２２  受信部
２３  分類部
２４  データ処理部
３０、５１、６１  検査部
３１  生成部
３２、６３  記憶部
３３、６７  応答部
３４、６２  複製部
３５、６６  判定部
３６、６５  検査パケットテーブル
５２  学習部
５３  学習テーブル
６４  受信状況テーブル
８０  管理装置
１０１  プロセッサ
１０２  メモリ
１０３  バス
１０４  ネットワーク接続装置
【図１】
2018026727.tif 000003
【図２】
2018026727.tif 000004
【図３】
2018026727.tif 000005
【図４】
2018026727.tif 000006
【図５】
2018026727.tif 000007
【図６】
2018026727.tif 000008
【図７】
2018026727.tif 000009
【図８】
2018026727.tif 000010
【図９】
2018026727.tif 000011
【図１０】
2018026727.tif 000012
【図１１】
2018026727.tif 000013
【図１２】
2018026727.tif 000014
【図１３】
2018026727.tif 000015
【図１４】
2018026727.tif 000016
【図１５】
2018026727.tif 000017
【図１６】
2018026727.tif 000018
【図１７】
2018026727.tif 000019
【図１８】
2018026727.tif 000020
【図１９】
2018026727.tif 000021
【図２０】
2018026727.tif 000022
【図２１】
2018026727.tif 000023
【図２２】
2018026727.tif 000024
【図２３】
2018026727.tif 000025
【図２４】
2018026727.tif 000026
【図２５】
2018026727.tif 000027
【図２６】
2018026727.tif 000028
【図２７】
2018026727.tif 000029
【図２８】
2018026727.tif 000030
【図２９】
2018026727.tif 000031
【図３０】
2018026727.tif 000032
【図３１】
2018026727.tif 000033
【図３２】
2018026727.tif 000034
【図３３】
2018026727.tif 000035
【図３４】
2018026727.tif 000036
【図３５】
2018026727.tif 000037
【図３６】
2018026727.tif 000038
【図３７】
2018026727.tif 000039
【図３８】
2018026727.tif 000040
【図３９】
2018026727.tif 000041