(57)【要約】【課題】サーバと各ノードとの間の通信を継続させること。【解決手段】この計算機８０は、通信装置８１，８２，８３、検知部８０ａ、通信制御部８０ｂを有する。検知部８０ａは、ネットワーク内の同一のセグメントに接続される複数の通信装置８１，８２，８３間で通信を行うことにより、各通信装置８１，８２，８３の先に接続されたネットワークの分断を検知する。通信制御部８０ｂは、検知部８０ａによってネットワークの分断が検知された場合には、それぞれの通信機器と到達可能なネットワーク内の機器との対応関係の情報を生成する。通信制御部８０ｂは、対応関係の情報を基にして、通信装置とネットワーク内の機器との通信を行う。【選択図】図１
2014120892.tif 000002
【特許請求の範囲】
【請求項１】
同一のセグメントに属するネットワーク内の他の通信装置との通信により、前記ネットワークの分断を検知する検知部と、
前記分断が検知された場合には、前記他の通信装置それぞれと到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、通信装置とネットワーク内の機器との通信を行う通信制御部と
を有することを特徴とする計算機。
【請求項２】
通信装置の接続先のネットワーク構成に応じて、接続先の機器毎に通信に利用する通信装置が予め対応付けられており、
前記通信制御部は、前記検知部によってネットワークの分断が検知された場合に、それぞれの通信装置と到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、予め対応付けられた通信機器と接続先の機器との対応関係を変更して、通信装置とネットワーク内の機器との通信を行うことを特徴とする請求項１に記載の計算機。
【請求項３】
自計算機上で複数の仮想マシンが動作し、仮想マシン毎に該仮想マシンが利用する通信装置が予め対応付けられており、
前記通信制御部は、前記検知部によってネットワークの分断が検知された場合に、それぞれの通信装置と到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、予め対応付けられた仮想マシンと通信装置との関係を解消し、接続先に到達可能な通信装置と仮想マシンとを対応付けて、通信装置とネットワーク内の機器との通信を行うことを特徴とする請求項１または２に記載の計算機。
【請求項４】
コンピュータが実行する通信制御方法であって、
同一のセグメントに属するネットワーク内の他の通信装置との通信により、前記ネットワークの分断を検知し、
前記分断が検知された場合には、前記他の通信装置それぞれと到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、通信装置とネットワーク内の機器との通信を行う
各処理を実行することを特徴とする通信制御方法。
【請求項５】
通信装置の接続先のネットワーク構成に応じて、接続先の機器毎に通信に利用する通信装置が予め対応付けられており、
前記通信を行う処理は、ネットワークの分断が検出された場合に、それぞれの通信装置と到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、予め対応付けられた通信機器と接続先の機器との対応関係を変更して、通信装置とネットワーク内の機器との通信を行うことを特徴とする請求項４に記載の通信制御方法。
【請求項６】
前記コンピュータ上で複数の仮想マシンが動作し、仮想マシン毎に該仮想マシンが利用する通信装置が予め対応付けられており、
前記通信を行う処理は、ネットワークの分断が検知された場合に、それぞれの通信装置と到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、予め対応付けられた仮想マシンと通信装置との関係を解消し、接続先に到達可能な通信装置と仮想マシンとを対応付けて、通信装置とネットワーク内の機器との通信を行うことを特徴とする請求項４または５に記載の通信制御方法。
【請求項７】
コンピュータに、
同一のセグメントに属するネットワーク内の他の通信装置との通信により、前記ネットワークの分断を検知し、
前記分断が検知された場合には、前記他の通信装置それぞれと到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、通信装置とネットワーク内の機器との通信を行う
各処理を実行させることを特徴とする通信制御プログラム。
【請求項８】
通信装置の接続先のネットワーク構成に応じて、接続先の機器毎に通信に利用する通信装置が予め対応付けられており、
前記通信を行う処理は、ネットワークの分断が検出された場合に、それぞれの通信装置と到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、予め対応付けられた通信機器と接続先の機器との対応関係を変更して、通信装置とネットワーク内の機器との通信を行うことを特徴とする請求項７に記載の通信制御プログラム。
【請求項９】
前記コンピュータ上で複数の仮想マシンが動作し、仮想マシン毎に該仮想マシンが利用する通信装置が予め対応付けられており、
前記通信を行う処理は、ネットワークの分断が検知された場合に、それぞれの通信装置と到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、予め対応付けられた仮想マシンと通信装置との関係を解消し、接続先に到達可能な通信装置と仮想マシンとを対応付けて、通信装置とネットワーク内の機器との通信を行うことを特徴とする請求項７または８に記載の通信制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機等に関する。
【背景技術】
【０００２】
近年、複数のＮＩＣ（Network  Interface  Card）を使用して、自システムが接続されるネットワークの伝送経路を冗長化し、通信全体の信頼性を向上させるチーミングの技術がある。以下において、Active-Standby型のチーミング、ロードバランス型のチーミングの一例について説明する。
【０００３】
まず、Active-Standby型のチーミングの一例について説明する。Active-Standby型のチーミングは、単一のネットワークセグメントに接続された複数のＮＩＣを冗長化し、複数のＮＩＣのうち１本のＮＩＣを通信に使用し、他のＮＩＣを待機状態とする通信形態である。図３０は、Active-Standby型のチーミングを説明するためのシステム構成図である。図３０に示すように、このシステムは、スイッチ１１〜１４、ノード２１〜２４、ルータ３１，３２、外部ネットワーク４１，４２、サーバ５０を有する。
【０００４】
スイッチ１１〜１４は、ＮＩＣ５１，５２が接続されたネットワークを構成するレイヤ２スイッチである。
【０００５】
ノード２１〜２４は、仮想ＮＩＣ５０ａの通信相手となる同一セグメント内のノードである。ノード２１〜２４には固有のＭＡＣ（Media  Access  Control）アドレスが割り当てられる。例えば、ノード２１，２２，２３，２４に割り当てられるＭＡＣアドレスをそれぞれＮ１、Ｎ２、Ｎ３、Ｎ４とする。
【０００６】
ルータ３１，３２は、外部ネットワーク４１，４２に対する通信を中継するためのルータである。ルータ３１，３２は、ＴＣＰ（Transmission  Control  Protocol）／ＩＰ（Internet  Protocol）を利用したルーティングを行う。ルータ３１，３２は、ＭＡＣアドレスを利用して、仮想ＮＩＣとの通信を行う。例えば、ルータ３１，３２に割り当てられるＭＡＣアドレスをそれぞれＲ１，Ｒ２とする。
【０００７】
外部ネットワーク４１，４２はそれぞれ別セグメントのネットワークである。ネットワーク４１，４２には、不特定多数のノードが存在し、不特定多数のノードは、ルータ３１，３２を介して、ＴＣＰ／ＩＰプロトコル等で仮想ＮＩＣ５０ａと通信を行う。
【０００８】
サーバ５０は、仮想ＮＩＣ５０ａ、ＮＩＣ５１，５２を有する。仮想ＮＩＣ５０ａは、ＮＩＣ５１とＮＩＣ５２とをチーム化した仮想的なＮＩＣである。仮想ＮＩＣ５０ａは、ＮＩＣ５１またはＮＩＣ５１を使用して、イーサネット（登録商標、以下同様）等のレイヤ２プロトコルで通信を行う。
【０００９】
ＮＩＣ５１，５２は、同一のネットワークセグメントに接続した物理ＮＩＣである。ネットワークセグメントは、ブロードキャストドメインに対応する。
【００１０】
仮想ＮＩＣ５０ａは、ＮＩＣ５１，５２、スイッチ１１〜１４が全て正常に動作している場合には、ＮＩＣ５１，５２を排他使用して通信を行う。例えば、仮想ＮＩＣ５０ａは、ＮＩＣ５１をActive状態にし、ＮＩＣ５２をStandby状態にする。そして、仮想ＮＩＣ５０ａは、全てのノード２１〜２４、外部ネットワーク４１，４２に対する通信をＮＩＣ５１で行い、ＮＩＣ５２を待機状態とする。なお、仮想ＮＩＣ５０ａには、仮想ＭＡＣアドレスが割り当てられる。
【００１１】
仮想ＮＩＣ５０ａからノード２１〜２４に対するパケットは、各ノードのＭＡＣアドレスＮ１〜Ｎ４宛に直接送信されるものとする。仮想ＮＩＣ５０ａから外部ネットワーク４１，４２に対するパケットは、サーバ５０内のルーティング情報に従ってルータのＭＡＣアドレスＲ１またはＲ２宛に送信され、ルータにて宛先のネットワーク宛へ中継されるものとする。
【００１２】
ノード２１〜２４から仮想ＮＩＣ５０ａに対するパケットは仮想ＭＡＣアドレス宛に送信されるものとする。外部ネットワーク４１，４２から仮想ＮＩＣ５０ａに対するパケットは、ルータ３１またはルータ３２を経由して仮想ＭＡＣアドレス宛に送信されるものとする。
【００１３】
続いて、ＮＩＣ故障時の図３０のシステムの処理について説明する。図３１は、ＮＩＣ故障時の図３０のシステムの処理を説明するための図である。図３１の上段では、図３０で説明したように、ＮＩＣ５１がActive状態であり、ＮＩＣ５２がStandby状態であるものとする。この状態で、ＮＩＣ５１または接続先のスイッチ１１で異常が発生し、ＮＩＣ５１がリンクダウン状態となったものとする。
【００１４】
仮想ＮＩＣ５０ａは、ＮＩＣ５１がリンクダウン状態となった場合には、図３１の下段に示すように、ＮＩＣ５２をActive状態にしてＮＩＣ５２への切り替えを行う。仮想ＮＩＣ５０ａがＮＩＣ５２への切り替えを行うことで、通信を継続する。仮想ＮＩＣ５０ａは、全てのノード２１〜２４、外部ネットワーク４１，４２に対する通信を、ＮＩＣ５２を使用して行う。
【００１５】
次に、ロードバランス型のチーミングの一例について説明する。ロードバランス型のチーミングは、単一のネットワークセグメントに接続された複数のＮＩＣを同時に使用するチーミングの形態である。また、ロードバランス型のチーミングは、１対多、あるいは、多対多の通信を行う場合に、宛先や送信元によって通信に使用するＮＩＣを変えることで通信負荷を分散する。
【００１６】
図３２は、ロードバランス型のチーミングを説明するためのシステム構成図である。図３２に示すように、このシステムは、スイッチ１１〜１４、ノード２１〜２４、ルータ３１，３２、外部ネットワーク４１，４２、サーバ６０を有する。以下に説明するように、１つの物理サーバにおいて、複数の仮想マシン６０ａ，６０ｂを動作させる環境において、ＮＩＣのチーミングを行う場合には、仮想マシン毎に異なるＮＩＣを通信に使用することで通信負荷を分散させる。
【００１７】
スイッチ１１〜１４、ノード２１〜２４、ルータ３１，３２、外部ネットワーク４１，４２に関する説明は、図３０に示したスイッチ１１〜１４、ノード２１〜２４、ルータ３１，３２、外部ネットワーク４１，４２に関する説明と同様である。
【００１８】
サーバ６０は、ＮＩＣ５１，５２、仮想ＮＩＣ５０ａ、ＶＭ（Virtual  Machine）６０ａ，６０ｂ、仮想ブリッジ６０ｃを有する。ＮＩＣ５１，５２、仮想ＮＩＣ５０ａに関する説明は、図３０のＮＩＣ５１，５２、仮想ＮＩＣ５０ａに関する説明と同様である。
【００１９】
ＶＭ６０ａ，６０ｂは、ハイパーバイザ上で動作する仮想マシンである。例えば、ＶＭ６０ａは、ＶＭ−ＮＩＣ６１ａを有する。ＶＭ６０ｂは、ＶＭ−ＮＩＣ６１ｂを有する。ＶＭ−ＮＩＣ６１ａは、ＶＭ６０ａ上の仮想的なＮＩＣであり、ＭＡＣアドレス「ＭＡＣ−ＶＭ１」が割り当てられる。ＶＭ−ＮＩＣ６１ｂは、ＶＭ６０ｂ上の仮想的なＮＩＣであり、ＭＡＣアドレス「ＭＡＣ−ＶＭ２」が割り当てられる。
【００２０】
仮想ブリッジ６０ｃは、仮想マシンと物理ネットワークとの通信を中継するための仮想的なブリッジである。仮想ブリッジ６０ｃは、仮想ＮＩＣ５０ａを介して外部のネットワークに接続される。
【００２１】
全てのＮＩＣ５１，５２やスイッチ１１〜１４が正常に稼働している状態では、仮想ＮＩＣ５０ａは、冗長化したＮＩＣ５１，５２のうち、ＮＩＣ５１をＶＭ６０ａの通信に利用する。また、ＮＩＣ５２をＶＭ６０ｂの通信に利用する。
【００２２】
続いて、ＮＩＣ故障時の図３２のシステムの処理について説明する。ここでは一例として、ＮＩＣ５１または接続先のスイッチ１１に異常が発生し、ＮＩＣ５１がリンクダウン状態となった場合について説明する。この場合には、仮想ＮＩＣ５０ａが、ＶＭ６０ａの通信を、ＮＩＣ５１からＮＩＣ５２へ切り替えることで通信を継続させる。全てのＶＭ６０ａ，６０ｂの通信がＮＩＣ５２で行われるため、ＮＩＣ５２に通信負荷が集中することになるが、ＶＭ６０ａ，６０ｂ共に全ての通信相手に対してパケットを到達させることが可能となる。
【先行技術文献】
【特許文献】
【００２３】
【特許文献１】特表２００９−５０８４４３号公報
【特許文献２】特開２００３−８５８１号公報
【特許文献３】特開２００７−１１６７５１号公報
【発明の概要】
【発明が解決しようとする課題】
【００２４】
しかしながら、上述した従来技術では、サーバと各ノードとの間の通信を継続させることができないという問題がある。
【００２５】
Active-Standby型のチーミングの問題について説明する。図３３は、Active-Standby型のチーミングの問題を説明するための図である。例えば、図３３に示すように、スイッチ１２とスイッチ１３との間のリンクが異常となった場合には、ネットワークが２つに分断された状態となる。この場合には、ＮＩＣ５１は、ノード２１，２２、外部ネットワーク４１に対する通信を継続できるが、ノード２３，２４、外部ネットワーク４２に対する通信が途絶してしまう。また、仮に、ＮＩＣ５１からＮＩＣ５２へ切り替えを行ったとしても、ノード２３，２４、外部ネットワーク４２と通信出来るようになるが、ノード２１，２２、外部ネットワーク４１に対する通信が途絶してしまう。
【００２６】
すなわち、Active-Standby型のチーミングでは、スイッチの故障やスイッチ間のリンク故障により単一のネットワークセグメントが複数に分断されてしまった場合には、通信を継続させることができない。
【００２７】
ロードバランス型のチーミングの問題について説明する。図３４は、ロードバランス型のチーミングの問題を説明するための図である。例えば、図３４に示すように、スイッチ１２とスイッチ１３との間のリンクが異常となった場合には、ネットワークが２つに分断されてしまう。このため、ＶＭ６０ａは、ノード２１，２２、外部ネットワーク４１に対する通信を継続できるが、ノード２３，２４、外部ネットワーク４２に対する通信を継続できない。同様に、ＶＭ６０ｂは、ノード２３，２４、外部ネットワーク４２に対する通信を継続できるが、ノード２１，２２、外部ネットワーク４１に対する通信を継続できない。
【００２８】
すなわち、ロードバランス型のチーミングでは、スイッチの故障やスイッチ間のリンク故障により単一のネットワークセグメントが複数に分断されてしまった場合には、通信を継続させることができない。
【００２９】
１つの側面では、サーバと各ノードとの間の通信を継続させることができる計算機、通信制御方法および通信制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００３０】
第１の案では、計算機は、検知部と通信制御部とを有する。検知部は、同一のセグメントに属するネットワーク内の他の通信装置との通信により、前記ネットワークの分断を検知する。通信制御部は、分断が検知された場合には、前記他の通信装置それぞれと到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、通信装置とネットワーク内の機器との通信を行う。
【発明の効果】
【００３１】
本発明の１実施態様によれば、サーバと各ノードとの間の通信を継続させることができる。
【図面の簡単な説明】
【００３２】
【図１】図１は、本実施例１に係る計算機の構成を示す機能ブロック図である。
【図２】図２は、本実施例２に係るシステムの構成を説明するための図である。
【図３】図３は、ハートビートメッセージのデータ構造の一例を示す図である。
【図４】図４は、本実施例２に係るＭＡＣアドレステーブルのデータ構造の一例を示す図である。
【図５】図５は、ノードと該ノードに到達可能なＮＩＣとの対応関係を学習する処理を説明するための図である。
【図６】図６は、本実施例３に係るシステムの構成を説明するための図である。
【図７】図７は、本実施例３について、ネットワークが２つに分断された場合の一例を示す図である。
【図８】図８は、ネットワークが２つに分断された場合の本実施例３のシステムの処理手順を示すフローチャートである。
【図９】図９は、本実施例３について、ネットワークが３つに分断された場合の一例を示す図である。
【図１０】図１０は、ネットワークが３つに分断された場合の本実施例３のシステムの処理手順を示すフローチャート（１）である。
【図１１】図１１は、ネットワークが３つに分断された場合の本実施例３のシステムの処理手順を示すフローチャート（２）である。
【図１２】図１２は、監視対象となる通信経路の一例を示す図である。
【図１３】図１３は、物理ＮＩＣの状態の組み合わせを示す図である。
【図１４】図１４は、ネットワークトポロジ監視の状態を示す図（１）である。
【図１５】図１５は、本実施例３に係る仮想ＮＩＣのネットワークのトポロジ状態を判定する処理手順を示すフローチャートである。
【図１６】図１６は、ネットワークトポロジ監視の状態を示す図（２）である。
【図１７】図１７は、本実施例４に係るシステムの構成を説明するための図である。
【図１８】図１８は、仮想マシン毎の各ＮＩＣの優先度の一例を示す図である。
【図１９】図１９は、本実施例４の仮想ＮＩＣがネットワークの分断が無いことを確認する処理を説明するための図である。
【図２０】図２０は、本実施例４の仮想ＮＩＣが分断箇所を特定する処理を説明するための図（１）である。
【図２１】図２１は、図２０のようにネットワークが２つに分断された場合のハートビートメッセージの到達状況を示す図である。
【図２２】図２２は、本実施例４の仮想ＮＩＣが分断箇所を特定する処理を説明するための図（２）である。
【図２３】図２３は、図２２のようにネットワークが３つに分断された場合のハートビートメッセージの到達状況を示す図である。
【図２４】図２４は、物理ＮＩＣ監視テーブルのデータ構造の一例を示す図である。
【図２５】図２５は、経路監視テーブルのデータ構造の一例を示す図である。
【図２６】図２６は、本実施例４に係る仮想ＮＩＣが経路状態を判定する処理手順を示すフローチャートである。
【図２７】図２７は、ハートビートメッセージの結果を評価する処理手順を示すフローチャートである。
【図２８】図２８は、パケットの送信手順を示すフローチャートである。
【図２９】図２９は、通信制御プログラムを実行するコンピュータの一例を示す図である。
【図３０】図３０は、Active-Standby型のチーミングを説明するためのシステム構成図である。
【図３１】図３１は、ＮＩＣ故障時の図３０のシステムの処理を説明するための図である。
【図３２】図３２は、ロードバランス型のチーミングを説明するためのシステム構成図である。
【図３３】図３３は、Active-Standby型のチーミングの問題を説明するための図である。
【図３４】図３４は、ロードバランス型のチーミングの問題を説明するための図である。
【発明を実施するための形態】
【００３３】
以下に、本願の開示する計算機、通信制御方法および通信制御プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００３４】
本実施例１に係る計算機の構成について説明する。図１は、本実施例１に係る計算機の構成を示す機能ブロック図である。図１に示すように、この計算機８０は、通信装置８１，８２，８３、検知部８０ａ、通信制御部８０ｂを有する。計算機８０は、通信装置８１〜８３以外に通信装置を有していても良い。
【００３５】
検知部８０ａは、同一のセグメントに属するネットワーク内の他の通信装置８１，８２，８３間で通信を行うことにより、各通信装置８１，８２，８３の先に接続されたネットワークの分断を検知する。
【００３６】
通信制御部８０ｂは、分断が検知された場合には、前記他の通信機器と到達可能なネットワーク内の機器との対応関係の情報を生成する。通信制御部８０ｂは、対応関係の情報を基にして、通信装置８１〜８３とネットワーク内の機器との通信を行う。
【００３７】
次に、本実施例１に係る計算機８０の効果について説明する。本実施例１に係る計算機８０は、通信装置８１〜８３に接続されたネットワークの分断を検知した場合に、ネットワーク内の各機器に到達可能な通信装置を利用して通信を行う。このため、ネットワーク部の故障等によりネットワークが分断した場合であっても、計算機８０から接続できない機器が生じることを防止することができる。
【実施例２】
【００３８】
次に、本実施例２に係るシステムの構成について説明する。図２は、本実施例２に係るシステムの構成を説明するための図である。図２に示すように、このシステムは、スイッチ１１〜１４、ノード２１〜２４、ルータ３１，３２、外部ネットワーク４１，４２、サーバ１００を有する。
【００３９】
スイッチ１１〜１４は、ＮＩＣ１０１，１０２が接続されたネットワークを構成するレイヤ２スイッチである。
【００４０】
ルータ３１，３２は、外部ネットワーク４１，４２に対する通信を中継するためのルータである。ルータ３１，３２は、ＴＣＰ／ＩＰプロトコルを利用したルーティングを行う。ルータ３１，３２は、ＭＡＣアドレスを利用して、仮想ＮＩＣ１００ａとの通信を行う。例えば、ルータ３１，３２に割り当てられるＭＡＣアドレスをそれぞれＲ１，Ｒ２とする。
【００４１】
外部ネットワーク４１，４２はそれぞれ別セグメントのネットワークである。ネットワーク４１，４２には、不特定多数のノードが存在し、不特定多数のノードは、ルータ３１，３２を介して、ＴＣＰ／ＩＰプロトコル等で仮想ＮＩＣ１００ａと通信を行う。
【００４２】
サーバ１００は、仮想ＮＩＣ１００ａ、ＮＩＣ１０１，１０２、ＭＡＣアドレステーブル１１５を有する。ＮＩＣ１０１，１０２は、同一のネットワークセグメントに接続した物理ＮＩＣである。ネットワークセグメントは、ブロードキャストドメインに対応する。また、ＮＩＣ１０１，１０２は、同一のチームに属しているものとする。
【００４３】
仮想ＮＩＣ１００ａは、ＮＩＣ１０１、１０２をチーム化した仮想的なＮＩＣであり、ハートビートメッセージの送受信の制御を行う。仮想ＮＩＣ１００ａは、例えば、検知部、通信制御部に対応する。仮想ＮＩＣ１００ａは、チーム化されたＮＩＣ１０１，１０２間でハートビートメッセージを交換することで、ネットワークトポロジの状態を監視し、ネットワークの分断が発生していないかを検知する。そして、仮想ＮＩＣ１００ａは、ネットワークが分断しているか否かを基にして、ＮＩＣ１０１，１０２と各ノードとの通信を制御する。
【００４４】
仮想ＮＩＣ１００ａが、ネットワークの分断を検知する処理の一例について説明する。仮想ＮＩＣ１００ａは、ＮＩＣ１０１からＮＩＣ１０２宛にハートビートメッセージを送信し、所定時間以内に、ＮＩＣ１０２がＮＩＣ１０１からハートビートメッセージを受信した場合には、ネットワークが分断していないと判定する。これに対して、仮想ＮＩＣ１００ａは、ＮＩＣ１０１からＮＩＣ１０２宛にハートビートメッセージを送信し、所定時間以内に、ＮＩＣ１０２がＮＩＣ１０１からハートビートメッセージを受信しない場合には、ネットワークが分断したと判定する。
【００４５】
図３は、ハートビートメッセージのデータ構造の一例を示す図である。図３に示すように、このハートビートメッセージは、宛先ＭＡＣ、送信元ＭＡＣ、タイプ、メッセージ本文、ＦＣＳ（Frame  Check  Sequence）を有する。
【００４６】
宛先ＭＡＣには、宛先のＮＩＣのＭＡＣアドレスが設定される。なお、複数のＮＩＣに対するハートビートを一括して行う場合には、ブロードキャストアドレスまたはブロードキャストアドレスを宛先ＭＡＣに設定することもできる。
【００４７】
送信元ＭＡＣは、送信元のＮＩＣのアドレスが指定される。タイプには任意の値が設定される。メッセージ本文には、メッセージの種別やタイムスタンプ、シーケンス番号等、任意の情報が設定される。ＦＣＳには、ハートビートメッセージのエラー検出に利用する情報が格納される。
【００４８】
例えば、仮想ＮＩＣ１００ａが、ＮＩＣ１０１からＮＩＣ１０２宛にハートビートメッセージを送信する場合には、宛先ＭＡＣには、ＮＩＣ１０２のＭＡＣアドレスが設定され、送信元ＭＡＣには、ＮＩＣ１０１のＭＡＣアドレスが設定される。
【００４９】
なお、仮想ＮＩＣ１００ａは、ＮＩＣ１０２からＮＩＣ１０１宛にハートビートメッセージを送信して、ネットワークが分断しているか否かを判定してもよい。
【００５０】
次に、ネットワークの分断が発生していない場合の仮想ＮＩＣ１００ａの処理について説明する。仮想ＮＩＣ１００ａは、チーム化されたＮＩＣ１０１，１０２のうち、一方を使用して通信を実行する。例えば、仮想ＮＩＣ１００ａは、Active-Standby型のチーミングまたはロードバランス型のチーミングと同様の形態で通信を行う。仮想ＮＩＣ１００ａは、ＮＩＣ１０１またはＮＩＣ１０２が故障した場合には、縮退運用を行う。
【００５１】
次に、ネットワークの分断が発生した場合の仮想ＮＩＣ１００ａの処理について説明する。例えば、スイッチ１２とスイッチ１３との間のリンクが異常となった場合には、ＮＩＣ１０１とＮＩＣ１０２との間で行われていたハートビートが途絶するため、仮想ＮＩＣ１００ａは、ネットワークが２つに分断されたことを検出できる。ネットワークが分断されると、ＮＩＣ１０１では、ノード２１，２２、外部ネットワーク４１に対する通信を継続することができるが、ノード２３，２４、外部ネットワーク４２に対する通信が途絶する。また、ＮＩＣ１０１からＮＩＣ１０２へ切り替えを行ったとしても、ノード１３，１４、外部ネットワーク４２と通信を行うことができるが、ノード２１，２２、外部ネットワーク４２との通信が途絶する。
【００５２】
このため、仮想ＮＩＣ１００ａは、ＮＩＣ１０１およびＮＩＣ１０２をActive状態とすることで、ノード２１〜２４、外部ネットワーク４１，４２に対する通信を継続する。なお、仮想ＮＩＣ１００ａは、ハートビートメッセージの送受信を継続して行い、スイッチ１２，１３間のリンクの復旧を検出する。
【００５３】
ＮＩＣ１０１およびＮＩＣ１０２をActive状態とした直後、仮想ＮＩＣ１００ａは、サーバ１００のアプリケーションから通信相手に対するパケットの送信を、ＮＩＣ１０１およびＮＩＣ１０２の双方から行う。仮想ＮＩＣ１００ａは、パケットを複製して、ＮＩＣ１０１，１０２から同時にパケットを送信する。または、仮想ＮＩＣ１００ａは、ラウンドロビンにより、ＮＩＣ１０１，１０２を交互に使用してパケットを送信しても良い。
【００５４】
仮想ＮＩＣ１００ａは、パケットを送信した後に、係るパケットに対する応答パケットをネットワークから受信し、応答パケットの送信元ＭＡＣアドレスと、該応答パケットを受信したＮＩＣの情報とを対応付けて、ＭＡＣアドレステーブル１１５に登録する。仮想ＮＩＣ１００ａは、このような処理を繰り返し実行することで、ノードと該ノードに到達可能なＮＩＣとの対応関係をＭＡＣアドレステーブル１１５に学習する。
【００５５】
図４は、本実施例２に係るＭＡＣアドレステーブルのデータ構造の一例を示す図である。図４に示すように、このＭＡＣアドレステーブル１１５は、宛先と送信ＮＩＣとを対応付けて保持する。宛先は、応答パケットの送信元のノードのＭＡＣアドレスに対応する。送信ＮＩＣは、応答パケットを受信したＮＩＣに対応する。例えば、図４の１段目では、ＭＡＣアドレス「Ｎ１」のノード２１から送信された応答パケットを、ＮＩＣ１０１が受信したことを示す。このため、ＮＩＣ１０１からパケットを送信すれば、このパケットがノード２１に到達可能である。
【００５６】
ここで、仮想ＮＩＣ１００ａが、ＭＡＣアドレステーブル１１５に、ノードと該ノードに到達可能なＮＩＣとの対応関係を学習する処理の一例について説明する。図５は、ノードと該ノードに到達可能なＮＩＣとの対応関係を学習する処理を説明するための図である。図５のＭＡＣアドレステーブル１１５ａは、ＭＡＣアドレステーブルの初期状態に対応する。このため、ＭＡＣアドレステーブル１１５ａの送信ＮＩＣは、全て未学習となる。
【００５７】
例えば、仮想ＮＩＣ１００ａがアプリケーションから、ノード２３宛のパケットの送信依頼を受け付けた場合について説明する。ただし、スイッチ１２とスイッチ１３との間には、リンク異常が発生しているものとする。仮想ＮＩＣは、パケットを複製し、ＮＩＣ１０１およびＮＩＣ１０２からノード２３宛のパケットを送信する。ＮＩＣ１０１の送信先となるネットワークには、ノード２３が存在しないため、ＮＩＣ１０１から送信されたノード２３宛のパケットは破棄される。
【００５８】
これに対して、ＮＩＣ１０２の送信先となるネットワークには、ノード２３が存在するため、ＮＩＣ１０２から送信されたノード２３宛のパケットは、ノード２３に到達する。ノード２３は、応答パケットを仮想ＮＩＣ１００ａ宛の応答パケットを送信する。仮想ＮＩＣ１００ａは、ノード２３からの応答パケットを、ＮＩＣ１０２を介して受信する。この際、仮想ＮＩＣ１００ａは、ノード２３のＭＡＣアドレス「Ｎ３」とＮＩＣ１０２とを対応付けて、ＭＡＣアドレステーブル１１５ｂに登録する。仮想ＮＩＣ１００ａは、学習結果に基づいて、ノード２３宛のパケットを送信する場合には、ＮＩＣ１０２を利用する。
【００５９】
仮想ＮＩＣ１００ａは、その他のノードや外部ネットワークについても、同様にノードやルータからの応答パケットを受信したＮＩＣを学習する。例えば、最終的には、図４に示した情報がＭＡＣアドレステーブル１１５に登録される。仮想ＮＩＣ１００ａは、ノード２１，２２、外部ネットワーク４１に対する通信を、ＮＩＣ１０１を用いて行う。仮想ＮＩＣ１００ａは、ノード２３，２４、外部ネットワーク４２に対する通信を、ＮＩＣ１０２を用いて行う。
【００６０】
次に、スイッチが故障した場合の仮想ＮＩＣ１００ａの処理について説明する。例えば、スイッチ１３が故障したものとする。スイッチ１３が故障すると、スイッチ１２とスイッチ１３との間で通信が出来なくなるため、ネットワークが分断される。このため、ＮＩＣ１０１では、ノード２１，２２、外部ネットワーク４１に対する通信を継続出来るが、ノード２３，２４、外部ネットワーク４２に対する通信は途絶する。
【００６１】
この場合には、仮想ＮＩＣ１００ａは、上述したネットワークの分断が発生した場合と同様にして、ＮＩＣ１０１およびＮＩＣ１０２をActive状態とすることで、ノード２１，２２，２４、外部ネットワーク４１に対する通信を継続することが可能となる。しかし、スイッチ１３自体が故障している場合には、ノード２３、外部ネットワーク４２に到達可能な物理的な経路が存在しないため、ノード２３、外部ネットワーク４２に対する通信は途絶する。
【００６２】
次に、上記のスイッチの故障が復旧した場合の仮想ＮＩＣ１００ａの処理について説明する。なお、スイッチの故障により、ＮＩＣ１０１，１０２が、Active状態となっているものとする。故障したスイッチが交換されるなどの保守作業によりネットワークの分断が解消された場合には、ＮＩＣ１０１とＮＩＣ１０２との間でハートビートメッセージが送受信可能となるため、仮想ＮＩＣ１００ａは、ネットワークの分断が解消されたと判定する。仮想ＮＩＣ１００ａは、ＮＩＣ１０２をStandby状態に戻し、ＮＩＣ１０１のみを用いてノード２１〜２４、外部ネットワーク４１，４２と通信を行う。
【００６３】
仮想ＮＩＣ１００ａは、ネットワークの分断が解消された場合に、ＮＩＣ１０１から、送信元を仮想ＭＡＣアドレスとするブロードキャストパケットを送信する。これにより、各スイッチ１１〜１４のＭＡＣアドレステーブルが更新され、仮想ＭＡＣアドレス宛のパケットがＮＩＣ１０１に転送されるようになる。
【００６４】
ネットワークの分断が解消された後、仮想ＮＩＣ１００ａがＮＩＣ１０２をStandby状態に戻し、ＮＩＣ１０１のみを用いてノード２１〜２４、外部ネットワーク４１，４２と通信を行う。これにより、仮想ＮＩＣ１００ａが各スイッチ１１〜１４上の複数のポートについてＭＡＣアドレスを重複学習することを回避し、通信が不安定化することを防止できる。また、ＮＩＣ１０１とＮＩＣ１０２の双方がブロードキャストアドレス、マルチキャストアドレス宛のパケットを送信し続けることによるノード２１〜２４でのパケットの重複受信を回避できる。
【００６５】
次に、本実施例２に示したシステムの効果について説明する。仮想ＮＩＣ１００ａは、ＮＩＣ１０１およびＮＩＣ１０２との間でハートビートメッセージを送受信することで、ネットワークの分断を検知する。仮想ＮＩＣ１００ａは、ネットワークの分断を検知した場合に、ＮＩＣ１０１およびＮＩＣ１０２の双方を用いてノードと通信を実行する。このため、スイッチ故障やスイッチ間のリンク障害により単一のネットワークセグメントが複数に分断されてしまった場合でも、サーバ１００と各ノードとの通信を継続させることが出来る。
【００６６】
また、仮想ＮＩＣ１００ａは、ネットワークの分断を検知した場合に、各物理ＮＩＣと到達可能なネットワーク内のノードとの関係をＭＡＣアドレステーブル１１５に登録する。仮想ＮＩＣ２００ａは、ＭＡＣアドレステーブル１１５を基にして、接続先に到達可能な物理ＮＩＣとノードとを対応付けて、物理ＮＩＣとネットワーク内のノードとの通信を行う。このため、スイッチ故障やスイッチ間のリンク障害により単一のネットワークセグメントが複数に分断されてしまった場合でも、トラフィック量などを増加させることなく、各ノードとの通信を継続させることが出来る。
【実施例３】
【００６７】
次に、本実施例３に係るシステムの構成について説明する。図６は、本実施例３に係るシステムの構成を説明するための図である。図６に示すように、このシステムは、スイッチ１１〜１３、クライアント９１〜９３、サーバ２００を有する。
【００６８】
スイッチ１１〜１３は、物理ネットワークを構成するレイヤ２スイッチであり、サーバ２００と各クライアント９１〜９３間の通信を中継する。
【００６９】
クライアント９１〜９３は、仮想マシン２１１〜２１３の通信相手となるクライアントである。クライアント９１，９２，９３のＭＡＣアドレスをそれぞれ、ＭＡＣ−Ｃ１、ＭＡＣ−Ｃ２、ＭＡＣ−Ｃ３とする。
【００７０】
サーバ２００は、仮想マシン２１１〜２１３を実行するハイパーバイザが動作する物理サーバである。サーバ２００は、仮想ＮＩＣ２００ａ、ＮＩＣ２０１〜２０３、仮想マシン２１１〜２１３、仮想ブリッジ２１４、ＭＡＣアドレステーブル２１５を有する。
【００７１】
仮想ＮＩＣ２００ａは、ＮＩＣ２０１〜２０３をチーム化した仮想的なＮＩＣである。ＮＩＣ２０１〜２０３は、サーバ２００に搭載された物理ＮＩＣである。ＮＩＣ２０１，２０２，２０３のＭＡＣアドレスをそれぞれＭＡＣ−１、ＭＡＣ−２、ＭＡＣ−３とする。ＮＩＣ２０１〜２０３を適宜、物理ＮＩＣと表記する。
【００７２】
仮想マシン２１１〜２１３は、ハイパーバイザ上で動作する仮想マシンである。仮想マシン２１１〜２１３は、それぞれＶＭ−ＮＩＣ２１１ａ〜２１３ａを有する。
【００７３】
ＶＮ−ＮＩＣ２１１ａは、仮想マシン２１１上の仮想的なＮＩＣである。ＶＮ−ＮＩＣ２１１ａは、ＭＡＣアドレス「ＭＡＣ−ＶＭ１」が設定される。ＶＮ−ＮＩＣ２１１ａは、ＮＩＣ２０１〜２０３を使用して、イーサネットのようなレイヤ２プロトコルで通信を行う。
【００７４】
ＶＮ−ＮＩＣ２１２ａは、仮想マシン２１２上の仮想的なＮＩＣである。ＶＮ−ＮＩＣ２１２ａは、ＭＡＣアドレス「ＭＡＣ−ＶＭ２」が設定される。ＶＮ−ＮＩＣ２１２ａは、ＮＩＣ２０１〜２０３を使用して、イーサネットのようなレイヤ２プロトコルで通信を行う。
【００７５】
ＶＮ−ＮＩＣ２１３ａは、仮想マシン２１３上の仮想的なＮＩＣである。ＶＮ−ＮＩＣ２１３ａは、ＭＡＣアドレス「ＭＡＣ−ＶＭ３」が設定される。ＶＮ−ＮＩＣ２１３ａは、ＮＩＣ２０１〜２０３を使用して、イーサネットのようなレイヤ２プロトコルで通信を行う。
【００７６】
仮想ブリッジ２１４は、仮想マシン２１１〜２１３と物理ネットワークの通信を中継するための仮想的なブリッジである。仮想ブリッジ２１４は、仮想ＮＩＣ２００ａを介して、外部ネットワークと接続される。
【００７７】
続いて、仮想ＮＩＣ２００ａについて具体的に説明する。仮想ＮＩＣ２００ａは、ネットワークトポロジを監視する機能、ＮＩＣ２０１、２０２，２０３のリンク状態を監視する機能を有する。また、仮想ＮＩＣ２００ａは、送信元ＭＡＣアドレスによるロードバランス、または、宛先ＭＡＣアドレスに対する追従を行う機能を有する。
【００７８】
まず、ネットワークトポロジを監視する機能について説明する。仮想ＮＩＣ２００ａは、各ＮＩＣ２０１〜２０３間で、相互にハートビートメッセージを送信し、各ＮＩＣ２０１〜２０３間の通信経路の状態を監視する。ハートビートメッセージのデータ構造は、図３に示したデータ構造と同様である。
【００７９】
仮想ＮＩＣ２００ａが監視する通信経路は、ＮＩＣ２０１とＮＩＣ２０２との間、ＮＩＣ２０２とＮＩＣ２０３との間、ＮＩＣ２０３とＮＩＣ２０１との間である。仮想ＮＩＣ２００ａは、何れかの経路でハートビートが途絶した場合、ネットワークが分断されたと判定する。ハートビートの途絶が解消された場合には、ネットワークの分断が解消されたと判定する。
【００８０】
次に、仮想ＮＩＣ２００ａがＮＩＣ２０１，２０２，２０３のリンク状態を監視する機能について説明する。仮想ＮＩＣ２００ａは、ＮＩＣ２０１，２０２，２０３のリンク状態を監視する。仮想ＮＩＣ２００ａは、何れかのＮＩＣや接続先のスイッチの故障により、リンクダウンを検出した場合、リンクダウンしたＮＩＣを切り捨てて縮退運用で通信を行う。
【００８１】
次に、送信元ＭＡＣアドレスによるロードバランス、または、宛先ＭＡＣアドレスに対する追従を行う機能について説明する。仮想ＮＩＣ２００ａは、ネットワークトポロジの監視により、全てのハートビートが疎通している場合には、以下のように、仮想マシン毎に異なる物理ＮＩＣを使用して外部ネットワークとの通信を行う。
【００８２】
例えば、仮想マシン２１１の通信は、ＮＩＣ２０１を使用する。仮想マシン２１２の通信は、ＮＩＣ２０２を使用する。仮想マシン２１３の通信は、ＮＩＣ２０３を使用する。
【００８３】
これに対して、仮想ＮＩＣ２００ａは、一部または全てのハートビートが途絶した場合には、通信相手毎に異なる物理ＮＩＣを使用して通信を行う。例えば、全てのハートビートが途絶した場合には、以下のように、通信相手毎に、異なる物理ＮＩＣを使用して通信を行う。
【００８４】
例えば、クライアント９１に対する通信は、ＮＩＣ２０１を使用する。クライアント９２に対する通信は、ＮＩＣ２０２を使用する。クライアント９３に対する通信は、ＮＩＣ２０３を使用する。
【００８５】
次に、本実施例３のシステムが正常に稼働している場合の、ネットワークトポロジの監視状態と、各仮想マシンがクライアント毎に利用する物理ＮＩＣの一例について説明する。
【００８６】
ネットワークトポロジの監視状態は、下記のようになる。ＮＩＣ２０１とＮＩＣ２０２との間でハートビートメッセージは疎通する。ＮＩＣ２０２とＮＩＣ２０３との間でハートビートメッセージは疎通する。ＮＩＣ２０１とＮＩＣ２０３との間でハートビートメッセージは疎通する。このような場合には、仮想ＮＩＣ２００ａは、システムが正常に稼働していると判定する。
【００８７】
各仮想マシンがクライアント毎に利用する物理ＮＩＣは下記のようになる。仮想ＮＩＣ２００ａは、仮想マシン２１１とクライアント９１〜９３との通信を、ＮＩＣ２０１を使用して行う。仮想ＮＩＣ２００ａは、仮想マシン２１２とクライアント９１〜９３との通信を、ＮＩＣ２０２を使用して行う。仮想ＮＩＣ２００ａは、仮想マシン２１３とクライアント９１〜９３との通信を、ＮＩＣ２０３を使用して行う。このように、仮想ＮＩＣ２００ａは、各仮想マシンの通信を、それぞれ異なる物理ＮＩＣを選択して行うことで、ロードバランスを行う。
【００８８】
次に、ネットワークが２つに分断された場合の、ネットワークトポロジの監視状態と、各仮想マシンがクライアント毎に利用する物理ＮＩＣの一例について説明する。図７は、本実施例３について、ネットワークが２つに分断された場合の一例を示す図である。図７に示すように、例えば、スイッチ１１およびスイッチ１２の間の接続で障害が発生したものとする。
【００８９】
図７に示すように、ネットワークが分断された場合には、ネットワークトポロジの監視状態は、下記のようになる。すなわち、ＮＩＣ２０１とＮＩＣ２０２との間でハートビートメッセージは途絶する。ＮＩＣ２０２とＮＩＣ２０３との間でハートビートメッセージは疎通する。ＮＩＣ２０１とＮＩＣ２０３との間でハートビートメッセージは途絶する。このような場合には、仮想ＮＩＣ２００ａは、ネットワークがスイッチ１１、クライアント９１を含むネットワークと、スイッチ１２，１３、クライアント９２，９３を含むネットワークに分断されたと判定する。
【００９０】
図７に示すように、ネットワークが分断された場合には、各仮想マシンがクライアント毎に利用する物理ＮＩＣは下記のようになる。すなわち、仮想ＮＩＣ２００ａは、仮想マシン２１１とクライアント９１との通信を、ＮＩＣ２０１を使用して行う。仮想ＮＩＣ２００ａは、仮想マシン２１１とクライアント９２，９３との通信を、ＮＩＣ２０２を使用して行う。
【００９１】
仮想ＮＩＣ２００ａは、仮想マシン２１２とクライアント９１との通信を、ＮＩＣ２０１を使用して行う。仮想ＮＩＣ２００ａは、仮想マシン２１２とクライアント９２，９３との通信を、ＮＩＣ２０２を使用して行う。
【００９２】
仮想ＮＩＣ２００ａは、仮想マシン２１３とクライアント９１との通信を、ＮＩＣ２０１を使用して行う。仮想ＮＩＣ２００ａは、仮想マシン２１３とクライアント９２，９３との通信を、ＮＩＣ２０３を使用して行う。
【００９３】
上記のように、各仮想マシン２１１〜２１３の通信は、通信相手のＭＡＣアドレスに追従して、通信相手毎に異なる物理ＮＩＣで継続される。
【００９４】
図７に示したように、ネットワークが分断された場合の仮想マシンの通信について説明する。ここでは一例として、仮想マシン２１１の通信を用いて説明する。
【００９５】
ネットワークが分断される前は、仮想マシン２１１の通信は、ＮＩＣ２０１から全てのクライアント９１〜９３に対して到達可能であるため、仮想マシン２１１は、ＮＩＣ２０１のみを使用して、通信を行っていた。ＮＩＣ２０２，２０３については待機状態となっている。図７に示すように、スイッチ１１とスイッチ１２間の接続で障害が発生すると、ＮＩＣ２０１から送信されるパケットはクライアント９１のみ到達可能で、クライアント９２，９３に対して到達不能である。
【００９６】
図７に示すようにネットワークが分断された場合には、待機状態のＮＩＣ２０２，２０３の何れかを通信に追加で使用すれば、仮想マシン２１１は、クライアント９１〜９３との通信を行うことができる。仮想ＮＩＣ２００ａは、各通信相手のクライアントに対して、いずれのＮＩＣから到達可能かをＭＡＣアドレステーブル２１５に登録する。仮想ＮＩＣ２００ａはＮＩＣ２０１，２０２からパケットを送信する。仮想ＮＩＣ２００ａは、係るパケットに対する応答パケットをネットワークから受信し、応答パケットの送信元ＭＡＣアドレスと、該応答パケットを受信したＮＩＣの情報とを対応付けて、ＭＡＣアドレステーブル２１５に登録する。
【００９７】
図８は、ネットワークが２つに分断された場合の本実施例３のシステムの処理手順を示すフローチャートである。図８に示す例では、仮想マシン２１１とクライアント９２との通信を示す。仮想マシン２１１は、クライアント９２宛にパケットを送信する（ステップＳ１０）。仮想ＮＩＣ２００ａは、パケットを受信し、パケットを複製する（ステップＳ１１）。
【００９８】
仮想ＮＩＣ２００ａは、パケットを各ＮＩＣ２０１，２０２を介して送信する（ステップＳ１２）。ＮＩＣ２０１は、パケットを受信し、パケットを送信する（ステップＳ１３）。図７に示したように、ＮＩＣ２０１に接続されたネットワークには、クライアント９２が存在しないため、パケットは破棄される。
【００９９】
ＮＩＣ２０２は、パケットを受信し、パケットを送信する（ステップＳ１４）。図７に示したように、ＮＩＣ２０２に接続されたネットワークには、クライアント９２が存在する。このため、クライアント９２はパケットを受信し（ステップＳ１５）、仮想マシン２１１宛にパケットを送信する（ステップＳ１６）。
【０１００】
ＮＩＣ２０２は、パケットを受信し、パケットを仮想ＮＩＣ２００ａに送信する（ステップＳ１７）。仮想ＮＩＣ２００ａは、パケットを受信する（ステップＳ１８）。仮想ＮＩＣ２００ａは、送信元ＭＡＣと、受信ＮＩＣとを対応付けて、ＭＡＣアドレステーブル２１５に登録する（ステップＳ１９）。仮想ＮＩＣ２００ａは、ステップ１９において、クライアント９２のＭＡＣアドレス「ＭＡＣ−Ｃ２」と、ＮＩＣ２０２とを対応付けて、ＭＡＣアドレステーブル２１５に登録する。
【０１０１】
仮想ＮＩＣ２００ａは、パケットを仮想マシン２１１に送信し（ステップＳ２０）、仮想マシン２１１は、パケットを受信する（ステップＳ２１）。
【０１０２】
仮想マシン２１１は、クライアント９２宛のパケットを送信する（ステップＳ２２）。仮想ＮＩＣ２００ａは、パケットを受信し（ステップＳ２３）、ＭＡＣアドレステーブル２１５を基にして、パケットをＮＩＣ２０２に送信する（ステップＳ２４）。
【０１０３】
ＮＩＣ２０２は、パケットを受信し、パケットを送信する（ステップＳ２５）。クライアント９２は、パケットを受信する（ステップＳ２６）。図８では説明を省略するが、ステップＳ２６以降に、クライアント９２が仮想マシン２１１宛にパケットを送信しても良い。
【０１０４】
図８を用いて説明したように、クライアント９２に到達可能なＮＩＣを学習していない場合には、仮想ＮＩＣ２００ａは、ＮＩＣ２０１，２０２にパケットを送信し、クライアント９２からのパケットを待つ。そして、ステップＳ１９で、クライアント９２に到達可能なＮＩＣを学習した後は、仮想ＮＩＣ２００ａは、ＮＩＣ２０２を使用して、クライアント９２宛のパケットを送信する。
【０１０５】
同様に、クライアント９１についてはＮＩＣ２０１を使用して、パケットを送信するようになる。クライアント９３についてはＮＩＣ２０２を使用して、パケットを送信するようになる。また、仮想ＮＩＣ２００ａは、仮想マシン２１１からブロードキャストアドレスまたはマルチキャストアドレスを設定したパケットを取得した場合には、全てのクライアントが受信出来るように、ＮＩＣ２０１，２０２を使用してパケットを送信する。
【０１０６】
次に、ネットワークが３つに分断された場合の、ネットワークトポロジの監視状態と、各仮想マシンがクライアント毎に利用する物理ＮＩＣの一例について説明する。図９は、本実施例３について、ネットワークが３つに分断された場合の一例を示す図である。図９に示すように、例えば、スイッチ１１およびスイッチ１２の間の接続で障害が発生し、かつ、スイッチ１２およびスイッチ１３の間の接続で障害が発生したものとする。
【０１０７】
図９に示すように、ネットワークが分断された場合には、ネットワークトポロジの監視状態は、下記のようになる。すなわち、ＮＩＣ２０１とＮＩＣ２０２との間でハートビートメッセージは途絶する。ＮＩＣ２０２とＮＩＣ２０３との間でハートビートメッセージは途絶する。ＮＩＣ２０１とＮＩＣ２０３との間でハートビートメッセージは途絶する。このような場合には、仮想ＮＩＣ２００ａは、ネットワークがスイッチ１１、クライアント９１を含むネットワークと、スイッチ１２、クライアント９２を含むネットワークと、スイッチ１３、クライアント９３を含むネットワークに分断されたと判定する。
【０１０８】
図９に示すように、ネットワークが分断された場合には、各仮想マシンがクライアント毎に利用する物理ＮＩＣは下記のようになる。すなわち、仮想ＮＩＣ２００ａは、仮想マシン２１１とクライアント９１との通信を、ＮＩＣ２０１を使用して行う。仮想ＮＩＣ２００ａは、仮想マシン２１１とクライアント９２との通信を、ＮＩＣ２０２を使用して行う。仮想ＮＩＣ２００ａは、仮想マシン２１１とクライアント９３との通信を、ＮＩＣ２０３を使用して行う。
【０１０９】
仮想ＮＩＣ２００ａは、仮想マシン２１２とクライアント９１との通信を、ＮＩＣ２０１を使用して行う。仮想ＮＩＣ２００ａは、仮想マシン２１２とクライアント９２との通信を、ＮＩＣ２０２を使用して行う。仮想ＮＩＣ２００ａは、仮想マシン２１２とクライアント９３との通信を、ＮＩＣ２０３を使用して行う。
【０１１０】
仮想ＮＩＣ２００ａは、仮想マシン２１３とクライアント９１との通信を、ＮＩＣ２０１を使用して行う。仮想ＮＩＣ２００ａは、仮想マシン２１３とクライアント９２との通信を、ＮＩＣ２０２を使用して行う。
【０１１１】
図９に示したように、ネットワークが分断された場合の仮想マシンの通信について説明する。ここでは一例として、仮想マシン２１１の通信を用いて説明する。
【０１１２】
ネットワークが分断される前は、仮想マシン２１１の通信は、ＮＩＣ２０１から全てのクライアント９１〜９３に対して到達可能であるため、仮想マシン２１１は、ＮＩＣ２０１のみを使用して、通信を行う。ＮＩＣ２０２，２０３については待機状態となっている。図９に示すように、スイッチ１１，１２間の接続、スイッチ１２，１３間の接続で障害が発生すると、ＮＩＣ２０１から送信されるパケットは、クライアント９１のみ到達可能で、クライアント９２，９３に対して到達不能である。また、ＮＩＣ２０２から送信されるパケットは、クライアント９２のみ到達可能で、クライアント９１，９３に対して到達不能である。また、ＮＩＣ２０３から送信されるパケットは、クライアント９３のみ到達可能で、クライアント９１，９２に対して到達不能である。
【０１１３】
また、仮に、図７のようにネットワークが２つに分断され、図８に示す処理を行って、仮想マシン２１１がＮＩＣ２０１およびＮＩＣ２０２を通信に利用していたとしても、仮想マシン２１１は、クライアント９３と通信を行うことができない。
【０１１４】
図９に示すようにネットワークが分断された場合には、ＮＩＣ２０１，２０２，２０３を通信に利用すれば、仮想マシン２１１は、クライアント９１〜９３との通信を行うことができる。仮想ＮＩＣ２００ａは、各通信相手のクライアントに対して、いずれのＮＩＣから到達可能かをＭＡＣアドレステーブル２１５に登録する。仮想ＮＩＣ２００ａはＮＩＣ２０１〜２０３からパケットを送信する。仮想ＮＩＣ２００ａは、係るパケットに対する応答パケットをネットワークから受信し、応答パケットの送信元ＭＡＣアドレスと、該応答パケットを受信したＮＩＣの情報とを対応付けて、ＭＡＣアドレステーブル２１５に登録する。なお、ネットワークが２つに分断された場合に、ＭＡＣアドレステーブル２１５に情報を登録済みの場合には、仮想ＮＩＣ２００ａは、ＭＡＣアドレステーブル２１５をクリアし、再度学習し直す。
【０１１５】
図１０および図１１は、ネットワークが３つに分断された場合の本実施例３のシステムの処理手順を示すフローチャートである。図１０および図１１に示す例では、仮想マシン２１１とクライアント９３との通信を示す。図１０に示すように、仮想マシン２１１は、クライアント９３宛にパケットを送信する（ステップＳ３０）。仮想ＮＩＣ２００ａは、パケットを受信し、パケットを複製する（ステップＳ３１）。
【０１１６】
仮想ＮＩＣ２００ａは、パケットを各ＮＩＣ２０１，２０２，２０３を介して送信する（ステップＳ３２）。ＮＩＣ２０１は、パケットを受信し、パケットを送信する（ステップＳ３３）。図９に示したように、ＮＩＣ２０１に接続されたネットワークには、クライアント９３が存在しないため、パケットは破棄される。
【０１１７】
ＮＩＣ２０２は、パケットを受信し、パケットを送信する（ステップＳ３４）。図９に示したように、ＮＩＣ２０２に接続されたネットワークには、クライアント９３が存在しないため、パケットは破棄される。
【０１１８】
ＮＩＣ２０３は、パケットを受信し、パケットを送信する（ステップＳ３５）。図９に示したように、ＮＩＣ２０３に接続されたネットワークには、クライアント９３が存在する。このため、クライアント９３は、パケットを受信し（ステップＳ３６）、図１１のステップＳ３７に移行する。
【０１１９】
図１１の説明に移行する。図１１に示すように、クライアント９３は、仮想マシン２１１宛にパケットを送信する（ステップＳ３７）。ＮＩＣ２０３は、パケットを受信し、パケットを送信する（ステップＳ３８）。仮想ＮＩＣ２００ａは、パケットを受信する（ステップＳ３９）。仮想ＮＩＣ２００ａは、送信元ＭＡＣと、受信ＮＩＣとを対応付けて、ＭＡＣアドレステーブル２１５に登録する（ステップＳ４０）。仮想ＮＩＣ２００ａは、ステップＳ４０において、クライアント９３のＭＡＣアドレス「ＭＡＣ−Ｃ３」と、ＮＩＣ２０３とを対応付けて、ＭＡＣアドレステーブル２１５に登録する。
【０１２０】
仮想ＮＩＣ２００ａは、パケットを仮想マシン２１１に送信し（ステップＳ４１）、仮想マシン２１１は、パケットを受信する（ステップＳ４２）。
【０１２１】
仮想マシン２１１は、クライアント９３宛のパケットを送信する（ステップＳ４３）。仮想ＮＩＣ２００ａは、パケットを受信し（ステップＳ４４）、ＭＡＣアドレステーブル２１５を基にして、パケットをＮＩＣ２０３に送信する（ステップＳ４５）。
【０１２２】
ＮＩＣ２０３は、パケットを受信し、パケットを送信する（ステップＳ４６）。クライアント９３は、パケットを受信する（ステップＳ４７）。図１１では説明を省略するが、ステップＳ４７以降に、クライアント９３が仮想マシン２１１宛にパケットを送信しても良い。
【０１２３】
図１０および図１１を用いて説明したように、クライアント９３に到達可能なＮＩＣを学習していない場合には、仮想ＮＩＣ２００ａは、ＮＩＣ２０１〜２０３にパケットを送信してクライアント９３からのパケットを待つ。そして、ステップＳ４０で、クライアント９３に到達可能な物理ＮＩＣを学習した後は、仮想ＮＩＣ２００ａは、ＮＩＣ２０３を使用して、クライアント９３宛のパケットを送信する。
【０１２４】
また、仮想ＮＩＣ２００ａは、仮想マシン２１１からブロードキャストアドレスまたはマルチキャストアドレスを設定したパケットを取得した場合には、全てのクライアントが受信出来るように、ＮＩＣ２０１，２０２，２０３を使用してパケットを送信する。
【０１２５】
次に、仮想ＮＩＣ２００ａが、ネットワークトポロジの監視と分断の有無を判定する処理をより詳細に説明する。図１２は、監視対象となる通信経路の一例を示す図である。仮想ＮＩＣ２００ａは、各々の物理ＮＩＣから、他の物理ＮＩＣ宛のハートビートメッセージを送信することで、各々の通信経路を監視する。なお、ハートビートメッセージのデータ構造は、図３に示したものと同様である。ＮＩＣ２０１，２０２，２０３のＭＡＣアドレスを、ＭＡＣ−１，ＭＡＣ−２，ＭＡＣ−３とする。
【０１２６】
ハートビートメッセージを交換する経路と宛先ＭＡＣアドレス、送信元ＭＡＣアドレスは、下記のようになる。「ＮＩＣ２０１からＮＩＣ２０２に至る経路」のハートビートメッセージには、宛先ＭＡＣアドレス「ＭＡＣ−２」、送信元ＭＡＣアドレス「ＭＡＣ−１」が設定される。「ＮＩＣ２０２からＮＩＣ２０３に至る経路」のハートビートメッセージには、宛先ＭＡＣアドレス「ＭＡＣ−３」、送信元ＭＡＣアドレス「ＭＡＣ−２」が設定される。「ＮＩＣ２０３からＮＩＣ２０１に至る経路」のハートビートメッセージには、宛先ＭＡＣアドレス「ＭＡＣ−１」、送信元ＭＡＣアドレス「ＭＡＣ−３」が設定される。
【０１２７】
また、「ＮＩＣ２０２からＮＩＣ２０１に至る経路」のハートビートメッセージには、宛先ＭＡＣアドレス「ＭＡＣ−１」、送信元ＭＡＣアドレス「ＭＡＣ−２」が設定される。「ＮＩＣ２０３からＮＩＣ２０２に至る経路」のハートビートメッセージには、宛先ＭＡＣアドレス「ＭＡＣ−２」、送信元ＭＡＣアドレス「ＭＡＣ−３」が設定される。「ＮＩＣ２０１からＮＩＣ２０３に至る経路」のハートビートメッセージには、宛先ＭＡＣアドレス「ＭＡＣ−３」、送信元ＭＡＣアドレス「ＭＡＣ−１」が設定される。
【０１２８】
例えば、仮想ＮＩＣ２００ａは、ＮＩＣ２０１とＮＩＣ２０２との間の経路については、ＮＩＣ２０１からＮＩＣ２０２宛のハートビートメッセージと、ＮＩＣ２０２からＮＩＣ２０１宛のハートビートメッセージを定期的に送信する。仮想ＮＩＣ２００ａは、少なくとも一つのハートビートメッセージが宛先のＮＩＣに到達した場合には、ＮＩＣ２０１とＮＩＣ２０２との間の通信経路を正常とみなす。
【０１２９】
これに対して、仮想ＮＩＣ２００ａは、スイッチが故障するなどして、全てのハートビートメッセージが宛先のＮＩＣに到達しない場合には、ＮＩＣ２０１とＮＩＣ２０２との間の通信経路で異常が発生したと判定する。この場合には、仮想ＮＩＣ２００ａは、ネットワークトポロジが分断された可能性があると判定する。
【０１３０】
仮想ＮＩＣ２００ａは、通信経路の異常を検出した後は、ネットワークの復旧を検出するべく、ハートビートメッセージの送信を継続する。故障した機器が交換されるなどして、再び、ハートビートメッセージのうち少なくとも１つが宛先のＮＩＣに到達した時点で、仮想ＮＩＣ２００ａは、ネットワークの分断が解消されたと判定する。
【０１３１】
ここで、ＮＩＣ２０１，２０２，２０３が接続されたネットワークの分断の有無を判定する方法を整理すると下記のようになる。
【０１３２】
物理ＮＩＣの物理的な状態として、「ＵＰ」および「ＤＯＷＮ」を定義する。「ＵＰ」は、物理ＮＩＣがリンクアップ状態であり、通信が可能な状態である。「ＤＯＷＮ」は、物理ＮＩＣが故障する等してリンクダウン状態となり、通信できない状態である。
【０１３３】
上記のように、物理ＮＩＣの状態を定義すると、ＮＩＣ２０１〜２０３の状態の組み合わせは、図１３に示すように、状態Ｎ１〜Ｎ８の８通りとなる。図１３は、物理ＮＩＣの状態の組み合わせを示す図である。状態Ｎ１は、全てのＮＩＣ２０１〜２０３が使用可能な状態である。状態Ｎ２，Ｎ３，Ｎ５は、３本中２本のＮＩＣが使用可能な状態である。状態Ｎ４，Ｎ６，Ｎ７は、３本中１本のＮＩＣが使用可能な状態である。状態Ｎ８は、全てのＮＩＣ２０１〜２０３が使用不可能な状態である。
【０１３４】
図１３に示した状態Ｎ１〜Ｎ８のうち、ネットワークトポロジの状態を監視できるのは、２本以上の物理ＮＩＣが使用できる状態Ｎ１，Ｎ２，Ｎ３，Ｎ５の４つの状態である。各々の状態では、仮想ＮＩＣ２００ａは、下記の経路でネットワークトポロジの監視を行う。
【０１３５】
状態Ｎ１の場合には、仮想ＮＩＣ２００ａは、ＮＩＣ２０１とＮＩＣ２０２との間、ＮＩＣ２０２とＮＩＣ２０３との間、ＮＩＣ２０３とＮＩＣ２０１との間の監視を行う。状態Ｎ２の場合には、仮想ＮＩＣ２００ａは、ＮＩＣ２０１とＮＩＣ２０２との間の監視を行う。状態Ｎ３の場合には、仮想ＮＩＣ２００ａは、ＮＩＣ２０３とＮＩＣ２０１との間の監視を行う。状態Ｎ５の場合には、仮想ＮＩＣ２００ａは、ＮＩＣ２０２とＮＩＣ２０３との間の監視を行う。
【０１３６】
物理ＮＩＣの状態が「状態Ｎ１」の場合のネットワークトポロジの評価について説明する。全ての物理ＮＩＣがリンクアップ状態の場合には、ネットワークトポロジ監視の状態は、図１４に示すように、Ｎ１−１〜Ｎ１−８の８種類となる。図１４は、ネットワークトポロジ監視の状態を示す図（１）である。図１４の「ＮＩＣ２０１−ＮＩＣ２０２」は、ＮＩＣ２０１とＮＩＣ２０２との間の経路を示す。「ＮＩＣ２０２−ＮＩＣ２０３」は、ＮＩＣ２０２とＮＩＣ２０３との間の経路を示す。「ＮＩＣ２０３−ＮＩＣ２０１」は、ＮＩＣ３とＮＩＣ１との間の経路を示す。
【０１３７】
例えば、図１４において、ネットワークトポロジ監視の状態が「Ｎ１−１」の場合には、全ての経路が正常である。ネットワークトポロジ監視の状態が「Ｎ１−１」の場合には、仮想ＮＩＣ２００ａは、ネットワークの分断は無いと判定する。
【０１３８】
ネットワークトポロジ監視の状態が「Ｎ１−２」の場合には、ＮＩＣ２０１とＮＩＣ２０３との間の経路が途絶している。しかし、ＮＩＣ２０２からＮＩＣ２０１に至る経路およびＮＩＣ２０２からＮＩＣ２０３に至る経路が双方とも疎通している。ネットワークトポロジ監視の状態が「Ｎ１−２」の場合には、仮想ＮＩＣ２００ａは、ＮＩＣ２０２が他の全ての物理ＮＩＣと疎通しているため、ネットワークの分断は無いと判定する。
【０１３９】
ネットワークトポロジ監視の状態が「Ｎ１−３」の場合には、ＮＩＣ２０２とＮＩＣ２０３との間の経路が途絶している。しかし、ＮＩＣ２０１からＮＩＣ２０２に至る経路およびＮＩＣ２０１からＮＩＣ２０３に至る経路が疎通している。ネットワークトポロジ監視の状態が「Ｎ１−３」の場合には、仮想ＮＩＣ２００ａは、ＮＩＣ２０１が他の全ての物理ＮＩＣと疎通しているため、ネットワークの分断は無いと判定する。
【０１４０】
ネットワークトポロジ監視の状態が「Ｎ１−４」の場合には、ＮＩＣ２０２とＮＩＣ２０３との間の経路が途絶し、ＮＩＣ２０３とＮＩＣ２０１との間の経路が途絶している。ネットワークトポロジ監視の状態が「Ｎ１−４」の場合には、仮想ＮＩＣ２００ａは、ＮＩＣ２０３と、他の物理ＮＩＣとの間で、ネットワークが２つに分断されたと判定する。
【０１４１】
ネットワークトポロジ監視の状態が「Ｎ１−５」の場合には、ＮＩＣ２０１とＮＩＣ２０２との間の経路が途絶している。しかし、ＮＩＣ２０３からＮＩＣ２０１に至る経路およびＮＩＣ２０２からＮＩＣ２０３に至る経路が双方とも疎通している。ネットワークトポロジ監視の状態が「Ｎ１−５」の場合には、仮想ＮＩＣ２００ａは、ＮＩＣ２０３が他の全ての物理ＮＩＣと疎通しているため、ネットワークの分断は無いと判定する。
【０１４２】
ネットワークトポロジ監視の状態が「Ｎ１−６」の場合には、ＮＩＣ２０１とＮＩＣ２０２との間の経路が途絶し、ＮＩＣ２０３とＮＩＣ２０１との間の経路が途絶している。ネットワークトポロジ監視の状態が「Ｎ１−６」の場合には、仮想ＮＩＣ２００ａは、ＮＩＣ２０１と他の物理ＮＩＣとの間でネットワークが２つに分断されたと判定する。
【０１４３】
ネットワークトポロジ監視の状態が「Ｎ１−７」の場合には、ＮＩＣ２０１とＮＩＣ２０２との間の経路が途絶し、ＮＩＣ２０２とＮＩＣ２０３との間の経路が途絶している。ネットワークトポロジ監視の状態が「Ｎ１−７」の場合には、仮想ＮＩＣ２００ａは、ＮＩＣ２０２と他の物理ＮＩＣとの間でネットワークが２つに分断されたと判定する。
【０１４４】
ネットワークトポロジ監視の状態が「Ｎ１−８」の場合には、全ての経路が途絶している。ネットワークトポロジ監視の状態が「ＮＩ−８」の場合には、仮想ＮＩＣ２００ａは、全ての物理ＮＩＣの間でネットワークが３つに分断されたと判定する。
【０１４５】
上記より、ある物理ＮＩＣと他の全ての物理ＮＩＣとの間で、ハートビートメッセージが途絶した場合には、仮想ＮＩＣ２００ａは、その物理ＮＩＣが接続されたネットワークが、他の物理ＮＩＣが接続されたネットワークとトポロジと分断されたと判定する。仮想ＮＩＣ２００ａは、ハートビートメッセージの異常や復旧を検出した場合に、ネットワークトポロジの状態を確認し、ネットワークトポロジの変化に追従することで、ＭＡＣアドレスによるロードバランスが可能である。
【０１４６】
ここで、状態Ｎ１でのネットワークのトポロジ状態を判定する仮想ＮＩＣ２００ａの処理手順について説明する。図１５は、本実施例３に係る仮想ＮＩＣのネットワークのトポロジ状態を判定する処理手順を示すフローチャートである。図１５に示す処理は定期的に実行される。図１５に示すように、仮想ＮＩＣ２００ａは、ＮＩＣ２０１−ＮＩＣ２０２間が疎通しているか否かを判定する（ステップＳ１０１）。
【０１４７】
仮想ＮＩＣ２００ａは、ＮＩＣ２０１−ＮＩＣ２０２間が疎通している場合には（ステップＳ１０１，Ｙｅｓ）、ＮＩＣ２０２−ＮＩＣ２０３間が疎通しているか否かを判定する（ステップＳ１０２）。仮想ＮＩＣ２００ａは、ＮＩＣ２０２−ＮＩＣ２０３間が疎通している場合には（ステップＳ１０２，Ｙｅｓ）、ネットワークの分断なしと判定する（ステップＳ１０３）。
【０１４８】
ステップＳ１０２の説明に戻る。仮想ＮＩＣ２００ａは、ＮＩＣ２０２−ＮＩＣ２０３間が疎通していない場合には（ステップＳ１０２，Ｎｏ）、ＮＩＣ２０１−ＮＩＣ２０３間が疎通しているか否かを判定する（ステップＳ１０４）。仮想ＮＩＣ２００ａは、ＮＩＣ２０１−２０３間が疎通している場合には（ステップＳ１０４，Ｙｅｓ）、ステップＳ１０３に移行する。
【０１４９】
一方、仮想ＮＩＣ２００ａは、ＮＩＣ２０１−ＮＩＣ２０３間が疎通していない場合には（ステップＳ１０４，Ｎｏ）、ＮＩＣ２０３が分断していると判定する（ステップＳ１０５）。仮想ＮＩＣ２００ａは、ＮＩＣ２０１およびＮＩＣ２０３で通信を実行する（ステップＳ１０６）。
【０１５０】
ステップＳ１０１の説明に戻る。仮想ＮＩＣ２００ａは、ＮＩＣ２０１−ＮＩＣ２０２間が疎通していない場合には（ステップＳ１０１，Ｎｏ）、ＮＩＣ２０２−ＮＩＣ２０３間が疎通しているか否かを判定する（ステップＳ１０７）。
【０１５１】
仮想ＮＩＣ２００ａは、ＮＩＣ２０２−ＮＩＣ２０３間が疎通している場合には（ステップＳ１０７，Ｙｅｓ）、ＮＩＣ２０３−ＮＩＣ２０１間が疎通しているか否かを判定する（ステップＳ１０８）。仮想ＮＩＣ２００ａは、ＮＩＣ２０３−ＮＩＣ２０１間が疎通している場合には（ステップＳ１０８，Ｙｅｓ）、ステップＳ１０３に移行する。
【０１５２】
一方、仮想ＮＩＣ２００ａは、ＮＩＣ２０３−ＮＩＣ２０１間が疎通していない場合には（ステップＳ１０８，Ｎｏ）、ＮＩＣ２０１が分断されていると判定する（ステップＳ１０９）。仮想ＮＩＣ２００ａは、ＮＩＣ２０１およびＮＩＣ２０２で通信を実行する（ステップＳ１１０）。
【０１５３】
ステップＳ１０７の説明に戻る。仮想ＮＩＣ２００ａは、ＮＩＣ２０２−ＮＩＣ２０３間が疎通していない場合には（ステップＳ１０７，Ｎｏ）、ＮＩＣ２０３−ＮＩＣ２０１間が疎通しているか否かを判定する（ステップＳ１１１）。
【０１５４】
仮想ＮＩＣ２００ａは、ＮＩＣ２０３−２０１間が疎通している場合には（ステップＳ１１１，Ｙｅｓ）、ＮＩＣ２０２が分断されていると判定する（ステップＳ１１２）。仮想ＮＩＣ２００ａは、ＮＩＣ２０１およびＮＩＣ２０２で通信を実行する（ステップＳ１１３）。
【０１５５】
一方、仮想ＮＩＣ２００ａは、ＮＩＣ２０３−ＮＩＣ２０１間が疎通していない場合には（ステップＳ１１１，Ｎｏ）、全ＮＩＣ２０１，２０２，２０３が分断されていると判定する（ステップＳ１１４）。仮想ＮＩＣ２００ａは、全ＮＩＣ２０１，２０２，２０３で通信を実行する（ステップＳ１１５）。
【０１５６】
物理ＮＩＣの状態が「状態Ｎ２」の場合のネットワークトポロジの評価について説明する。３本の物理ＮＩＣのうち、ＮＩＣ２０３が故障している場合には、ネットワークトポロジ監視は、ＮＩＣ２０１とＮＩＣ２０２間のみで行われる。状態が「状態Ｎ２」の場合には、ネットワークトポロジ監視の状態は、図１６に示すように、Ｎ２−１，Ｎ２−２の２種類となる。図１６は、ネットワークトポロジ監視の状態を示す図（２）である。
【０１５７】
図１６において、ネットワークトポロジ監視の状態が「Ｎ２−１」の場合には、全ての経路が正常である。ネットワークトポロジ監視の状態が「Ｎ２−１」の場合には、仮想ＮＩＣ２００ａは、ネットワークの分断は無いと判定する。
【０１５８】
ネットワークトポロジ監視の状態が「Ｎ２−２」の場合には、ＮＩＣ２０１とＮＩＣ２０２との間の経路が途絶している。ネットワークトポロジ監視の状態が「Ｎ２−２」の場合には、仮想ＮＩＣ２００ａは、ＮＩＣ２０１とＮＩＣ２０２との間で、ネットワークが２つに分断されたと判定する。
【０１５９】
ところで、物理ＮＩＣの状態が「状態Ｎ３、Ｎ５」の場合のネットワークトポロジの評価は、物理ＮＩＣの状態が「状態Ｎ２」の場合と故障した物理ＮＩＣか異なるだけで、同様にネットワークの分断が判定される。
【０１６０】
次に、本実施例３に示したシステムの効果について説明する。仮想ＮＩＣ２００ａは、各物理ＮＩＣ間でハートビートメッセージを送受信することで、ネットワークの分断を検知する。仮想ＮＩＣ２００ａは、ネットワークの分断を検知した場合に、各物理ＮＩＣと到達可能なネットワーク内のクライアントとの関係をＭＡＣアドレステーブル２１５に登録する。仮想ＮＩＣ２００ａは、仮想ＭＡＣアドレステーブル２１５を基にして、接続先に到達可能な物理ＮＩＣと仮想マシンとを対応付けて、物理ＮＩＣとクライアントとの通信を行う。このため、スイッチ故障やスイッチ間のリンク障害により単一のネットワークセグメントが複数に分断されてしまった場合でも、各仮想マシンと各クライアントとの通信を継続させることが出来る。
【実施例４】
【０１６１】
次に、本実施例４に係るシステムの構成について説明する。図１７は、本実施例４に係るシステムの構成を説明するための図である。図１７に示すように、このシステムは、ノード１ａ〜ノードＮａ、Ｌ２ＳＷ１ｂ〜Ｎｂ、サーバ３００を有する。サーバ３００は、ＮＩＣ１ｃ〜Ｎｃ、仮想ＮＩＣ３００ａ、仮想マシン１ｄ〜Ｎｄを有する。
【０１６２】
ノード１ａ〜ノードＮａは、仮想マシン１ｄ〜Ｎｄの通信相手となるノードである。
【０１６３】
Ｌ２ＳＷ１ｂ〜Ｌ２ＳＷＮｂは、物理ＮＩＣが接続されるレイヤ２スイッチである。Ｌ２ＳＷ１ｂ〜Ｌ２ＳＷＮｂで単一のネットワークセグメントを構成する。Ｌ２ＳＷ１ｂ〜Ｌ２ＳＷＮｂにはそれぞれ、ＮＩＣ１ｃ〜ＮＩＣＮｃが接続される。
【０１６４】
ＮＩＣ１ｃ〜ＮＩＣＮｃは、仮想ＮＩＣ３００ａにより、チーム化されるＮＩＣである。ＮＩＣ１ｃ〜ＮＩＣＮｃをまとめて、適宜、物理ＮＩＣと表記する。
【０１６５】
仮想ＮＩＣ３００ａは、ＮＩＣ１ｃ〜ＮＩＣＮｃをチーム化する仮想ＮＩＣである。仮想ＮＩＣ３００ａは、ＮＩＣ１ｃ〜Ｎｃを使用して、イーサネットのようなレイヤ２プロトコルで通信を行う。
【０１６６】
仮想マシン１ｄ〜仮想マシンＮｄは、仮想ＮＩＣを利用して通信を行う仮想マシンである。仮想マシン１ｄ〜仮想マシンＮｄは、全ての機器が正常に稼働している場合には、仮想マシンＸｄはそれぞれ、対応するＮＩＣＸｃを使って通信を行う。ここで、全ての機器は、例えば、Ｌ２ＳＷ１ｂ〜Ｌ２ＳＷＮｂおよびＮＩＣ１ｃ〜ＮＩＣＮｃを含む。仮想マシンＸｄは、仮想マシン１ｄ〜仮想マシンＮｄに含まれる一つの仮想マシンを表す。ＮＩＣＸｃは、ＮＩＣ１ｃ〜ＮＩＣＮｃに含まれる一つのＮＩＣを表す。
【０１６７】
また、仮想マシンＸｄは、ＮＩＣＸｃが故障した場合には、ＮＩＣ（Ｘ＋１）ｃを利用して通信を行う。また、仮想マシンＸｄは、ＮＩＣ（Ｘ＋１）ｃが故障した場合には、ＮＩＣ（Ｘ＋２）ｃを利用して通信を行う。
【０１６８】
仮想マシン１ｄ〜仮想マシンＮｄは、Ｌ２ＳＷ間の接続が異常となり、ネットワークの分断が発生した場合には、分断されたネットワーク１つにつき、各１本ずつの物理ＮＩＣを利用して、通信を行う。なお、仮想マシンが利用する物理ＮＩＣは、仮想ＮＩＣ３００ａによって制御される。
【０１６９】
仮想ＮＩＣ３００ａは、仮想マシン１ｄ〜仮想マシンＮｄが利用するＮＩＣを、図１８に示す優先度に従って選択する。図１８は、仮想マシン毎の各ＮＩＣの優先度の一例を示す図である。図１８は、仮想マシンと優先度とを対応付ける。優先度に含まれる物理ＮＩＣは、左側ほど優先度が高く、右側ほど優先度が低い。例えば、仮想マシン１ｄについて、最も優先度の高い物理ＮＩＣは、ＮＩＣ１ｃとなる。これに対して、仮想マシン１ｄについて、最も優先度の低い物理ＮＩＣは、ＮＩＣＮｃとなる。仮想ＮＩＣ３００ａは、仮想マシンが利用している物理ＮＩＣが故障した場合には、故障していない物理ＮＩＣのうち、最も優先度の高い物理ＮＩＣを仮想マシンの物理ＮＩＣとして選択する。
【０１７０】
仮想ＮＩＣ３００ａは、実施例２、３の仮想ＮＩＣ１００ａ、２００ａと同様にして、チーム化したＮＩＣ間でハートビートメッセージを交換し、ネットワークの分断や復旧を検出する。例えば、物理ＮＩＣの数がＮの場合には、監視対象となる経路の数は式（１）に示すものとなる。
【０１７１】
監視対象となる経路の数＝Ｎ×（Ｎ−１）÷２・・・（１）
【０１７２】
式（１）により、チーム化する物理ＮＩＣの数を増やした場合、それに応じて監視対象の経路も指数的に増加することが分かる。チーム化する物理ＮＩＣの数が、２〜３本であれば、監視対象の経路は１〜３であり、全ての経路を監視することは容易である。しかし、より多数の物理ＮＩＣをチーム化した場合、常時、全ての経路を監視するのは非効率である。例えば、仮想ＮＩＣ３００ａが１０本の物理ＮＩＣをチーム化した場合には、監視対象の経路は式（１）より４５となるが、それら全ての経路を常時、個別に監視するのは現実的ではない。
【０１７３】
ネットワークトポロジ監視の目的は、ネットワークトポロジが分断されているかどうかと、どこで分断されているかを判定することである。このため、仮想ＮＩＣ３００ａは、全ての経路を監視しなくてもよい。以下において、仮想ＮＩＣ３００ａが、ネットワークの分断の有無およびどこで分断されているのかを効率的に判定する処理について説明する。
【０１７４】
仮想ＮＩＣ３００ａは、仮想マシンＸｄの通信で使用するＮＩＣＸｃが接続されたネットワークが、他の物理ＮＩＣと物理的に分断されたと判定する条件Ａを以下のように定める。なお、下記の条件Ａに含まれるＮＩＣＹｃを、仮想マシンＸｄが利用する物理ＮＩＣの中で、最も優先度の高い物理ＮＩＣとする。
【０１７５】
「ＮＩＣＸｃよりも優先度の高いＮＩＣＹｃ〜ＮＩＣ（Ｘ−１）ｃに対するハートビートが全ての途絶している」・・・条件Ａ
【０１７６】
仮想ＮＩＣ３００ａは、上記の条件Ａを満たす場合には、ＮＩＣＸｃを使用して仮想マシンＸｃの通信を行う。その後、仮想ＮＩＣ３００ａは、何れかの経路でハートビートメッセージが疎通した場合には、ＮＩＣＸｃの使用を中止するものとする。ただし、仮想ＮＩＣ３００ａは、ＮＩＣＸｃが全ての物理ＮＩＣで最も優先度の高い物理ＮＩＣである場合には、ＮＩＣＸｃの使用を継続する。
【０１７７】
例えば、仮想マシン１ｄの通信の場合には、仮想ＮＩＣ３００ａは、各々の物理ＮＩＣを通信に使用するかどうかを、下記のように判定する。なお、ここではいずれの物理ＮＩＣも故障していないものとする。
【０１７８】
仮想ＮＩＣ３００ａは、「ＮＩＣ１ｃ」を、監視の結果にかかわらず、常に仮想マシン１ｄの通信に利用する。ＮＩＣ１ｃを休止させることはない。
【０１７９】
仮想ＮＩＣ３００ａは、ＮＩＣ２ｃとＮＩＣ１ｃとの間のハートビートメッセージが途絶した場合には、「ＮＩＣ２ｃ」を、仮想マシン１ｄの通信に利用する。
【０１８０】
仮想ＮＩＣ３００ａは、ＮＩＣ３ｃとＮＩＣ２ｃとの間およびＮＩＣ３ｃとＮＩＣ１ｃとの間のハートビートメッセージが全て途絶した場合には、「ＮＩＣ３ｃ」を、仮想マシン１ｄの通信に利用する。仮想ＮＩＣ３００ａは、すくなくとも１つ以上の経路でハートビートメッセージが疎通する場合には、ＮＩＣ３ｃの利用を休止する。
【０１８１】
仮想ＮＩＣ３００ａは、ＮＩＣ（Ｎ−１）ｃとＮＩＣ（Ｎ−２）ｃとの間、ＮＩＣ（Ｎ−１）ｃとＮＩＣ（Ｎ−３）ｃとの間、・・・、ＮＩＣ（Ｎ−１）ｃとＮＩＣ２ｃとの間、ＮＩＣ（Ｎ−１）ｃとＮＩＣ１ｃとの間でハートビートメッセージが途絶したとする。この場合には、仮想ＮＩＣ３００ａは、「ＮＩＣ（Ｎ−１）ｃ」を、仮想マシン１ｄの通信に利用する。
【０１８２】
仮想ＮＩＣ３００ａは、ＮＩＣＮｃとＮＩＣ（Ｎ−１）ｃとの間、ＮＩＣＮｃとＮＩＣ（Ｎ−２）ｃとの間、・・・、ＮＩＣＮｃとＮＩＣ２ｃとの間、ＮＩＣＮｃとＮＩＣ１ｃとの間でハートビートメッセージが途絶したとする。この場合には、仮想ＮＩＣ３００ａは、「ＮＩＣＮｃ」を、仮想マシン１ｃの通信に利用する。
【０１８３】
次に、仮想ＮＩＣ３００ａがネットワークの分断が無いことを確認する処理について説明する。図１９は、本実施例４の仮想ＮＩＣがネットワークの分断が無いことを確認する処理を説明するための図である。仮想ＮＩＣ３００ａは、チーム化している物理ＮＩＣの何れか１つから、ハートビートメッセージをマルチキャストまたはブロードキャストする。他の全ての物理ＮＩＣにおいて、ハートビートメッセージを受信した場合には、仮想ＮＩＣ３００ａは、ネットワークが分断していないと判定する。
【０１８４】
例えば、図１９に示す例では、仮想ＮＩＣ３００ａは、ＮＩＣ１ｃから、他のＮＩＣ２ｃ〜ＮＩＣＮｃにハートビートメッセージをブロードキャストする。仮想ＮＩＣ３００ａは、ＮＩＣ１ｃからブロードキャストされたハートビートメッセージが、ＮＩＣ２ｃ〜ＮＩＣＮｃに到達した場合には、ネットワークが分断していないと判定する。
【０１８５】
一方、仮想ＮＩＣ３００ａは、ハートビートメッセージをブロードキャストした後、１つでもハートビートメッセージメッセージを受信しない物理ＮＩＣが存在する場合には、分断箇所の特定を行う。
【０１８６】
次に、仮想ＮＩＣ３００ａが、分断箇所の特定を行う処理について説明する。図２０は、本実施例４の仮想ＮＩＣが分断箇所を特定する処理を説明するための図（１）である。仮想ＮＩＣ３００ａは、分断箇所の特定を行う場合には、各物理ＮＩＣからそれぞれ、ハートビートメッセージを、ブロードキャストまたはマルチキャストする。仮想ＮＩＣ３００ａは、送信されたハートビートメッセージが、どの物理ＮＩＣで受信できたのかを基にして、ネットワークの分断箇所を判定する。
【０１８７】
例えば、図２０に示すように、Ｌ２ＳＷ２ｂとＬ２ＳＷ３ｂとの間の接続が切断され、ネットワークトポロジが２つに分断された場合について説明する。図２０に示すように、ネットワークが２つに分断されている場合には、各物理ＮＩＣから送信されたハートビートメッセージの到達状況は、図２１に示すものとなる。
【０１８８】
図２１は、図２０のようにネットワークが２つに分断された場合のハートビートメッセージの到達状況を示す図である。図２１において、送信元は、ハートビートメッセージをブロードキャストした物理ＮＩＣを示す。宛先は、ハートビートメッセージの宛先となる物理ＮＩＣである。図２１において、「ＯＫ」は、ハートビートメッセージが到達したことを示す。「ＮＧ」は、ハートビートメッセージが到達しないことを示す。
【０１８９】
例えば、図２１の１段目では、ＮＩＣ１ｃからブロードキャストされたハートビートメッセージは、ＮＩＣ２ｃに到達している。これに対して、ＮＩＣ１ｃからブロードキャストされたハートビートメッセージは、ＮＩＣ３ｃ〜ＮＩＣＮｃに到達していない。
【０１９０】
ハートビートメッセージの到達状況が図２１に示すものとなった場合には、仮想ＮＩＣ３００ａは、ＮＩＣ１ｃ，２ｃが接続されたネットワークと、ＮＩＣ３ｃ〜ＮＩＣＮｃが接続されたネットワークに分断されたと判定する。
【０１９１】
仮想ＮＩＣ３００ａは、ハートビートメッセージの到達状況が図２１に示すものとなった場合には、下記に示すように、各仮想マシンが利用する物理ＮＩＣを選択する。例えば、仮想ＮＩＣ３００ａは、分断された各ネットワークに接続された物理ＮＩＣのうち、より優先度の高い物理ＮＩＣを、ネットワーク毎に選択する。仮想マシン毎の物理ＮＩＣの優先度は、図１８に示した。一例として、仮想マシン１ｄ，２ｄ，３ｄ，（Ｎ−１）ｄ，Ｎｄが使用する物理ＮＩＣについて説明する。
【０１９２】
仮想マシン１ｄが使用する物理ＮＩＣについて説明する。仮想ＮＩＣ３００ａは、ハートビートメッセージの到達状況に関わらず、仮想マシン１ｄが使用する物理ＮＩＣとして、「ＮＩＣ１ｃ」を選択する。また、仮想ＮＩＣ３００ａは、図２１のような状況となった場合には、仮想マシン１ｄが使用する物理ＮＩＣとして、「ＮＩＣ３ｃ」を更に選択する。
【０１９３】
仮想マシン２ｄが使用する物理ＮＩＣについて説明する。仮想ＮＩＣ３００ａは、ハートビートメッセージの到達状況に関わらず、仮想マシン２ｄが使用する物理ＮＩＣとして、「ＮＩＣ２ｃ」を選択する。また、仮想ＮＩＣ３００ａは、図２１のような状況となった場合には、仮想マシン２ｄが使用する物理ＮＩＣとして、「ＮＩＣ３ｃ」を更に選択する。
【０１９４】
仮想マシン３ｄが使用する物理ＮＩＣについて説明する。仮想ＮＩＣ３００ａは、ハートビートメッセージの到達状況に関わらず、仮想マシン３ｄが使用する物理ＮＩＣとして、「ＮＩＣ３ｃ」を選択する。また、仮想ＮＩＣ３００ａは、図２１のような状況となった場合には、仮想マシン３ｄが使用する物理ＮＩＣとして、「ＮＩＣ１ｃ」を更に選択する。
【０１９５】
仮想マシンＮｄ−１が使用する物理ＮＩＣについて説明する。仮想ＮＩＣ３００ａは、ハートビートメッセージの到達状況に関わらず、仮想マシン（Ｎ−１）ｄが使用する物理ＮＩＣとして、「ＮＩＣ（Ｎ−１）ｄ」を選択する。また、仮想ＮＩＣ３００ａは、図２１のような状況となった場合には、仮想マシン（Ｎ−１）ｄが使用する物理ＮＩＣとして、「ＮＩＣ１ｃ」を更に選択する。
【０１９６】
仮想マシンＮｄが使用する物理ＮＩＣについて説明する。仮想ＮＩＣ３００ａは、ハートビートメッセージの到達状況に関わらず、仮想マシンＮｄが使用する物理ＮＩＣとして、「ＮＩＣＮｃ」を選択する。また、仮想ＮＩＣ３００ａは、図２１のような状況となった場合には、仮想マシン（Ｎ−１）ｄが使用する物理ＮＩＣとして、「ＮＩＣ１ｃ」を更に選択する。
【０１９７】
上記のように、仮想ＮＩＣ３００ａは、チーム化しているＮ本の中から、２つに分断された各ネットワークに接続されている物理ＮＩＣを１本ずつ各仮想マシンに対して選択するので、各仮想マシンは、各ノードとの通信を継続することができる。
【０１９８】
図２０では、ネットワークが２つに分断された場合について説明した。続いて、ネットワークが３つに分断された場合の、分断特定を行う処理について説明する。図２２は、本実施例４の仮想ＮＩＣが分断箇所を特定する処理を説明するための図（２）である。
【０１９９】
例えば、図２２に示すように、Ｌ２ＳＷ２ｂとＬ２ＳＷ３ｂとの間の接続が切断され、かつ、Ｌ２ＳＷ（Ｎ−１）ｂとＬ２ＳＷＮｂとの間の接続が切断された場合には、ハートビートメッセージの到達状況は、図２３に示すものとなる。
【０２００】
図２３は、図２２のようにネットワークが３つに分断された場合のハートビートメッセージの到達状況を示す図である。図２３において、送信元は、ハートビートメッセージをブロードキャストした物理ＮＩＣを示す。宛先は、ハートビートメッセージの宛先となる物理ＮＩＣである。図２３において、「ＯＫ」は、ハートビートメッセージが到達したことを示す。「ＮＧ」は、ハートビートメッセージが到達しないことを示す。
【０２０１】
例えば、図２３の１段目では、ＮＩＣ１ｃからブロードキャストされたハートビートメッセージは、ＮＩＣ２ｃに到達している。これに対して、ＮＩＣ１ｃからブロードキャストされたハートビートメッセージは、ＮＩＣ３ｃ〜ＮＩＣＮｃに到達していない。
【０２０２】
到達状況が図２３に示すものとなった場合には、仮想ＮＩＣ３００ａは、ＮＩＣ１ｃ，２ｃが接続されたネットワークと、ＮＩＣ３ｃ〜ＮＩＣ（Ｎ−１）ｃが接続されたネットワークと、ＮＩＣＮｃに接続されたネットワークとに分断されたと判定する。
【０２０３】
仮想ＮＩＣ３００ａは、ハートビートメッセージの到達状況が図２３に示すものとなった場合には、下記に示すように、各仮想マシンが利用する物理ＮＩＣを選択する。例えば、仮想ＮＩＣ３００ａは、分断された各ネットワークに接続された物理ＮＩＣのうち、より優先度の高い物理ＮＩＣを、ネットワーク毎に選択する。仮想マシン毎の物理ＮＩＣの優先度は、図１８に示した。一例として、仮想マシン１ｄ，２ｄ，３ｄ，（Ｎ−１）ｄ，Ｎｄが使用する物理ＮＩＣについて説明する。
【０２０４】
仮想マシン１ｄが使用する物理ＮＩＣについて説明する。仮想ＮＩＣ３００ａは、ハートビートメッセージの到達状況に関わらず、仮想マシン１ｄが使用する物理ＮＩＣとして、「ＮＩＣ１ｃ」を選択する。また、仮想ＮＩＣ３００ａは、図２３のような状況となった場合には、仮想マシン１ｄが使用する物理ＮＩＣとして、「ＮＩＣ３ｃ」、「ＮＩＣＮｃ」を更に選択する。
【０２０５】
仮想マシン２ｄが使用する物理ＮＩＣについて説明する。仮想ＮＩＣ３００ａは、ハートビートメッセージの到達状況に関わらず、仮想マシン２ｄが使用する物理ＮＩＣとして、「ＮＩＣ２ｃ」を選択する。また、仮想ＮＩＣ３００ａは、図２３のような状況となった場合には、仮想マシン２ｄが使用する物理ＮＩＣとして、「ＮＩＣ３ｃ」、「ＮＩＣＮｃ」を更に選択する。
【０２０６】
仮想マシン３ｄが使用する物理ＮＩＣについて説明する。仮想ＮＩＣ３００ａは、ハートビートメッセージの到達状況に関わらず、仮想マシン３ｄが使用する物理ＮＩＣとして、「ＮＩＣ３ｃ」を選択する。また、仮想ＮＩＣ３００ａは、図２３のような状況となった場合には、仮想マシン３ｄが使用する物理ＮＩＣとして、「ＮＩＣ１ｃ」、「ＮＩＣＮｃ」を更に選択する。
【０２０７】
仮想マシン（Ｎ−１）ｄが使用する物理ＮＩＣについて説明する。仮想ＮＩＣ３００ａは、ハートビートメッセージの到達状況に関わらず、仮想マシン（Ｎ−１）ｄが使用する物理ＮＩＣとして、「ＮＩＣ（Ｎ−１）ｃ」を選択する。また、仮想ＮＩＣ３００ａは、図２３のような状況となった場合には、仮想マシン（Ｎ−１）ｄが使用する物理ＮＩＣとして、「ＮＩＣ１ｃ」、「ＮＩＣＮｃ」を更に選択する。
【０２０８】
仮想マシンＮｄが使用する物理ＮＩＣについて説明する。仮想ＮＩＣ３００ａは、ハートビートメッセージの到達状況に関わらず、仮想マシンＮｄが使用する物理ＮＩＣとして、「ＮＩＣＮｃ」を選択する。また、仮想ＮＩＣ３００ａは、図２３のような状況となった場合には、仮想マシンＮｄが使用する物理ＮＩＣとして、「ＮＩＣ１ｃ」、「ＮＩＣ３ｃ」を更に選択する。
【０２０９】
上記のように、仮想ＮＩＣ３００ａは、チーム化しているＮ本の中から、３つに分断された各ネットワークに接続されている物理ＮＩＣを１本ずつ各仮想マシンに対して選択するので、各仮想マシンは、各ノードとの通信を継続することができる。
【０２１０】
次に、仮想ＮＩＣ３００ａが経路状態を判定するアルゴリズムについて説明する。仮想ＮＩＣ３００ａは、物理ＮＩＣ監視テーブル３１５ａと、経路監視テーブル３１５ｂを利用する。物理ＮＩＣ監視テーブル３１５ａおよび経路監視テーブル３１５ｂは、記憶部３１５に記憶される。
【０２１１】
図２４は、物理ＮＩＣ監視テーブルのデータ構造の一例を示す図である。図２４に示すように、物理ＮＩＣ監視テーブル３１５ａは、物理ＮＩＣと、物理ＮＩＣ状態と、初期値とを対応付けて保持する。
【０２１２】
図２４の物理ＮＩＣにおいて、チーム化の対象となるＮＩＣを優先度の高い順にＮＩＣ[１]〜ＮＩＣ[Ｎ]を定義する。また、物理ＮＩＣ状態において、各ＮＩＣを通信に利用するか否かを保持するための変数ＮＳ[１]〜ＮＳ[Ｎ]を定義する。ＮＳ[１]〜ＮＳ[Ｎ]は、優先度の高い順にＮＳ[１]〜ＮＳ[Ｎ]となる。ＮＳ[１]の初期値を常にＡＣＴＩＶＥとする。ＮＳ[２]以降は全て初期値をＩＮＡＣＴＩＶＥとする。ＡＣＴＩＶＥは、仮想マシンの通信に利用することを示す。ＩＮＡＣＴＩＶＥは、仮想マシンの通信に利用しないことを示す。ＮＳ[２]以降について、ネットワークトポロジの状態を確認した結果、通信に使用すると判定した場合には、ＡＣＴＩＶＥとなる。
【０２１３】
図２５は、経路監視テーブルのデータ構造の一例を示す図である。図２５に示すように、ハートビートメッセージを送信した結果を格納するための変数として、Ｎ×Ｎ個の配列ＨＢ[Ｘ][Ｙ]を定義する。各配列ＨＢの初期値はＮＧとし、ハートビートメッセージが疎通する場合には、ＯＫを設定するものとする。なお、図２５において、送信元はハートビートメッセージの送信元を示す。宛先は、ハートビートメッセージの宛先を示す。
【０２１４】
図２４に示した物理ＮＩＣ監視テーブル３１５ａおよび図２５に示した経路監視テーブル３１５ｂを用いた仮想ＮＩＣ３００ａの処理手順を図２６のフローチャートを用いて説明する。図２６は、本実施例４に係る仮想ＮＩＣが経路状態を判定する処理手順を示すフローチャートである。例えば、図２６に示す処理は、仮想ＮＩＣ３００ａによって定期的に実行される。
【０２１５】
図２６に示すように、仮想ＮＩＣ３００ａは、ＮＩＣ[１]からハートビートメッセージをブロードキャスト送信する（ステップＳ１０１）。仮想ＮＩＣ３００ａは、他のＮＩＣでハートビートメッセージを受信し、経路監視テーブル３１５ｂのＨＢ[１][２]〜ＨＢ[１][Ｎ]に結果を格納する（ステップＳ１０２）。仮想ＮＩＣ３００ａは、ステップＳ１０２において、ハートビートメッセージを受信した場合には、「ＯＫ」を設定し、ハートビートメッセージを受信していない場合には、「ＮＧ」を設定する。
【０２１６】
仮想ＮＩＣ３００ａは、ＨＢ[１][２]〜ＨＢ[１][Ｎ]の値がすべてＯＫであるか否かを判定する（ステップＳ１０３）。仮想ＮＩＣ３００ａは、ＨＢ[１][２]〜ＨＢ[１][Ｎ]の値がすべてＯＫである場合には（ステップＳ１０３，Ｙｅｓ）、処理を終了する。
【０２１７】
一方、仮想ＮＩＣ３００ａは、ＨＢ[１][２]〜ＨＢ[１][Ｎ]の値がすべてＯＫでない場合には（ステップＳ１０３，Ｎｏ）、変数Ｘに１を設定する（ステップＳ１０４）。
【０２１８】
仮想ＮＩＣ３００ａは、ＮＩＣ[Ｘ]からハートビートメッセージをブロードキャスト送信する（ステップＳ１０５）。仮想ＮＩＣ３００ａは、他のＮＩＣでハートビートメッセージを受信し、経路監視テーブル３１５ｂのＨＢ[Ｘ][１]〜ＨＢ[Ｘ][Ｎ]に結果を格納する（ステップＳ１０６）。
【０２１９】
仮想ＮＩＣ３００ａは、変数Ｘの値に１を加算した値を、変数Ｘに設定する（ステップＳ１０７）。仮想ＮＩＣ３００ａは、変数Ｘの値がＮの値より大きいか否かを判定する（ステップＳ１０８）。仮想ＮＩＣ３００ａは、変数Ｘの値がＮの値以下の場合には（ステップＳ１０８，Ｎｏ）、ステップＳ１０５に移行する。
【０２２０】
一方、仮想ＮＩＣ３００ａは、変数Ｘの値がＮの値よりも大きい場合には（ステップＳ１０８，Ｙｅｓ）、ハートビートメッセージの結果を評価する（ステップＳ１０９）。
【０２２１】
ここで、図２６のステップＳ１０９に示したハートビートメッセージの結果を評価する処理手順を具体的に説明する。図２７は、ハートビートメッセージの結果を評価する処理手順を示すフローチャートである。
【０２２２】
図２７に示すように、仮想ＮＩＣ３００ａは、変数Ｘの値に２を設定し（ステップＳ２０１）、変数Ｙの値に１を設定する（ステップＳ２０２）。仮想ＮＩＣ３００ａは、経路監視テーブル３１５ｂのＨＢ[Ｘ][Ｙ]に設定された情報がＯＫであるか否かを判定する（ステップＳ２０３）。仮想ＮＩＣ３００ａは、経路監視テーブル３１５ｂのＨＢ[Ｘ][Ｙ]に設定された情報がＯＫである場合には（ステップＳ２０３，Ｙｅｓ）、ステップＳ２１１に移行する。
【０２２３】
一方、仮想ＮＩＣ３００ａは、経路監視テーブル３１５ｂのＨＢ[Ｘ][Ｙ]に設定された情報がＯＫでない場合には（ステップＳ２０３，Ｎｏ）、変数Ｙの値に１を加算した値を、変数Ｙに設定する（ステップＳ２０４）。仮想ＮＩＣ３００ａは、変数Ｙの値が変数Ｘ以上であるか否かを判定する（ステップＳ２０５）。
【０２２４】
仮想ＮＩＣ３００ａは、変数Ｙの値が変数Ｘ以上でない場合には（ステップＳ２０５，Ｎｏ）、ステップＳ２０３に移行する。一方、仮想ＮＩＣ３００ａは、変数Ｙの値が変数Ｘの値以上の場合には（ステップＳ２０５，Ｙｅｓ）、変数Ｚの値に２を設定する（ステップＳ２０６）。
【０２２５】
仮想ＮＩＣ３００ａは、経路監視テーブル３１５ｂのＨＢ[Ｚ][Ｘ]に設定された情報がＯＫであるか否かを判定する（ステップＳ２０７）。仮想ＮＩＣ３００ａは、ＨＢ[Ｚ][Ｘ]に設定された情報がＯＫである場合には（ステップＳ２０７，Ｙｅｓ）、ステップＳ２１１に移行する。一方、仮想ＮＩＣ３００ａは、ＨＢ[Ｚ][Ｘ]に設定された情報がＯＫでない場合には（ステップＳ２０７，Ｎｏ）、変数Ｚの値に１を加算した値を、変数Ｚに設定する（ステップＳ２０８）。
【０２２６】
仮想ＮＩＣ３００ａは、変数Ｚの値が変数Ｘ以上であるか否かを判定する（ステップＳ２０９）。仮想ＮＩＣ３００ａは、変数Ｚの値が変数Ｘ以上でない場合には（ステップＳ２０９，Ｎｏ）、ステップＳ２０７に移行する。
【０２２７】
一方、仮想ＮＩＣ３００ａは、変数Ｚの値が変数Ｘ以上である場合には（ステップＳ２０９，Ｙｅｓ）、物理ＮＩＣ監視テーブル３１５ａのＮＸ[Ｘ]の情報をＡＣＴＩＶＥに設定する（ステップＳ２１０）。仮想ＮＩＣ３００ａは、変数Ｘの値に１を加算した値を、変数Ｘに設定する（ステップＳ２１１）。
【０２２８】
仮想ＮＩＣ３００ａは、Ｘの値がＮの値よりも大きいか否かを判定する（ステップＳ２１２）。仮想ＮＩＣ３００ａは、Ｘの値がＮの値よりも大きくない場合には（ステップＳ２１２，Ｎｏ）、ステップＳ２０２に移行する。一方、仮想ＮＩＣ３００ａは、Ｘの値がＮの値よりも大きい場合には（ステップＳ２１２，Ｙｅｓ）、処理を終了する。
【０２２９】
次に、ネットワークに分断が発生している場合のパケットの送信手順について説明する。仮想ＮＩＣ３００ａは、ネットワークに分断が発生している場合には、ＡＣＴＩＶＥ状態の物理ＮＩＣの何れか、または、全ての物理ＮＩＣを使用する。仮想ＮＩＣ３００ａは、ＡＣＴＩＶＥ状態の物理ＮＩＣにおいて、ノードから応答パケットを受信した場合には、応答パケットの送信元ＭＡＣアドレスと、受信した物理ＮＩＣアドレスとを対応付けて、ＭＡＣアドレステーブル３１５ｃに登録する。ＭＡＣアドレステーブル３１５ｃのデータ構造は、例えば、図４に示したように、宛先と送信ＮＩＣとを対応付ける。
【０２３０】
図２８は、パケットの送信手順を示すフローチャートである。図２８に示す処理は、仮想ＮＩＣ３００ａが、仮想マシンからパケットを取得したことを契機に実行される。図２８に示すように、仮想ＮＩＣ３００ａは、パケットの宛先ＭＡＣアドレスがユニキャストであるか否かを判定する（ステップＳ３０１）。仮想ＮＩＣ３００ａは、パケットの宛先ＭＡＣアドレスがユニキャストの場合には（ステップＳ３０１，Ｙｅｓ）、ステップＳ３０２に移行する。
【０２３１】
仮想ＮＩＣ３００ａは、ＭＡＣアドレステーブル３１５ｃから宛先ＡＭＣアドレスを検索する（ステップＳ３０２）。仮想ＮＩＣ３００ａは、宛先ＭＡＣアドレスに対応するＮＩＣを学習済みであるか否かを判定する（ステップＳ３０３）。仮想ＮＩＣ３００ａは、宛先ＭＡＣアドレスに対応するＮＩＣを学習済みの場合には（ステップＳ３０３，Ｙｅｓ）、学習したＮＩＣからパケットを送信する（ステップＳ３０４）。
【０２３２】
一方、仮想ＮＩＣ３００ａは、宛先ＭＡＣアドレスに対応するＮＩＣを学習済みではない場合には（ステップＳ３０３，Ｎｏ）、ステップＳ３０５に移行する。
【０２３３】
ステップＳ３０１の説明に戻る。仮想ＮＩＣ３００ａは、パケットの宛先ＭＡＣアドレスがユニキャストではない場合には（ステップＳ３０１，Ｎｏ）、変数Ｘの値に１を設定する（ステップＳ３０５）。
【０２３４】
仮想ＮＩＣ３００ａは、ＮＸ[Ｘ]に設定された情報がＡＣＴＩＶＥであるか否かを判定する（ステップＳ３０６）。仮想ＮＩＣ３００ａは、ＮＸ[Ｘ]に設定された情報がＡＣＴＩＶＥではない場合には（ステップＳ３０６，Ｎｏ）、ステップＳ３０８に移行する。
【０２３５】
仮想ＮＩＣ３００ａは、ＮＸ[Ｘ]に設定された情報がＡＣＴＩＶＥである場合には（ステップＳ３０６，Ｙｅｓ）、ＮＩＣ[Ｘ]からパケットを送信し（ステップＳ３０７）、ステップＳ３０８に移行する。
【０２３６】
仮想ＮＩＣ３００ａは、変数Ｘの値に１を加算した値を、変数Ｘに設定する（ステップＳ３０８）。仮想ＮＩＣ３００ａは、変数Ｘの値がＮの値より大きいか否かを判定する（ステップＳ３０９）。仮想ＮＩＣ３００ａは、変数Ｘの値がＮの値より大きくない場合には（ステップＳ３０９，Ｎｏ）、ステップＳ３０６に移行する。
【０２３７】
一方、仮想ＮＩＣ３００ａは、変数Ｘの値がＮの値より大きい場合には（ステップＳ３０９，Ｙｅｓ）、処理を終了する。
【０２３８】
次に、本実施例４に示したシステムの効果について説明する。仮想ＮＩＣ３００ａは、各物理ＮＩＣ間でハートビートメッセージを送受信することで、ネットワークの分断を検知する。仮想ＮＩＣ３００ａは、ネットワークの分断を検知した場合に、各物理ＮＩＣと到達可能なネットワーク内のノードとの関係をＭＡＣアドレステーブル３１５ｃに登録する。仮想ＮＩＣ３００ａは、ＭＡＣアドレステーブル３１５ｃを基にして、接続先に到達可能な物理ＮＩＣと仮想マシンとを対応付けて、物理ＮＩＣとノードとの通信を行う。このため、スイッチ故障やスイッチ間のリンク障害により単一のネットワークセグメントが複数に分断されてしまった場合でも、各仮想マシンと各ノードとの通信を継続させることが出来る。
【０２３９】
次に、上記の実施例に示したサーバと同様の機能を実現する通信制御プログラムを実行するコンピュータの一例を説明する。図２９は、通信制御プログラムを実行するコンピュータの一例を示す図である。
【０２４０】
図２９に示すように、コンピュータ４００は、各種演算処理を実行するＣＰＵ４０１と、ユーザからのデータの入力を受け付ける入力装置４０２と、ディスプレイ４０３を有する。また、コンピュータ４００は、記憶媒体からプログラム等を読取る読み取り装置４０４と、ネットワークを介して他のコンピュータとの間でデータの授受を行う複数の物理ＮＩＣ４０５とを有する。また、コンピュータ４００は、各種情報を一時記憶するＲＡＭ４０６と、ハードディスク装置４０７を有する。そして、各装置４０１〜４０７は、バス４０８に接続される。
【０２４１】
ハードディスク装置４０７は、例えば、検知プログラム４０７ａ、通信制御プログラム４０７ｂを有する。ＣＰＵ４０１は、各プログラム４０７ａ，４０７ｂを読み出してＲＡＭ４０６に展開する。
【０２４２】
検知プログラム４０７ａは、検知プロセス４０６ａとして機能する。通信制御プログラム４０７ｂは、通信制御プロセス４０６ｂとして機能する。
【０２４３】
例えば、検知プロセス４０６ａは、検知部８０ａ、仮想ＮＩＣ１００ａ，２００ａ，３００ａに対応する。通信制御プロセス４０６ｂは、通信制御部８０ｂ、仮想ＮＩＣ１００ａ，２００ａ，３００ａに対応する。
【０２４４】
なお、各プログラム４０７ａ，４０７ｂについては、必ずしも最初からハードディスク装置４０７に記憶させておかなくてもよい。例えば、コンピュータ４００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ４００がこれらから各プログラム４０７ａ，４０７ｂを読み出して実行するようにしてもよい。
【０２４５】
なお、上記実施例に示した、仮想ＮＩＣ１００ａ，２００ａ，３００ａは、検知部および通信制御部の一例である。
【０２４６】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０２４７】
（付記１）同一のセグメントに属するネットワーク内の他の通信装置との通信により、前記ネットワークの分断を検知する検知部と、
前記分断が検知された場合には、前記他の通信装置それぞれと到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、通信装置とネットワーク内の機器との通信を行う通信制御部と
を有することを特徴とする計算機。
【０２４８】
（付記２）通信装置の接続先のネットワーク構成に応じて、接続先の機器毎に通信に利用する通信装置が予め対応付けられており、
前記通信制御部は、前記検知部によってネットワークの分断が検知された場合に、それぞれの通信装置と到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、予め対応付けられた通信機器と接続先の機器との対応関係を変更して、通信装置とネットワーク内の機器との通信を行うことを特徴とする付記１に記載の計算機。
【０２４９】
（付記３）自計算機上で複数の仮想マシンが動作し、仮想マシン毎に該仮想マシンが利用する通信装置が予め対応付けられており、
前記通信制御部は、前記検知部によってネットワークの分断が検知された場合に、それぞれの通信装置と到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、予め対応付けられた仮想マシンと通信装置との関係を解消し、接続先に到達可能な通信装置と仮想マシンとを対応付けて、通信装置とネットワーク内の機器との通信を行うことを特徴とする付記１または２に記載の計算機。
【０２５０】
（付記４）コンピュータが実行する通信制御方法であって、
同一のセグメントに属するネットワーク内の他の通信装置との通信により、前記ネットワークの分断を検知し、
前記分断が検知された場合には、前記他の通信装置それぞれと到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、通信装置とネットワーク内の機器との通信を行う
各処理を実行することを特徴とする通信制御方法。
【０２５１】
（付記５）通信装置の接続先のネットワーク構成に応じて、接続先の機器毎に通信に利用する通信装置が予め対応付けられており、
前記通信を行う処理は、ネットワークの分断が検出された場合に、それぞれの通信装置と到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、予め対応付けられた通信機器と接続先の機器との対応関係を変更して、通信装置とネットワーク内の機器との通信を行うことを特徴とする付記４に記載の通信制御方法。
【０２５２】
（付記６）前記コンピュータ上で複数の仮想マシンが動作し、仮想マシン毎に該仮想マシンが利用する通信装置が予め対応付けられており、
前記通信を行う処理は、ネットワークの分断が検知された場合に、それぞれの通信装置と到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、予め対応付けられた仮想マシンと通信装置との関係を解消し、接続先に到達可能な通信装置と仮想マシンとを対応付けて、通信装置とネットワーク内の機器との通信を行うことを特徴とする付記４または５に記載の通信制御方法。
【０２５３】
（付記７）コンピュータに、
同一のセグメントに属するネットワーク内の他の通信装置との通信により、前記ネットワークの分断を検知し、
前記分断が検知された場合には、前記他の通信装置それぞれと到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、通信装置とネットワーク内の機器との通信を行う
各処理を実行させることを特徴とする通信制御プログラム。
【０２５４】
（付記８）通信装置の接続先のネットワーク構成に応じて、接続先の機器毎に通信に利用する通信装置が予め対応付けられており、
前記通信を行う処理は、ネットワークの分断が検出された場合に、それぞれの通信装置と到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、予め対応付けられた通信機器と接続先の機器との対応関係を変更して、通信装置とネットワーク内の機器との通信を行うことを特徴とする付記７に記載の通信制御プログラム。
【０２５５】
（付記９）前記コンピュータ上で複数の仮想マシンが動作し、仮想マシン毎に該仮想マシンが利用する通信装置が予め対応付けられており、
前記通信を行う処理は、ネットワークの分断が検知された場合に、それぞれの通信装置と到達可能なネットワーク内の機器との対応関係の情報を生成し、該対応関係の情報を基にして、予め対応付けられた仮想マシンと通信装置との関係を解消し、接続先に到達可能な通信装置と仮想マシンとを対応付けて、通信装置とネットワーク内の機器との通信を行うことを特徴とする付記７または８に記載の通信制御プログラム。
【符号の説明】
【０２５６】
８０    計算機
８０ａ  検知部
８０ｂ  通信制御部
８１，８２，８３    通信装置
【図１】
2014120892.tif 000003
【図２】
2014120892.tif 000004
【図３】
2014120892.tif 000005
【図４】
2014120892.tif 000006
【図５】
2014120892.tif 000007
【図６】
2014120892.tif 000008
【図７】
2014120892.tif 000009
【図８】
2014120892.tif 000010
【図９】
2014120892.tif 000011
【図１０】
2014120892.tif 000012
【図１１】
2014120892.tif 000013
【図１２】
2014120892.tif 000014
【図１３】
2014120892.tif 000015
【図１４】
2014120892.tif 000016
【図１５】
2014120892.tif 000017
【図１６】
2014120892.tif 000018
【図１７】
2014120892.tif 000019
【図１８】
2014120892.tif 000020
【図１９】
2014120892.tif 000021
【図２０】
2014120892.tif 000022
【図２１】
2014120892.tif 000023
【図２２】
2014120892.tif 000024
【図２３】
2014120892.tif 000025
【図２４】
2014120892.tif 000026
【図２５】
2014120892.tif 000027
【図２６】
2014120892.tif 000028
【図２７】
2014120892.tif 000029
【図２８】
2014120892.tif 000030
【図２９】
2014120892.tif 000031
【図３０】
2014120892.tif 000032
【図３１】
2014120892.tif 000033
【図３２】
2014120892.tif 000034
【図３３】
2014120892.tif 000035
【図３４】
2014120892.tif 000036