(57)【要約】  フォールト・トレラント・データ通信のシステムおよび方法に関する。本発明の実施形態は、ネットワーク環境内でルーティング・テーブル更新情報を交換するルータを含む、さまざまなアプリケーションに適用できる。プライマリ・プロセスは遠隔プロセスとの通信に関与し、この通信にはデータ内容および通信状態の転送が含まれる。プライマリ・プロセスはデータ内容および通信状態をデータ格納装置に格納する。プライマリ・プロセスが故障した場合、遠隔プロセスとの通信は、データ格納装置からデータ内容および通信状態を取り出すことによりプライマリ・プロセスをミラーリングする、バックアップ・プロセスに移される。これより、バックアップ・プロセスは、データ格納装置から取り出された通信状態を用いて、遠隔プロセスとの通信を続行する。
2005516478.tif 000002
【特許請求の範囲】
【請求項１】
送信元との間でデータおよび通信状態の転送を含む通信を実行する通信実行工程と、
前記送信元からデータを受信するデータ受信工程と、
この受信したデータを処理するデータ処理工程と、
処理後に、前記送信元にデータの受取を確認応答する受取確認応答工程とを備えた、フォールト・トレラント・データ通信方法。
【請求項２】
請求項１において、前記データ処理工程が、バックアップのために、受信データを１つまたは複数のデータ格納装置に格納すなわち適用する、フォールト・トレラント・データ通信方法。
【請求項３】
請求項２において、さらに、通信状態を前記１つまたは複数のデータ格納装置に格納する工程であって、前記通信状態を、前記１つまたは複数のデータ格納装置に格納または適用されるデータに関連付けるようにする通信状態格納工程を備えた、フォールト・トレラント・データ通信方法。
【請求項４】
請求項３において、さらに、
故障発生時にバックアップを起動するバックアップ起動工程と、
前記１つまたは複数のデータ格納装置のデータおよび通信状態からデータおよび通信状態を再生成するデータおよび通信状態再生成工程と、
前記バックアップにより、前記再生成されたデータおよび通信状態を用いて復元される通信を続行する通信続行工程とを備えた、フォールト・トレラント・データ通信方法。
【請求項５】
請求項４において、前記通信続行工程が、
故障の前に１つまたは複数のデータ格納装置に格納された前記通信状態に対応する前記送信元からデータを受信することを期待する、フォールト・トレラント・データ通信方法。
【請求項６】
請求項３において、前記通信状態が以前の通信状態および受信データから導き出される、フォールト・トレラント・データ通信方法。
【請求項７】
請求項３において、前記通信状態がＴＣＰセッション・データを含む、フォールト・トレラント・データ通信方法。
【請求項８】
請求項１において、前記通信がＴＣＰ／ＩＰ通信である、フォールト・トレラント・データ通信方法。
【請求項９】
請求項１において、前記受信データがルーティング情報である、フォールト・トレラント・データ通信方法。
【請求項１０】
請求項９において、前記ルーティング情報がＢＧＰ（境界ゲートウェイ・プロトコル）ルーティング情報である、フォールト・トレラント・データ通信方法。
【請求項１１】
請求項１において、前記送信元がインターネット・ルータである、フォールト・トレラント・データ通信方法。
【請求項１２】
送信元との間でデータおよび通信状態の転送を含む通信を実行する通信実行工程と、
前記送信元からデータを受信するデータ受信工程と、
バックアップのために、前記受信データを１つまたは複数のデータ格納装置に格納すなわち適用するデータ適用工程と、
通信状態を前記１つまたは複数のデータ格納装置に格納する工程であって、前記通信状態を、前記１つまたは複数のデータ格納装置に格納または適用されるデータに関連付けるようにする通信状態格納工程とを備えた、フォールト・トレラント・データ通信方法。
【請求項１３】
請求項１２において、さらに、
故障発生時にバックアップを起動するバックアップ起動工程と、
前記１つまたは複数のデータ格納装置のデータおよび通信状態からデータおよび通信状態を再生成するデータおよび通信状態再生成工程と、
前記バックアップにより、前記再生成されたデータおよび通信状態を用いて生成される通信を続行する通信続行工程とを備えた、フォールト・トレラント・データ通信方法。
【請求項１４】
請求項１３において、前記通信続行工程が、
故障の前に１つまたは複数のデータ格納装置に格納された前記通信状態に対応する前記送信元からデータを受信することを期待する、フォールト・トレラント・データ通信方法。
【請求項１５】
宛先との間でデータおよび通信状態の転送を含む通信を実行する通信実行工程と、
前記宛先に転送する送信データを１つまたは複数のデータ格納装置に格納するデータ格納工程と、
通信状態を１つまたは複数のデータ格納装置に格納する工程であって、前記通信状態を前記送信データに関連付けるようにする通信状態格納工程とを備えた、フォールト・トレラント・データ通信方法
【請求項１６】
請求項１５において、さらに、
前記送信データをフラグメントにして宛先に伝送するデータ伝送工程と、
前記１つまたは複数のデータ格納装置の前記通信状態を更新する工程であって、前記通信状態が前記伝送フラグメントを反映するようにする通信状態更新工程とを備えた、フォールト・トレラント・データ通信方法。
【請求項１７】
請求項１６において、さらに、
前記伝送フラグメントに応答する確認応答を受信する確認応答受信工程と、
前記１つまたは複数のデータ格納装置の前記通信状態を更新する工程であって、前記伝送フラグメントの確認応答を反映させる通信状態更新工程とを備えた、フォールト・トレラント・データ通信方法。
【請求項１８】
請求項１７において、さらに、
前記１つまたは複数のデータ格納装置の確認応答された伝送フラグメントに対応する前記送信データの部分を削除する削除工程とを備えた、フォールト・トレラント・データ通信方法。
【請求項１９】
送信元との間でデータおよび通信状態の転送を含む通信を実行する制御ユニットを備え、
前記制御ユニットが前記送信元からデータを受信し、
前記制御ユニットがこの受信したデータを処理し、
前記制御ユニットが、前記処理後に、前記送信元にデータの受取を確認応答する、フォールト・トレラント・データ通信システム。
【請求項２０】
請求項１９において、さらに、
１つまたは複数のデータ格納装置を備え、
前記制御ユニットの受信データの前記処理が、バックアップのために、受信データを１つまたは複数のデータ格納装置に格納すなわち適用する、フォールト・トレラント・データ通信システム。
【請求項２１】
請求項２０において、さらに、
前記制御ユニットが、通信状態を前記１つまたは複数のデータ格納装置に格納して、前記通信状態を、前記１つまたは複数のデータ格納装置に格納または適用されるデータに関連付けるようにする、フォールト・トレラント・データ通信システム。
【請求項２２】
請求項２１おいて、さらに、
前記制御ユニットの故障発生時に起動されるバックアップ制御ユニットを備え、
前記バックアップ制御ユニットが、前記１つまたは複数のデータ格納装置のデータおよび通信状態からデータおよび通信状態を再生成し、
前記バックアップ制御ユニットが、前記再生成されたデータおよび通信状態を用いて復元される通信を続行する、フォールト・トレラント・データ通信システム。
【請求項２３】
請求項２２において、前記バックアップによる通信の続行は、
前記バックアップ制御ユニットが、故障の前に１つまたは複数のデータ格納装置に格納された前記通信状態に対応する前記送信元からデータを受信することを期待する、フォールト・トレラント・データ通信システム。
【請求項２４】
請求項２１において、前記通信状態が以前の通信状態および受信データから導き出される、フォールト・トレラント・データ通信システム。
【請求項２５】
請求項２１において、前記通信状態がＴＣＰセッション・データを含む、フォールト・トレラント・データ通信システム。
【請求項２６】
請求項１９において、前記通信がＴＣＰ／ＩＰ通信である、フォールト・トレラント・データ通信システム。
【請求項２７】
請求項１９において、前記受信データがルーティング情報である、フォールト・トレラント・データ通信システム。
【請求項２８】
請求項２７において、前記ルーティング情報がＢＧＰ（境界ゲートウェイ・プロトコル）ルーティング情報である、フォールト・トレラント・データ通信システム。
【請求項２９】
請求項１９において、前記送信元がインターネット・ルータである、フォールト・トレラント・データ通信システム。
【請求項３０】
送信元との間でデータおよび通信状態の転送を含む通信を実行する制御ユニットを備え、
前記制御ユニットが前記送信元からデータを受信し、
前記制御ユニットが、バックアップのために、受信データを１つまたは複数のデータ格納装置に格納すなわち適用し、
前記制御ユニットが、通信状態を前記１つまたは複数のデータ格納装置に格納して、前記通信状態を、前記１つまたは複数のデータ格納装置に格納すなわち適用されるデータに関連付けるようにする、フォールト・トレラント・データ通信システム。
【請求項３１】
請求項３０おいて、さらに、
前記制御ユニットの故障発生時に起動されるバックアップ制御ユニットを備え、
前記バックアップ制御ユニットが、前記１つまたは複数のデータ格納装置のデータおよび通信状態からデータおよび通信状態を再生成し、
前記バックアップ制御ユニットが、前記再生成されたデータおよび通信状態を用いて生成される通信を続行する、フォールト・トレラント・データ通信システム。
【請求項３２】
請求項３１において、前記バックアップによる通信の続行は、
前記バックアップ制御ユニットが、故障の前に１つまたは複数のデータ格納装置に格納された前記通信状態に対応する前記送信元からデータを受信することを期待する、フォールト・トレラント・データ通信システム。
【請求項３３】
宛先との間でデータおよび通信状態の転送を含む通信を実行する制御ユニットを備え、
前記制御ユニットが、前記宛先に転送する送信データを１つまたは複数のデータ格納装置に格納し、
前記制御ユニットが、通信状態を１つまたは複数のデータ格納装置に格納して、前記通信状態を前記送信データに関連付けるようにする、フォールト・トレラント・データ通信システム。
【請求項３４】
請求項３３において、さらに、
前記制御ユニットが、前記送信データをフラグメントにして宛先に伝送し、
前記制御ユニットが、前記１つまたは複数のデータ格納装置の前記通信状態を更新して、前記通信状態が前記伝送フラグメントを反映するようにする、フォールト・トレラント・データ通信システム。
【請求項３５】
請求項３４において、さらに、
前記制御ユニットが、前記伝送フラグメントに応答する確認応答を受信し、
前記制御ユニットが、前記１つまたは複数のデータ格納装置の前記通信状態を更新して、前記伝送フラグメントの確認応答を反映させる、フォールト・トレラント・データ通信システム。
【請求項３６】
請求項３５において、さらに、
前記制御ユニットが、前記１つまたは複数のデータ格納装置の確認応答された伝送フラグメントに対応する前記送信データの部分を削除する、フォールト・トレラント・データ通信システム。
【請求項３７】
請求項１９において、前記制御ユニットが、
アプリケーション・プロセスと、
コネクション指向伝送プロトコル・プロセスとを備え、
前記アプリケーション・プロセスが前記伝送プロトコル・プロセスを介して前記送信元との間で通信を実行し、
前記伝送プロトコル・プロセスが、前記アプリケーション・プロセスによって処理された後に、前記送信元にデータの受取の確認応答を返す、フォールト・トレラント・データ通信システム。
【請求項３８】
請求項３７において、前記伝送プロトコル・プロセスが通信状態を１つまたは複数のデータ格納装置に格納して、前記通信状態を前記１つまたは複数のデータ格納装置に格納すなわち適用される前記受信データに関連付けるようにする、フォールト・トレラント・データ通信システム。
【請求項３９】
請求項３３において、前記制御ユニットが、
アプリケーション・プロセスと、
コネクション指向伝送プロトコル・プロセスとを備え、
前記アプリケーション・プロセスが前記伝送プロトコル・プロセスを介して前記宛先との間で通信を実行し、
前記伝送プロトコル・プロセスが、前記宛先に転送するための前記アプリケーション・プロセスからの送信データを、前記１つまたは複数の格納装置に格納し、
前記伝送プロトコル・プロセスが、前記通信状態を前記１つまたは複数のデータ格納装置に格納して、通信状態を前記送信データに関連付けしている、フォールト・トレラント・データ通信システム。
【請求項４０】
１つまたは複数の外部リンクに電気的に結合された制御ユニットを備え、
前記制御ユニットが前記外部リンクの１つを介して遠隔ルータとの間でデータおよび通信状態の転送を含む通信を実行し、
前記制御ユニットが、前記遠隔ルータからルーティング・データを受信し、
前記制御ユニットが、この受信したルーティング・データを処理し、
前記制御ユニットが、前記処理後に、前記遠隔ルータにデータの受取を確認応答する、インターネット・ルータ。
【請求項４１】
請求項４０において、前記受信ルーティング・データの前記処理は、前記制御ユニットが、バックアップのために、前記受信ルーティング・データを１つまたは複数のデータ格納装置に格納すなわち適用する、インターネット・ルータ。
【請求項４２】
請求項４１において、さらに、
前記制御ユニットが、通信状態を前記１つまたは複数のデータ格納装置に格納して、前記通信状態を、前記１つまたは複数のデータ格納装置に格納すなわち適用される前記ルーティング・データに関連付けるようにする、インターネット・ルータ。
【請求項４３】
請求項４２おいて、さらに、
前記制御ユニットの故障発生時に起動されるバックアップ制御ユニットを備え、
前記バックアップ制御ユニットが、前記１つまたは複数のデータ格納装置内のデータおよび通信状態からデータおよび通信状態を再生成し、
前記バックアップ制御ユニットが、前記再生成されたデータおよび通信状態を用いて復元される通信を続行する、インターネット・ルータ。
【請求項４４】
遠隔ルータとの間でデータおよび通信状態の転送を含む通信を実行する制御ユニットを備え、
前記制御ユニットが前記遠隔ルータからルーティング・データを受信し、
前記制御ユニットが、バックアップのために、ルーティング・データを１つまたは複数のデータ格納装置に格納すなわち適用し、
前記制御ユニットが、通信状態を前記１つまたは複数のデータ格納装置に格納して、前記通信状態を、前記１つまたは複数のデータ格納装置に格納すなわち適用されるルーティング・データに関連付けるようにする、インターネット・ルータ。
【請求項４５】
遠隔ルータとの間でデータおよび通信状態の転送を含む通信を実行する制御ユニットを備え、
前記制御ユニットが、前記遠隔ルータに転送する送信データを１つまたは複数のデータ格納装置に格納し、
前記制御ユニットが、通信状態を１つまたは複数のデータ格納装置に格納して、前記通信状態を前記送信データに関連付けるようにする、インターネット・ルータ。
【請求項４６】
請求項４５において、さらに、
前記制御ユニットが、前記送信データをフラグメントにして宛先に送信し、
前記制御ユニットが、前記１つまたは複数のデータ格納装置の前記通信状態を更新して、前記通信状態が前記伝送フラグメントを反映するようにする、インターネット・ルータ。
【請求項４７】
請求項４６において、さらに、
前記制御ユニットが、前記伝送フラグメントに応答する確認応答を受信し、
前記制御ユニットが、前記１つまたは複数のデータ格納装置内の前記通信状態を更新して、前記伝送フラグメントの確認応答を反映させる、インターネット・ルータ。
【請求項４８】
請求項４７において、さらに、
前記制御ユニットが、前記１つまたは複数のデータ格納装置の確認応答された伝送フラグメントに対応する前記送信データの部分を削除する、インターネット・ルータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はフォールト・トレラント・データ通信のシステムおよび方法に関する。
【背景技術】
【０００２】
本出願は、2002年1月24日出願の米国特許仮出願第60/351,717号の優先権を主張する。前記出願の全文は参照により本明細書に引用したものとする。
【０００３】
インターネットは、SONET（同期光ネットワーク）およびGigabit Ethernet（GigE，登録商標）などの独立したコンピュータ・ネットワークをリンクによって相互接続した世界規模のインターネットワークである。図１に示すとおり、ルータ１０はリンク１５の末端を終端し、入ってくるネットワーク・パケットを最終宛先に向けて送出する多重化インタフェースを提供する。
【０００４】
データは、一般にパケットと呼ばれるフォーマット化された伝送ユニットによって、このようなインターネットワーク上で通信される。パケットのフォーマットは、ＴＣＰ／ＩＰ（伝送制御プロトコル／インターネット・プロトコル）のような、一連のネットワーク伝送プロトコルによって定義される。例えば、ＴＣＰ／ＩＰパケットはＩＰヘッダおよびＴＣＰセグメントを含む。ＩＰヘッダは送信元ホストおよび宛先ホストのＩＰアドレスを特定し、ルータ１０はこのＩＰアドレスを用いて、ＴＣＰ／ＩＰパケットをリンク１５上で宛先ホストに方向付ける。さらにＴＣＰセグメントは、ＴＣＰヘッダおよび最終宛先に転送されるアプリケーション・データを含む。ＴＣＰヘッダは、送信元および宛先ホストで実行するアプリケーションに対応する内部ポート・アドレスを指定することにより、ＴＣＰコネクションのエンドポイントを特定する。さらに、ＴＣＰはコネクション指向プロトコルであるため、ＴＣＰヘッダはまた、ＴＣＰセグメントを特定して確認応答するシーケンス番号を有する。
【０００５】
パケット・ルーティングを実行するために、ルータ１０は内部ルーティング・テーブル１２を保持する。このルーティング・テーブル１２は、ネットワーク識別子に対応する「ネクスト・ホップ」を算定するデータ構造体である。「ネクスト・ホップ」は一般に、介在ルータに導き、このルータは1つまたは複数の宛先ネットワークに向かうゲートウェイを提供する。ルータ１０は、適切なリンク１５上にパケットを送出する際に、ルータ１０のルーティング・テーブル１２を参照する。パケットは一般に、パケット・ヘッダおよびデータ・ペイロードを含む。ルータ１０はパケット・ヘッダから抽出されるパケット宛先を用いてルーティング・テーブル１２を検索し、ネクスト・ホップを取り出す。ネクスト・ホップが特定されると、ルータ１０は、最終宛先に向かう経路に沿って、適切なリンク１５上をネクスト・ホップ・アドレスにパケットを送出する。
【０００６】
インターネット・ルーティングでは、例えば、ルーティング・テーブルの各エントリは少なくとも２つのフィールド値、すなわちＩＰアドレス・プレフィクス１４ａおよびネクスト・ホップ１４ｂを有する。ネクスト・ホップ１４ｂは、Ethernet、シリアル・リンク、またはその他の物理コネクションを介して直接到達できる、別のホストまたはルータのＩＰアドレスである。ＩＰアドレス・プレフィクス１４ａは、ルーティング・エントリが有効である宛先のセットを指定するネットワーク識別子である。このセットの宛先内に存在するためには、宛先ＩＰアドレスの最初の部分がＩＰアドレス・プレフィクス１４ａに一致する必要があり、このＩＰアドレス・プレフィクスは0〜32の有効ビットを有する。例えば、形式128.8.ｘ.ｘのＩＰ宛先アドレスはいずれも、128.8.0.0/16のＩＰアドレス・プレフィクスに一致する。ルータ１０は動的に「学習」し、ネットワーク・コネクション上で相互にルーティング・テーブル更新情報を交換することにより、ルーティング・テーブル・エントリを更新する。インターネット・ルータは一般に、ＴＣＰ／ＩＰコネクション上でルーティング・テーブル更新情報を交換する。このような交換により、更新情報を受け取るルータ１０は動的に変更を内部ルーティング・テーブル１２内に組み入れ、この更新情報をインターネットワーク１内の別のルータに送る。
【０００７】
例えば、図１において、ルータ１０ｂが新しいネットワーク３０をインターネットワーク１に接続すると仮定する。ルータ１０ｂはさらに、ネットワーク１０ａとのコネクションを確立して、ルーティング・テーブルを交換する。ルータ１０ｂからのルーティング・テーブル更新情報は、ルータ１０ｂをネットワーク３０に対する「ネクスト・ホップ」として特定する。次に、ルータ１０ａは他のルータ１０ｃ，１０ｄのそれぞれとのネットワーク・コネクションを確立することにより、ネットワーク３０を１つのエントリとして追加して、ルータ１０ｃ，１０ｄのルーティング・テーブル１２を更新できる。更新情報をルータ１０ｃ，１０ｄのルーティング・テーブル１２に組み込んだ後、ルータ１０は新しく追加した宛先ネットワーク３０にパケットを送出できる。
【０００８】
インターネット・ルータは、ルーティング・テーブル更新情報の交換を含む、ルーティング動作を処理するサーバ・プロセスを実行する。Avici TRS（登録商標）のルータ群のような特定のインターネット・ルータは、バックアップ・サーバ・プロセスを実行し、プライマリ・サーバ・プロセス故障時において、ルーティング動作を引き受ける。
【発明の開示】
【０００９】
パケットを正しくルーティングするには、ルーティング・テーブル更新情報はインターネットワーク内のルータ間で確実に交換される必要がある。バックアップ・サーバ・プロセスを実行して、プライマリ・サーバ・プロセス故障時においても、ルータを確実に使用可能にする。バックアップ・サーバ・プロセスを定期的に実行する特定のルータは、永続的記憶装置にルーティング・テーブルを複写する。したがって、プライマリ・サーバ・プロセスが故障した場合、バックアップ・サーバ・プロセスは、ルーティング・テーブルの格納されたエントリから再生成された内部ルーティング・テーブルを用いて、ルーティング動作を引き受ける。
【００１０】
しかし、プライマリ・サーバ・プロセスがルーティング・テーブル更新情報を交換している間に故障した場合、更新情報は永続的記憶装置において保証されず、バックアップ・サーバ・プロセスがルーティング・テーブルの記憶されたエントリを利用できない。さらに不利な点は、故障のルータがプライマリ・サーバ・プロセスからバックアップ・サーバ・プロセスに移行できたとしても、故障した交換に含まれる遠隔ルータは、故障したルータを利用できないと判断し、このエントリを内部ルーティング・テーブルから削除する。その結果、再初期化プロセスが実行されるまで、そのルータは事実上システムから除外される。
【００１１】
本発明の実施形態では、フォールト・トレラント・データ通信のシステムおよび方法を提供し、これにより、プライマリ・プロセスによって既に確立されているネットワーク・コネクション上での遠隔プロセスとの通信をバックアップ・プロセスが続行できる。このような実施形態は、進行中の通信の続行を維持し、通信およびデータの損失を防止する。
【００１２】
本発明の実施形態では、データ内容および通信状態を転送する遠隔プロセスとの通信に関与するプライマリ・プロセスを提供する。プライマリ・プロセスはデータ内容および通信状態をデータ記憶装置に格納する。この記憶装置は、プライマリ・プロセスが故障した場合にバックアップ・プロセスがアクセスできる。このような故障の場合、遠隔プロセスとの通信は、データ記憶装置からデータ内容および通信状態を取り出すことによってプライマリ・プロセスをミラーリングするバックアップ・プロセスに移される。このように、バックアップ・プロセスは、データ記憶装置から取り出された通信状態を用いて、遠隔プロセスとの通信を続行できる。
【００１３】
通信状態には、更新情報が通信されるネットワーク・コネクションの状態を含む。ここで、ネットワーク・コネクションには例えばＴＣＰコネクションが含まれる。ＴＣＰコネクションについて、プライマリ・プロセスはさらに、ＴＣＰ（伝送制御プロトコル）を実装する遠隔プロセスとの通信をサポートする、フォールト・トレラント・コネクション指向伝送プロトコルを含む。本発明の一実施形態によれば、フォールト・トレラント転送プロトコルは、通信状態をデータ記憶装置に格納するＴＣＰの変更版であり、このプロトコルにより、以前に確立されているネットワーク・コネクション上でバックアップ・プロセスが通信を続行できる。
【００１４】
本発明の実施形態は、ネットワーク環境内のルーティング・テーブル更新情報を交換するルータを含む、さまざまなアプリケーションに適用できる。このようなルータは１つまたは複数の外部リンクに結合されたプライマリ・ルーティング・プロセスを有する。プライマリ・ルーティング・プロセスは外部リンクの１つを介して遠隔ルータとの通信に関与し、ルーティング・データおよび通信状態を転送する。プライマリ・ルーティング・プロセスは、プライマリ・ルーティング・プロセスが故障した場合に、バックアップ・・ルーティング・プロセスがアクセスできるデータ記憶装置にルーティング・データおよび通信状態を格納する。一実施形態によれば、通信状態はネットワーク・コネクションの状態であり、このネットワーク・コネクションを通して更新情報を通信する。
【００１５】
このような故障の場合、遠隔ルータとの通信は、データ記憶装置からルーティング・データおよび通信状態を取り出すことによってプライマリ・ルーティング・プロセスをミラーリングするバックアップ・ルーティング・プロセスに移される。このように、バックアップ・ルーティング・プロセスは、データ記憶装置から取り出された通信状態を用いて、遠隔ルータとの通信を続行できる。
【００１６】
一実施形態によれば、プライマリ・ルーティング・プロセスは、ＢＧＰ（Border Gateway Protocol：境界ゲートウェイ・プロトコル）などのインターネット・ルーティング・プロトコルを実装し、このプロトコルは一般に、ＴＣＰ（伝送制御プロトコル）コネクション上でルーティング・テーブル更新情報を交換できる。このような実施形態においては、通信状態はＴＣＰコネクションの現在の状態であり、この状態には、ＴＣＰポート・アドレス、ＴＣＰ状態識別子（例えば、CLOSED（クローズド）、LISTEN（リッスン）、ESTABLISH（確立）等）、送信および受信シーケンス番号、確認応答シーケンス番号等が含まれる。
【００１７】
プライマリ・ルーティング・プロセスは、通信状態を導き出す格納された状態をデータ記憶装置に格納する。例えば、送信シーケンス番号（すなわち、通信状態）を有するＴＣＰセグメントが受信されると、ＴＣＰ受信シーケンス番号（すなわち、格納された状態）がこの送信シーケンス番号から導き出されて、このコネクション用のデータ記憶装置に格納される。特定のＴＣＰコネクション状態については、通信状態は格納された状態と同一である。
【００１８】
しかし、ＴＣＰは、ＴＣＰセグメントのアプリケーション間の配送を保証しない。代わりに、ＴＣＰは、ＴＣＰセグメントの受信に応答して、一般にＡＣＫと呼ばれる確認応答を転送する。ＴＣＰ確認応答は、データがエンド・ユーザ・プロセスに配送されたことを保証せずに、受信するＴＣＰプロセスがこのようにデータをエンド・ユーザ・プロセスに配送する責任を負うことのみを保証する。したがって、標準ＴＣＰでは、ＴＣＰ確認応答が受信されても、プライマリ・サーバ・プロセスによってルーティング・テーブル更新が実行されてバックアップされたことについての保証はない。
【００１９】
本発明の実施形態はさらに、通信の送信端（すなわち、読出し）すなわち伝送データから通信の受信端（すなわち、書込み）への確認応答受信に先立って、データ内容および通信状態をデータ記憶装置に複写することを保証することによって、アプリケーション間のデータ配送を実現するシステムおよび方法を提供する。したがって、バックアップ・プロセスが開始されると、プライマリ・プロセスからバックアップ・プロセスへの移行の間にデータが損失してしまうのを避けられる。
【００２０】
このような実施形態は、フォールト・トレラント・データ通信の実施形態を実装しない周囲のルータ（例えば、標準ＴＣＰを実装するルータ）にはトランスペアレントである。したがって、フォールト・トレラント・データ通信の実施形態を実装するルータと相互動作するために、既存のルータを変更する必要はない。
【００２１】
本発明の前述およびその他の目的、特徴、および利点は、添付図面に示す本発明の好ましい実施形態の以下の詳細な説明で明らかになるであろう。図面では、同一参照符号は異なる図面においても同一部品を指す。図面は必ずしも縮尺通りでなく、本発明の原理を示すことに重点が置かれている。
【発明を実施するための最良の形態】
【００２２】
以下に、本発明の好ましい実施形態を説明する。
【００２３】
本発明の実施形態は、フォールト・トレラント・データ通信のシステムおよび方法を提供する。一実施形態によれば、フォールト・トレラント・トランスポート層プロトコルは、アプリケーション・プロセスに代わって遠隔ピアとのネットワーク・コネクションを確立するため、および格納装置内にコネクションの現在の状態を維持するために、実装される。アプリケーション・プロセスが故障した場合、ネットワーク・コネクションのローカル・サイドは、格納装置に格納された状態から再生成できる。これにより、バックアップ・アプリケーション・プロセスは、コネクションを再確立またはリセットすることなく、これらネットワーク上で通信を続行できる。本発明の実施形態は、データ交換の信頼性を改良するために、さまざまなアプリケーションに適用できる。一実施形態によれば、インターネット・ルータのようなルータが、ルーティング・テーブル更新情報を交換するためにフォールト・トレラント・データ通信を実行できる。
【００２４】
図２は、一実施形態によるフォールト・トレラント・データ通信を実行するスイッチ・ルータのハードウェア構成要素を示す図である。スイッチ・ルータ２００は、ＴＣＰ／ＩＰパケットを最終宛先に向けて外部リンク上で送出するインターネット・ルータであってもよい。スイッチ・ルータ２００は、プライマリ・サーバ・モジュール２２０ａによって管理される複数のルータ・モジュール２３０を有する。バックアップ・サーバ・モジュール２２０ｂは、スイッチ・ルータ２００内に組み込まれ、プライマリ・サーバ・モジュール２２０ａが故障の場合にルーティング動作を管理する。
【００２５】
プライマリ・サーバ・モジュール２２０ａは、システム２００全体に対するルーティング動作を実行する。詳細には、プライマリ・サーバ・モジュール２２０ａは、ＢＧＰ（境界ゲートウェイ・プロトコル）を含む、複数のＩＰルーティング・プロトコルに対するルーティング・テーブルを保持する。ＢＧＰは、RFC 1771,Y.RekhterおよびT.Liの1995年3月の「境界ゲートウェイ・プロトコル４（ＢＧＰ−４）」により詳細に記載されている。この全データ内容は参照により本明細書に引用したものとする。このルーティング・テーブルは、外部リンクを介してスイッチ・ルータ２００に結合された上流ルータおよび下流のルータとルーティング・テーブル更新情報を交換することにより、プライマリ・サーバ・モジュール２２０ａによって動的に更新される。
【００２６】
各ルータ・モジュール２３０は、インターネット・ルータのような遠隔ルータにおいて終端する外部リンクに結合される。ルータ・モジュール２３０はまた相互に結合され、ルータ内に、ファブリックと呼ばれる内部スイッチ・トポロジーを生成する。ただし、クロスバー・スイッチおよびバスのような別のルータ構成に基づく構成を適用して、ルータ・モジュール２３０を相互接続できる。一実施形態によれば、ファブリックは、ルータ・モジュール２３０を相互接続することにより、内部デッドロックおよびツリー飽和を防止し、これにより、複数パスが任意の送信元から任意の宛先にファブリックを通して提供される。一実施形態によれば、各ルータ・モジュール２３０は、ファブリック内で内部的にパケットをルーティングし、ファブリックから遠隔ルータに外部的にルーティングする、集積化スイッチおよびライン・カードを有する。
【００２７】
このようなファブリックは、多次元トロイダル・ファブリックおよびガンマ・グラフ・ファブリックを含む。多次元トロイダル・ファブリックは、2001年9月4日に特許された米国特許第6,285,679号の発明の名称「イベント駆動型ルーティングの方法および装置」に詳細に記載されている。この特許の全データ内容は参照により本明細書に引用したものとする。
【００２８】
プライマリおよびバックアップ・サーバ・モジュール２２０ａ，２２０ｂは、それぞれ異なるルータ・モジュール２３０を通してファブリックにアクセスする。このルータ・モジュールはサーバ付属モジュールすなわちＳＡＭと呼ばれる。ＳＡＭを介するファブリックへのアクセスでは、アクティブ・サーバ・モジュールがルーティング・テーブル更新情報を外部リンク上で送受信する。
【００２９】
プライマリ・サーバ・モジュール２２０ａはバックアップ・サーバ・モジュール２２０ｂに結合されて、データおよび制御メッセージを転送する情報伝達ルートを提供する。一実施形態によれば、プライマリ・サーバ・モジュール２２０ａは、クロスオーバー・ケーブルを介してバックアップ・サーバ・モジュール２２０ｂに直接的に結合されるだけでなく、ベイ・コントローラ・モジュール２５０のEthernetリピータを介してバックアップ・サーバ・モジュール２２０ｂに間接的に結合される。
【００３０】
図３Ａは、一実施形態による、通常動作時におけるルータに関するフォールト・トレラント・データ通信を示す上位レベルの図である。通常動作中、プライマリ・サーバ・モジュール２２０ａ内で実行するプライマリ・サーバ・プロセス３１０は、遠隔ルータ３３０とのネットワーク・コネクションを開始または受け入れて、ルーティング・テーブル更新情報を交換する。ルーティング・テーブル更新情報がルーティング・テーブル３１５ａの状態を変化させると（すなわち、テーブル・エントリを追加、削除、または変更すると）、プライマリ・サーバ・プロセス３１０はルーティング・テーブル変更を、バックアップ・サーバ・モジュール２２０ｂ内の格納装置３５０に格納するために伝送する。これにより、プライマリ・サーバ・プロセス３１０が故障すると、通常動作中は休止状態にあるバックアップ・サーバ・プロセス３７０が、ルーティング・テーブル３１５ａに対応する格納ルーティング状態３５５ａからのルーティング・テーブルと共に生成される。
【００３１】
ルーティング・テーブル状態変化を複写することに加えて、プライマリ・サーバ・プロセス３１０はまた、遠隔ルータ３３０との間で確立されたネットワーク・コネクションのコネクション状態３１５ｂも複写する。これにより、プライマリ・サーバ・プロセス３１０が、（i）ルーティング・テーブル更新情報の交換中、または（ii）ルーティング・テーブル更新情報の交換後であるが、格納装置３５０に引き渡される前のいずれかの時点で故障した場合、ネットワーク・コネクションのローカル・サイドは、格納装置３５０に格納されたコネクション状態３５５ｂから再生成される。これにより、バックアップ・サーバ・プロセス３７０は、プライマリ・サーバ・プロセス３１０が故障した時点から、以前に確立されたネットワーク・コネクション上で現在進行中の交換を続行できる。
【００３２】
図３Ｂは、一実施形態による、バックアップ・モード時におけるルータに関するフォールト・トレラント・データ通信を示す上位レベルの図である。プライマリ・サーバ・プロセス３１０が故障すると、ルーティング動作の制御は、バックアップ・サーバ・モジュール２２０ｂ上にインスタンスが生成されたバックアップ・サーバ・プロセス３７０に移される。バックアップ・サーバ・プロセス３７０は、格納装置３５０から取り出される格納ルーティング状態３５５ａからルーティング・テーブル３７５ａを生成する。さらに、プライマリ・サーバ・プロセス３１０によって以前に確立されたネットワークのローカル・サイドのコネクションが、格納装置３５０の格納されたコネクション状態３５５ｂから再生成されて、バックアップ・サーバ・プロセス３７０が、遠隔ルータ３３０と現在進行中のルーティング・テーブル更新情報の交換を続行可能にする。このような実施形態により、プライマリ・サーバ・プロセス３１０からバックアップ・サーバ・プロセス３７０へのフェイル・オーバー移行、つまりプライマリ・サーバ・プロセス３１０からバックアップ・サーバ・プロセス３７０への切換えによる障害迂回の間にルーティング・テーブル更新情報が失われるのを防止する。
【００３３】
インターネット・ルータに関しては、ＢＧＰがＴＣＰ（伝送制御プロトコル）上でルーティング・テーブル更新情報を交換するＩＰルーティング・プロトコルである。ＴＣＰはコネクション指向トランスポート層プロトコルであり、このプロトコルついては、「RFC 793-伝送制御プロトコル」、Defence Advanced Research Projects Agency，1981に詳細に記載されている。この資料の全文は、参照により本明細書に引用したものとする。ＴＣＰはＴＣＰセグメントのアプリケーション間の受け渡しを保証しない。代わりに、ＴＣＰは、ＴＣＰセグメントの受信に応答して、一般にＡＣＫと呼ばれる確認応答を伝送する。ＴＣＰ確認応答は、データがエンド・ユーザ・プロセスに配送されたことを保証せずに、受信するＴＣＰプロセスがこのようにデータをエンド・ユーザ・プロセスに配送する責任を負うことのみを保証する。したがって、標準ＴＣＰでは、ＴＣＰ確認応答が受信されても、ルーティング・テーブル更新が実行されて、バックアップされたことは保証しない。
【００３４】
一実施形態によれば、ＴＣＰプロトコルを変更してアプリケーション間のデータ配送を保証するフォールト・トレラント・データ通信を実現する。これらの変更はＴＣＰセグメントのフォーマットの変更を必要としない。したがって、このような実施形態は、標準ＴＣＰを実行する既存のルータとの互換性を有し、相互運用性のために既存のルータを変更する必要を回避する。
【００３５】
図４は、一実施形態による、遠隔ピアとのフォールト・トレラントＴＣＰコネクションを実行するソフトウェア構成要素を示す図である。フォールト・トレラントＴＣＰ（ＦＴＴＣＰ）は、プライマリおよびバックアップ・サーバ・モジュール２２０ａ，２２０ｂ内で、（i）ＴＣＰ互換のＦＴＴＣＰプロトコル・ドライバ４５０ａ，４５０ｂ、（ii）ＦＴＴＣＰソケット層インタフェース４２０ａ，４２０ｂ、（iii）ＦＴＴＣＰタスク４３０、および（iv）格納プロセス４９０と共に実装される。またＴＣＰプロトコル・ドライバ４６０ａ，４６０ｂおよびＴＣＰソケット層インタフェース４４０ａ，４４０ｂを用いて、格納プロセス４９０との間で転送できる。アプリケーション・プロセス４１０ａ，４１０ｂは、ＦＴＴＣＰとのインタフェースを有し、ルーティング・テーブル更新情報を上流および下流のルータと確実に交換できる。ＩＰプロトコル・ドライバ４７０ａ，４７０ｂおよびネットワーク・インタフェース・ドライバ４８０ａ，４８０ｂは、上位のトランスポート層およびアプリケーション層をサポートする。
【００３６】
一実施形態によれば、ＦＴＴＣＰプロトコル・ドライバ４５０ａ，４５０ｂはＴＣＰの変更版であり、図５Ａおよび５Ｂに示すとおり、遠隔ＴＣＰピアとのネットワーク・コネクション上でデータを読み書きする内部セマンティックス（semantics）、つまりデータ読出しおよびデータ書込みの動作を変更することにより、フォールト・トレラントを提供する。プライマリ／バックアップ・サーバ・プロセス４１０ａ，４１０ｂなどのアプリケーション・プロセスは、ＦＴＴＣＰについて変更されたソケット層インタフェース４２０ａ，４２０ｂを通して、ＦＴＴＣＰプロトコル・ドライバ４５０ａ，４５０ｂからのネットワーク・サービス（例えば、読出しおよび書込みサービス）を要求する。一実施形態によれば、ＦＴＴＣＰソケット層インタフェース４２０ａ，４２０ｂは、標準ＴＣＰプロトコル・ドライバ４６０ａ，４６０ｂに対するＴＣＰソケット層インタフェース４４０ａ，４４０ｂと類似のソケット・システム・コールのＡＰＩ（アプリケーション・プログラム・インタフェース）を提供する。ＦＴＴＣＰソケット４２２はトランスポート層コネクションのエンドポイントに相当し、カーネルからのネットワーク・サービスを要求するためにアプリケーション・プロセスによって使用されるファイル・ハンドルの特別な形式である。ＦＴＴＣＰソケット４２２は、転送中のＴＣＰセグメントの一時格納のための受信バッファ４２３および送信バッファ４２４に関連付けられている。
【００３７】
ＦＴＣＣＰタスク４３０は、ＴＣＰ／ＩＰ上で格納プロセス４９０と通信し、ＦＴＴＣＰプロトコル・ドライバ４５０ａからＦＴＴＣＰコネクションのコネクション状態を伝送するカーネル・プロセスであってもよい。格納プロセス４９０はバックアップ・サーバ・モジュール２２０ｂ上で実行するユーザ・モード・プロセスであってもよい。格納プロセス４９０は、確立したＦＴＴＣＰコネクションのコネクション状態のみならずルーティング・テーブルの現在状態を維持するために、ＡＰＩインタフェースを提供する。格納プロセス４９０はまた、格納された状態からルーティング・テーブルおよびネットワーク・コネクションの状態を再生成するために、ＡＰＩインタフェースを提供する。一実施形態によれば、格納プロセス４９０は、状態を格納するために、連想配列またはハッシュ・テーブルを実現する。
【００３８】
ＦＴＴＣＰの実施形態は、サーバ故障時にＦＴＴＣＰコネクションの両端の同期化を保証するために、ＴＣＰの読出しおよび書込みセマンティックスの修正版を実装する。例えば、一般にＴＣＰは受信するとＴＣＰセグメントの確認応答を送信する。しかし、ＡＣＫの伝送後、データを読取って処理する（例えば、ルーティング・テーブル更新）前にアプリケーション・プロセスが故障することがある。したがって、バックアップ・アプリケーション・プロセスのインスタンスが生成される際に、格納装置から再生成されたルーティング・テーブルはルーティング・テーブル更新情報を含まないことがある。更新情報を含むＴＣＰセグメントが既に確認応答されている場合、再伝送も見込めない。
【００３９】
図５Ａは、一実施形態による、フォールト・トレラントＴＣＰコネクション上での読出しプロセスを示す状態図である。一般に、ＦＴＴＣＰは、明示的に実行を指示されるまで、ＴＣＰセグメントの受取りを確認応答しない。一実施形態によれば、アプリケーション・プロセスは、データが処理されて格納装置に確実に格納された後に、ＦＴＴＣＰに指示して、ＡＣＫを伝送する。データを格納装置に確実に格納する前にアプリケーション・プロセスが故障した場合、確認応答は伝送されない。したがって、遠隔ＴＣＰピアはデータの再伝送を続行する。これにより、再伝送されるデータを処理して確認応答するように、バックアップ・アプリケーション・プロセスに移行される。ＦＴＴＣＰはさまざまなアプリケーションに適用できるが、図５Ａは、ルータ環境におけるフォールト・トレラントＴＣＰコネクション上における読出しプロセスを示す。
【００４０】
ステップ５１０において、ＦＴＴＣＰコネクション上で伝送されるＴＣＰ／ＩＰパケットはＩＰプロトコル・ドライバ４７０ａによって受け取られる。ルーティング・テーブル更新情報の少なくとも一部を含むＴＣＰセグメントは、パケットから抽出されて変更されたtcp_input（ＴＣＰ入力）システム・コールによりＦＴＴＣＰプロトコル・ドライバ４５０ａに送出される。
【００４１】
ステップ５１５において、ＦＴＴＣＰプロトコル・ドライバ４５０ａは、ＦＴＴＣＰソケット４２２のソケット受信バッファ４２３にＴＣＰセグメントからのデータを追加する。このＦＴＴＣＰソケットは、ＴＣＰセグメント・ヘッダ内で特定される宛先ＴＣＰポートに関連付けされている。ＢＧＰについては、公知のＴＣＰポート識別子は179である。ＴＣＰに反して、ＦＴＴＣＰプロトコル・ドライバ４５０ａの変更されたtcp_inputシステム・コールは、この段階において、ＴＣＰパケットの受取りの確認応答を行わず、またコネクション状態の更新（例えば、受信の次のシーケンス番号をインクリメントする）も行わない。
【００４２】
ステップ５２０において、アプリケーション・プロセス４１０ａ（例えば、NextHop Technologies（商標）からのGateD（商標）プライマリ・サーバ・プロセス）は、read（読出し）システム・コールを呼び出して、ソケット受信バッファ４２３からデータを読み出す。ＴＣＰに反して、データは、読出し後直ぐには、ソケット受信バッファ４２３から「捨てられない」（すなわち、削除されない）。ソケット受信バッファ４２３内のデータを捨てるには、プライマリ・サーバ・プロセスは、ソケット層４２０ａのＦＴＴＣＰソケット４２２に明確な要求を発行する必要がある。
【００４３】
ステップ５２５では、プライマリ・サーバ・プロセス４１０ａは、ルーティング・テーブル更新情報をＢＧＰルーティング・テーブルに組み込み、処理されたルーティング更新情報を格納装置４９０に格納することによって、ソケット受信バッファ４２３から読み出されたデータを処理する。一実施形態によれば、プライマリ・サーバ・プロセスは処理されたルーティング・テーブル更新情報をＴＣＰ／ＩＰ層４６０ａ，４７０ｂを通して、格納装置４９０に伝送する。
【００４４】
ステップ５３０において、格納プロセス４９０から返送される確認応答メッセージが、処理されたルーティング・テーブル更新情報の格納を確認する。
【００４５】
ステップ５３５において、データを消費すると、プライマリ・サーバ・プロセス４１０ａはソケット４２２にソケット受信バッファ４２３からデータを捨てるように指示する。一実施形態によれば、プライマリ・サーバ・プロセス４１０ａはソケット４２２に、新しいソケット・レベル・オプションであるSO_FTDROPを伴う変更されたsetsockopt（）システム・コールを呼び出して、データを捨てること、および捨てるバイト数を指示する。
【００４６】
ステップ５４０では、修正されたsetsockopt()システム・コールが、SO_FTDROPオプションを処理し、メッセージをＦＴＴＣＰタスク４３０に関連付けられた待ち行列に置く。SO_FTDROPメッセージは、タスク４３０に格納装置４９０内のＦＴＴＣＰコネクションのコネクション状態を更新することを要求する。一実施形態によれば、コネクション状態には、ＦＴＴＣＰコネクションの現在の受信状態を表す、受信の次のシーケンス番号を含む。
【００４７】
ステップ５４５では、setsockopt()システム・コールがプライマリ・サーバ・プロセス４１０ａに戻り、さらなるアプリケーション・レベル・プロセスを可能にする。
【００４８】
ステップ５５０では、ＦＴＴＣＰタスク４３０は、ＴＣＰ／ＩＰコネクションを介して更新されたコネクション状態を格納装置４９０に格納用に送信し、その後、更新情報が格納装置４９０に確実に渡されたことを示す確認応答を待つ。
【００４９】
ステップ５５５では、確認応答が格納プロセス４９０から受信される。
【００５０】
ステップ５６０において、確実に確認応答を受信すると、ＦＴＴＣＰタスク４３０は、ソケット受信バッファ４２３から読み込まれたデータを削除することを指示する。一実施形態によれば、データは、ソケット受信バッファ４２３のアドレスおよび捨てるバイト数を指定して、標準sbdrop()システム・コールにより受信バッファから削除される。
【００５１】
ステップ５６５では、ＦＴＴＣＰタスク４３０がＦＴＴＣＰプロトコル・ドライバ４５０ａに、ＦＴＴＣＰコネクションのコネクション状態（すなわち、ＦＴＴＣＰコネクションについての受信の次のシーケンス番号）を更新するように指示する。一実施形態によれば、ＦＴＴＣＰを新しいプロトコル・レベルであると認定し、新しいオプションTCP_FT_DROPを指定する修正されたsetsockopt()システム・コールを呼び出すことにより、ＦＴＴＣＰタスク４３０は受信の次のシーケンス番号の更新を指示する。このオプションはＦＴＴＣＰプロトコル・ドライバ４５０ａにまで及び、このドライバ４５０ａでtcp_ctloutput()システム・コールによってハンドルとされ、ＦＴＴＣＰコネクションについての受信の次のシーケンス番号を更新する。
【００５２】
ステップ５７０において、受信の次のシーケンス番号を更新すると、ＦＴＴＣＰプロトコル・ドライバ４５０ａはＴＣＰセグメントをＦＴＴＣＰコネクションの遠隔ピアに送信して、以前に受信したＴＣＰセグメントを確認応答し、かつ受信が期待される次のＴＣＰセグメントのシーケンス番号を特定する。
【００５３】
ＴＣＰセグメントを確認応答する前に、受信の次のシーケンス番号を格納装置に渡すことにより、ローカル受信ウィンドウは、常にピアの送信ウィンドウに等しいかまたは先行している。故障の場合には、格納装置はＴＣＰピアと同一情報またはクライアントに比べてより最新の情報のいずれかを有する。より最新の情報は、ピアの送信ウィンドウに先行する受信ウィンドウによってＴＣＰに反映される。
【００５４】
図５Ｂは、一実施形態による、フォールト・トレラントＴＣＰコネクション上での書込みプロセスを示す状態図である。一般に、ＦＴＴＣＰは「原子的な」書込み、つまり完全に書込まれるかまたは書込みを放棄されるかであって、途中で中断されることがない書込みをサポートする。したがって、アプリケーション・プロセスがＦＴＴＣＰコネクション上でデータを書き込むためにシステム・コールを発行する際、ＦＴＴＣＰは伝送用データ（すなわち、送信データ）の全体コピーを格納装置に渡すことを試みる。送信データ全体を格納するのに十分なスペースがない場合、write（書込み）システム・コールはエラーを返送する。十分なスペースがある場合、データは格納装置に渡され、ＦＴＴＣＰは、標準ＴＣＰプロセスに従ってデータを伝送する。送信データの伝送中にアプリケーション・プロセスが故障した場合、送信データのコピーは格納装置で利用でき、バックアップ・アプリケーション・プロセスによって再伝送される。バックアップ・アプリケーション・プロセスへの移行の際における送信データ全体の再伝送を避けるために、更新されたＦＴＴＣＰコネクションの対応するコネクション状態を用いて、遠隔ピアにより確認される送信データの任意の部分が格納装置から削除される。図５Ｂは、ルータ環境におけるＦＴＴＣＰコネクション上での書込みプロセスを示す。
【００５５】
ステップ６１０では、プライマリ・サーバ・プロセス４１０ａはwrite（書込み）システム・コールを呼び出して、ＦＴＴＣＰコネクション上での送信データの伝送を開始する。送信データをＦＴＴＣＰソケット４２２のソケット送信バッファ４２４に書き込む前に、書込みシステム・コールは、ソケット送信バッファ４２４に全データを保持するのに十分なスペースが存在するか否かを判断する。一実施形態によれば、ソケット送信バッファ４２４スペースは、送信データ・サイズと送信バッファ４２４の待ち行列内に待機しているデータの現在のサイズとの合計に等しくなるように、再定義される。十分なスペースが存在しない場合、wirte（書込み）システム・コールはエラーを返送する。十分なスペースが存在する場合、書込み処理はステップ６１５に進行する。
【００５６】
ステップ６１５において、メッセージはＦＴＴＣＰタスク４３０に提示され、送信データを格納装置４９０に格納することを要求し、格納装置のソケット送信バッファ４２４の状態を更新する。一実施形態によれば、ソケット送信バッファ４２４の状態は、送信の次のシーケンス番号および送信の確認されていないシーケンス番号を含む。
【００５７】
ステップ６２０において、write（書込み）システム・コールがプライマリ・サーバ・プロセスに戻り、さらなるアプリケーション・レベル・プロセスを可能にする。
【００５８】
ステップ６２５では、ＦＴＴＣＰタスク４３０は、ＴＣＰ／ＩＰコネクションを介してデータおよびソケット送信バッファ４２４の状態を格納装置４９０に送信し、その後、更新情報が格納装置４９０に確実に格納されたことを示す確認応答を待つ。
【００５９】
ステップ６３０では、格納装置４９０がＦＴＴＣＰタスク４３０に確認応答を送信する。
【００６０】
ステップ６３５において、確実に確認応答を受信すると、ＦＴＴＣＰタスク４３０はＦＴＴＣＰプロトコル・ドライバ４５０ａに対してＦＴＴＣＰコネクション上でのデータ伝送を開始するように要求する。一実施形態によれば、システム・コールはtcp_usrreq(PRU_SEND)である。
【００６１】
ステップ６４０において、伝送要求に応答して、ＦＴＴＣＰプロトコル・ドライバ４５０ａは書込みバッファからデータを転送する。この書込みバッファは、write（書込み）システム・コールでソケット送信バッファ４２４に渡される。
【００６２】
ステップ６４５では、ＴＣＰセグメントの生成およびそのセグメントのＦＴＴＣＰコネクション上での伝送のプロセスが、tcp_outputシステム・コールにより開始される。詳細には、ＦＴＴＣＰプロトコル・ドライバ４５０ａはメッセージのデータ内容をデータ・フラグメントに分割し、このフラグメントを複数のＴＣＰ／ＩＰデータ・パケットのペイロードに追加する。伝送される各ＴＣＰセグメントは、ＴＣＰプロトコルによって定義される、送信シーケンス番号を含む。
【００６３】
ステップ６５０では、受信端が、次に受信を期待される次のシーケンス番号を特定するＴＣＰセグメントの受取を確認応答する。
【００６４】
ステップ６５５において、ＦＴＴＣＰプロトコル・ドライバ４５０ａは、ＡＣＫを含むＴＣＰセグメントをソケット層４２０ａのＦＴＴＣＰソケット４２２のソケット受信バッファ４２３に送出する。
【００６５】
ステップ６６０では、ＦＴＴＣＰソケット４２２が、送信の次のシーケンス番号および送信の確認されていないシーケンス番号を更新し、格納装置４９０に格納された送信データの確認応答された部分を削除することによって、格納装置４９０のソケット送信バッファ４２４の状態を更新するように、ＦＴＴＣＰタスク４３０に指示する。
【００６６】
ステップ６６５では、ＦＴＴＣＰタスク４３０は、ソケット送信バッファ４２４の更新された状態を伝送し、格納装置４９０からの確認応答メッセージを待つ。
【００６７】
ステップ６７０では、格納装置４９０は、格納要求が確実に行われたかを示す確認応答メッセージを送信する。
【００６８】
ステップ６４５〜６７０は、送信データ全体が伝送されてＦＴＴＣＰコネクションの受信端によって確認応答されるまで、繰り返される。
【００６９】
プライマリ・サーバ・プロセス４１０ａが故障した場合、格納装置４９０は、以前に確認応答されたいかなるデータよりも少なく再送信される、メッセージの全体コピーを保持する。受信端からＴＣＰＡＣＫを受け取る前に、プライマリ・サーバ・プロセス４１０ａが故障した場合でも、以前に受信して確認応答したＢＧＰデータの再伝送は受け入れられる。詳細には、ＢＧＰプロトコルは、以前に受信していないパケットデータ内容を受け取るが、既に受信したパケットを廃棄する。
【００７０】
図６は、一実施形態による、プライマリ・アプリケーション・プロセスからバックアップ・アプリケーション・プロセスまでのデータ通信のバックアップ・モード中における、ＦＴＴＣＰコネクションを再確立するプロセスを示すフローチャートである。バックアップ・サーバ・モジュール２２０ｂ内で起動されると、GateD（商標）バックアップ・サーバ・プロセスのようなバックアップ・サーバ・プロセス４１０ｂは、格納プロセス４９０と通信して、プライマリ・サーバ・プロセス４１０ａが故障した時点で進行中であった、全ＦＴＴＣＰコネクションのローカル・サイドを再確立する。コネクションが再確立されると、バックアップ・サーバ・プロセス４１０ｂはデータ交換を続行して、データ損失を避ける。
【００７１】
ＦＴＴＣＰコネクションの再生成は、ＴＣＰ制御ブロック（ＴＣＰＣＢ）およびインターネット制御ブロック（ＩＮＰＣＢ）が、破壊以前と同一状態を維持する必要があることを意味する。これらデータ構造体を生成するのに直接関係のある全情報は、格納装置内のコネクション情報に格納される。カーネルはコネクション構造体を取り込み、tcpcbおよびinpcbを再配置する。ソケット送信バッファ４２４は、格納装置の送信バッファ４２４を新しく生成されたソケットおよびバッファに追加することによって、容易に再生成される。図６は、ルータ環境におけるＦＴＴＣＰコネクションの再確立を示す。
【００７２】
ステップ７１０において、GateD（商標）バックアップ・プロセス４１０ｂは、格納プロセス４９０に対し、ＦＴＴＣＰコネクションへのハンドル（例えば、ソケット識別子）要求を発行する。一実施形態によれば、バックアップ・サーバ・プロセス４１０ｂは、ルーティング情報を交換するルータを特定する外部アドレス／ポート対のリストで予め設定される。したがって、バックアップ・サーバ・プロセス４１０ｂは、要求基準として外部アドレス／ポート対を特定するリストを通してＦＴＴＣＰコネクション要求を繰返す。
【００７３】
ステップ７２０では、格納プロセス４９０が、要求基準に合致するＦＴＴＣＰコネクション・データ構造体に対して、ハッシュ・テーブルまたは連想配列などの内部に格納したデータを検索する。ステップ７３０において、合致が見出された場合、プロセスはステップ７４０に進行する。一致が見出されない場合、格納プロセス４９０はエラーを返し、バックアップ・サーバ・プロセス４１０ｂは、さらに別のＦＴＴＣＰコネクションに対して要求を出すことができるようになる。
【００７４】
ステップ７４０では、格納プロセス４９０が、ソケット層４２０ｂを通してシステム・コールを発行することによってＦＴＴＣＰソケットを生成する。例えば、システム・コールは以下のように表すことができる。
【００７５】
so＝socket（AF_INNET，SOCK_STREAM，IPPROTO_FTTCP）
ここで、soは返されるＦＴＴＣＰソケット識別子である。
【００７６】
ステップ７５０では、ＦＴＴＣＰソケットに対する要求に応答して、ＴＣＰおよびＩＰ制御ブロック（すなわち、tcpcbおよびinpcb）がソケットに対して生成される。
【００７７】
ステップ７６０において、格納装置４９０はＦＴＴＣＰコネクション用の全ソケット送信バッファ４２４データを取得して、このデータを、ソケット層４２０ｂではＦＴＴＣＰソケットのソケット送信バッファ４２４に追加し、このソケット層４２０ｂを介してソケットに送出する。例えば、システム・コールは以下のように表される。
【００７８】
setsockopt（so，SOL_SOCKET，SO_FTCONNDATA，buffer，size）
ここで、ソケット送信バッファ・データはbuffer（バッファ）に格納される。
【００７９】
ステップ７７０では、格納装置４９０はＦＴＴＣＰコネクションに対すルコネクション状態を取得して、このデータをソケットに送出する。例えば、システム・コールは以下のように表される。
【００８０】
setsockopt(so,SOL_SOCKET,SO_FTCONNSTATE,&connd,sizeof（rep_connection_t））
ここでconndはＦＴＴＣＰコネクション状態データ構造体（すなわち、構造体rep_connection_t）を保持する。一実施形態によれば、ＦＴＴＣＰコネクション状態データ構造体は以下の要素を格納できる。
【００８１】
（i）コネクション・タイプ（コネクションされているか、すなわち受入れられているか）
（ii）インデックス用に、格納装置によって提供される固有のＦＴＴＣＰコネクション識別子
（iii）ＦＴＴＣＰソケットを表すコネクションの組（connection tuple）（例えば、ローカルおよび外部アドレス／ポート対）
（iv）ＴＣＰプロトコルによって定義されるＴＣＰ状態
（v）受信の次のシーケンス番号および送信の次のシーケンス番号
（vi）送信の確認されていないシーケンス番号
（vii）送信の最大ウインドウ・シーケンス番号
（viii）最初の送信および受信シーケンス番号
【００８２】
ステップ７８０では、ＴＣＰおよびＩＰ制御ブロックがＦＴＴＣＰコネクション状態に組み入れられ、その後、ＩＰ制御ブロックをinpcbハッシュ・テーブルに加えて、ローカル・サイドにおけるコネクションを可能にする。
【００８３】
ステップ７９０では、格納装置はハンドル（すなわち、ソケット識別子）をバックアップ・サーバ・プロセス４１０ｂに戻し、ＦＴＴＣＰソケット・コネクション上でのルーティング・テーブル更新情報の交換を続行する。
【００８４】
ステップ８００において、バックアップ・サーバ・プロセス４１０ｂは、予め設定されたＦＴＴＣＰコネクションの組のリストを通して繰り返され、リストの最後までさらに別の要求を送出する。
【００８５】
本発明を好ましい実施形態により図示し、説明してきたが、当業者には、添付の特許請求の範囲に含まれる本発明の範囲から逸脱することなく、形態または細部にさまざまな変更を加えるのが可能であることは理解されるであろう。
【図面の簡単な説明】
【００８６】
【図１】リンクを介してコンピュータ・ネットワークを相互接続するルータを示す図である。
【図２】一実施形態によるフォールト・トレラント・データ通信を実行するスイッチ・ルータのハードウェア構成要素を示す図である。
【図３Ａ】一実施形態による、通常動作時におけるルータに関するフォールト・トレラント・データ通信を示す上位レベルの図である。
【図３Ｂ】一実施形態による、バックアップ・モード時におけるルータに関するフォールト・トレラント・データ通信を示す上位レベルの図である。
【図４Ａ】一実施形態による、遠隔ピアとのフォールト・トレラントＴＣＰコネクションを実行するソフトウェア・コンポーネントを示す図である。
【図４Ｂ】一実施形態による、遠隔ピアとのフォールト・トレラントＴＣＰコネクションを実行するソフトウェア・コンポーネントを示す図である。
【図５Ａ】一実施形態による、フォールト・トレラントＴＣＰコネクション上での読出しプロセスを示す状態図である。
【図５Ｂ】一実施形態による、フォールト・トレラントＴＣＰコネクション上での書込みプロセスを示す状態図である。
【図６】一実施形態による、プライマリ・アプリケーション・プロセスからバックアップ・アプリケーション・プロセスまでのデータ通信のバックアップ・モード時におけるＦＴＴＣＰコネクションを再確立するプロセスを示すフローチャートである。
【符号の説明】
【００８７】
３５０  データ格納装置
３５５ｂ  通信状態
【図１】
2005516478.tif 000003
【図２】
2005516478.tif 000004
【図３Ａ】
2005516478.tif 000005
【図３Ｂ】
2005516478.tif 000006
【図４Ａ】
2005516478.tif 000007
【図４Ｂ】
2005516478.tif 000008
【図５Ａ】
2005516478.tif 000009
【図５Ｂ】
2005516478.tif 000010
【図６】
2005516478.tif 000011
【国際調査報告】
2005516478.tif 000012
2005516478.tif 000013
2005516478.tif 000014