(57)【要約】  複数のノード間のフォールトトレラント通信をアプリケーションに対して提供する方法であって、複数のノード間で結合される複数のネットワーク上で複数の初期通信経路が提供することと、データパケットをアプリケーションから送信側ノードで受信することであって、上記送信側ノードは複数のノードの１つであり、上記データパケットはアプリケーションによって複数のノードの１つのアドレスにアドレス指定されていることと、データパケットのために複数の初期通信経路の中から優先経路である第１の選択経路を選択することとを含む方法に関する。
2009508443.tif 000002
【特許請求の範囲】
【請求項１】
複数のノード間のフォールトトレラントネットワーク通信を有するアプリケーションを提供するための方法であって、
前記複数のノードに結合される複数のネットワークを介した複数の初期通信経路を提供することと、
前記アプリケーションからデータパケットを送信側ノードで受信することであって、前記送信側ノードは前記複数のノードの１つであり、前記データパケットは前記アプリケーションによって前記複数のノードの１つのアドレスにアドレス指定されることと、
前記データパケットのための第１の選択経路を前記複数の初期通信経路の中から選択することであって、前記第１の選択経路は優先経路であることと
を備えることを特徴とする方法。
【請求項２】
前記複数の初期通信経路の１つに関連付けられるローカルコネクティビティイベントを検出することと、
前記ローカルコネクティビティイベントに基づいて、前記複数の初期通信経路の前記１つが動作可能であるか否かを示すことと
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項３】
ルート指定可能ハードビートパケットを前記複数の初期通信経路の１つの上で送信することと、
前記複数の初期通信経路の前記１つのエンドツーエンド間の動作可能ステータスを判定するために、前記ルート指定可能ハードビートパケットに対するレスポンスをモニタすることと、
前記レスポンスの前記モニタすることに基づいて、前記複数の初期通信経路の前記１つがエンドツーエンド間で動作可能であるか否かを示すことと
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項４】
前記アドレスは、インターネットプロトコルバージョン４のアドレス、またはインターネットプロトコルバージョン６のアドレスであることを特徴とする請求項１に記載の方法。
【請求項５】
前記アプリケーションから受信される前記データパケットは、伝送制御プロトコルのパケット、またはユーザデータグラムプロトコルのパケットであることを特徴とする請求項１に記載の方法。
【請求項６】
前記方法を実行するためのコンピュータ実行可能命令は、コンピュータ読取可能媒体に格納されることを特徴とする請求項１に記載の方法。
【請求項７】
前記アドレスは、仮想アドレスであることを特徴とする請求項１に記載の方法。
【請求項８】
前記アプリケーションが、前記複数の初期通信経路のいずれが前記選択経路であるかを知っていることを必要とせずに、前記第１の選択経路上で前記データパケットをルート指定可能にトンネリングすることをさらに備えることを特徴とする請求項７に記載の方法。
【請求項９】
前記第１の選択経路上でルート指定可能にトンネリングされる前記データパケットは、伝送制御プロトコルのパケットまたはユーザデータグラムプロトコルのパケットであることを特徴とする請求項８に記載の方法。
【請求項１０】
前記第１の選択経路の障害を検出することと、
第２の選択経路を前記複数の初期通信経路の中から選択することであって、前記第２の選択経路はエンドツーエンド間で動作可能であり、かつ優先経路であることと、
前記アプリケーションが、前記１つまたは複数の初期通信経路のいずれが前記第２の選択経路であるかを知っていることを必要とせずに、前記第２の選択経路上で前記データパケットをルート指定可能にトンネリングすることと
をさらに備えることを特徴とする請求項７に記載の方法。
【請求項１１】
前記第１の選択経路は、前記データパケットに含まれる物理宛先アドレスに基づいて選択されることを特徴とする請求項１に記載の方法。
【請求項１２】
前記アプリケーションが、前記複数の初期通信経路のいずれが前記第１の選択経路であるかを知っていることを必要とせずに、前記第１の選択経路上で前記データパケットを送信することをさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記第１の選択経路の障害を検出することと、
第２の選択経路を前記複数の初期通信経路の中から選択することであって、前記第２の選択経路はエンドツーエンド間で動作可能であり、かつ優先経路であることと、
前記アプリケーションが、前記１つまたは複数の初期通信経路のいずれが前記第２の選択経路であるかを知っていることを必要とせずに、前記第２の選択経路上で前記データパケットをルート指定可能にトンネリングすることと
をさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１４】
前記第２の選択経路上でルート指定可能にトンネリングされる前記データパケットは、伝送制御プロトコルのパケットまたはユーザデータグラムプロトコルのパケットであることを特徴とする請求項１３に記載の方法。
【請求項１５】
複数のノード間のフォールトトレラントネットワーク通信を有するアプリケーションを提供するための方法であって、
前記複数のノードに結合される複数のネットワークを介した複数の初期通信経路を提供することと、
受信側ノードでデータパケットを受信することであって、前記受信側ノードはフォールトトレラントネットワークスタックを含み、かつ前記複数のノードの１つであり、前記データパケットは前記アプリケーション宛てにされることと、
前記データパケットがルート指定可能にトンネリングされたかどうかを判定することと、
前記データパケットがルート指定可能にトンネリングされた場合に、前記データパケットを前記フォールトトレラントネットワークスタックの上方に転送することと
を備えることを特徴とする方法。
【請求項１６】
前記複数の初期通信経路の１つの上で、ルート指定可能ハートビートパケットを前記受信側ノードで受信することと、
前記複数の初期通信経路の前記１つのエンドツーエンド間の動作可能ステータスを示すように、前記ルート指定可能ハートビートパケットに対するレスポンスで応答することと
をさらに備えることを特徴とする請求項１５に記載の方法。
【請求項１７】
前記データパケットは、伝送制御プロトコルのパケットまたはユーザデータグラムプロトコルのパケットであることを特徴とする請求項１５に記載の方法。
【請求項１８】
前記方法を実行するためのコンピュータ実行可能命令は、コンピュータ読取可能媒体に格納されることを特徴とする請求項１５に記載の方法。
【請求項１９】
複数のノード間のフォールトトレラントネットワーク通信を有するアプリケーションを提供するためのシステムであって、
第１のネットワークスタックに結合され、前記複数のノードの１つである第１のノードで動作する第１のフォールトトレラントドライバと、
第２のネットワークスタックに結合され、前記複数のノードの１つである第２のノードで動作する第２のフォールトトレラントドライバとを備え、
前記第１のフォールトトレラントドライバと前記第２のフォールトトレラントドライバは、複数のネットワーク上で複数の初期通信経路を介して結合されることを特徴とするシステム。
【請求項２０】
前記第１のフォールトトレラントドライバは、
前記第１のネットワークスタックを介して前記アプリケーションに結合される処理エレメントと、
前記処理エレメントに結合されるルーティングデータベースであって、
前記第２のノードの物理アドレスを含む前記第２のノードへの経路を表すエントリであって、前記経路が前記複数の初期通信経路の１つである前記エントリと、
前記第２のノードへの前記経路のエンドツーエンド間の動作可能ステータスの指示と
を含む前記ルーティングデータベースと、
前記処理エレメントに結合され、前記第１のネットワークスタックを介して、前記複数のネットワークの１つに結合されるプロトコルアダプタであって、前記複数のネットワークの前記１つが前記第２ノードへの経路と関連付けられる前記プロトコルアダプタと、
前記第２のノードへの経路と関連付けられ、前記処理エレメントに結合され、第１のネットワークスタックを介して前記複数のネットワークの前期１つに結合されるトンネルアダプタと、
を備えることを特徴とする請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ルート指定されたネットワークにおけるフォールトトレラント通信に関する。
【背景技術】
【０００２】
コンピュータネットワーキング環境では、複数のノードはネットワーク上で相互に通信することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ネットワークに障害が起こると、ノード間の通信が中断されることがある。
【課題を解決するための手段】
【０００４】
以下は、基本的な理解を読み手に提供するために、本開示の簡単化した概要を提示する。本概要は、本開示を網羅的な概観ではなく、本発明の主要かつ重要な要素を特定するものや、本発明の範囲を線引きするものではない。その唯一の目的は、後に提示されるより詳細な説明の序論として、本明細書に開示されるいくつかの概念を簡略化した形式で提示することである。
【０００５】
以下の例は、ネットワーク化されたノード上で動作するアプリケーションソフトウェアによる、最小限の考慮が必要なユニークのネットワークスタックアーキテクチャを介するコンピュータネットワーク通信のフォールトトレランス(fault-tolerance)を提供する。
【０００６】
付随する特徴の多くは、添付図面に関連して考慮された以下の詳細な説明を参照することによってより理解されることにより、より容易に認識されることとなるであろう。
【０００７】
本説明は、添付の図面を踏まえて読まれる以下の詳細な説明により、よりよく理解されるであろう。
【０００８】
添付の図において、同様の参照番号は、同様の部分を指すのに用いられる。
【発明を実施するための最良の形態】
【０００９】
以下で添付図面に関連して提供される詳細な説明は、本例の説明として意図されるものであり、本例を構築または利用することができる唯一の形式を表すように意図されるものではない。この説明は、本例の機能、および本例を構築し、動作させるためのステップのシーケンスを説明する。しかし、同一または同等の機能およびシーケンスを、別の例により達成することができる。
【００１０】
本例は、本明細書では、コンピューティングおよびネットワーキングシステムにおいて実装されるものとして説明され、図示されるが、説明されるシステムは、一例として提供されるものであり、限定として提供されるものではない。当業者であれば理解されるように、本例は、様々な異なるタイプのコンピューティングおよびネットワーキングシステムにおける適用に適している。
【００１１】
図１は、例示のネットワークスタックアーキテクチャ１００を示すブロック図である。ネットワークスタック（「スタック」）は、一般に、ネットワークスタックインタフェースおよび／または他のインタフェースを介してソフトウェアアプリケーションと結合して、ネットワーク通信機能をアプリケーションに提供する。アプリケーションは典型的に、スタックの「最上位(top)」にある（または結合される）といわれている。ネットワークは、典型的に、スタックの「最下位(bottom)」にある（または結合される）といわれている。ネットワークスタックの様々なエレメントは、スタックの最上位または最下位に、またはその付近、あるいは相互に対してスタック内の上位または下位にあると言われることもある。例えば、図１では、プロトコルドライバ１３０は、この特定の図においてスタックの最下位に示されるＮＩＣ１８０よりもスタックの上位にある。ネットワークの様々な描写は、当業者であれば理解されるように、その描写の対象または焦点に応じて、いくつかのスタックエレメントを含むことも含まないこともあり、あるいはエレメントを、様々な方法でグループ化し、順序付けし、または指定することもある。
【００１２】
本明細書で用いられる「ドライバ(driver)」という用語は、ノードが、プリンタ、ネットワークインタフェースカード、または他のコンピュータサブシステムなどの特定のデバイスで動作し、あるいはネットワークスタック、プロトコルドライバ、および／または他のコンピュータソフトウェアもしくはファームウェアなどの１つまたは複数のプログラムで動作することを可能にする制御プログラムなどを指す。例えば、プロトコルドライバは、典型的に、ネットワークスタックで動作する。
【００１３】
アプリケーションは、データパケットを、別のノード上で動作するアプリケーション宛てのスタックに渡すことがある。この場合、データは、スタックの「下方」に流れるといわれ、ネットワーク上に送出される。ノードによって受信されるデータは、そのデータが宛先のアプリケーションに到達するまで、スタックの「上方」に流れるといわれる。このようなネットワーキングシステムは、当業者によく知られている。
【００１４】
一例では、スタックは、ＮＩＣ１８０などのＮＩＣ (network interface card)のための標準ＡＰＩ (application programming interface)を定義し、ネットワークドライバからネットワークハードウェアを抽象化するＮＤＩＳ(Network Driver Interface Specification)に基づくものである。ＮＤＩＳは、階層化されたネットワークドライバ間の標準インタフェースも特定し、それによりミニポートドライバなどのハードウェアを管理する下位レベルのドライバを、プロトコルドライバなどの上位レベルのドライバから抽象化する。複数のＮＤＩＳ規格合致プロトコルドライバ（NDIS-conforming protocol driver）が、単一のノード上に共存することができる。また、１つのノードが複数のＮＩＣを含む場合は、おそらくそのノードは２以上のネットワークに接続されているため、ＮＤＩＳは、ネットワークトラフィックを、そのトラフィックによって指示されるようにその関連ドライバを介して適切なＮＩＣにルート指定する。ＮＤＩＳの例を図１に示す。ＯＤＩ(Open Data-Link Interface)、ＤＬＰＩ(Data Link Provider Interface)、ＵＤＩ(Uniform Driver Interface)、または他の技術などの、他のネットワーキングスタックの規格、技術、および／またはアーキテクチャを、当業者であれば理解されるように、以下の例で使用することができるだけでなく適切な変形で使用することもできる。便宜上、ＮＤＩＳおよびＮＤＩＳの用語は、この説明全体を通して例示で使用されるが、別段の注記がない限り、他の規格、技術および／またはアーキテクチャは、これらの例示の全てにおいて、適切な変形で使用されることがある。
【００１５】
図１に示されるように、ＮＤＩＳ１２０を介してＮＩＣ１８０に結合されるのは、ミニポートドライバ１６０である。ミニポートドライバは、典型的に、ＮＤＩＳミニポートインタフェース１６２を介して、ＮＤＩＳとやりとりをする。ミニポートドライバ１６０は、ＮＩＣ１８０に関連付けられ、ＮＩＣを通してデータを送信することおよび受信することを含むそのオペレーションを管理することができる。ミニポートドライバ１６０は、典型的に、中間ドライバ１４０およびプロトコルドライバ１３０などの、上位レベルのドライバとインタフェースをとる。ミニポートドライバは、ＮＩＣドライバとみなされる。ＮＩＣミニポートは、一般に、ＮＤＩＳにより提供される共通またはＮＩＣの独立の機能で特定のＮＩＣを管理するのに必要とされるハードウェア固有のオペレーションを実行する。１つのノードは、それぞれのＮＩＣが一般に関連するＮＩＣドライバを有する複数のＮＩＣを含むことができる。この説明におけるいくつかの例では、ミニポートドライバの使用を説明するが、当業者であれば理解されるように、別段の注記がない限り、任意のタイプのＮＩＣドライバなどをこれらの例において使用することができる。
【００１６】
プロトコルドライバまたはトランスポートドライバ１３０は、ＮＤＩＳプロトコルインタフェース１３４を介してＮＤＩＳ１２０と結合する。プロトコルドライバまたはトランスポートプロトコルドライバは、一般に、あるノードから別のノードにネットワークスタックを通してネットワーク上で送信されるデータのパケットを作成し、送信し、受信する機能を提供する。当業者に公知であるように、信頼性のあるまたは保証された共通の配信トランスポートプロトコル（delivery transport protocol）は、ＴＣＰ／ＩＰとすることができる。ＩＰ上のＵＤＰ（ユーザデータグラムプロトコル）は、信頼性のないまたは保証されない共通の配信プロトコルとすることができる。ＴＣＰ（伝送制御プロトコル）、ＵＤＰ、および／またはＩＰＸ／ＳＰＸなどの他のプロトコルを、別段の注記がない限り、以下の例で使用することができる。
【００１７】
ＮＤＩＳ中間(ＩＭ)ドライバ１４０は、図１では、プロトコルドライバ１３０とＮＤＩＳ  ＮＩＣミニポート１６０の間に示される。プロトコルドライバにとって、ＩＭドライバはＮＤＩＳミニポートのように見えるが、ＮＩＣドライバにとって、ＩＭドライバはプロトコルドライバのように見える。ネットワークスタックの上方または下方へ流れるデータパケットは、データパケットを無視し、検査し、フィルタリングし、転送し、リダイレクトし、および／または変更することができるＩＭドライバ１４０に渡される。中間ドライバ１４０は、フィルタドライバとしても知られることがある。
【００１８】
図２は、２つのネットワーク２０２および２８２を介して結合される２つの例示のノード２１０および２６０を含む、ネットワーク化されたコンピューティング環境２００を示すブロック図である。ノード２１０および２６０はそれぞれ、パーソナルコンピュータ（ＰＣ）、クライアントコンピュータ、サーバ、ホスト、ラップトップ、ポータブルデバイス、家庭用電子機器、または、任意の様々な他のタイプのコンピューティングまたは処理デバイス、マシン、もしくはシステムとすることができる。コンピューティングシステムのタイプの限定ではない一例を、図１１に関して以下で詳細に説明する。円２１２、２１４、２６２、および２６４は、それぞれのノードと関連するＮＩＣを表す。ＮＩＣのタイプの限定ではない一例を、ネットワークアダプタ１１１３として図１１に関して以下でさらに説明する。
【００１９】
本明細書で用いられるように、ノードいう用語は、ネットワーク（例えば、ネットワーク２０２）内で一意にアドレス可能であるかそうでなければ一意に識別可能であって、ネットワーク内の他のノードと通信するように動作可能な任意のコンピューティングシステム、デバイス、またはプロセスを指す。例えば、限定ではないが、ノードは、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、タブレットデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、家庭用電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどとすることができる。コンピューティングシステムの形式のノード２１０の限定ではない一例を、図１１に関して以下で説明する。
【００２０】
ネットワーク２０２および２８２は、同一ネットワークとすることができ、同一または異なるサブネット上に存在することができ、互いから論理的または物理的に結合または分離されることができ、同様のまたは異なるネットワーキング技術を使用することができる。特に、ネットワーク２０２および２８２は、ルート指定されたネットワーク(routed network)、すなわち、ルート指定可能プロトコル(routable protocol)パケットを転送するルータを含むネットワークとすることができる。ルート指定可能プロトコルは、典型的に、データをあるネットワークから別のネットワークにルート指定するのに使用される通信プロトコルとみなされる。ルート指定可能プロトコルの例は、ＴＣＰ／ＩＰである。データパケットをルート指定可能な方法で送信することは、ルート指定可能トランスポートプロトコルを使用してデータパケットをフォーマットおよび／または送信することを暗示する。当業者は、ルート指定可能プロトコル、およびルーティングネットワークトポロジ、システムおよびアーキテクチャに精通しているであろう。
【００２１】
一例では、ネットワーク２０２および２８２は、一方のネットワークに問題または障害がある場合に、他方の動作状況に影響を与えるおそれがないように、相互に独立したものとすることができる。他の例では、３つまたはそれ以上のネットワークを使用することができる。より高度のフォールトトレランスが望まれる例では、より多くの数のネットワークを、これらのネットワークに対するノードの関連コネクティビティとともに利用することができ、これらのネットワークには、１つのノードにインストールされるのと同じ数のＮＩＣが含まれる。
【００２２】
ノード２１０と関連付けられるＮＩＣ２１２は、例示アドレス172.56.48.37で示され、２０２のネットワーク１に結合される。また、ノード２１０と関連付けられるＮＩＣ２１４は、例示アドレス197.71.48.38で示され、２８２のネットワーク２に結合される。ノード２６０と関連付けられるＮＩＣ２６２は、例示アドレス172.56.48.38で示され、これも２０２のネットワーク１に結合される。また、ノード２６０と関連付けられるＮＩＣ２６４は、例示アドレス197.71.48.39で示され、これも２８２のネットワーク２に結合される。これらのアドレスは、実際には、ＩＰｖ４またはＩＰｖ６アドレスなどとすることができ、あるいは、使用されているプロトコルに典型的に関連する任意の他のタイプのネットワークアドレスとすることができる。
【００２３】
各ノードは、１つまたは複数のＮＩＣを含むことができる。図１１で矢印１１１４としても示される矢印２０１および２０３は、ノード２１０および２６０の間の２０２のネットワーク１上の第１の通信ルートまたは経路(pathway)（「パスＡ」）を表す。矢印２８１および２８３は、ノード２１０および２６０の間の２８２のネットワーク２上の第２の通信ルートまたは経路（「パスＢ」）を表す。実際、環境２００では、１つまたは複数の経路が、２つまたはそれ以上のノード間の１つまたは複数のネットワーク上に存在することができる。本明細書で用いられる「経路」という用語は、ネットワーク内のノード間の通信ルートまたは通信リンクとして定義される。このようなルートまたはリンクは、ノード間の正確なルートが時間とともに変化する可能性があるという点で、動的である可能性がある。
【００２４】
ブロック２１６および２６６は、フォールトトレラント通信(ＦＴ)ドライバを含みノード２１０および２６０のそれぞれに提供される、アプリケーションおよびネットワークスタックを表す。ブロック２１６のＦＴドライバは、例示アドレス10.0.0.1で示され、ブロック２６６のＦＴドライバは、例示アドレス10.0.0.2で示される。これらのアドレスは典型的に、仮想アドレスとみなされる。これらのアドレスは、ＩＰｖ４またはＩＰｖ６アドレスなど、または任意の他のタイプのネットワークアドレスまたは通信アドレスとすることができる。ＦＴドライバは、以下の様々な例で示されるように、仮想アドレスを有することも有さないこともある。
【００２５】
フォールトトレラントネットワークスタックは、図３に関連して以下で説明されるＮＥＴＦＴのようなＦＴドライバなどを含むネットワークスタックである。ネットワークスタックと組み合わせて動作するＮＥＴＦＴなどのＦＴドライバは、典型的に、１つまたは複数のネットワーク上で、パスＡおよびパスＢなどの１つまたは複数の通信パスを介して、ノードが相互に通信することを可能にする。これらの通信パスのいずれかに障害は起こる場合、少なくとも１つの動作可能な経路があれば、ノードは通信を続けることができる。このような経路の障害は、ＮＩＣの障害、または経路のいずれかのエレメントの障害に起因する可能性があり、上記エレメントには、接続、配線または他の通信媒体（無線周波数（ＲＦ）または赤外線（ＩＲ）などを含む）、ルータ、ハブ、スイッチ、ファイアウォール、インターネットサービスプロバイダ（ＩＳＰ）、ネットワークのいずれかのノード、デバイス、またはシステムに対する電源障害などが含まれる。
【００２６】
一例では、通信障害により、プラグアンドプレイ（ＰｎＰ）イベントが起こることがある。ＰｎＰイベントは、そのノードからのＮＩＣの除去、または媒体センス変化(media sense change)を示すことがある。例えば、媒体センス切断(media sense disconnect)は典型的に、ＮＩＣに、ネットワークケーブル、ＲＦまたはＩＲリンクなどの、ネットワーク媒体上の信号または搬送波を失わせるような障害に起因する。媒体センス切断は、ネットワークケーブルまたは搬送波をＮＩＣから切断することによって、あるいはケーブルの他のエンド（例えば、ハブまたはスイッチ）を電源オフすることによって引き起こされることがある。媒体センス接続(media sense connect)は典型的に、ケーブルを再接続すること、ハブまたはスイッチなどを再び電源オンする（re-powering on）ことなどのように、切断とは反対である。コネクティビティイベント(connectivity event)としても知られるこれらのタイプのイベントは一般的に、ノード上で起こるかまたはその近くにあるという点で、ローカルイベントである。このようなローカルコネクティビティイベントは典型的に、ＰｎＰイベントなどの、ノードにおけるイベント指示をもたらす。
【００２７】
別の例では、通信障害を、ノード間で送信されるハートビートパケットを使用することによって検出することができる。このようなハートビートパケットの障害は、ノード間の経路の障害を示すことがある。ハートビートパケットは、ＦＴドライバがその受信時にハートビートパケットを検出し、ネットワークスタックに渡されるパケットフローについてハートビートパケットを除去できるように、マークされる傾向がある。一例では、ハートビートパケットを、ルート制御プロトコル（ＲＣＰ）を使用して、ＲＣＰパケットを形成することによって実装することができる。このようなハートビートパケットを使用して、経路のエンドツーエンド間の動作可能ステータスを検証することができる。すなわち、ノード２１０からパスＡを経てノード２６０にハートビートパケットを送信すること、およびノード２１０が送信されたハートビートパケットに対する応答をノード２６０から受信することにより、パスＡはエンドツーエンド間が動作可能であるとみなされるのが一般的である。ハートビートに障害が起こった場合は（送信されたハートビートに応じて受信されるハートビート応答がない場合）、このような障害は、おそらくルータ、スイッチ、またはコネクションなどの２０２のネットワーク１のエレメントの障害、あるいはターゲットノード自身の障害のために、パスＡが動作可能でないことを示すことがある。特に、ノード２１０が、動作可能なＮＩＣ２１２および有効な媒体センスを有する場合、ノードがネットワークに正しく接続されているが、いくつかのネットワークまたはシステムの障害でラインがダウンしているため、まだハートビート障害が検出される可能性があることを示している。
【００２８】
図３は、例示のフォールトトレラント通信ドライバ、ＮＥＴＦＴ３００を示すブロック図である。ＮＥＴＦＴ３００は、ＮＤＩＳネットワークスタックで使用し、経路障害に強いノード間でネットワーク通信を提供するため、ＮＤＩＳミニポートドライバ（図１の１６０）として実装されることがある。すなわち、それぞれがＮＥＴＦＴを使用していると、少なくとも１つの経路が動作可能のままである限り、経路内のいずれかのコンポーネントの障害に関わらず、２つまたはそれ以上のノード間の通信は継続することができる。
【００２９】
一例では、ＮＤＩＳミニポートドライバとしてのＦＴドライバの実装により、少なくとも２つの利点が与えられる。第１に、このようなＦＴドライバは一般に、スタック内のどのプロトコルドライバよりも下にあるので、プロトコルの信頼性は、任意の上位レベルの信頼性プロトコルドライバによって提供される傾向があり、その上位レベルの信頼性プロトコルドライバは一般的に、ＦＴドライバによって提供されるリンクレベルのフォールトトレランスの付加によっては影響されない。例えば、ＴＣＰ／ＩＰドライバなどのプロトコルドライバと組み合わせてＦＴドライバを使用すると、ＦＴドライバは典型的に、障害のある経路を検出し、いずれのプロトコルドライバからも独立したエンドツーエンド間で動作可能な経路で、データパケットのルート指定をすることとなる。経路のスイッチングのためにパケット紛失が起こると、一般的にはスタック内のＦＴドライバの上にあるＴＣＰ／ＩＰプロトコルドライバは、信頼性のあるプロトコルがパケット配信を成功することを保証するために、そのような損失を検出し、いずれかの再試行(retry)または再送(resend)オペレーションを実行する傾向がある。
【００３０】
ＦＴドライバをスタック内のプロトコルドライバの下に配置することの第２の利点は、典型的に、プロトコルのルート指定可能性（routability）の低下が引き起こされないことである。そのように構成されると、ＦＴドライバがデータパケットに対して実行するどのようなトンネリングオペレーションも、ＴＣＰまたはＵＤＰなどのルート指定可能プロトコルを採用することができるので、そのようなデータがリンクレベルのフォールトトレラントであることに加え、ルート指定可能であることを保証する。データパケットを「ルート指定可能にトンネリングする」こととは、ルート指定可能プロトコルを使用してデータパケットをトンネリングすることである。
【００３１】
ネットワークスタックの一部としてのＮＥＴＦＴは、一般的に、ＮＤＩＳまたは他のネットワークスタックインタフェースを介してソフトウェアアプリケーションに結合する。このような結合により、一般的に、アプリケーションが、スタックの最下位に結合されるネットワーク上でデータパケットを送受信することが可能となる。一例では、アプリケーションは、データパケットのソースアドレスとして仮想アドレスを使用する傾向があり、この仮想アドレスは、以下で説明するように、ＮＥＴＦＴに知らされ、ネットワークの他のノードにマッピングされ通信される。図３で示されるように、ＮＥＴＦＴには、ミニポートアダプタ３０２（処理エレメントとしても知られる）、ルーティングデータベース３０４、および１つまたは複数のルートモニタアダプタ３０６、および１つまたは複数のトンネルアダプタ３０８が含まれる。
【００３２】
トンネルアダプタ３０８は、典型的に、ローカルノードの１つのＮＩＣ（場合によっては、仮想ＮＩＣ）を表し、複数のパケットをターゲットノードのＮＥＴＦＴにトンネリングするのに用いられる１つのソケットを維持する。典型的に、それぞれが別のノードへの経路を提供するネットワークに結合されているＮＩＣを有するローカルノードの各ＮＩＣに関連付けられる１つのトンネルアダプタ３０８が存在する。各ネットワークは、任意の他のネットワークから分離されることも、分離されないこともある。トンネルアダプタ３０８は典型的に、トンネリングプロトコルドライバと関連付けられ、ＮＤＩＳインタフェースを介してその関連ＮＩＣに対するトンネリングプロトコルを通してデータパケットをトンネリングする。トンネリングプロトコルの一例は、ＵＤＰである。代替的に、ＴＣＰ、ＩＰＸ、またはＳＰＸなどの他のプロトコルをトンネリングに使用することができる。トンネルアダプタ３０８は、関連ＮＩＣまたは媒体コネクションが非アクティブになると、非アクティブになることがある。
【００３３】
ルーティングデータベース３０４はＮＥＴＦＴ内で実装されるように、典型的に、システムメモリ内に配置することができる簡単なデータ構造であり、１つまたは複数の経路の仮想アドレスを別のノード上の同様のＮＥＴＦＴにマッピングするエントリを含む。一例では、マッピングは、トンネルアダプタ３０８などのトンネルアダプタと典型的に関連付けられるルートモニタアダプタ３０６などのルートモニタアダプタによって表される。一般的に、ルーティングデータベース３０４などのルーティングデータベースには、各トンネルアダプタに関する１組のルートアダプタが含まれることとなり、各ルートアダプタは、トンネルアダプタに関連付けられる経路で到達可能な異なるターゲットノードと関連付けられている。例えば、ＴＣＰ／ＩＰを使用すると、データベースは、宛先の仮想アドレスを特定のリモートノードの物理アドレスにマッピングすることができる。
【００３４】
ルーティングデータベース３０４には、各経路の優先順位情報（priority information）を含めることもできる。このような優先順位情報を用いて別のノードへの優先経路(preferred pathway)または基本経路(primary pathway)を示すことができ、および／または、経路の速度または他の特性についての情報を含むことができる。優先経路は、可能である場合に、優先順位情報および／または経路ステータスに基づいて、他の可能な経路上で使用するためにＮＥＴＦＴによって計算される経路である。優先順位情報は、代替的に、ターゲットノードへの複数の経路を利用するために、経路上のトラフィックをロードバランシングするように、ラウンドロビンロードバランシングアルゴリズム(round-robin load balancing algorithm)を示すことがあり、または、他のなんらかの経路優先順位付け方式(pathway prioritization scheme)を可能にすることがある。
【００３５】
表１は、例示のルーティングデータベース３０４のマッピングテーブルを示す。
【００３６】
【表１】
2009508443.tif 000003
【００３７】
表１および図２を参照すると、表１は、ノード２１６で動作しているＮＥＴＦＴによって使用されることのあるマッピングテーブルの例を示す。表１は、仮想宛先アドレス10.0.0.2を示し、この仮想宛先アドレスは、ノード２６６に関して示されるように、ノード２６６へのパスＡと関連付けられる物理アドレス172.56.48.38、およびノード２６６へのパスＢに関連付けられる物理アドレス197,71.48.39にマッピングされる。パスＡは第１の優先度を有し、パスＢは第２の優先度を有する。表１は、一例として提供されるものであり、限定を意図するものではない。
【００３８】
データをノード２１６からノード２６６に送信するとき、典型的には、このようなマッピングテーブルを用いて、ＵＤＰなどのトンネリングプロトコルを介してパケットを物理宛先アドレス172.56.48.38に転送し、ノード２１６からパスＡを経てノード２６６にパケットをトンネリングすることによって、仮想宛先アドレス10.0.0.2宛てのパケットをトンネリングする。２つのノード間に確立される経路の各組に対して、１つのこのようなマッピングテーブルを、ルーティングデータベース（図３中の３０４）内に作成することができる。このようなマッピングテーブルは、様々な形式で実装することができ、様々な優先度方式を使用し、および／または経路動作可能ステータスを含む他の情報を格納することができる。図１に示されるマッピングテーブルの構造、経路の数、アドレスフォーマットなどは、例として提供されるものであり、限定を意図するものではない。
【００３９】
ローカルノードの仮想アドレス、リモートノードの仮想アドレス、および優先度と他の経路の情報は、典型的に、アウトオブバンド(out-of-band)メカニズムによってノードに提供され、そのＮＤＩＳインタフェースを介してＮＥＴＦＴに渡される。このアウトオブバンドメカニズムは、システムアドミニストレータが情報を特定するために管理アプリケーションを使用することと同様に単純なものとすることができ、または自動化システムなどとすることができる。このようなアウトオブバンドメカニズムは、当業者に周知である。
【００４０】
図３に示されるように、（ドライバの処理エレメントとしても知られる）ミニポートアダプタ３０２は、典型的に、ネットワークスタックの下方へ流れるデータパケットを解析し、どのトンネルアダプタ３０８からデータパケットをトンネリングさせるかを判定するために、パケットの宛先仮想アドレスを調べ、ルーティングデータベース３０４からの情報を使用する。着信パケット、またはスタックの上方へ流れるデータパケットは、その宛先仮想アドレスに向かってスタックの上方へ転送されるが、それ以前にトンネリングプロトコルはトンネリングパケットヘッダを除去している。特に、トンネルアダプタ３０８は、着信パケットを調べ、ハートビートパケットをルートモニタアダプタ３０６に転送し、ミニポートアダプタ３０２を介して他のパケットをスタックの上方に転送する。トンネリングプロトコルを使用してデータパケットをトンネリングする態様、およびプロトコルドライバによってプロトコルヘッダが追加され削除される方法は、当業者に周知である。
【００４１】
ルートモニタアダプタ３０６は典型的に、関連トンネルアダプタによって識別される特定の経路上でアクセス可能なリモートノードを表す。ルートモニタアダプタ３０６は、典型的にリモートノードのための物理アドレスを提供し、この物理アドレスはリモートノードへの特定の経路にも対応する。この物理アドレスは典型的に、ルーティングデータベース３０４内のマッピングに使用される。リモートノードへの個々の経路それぞれに対して、典型的に１つのルートモニタアダプタがあり、それぞれのルートモニタアダプタは経路を表す１つのトンネルアダプタと関連付けられている。一例では、図２に戻って参照すると、ノード２１０は、一方は２０２のネットワーク１（パスＡ）を通じ、他方は２８２のネットワーク２（パスＢ）を通じる２つの経路上のノード２６０に結合されるように示される。ノード２１０で動作するＮＥＴＦＴは、そのＮＩＣ２６２と関連付けられるリモートノード２６０の物理アドレス172.56.48.38を提供する第１のルートモニタアダプタ（ＲＭＡ−Ａ）を含むことができる。ＲＭＡ−Ａを、パスＡと関連付けることができるノード２１０の第１のトンネルアダプタ（ＴＡ−Ａ）と関連付けることができる。ノード２１０のＮＥＴＦＴは、そのＮＩＣ２６４と関連付けられるリモートノード２６０の第２の物理アドレス197.71.48.39を提供する第２のルートモニタアダプタ（ＲＭＡ−Ｂ）を含むこともできる。ＲＭＡ−Ｂを、パスＢと関連付けることができるノード２１０の第２のトンネルアダプタ（ＴＡ−Ｂ）と関連付けることができる。
【００４２】
図３を参照すると、ルートモニタアダプタ３０６は典型的に、リモートノードへの経路の調子（health）をモニタし、ルーティングデータベース３０４内の障害がある経路または動作可能な経路を示す。モニタリングには典型的に、任意のイベント指示を受信すること、および／または任意のハートビート障害を記録すること、およびそれに応じてデータベースを更新することが含まれる。一例では、ＮＩＣまたは媒体コネクションの障害のイベント指示により、トンネルアダプタ３０８が使用不可となることがある。別の例では、ハートビート障害により、ハートビートの障害が起った特定のリモートノードと関連付けられるルートモニタアダプタ３０６が使用不可となることがある。
【００４３】
図４は、ＮＥＴＦＴ３００およびアプリケーション４０２を含むフォールトトレラント通信アーキテクチャ２１６の例を示すブロック図である。この例では、アプリケーション４０２は、スタックを介して、仮想ソースアドレス２１７、および宛先ノードを表す仮想宛先アドレスを使用して、データパケットをＮＥＴＦＴ３００に送信する。この送出（out-going）データパケットは、パス４８０を介して、アプリケーションからネットワークスタックを通ってドライバ３００に流れる。ドライバ３００は典型的に、取り得る経路のいずれを各パケットが取るべきであるかを、ルーティングデータベースに格納される優先順位情報と経路の動作可能ステータス情報を通常使用して判定し、適切な物理ソースアドレス４２２または４２４を使用して、選択された経路上をターゲットノードにパケットをトンネリングする。
【００４４】
アプリケーション４０２は、図４に示されるように、ＮＥＴＦＴ３００を通じて、ＴＣＰプロトコルを介してデータパケットを送信することができる。代替的に、ＵＤＰまたは任意の他のプロトコルを使用することができる。また、示されるように、ＮＥＴＦＴ３００は、ＵＤＰプロトコルを使用してパケットをターゲットノードにトンネリングすることもできる。代替的に、ＴＣＰまたは任意の他のプロトコルをトンネリングに使用することができる。さらに、代替例では、ミニポートアダプタまたはＮＤＩＳドライバを使用しないことあるが、他のメカニズムまたはアーキテクチャを使用して同様の機能を実行することがある。最後に、ネットワークスタックなどの様々なエレメントは、示されるようにまたは他の方法のようにユーザモードまたはカーネルモードのいずれかで、あるいは同等の動作モードの有無に関係なくシステム上で動作することができる。
【００４５】
図５は、２０２のネットワーク１上のパスＡと２８２のネットワーク２上のパスＢとを介して結合されるソースノード２１６と宛先ノード２６６を含む、フォールトトレラント通信環境５００を通じて流れるデータを示すフロー図である。この例示環境５００では、データは、ノード２１６で動作するアプリケーションからノード２６６の宛先仮想アドレスで受信待機（listen）しているアプリケーションに送信されるものとして示される。データパケットは、パス５０１で示されるように、ＴＣＰプロトコルを使用してノード２１６で動作しているネットワークスタックの下方に流れ、ＮＥＴＦＴ内に流れる。パスＡが選択された経路であると想定すると、示されるように、ＮＥＴＦＴは、データパケットを、アプリケーションによって使用されているソース仮想アドレスからパスＡにマッピングし、ターゲットノード２６６へのパスＡの物理宛先アドレスを使用してＵＤＰプロトコルを通って、パス５０１でさらに示されるようにノード２１６のＮＩＣ１から出て、リンク２０１を介して２０２のネットワーク１上にデータをトンネリングする。次いで、データは、２０２のネットワーク１を通って、リンク２０３を経てノード２６６へ流れ、パス５０３で示されるように、ノード２６６で動作しているネットワークスタックの上方に流れていく。次いで、データは、送信側でトンネリングプロトコルとして使用されたのと同じプロトコルであるＵＤＰプロトコルドライバを通って流れ、ここで、ノード２６６で動作しているＮＥＴＦＴに渡されるＵＤＰプロトコルヘッダがデータパケットから取り除かれる。次いで、ＮＥＴＦＴはスタックの上方にデータパケットを流し、宛先仮想アドレスを受信待機中のアプリケーションに転送する。レスポンスは逆の順序で流れる傾向がある。
【００４６】
図６は、図５で示されるフォールトトレラント通信環境５００を通って流れるデータを、いくつかの起り得る通信障害６１０、６１２、６２０、６２２および６３０とともに示すフロー図である。他の通信障害が起こる可能性もある。障害６１０は、送信側ノード２１６で動作しているＮＩＣ１の障害を示す。このような障害は、ＮＩＣ１がノードから除去されたり、ＮＩＣ１のドライバに障害が起ったり、ＮＩＣ１自体に障害が起ったりすると、生じることがある。この障害は、ＰｎＰイベントなどのようなイベント指示、および／またはハートビート障害を介して、ＮＥＴＦＴによって検出されることがある。このような状況では、典型的にパスＡに障害が起ったとみなされ、ＮＥＴＦＴはエンドツーエンド間で動作可能な代替経路を選択することとなる。エンドツーエンド間で動作可能な経路とは典型的に、ソースノードおよびアプリケーションからのデータを、宛先のノードおよびアプリケーションまで全て正常に配信することができる経路である。
【００４７】
障害６２０は、ノード２１６のＮＩＣ１と結合しているネットワーク媒体の障害を示す。この障害は、ケーブルがＮＩＣ１から切り離されていること、ケーブルが２０２のネットワーク１のあるデバイスから切り離されつつあること、あるいはケーブルがネットワーク側で接続されるデバイスが電源オフまたは障害があることに起因することがある。このタイプの障害は、ＰｎＰイベントなどのイベント指示、および／またはハートビート障害および選択された代替経路を介して、ＮＥＴＦＴによって検出されることもある。
【００４８】
障害６３０は、ネットワーク２０２内のあるタイプの障害により、データパケットが宛先ノード２６６への到達できないこととなることを示す。この障害の場合は、送信側ノード２１６はまだ、正しい媒体センス指示（media sense indication）とともにネットワーク２０２に結合されている可能性があるが、パスＡは、ネットワークのさらに下方で中断されている。このような障害が生じることにより、送信側ノード２１６で動作しているＮＥＴＦＴは、ローカル指示がネットワーク２０２への接続が良好であると示す場合には、イベント指示を介して障害を検出しないことがあるが、パスＡのハートビート障害を介して障害を検出することがある。
【００４９】
リンク２０３の障害６２２、および受信側ノード２６６で動作しているＮＩＣ１の障害６１２は、ノード２１６に関して示される障害の対応する障害と類似する傾向がある。しかし、これらの障害は、ノード２１６に対してローカルでないためイベント指示を介して検出されないことがあるが、ハートビート障害を介して検出されることがある。
【００５０】
これらの障害の任意のものおよび他の障害が、ノード２１６側で動作しているＮＥＴＦＴによって検出されることがあり、その結果、２８２のネットワーク２上のパスＢなどのエンドツーエンド間で動作可能な代替経路をＮＥＴＦＴが選択することがある。この例では、図６に示されるように、ＮＥＴＦＴは、代替パス６８１の下方へ、２８２のネットワーク２を経て受信側ノード２６６にデータをトンネリングする。障害状態が修正され、エンドツーエンド間の動作可能ステータスがパスＡ上で復元されると、送信側ノード２１６で動作しているＮＥＴＦＴは、リカバリを検出し、再びパスＡを使用することができる。さらに、ノード２６６からノード２１６に返される任意のレスポンスを、ＮＥＴＦＴによって同様のフォールトトレラントの方法でトンネリングすることができる。
【００５１】
図７は、フォールトトレラント通信ドライバ、ＮＥＴＦＴ７００の別の例を示すブロック図である。この例は図３に示される例と類似しているが、以下で説明されるように変形を含む。この例では、ソフトウェアアプリケーションは、仮想アドレスを使用する必要がないことがある。代わりに、アプリケーションは、ターゲットノードへのデータパケットをアドレス指定するために物理宛先アドレスを使用することがある。
【００５２】
プロトコルアダプタ７１０は、一般的に、ミニポートアダプタ７０２（ドライバの処理エレメントとしても知られる）、およびＮＩＣミニポートアダプタ（図示せず）に結合する。典型的に、ノードにインストールされる各ＮＩＣに対して１つのプロトコルアダプタが存在し、各プロトコルアダプタはそのＮＩＣアダプタを介してＮＩＣと関連付けられている。各プロトコルアダプタは、ＮＩＣと関連付けられるように、ＮＩＣに結合される経路とも関連付けられる。プロトコルアダプタ７１０は、アプリケーションからのデータパケットを処理エレメント７０２を介して受け取り、そのデータパケットをトンネリングする必要なく関連ＮＩＣに渡すように動作可能である。
【００５３】
処理エレメント７０２は典型的に、ネットワークスタックの下方に流れるデータパケットを解析(parse)し、そのパケットの物理宛先アドレスを調べ、ルーティングデータベース７０４からの情報を使用して、そのパケットをプロトコルアダプタ７１０を経て転送することができるか、またはトンネルアダプタ３０８を経てターゲットノードにトンネリングする必要があるかを判定する。一般的に、物理宛先アドレスによって示される経路がエンドツーエンド間で動作可能である場合、データパケットはその経路上を送信されることとなる。そうでなければ、パケットをトンネリングすることがある代替経路を選択することがある。
【００５４】
この例では、ルーティングデータベース７０４は、物理宛先アドレスおよび経路のマッピングを、上述した優先度および他の情報ととともに維持する。ルーティングデータベース７０４のマッピングテーブルの例を表２に示す。
【００５５】
【表２】
2009508443.tif 000004
【００５６】
表２および図２を参照すると、表２は、ノード２１６で動作しているＮＥＴＦＴによって使用される場合のマッピングテーブルの例を示す。表２は、ノード２６６へのパスＡと関連付けられる物理宛先アドレス172.56.48.38、およびノード２６６へのパスＢと関連付けられる物理宛先アドレス197.71.48.39を含むマッピングを示す。パスＡは第１の優先度を有し、パスＢは第２の優先度を有するように示される。
【００５７】
データをノード２１６からノード２６６に送信するとき、このようなマッピングテーブルは典型的に、ノード２６６の物理宛先アドレス172.56.48.38に送信されるデータパケットの転送に（または、必要な場合はトンネリングに）使用される。元の宛先アドレスと関連付けられる経路が動作可能である場合、データパケットは、トンネリングなしに宛先ノードに転送される傾向がある。その経路が使用可能である場合、データパケットは、トンネリングを介して、代替経路を経てノード２６６の物理宛先アドレス197.71.48.39に送信される。ＮＥＴＦＴ７００の他の態様は一般的に、図３に関して説明したＮＥＴＦＴの態様と同様である。
【００５８】
図８は、ＮＥＴＦＴ７００およびアプリケーション４０２を含むフォールトトレラント通信アーキテクチャ２１６の例を示すブロック図である。この例では、アプリケーション４０２は、物理ソースアドレスと宛先ノードを表す物理宛先アドレス８０１とを使用して、スタックを介してＮＥＴＦＴ７００にデータパケットを送信する。このような送出データパケットは、アプリケーションからパス８８０を介して、ネットワークスタックを通ってドライバ７００に流れる。ドライバ７００は典型的に、取り得る経路のいずれを各パケットが取るべきかを、ルーティングデータベースに格納される優先順位情報と経路動作可能ステータスとを通常使用して判定し、そして、元の物理宛先アドレスによって示される経路でターゲットノードにパケットを転送するか、またはその経路がエンドツーエンド間で動作可能でない場合には、この例ではルート８８２および８９２のＮＩＣ２で示されるような代替経路でパケットをトンネリングする。
【００５９】
アプリケーション４０２は、図８に示されるように、ＴＣＰプロトコルを介してＮＥＴＦＴ７００を通してデータパケットを送信することができる。代替的に、ＵＤＰまたは任意の他のプロトコルを使用することができる。また、示されるように、ＮＥＴＦＴ７００は、ＵＤＰプロトコルを使用してパケットをターゲットノードにトンネリングすることもできる。代替的に、ＴＣＰまたは他のプロトコルをトンネリングに使用することもできる。さらに、他の例では、ＮＤＩＳドライバを使用しないこともあるが、他のメカニズムまたはアーキテクチャを使用して同様の機能を実行することがある。最後に、ネットワークスタックなどの様々なエレメントは、示されるようにまたは他の方法のようにユーザモードまたはカーネルモードのいずれかで、あるいは同等の動作モードの有無に関係なくシステム上で動作することができる。
【００６０】
図９は、２０２のネットワーク１上のパスＡと２８２のネットワーク２上のパスＢとを介して結合されるソースノード８１６と宛先ノード９６６を含む、フォールトトレラント通信環境９００を通して流れるデータを示すフロー図である。この例示環境９００では、データは、ノード２１６で動作しているアプリケーションから、ノード２６６で宛先物理アドレスを受信待機しているアプリケーションに送信されるように示される。データパケットは、パス９０１によって示されるように、ＴＣＰプロトコルを使用してノード２１６で動作しているネットワークスタックの下方へ流れ、ＮＥＴＦＴ内に流れる。示されるように、パスＡが選択された経路であると想定すると、ＮＥＴＦＴは、データパケットを、アプリケーションから提供される物理宛先アドレスを使用して、ノード２１６のＮＩＣ１を介してパスＡを経て、リンク２０１を介して２０２のネットワーク１を通して転送する。次いで、データは２０２のネットワーク１を通って、リンク２０３を経てノード９６６に流れ、パス９０３で示されるようにノード９６６で動作しているネットワークスタックの上方に流れる。次いで、データは、ＮＥＴＦＴおよびプロトコルドライバ（送信側で送信プロトコルとして使用されたのと同じプロトコルのプロトコルドライバ）を通って、アプリケーションまで流れる。レスポンスは逆の順序で流れる傾向がある。
【００６１】
図１０は、図９に示されるフォールトトレラント通信環境９００を通って流れるデータを、いくつかの起り得る通信障害１０１０、１０１２、１０２０、１０２２、および１０３とともに示すフロー図である。他の通信障害が起こる可能性もある。障害１０１０は、送信側ノード８１６で動作しているＮＩＣ１の障害を示す。このような障害は、ＮＩＣ１がノードから除去されるか、そのＮＩＣドライバに障害が起こるか、ＮＩＣ自体に障害が起こると、生じることがある。この障害は、ＰｎＰイベントなどのようなイベント指示および／またはハートビート障害を介してＮＥＴＦＴによって検出されることがある。このような状況では、パスＡは典型的に、障害が起こったとみなされ、ＮＥＴＦＴはエンドツーエンド間で動作可能な代替経路を選択することになる。
【００６２】
障害１０２０は、ノード８１６のＮＩＣ１と結合しているネットワーク媒体の障害を示す。この障害は、ケーブルがＮＩＣ１から切り離されていること、ケーブルが２０２のネットワーク１のあるデバイスから切り離されつつあること、あるいはケーブルがネットワーク側で接続されるデバイスが電源オフまたは障害があることに起因することがある。このタイプの障害は、ＰｎＰイベントなどのイベント指示、および／またはハートビート障害および代替経路が選択されたことを介して、ＮＥＴＦＴによって検出されることもある。
【００６３】
障害１０３０は、ネットワーク２０２内のあるタイプの障害により、データパケットが宛先ノード９６６に到達できないこととなることを示す。この障害の場合は、送信側ノード８１６はまだ、正しい媒体センス指示とともにネットワーク２０２に結合されている可能性があるが、パスＡは、ネットワークのさらに下方で中断されている。このような障害が起こることにより、送信側ノード８１６で動作しているＮＥＴＦＴは、ローカル指示がネットワーク２０２へのコネクティビティが良好であると示す場合には、ＰｎＰイベントなどのイベント指示を介して障害を検出しないことがあるが、パスＡのハートビート障害を介して障害を検出することがある。
【００６４】
リンク２０３の障害１０２２、および受信側ノード２６６で動作しているＮＩＣ１の障害１０１２は、ノード８１６について示される障害の対応する障害と類似している傾向がある。しかし、これらの障害はノード８１６に対してローカルでないため、イベント指示を介して検出されないことがあるが、ハートビート障害を介して検出されることがある。
【００６５】
任意のこれらの障害および他の障害は、ノード８１６で動作しているＮＥＴＦＴによって検出され、その結果、２８２のネットワーク２上のパスＢなどのエンドツーエンド間で動作可能な代替経路をＮＥＴＦＴが選択することがある。この例では、図１０に示されるように、ＮＥＴＦＴは、代替パス１０８１を下って、２８２のネットワーク２を経て受信側ノード９６６にデータをトンネリングする。障害状態が修正され、エンドツーエンド間の動作可能ステータスがパスＡで復元されると、送信側ノード８１６で動作しているＮＥＴＦＴはそのリカバリを検出し、再びパスＡを使用することがある。さらに、ノード９６６からノード８１６に返される任意のレスポンスを、パスＡおよびパスＢの動作可能ステータスに応じて、ＮＥＴＦＴによって同様のフォールトトレラントの方法で転送するか、またはトンネリングすることができる。
【００６６】
図１１は、上述した技術を実装することができる例示のコンピューティング環境１１００を示すブロック図である。適切なコンピューティング環境を、多数の汎用または専用のシステムで実装することができる。よく知られているシステムの例には、パーソナルコンピュータ（ＰＣ）、ハンドヘルドまたはラップトップデバイス、マイクロプロセッサベースのシステム、マルチプロセッサシステム、サーバ、ワークステーション、家庭用電子機器、セットトップボックスなどが含めることができるが、これらには限定されない。
【００６７】
コンピューティング環境１１００には、一般的に、様々な周辺デバイス１１０２、１１０３、１１０４などと結合されるコンピューティングデバイス１１０１の形式の汎用コンピューティングシステムが含まれる。システム１１００は、１つまたは複数のＩ／Ｏインタフェースを介して、キーボード、およびマウスもしくはトラックボールなどのポインティングデバイスを含む様々な入力デバイス１１０３に結合することができる。コンピューティングデバイス１１０１のコンポーネントには、（中央処理ユニット（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、マイクロプロセッサ（μＰ）などを含む）１つまたは複数のプロセッサ１１０７、システムメモリ１１０９、および典型的に様々なコンポーネントと結合するシステムバス１１０８を含めることができる。プロセッサ１１０７は典型的に、様々なコンピュータ実行可能命令を処理または実行して、コンピューティングデバイス１１０１のオペレーションを制御し、ネットワーク接続１１１４などの様々な通信接続を介して他の電子および／またはコンピューティングデバイス、システム、または環境（図示せず）とやりとりをする。システムバス１１０８は、メモリバスまたはメモリコントローラ、周辺バス、シリアルバス、アクセラレイテッドグラフィックスポート、任意の様々なバスアーキテクチャを使用するプロセッサまたはローカルバスなどを含む、任意の数の数タイプのバス構造を表す。
【００６８】
システムメモリ１１０９は、ランダムアクセスメモリ（ＲＡＭ）などの揮発性メモリ、および／または読み取り専用メモリ（ＲＯＭ）もしくはフラッシュメモリ（ＦＬＡＳＨ）などの不揮発性メモリの形式のコンピュータ読取可能媒体を含むことができる。基本入力／出力システム(ＢＩＯＳ)を、不揮発性メモリなどに格納することができる。システムメモリ１１０９は典型的に、データ、コンピュータ実行可能命令、および／あるいは、１つもしくは複数のプロセッサ１１０７によって即時にアクセス可能であり、および／または現在操作されているコンピュータ実行可能命令を含むプログラムモジュールを格納する。
【００６９】
大容量ストレージデバイス１１０４および１１１０を、システムバスとの結合によって、コンピューティングデバイス１１０１に結合することができるか、コンピューティングデバイス１１０１に組み込むことができる。このような大容量ストレージデバイス１１０４および１１１０は、リムーバブルで不揮発性の磁気ディスク（例えば、「フロッピー（登録商標）ディスク」）１１０５との間で読み書きをする磁気ディスクドライブ、および／またはＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ１１０６などの不揮発性の光ディスクとの間で読み書きをする光ディスクドライブを含むことができる。代替的に、ハードディスク１１１０などの大容量ストレージデバイスは、非リムーバブルストレージデバイスを含むことができる。他の大容量ストレージデバイスは、メモリカード、メモリスティック、テープストレージデバイスなどを含むことができる。
【００７０】
任意の数のコンピュータプログラム、ファイル、データ構造などを、ハードディスク１１１０、他のストレージデバイス１１０４、１１０５、１１０６、および、例としてオペレーティングシステム、アプリケーションプログラム、データファイル、ディレクトリ構造、およびコンピュータ実行可能命令を含む（典型的には、利用可能なスペースによって制限される）システムメモリ１１０９に格納することができる。
【００７１】
ディスプレイデバイス１１０２などの出力デバイスを、ビデオアダプタ１１１１などのインタフェースを介してコンピューティングデバイス１１０１に結合することができる。他のタイプの出力デバイスは、プリンタ、オーディオ出力、触覚デバイス(tactile device)、または他の感知（sensory）アウトプットメカニズムなどを含むことができる。出力デバイスは、コンピューティングデバイス１１０１が人間のオペレータまたは他のマシンもしくはシステムとやりとりするのを可能にすることができる。ユーザは、キーボード、マウス、ジョイスティック、ゲームパッド、データポートなどの任意の数の異なる入力デバイスを介してコンピューティング環境１１００とインタフェースをとることができる。これらおよび他の入力デバイスは、システムバス１１０８と結合することができる入力／出力インタフェースを介してプロセッサ１１０７と結合することができ、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）、ファイアワイヤ（fire wire）、赤外線ポートなどの、他のインタフェースおよびバス構造によって結合することができる。
【００７２】
コンピューティングデバイス１１０１は、ネットワーキング環境において、１つまたは複数のローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、ストレージエリアネットワーク（ＳＡＮ）、インターネット、無線リンク、光リンクなどを通して１つまたは複数のリモートコンピューティングデバイスに対する通信接続を介して動作することができる。コンピューティングデバイス１１０１を、ネットワークアダプタ１１１３などを介して、代替として、モデム、デジタル加入者回線(ＤＳＬ)リンク、総合デジタル通信網(ＩＳＤＮ)リンク、インターネットリンク、ワイヤレスリンクなどを介して、ネットワークに結合することができる。
【００７３】
ネットワーク接続などの通信接続１１１４は、典型的に、ネットワークなどの通信媒体に対する結合を提供する。通信媒体は典型的に、コンピュータ読取可能でコンピュータ実行可能な命令、データ構造、ファイル、プログラムモジュール、および、搬送波または他のトランスポートメカニズムなどの変調データ信号を使用する他のデータを提供する。「変調データ信号(modulated data signal)」という用語は典型的に、信号の中の情報を符号化するような方法で設定または変更された、１つまたは複数の特性を有する信号を意味する。限定ではなく例として、通信媒体には、有線ネットワークもしくは直接有線接続などの有線媒体、および音響、無線周波数、赤外線もしくは他の無線通信メカニズムなどの無線媒体を含めることができる。
【００７４】
コンピュータ読取可能でコンピュータ実行可能な命令およびデータを提供するために利用されるストレージデバイスは、ネットワーク上で分散させることができることを当業者であれば理解するであろう。例えば、リモートコンピュータまたはストレージデバイスは、コンピュータ読取可能でコンピュータ実行可能な命令を、ソフトウェアアプリケーションおよびデータの形式で格納することができる。ローカルコンピュータは、ネットワークを介して、リモートコンピュータまたはストレージデバイスにアクセスして、ソフトウェアアプリケーションまたはデータの一部または全部をダウンロードすることができ、任意のコンピュータ実行可能命令を実行することができる。代替として、ローカルコンピュータは、必要に応じてソフトウェアまたはデータの一部をダウンロードすることができ、または、いくつかの命令をローカルコンピュータで実行していくつかをリモートコンピュータで実行することによってソフトウェアを分散的に処理することができる。
【００７５】
従来的な手法を利用することにより、ソフトウェアのコンピュータ実行可能命令の全部または一部を、デジタル信号プロセッサ(ＤＳＰ)、プログラマブルロジックアレイ(ＰＬＡ)、ディスクリート回路などの専用電子回路によって実行することができることも当業者であれば理解するであろう。「電子装置（electronic apparatus）」という用語は、任意のソフトウェア、ファームウェアなどを備えるコンピューティングデバイスまたは家庭用電子機器、あるいはソフトウェア、ファームウェアなどを備えない電子デバイスや回路などを含むことがある。
【００７６】
「ファームウェア」という用語は典型的に、ＲＯＭなどの電子デバイスに維持される実行可能な命令、コード、またはデータを指す。「ソフトウェア」という用語は一般的に、任意の形式のコンピュータ読取可能媒体に維持される実行可能な命令、コード、データ、アプリケーション、プログラムなどを指す。「コンピュータ読取可能媒体」という用語は典型的に、システムメモリ、ストレージデバイスおよびその関連媒体、通信媒体などを指す。
【図面の簡単な説明】
【００７７】
【図１】例示のネットワークスタックアーキテクチャを示すブロック図である。
【図２】２つのネットワークを介して結合される２つの例示のノードを含む、ネットワーク化されたコンピューティング環境を示すブロック図である。
【図３】例示のフォールトトレラント通信ドライバ、ＮＥＴＦＴを示すブロック図である。
【図４】ＮＥＴＦＴおよびアプリケーションを含むフォールトトレラント通信アーキテクチャの例を示すブロック図である。
【図５】ネットワーク１上のパスＡおよびネットワーク２上のパスＢを介して結合されるソースノードと宛先ノードを含むフォールトトレラント通信環境を通って流れるデータを示すフロー図である。
【図６】図５に示されるフォールトトレラント通信環境を通って流れるデータを、いくつかの起り得る通信障害とともに示すフロー図である。
【図７】フォールトトレラント通信ドライバ、ＮＥＴＦＴの別の例を示すブロック図である。
【図８】ＮＥＴＦＴおよびアプリケーションを含むフォールトトレラント通信アーキテクチャの例を示すブロック図である。
【図９】ネットワーク１上のパスＡとネットワーク２上のパスＢを介して結合されるソースノードと宛先ノードを含むフォールトトレラント通信環境を通って流れるデータを示すフロー図である。
【図１０】図９に示されるフォールトトレラント通信環境を通って流れるデータを、いくつかの起り得る通信障害とともに示すフロー図である。
【図１１】上述した技術を実装することができるコンピューティング環境の例を示すブロック図である。
【図１】
2009508443.tif 000005
【図２】
2009508443.tif 000006
【図３】
2009508443.tif 000007
【図４】
2009508443.tif 000008
【図５】
2009508443.tif 000009
【図６】
2009508443.tif 000010
【図７】
2009508443.tif 000011
【図８】
2009508443.tif 000012
【図９】
2009508443.tif 000013
【図１０】
2009508443.tif 000014
【図１１】
2009508443.tif 000015
【国際調査報告】
2009508443.tif 000016
2009508443.tif 000017