(57)【要約】高い可用性、迅速な故障回復、帯域外条件のシグナリング、及び／又はネットワーク環境における他のサービス品質保証及びセキュリティをサポートするように設計されたシステム、方法、及びコンピュータプログラム製品。一態様において、本発明の方法は、処理システムに、デュアルカーネル又はマルチカーネルソフトウェアオペレーティングシステムを提供するステップを含む。オペレーティングシステムは、管理オペレーティングシステムと、ユーザアプリケーションにネットワーク機能を提供する二次オペレーティングシステムとを含む。方法は、更に、管理オペレーティングシステムに、ネットワーク制御ソフトウェア（ＮＣＳ）を提供するステップを含む。ＮＣＳは、二次オペレーティングシステム内のネットワーク動作をトランスペアレントに監視及び制御するように構成される。
2005536803.tif 000002
【特許請求の範囲】
【請求項１】
管理オペレーティングシステムと、ネットワーククライアントにネットワークサービスを提供する二次オペレーティングシステムと、を含むように処理デバイスを構成するステップと、
前記管理オペレーティングシステム内に、前記二次オペレーティングシステム内のネットワーク動作を監視及び／又は制御するように構成されたネットワーク制御ソフトウェアを設けるステップと、
を備える方法。
【請求項２】
前記ネットワーク制御ソフトウェアは、ネットワークデバイスドライバと前記二次オペレーティングシステムのネットワーククライアントとの間に挿入される、請求項１記載の方法。
【請求項３】
前記ネットワーク制御ソフトウェアは、高速フェイルオーバを提供するように構成される、請求項１記載の方法。
【請求項４】
前記ネットワーク制御ソフトウェアは、ネットワークに基づく攻撃からの保護を提供するように構成される、請求項１記載の方法。
【請求項５】
前記ネットワーク制御ソフトウェアは、前記二次オペレーティングシステムの通信チャネルを監視するように構成される、請求項１記載の方法。
【請求項６】
前記ネットワーク制御ソフトウェアは、前記二次オペレーティングシステムの既存のネットワークプロトコルスタック及びアプリケーションを強化する機能をトランスペアレントに追加するように構成される、請求項１記載の方法。
【請求項７】
前記管理オペレーティングシステムは、前記二次オペレーティングシステムに優先して動作可能である、請求項１記載の方法。
【請求項８】
管理オペレーティングシステムと、
ネットワーククライアントにネットワークサービスを提供する二次オペレーティングシステムと、
前記管理オペレーティングシステムのアプリケーションとして実行されるネットワーク制御ソフトウェアと、を備える処理システムであって、
前記ネットワーク制御ソフトウェアは、前記二次オペレーティングシステム内のネットワーク動作を監視及び／又は制御するように構成される処理システム。
【請求項９】
前記二次オペレーティングシステムは、ネットワークドライバをエミュレートする仮想ネットワークドライバを備える、請求項８記載の処理システム。
【請求項１０】
更に、ネットワークデバイスドライバを備え、前記ネットワーク制御ソフトウェアは、前記ネットワーク制御ソフトウェアが前記仮想ネットワークドライバと前記ネットワークデバイスドライバとの間でデータパケットを受け渡すように、機能上、前記ネットワークデバイスドライバと前記仮想ネットワークドライバとの間に挿入される、請求項９記載の処理システム。
【請求項１１】
前記ネットワーク制御ソフトウェアは、前記ネットワークデバイスドライバがネットワークから受信したパケットを検査する動作が可能であり、前記ネットワーク制御ソフトウェアは、特定の条件が満たされた場合のみ、前記ネットワークデバイスドライバによって受信されたパケットを前記仮想ネットワークドライバに渡す、請求項１０記載の処理システム。
【請求項１２】
前記ネットワーク制御ソフトウェアは、前記ネットワークデバイスドライバによって受信されたパケットがクリティカルポートに対してアドレス指定されているかを判断する、請求項１１記載の処理システム。
【請求項１３】
前記ネットワーク制御ソフトウェアは、高速フェイルオーバを提供するように構成される、請求項８記載の処理システム。
【請求項１４】
前記ネットワーク制御ソフトウェアは、ネットワークに基づく攻撃からの保護を提供するように構成される、請求項８記載の処理システム。
【請求項１５】
前記ネットワーク制御ソフトウェアは、クリティカルサービスでのリソースの競合を低減するサービス品質システムを提供するように構成される、請求項８記載の処理システム。
【請求項１６】
前記二次オペレーティングシステムは、前記管理オペレーティングシステムのアプリケーションとして実行される、請求項８記載の処理システム。
【請求項１７】
処理システムを通信媒体に接続するネットワークデバイスと、管理オペレーティングシステムと、二次オペレーティングシステムとを備える処理システムにおいて、
前記ネットワークデバイスからデータパケットを受信するステップと、
前記データパケットを受信した後、イベントハンドラを呼び出すステップと、を備える方法であって、
前記イベントハンドラは、前記管理オペレーティングシステムのタスクであり、前記イベントハンドラは、
前記データパケットの少なくとも一つのフィールドを検査するステップと、
前記データパケットを前記二次オペレーティングシステムのアプリケーションに渡すかどうかを判断するステップと、を備える方法を実行し、前記判断は、前記少なくとも一つのフィールドの内容に少なくとも部分的に基づいて行われる。
【請求項１８】
前記判断するステップは、前記データパケットがリマインダメッセージを含むかを判断するステップを備える、請求項１７記載の方法。
【請求項１９】
前記データパケットがリマインダメッセージを含む場合、前記イベントハンドラは、前記データパケットを生成した前記アプリケーションに対して所定のメッセージを送信し、前記非リアルタイムオペレーティングシステムの前記アプリケーションに前記データパケットを渡さない、請求項１８記載の方法。
【請求項２０】
前記判断するステップは、前記データパケットがＴＣＰパケットを含むかを判断するステップを備える、請求項１７記載の方法。
【請求項２１】
管理オペレーティングシステムと、
ネットワーククライアントにネットワークサービスを提供する二次オペレーティングシステムと、
前記管理オペレーティングシステムのアプリケーションとして実行されるネットワーク制御ソフトウェアと、
制御データベースと、を備える処理システムであって、
前記制御データベースは、前記ネットワーク制御ソフトウェアが任意の論理結合を定義することを可能にし、
前記ネットワーク制御ソフトウェアは、前記二次オペレーティングシステム内のネットワーク動作を監視及び／又は制御するように構成される処理システム。
【請求項２２】
前記制御データベースは、特定の処理デバイスがフェイルオーバグループのメンバであるかを、前記ネットワーク制御ソフトウェアが判断できるようにする情報を格納する、請求項２１記載の処理システム。
【請求項２３】
前記制御データベースは、特定のＴＣＰポートがクリティカルポートであるとして指定されているかを、前記ネットワーク制御ソフトウェアが判断できるようにする情報を格納する、請求項２１記載の処理システム。
【請求項２４】
前記ネットワーク制御ソフトウェアは、ネットワークからデータパケットを受信した時に呼び出されるイベントハンドラを備える、請求項２１記載の処理システム。
【請求項２５】
前記ネットワーク制御ソフトウェアは、一つ以上のスレッドを備える、請求項２１記載の処理システム。
【請求項２６】
前記二次オペレーティングシステムは、前記管理オペレーティングシステムのアプリケーションとして実行される、請求項２１記載の処理システム。
【請求項２７】
管理オペレーティングシステムと、
前記管理オペレーティングシステムのアプリケーションとして実行される二次オペレーティングシステムと、
前記二次オペレーティングシステム内のネットワーク動作を監視及び／又は制御し、前記管理オペレーティングシステムカーネルのアプリケーションとして動作する手段と、
を備える処理システム。
【請求項２８】
サービス拒否攻撃からの保護のためにコンピュータ読み取り可能な媒体上で実行されるコンピュータプログラムであって、
前記コンピュータプログラムは、二次オペレーティングシステムをアプリケーションとして実行するリアルタイム管理オペレーティングシステムのアプリケーションとして実行され、前記コンピュータプログラムは、
前記二次オペレーティングシステム内の全ＴＣＰ制御ブロックをスキャンするコンピュータコードセグメントと、
当該制御ブロックのそれぞれについて、以下の行為を行うコンピュータコードセグメント、即ち、前記制御ブロックに関連する前記ＴＣＰポートの状態がＳＹＮ＿ＲＥＣＥＩＶＥＤであることを、前記制御ブロックが示すかを判断し、前記ＴＣＰポートの状態がＳＹＮ＿ＲＥＣＥＩＶＥＤであると判断された場合、カウンタを増分するコンピュータコードセグメントと、
前記カウンタの前記値が第一の設定可能な閾値より大きいかを判断するコンピュータコードセグメントと、
前記カウンタが前記第一の設定可能な閾値より大きいと判断された場合に、サービス拒否攻撃警告フラグをＴＲＵＥに設定するコンピュータコードセグメントと、
を備えるコンピュータプログラム。
【請求項２９】
更に
前記カウンタの前記値が第二の設定可能な閾値より小さいかを判断するコンピュータコードセグメントと、
前記カウンタが前記第二の設定可能な閾値より小さいと判断された場合に、サービス拒否攻撃警告フラグをＦＡＬＳＥに設定するコンピュータコードセグメントと、を備える、請求項２８記載のコンピュータプログラム。
【請求項３０】
前記第二の設定可能な閾値は、前記第一の設定可能な閾値より小さい、請求項２９記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータネットワーク及びデータ処理システムに関し、特に、管理オペレーティングシステムからネットワーク接続を監視及び制御するシステム、方法、及びコンピュータプログラム製品に関する。
【背景技術】
【０００２】
演算において協調する、或いはＳＳ７等の通信システムを実現するネットワークコンピュータは、通信リンク、スイッチ、ハブ、及びネットワークホストにおけるハードウェア障害と、通信プロトコルを実装する又はこれを使用するソフトウェアにおけるソフトウェア障害との影響を受けやすい。ネットワークの速度が増加し、サービスプロバイダに対する品質の要求が高くなるに従って、制御帯域幅の割り当てと、帯域外のイベントに対する応答と、パフォーマンス及びセキュリティの監視とが極めて重要となる。しかしながら、殆どのネットワークプロトコルでは、この種の機能は、直接的又は効率的には可能にならない。例えば、広く使用されているネットワークプロトコルであるＴＣＰ／ＩＰは、タイミングの変動を許容するように設計されており、そのため、ネットワーク障害を迅速に復旧する方法を有していない。ネットワークスタックの動作において、タイミングイベント又は帯域外信号の処理は、スタック又はオペレーティングシステムのスケジューリングにより遅延され得る。その他の欠点及び不利点も存在する。
【０００３】
非特許文献１では、ＶＡＸアーキテクチャ用の仮想マシンモニタ（ＶＭＭ）セキュリティカーネルの開発について説明している。重点が置かれているのは、ＶＭＳ及びＵＬＴＲＩＸ−３２オペレーティングシステムの標準インタフェース及びアプリケーションを維持しながら、どのようにして、システムのハードウェア、マイクロコード、及びソフトウェアを、ＡＩレベルのセキュリティ要件の充足に向けるかである。ＶＡＸセキュリティカーネルは、単一のＶＡＸシステム上で、複数の並行仮想マシンをサポートし、機密データの分離及び制御された共有を提供する。しかしながら、コンピュータネットワーキングについては検討されていない。
【０００４】
その他の背景に関する参考文献には、Ｊａｃｏｂｓらに対して発行された特許文献１と、Ａｇａｒｗａｌらに対して発行された特許文献２と、Ｄｉｎｇｗａｌｌに対して発行された特許文献３と、非特許文献２とが含まれる。
【特許文献１】米国特許第６，３８５，６４３号明細書
【特許文献２】米国特許第５，９５８，０１０号明細書
【特許文献３】米国特許第５，７２１，９２２号明細書
【非特許文献１】Karger et al. "A Retrospective on the VAX VMM Security Kernel"
【非特許文献２】G. Bollella et al. "Support For Real-Time Computing Within General Purpose Operating System"＝＝＝著作権に関する通知＝＝＝  本特許出願の一部には、著作権保護の対象となる資料が含まれる。著作権保有者は、特許商標庁内で行われる限り、いかなる者による本特許文書又は本特許開示の複製に異議を唱えないが、その他の場合には全ての著作権を留保する。＝＝＝コンピュータプログラム一覧に関する付録＝＝＝  本発明の特徴を組み込んだコンパクトディスク上のコンピュータプログラム一覧に関する付録は、本特許出願が優先権を主張し、出典を明示することによりその開示内容全体を本願明細書の一部とする先行国内出願である米国特許出願第１０／２２６，１０６号により提出されている。このディスクに含まれるファイルは、次の通りである：sourcecode apps ipv4 plugins 1net_ft.c, 7895, Aug 15 14:36;sourcecode apps ipv4 plugins Makefile, 713, Aug 15 14:36; sourcecode apps ipv4 plugins 1net_icmp.c, 13785, Aug 15 14:36; sourcecode apps ipv4 plugins 1net_udp.c, 11309,Aug 15 14:36; sourcecode apps ipv4 plugins 1net_tabldr.c, 999, Aug 15 14:36; sourcecode apps ipv4 1net_ipv4.c, 15626, Aug 15 14:36; sourcecode apps ipv4 Makefile, 541, Aug 15 14:36; sourcecode apps gpos lnet_gpos.c, 17258, Aug 15 14:36; sourcecode apps gpos Makefile, 466, Aug 15 14:36; sourcecode apps arp Makefile, 457, Aug 15 14:36; sourcecode apps arp lnet_arp.c, 10964, Aug 15 14:36; sourcecode scripts defconfig, 426, Aug 15 14:36; sourcecode scripts ft, 0, Aug 15 14:36; sourcecode scripts functions.sh, 7148, Aug 15 14:36; sourcecode scripts config.in, 1336, 35 Aug 15 14:36; sourcecode scripts test_udp, 3300, Aug 15 14:36; sourcecode scripts test_ip, 3271, Aug 15 14:36; sourcecode scripts Menuconfig, 30024, Aug 15 14:36; sourcecode scripts Configure, 12372, Aug 15 14:36;sourcecode scripts mkdep.c, 12136, Aug 15 14:36; sourcecode scripts Makefile, 1597, Aug 15 14:36; sourcecode scripts unload_arp, 659, Aug 15 14:36; sourcecode scripts load ip, 3008, Aug 15 14:36; sourcecode scripts test arp, 2077, Aug 15 14:36; sourcecode scripts load_arp, 1153, Aug 15 14:36; sourcecode scripts test_lnet, 3239, Aug 15 14:36; sourcecode scripts inslnet, 3885, Aug 15 14:36; sourcecode scripts localinfo, 372, Aug 15 14:36; sourcecode scripts hosts, 651, Aug 15 14:36; sourcecode scripts rrnlnet, 1124, Aug 15 14:36; sourcecode scripts ping, 2153, Aug 15 14:36; sourcecode scripts addip, 3173, Aug 15 14:36; sourcecode scripts unload_ip, 1137, Aug 15 14:36; sourcecode scripts msgbox.c, 2529, Aug 15 14:36; sourcecode scripts inputbox.c, 6179, Aug 15 14:36; sourcecode scripts yesno.c, 3067, Aug 15 14:36; sourcecode scripts colors.h, 5384, Aug 15 14:36; sourcecode scripts checklist.c, 9584, Aug 15 14:36;sourcecode scripts menubox.c, 12716, Aug 15 14:36; sourcecode scripts dialog.h, 5936, Aug 15 14:36; sourcecode scripts textbox.c, 15584, Aug 15 14:36; sourcecode scripts util.c, 9604, Aug 15 14:36; sourcecode scripts lxdialog.c, 6023, Aug 15 14:36; sourcecode main lnet.c, 21899, Aug 15 14:36; sourcecode main Makefile, 172, Aug 15 14:36;sourcecode include lnet.h, 6253, Aug 15 14:36; sourcecode include lnet_udp.h, 3463, Aug 15 14:36; sourcecode include lnet icmp.h, 2856, Aug 15 14:36; sourcecode include lnet_arp.h, 1417, Aug 15 14:36; sourcecode include lnet_ipv4.h, 4172, Aug 15 14:36; sourcecode include lnet_hw.h, 1673, Aug 15 14:36; sourcecode include lnet_gpos.h, 1435, Aug 15 14:36; sourcecode doc api. txt, 7841, Aug 15 14:36; sourcecode doc ipv4.txt, 6923, Aug 15 14:36; sourcecode doc udp.txt, 4171, Aug 15 14:36; sourcecode doc arp.txt, 2664, Aug 15 14:36; sourcecode doc icmp.txt, 4136, Aug 15 14:36; sourcecode doc gpos.txt, 5055, Aug 15 14:36; sourcecode doc faq.txt, 4855, Aug 15 14:36; sourcecode doc getting_started.txt, 3690, Aug 15 14:36; sourcecode doc configuration.txt, 1847, Aug 15 14:36; sourcecode doc scripts.txt, 2663, Aug 15 14:36; sourcecode doc Configure. help, 4154, Aug 15 14:36; sourcecode GNUmakefile, 4188, Aug 15 14:36; sourcecode drivers lnet_pcnet32.c, 21711, Aug 15 14:36; sourcecode drivers lnet_3c905.c, 34753, Aug 15 14:36; sourcecode drivers lnet_eeprolOO.c, 30847, Aug 15 14:36; sourcecode drivers Makefile, 624, Aug 15 14:36; sourcecode tests lnet_arp_test lnet_arp_test.c, 2039, Aug 15 14:36; sourcecode tests lnet_arp_test Makefile, 488, Aug 15 14:36; sourcecode tests lnet_ip_test lnet_ip_test.c, 10396, Aug 15 14:36; sourcecode tests lnet_ip_test Makefile, 483, Aug 15 14:36;sourcecode tests lnet_ping lnet_ping.c, 6487, Aug 15 14:36; sourcecode tests lneting Makefile, 465, Aug 15 14:36; sourcecode tests lnet_udp_test lnet_udp_test.c, 10254, Aug 15 14:36; sourcecode tests lnet_udp_test Makefile, 488, Aug 15 14:36; sourcecode tests lnet_test lnet_test.c, 9744, Aug 15 14:36; sourcecode tests lnet_test Makefile, 181, Aug 15 14:36; sourcecode skeletons lnet_ipv4_plugin.c, 4926, Aug 15 14:36; sourcecode skeletons lnet_driver.c, 22332, Aug 15 14:36; sourcecode skeletons lnet_decoupled_app.c, 5523, Aug 15 14:36; sourcecode skeletons lnet_simple_app.c, 4510, Aug 15 14:36; sourcecode skeletons Makefile, 284, Aug 15 14:36; sourcecode Rules.make, 188, Aug 15 14:36; sourcecode Copyright, 76, Aug 15 14:37.
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、システムがネットワーク環境を監視及び制御できるようにすることである。
【０００６】
本発明の別の目的は、高い可用性、迅速な故障回復、帯域外条件のシグナリング、及び／又はネットワーク環境における他のサービス品質保証及びセキュリティを、システムが提供できるようにすることである。
【０００７】
本発明の別の目的は、例えば、サービス拒否攻撃のようなネットワークに基づく攻撃をシステムが検出及び防止できるようにすることである。
【課題を解決するための手段】
【０００８】
上記及びその他の目的は、本発明によって達成される。一態様において、本発明の方法は、処理システム（例えば、汎用コンピュータ、特定用途向けコンピュータ、ネットワークルータ、ネットワークスイッチ、又はその他の処理デバイス）に、管理オペレーティングシステム及び二次オペレーティングシステムと呼ばれる少なくとも二つのオペレーティングシステムを提供するステップを含む。一実施形態において、二次オペレーティングシステムは、管理オペレーティングシステムによって管理されるタスクである。管理システムは、リアルタイムオペレーティングシステムにしてよいが、これは要件ではない。
【０００９】
前記方法は、更に、管理オペレーティングシステムにネットワーク制御ソフトウェア（ＮＣＳ）を提供するステップを含む。ＮＣＳは、管理オペレーティングシステムのアプリケーションであり、ハードウェアネットワークデバイスドライバと二次オペレーティングシステムのネットワーククライアントとの間に挿入される。こうしたネットワーククライアントは、二次オペレーティングシステムのプロトコルスタックを介して、或いは、例えば、共有メモリ又は疑似デバイスインタフェースを使用して直接的に、ＮＣＳと通信し得る。ＮＣＳは、更に、二次オペレーティングシステム内及びクライアントアプリケーションソフトウェア内の状態情報を読み取って修正することにより、二次オペレーティングシステムのクライアントと通信できる。
【００１０】
ハードウェアネットワークデバイスドライバと二次オペレーティングシステムのネットワーククライアントとの間にＮＣＳが挿入されるため、ＮＣＳは、二次オペレーティングシステムにおけるネットワーク動作を監視及び制御する構成とし得る。例えば、ＮＣＳは、二次オペレーティングシステムの通信チャネルを監視及び／又は制御し、高速のフェイルオーバを提供し、ネットワークに基づく攻撃からの保護を提供し、クリティカルサービスでのリソースの競合を低減するサービス品質システムを提供する構成にし得る。
【００１１】
一実施形態において、ＮＣＳは、ネットワーク環境を監視及び制御し得る。例えば、ＮＣＳは、ネットワーククライアントのメッセージストリームと、二次オペレーティングシステムにおいて実施されるプロトコルスタックとから、情報を収集し得る。ＮＣＳは、二次オペレーティングシステムのプロトコルスタックの境界を越えて動作し得る。例えば、ＮＣＳは、二次オペレーティングシステムにおいて実施されるプロトコルのタイミングに関する情報を、プロトコル自体がこの情報を追跡しない場合でも、収集できる。ＮＣＳは、制御情報をデータストリームに挿入すること、及び／又は、この情報をデータストリームから取り出すことが可能であり、更にＮＣＳは、様々なプロトコルの動作を、こうしたプロトコルが二次オペレーティングシステム内で論理的に無関係であっても、関連付け、協調させてよい。
【００１２】
更に、管理オペレーティングシステムがリアルタイムオペレーティングシステムである実施形態において、ＮＣＳは、管理オペレーティングシステムのリアルタイム機能を介して、ＮＣＳの作用に正確なタイミングを強制する動作が可能である。例えば、ＮＣＳは、隣接するコンピュータシステムに周期的な状態の更新を正確な間隔で送信する構成にし得る。更に、ＮＣＳは、二次オペレーティングシステムにおけるプロトコルスタック及びネットワーククライアントの状態を検査及び修正することができる。例えば、ＮＣＳは、二次オペレーティングシステムの高度なＴＣＰ又はＴ／ＴＣＰスタックを利用してよいが、ＴＣＰ又はＴ／ＴＣＰプロトコルが検出できない条件をＮＣＳが検出した場合には、リソースの浪費を防止するために介入し得る。
【発明の効果】
【００１３】
ＮＣＳのアプリケーションの一つが有利なのは、二次オペレーティングシステムの既存のネットワークスタック及びアプリケーションを強化する機能をトランスペアレントに追加可能なことである。例えば、複雑で高度にチューニングされたＴ／ＴＣＰプロトコルスタックを修正して、特定のリモートコンピュータとのトランザクションを優先させるように試みるものの代わりに、ＮＣＳを使用して、例えば、優先度の低いコンピュータからＴ／ＴＣＰスタックへのメッセージをトランスペアレントに廃棄又は遅延させることにより、二次オペレーティングシステムのＴ／ＴＣＰスタックに、こうした優先順位を強制できる。
【００１４】
以下、本発明の上記及びその他の特徴及び利点と、本発明の好適な実施形態の構造及びステップとに付き、添付図面を参照して説明する。
【００１５】
本明細書に組み込まれ、その一部を形成する添付図面は、本発明の様々な実施形態を例示し、更に、説明と共に、本発明の原理を明らかにし、当業者による本発明の作成及び使用を可能にする役割を果たす。図面において、同様の参照符号は、同一又は機能的に同様の要素を示す。更に、参照符号の最も左側の（複数の）桁は、その参照符号が最初に現れた図面を特定する。
【発明を実施するための最良の形態】
【００１６】
本発明は数多くの異なる形態で実施し得るが、本明細書では、本開示が本発明の原理の例とみなされ、例示した（複数の）実施形態に本発明が限定されるものではないということを前提に、例示的な（複数の）実施形態について詳細に説明する。
【００１７】
図１は、本発明によるコンピュータシステム１０１の一実施形態を例示するブロック図である。コンピュータシステム１０１は、管理オペレーティングシステム１０４と二次オペレーティングシステム１０６とを含む。二次オペレーティングシステム１０６は、一つ以上のプロトコルスタック１５０を介して、アプリケーション１４０（別名「ネットワーククライアント」）にネットワークサービスを提供する。例えば、二次オペレーティングシステム１０６によって提供されたネットワークサービスを介して、ネットワーククライアント１４０は、データ処理システム１０１と他のデータ処理システムとが当然ながら同じネットワーク（例えば、ネットワーク１７０）に直接的又は間接的に接続されているならば、他のデータ処理システム上で実行されるネットワーククライアントとの間でデータを送受信することができる。
【００１８】
一実施形態において、管理オペレーティングシステム１０４は、二次オペレーティングシステム１０６を実行するが、これは要件ではない。追加として、二次オペレーティングシステム１０６における割り込み制御動作は、ソフトウェアエミュレーションに置き換えてよく、管理オペレーティングシステム１０４は、非常に限定された遅延の後、安全な形で二次オペレーティングシステムに先行し得る。二次オペレーティングシステム１０６は、従来のオペレーティングシステムにする必要はなく、例えば、Ｊａｖａ仮想マシンにし得る。本発明で使用可能なデュアルカーネルソフトウェアオペレーティングシステムについては、米国特許第５，９９５，７４５号（Ｙｏｄａｉｋｅｎ）において説明されており、これは、参照により全体が本明細書に組み込まれるものとする。当業者は、他のマルチカーネルオペレーティングシステムを使用可能であり、本発明が特定のいずれかに限定されるものではないことは理解されよう。
【００１９】
図１に図示したように、管理オペレーティングシステム１０４には、ネットワークコントロールシステム（ＮＣＳ）１１０が更に設けられる。ＮＣＳ１１０は、二次オペレーティングシステム１０６の観点からはトランスペアレントに、二次オペレーティングシステム１０６におけるネットワーク動作を監視及び制御するために使用される。ＮＣＳ１１０は、更に、ネットワーク環境を監視及び制御し得る。ＮＣＳ１１０は、管理オペレーティングシステム１０４のアプリケーションであり、管理オペレーティングシステム１０４のアドレス空間内、或いは、保護されたメモリ空間において、実行し得る。二次オペレーティングシステム１０６の最上部で実行されるネットワーククライアント１４０は、二次オペレーティングシステム１０６の一つ以上のプロトコルスタック１５０を介して、或いは、例えば、共有メモリ又は疑似デバイスインタフェース（図示なし）を使用して直接的に、ＮＣＳ１１０と通信し得る。ＮＣＳ１１０は、更に、二次オペレーティングシステム１０６内及びクライアント１４０のアプリケーションソフトウェア内の状態情報を読み取って修正することにより、一つ以上のクライアント１４０と通信することができる。ＮＣＳ１１０は、周期的なスケジュールに従って、又はタイムアウトによって、又は低レベルのドライバからのトリガの作用によって実行し得る。
【００２０】
一実施形態において、二次オペレーティングシステム１０６には、ネットワークデバイスドライバをエミュレートする一つ以上の仮想ネットワークドライバ（ＶＮＤ）１２０が設けられる。即ち、ＶＮＤ１２０は、二次オペレーティングシステム１０６及びプロトコルスタック１５０にとって、デバイスドライバ１３３のようなネットワークデバイスドライバであるように見える。仮想ネットワークドライバ１２０は、ＮＣＳ１１０の制御下で、パケットを「送信」及び「受信」する。仮想ネットワークドライバ１２０は、例えばイーサネットドライバ等のハードウェアデバイスに対応するインタフェースを提供し、或いは、更に高レベルのインタフェースを提供することができる。例えば、メッセージパッシングインタフェース（ＭＰＩ）は、スーパーコンピューティングクラスタ上の仮想ネットワークドライバ１２０として実施し得る。
【００２１】
ＮＣＳ１１０は、プロトコルスタック１５０の境界を越えて動作し得る。例えば、ＮＣＳ１１０は、二次オペレーティングシステム１０６において実施されるプロトコルのタイミングに関する情報を、プロトコル自体がこの情報を追跡しない場合でも収集可能であり、更にＮＣＳ１１０は、様々なプロトコルの動作を、こうしたプロトコルが二次オペレーティングシステム内で論理的に無関係であっても、関連付け、協調させてよい。更に、ＮＣＳ１１０は、プロトコルスタック１５０を通過するメッセージストリームに制御情報を挿入すること、及び／又は、この情報をメッセージストリームから取り出すことが可能である。
【００２２】
管理オペレーティングシステム１０４のリアルタイム機能を介して、ＮＣＳ１１０は、ＮＣＳの作用に正確なタイミングを強制する動作が可能である。例えば、ＮＣＳ１１０は、隣接するコンピュータシステムに周期的な状態の更新（例えば、「キープアライブメッセージ」）を正確な間隔で送信することができる。更に、ＮＣＳ１１０は、二次オペレーティングシステムにおけるプロトコルスタック及びアプリケーションプログラムの状態を検査及び修正することができる。例えば、ＮＣＳ１１０は、二次オペレーティングシステムの高度なＴ／ＴＣＰスタックを利用してよいが、Ｔ／ＴＣＰプロトコルが検出できない条件をＮＣＳ１１０が検出した場合には、リソースの浪費を防止するために介入し得る。
【００２３】
一実施形態において、ＮＣＳ１１０は、イベントハンドラ１１２と、スレッド１１３と、制御データベース１８０とを含んでよい。イベントハンドラ１１２は、一つ以上の機能を実行するための命令セットである。イベントハンドラ１１２は、所定のイベントの発生時に呼び出される。例えば、あるイベントハンドラ１１２は、デバイスドライバ１３３がネットワークデバイス１３０からデータパケット（例えば、イーサネットフレーム）を受信したのに応答して呼び出されてよく、別のイベントハンドラは、仮想デバイスドライバ１２０が上位層プロトコルからデータパケットを受信したのに応答して呼び出される。制御データベース１８０は、ＮＣＳ１１０が任意の「論理結合」を定義することを可能にする。論理結合の例は、ＴＣＰ／ＩＰ接続、ＴＣＰ／ＩＰサービスのタイプ、特定のハードウェアアドレス又はＩＰ番号によって標識されたパケットとのあらゆる通信、或いは、別のサイト又はサイトのグループとの要求／応答リンクといったリアルタイムドライバに固有の通信リンクである。制御データベース１８０は、ＮＣＳ１１０の設計に組み込んでよく、静的なデータ構造にしてよく、或いは動的に更新してもよい。制御データベース１８０は、二次オペレーティングシステム１０６の制御下で実行するプログラムによって補完又は全体を形成し得る。例えば、ＳＳ７システムは、どの呼び出しの優先度が高いかを追跡記録する、二次オペレーティングシステムにおいて実行される情報システムを含んでもよい。ＳＳ７システムは、ＮＣＳ１１０によって管理される帯域幅に対する優先度を得た呼び出しを登録するために、ＮＣＳ１１０の制御データベース１８０を更新し得る。
【００２４】
ＮＣＳ１１０のアプリケーションの一つは、既存のネットワークスタック及びアプリケーションに機能をトランスペアレントに追加可能なものである。例えば、複雑で高度にチューニングされたＴ／ＴＣＰプロトコルスタック（又は他の任意のプロトコルスタック）を修正して、特定のリモートコンピュータとのトランザクションを優先させるように試みるものの代わりに、ＮＣＳ１１０を使用して、例えば、必要な時に優先度の低いコンピュータからＴ／ＴＣＰスタックへのメッセージをトランスペアレントに廃棄又は遅延させることにより、二次オペレーティングシステムのＴ／ＴＣＰスタックに、こうした優先順位を強制できる。
【００２５】
ＮＣＳ１１０によって提供され得る機能の別の例には、コンピューティングクラスタにおいて高速のフェイルオーバを提供することが含まれる。コンピューティングクラスタは、通常、交換イーサネット、Ｍｙｒａｎｅｔ、又はカスタム「ファブリック」といった、交換ネットワークに接続された多数のコンピュータによって構成される。コンピューティングクラスタの一般的なアプリケーションには、スーパコンピューティングアプリケーションと電子商取引とが含まれる。
【００２６】
こうしたクラスタは、障害に影響されていない代替コンピュータへタスクをシフトさせることで、障害に迅速に反応できる必要がある。ＮＣＳ１１０は、障害を即座に又は発生後まもなく検出し、その後、適切な是正措置を行うか、或いは、別のプロセス又は管理者が適切な措置を行えるように、障害が発生したことを示す警報を設定することで、こうした迅速な反応を可能にできる。一例において、制御データベース１８０は、クラスタ内で「フェイルオーバグループ」を形成する他の何台かのコンピュータについて、アドレス情報をリストアップする。ＮＣＳ１１０は、最初に、こうしたコンピュータに対するネットワーク上でのメッセージの遅延をキャリブレートし、次に、フェイルオーバグループのメンバ間でのパケットの定期的な交換のスケジュールを設定し得る。スケジュールが定めるように、ＮＣＳ１１０は、グループ内の他のコンピュータにパケットを送信し、そのＮＣＳが関連するコンピュータシステム及び二次オペレーティングシステムが生存しており、進展があることを示す。追加として、ＮＣＳ１１０は、メッセージが二次オペレーティングシステム１０６内の制御スタックを通っていることと、重要なプロセスが適切な割合でスケジュールされていることと、ソフトウェア又はハードウェアのパニック状態が検出されていないこととを確認して、二次オペレーティングシステム１０６を監視してもよい。ＮＣＳ１１０は、更に、フェイルオーバグループの他のメンバに対する警報を作動させてよく、フェイルオーバグループの対応するメンバからパケットを受信した時に警報をリセットし、警報の期限が切れた時には指定された何らかの措置を行う。
【００２７】
本発明の別の実施形態において、コンピュータシステム１０１は、ＳＳ７電話スイッチのような電話交換システムを実現する。この実施形態において、ＮＣＳ１１０は、電話スイッチでの制御信号の受信を検出し、受信直後に制御信号を処理するか、或いは、処理のために適切なモジュールに制御信号を渡すように構成される。したがって、本発明は、制御信号に適時的に影響を与える一方で、クリティカルではないメッセージを二次オペレーティングシステム１０６のプロトコルスタックまで運ぶことが可能な状態を確保する。具体的な例として、回線にアクセスできないことを示す制御メッセージは、二次オペレーティングシステム１０６内のプロトコルスタックに対してトランスペアレントな形で、二次回線を介してデータメッセージをリダイレクトするために、ＮＣＳ１１０による即時的な措置をトリガできる。
【００２８】
本発明は、更に、盗難又はサービス拒否（ＤＯＳ）攻撃を防止するために使用できる。更に、本発明は、サービスをスケジュールし、クリティカルサービスでのリソースの競合を低減できるサービス品質システムを提供するために使用できる。当業者は、こうした本発明の使用法が例示的なものに過ぎず、本発明の他の使用法が存在することを理解することができよう。
【００２９】
図２を参照すると、高速フェイルオーバを実行し、ＴＣＰ接続を監視し、サービス拒否（ＤＯＳ）攻撃を防止する働きが可能なＮＣＳ２１０の例示的実施形態の機能ブロック図が図示されている。ＮＣＳ２１０は、二つのイベントハンドラ（イベントハンドラ２１２（ａ）及びイベントハンドラ２１２（ｂ））と、二つのスレッド（スレッド２１３（ａ）及びスレッド２１３（ｂ））とを含む。イベントハンドラ２１２（ａ）は、ネットワークデバイス１３０がネットワーク１７０からデータパケットを受信した後で呼び出される。ネットワークデバイス１３０がネットワーク１７０からデータパケットを受信した時、受信データパケットは、ネットワークドライバ１３３に渡され、ネットワークドライバ１３３は、受信パケットを待ち行列２３７（別名、ｈｄ＿ｒｘ＿ｑｕｅｕｅ２３７）に入れ、イベントハンドラ２１２（ａ）を呼び出す。イベントハンドラ２１２（ｂ）は、ネットワークデバイス１３０がネットワーク１７０にデータパケット（例えば、イーサネットフレーム）を送信する時に呼び出される。スレッド２１３（ａ）は、フェイルオーバの監視を実行し、スレッド２１３（ｂ）は、ＴＣＰの監視を実行する。
【００３０】
図３は、スタック１５０が送信用のパケットを生成した時に、少なくとも部分的にはＶＮＤ（１２０）によって実行されるプロセス３００を例示するフローチャートである。プロセス３００では、最初にステップ３０１において、生成されたパケットを待ち行列２２５（別名、ｖｎｄ＿ｔｘ＿ｑｕｅｕｅ２２５）に入れる。ステップ３０２において、ＶＮＤ１２０は、ｔｘ＿ｐａｃｋｅｔ＿ｃｏｕｎｔと呼ばれる変数を増分する。ステップ３０４において、ＶＮＤ１２０は、パケットがクリティカルなパケットかを判断する。即ち、ＶＮＤ１２０は、パケットが「クリティカル」であると標識されたＴＣＰポートを起源とするＴＣＰパケットかを判断する。一実施形態において、クリティカルなＴＣＰポートのリストは、制御データベース１８０において維持される。パケットがクリティカルなパケットである場合、制御は、ステップ３０６へと移動し、そうでない場合、プロセスは、ステップ３１２へ進む。
【００３１】
ステップ３０６において、ＶＮＤ１２０は、ＴＣＰパケットが最終的に送信されるまでに、どのくらいの時間に渡って待ち行列に入っていたかをＮＣＳ１１０が追跡記録できるように、現在の時刻を記録する。ステップ３０８において、ＶＮＤ１２０は、待ち行列２３５（別名、ｈｄ＿ｔｘ＿ｑｕｅｕｅ２３５）に余裕があるかを判断する。余裕がある場合、ＶＮＤ１２０は、一つ以上のパケットをｖｎｄ＿ｔｘ＿ｑｕｅｕｅ２２５から取り除き、こうした一つ以上のパケットをｈｄ＿ｔｘ＿ｑｕｅｕｅ２３５に入れ（ステップ３１０）、そうでない場合、ＶＮＤ１２０は、設定可能な時間量に渡ってスリープする（ステップ３１４）。ステップ３１４の後、プロセスは、ステップ３０８に戻る。
【００３２】
ステップ３１２において、ＶＮＤ１２０は、ｈｄ＿ｔｘ＿ｑｕｅｕｅ２３５に余裕があるかを判断する。余裕がある場合、プロセスはステップ３１０へ進み、そうでない場合、バケットは、ｖｎｄ＿ｔｘ＿ｑｕｅｕｅ２２５から取り除かれ、廃棄される（ステップ３１３）。
【００３３】
図４は、イベントハンドラ２１２（ａ）の一実施形態によって実行されるプロセス４００を例示するフローチャートである。上記のように、イベントハンドラ２１２（ａ）は、ネットワークデバイス１３０がネットワーク１７０からデータパケットを受信した後で呼び出される。プロセス４００では、最初にステップ４０２において、イベントハンドラは、フェイルオーバグループに含まれる各サイトを判断する。この情報は、制御データベース１８０に格納し得る。
【００３４】
フェイルオーバグループ内の各サイトは、三つのフィールドを含む、関連するサイトレコードを有する。第一のフィールドは、「アドレス」フィールドと呼ばれ、サイトのアドレスを格納する（アドレスはハードウェアアドレス又はネットワークアドレスとすることができる）。第二のアドレスは、「ｌａｓｔ＿ｔｘ＿ｔｉｍｅ」フィールドと呼ばれ、システム１０１がデータパケットをサイトに対して最後に送信した時刻を格納する。第三のフィールドは、「ｌａｓｔ＿ｒｘ＿ｔｉｍｅ」フィールドと呼ばれ、システム１０１がデータパケットをサイトから最後に受信した時刻を格納する。
【００３５】
ステップ４０４において、イベントハンドラは、受信パケットがフェイルオーバグループ内のサイトから送信されたものかを判断する。イベントハンドラは、データパケットに含まれるソースアドレス情報を、各サイトレコードのアドレスフィールドと比較することで、これを判断し得る。一致する場合、受信パケットは、フェイルオーバグループ内のサイトから送信されたものである。受信パケットがフェイルオーバグループ内のサイトから送信されたものである場合、プロセスはステップ４０６へ進み、そうでない場合、プロセスはステップ４１２へ進む。
【００３６】
ステップ４０６において、イベントハンドラは、現在の時刻を判断し、データパケットのソースであるサイトに関連するサイトレコードのｌａｓｔ＿ｒｘ＿ｔｉｍｅフィールドに、この時刻を格納する。ステップ４０８において、イベントハンドラは、データパケットが「リマインダパケット」であるかを判断する。そうである場合、プロセスはステップ４１０へ進み、そうでない場合、プロセスはステップ４１２へ進む。ステップ４１０において、イベントハンドラは、「生存中」メッセージをデータパケットのソースであるサイトへ送信する。
【００３７】
ステップ４１２において、イベントハンドラは、パケットを検査し、ＴＣＰパケットをカプセル化しているかを判断する。カプセル化していない場合、パケットはＶＮＤ１２０に渡され、プロセスが終了し、カプセル化している場合、プロセスはステップ４１４に進み、イベントハンドラは、カプセル化ＴＣＰパケットがＳＹＮパケット、つまりＴＣＰ接続を開始するために使用されるパケットであるかを判断する。ＳＹＮパケットである場合、プロセスはステップ４１６へ進み、そうでない場合、プロセスはステップ４２６へ進む。
【００３８】
ステップ４１６において、イベントハンドラは、ＴＣＰ＿ＤＯＳ＿ＷＡＲＮＩＮＧフラグがＴＲＵＥに設定されているか、或いは、ＴＣＰ＿ＣＯＮＧＥＳＴＩＯＮ＿ＷＡＲＮＩＮＧフラグがＴＲＵＥに設定されているかを判断する。いずれかのフラグがＴＲＵＥに設定されている場合、受信ＳＹＮパケットは廃棄され（ステップ４１８）、そうでない場合、プロセスはステップ４２０へ進む。ステップ４２０において、イベントハンドラは、受信ＳＹＮパケットをＶＮＤ１２０に渡し、ＶＮＤ１２０は、パケットを待ち行列２２７（別名、ｖｎｄ＿ｒｘ＿ｑｕｅｕｅ２２７）に入れ、ｏｐｅｎ＿ｓｙｎ＿ｃｏｕｎｔを１だけ増分する（即ち、ｏｐｅｎ＿ｓｙｎ＿ｃｏｕｎｔ＝ｏｐｅｎ＿ｓｙｎ＿ｃｏｕｎｔ＋１）。ステップ４２２において、イベントハンドラは、ｏｐｅｎ＿ｓｙｎ＿ｃｏｕｎｔが所定の閾値より大きいかを判断する。大きい場合は、ＴＣＰ＿ＤＯＳ＿ＷＡＲＮＩＮＧフラグがＴＲＵＥに設定され（ステップ４２４）、そうでない場合、プロセスは終了する。
【００３９】
ステップ４２６において、イベントハンドラは、カプセル化ＴＣＰパケットがＡＣＫパケットであるかを判断する。ＡＣＫパケットである場合は、ｏｐｅｎ＿ｓｙｎ＿ｃｏｕｎｔを１だけ減分し、受信パケットをＶＮＤ１２０に渡し（ステップ４２８）、そうでない場合、プロセスはステップ４３０へ進む。
【００４０】
ステップ４３０において、イベントハンドラは、ＴＣＰパケットが「クリティカル」と標識されたＴＣＰポートに対してアドレス指定されているかを判断する。即ち、スレッドは、パケットのＴＣＰ送信先ポート番号を判断し、その後、クリティカルポートのリストをチェックして、そのポート番号がリストにあるかを確認し得る。一実施形態において、クリティカルＴＣＰポートのリストは、制御データベース１８０において維持される。ＴＣＰパケットがクリティカルＴＣＰポートに対してアドレス指定されている場合、スレッドは、パケットをＶＮＤ１２０に渡し、ｐｏｒｔ．ｌａｓｔ＿ｒｘ＿ｓｅｑｕｅｎｃｅを更新し（ステップ４３２）、そうでない場合、プロセスはステップ４３４へ進む。
【００４１】
ステップ４３４において、スレッドは、ＴＣＰ＿ＣＯＮＧＥＳＴＩＯＮ＿ＷＡＲＮＩＮＧフラグがＴＲＵＥに設定されているかを判断する。設定されている場合、パケットは廃棄され（ステップ４３６）、そうでない場合、パケットはＶＮＤ１２０に渡される（ステップ４３８）。
【００４２】
図５は、イベントハンドラ２１２（ｂ）の一実施形態によって実行されるプロセス５００を例示するフローチャートである。上記のように、イベントハンドラ２１２（ｂ）は、ネットワークデバイス１３０によってパケットがネットワーク１７０に送信された時に実行される。プロセス５００では、最初にステップ５０２において、イベントハンドラは、最終的に送信されるまでに、パケットが待ち行列２２５及び２３５において、どのくらいの時間を費やしたかを判断する。待ち行列での時間が所定の閾値（別名、許容可能なＴＸ＿ＥＮＱＵＥＵＥ時間）よりも長い場合、イベントハンドラは、ＴＸ＿ＥＮＱＵＥＵＥ＿ＴＯＯ＿ＳＬＯＷフラグをＴＲＵＥに設定し（ステップ５０４）、そうでない場合、プロセスはステップ５０６へ進む。ステップ５０６において、イベントハンドラは、パケットがフェイルオーバグループ内のサイトに対してアドレス指定されているかを判断する。そうである場合、イベントハンドラは、そのサイトに対するｌａｓｔ＿ｔｘ＿ｔｉｍｅを現在の時刻に設定し（ステップ５０８）、そうでない場合、プロセスはステップ５１０へ進む。また、ステップ５０８の後、プロセスは、ステップ５１０へ進む。
【００４３】
ステップ５１０において、イベントハンドラは、パケットがクリティカルであると標識されたＴＣＰポートを起源とするかを判断する。そうである場合、イベントハンドラは、そのポートに対するｌａｓｔ＿ｔｘ＿ｓｅｑｕｅｎｃｅを更新する（ステップ５１１）。
【００４４】
ステップ５１２において、イベントハンドラは、ｈｄ＿ｔｘ＿ｑｕｅｕｅ２３５に入っていない、ＮＣＳスレッド（例えば、スレッド２１３（ａ）又は２１３（ｂ））によって生成された任意のパケットを、待ち行列に入れる。ステップ５１４において、イベントハンドラは、ＴＸ＿ＥＮＱＵＥＵＥ＿ＴＯＯ＿ＳＬＯＷフラグがＦＡＬＳＥに設定されているかを判断する。そうである場合、プロセスはステップ５１６へ続き、そうでない場合、プロセスは終了する。
【００４５】
ステップ５１６において、イベントハンドラは、ｖｎｄ＿ｔｘ＿ｑｕｅｕｅ２２５が空であるかを判断する。空である場合、プロセスは終了し、そうでない場合は、ステップ５１８へ続く。ステップ５１８において、イベントハンドラは、ｖｎｄ＿ｔｘ＿ｑｕｅｕｅにおいて、この待ち行列に最も長く存在するパケットを選択する。ステップ５２０において、イベントハンドラは、（ａ）選択したパケットがクリティカルＴＣＰポートに対してアドレス指定されたＴＣＰパケットであるかと、（ｂ）ＴＣＰ＿ＣＯＮＧＥＳＴＩＯＮ＿ＷＡＲＮＩＮＧフラグがＦＡＬＳＥに設定されているかと、を判断する。（ａ）又は（ｂ）のいずれかが真である場合、イベントハンドラは、選択したパケットをｈｄ＿ｔｘ＿ｑｕｅｕｅ２３５に入れ（ステップ５２２）、そうでない場合、パケットは廃棄される（ステップ５２４）。ステップ５２２及び５２４の後、プロセスは、ステップ５１６へ戻る。
【００４６】
図６は、スレッド２１３（ａ）の一実施形態によって実行されるプロセス６００を例示するフローチャートである。プロセス６００では、最初にステップ６０２において、スレッドは、フェイルオーバグループに含まれる各サイトを判断する。この情報は、制御データベース１８０に格納し得る。
【００４７】
次に、ステップ６０４において、スレッドは、所定の期間内にシステム１０１からデータパケットを受信していないフェイルオーバグループ内のサイトを判断する。スレッドは、これを多数の方法で判断できる。例えば、現在の時刻を、イベントハンドラ２１２（ｂ）によって変数ｌａｓｔ＿ｔｘ＿ｔｉｍｅに格納された前回の送信時刻と比較することが可能である。ステップ６０６において、スレッドは、「生存中」パケットを、ステップ６０４において判断された各サイトに送信する。そのため、例えば、直前の３０秒間にデータパケットがフェイルオーバグループ内の特定のサイトに送信されていないとスレッドが判断した場合、スレッドは、そのサイトに「生存中」データパケットを送信する。これにより、サイトは、少なくとも「生存中」データパケットを３０秒毎にシステム１０１から受信するため、システム１０１が動作可能であると分かる。
【００４８】
ステップ６０８において、スレッドは、所定の期間内にシステム１０１が受信したデータパケットの送信元となっていないサイトを判断し、こうしたサイトを「警戒リスト」に加える。スレッドは、所定の期間内にシステム１０１がデータパケットを受信していないサイトを多数の方法で判断できる。例えば、現在の時刻を、システムがサイトからデータパケットを最後に受信した時刻と比較することが可能であり、この時刻は、イベントハンドラ２１２（ａ）によって変数ｌａｓｔ＿ｒｘ＿ｔｉｍｅに格納されている。ステップ６１０において、スレッドは、「リマインダ」パケットを警戒リスト内の各サイトに送信する。そのため、例えば、直前の３０秒間にシステム１０１が特定のサイトからデータパケットを受信していない場合、スレッドは、サイトを警戒リストに入れ、そのサイトに「リマインダ」パケットを送信する。
【００４９】
ステップ６１２において、スレッドは、所定の時間量より長く警戒リストに存在している警戒リスト内のサイト又は複数のサイトを判断する。ステップ６１４において、スレッドは、ステップ６１２において判断されたサイトを警戒リスト及びフェイルオーバグループから取り除き、障害ハンドラに対して、これらのサイトが機能していないと思われることを通知する。ステップ６１４の後、制御は、ステップ６０２へ渡される。
【００５０】
図７は、スレッド２１３（ｂ）の一実施形態によって実行されるプロセス７００を例示するフローチャートである。プロセス７００は、ＫＥＥＰ＿ＴＣＰ＿ＣＯＮＴＲＯＬフラグがＴＲＵＥである限り、無限定に実行される。プロセス７００では、最初にステップ７０１において、ＫＥＥＰ＿ＴＣＰ＿ＣＯＮＴＲＯＬフラグがＴＲＵＥに設定されているかをチェックする。ＴＲＵＥに設定されていない場合、プロセスは終了し、設定されている場合、プロセスはステップ７０２へ進む。ステップ７０２において、スレッドは、「ｗａｉｔ＿ｃｏｕｎｔ」と呼ばれる変数をゼロに初期化する。ステップ７０４において、スレッドは、二次ＯＳ１０６内のＴＣＰ制御ブロックをスキャンする。ステップ７０６において、スレッドは、プロセス８００（図８参照）を各制御ブロックに対して実行する。プロセス８００を各制御ブロックに対して実行した後、スレッドは、ステップ７０８へ進む。
【００５１】
次に図８を参照すると、プロセス８００では、最初にステップ８０２において、スレッドは、ＴＣＰポートの状態がＳＹＮ＿ＲＥＣＥＩＶＥＤに設定されているかを判断し、ＳＹＮ＿ＲＥＣＥＩＶＥＤは、そのポートでＳＹＮパケットが受信されているが、肯定応答は行われていないことを意味する。ＴＣＰポートの状態がＳＹＮ＿ＲＥＣＥＩＶＥＤに設定されている場合、スレッドは、ｗａｉｔ＿ｃｏｕｎｔを増分し（ステップ８０４）、そうでない場合、プロセスはステップ８０６へ進む。ステップ８０６において、スレッドは、ＴＣＰポートがクリティカルＴＣＰポートであるかを判断する。そうである場合、スレッドはステップ８０８へ進み、そうでない場合、プロセス８００は終了する。
【００５２】
ステップ８０８において、スレッドは、ＴＣＰ制御ブロックを検査し、ＴＣＰ制御ブロックに関連するＴＣＰポートによって送信された最後のＴＣＰパケットのシーケンス番号を判断する。このシーケンス番号は、ｓｅｎｄ＿ｍａｘと呼ばれる。ステップ８１０において、スレッドは、ｓｅｎｄ＿ｍａｘを、ネットワーク１７０に対して送信された、ポートに関連する最後のＴＣＰパケットのシーケンス番号を格納する変数であるｐｏｒｔ．ｌａｓｔ＿ｔｘ＿ｓｅｑｕｅｎｃｅと比較する。この情報は、イベントハンドラ２１２（ｂ）によって維持できる。ｓｅｎｄ＿ｍａｘが閾値よりも大きくｐｏｒｔ．ｌａｓｔ＿ｔｘ＿ｓｅｑｕｅｎｃｅを上回る場合には、ＴＣＰ＿ＣＯＮＧＥＳＴＥＤ＿ＷＡＲＮＩＮＧフラグをＴＲＵＥに設定する（ステップ８１２）。ｓｅｎｄ＿ｍａｘとｐｏｒｔ．ｌａｓｔ＿ｔｘ＿ｓｅｑｕｅｎｃｅとの間の差は、ネットワーク１７０に対して送信されるべき待ち行列内のＴＣＰパケットの数に関する情報を提供する。待ち行列内の数が多すぎる場合には、ＴＣＰ＿ＣＯＮＧＥＳＴＥＤ＿ＷＡＲＮＩＮＧフラグを作動させるべきである。
【００５３】
ステップ８１４において、スレッドは、ＴＣＰ制御ブロックを検査し、ＴＣＰポートが受信する予定である次のシーケンス番号を判断する。このシーケンス番号は、ｒｃｖ＿ｎｅｘｔと呼ばれる。ステップ８１６において、スレッドは、ｒｃｖ＿ｎｅｘｔを、ネットワーク１７０から受信された、ポートに関連する最後のＴＣＰパケットのシーケンス番号を格納する変数であるｐｏｒｔ．ｌａｓｔ＿ｒｘ＿ｓｅｑｕｅｎｃｅと比較する。この情報は、イベントハンドラ２１２（ａ）によって維持できる。ｒｃｖ＿ｎｅｘｔが閾値よりも大きくｐｏｒｔ．ｌａｓｔ＿ｒｘ＿ｓｅｑｕｅｎｃｅを下回る場合には、ＴＣＰ＿ＣＯＮＧＥＳＴＥＤ＿ＷＡＲＮＩＮＧフラグをＴＲＵＥに設定する（ステップ８１８）。そうでない場合、プロセスは、ステップ８２０へ進む。ｒｃｖ＿ｎｅｘｔとｐｏｒｔ．ｌａｓｔ＿ｒｘ＿ｓｅｑｕｅｎｃｅとの間の差は、待ち行列２２７及び２３７内にあるＴＣＰパケットの数に関する情報を提供する。これらの待ち行列内にあるパケットが多すぎる場合には、ＴＣＰ＿ＣＯＮＧＥＳＴＥＤ＿ＷＡＲＮＩＮＧフラグを作動させるべきである。
【００５４】
ステップ８２０において、スレッドは、ｒｃｖ＿ｎｅｘｔが所定の閾値よりも小さくｐｏｒｔ．ｌａｓｔ＿ｒｘ＿ｓｅｑｕｅｎｃｅを上回るかを判断する。ｒｃｖ＿ｎｅｘｔが所定の閾値よりも小さくｐｏｒｔ．ｌａｓｔ＿ｒｘ＿ｓｅｑｕｅｎｃｅを上回る場合、ＴＣＰ＿ＣＯＮＧＥＳＴＥＤ＿ＷＡＲＮＩＮＧフラグをＴＲＵＥに設定する。このステップは、シーケンス番号の終了のために必要となる。
【００５５】
再びプロセス７００を参照すると、ステップ７０８において、スレッドは、ｏｐｅｎ＿ｓｙｎ＿ｃｏｕｎｔをｗａｉｔ＿ｃｏｕｎｔと等しく設定する。次に、スレッドは、ｏｐｅｎ＿ｓｙｎ＿ｃｏｕｎｔが第一の閾値より小さいかを判断する（ステップ７０９）。小さい場合には、ＴＣＰ＿ＤＯＳ＿ＷＡＲＮＩＮＧフラグをＦＡＬＳＥに設定する（ステップ７１０）。ステップ７１２において、スレッドは、ｏｐｅｎ＿ｓｙｎ＿ｃｏｕｎｔが第二の閾値より大きいかを判断し、ここで第二の閾値は第一の閾値より大きい。大きい場合、ＴＣＰ＿ＤＯＳ＿ＷＡＲＮＩＮＧフラグをＴＲＵＥに設定する（ステップ７１４）。ステップ７１６において、スレッドは、設定可能な時間量に渡ってスリープする。ステップ７１６の後、プロセスは、ステップ７０１に戻る。
【００５６】
以上、本発明の様々な実施形態／変形例を説明してきたが、これらは、限定としてではなく、単なる例として提示されたものと理解されたい。したがって、本発明の広がり及び範囲は、上述した任意の例示的実施形態によって限定されるものではなく、前記特許請求の範囲及びその等価物によってのみ画定されるものである。
【図面の簡単な説明】
【００５７】
【図１】本発明の一実施形態によるシステムの機能ブロック図
【図２】本発明の一実施形態によるシステムにおいて、高速フェイルオーバを実行し、ＴＣＰ接続を監視し、サービス拒否（ＤＯＳ）攻撃を防止する機能が可能なＮＣＳの例示的実施形態の機能ブロック図
【図３】本発明の一実施形態によるシステムにおいて、スタックが送信用パケットを生成する時に、ＶＮＤによって実行されるプロセス３００を例示するフローチャート
【図４Ａ】本発明の一実施形態によるシステムにおいて、イベントハンドラ２１２（ａ）の一実施形態によって実行されるプロセス４００を例示するフローチャート
【図４Ｂ】本発明の一実施形態によるシステムにおいて、イベントハンドラ２１２（ａ）の一実施形態によって実行されるプロセス４００を例示するフローチャート
【図５Ａ】本発明の一実施形態によるシステムにおいて、イベントハンドラ２１２（ｂ）の一実施形態によって実行されるプロセス５００を例示するフローチャート
【図５Ｂ】本発明の一実施形態によるシステムにおいて、イベントハンドラ２１２（ｂ）の一実施形態によって実行されるプロセス５００を例示するフローチャート
【図６】本発明の一実施形態によるシステムにおいて、スレッド２１３（ａ）の一実施形態によって実行されるプロセス６００を例示するフローチャート
【図７】本発明の一実施形態によるシステムにおいて、スレッド２１３（ｂ）の一実施形態によって実行されるプロセス７００を例示するフローチャート
【図８】本発明の一実施形態によるシステムにおいて、スレッド２１３（ａ）の一実施形態によって実行されるプロセス８００を例示するフローチャート
【図１】
2005536803.tif 000003
【図２】
2005536803.tif 000004
【図３】
2005536803.tif 000005
【図４Ａ】
2005536803.tif 000006
【図４Ｂ】
2005536803.tif 000007
【図５Ａ】
2005536803.tif 000008
【図５Ｂ】
2005536803.tif 000009
【図６】
2005536803.tif 000010
【図７】
2005536803.tif 000011
【図８】
2005536803.tif 000012
【国際調査報告】
2005536803.tif 000013
2005536803.tif 000014