(57)【要約】      （修正有）【課題】デバイスをより秘匿させることにより、インラインコンテンツアナライザの攻撃に対する耐性を高める。【解決手段】ＴＣＰデータセグメントストリームをインラインコンテンツ解析にサブミットするための方法は、ＴＣＰ送出機とＴＣＰ受信機との間の所与のＴＣＰ接続に対応する第１のＴＣＰデータセグメントストリームをＴＣＰ送出機から受信すること、ＴＣＰデータセグメントストリームから第１のバイトストリームを抽出するとともに再組み立てすること、第１のバイトストリームから導出される第２のバイトストリームを、第２のバイトストリームに対してコンテンツ解析を実行するようになっているコンテンツアナライザ（２００）に渡すこと、及び、コンテンツアナライザに渡されたバイトストリームと全体的に一致するバイトストリームコンテンツを有する第２のＴＣＰデータセグメントストリームをＴＣＰ受信機へ中継することを含む。【選択図】図１
2007336551.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのＴＣＰデータセグメントストリームをインラインコンテンツ解析にサブミットするための方法であって、
ＴＣＰ送出機とＴＣＰ受信機との間の所与のＴＣＰ接続に対応する第１のＴＣＰデータセグメントストリームを前記ＴＣＰ送出機から受信すること、
前記ＴＣＰデータセグメントストリームから第１のバイトストリームを抽出するとともに再組み立てすること、
前記第１のバイトストリームから導出される第２のバイトストリームを、該第２のバイトストリームに対してコンテンツ解析を実行するようになっているコンテンツアナライザ（２００）に、渡すこと、及び
前記コンテンツアナライザに渡された前記バイトストリームと全体的に一致するバイトストリームコンテンツを有する第２のＴＣＰデータセグメントストリームを前記ＴＣＰ受信機へ中継すること
を含み、
前記第２のＴＣＰデータセグメントストリームは、前記第１のＴＣＰデータセグメントストリームと同じ個数のデータセグメントを有し、
前記第２のＴＣＰデータセグメントストリームのすべてのセグメントは、前記第１のＴＣＰデータセグメントストリームの対応するセグメントと同じサイズであり、同じヘッダを有することを特徴とする、
少なくとも１つのＴＣＰデータセグメントストリームをインラインコンテンツ解析にサブミットするための方法。
【請求項２】
前記ＴＣＰ受信機から受信される受信確認応答セグメント、すなわちＡＣＫが受信されると、該ＡＣＫは、いかなる遅延もなく前記ＴＣＰ送出機に転送される、請求項１に記載の方法。
【請求項３】
前記第２のＴＣＰデータセグメントストリームを中継することは、たとえば、どのデータセグメントを中継できるかを示す情報を含む、前記コンテンツアナライザによって提供される情報に、基づいて続けられる、請求項１又は２に記載の方法。
【請求項４】
受信データセグメント及び受信ＡＣＫは、ＴＣＰ接続ごとに再組み立てバッファ（図３）を保持するのに使用され、
受信データセグメントは、さらに中継するために該データセグメントの受信オーダを実施するデータセグメント記述子キュー（１２０）にさらに供給される、請求項１〜３のいずれか一項に記載の方法。
【請求項５】
前記再組み立てバッファの下位境界（ＬｏｗＢｕｆｆＢｏｕｎｄ）よりも小さなシーケンス番号を有する受信データセグメントは、前記第２のＴＣＰデータセグメントストリームの一部として中継され、且つ／又は
前記再組み立てバッファの上位境界（ＵｐＢｕｆｆＢｏｕｎｄ）よりも大きなシーケンス番号を有する受信データセグメントは、廃棄される、請求項４に記載の方法。
【請求項６】
前記再組み立てバッファにすでに記憶されているデータと重なっているデータを含むデータセグメントが受信された時は常に、該新しく受信されたデータは、無視され、前記第２のバイトストリームにおいて、前記再組み立てバッファにすでに存在する前記データによって置き換えられる（図５）、請求項４又は５に記載の方法。
【請求項７】
データセグメント記述子が、そのデータセグメントに特有のＴＣＰ情報及びＩＰ情報であって、該データセグメントを前記第２のＴＣＰデータセグメントストリームの一部として中継する時に完全なＴＣＰヘッダを生成するのに使用できるＴＣＰ情報及びＩＰ情報を含む、請求項４〜６のいずれか一項に記載の方法。
【請求項８】
受信データセグメントは、それらの各データセグメント記述子が前記データセグメント記述子キューに現れる順序で、前記第２のＴＣＰデータセグメントストリームの一部として中継される、請求項４〜７のいずれか一項に記載の方法。
【請求項９】
中継される現在のデータセグメントの前記シーケンス番号が、前に中継されたデータセグメントの前記シーケンス番号よりも大きいことが、前記データセグメント記述子キューを調べることによってチェックされ、
前記前に中継されたセグメントの前記シーケンス番号よりも小さな前記シーケンス番号を有するデータセグメント記述子が見つかるときは常に、
前記現在のデータセグメントのコンテンツが前記コンテンツアナライザによりすでに処理された範囲に属する場合には、前記現在のデータセグメントは中継され、
そうでない場合には、前記現在のデータセグメントの前記中継プロセスは、前記コンテンツアナライザによって再びトリガされるまで停止される、請求項８に記載の方法。
【請求項１０】
前記再組み立てバッファは、一組の、個々に固定されたサイズを有するｎ個のメモリブロック（３１０）から成り、
該メモリブロックは、すべてのＴＣＰ接続の間で共有されるメモリブロックのプールから得られ、ここで、ｎは１よりも大きな整数である、請求項４〜９のいずれか一項に記載の方法。
【請求項１１】
メモリブロックは、所与の接続に割り当てられ、すなわち、セグメントの受信時に該接続の再組み立てバッファに挿入又は追加され、その割り当ては、以下の通り、すなわち：
前記セグメントによってカバーされる前記シーケンス番号の範囲が、前記再組み立てバッファのシーケンス番号の範囲に属し、
前記セグメントによってカバーされる前記シーケンス番号の範囲が、前記接続の再組み立てバッファにすでに割り当てられている前記メモリブロック（複数可）によってカバーされる前記シーケンス番号の範囲（複数可）に完全には含まれず、且つ、
前記接続の再組み立てバッファにすでに割り当てられている最大ｎ−１個のメモリブロックが存在する
ように行われる、請求項１０に記載の方法。
【請求項１２】
各接続について、ｎエントリーポインタテーブル（３２０）が、前記再組み立てバッファを構成する前記メモリブロックへのポインタを保持するのに使用される、請求項１０又は１１に記載の方法。
【請求項１３】
前記再組み立てバッファのホールについての情報を記憶するデータ構造体が、各再組み立てバッファに関連付けられる、請求項４〜１２のいずれか一項に記載の方法。
【請求項１４】
データが受信される時に、該データは前記コンテンツアナライザに渡される、請求項１〜１３のいずれか一項に記載の方法。
【請求項１５】
連続したデータのみ、すなわち、最初に遭遇したホールまでのデータのみが、前記コンテンツアナライザに渡される、請求項１３に記載の方法。
【請求項１６】
ホールが満たされると、該ホールのデータ及び次のホールまでの前記連続したデータが、前記アナライザに渡される、請求項１５に記載の方法。
【請求項１７】
前記アナライザに渡される最も大きなデータシーケンス番号を示すポインタが保持される、請求項１４〜１６のいずれか一項に記載の方法。
【請求項１８】
データが前記コンテンツアナライザへ送信される前記接続をスケジューリングするのに使用される基準は、以下のもの、すなわち：
前記アナライザにまだ渡されていない、前記再組み立てバッファに存在するバイトの個数と、
すべての接続にわたって最も古く記憶されたセグメントと、
前記アナライザに渡される最も大きなデータシーケンス番号を示すポインタの現在の値よりも大きな最下位ホールがすべての接続にわたって最も近時であるという事実と
のうちの１つ又は複数を含む、請求項４〜１７のいずれか一項に記載の方法。
【請求項１９】
請求項１〜１８のいずれか一項に記載の方法を実施するための手段を備える、少なくとも１つのＴＣＰセグメントストリームをインラインコンテンツ解析にサブミットするためのデバイス（１００）。
【請求項２０】
請求項１〜１８のいずれか一項に記載の方法を実施するための１つ又は複数の命令シーケンスを保持するコンピュータ可読媒体。
【請求項２１】
プロセッサにとってアクセス可能であり、且つ、該プロセッサによって実行されると、請求項１〜１８のいずれか一項に記載の方法を該プロセッサに実行させる、１つ又は複数記憶された命令シーケンスを含むコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
［発明の分野］
本発明は、包括的には、インターネット等のデータ送信ネットワークに関する。より具体的には、本発明は、カットスルー、すなわち、インラインバイトストリーム解析を実行するための設備に関する。このような解析は、アプリケーションレベル、すなわち、送信レベルよりも上のレベルで行われる攻撃の検出のために行うことができる。
【０００２】
伝送制御プロトコル（「ＴＣＰ」）は、インターネットエンジニアリングタスクフォース（ＩＥＴＦ）のコメント要求（ＲＦＣ）７９３で定義されたインターネットの基本プロトコルの１つである。
【０００３】
順序が逆転した（後に送信されて先に受信された）セグメントは、ＴＣＰよりも上位の論理レイヤのアプリケーションに渡される前に適切な順序に再組み立てする必要があり、この順序が逆転したセグメントを許容することがＴＣＰの基本的な特徴である。したがって、ＴＣＰの通常の実施態様は、データの受信機が、いずれかの欠落したセグメントの受信を待つ間、順序が逆転したデータを再組み立てバッファに保持することを提供する。受信機は、順序が逆転して受信された各セグメントに対する受信確認応答メッセージであって、有効に受信された最後のシーケンス番号（ＳｅｑＮｏ）を示す受信確認応答（「ＡＣＫ」）メッセージを送信する。送信機側では、受信確認応答を受けていないセグメントが、再送バッファに保持される。送信において喪失されたセグメントは受信確認応答されないので、このような喪失されたセグメントを送信機がこのプロセスにより素早く再送できる。
【背景技術】
【０００４】
［発明の背景］
現代のデータ送信システムは、たとえば、データ注入タイプの攻撃等、ますます精巧になった攻撃を受けやすい。このような攻撃の原理は以下の通りである。真正なデータパケットが送信されるが、このデータパケットは、誤った値を有するように変更されたチェックサムパラメータを有する。それによって、そのデータパケットは、有効な状態であるにもかかわらず、受信機側で廃棄される。その後、第２のパケットが送信される。この第２のパケットは、同じパケット番号、すなわち、ＴＣＰプロトコルの観点から同じシーケンス番号を有するが、破損したペイロードを有する。この第２のパケットは、したがって、ネットワークの出口に設けられたプロテクションスキームを回避することができる。
【０００５】
敵からの損傷を防止するか又は少なくとも制限するために、多くの努力がなされてきた。これらの多くの努力は、ＩＤＳ（「侵入検知システム」）又はＩＰＳ（「侵入防止システム」）として知られているような解決策に結びついている。侵入検知システムは、悪意のあるアクティビティの存在を受信機に警告することしかできないという意味で、純粋な受動型であるのに対して、侵入防止システムは、インライン（すなわち、カットスルー）を動作させる。すなわち、侵入防止システムは、ネットワークトラフィックの中間ストリームを解析する。
【０００６】
２００５年８月の14th USENIX Security Symposiumの会報の６５〜８０ページにあるSarang Dharmapurikar及びVern Paxsonによる論文「Robust TCP Stream Reassembly In the Presence of Adversaries」から、標的にされた攻撃に対してロバストであるハードウェアベースの高速ＴＣＰ再組み立てメカニズムが知られている。このメカニズムは、さまざまなネットワーク解析システム、特に侵入防止システムを構築するのに使用されるモジュールとして機能することを目的としている。
【発明の開示】
【０００７】
［発明の概要］
本発明の目的は、デバイスをより秘匿させることによって、インラインコンテンツアナライザの攻撃に対する耐性をさらに高めることである。
【０００８】
本発明の目的は、ＴＣＰバイトストリームがそれらの宛先で再構築される前にＴＣＰバイトストリームのコンテンツをチェックできるＴＣＰバイトストリームアナライザを与える方法及びデバイスを提供することである。
【０００９】
したがって、本発明の第１の態様によれば、少なくとも１つのＴＣＰデータセグメントストリームをインラインコンテンツ解析にサブミットするための方法であって、
ＴＣＰ送出機とＴＣＰ受信機との間の所与のＴＣＰ接続に対応する第１のＴＣＰデータセグメントストリームをＴＣＰ送出機から受信すること、
ＴＣＰデータセグメントストリームから第１のバイトストリームを抽出するとともに再組み立てすること、
第１のバイトストリームから導出される第２のバイトストリームを、当該第２のバイトストリームに対してコンテンツ解析を実行するようになっているコンテンツアナライザに渡すこと、及び
コンテンツアナライザに渡されたバイトストリームと全体的に一致するバイトストリームコンテンツを有する第２のＴＣＰデータセグメントストリームをＴＣＰ受信機に中継すること
を含む、方法が提案されている。
【００１０】
本発明の実施の形態によれば、第２のＴＣＰデータセグメントストリームは、第１のＴＣＰデータセグメントストリームと同じ個数のデータセグメントを有し、第２のＴＣＰデータセグメントストリームのすべてのセグメントは、第１のＴＣＰデータセグメントストリームの対応するセグメントと同じサイズであり、同じヘッダを有する。
【００１１】
本発明の第２の態様は、少なくとも１つのＴＣＰセグメントストリームをインラインコンテンツ解析にサブミットするためのデバイスであって、第１の態様による方法を実施するための手段を備える、デバイスに関する。
【００１２】
本発明の第３の態様は、第１の態様による方法を実施するための１つ又は複数の命令シーケンスを保持するコンピュータ可読媒体を対象とする。
【００１３】
最後に、本発明の第４の態様は、プロセッサにとってアクセス可能であり、且つ、そのプロセッサによって実行されると、第１の態様による方法をそのプロセッサに実行させる、１つ又は複数記憶された命令シーケンスを備えるコンピュータプログラム製品に関する。
【００１４】
従来のＴＣＰリアセンブラと異なり、本発明の実施の形態によるデバイスは、同じ個数のデータセグメントを受信機へ転送し、各データセグメントは、送出機から受信されたセグメントと同じサイズであり、同じヘッダを有することに留意すべきである。新たに受信されたパケットデータがすでに受信されたデータと重なる場合には常に、転送されるセグメントに対する唯一可能な変更は、それらのコンテンツに関するものである。
【００１５】
添付図面の図で本発明を限定ではなく一例として説明する。添付図面では、同じ参照符号は同様の要素を指す。
【発明を実施するための最良の形態】
【００１６】
［好ましい実施形態の説明］
以下の説明は、たとえば、アプリケーションレベル、すなわちＴＣＰよりも上のレベルで行われる攻撃を検出するためにコンテンツアナライザにＴＣＰバイトストリームをサブミットするようになっているインラインデバイスの主要なアーキテクチャの原理を定義することを目的としている。これ以降、インラインデバイスは「ＴＣＰスヌーパ」又は「スヌーパ」と呼ばれる。
【００１７】
インラインバイトストリーム解析は、ＴＣＰ接続のエンドポイント間で動作する。各ＴＣＰ接続は、次の４つ組、すなわち、送信機のＩＰアドレス、送信機のＴＣＰポート番号、受信機のＩＰアドレス、受信機のＴＣＰポート番号、によって定義される。
【００１８】
スヌーパは、観測トラフィックに与える影響を最小にするように、すなわち、できる限り秘匿されるように設計され、且つ、さらに、標的にされ得る攻撃に対して耐性を有するように設計される。
【００１９】
解析される情報及び保護されるアプリケーションは、上位のネットワークレイヤ、すなわち、ＩＳＯモデル（「国際標準化機構」）のレイヤスタックのレイヤ４（すなわち、トランスポートレイヤ）よりも上のレイヤに存在する。レイヤ４から情報を取り出すには、特にＴＣＰが必要とされる場合に、コストがかかる。本発明の実施形態の基礎となるアイデアは、したがって、レイヤ４までの処理をレイヤ４よりも上の処理から切り離すことである。以下では、インターネットプロトコルスタックのレイヤ４までの部分をデータプレーンと呼ぶ一方、レイヤ４よりも上の部分をアプリケーションプレーンと呼ぶ。
【００２０】
攻撃は、両方のプレーンで行われる可能性があり、サービスの保護には、これらの２つのプレーンにわたるトラフィック解析及び衛生設備が必要とされる。さらに、標的にされた攻撃に対する耐性だけでなく、アプリケーションプレーン処理の信頼できるソースも提供する効率的でロバストなデータプレーン処理を実施しなければならない。
【００２１】
この設備は、あらゆる所与のＴＣＰ接続のすべてのトラフィックを観察できるように、ネットワークの入り口ポイント又は出口ポイントに配置することができる。（入り口における）ネットワークに入るすべてのトラフィックの衛生化、又は（出口における）特定のサービス若しくはアプリケーションの保護の２つのタイプの介入を可能な限り行うことができる。解析／変更機能のロケーションは、その実施に影響を与える。
【００２２】
前述のコンテンツ解析の内容の説明及び攻撃方法の説明を取り扱うことはできるが、これらの説明は、本発明の範囲を超えている。したがって、本説明は、スヌーパの実施態様及びオペレーションに焦点を当てる。
【００２３】
ＴＣＰ再組み立て
観察されるＴＣＰ接続が、ポート番号及びＩＰアドレス等の特定の情報に基づいて選択される。正確なスヌーピングを実行するため、すなわち、両方の接続端の間で交換されるデータとまさに同じデータにアクセスできるようにするために、ＴＣＰ接続の確立及びティアダウンのメッセージ交換が追跡され、それらの正確さがチェックされる。
【００２４】
図１を参照すると、ＴＣＰスヌーパ１００の機能は、ＴＣＰバイトストリームアナライザ２００に、再構成されるＴＣＰバイトストリームを供給することである。アナライザ２００は、ＴＣＰバイトストリームがその宛先で再構成される前に、ＴＣＰバイトストリームのコンテンツをチェックし、次に、疑わしいコンテンツが検出される場合に、ＴＣＰセグメントストリームに作用することを決定することができる。ＴＣＰバイトストリームアナライザ２００は、このように、ＴＣＰ接続のエンドポイント間に挿入されることができる。ＴＣＰスヌーパ１００は、両方向のＴＣＰ接続上を通過するデータ、すなわち、ＴＣＰデータセグメント及び受信確認応答（ＴＣＰ  ＡＣＫ又はＡＣＫ）を入力として取り込む。
【００２５】
単純且つ簡潔にするために、ここでは、一方向のＴＣＰ接続のみを処理する時のスヌーパ１００のオペレーションを説明することにする。換言すれば、図１に示すように、スヌーパは、一方向（左から右へ）のデータセグメントのみ及び逆方向（右から左へ）の受信確認応答のみを処理するとみなす。しかしながら、実際には、スヌーパは、両方向のＴＣＰ接続を処理する。これは、スヌーパが両方向のＴＣＰ接続を処理し、両方向の対応する受信確認応答も同様に処理することを意味する。その上、ＴＣＰスヌーパは、重要な個数のＴＣＰ接続、たとえば、ネットワークの入り口と出口との間の数万個のＴＣＰ接続をハンドリングするように設計されていることは言うまでもない。
【００２６】
ＴＣＰスヌーパの基本的な特徴は次の通りである。
ＴＣＰスヌーパは、ＴＣＰのエンドツーエンドの振る舞いに対してできる限り動的にトランスペアレントである。
スヌーパによってコンテンツアナライザに提供されるバイトストリームコンテンツは、全体的にコヒーレントである。すなわち、このバイトストリームコンテンツは、受信エンドポイントへ配信されるバイトストリームコンテンツと一致している。
【００２７】
動的なトランスペアレンシ
あらゆる所与のＴＣＰ接続について、ＴＣＰスヌーパは、両方の接続エンドポイントで実施されるＴＣＰ輻輳制御及びエラー回復メカニズムの中断も変更もしないようになっている。
【００２８】
ＡＣＫクロッキングメカニズムは中断されない。その目的のために、スヌーパによって受信されたセグメントはすべて、できるだけ短い遅延で、且つ、受信された順序と同じ順序で転送される。同様に、ＡＣＫもトランスペアレントに転送される。すなわち、ＡＣＫは、スヌーパによって受信されたものと同様であり、且つ、大幅な遅延が追加されることなく転送される。
【００２９】
これらの備えは、いくつかの利点を提供する。すなわち：
スヌーパは、できる限り秘匿され続ける。
ＴＣＰ性能劣化が回避される。及び
ボーガスな実施態様を含めて、「Ｔａｈｏｅ」、「Ｒｅｎｏ」［ＲＦＣ２５８１］、「Ｎｅｗ−Ｒｅｎｏ」［ＲＦＣ２５８２］［ＲＦＣ３７８２］、ＳＡＣＫ（選択的ＡＣＫ）［ＲＦＣ２０１８］、送信制限（Limited Transmit）［ＲＦＣ３０４２］等のすべてのＴＣＰフレーバ（TCP flavor）がサポートされるか又は許容される。
【００３０】
セマンティックコヒーレンシ（semantic coherency）
受信機の振る舞いに対して１つの仮定が行われる。すなわち、受信機は、受信データが再配列されない限り受信データの処理を開始しない。
【００３１】
順序が逆転したセグメント、すなわち、非連続セグメント又は再配列されていないセグメントが受信されても、コンテンツ解析は、依然として、再配列されたデータ又は部分的に再配列されたデータに対して実行される。
【００３２】
（再送又は欠陥／悪意のあるインプリメンテーションにより）再組み立てバッファにすでに記憶されたデータと重なっているデータを含むセグメントが受信された時は常に、その新しく受信されたデータは無視され、スヌーパの再組み立てバッファにすでに存在するデータによって置き換えられる。これは、（ＡＣＫが受信機と送信機との間で喪失されない時は常に）受信機によって通知された受信機のウィンドウ状態に従って再組み立てバッファの境界を維持することにより達成される。
【００３３】
そうすることによって、エンド受信機により受信されたデータは、スヌーパによりアナライザに提供されるデータとの一致を維持する。
【００３４】
一般的なアーキテクチャ及びオペレーションの原理
図２のブロック図は、本発明の実施形態によるＴＣＰスヌーパの一般的なアーキテクチャ及びオペレーションの原理を示している。
【００３５】
セグメント及びＡＣＫは、再組み立てバッファ管理ユニット１１０によって使用される。再組み立てバッファ管理ユニット１１０は、これらのパケットによって運ばれた情報を利用して、ＴＣＰ接続ごとに再組み立てバッファを保持する。また、受信セグメントは、セグメント記述子キュー１２０にも供給される。セグメント記述子キュー１２０は、さらに中継するためにパケット受信オーダを実施する。アナライザコントローラ１３０は、再組み立てバッファマネージャ１１０のステータスに基づいて、コンテンツアナライザの起動を制御する。また、アナライザコントローラ１３０は、再組み立てバッファマネージャ１１０及びコンテンツアナライザ２００によって提供された情報に基づいて、セグメント送信ユニット１４０によるセグメントの中継も管理する。ユニット１４０は、再組み立てバッファマネージャ１１０及びセグメント記述子キュー１２０からデータを受信する。スヌーパによって受信されたＡＣＫは、遅延なしでそれらの受信エンドポイントへ転送される。
【００３６】
セグメント記述子キュー１２０のオペレーションは以下の通りである。セグメントがスヌーパにより受信されて受け付けられると、そのセグメントの記述子が作成されて、対応するＴＣＰ接続のキューに追加される。各ＴＣＰ接続は、セグメントによって運ばれるＩＰアドレス及びポート番号から導出される異なった識別子を有する。セグメント記述子は、そのセグメントに特有のＴＣＰ情報及びＩＰ情報を含む。すなわち、ＩＰヘッダ（ＩＰオプションは無視される）の最初の２つの３２ビットワードと、チェックサム及びポート番号を除くＴＣＰヘッダ全体とを含む。ＴＣＰオプションは、無視することはできず、最大で４４バイトに達し得る（その理由は、たとえば、セグメントがデータ及びＳＡＣＫ、すなわち選択的ＡＣＫの両方を搬送する場合があるからである）。そのすべての情報を収めるには、６４バイトで十分であるが、リンク情報は、別の構造体に保持してもよい。
【００３７】
以下に与える表１は、標準的なＩＰｖ４及びＴＣＰのヘッダを示している一方、表２は、セグメント記述子キュー１２０に保持される、コンパクト化された６４バイトセグメント記述子を示している。
【００３８】
【表１】
2007336551.tif 000003
【００３９】
【表２】
2007336551.tif 000004
【００４０】
セグメントヘッダに最初に存在する以下のフィールドは、記述子を圧縮するために無視することができる。
ＩＰアドレス。ＩＰアドレスは、ＴＣＰ接続の識別子から再生成できるからである。
ＩＰフラグメンテーション情報。ＩＰデータグラムのデフラグメンテーションは、デフラグメントされたパケットをスヌーパへ配信する専用モジュールによって実行される。
ＩＰ  ＴＴＬ。これは、セグメントを中継する時に、注意深く選ばれた任意の値によって置き換えることができる。
ＩＰプロトコル。ＩＰプロトコルは、（ＩＰプロトコルがＴＣＰであることを考えると）一定の値であるからである。
ＩＰヘッダチェックサム。これは、セグメントの中継の実行中に再生成することができる。
ＴＣＰポート番号。これも、ＴＣＰ接続の識別子から再生成することができる。
ＴＣＰチェックサム。これは、セグメントの中継の実行中に再生成することができる。
【００４１】
この記述子は、セグメントを中継する時に、完全なＴＣＰ及びＩＰｖ４のヘッダを生成するのに使用することができる。キューは、送信オペレーション時に、セグメントの到着順序でセグメントを転送するのに使用される。セグメントを転送する時、対応する記述子は解放される。
【００４２】
次に、図３を参照して、再組み立てバッファのオペレーションをより詳細に説明する。
【００４３】
セグメントがスヌーパによって受信されると、そのペイロードは、そのシーケンス番号に従って、対応する接続の再組み立てバッファに挿入される。再組み立てバッファの下位境界（ＬｏｗＢｕｆｆＢｏｕｎｄと呼ばれる）は、セグメントの方向とは逆の方向のＡＣＫによって搬送されたＡＣＫシーケンス番号を解釈することによって保持される。下位境界は、最初に、ＴＣＰ接続確立ハンドシェークの期間中に交渉された値に設定される。
【００４４】
再組み立てバッファの上位境界（ＵｐＢｕｆｆＢｏｕｎｄと呼ばれる）は、現在のＵｐＢｕｆｆＢｏｕｎｄ、並びに、最新の受信ＡＣＫによって運ばれたＡＣＫシーケンス番号とウィンドウサイズ情報との合計の最大値である。スヌーパがＴＣＰ送信機の下流に配置されていることを考えると、ＵｐＢｕｆｆＢｏｕｎｄを計算するこの方法によって、そのＵｐＢｕｆｆＢｏｕｎｄが送信機のものと常に一致することが保証される。
【００４５】
再組み立てバッファは、一組の、個々に固定されたサイズを有するｎ個のメモリブロック（複数可）３１０から成る。メモリブロック３１０は、すべてのＴＣＰ接続の間で共有されるメモリブロックのプールから得られる。メモリブロックは、所与の接続に割り当てられる。すなわち、メモリブロックは、セグメントの受信時に以下に示すようにその接続の再組み立てバッファに挿入又は追加される。すなわち：
セグメントによってカバーされるシーケンス番号の範囲が、再組み立てバッファのシーケンス番号の範囲に属し、すなわち、［ＬｏｗＢｕｆｆＢｏｕｎｄ，ＵｐＢｕｆｆＢｏｕｎｄ］内に含まれ、
セグメントによってカバーされるシーケンス番号の範囲が、その接続の再組み立てバッファにすでに割り当てられているメモリブロック（複数可）によってカバーされるシーケンス番号の範囲（複数可）に完全には含まれず、且つ、
その接続の再組み立てバッファにすでに割り当てられている最大ｎ−１個のメモリブロックが存在する
ように行われる。
【００４６】
各接続について、ｎエントリーポインタテーブル３２０が、再組み立てバッファを構成するメモリブロックへのポインタを保持するのに使用される。このポインタテーブルは、ＴＣＰウィンドウ全体をカバーするようになっている。これは、ポインタの個数がＴＣＰウィンドウのサイズをメモリブロックのサイズで割ったものに等しいことを意味する（上記メモリブロックは固定サイズである）。ポインタテーブルは、パケットシーケンス番号に関して連続である。
【００４７】
バイトストリーム及び解析が進行すると、メモリブロックは解放されて、メモリブロックのプールへ戻される。
【００４８】
各再組み立てバッファには、再組み立てバッファのホールについての情報を記憶するデータ構造体が関連付けられる。ホールを取り囲むデータは、以下ではエッジと呼ばれる。上位エッジは、それらの上位エッジが取り囲むホールと比較して大きなシーケンス番号を有し、下位エッジは、それらの下位エッジが取り囲むホールと比較して小さなシーケンス番号を有する。
【００４９】
パケットは可変サイズであるので、メモリギャップが形成される。それにもかかわらず、上述したようなポインタテーブルを使用することによって、必要となる連鎖リストを管理することなく受信データの再組み立てを管理することが可能になる。
【００５０】
図４は、再組み立てバッファのハンドリングを示している。再組み立てバッファのホール記録は、以下でより詳細にさらに説明するように、データをいつコンテンツアナライザに渡さなければならないかを判断するのに使用することができる。
【００５１】
このバッファのホール記録によって、再組み立てバッファごとに最大で所与のｋ個のホールまでを追跡することが可能になる。ここで、ｋは１よりも大きな整数である。図４には３つのホールが表されている。図４において、４つの長方形は、シーケンス番号によって並べられた受信データを示している。この受信データは、ＬｏｗＢｕｆｆＢｏｕｎｄとＵｐＢｕｆｆＢｏｕｎｄとの間のバッファに記憶されている。下位エッジが最小のシーケンス番号を有するホールは、以下では最下位ホールと呼ばれる。
【００５２】
次に、スヌーパによって実行されるアナライザ制御及びパケットハンドリングを説明する。
【００５３】
アナライザ制御
アナライザ２００とスヌーパ１００との間のデータ転送に利用可能な帯域幅に応じて２つのポリシーが可能である。その帯域幅がネットワークリンク帯域幅と同じ大きさである場合、データは、受信される時にアナライザへ渡される方がより好ましく、アナライザは、再組み立てバッファのコピーを保持することを強制される（ポリシー１）。一方、両方のエンティティの間の帯域幅がリンクの帯域幅よりもはるかに大きい場合、連続したデータ、すなわち、最初に遭遇するホールまでのデータのみをアナライザに渡すことに本質があるもう１つの転送ポリシーを適用することが可能である（ポリシー２）。
【００５４】
いずれの場合も、アナライザに渡される最も大きなデータシーケンス番号を示すポインタ（ＡｎａｌｙｓｉｓＰｏｉｎｔｅｒと呼ばれる）が保持される。このポインタも、上述した図４の図解に見られる。
【００５５】
ポリシー１を適用する場合、アナライザは、解析が行われると、どのセグメントを再送できるかを示すことを全体的に担当する。
【００５６】
ポリシー２が適用される場合、或るホールが満たされると、そのホールのデータ及び次のホールまでの連続したデータがアナライザに渡される。しかし、あまりにも長いデータバーストがアナライザとスヌーパとの間のリンクをあまりにも長い間占有しないように、転送に使用される帯域幅は分割されなければならない場合がある。そのリンクへのアクセスを定期的に調停するスケジューラを実装することができる。
【００５７】
１つ又は複数の基準を使用して、データがコンテンツアナライザへ送信される接続をスケジューリングすることができる。この１つ又は複数の基準は、
アナライザにまだ渡されていない、再組み立てバッファに存在するバイトの個数、
最も古く記憶されたセグメント（＝中継されることを待っている最初のセグメント）を有する接続、又は
ＡｎａｌｙｓｉｓＰｏｉｎｔｅｒの現在の値よりも大きな最下位ホールが、すべての接続にわたって最も近時である接続（この基準は、自身のホールを最も迅速に満たす接続、すなわち、長く生存するホールを作成することによって解析プロセスを低速化しようと試みる敵により中断されない短いＲＴＴ、有効なＳＡＣＫに有利に働く）
である。
【００５８】
スケジューリングの目的は、接続トラフィックシェープの変更をできるだけ少なくし、すなわち、データを受信するとデータをできるだけ早く解析できるようにし、あまりにも多くのデータが解析を待っている接続を促進しないことである。
【００５９】
解析が実行されると、コンテンツアナライザ２００は、解析が完了したシーケンス番号の範囲を指定する情報を返す。スヌーパ１００は、次に、シーケンス番号がその範囲に正確に含まれるセグメントを中継する。
【００６０】
パケットハンドリング
セグメントは、アナライザ２００によって提供されるシーケンス番号の範囲情報に基づいて転送される。セグメントは、それらの記述子がセグメント記述子キューに現れる順序で転送され、それらのシーケンス番号がシーケンス番号の範囲に含まれる場合に、転送を許可される。
【００６１】
セグメントがスヌーパによって転送されると、対応するセグメント記述子が参照されて、そのセグメントのシーケンス番号及び長さが取り出される。この情報は、次に、再組み立てバッファからペイロードを取り出すのに使用され、ペイロードは、次に、残りの記述子情報と融合されて、セグメントのＩＰエンベロープ及びＴＣＰエンベロープが構築される。記述子キューを調べる時に、転送プロセスは、中継されるセグメントのシーケンス番号が前に中継されたセグメントよりも大きいことをチェックする。そうである場合、セグメントのシーケンス番号が増加していることを条件に、中継プロセスは、キューの消費及びセグメントの中継を続ける。前に中継されたセグメントよりも小さなセグメント番号を有する記述子が見つかる時は常に、以下の２つの代替案のいずれか一方が可能である。すなわち：
セグメントがアナライザによってすでに処理された範囲に属している場合、中継プロセスが継続する。この場合、再組み立てバッファから読み出された対応するペイロードがまだ利用可能であるとき、そのペイロードとともにセグメントが中継される。利用可能でないときは、セグメントは、そのまま中継される。又は、
セグメントのコンテンツ（ペイロード）が、まだ解析されていない範囲に含まれるか、又はその範囲を含む場合、中継プロセスは、コンテンツアナライザによって再び明示的にトリガされるまで停止される。
【００６２】
こうすることによって、中継プロセスは、ＡＣＫクロッキングメカニズムが中断されないことを保証し、特に、複製ＡＣＫの受信に基づいてＴＣＰ送信機で「高速再送」アルゴリズムが動作できることを保証する（複製ＡＣＫは、ホールの後に続くセグメントの受信時に受信機によって送出される）。
【００６３】
中継メカニズムによってこのように提供されるもう１つの特徴は、スヌーパから出て行くすべてのセグメントのコンテンツが、体系的に解析されているか、又は少なくとも再組み立てバッファに記憶されているということである。
【００６４】
セグメントの受信
セグメントが受信されると、そのシーケンス番号が、再組み立てバッファの境界（ＬｏｗＢｕｆｆＢｏｕｎｄ及びＵｐＢｕｆｆＢｏｕｎｄ）と照合される。セグメントのバイト範囲が、再組み立てバッファの境界内にある場合、記述子が作成されて、さらに転送するために記述子のキューに追加される。再組み立てホールバッファ記録は、場合によっては更新され、再組み立てバッファは、セグメントのペイロードを用いて更新される。
【００６５】
セグメントのペイロードは、そのセグメントのシーケンス番号に従って、対応する接続の再組み立てバッファに挿入される。
【００６６】
ＵｐＢｕｆｆＢｏｕｎｄの値よりも大きなシーケンス番号を有する受信セグメントは、好ましくは廃棄される。この理由は、（ｉ）ＡＣＫの受信時、及び（ｉｉ）新たなセグメントが、送信機によって受信された最新のＡＣＫによって通知されたウィンドウ（ＡＣＫシーケンス番号＋ウィンドウサイズ）に属する場合にのみに、ＴＣＰ送信機が新たなセグメントを送出することを許可されているからである。このウィンドウの値は、現在のＵｐＢｕｆｆＢｏｕｎｄよりも小さい場合がある（上記に与えたＵｐＢｕｆｆＢｏｕｎｄ計算の説明を参照）。
【００６７】
スヌーパによって受信された、ＬｏｗＢｕｆｆＢｏｕｎｄよりも小さなシーケンス番号、すなわち、最新の受信ＡＣＫよりも小さなシーケンス番号を有するセグメントは、好ましくは転送される。すなわち、それらのセグメントは、エンド受信機によって処理されるべきではなく、ＡＣＫがスヌーパと送信機との間で喪失された場合、ほとんど、これらの「ウィンドウ未満（below-window）」のセグメントによって、受信機による最新のＡＣＫの送出がトリガされる。再組み立てバッファの下部境界が、ＬｏｗＢｕｆｆＢｏｕｎｄによって指し示されているメモリブロックに依然として記憶されているバイト範囲に「ウィンドウ未満」のセグメントのペイロードが対応するようなものである場合、セグメントは、そのペイロードと共に転送される。
【００６８】
ペイロードを再組み立てバッファに挿入する時、新しく受信されたペイロードの重ならない部分を保持することによって、すなわち、ペイロードの再組み立てバッファのホール（複数可）を満たす部分のみを保持することによって、重なる部分が正常化（normalize）される。１つのペイロードがいくつかのホールを満たすことが可能な場合も考慮される。
【００６９】
このセグメントの正常化及び挿入の方式を図５によって示す。図５において、新たなセグメントで受信されたペイロードの、再組み立てバッファのホールを満たす部分は、破線により示されている。新たなセグメントのペイロードの残りの部分は、重なるデータを構成する。
【００７０】
セグメントが受信されると、以下の擬似コードにより記載されたアルゴリズムに従って、オペレーションが実行される。
if seqnum > UpBuffBound
セグメントを廃棄する
else
セグメント記述子を作成する
記述子をキューに追加する
if LowBuffBound < seqnum < UpBuffBound
ペイロードを正常化してバッファに挿入する
ホール記録を更新する
if セグメントは最下位のホールを満たす
アナライザを起動する
endif
endif
endif
【００７１】
受信確認応答の受信
スヌーパによって利用される情報は、ＡＣＫシーケンス番号、すなわち、エンド受信機によってまだ処理されていない最初のバイトのシーケンス番号である。アナライザの処理は、エンド受信機よりも進んでいる可能性がある。コンテンツアナライザは、ホールデータが最終的に受信された時に、そのホールデータの解析を実行可能とするのに必要な各ホールの下位エッジのポインタを保持する。ＡＣＫが、受信されていない最初のセグメントのシーケンス番号を常に示し、この最初のセグメントがホールに対応し得るので、再組み立てバッファの下位境界は、ＡＣＫシーケンス番号と最下位ホールの下位エッジのポインタとの間で選ばれる最小バイトシーケンス番号として定義されなければならない。この最下位ホールの下位エッジは、下位解析境界（ＡｎａｌｙｓｉｓＰｏｉｎｔｅｒ）と呼ばれる。
【００７２】
ＡＣＫが受信されると、以下の擬似コードによって反映されるオペレーションが実行される。条件ＬｏｗＢｕｆｆＢｏｕｎｄ＜ＡｎａｌｙｓｉｓＰｏｉｎｔｅｒが常に満たされるとして：
if seqnum < LowBuffBound
何もしない
if AnalysisPointer > seqnum > LowBuffBound
LowBuffBound = seqnum
再組み立てバッファを更新する
ホール記録を更新する
if seqnum > AnalysisPointer
再組み立てバッファがＴＣＰ受信機と同期していないこと（エラー）をアナライザに示す
【００７３】
本発明は、ハードウェア、ソフトウェア、又は、ハードウェアとソフトウェアとの組み合わせで実施することができる。本明細書で説明した機能を実行するように適合されたものならば、どのプロセッサ、コントローラ、又は他の装置も適している。
【００７４】
また、本発明は、コンピュータプログラム製品に組み込むこともできる。コンピュータプログラム製品は、本明細書で説明した方法の実施を可能にするすべての特徴を含み、情報処理システムにロードされると、これらの方法を実行することができる。本文脈におけるコンピュータプログラム手段又はコンピュータプログラムは、情報処理能力を有するシステムに特定の機能を直接実行させるか、又は、次のａ）別の言語への変換のいずれか又は両方の後に実行させることを目的とした一組の命令の、任意の言語、コード、又は表記によるいずれの表現も意味する。このようなコンピュータプログラムは、コンピュータ可読媒体又は機械可読媒体に記憶することができる。この媒体は、データ、命令、メッセージ又はメッセージパケット、及び他の機械可読情報を当該媒体から読み出すことを可能にする。コンピュータ可読媒体又は機械可読媒体は、ＲＯＭ、フラッシュメモリ、ディスクドライブメモリ、ＣＤ−ＲＯＭ、及び他の永久ストレージ等の不揮発性メモリを含んでもよい。加えて、コンピュータ可読媒体又は機械可読媒体は、たとえば、ＲＡＭ、バッファ、キャッシュメモリ、及びネットワーク回路等の揮発性ストレージも含んでもよい。さらに、コンピュータ可読媒体又は機械可読媒体には、有線ネットワーク又は無線ネットワークを含めて、デバイスがコンピュータ可読情報又は機械可読情報を読み出すことを可能にする、ネットワークリンク及び／又はネットワークインターフェース等の一時的な状態の媒体のコンピュータ可読情報又は機械可読情報も含まれ得る。
【００７５】
本発明の好ましい実施形態と現在考えられるものを図示して説明してきたが、本発明の真の範囲から逸脱することなく、さまざまな他の変更を行うことができ、均等物に置き換えることができることが当業者に理解されよう。加えて、本明細書で説明した中心となる発明の概念から逸脱することなく、特定の状況を本発明の教示に適合させるために多くの変更を行うこともできる。さらに、本発明の一実施形態は、上述した特徴のすべてを含むとは限らない。したがって、本発明は開示された特定の実施形態に限定されるものでないことが意図されており、本発明は、添付の特許請求の範囲内に含まれるすべての実施形態を含むことが意図されている。
【図面の簡単な説明】
【００７６】
【図１】解析されるトラフィックに関するＴＣＰスヌーパの実施態様を示す図である。
【図２】スヌーパアーキテクチャを示すブロック図である。
【図３】再組み立てバッファの管理を示す図である。
【図４】再組み立てバッファのハンドリングを示す図である。
【図５】セグメントの正常化及び挿入を示す図である。
【図１】
2007336551.tif 000005
【図２】
2007336551.tif 000006
【図３】
2007336551.tif 000007
【図４】
2007336551.tif 000008
【図５】
2007336551.tif 000009
【外国語明細書】
2007336551.tif 000010
2007336551.tif 000011
2007336551.tif 000012
2007336551.tif 000013
2007336551.tif 000014
2007336551.tif 000015
2007336551.tif 000016
2007336551.tif 000017
2007336551.tif 000018
2007336551.tif 000019
2007336551.tif 000020
2007336551.tif 000021
2007336551.tif 000022
2007336551.tif 000023
2007336551.tif 000024
2007336551.tif 000025
2007336551.tif 000026
2007336551.tif 000027
2007336551.tif 000028
2007336551.tif 000029
2007336551.tif 000030
2007336551.tif 000031
2007336551.tif 000032
2007336551.tif 000033
2007336551.tif 000034
2007336551.tif 000035
2007336551.tif 000036