(54)【発明の名称】少なくとも1つのTCPデータセグメントストリームをインラインコンテンツ解析にサブミットするための方法及びデバイス、その方法を実施するための1つ又は複数の命令シーケンスを保持するコンピュータ可読媒体、並びにコンピュータプログラム製品
【文献】
SARANG DHARMAPURIKAN, VERN PAXSON,Robust TCP Stream Reassembly In the Presence of Adversaries,Proceedings of the 14th USENIX SECURITY SYMPOSIUM,2005年 8月,URL,http://www.icir.org/vern/papers/TcpReassembly/TcpReassembly.pdf#search=%22robust%20tcp%20stream%20reassembly%20adversaries%22
(58)【調査した分野】(Int.Cl.,DB名)
データセグメント記述子が、そのデータセグメントに特有のTCP情報及びIP情報であって、該データセグメントを前記第2のTCPデータセグメントストリームの一部として中継する時に完全なTCPヘッダを生成するのに使用できるTCP情報を含む、請求項1記載の方法。
受信データセグメントは、それらの各データセグメント記述子が前記データセグメント記述子キューに現れる順序で、前記第2のTCPデータセグメントストリームの一部として中継される、請求項1〜4のいずれか一項に記載の方法。
中継される現在のデータセグメントの前記シーケンス番号が、前に中継されたデータセグメントの前記シーケンス番号よりも大きいことが、前記データセグメント記述子キューを調べることによってチェックされ、
前記前に中継されたセグメントの前記シーケンス番号よりも小さな前記シーケンス番号を有するデータセグメント記述子が見つかるときは常に、
前記現在のデータセグメントのコンテンツが前記コンテンツアナライザによりすでに処理された範囲に属する場合には、前記現在のデータセグメントは中継され、
そうでない場合には、前記現在のデータセグメントの中継プロセスは、前記コンテンツアナライザによって再びトリガされるまで停止される、請求項5に記載の方法。
メモリブロックは、所与の接続に割り当てられ、すなわち、セグメントの受信時に該接続の再組み立てバッファに挿入又は追加され、その割り当ては、以下の通り、すなわち:
前記セグメントによってカバーされる前記シーケンス番号の範囲が、前記再組み立てバッファの前記下位境界及び前記上位境界によって定義される前記再組み立てバッファのシーケンス番号の範囲に属し、
前記セグメントによってカバーされる前記シーケンス番号の範囲が、前記接続の再組み立てバッファにすでに割り当てられている前記メモリブロックによってカバーされる前記シーケンス番号の範囲に完全には含まれず、且つ、
前記接続の再組み立てバッファにすでに割り当てられている最大n−1個のメモリブロックが存在する
ように行われる、請求項7に記載の方法。
各接続について、nエントリーポインタテーブル(320)が、前記再組み立てバッファを構成する前記メモリブロックへのポインタを保持するのに使用される、請求項7又は8に記載の方法。
前記再組み立てバッファのホールについての情報を記憶するデータ構造体が、各再組み立てバッファに関連付けられ、前記ホールは、前記再組み立てバッファにおいてセグメントが記憶されていないシーケンス番号の区間である、請求項1〜9のいずれか一項に記載の方法。
請求項1〜15のいずれか一項に記載の方法を実施するための手段を備える、少なくとも1つのTCPセグメントストリームをインラインコンテンツ解析にサブミットするためのデバイス(100)。
【発明を実施するための形態】
【0018】
[好ましい実施形態の説明]
以下の説明は、たとえば、アプリケーションレベル、すなわちTCPよりも上のレベルで行われる攻撃を検出するためにコンテンツアナライザにTCPバイトストリームをサブミットするようになっているインラインデバイスの主要なアーキテクチャの原理を定義することを目的としている。これ以降、インラインデバイスは「TCPスヌーパ」又は「スヌーパ」と呼ばれる。
【0019】
インラインバイトストリーム解析は、TCP接続のエンドポイント間で動作する。各TCP接続は、次の4つ組、すなわち、送信機のIPアドレス、送信機のTCPポート番号、受信機のIPアドレス、受信機のTCPポート番号、によって定義される。
【0020】
スヌーパは、観測トラフィックに与える影響を最小にするように、すなわち、できる限り秘匿されるように設計され、且つ、さらに、標的にされ得る攻撃に対して耐性を有するように設計される。
【0021】
解析される情報及び保護されるアプリケーションは、上位のネットワークレイヤ、すなわち、ISOモデル(「国際標準化機構」)のレイヤスタックのレイヤ4(すなわち、トランスポートレイヤ)よりも上のレイヤに存在する。レイヤ4から情報を取り出すには、特にTCPが必要とされる場合に、コストがかかる。本発明の実施形態の基礎となるアイデアは、したがって、レイヤ4までの処理をレイヤ4よりも上の処理から切り離すことである。以下では、インターネットプロトコルスタックのレイヤ4までの部分をデータプレーンと呼ぶ一方、レイヤ4よりも上の部分をアプリケーションプレーンと呼ぶ。
【0022】
攻撃は、両方のプレーンで行われる可能性があり、サービスの保護には、これらの2つのプレーンにわたるトラフィック解析及び衛生設備が必要とされる。さらに、標的にされた攻撃に対する耐性だけでなく、アプリケーションプレーン処理の信頼できるソースも提供する効率的でロバストなデータプレーン処理を実施しなければならない。
【0023】
この設備は、あらゆる所与のTCP接続のすべてのトラフィックを観察できるように、ネットワークの入り口ポイント又は出口ポイントに配置することができる。(入り口における)ネットワークに入るすべてのトラフィックの衛生化、又は(出口における)特定のサービス若しくはアプリケーションの保護の2つのタイプの介入を可能な限り行うことができる。解析/変更機能のロケーションは、その実施に影響を与える。
【0024】
前述のコンテンツ解析の内容の説明及び攻撃方法の説明を取り扱うことはできるが、これらの説明は、本発明の範囲を超えている。したがって、本説明は、スヌーパの実施態様及びオペレーションに焦点を当てる。
【0025】
TCP再組み立て
観察されるTCP接続が、ポート番号及びIPアドレス等の特定の情報に基づいて選択される。正確なスヌーピングを実行するため、すなわち、両方の接続端の間で交換されるデータとまさに同じデータにアクセスできるようにするために、TCP接続の確立及びティアダウンのメッセージ交換が追跡され、それらの正確さがチェックされる。
【0026】
図1を参照すると、TCPスヌーパ100の機能は、TCPバイトストリームアナライザ200に、再構成されるTCPバイトストリームを供給することである。アナライザ200は、TCPバイトストリームがその宛先で再構成される前に、TCPバイトストリームのコンテンツをチェックし、次に、疑わしいコンテンツが検出される場合に、TCPセグメントストリームに作用することを決定することができる。TCPバイトストリームアナライザ200は、このように、TCP接続のエンドポイント間に挿入されることができる。TCPスヌーパ100は、両方向のTCP接続上を通過するデータ、すなわち、TCPデータセグメント及び受信確認応答(TCP ACK又はACK)を入力として取り込む。
【0027】
単純且つ簡潔にするために、ここでは、一方向のTCP接続のみを処理する時のスヌーパ100のオペレーションを説明することにする。換言すれば、
図1に示すように、スヌーパは、一方向(左から右へ)のデータセグメントのみ及び逆方向(右から左へ)の受信確認応答のみを処理するとみなす。しかしながら、実際には、スヌーパは、両方向のTCP接続を処理する。これは、スヌーパが両方向のTCP接続を処理し、両方向の対応する受信確認応答も同様に処理することを意味する。その上、TCPスヌーパは、重要な個数のTCP接続、たとえば、ネットワークの入り口と出口との間の数万個のTCP接続をハンドリングするように設計されていることは言うまでもない。
【0028】
TCPスヌーパの基本的な特徴は次の通りである。
TCPスヌーパは、TCPのエンドツーエンドの振る舞いに対してできる限り動的にトランスペアレントである。
スヌーパによってコンテンツアナライザに提供されるバイトストリームコンテンツは、全体的にコヒーレントである。すなわち、このバイトストリームコンテンツは、受信エンドポイントへ配信されるバイトストリームコンテンツと一致している。
【0029】
動的なトランスペアレンシ
あらゆる所与のTCP接続について、TCPスヌーパは、両方の接続エンドポイントで実施されるTCP輻輳制御及びエラー回復メカニズムの中断も変更もしないようになっている。
【0030】
ACKクロッキングメカニズムは中断されない。その目的のために、スヌーパによって受信されたセグメントはすべて、できるだけ短い遅延で、且つ、受信された順序と同じ順序で転送される。同様に、ACKもトランスペアレントに転送される。すなわち、ACKは、スヌーパによって受信されたものと同様であり、且つ、大幅な遅延が追加されることなく転送される。
【0031】
これらの備えは、いくつかの利点を提供する。すなわち:
スヌーパは、できる限り秘匿され続ける。
TCP性能劣化が回避される。及び
ボーガスな実施態様を含めて、「Tahoe」、「Reno」[RFC2581]、「New−Reno」[RFC2582][RFC3782]、SACK(選択的ACK)[RFC2018]、送信制限(Limited Transmit)[RFC3042]等のすべてのTCPフレーバ(TCP flavor)がサポートされるか又は許容される。
【0032】
セマンティックコヒーレンシ(semantic coherency)
受信機の振る舞いに対して1つの仮定が行われる。すなわち、受信機は、受信データが再配列されない限り受信データの処理を開始しない。
【0033】
順序が逆転したセグメント、すなわち、非連続セグメント又は再配列されていないセグメントが受信されても、コンテンツ解析は、依然として、再配列されたデータ又は部分的に再配列されたデータに対して実行される。
【0034】
(再送又は欠陥/悪意のあるインプリメンテーションにより)再組み立てバッファにすでに記憶されたデータと重なっているデータを含むセグメントが受信された時は常に、その新しく受信されたデータは無視され、スヌーパの再組み立てバッファにすでに存在するデータによって置き換えられる。これは、(ACKが受信機と送信機との間で喪失されない時は常に)受信機によって通知された受信機のウィンドウ状態に従って再組み立てバッファの境界を維持することにより達成される。
【0035】
そうすることによって、エンド受信機により受信されたデータは、スヌーパによりアナライザに提供されるデータとの一致を維持する。
【0036】
一般的なアーキテクチャ及びオペレーションの原理
図2のブロック図は、本発明の実施形態によるTCPスヌーパの一般的なアーキテクチャ及びオペレーションの原理を示している。
【0037】
セグメント及びACKは、再組み立てバッファ管理ユニット110によって使用される。再組み立てバッファ管理ユニット110は、これらのパケットによって運ばれた情報を利用して、TCP接続ごとに再組み立てバッファを保持する。また、受信セグメントは、セグメント記述子キュー120にも供給される。セグメント記述子キュー120は、さらに中継するためにパケット受信オーダを実施する。アナライザコントローラ130は、再組み立てバッファマネージャ110のステータスに基づいて、コンテンツアナライザの起動を制御する。また、アナライザコントローラ130は、再組み立てバッファマネージャ110及びコンテンツアナライザ200によって提供された情報に基づいて、セグメント送信ユニット140によるセグメントの中継も管理する。ユニット140は、再組み立てバッファマネージャ110及びセグメント記述子キュー120からデータを受信する。スヌーパによって受信されたACKは、遅延なしでそれらの受信エンドポイントへ転送される。
【0038】
セグメント記述子キュー120のオペレーションは以下の通りである。セグメントがスヌーパにより受信されて受け付けられると、そのセグメントの記述子が作成されて、対応するTCP接続のキューに追加される。各TCP接続は、セグメントによって運ばれるIPアドレス及びポート番号から導出される異なった識別子を有する。セグメント記述子は、そのセグメントに特有のTCP情報及びIP情報を含む。すなわち、IPヘッダ(IPオプションは無視される)の最初の2つの32ビットワードと、チェックサム及びポート番号を除くTCPヘッダ全体とを含む。TCPオプションは、無視することはできず、最大で44バイトに達し得る(その理由は、たとえば、セグメントがデータ及びSACK、すなわち選択的ACKの両方を搬送する場合があるからである)。そのすべての情報を収めるには、64バイトで十分であるが、リンク情報は、別の構造体に保持してもよい。
【0039】
以下に与える表1は、標準的なIPv4及びTCPのヘッダを示している一方、表2は、セグメント記述子キュー120に保持される、コンパクト化された64バイトセグメント記述子を示している。
【0042】
セグメントヘッダに最初に存在する以下のフィールドは、記述子を圧縮するために無視することができる。
IPアドレス。IPアドレスは、TCP接続の識別子から再生成できるからである。
IPフラグメンテーション情報。IPデータグラムのデフラグメンテーションは、デフラグメントされたパケットをスヌーパへ配信する専用モジュールによって実行される。
IP TTL。これは、セグメントを中継する時に、注意深く選ばれた任意の値によって置き換えることができる。
IPプロトコル。IPプロトコルは、(IPプロトコルがTCPであることを考えると)一定の値であるからである。
IPヘッダチェックサム。これは、セグメントの中継の実行中に再生成することができる。
TCPポート番号。これも、TCP接続の識別子から再生成することができる。
TCPチェックサム。これは、セグメントの中継の実行中に再生成することができる。
【0043】
この記述子は、セグメントを中継する時に、完全なTCP及びIPv4のヘッダを生成するのに使用することができる。キューは、送信オペレーション時に、セグメントの到着順序でセグメントを転送するのに使用される。セグメントを転送する時、対応する記述子は解放される。
【0044】
次に、
図3を参照して、再組み立てバッファのオペレーションをより詳細に説明する。
【0045】
セグメントがスヌーパによって受信されると、そのペイロードは、そのシーケンス番号に従って、対応する接続の再組み立てバッファに挿入される。再組み立てバッファの下位境界(LowBuffBoundと呼ばれる)は、セグメントの方向とは逆の方向のACKによって搬送されたACKシーケンス番号を解釈することによって保持される。下位境界は、最初に、TCP接続確立ハンドシェークの期間中に交渉された値に設定される。
【0046】
再組み立てバッファの上位境界(UpBuffBoundと呼ばれる)は、現在のUpBuffBound、並びに、最新の受信ACKによって運ばれたACKシーケンス番号とウィンドウサイズ情報との合計の最大値である。スヌーパがTCP送信機の下流に配置されていることを考えると、UpBuffBoundを計算するこの方法によって、そのUpBuffBoundが送信機のものと常に一致することが保証される。
【0047】
再組み立てバッファは、一組の、個々に固定されたサイズを有するn個のメモリブロック(複数可)310から成る。メモリブロック310は、すべてのTCP接続の間で共有されるメモリブロックのプールから得られる。メモリブロックは、所与の接続に割り当てられる。すなわち、メモリブロックは、セグメントの受信時に以下に示すようにその接続の再組み立てバッファに挿入又は追加される。すなわち:
セグメントによってカバーされるシーケンス番号の範囲が、再組み立てバッファのシーケンス番号の範囲に属し、すなわち、[LowBuffBound,UpBuffBound]内に含まれ、
セグメントによってカバーされるシーケンス番号の範囲が、その接続の再組み立てバッファにすでに割り当てられているメモリブロック(複数可)によってカバーされるシーケンス番号の範囲(複数可)に完全には含まれず、且つ、
その接続の再組み立てバッファにすでに割り当てられている最大n−1個のメモリブロックが存在する
ように行われる。
【0048】
各接続について、nエントリーポインタテーブル320が、再組み立てバッファを構成するメモリブロックへのポインタを保持するのに使用される。このポインタテーブルは、TCPウィンドウ全体をカバーするようになっている。これは、ポインタの個数がTCPウィンドウのサイズをメモリブロックのサイズで割ったものに等しいことを意味する(上記メモリブロックは固定サイズである)。ポインタテーブルは、パケットシーケンス番号に関して連続である。
【0049】
バイトストリーム及び解析が進行すると、メモリブロックは解放されて、メモリブロックのプールへ戻される。
【0050】
各再組み立てバッファには、再組み立てバッファのホールについての情報を記憶するデータ構造体が関連付けられる。ホールを取り囲むデータは、以下ではエッジと呼ばれる。上位エッジは、それらの上位エッジが取り囲むホールと比較して大きなシーケンス番号を有し、下位エッジは、それらの下位エッジが取り囲むホールと比較して小さなシーケンス番号を有する。
【0051】
パケットは可変サイズであるので、メモリギャップが形成される。それにもかかわらず、上述したようなポインタテーブルを使用することによって、必要となる連鎖リストを管理することなく受信データの再組み立てを管理することが可能になる。
【0052】
図4は、再組み立てバッファのハンドリングを示している。再組み立てバッファのホール記録は、以下でより詳細にさらに説明するように、データをいつコンテンツアナライザに渡さなければならないかを判断するのに使用することができる。
【0053】
このバッファのホール記録によって、再組み立てバッファごとに最大で所与のk個のホールまでを追跡することが可能になる。ここで、kは1よりも大きな整数である。
図4には3つのホールが表されている。
図4において、4つの長方形は、シーケンス番号によって並べられた受信データを示している。この受信データは、LowBuffBoundとUpBuffBoundとの間のバッファに記憶されている。下位エッジが最小のシーケンス番号を有するホールは、以下では最下位ホールと呼ばれる。
【0054】
次に、スヌーパによって実行されるアナライザ制御及びパケットハンドリングを説明する。
【0055】
アナライザ制御
アナライザ200とスヌーパ100との間のデータ転送に利用可能な帯域幅に応じて2つのポリシーが可能である。その帯域幅がネットワークリンク帯域幅と同じ大きさである場合、データは、受信される時にアナライザへ渡される方がより好ましく、アナライザは、再組み立てバッファのコピーを保持することを強制される(ポリシー1)。一方、両方のエンティティの間の帯域幅がリンクの帯域幅よりもはるかに大きい場合、連続したデータ、すなわち、最初に遭遇するホールまでのデータのみをアナライザに渡すことに本質があるもう1つの転送ポリシーを適用することが可能である(ポリシー2)。
【0056】
いずれの場合も、アナライザに渡される最も大きなデータシーケンス番号を示すポインタ(AnalysisPointerと呼ばれる)が保持される。このポインタも、上述した
図4の図解に見られる。
【0057】
ポリシー1を適用する場合、アナライザは、解析が行われると、どのセグメントを再送できるかを示すことを全体的に担当する。
【0058】
ポリシー2が適用される場合、或るホールが満たされると、そのホールのデータ及び次のホールまでの連続したデータがアナライザに渡される。しかし、あまりにも長いデータバーストがアナライザとスヌーパとの間のリンクをあまりにも長い間占有しないように、転送に使用される帯域幅は分割されなければならない場合がある。そのリンクへのアクセスを定期的に調停するスケジューラを実装することができる。
【0059】
1つ又は複数の基準を使用して、データがコンテンツアナライザへ送信される接続をスケジューリングすることができる。この1つ又は複数の基準は、
アナライザにまだ渡されていない、再組み立てバッファに存在するバイトの個数、
最も古く記憶されたセグメント(=中継されることを待っている最初のセグメント)を有する接続、又は
AnalysisPointerの現在の値よりも大きな最下位ホールが、すべての接続にわたって最も近時である接続(この基準は、自身のホールを最も迅速に満たす接続、すなわち、長く生存するホールを作成することによって解析プロセスを低速化しようと試みる敵により中断されない短いRTT、有効なSACKに有利に働く)
である。
【0060】
スケジューリングの目的は、接続トラフィックシェープの変更をできるだけ少なくし、すなわち、データを受信するとデータをできるだけ早く解析できるようにし、あまりにも多くのデータが解析を待っている接続を促進しないことである。
【0061】
解析が実行されると、コンテンツアナライザ200は、解析が完了したシーケンス番号の範囲を指定する情報を返す。スヌーパ100は、次に、シーケンス番号がその範囲に正確に含まれるセグメントを中継する。
【0062】
パケットハンドリング
セグメントは、アナライザ200によって提供されるシーケンス番号の範囲情報に基づいて転送される。セグメントは、それらの記述子がセグメント記述子キューに現れる順序で転送され、それらのシーケンス番号がシーケンス番号の範囲に含まれる場合に、転送を許可される。
【0063】
セグメントがスヌーパによって転送されると、対応するセグメント記述子が参照されて、そのセグメントのシーケンス番号及び長さが取り出される。この情報は、次に、再組み立てバッファからペイロードを取り出すのに使用され、ペイロードは、次に、残りの記述子情報と融合されて、セグメントのIPエンベロープ及びTCPエンベロープが構築される。記述子キューを調べる時に、転送プロセスは、中継されるセグメントのシーケンス番号が前に中継されたセグメントよりも大きいことをチェックする。そうである場合、セグメントのシーケンス番号が増加していることを条件に、中継プロセスは、キューの消費及びセグメントの中継を続ける。前に中継されたセグメントよりも小さなセグメント番号を有する記述子が見つかる時は常に、以下の2つの代替案のいずれか一方が可能である。すなわち:
セグメントがアナライザによってすでに処理された範囲に属している場合、中継プロセスが継続する。この場合、再組み立てバッファから読み出された対応するペイロードがまだ利用可能であるとき、そのペイロードとともにセグメントが中継される。利用可能でないときは、セグメントは、そのまま中継される。又は、
セグメントのコンテンツ(ペイロード)が、まだ解析されていない範囲に含まれるか、又はその範囲を含む場合、中継プロセスは、コンテンツアナライザによって再び明示的にトリガされるまで停止される。
【0064】
こうすることによって、中継プロセスは、ACKクロッキングメカニズムが中断されないことを保証し、特に、複製ACKの受信に基づいてTCP送信機で「高速再送」アルゴリズムが動作できることを保証する(複製ACKは、ホールの後に続くセグメントの受信時に受信機によって送出される)。
【0065】
中継メカニズムによってこのように提供されるもう1つの特徴は、スヌーパから出て行くすべてのセグメントのコンテンツが、体系的に解析されているか、又は少なくとも再組み立てバッファに記憶されているということである。
【0066】
セグメントの受信
セグメントが受信されると、そのシーケンス番号が、再組み立てバッファの境界(LowBuffBound及びUpBuffBound)と照合される。セグメントのバイト範囲が、再組み立てバッファの境界内にある場合、記述子が作成されて、さらに転送するために記述子のキューに追加される。再組み立てホールバッファ記録は、場合によっては更新され、再組み立てバッファは、セグメントのペイロードを用いて更新される。
【0067】
セグメントのペイロードは、そのセグメントのシーケンス番号に従って、対応する接続の再組み立てバッファに挿入される。
【0068】
UpBuffBoundの値よりも大きなシーケンス番号を有する受信セグメントは、好ましくは廃棄される。この理由は、(i)ACKの受信時、及び(ii)新たなセグメントが、送信機によって受信された最新のACKによって通知されたウィンドウ(ACKシーケンス番号+ウィンドウサイズ)に属する場合にのみに、TCP送信機が新たなセグメントを送出することを許可されているからである。このウィンドウの値は、現在のUpBuffBoundよりも小さい場合がある(上記に与えたUpBuffBound計算の説明を参照)。
【0069】
スヌーパによって受信された、LowBuffBoundよりも小さなシーケンス番号、すなわち、最新の受信ACKよりも小さなシーケンス番号を有するセグメントは、好ましくは転送される。すなわち、それらのセグメントは、エンド受信機によって処理されるべきではなく、ACKがスヌーパと送信機との間で喪失された場合、ほとんど、これらの「ウィンドウ未満(below-window)」のセグメントによって、受信機による最新のACKの送出がトリガされる。再組み立てバッファの下部境界が、LowBuffBoundによって指し示されているメモリブロックに依然として記憶されているバイト範囲に「ウィンドウ未満」のセグメントのペイロードが対応するようなものである場合、セグメントは、そのペイロードと共に転送される。
【0070】
ペイロードを再組み立てバッファに挿入する時、新しく受信されたペイロードの重ならない部分を保持することによって、すなわち、ペイロードの再組み立てバッファのホール(複数可)を満たす部分のみを保持することによって、重なる部分が正常化(normalize)される。1つのペイロードがいくつかのホールを満たすことが可能な場合も考慮される。
【0071】
このセグメントの正常化及び挿入の方式を
図5によって示す。
図5において、新たなセグメントで受信されたペイロードの、再組み立てバッファのホールを満たす部分は、破線により示されている。新たなセグメントのペイロードの残りの部分は、重なるデータを構成する。
【0072】
セグメントが受信されると、以下の擬似コードにより記載されたアルゴリズムに従って、オペレーションが実行される。
if seqnum > UpBuffBound
セグメントを廃棄する
else
セグメント記述子を作成する
記述子をキューに追加する
if LowBuffBound < seqnum < UpBuffBound
ペイロードを正常化してバッファに挿入する
ホール記録を更新する
if セグメントは最下位のホールを満たす
アナライザを起動する
endif
endif
endif
【0073】
受信確認応答の受信
スヌーパによって利用される情報は、ACKシーケンス番号、すなわち、エンド受信機によってまだ処理されていない最初のバイトのシーケンス番号である。アナライザの処理は、エンド受信機よりも進んでいる可能性がある。コンテンツアナライザは、ホールデータが最終的に受信された時に、そのホールデータの解析を実行可能とするのに必要な各ホールの下位エッジのポインタを保持する。ACKが、受信されていない最初のセグメントのシーケンス番号を常に示し、この最初のセグメントがホールに対応し得るので、再組み立てバッファの下位境界は、ACKシーケンス番号と最下位ホールの下位エッジのポインタとの間で選ばれる最小バイトシーケンス番号として定義されなければならない。この最下位ホールの下位エッジは、下位解析境界(AnalysisPointer)と呼ばれる。
【0074】
ACKが受信されると、以下の擬似コードによって反映されるオペレーションが実行される。条件LowBuffBound<AnalysisPointerが常に満たされるとして:
if seqnum < LowBuffBound
何もしない
if AnalysisPointer > seqnum > LowBuffBound
LowBuffBound = seqnum
再組み立てバッファを更新する
ホール記録を更新する
if seqnum > AnalysisPointer
再組み立てバッファがTCP受信機と同期していないこと(エラー)をアナライザに示す
【0075】
本発明は、ハードウェア、ソフトウェア、又は、ハードウェアとソフトウェアとの組み合わせで実施することができる。本明細書で説明した機能を実行するように適合されたものならば、どのプロセッサ、コントローラ、又は他の装置も適している。
【0076】
また、本発明は、コンピュータプログラム製品に組み込むこともできる。コンピュータプログラム製品は、本明細書で説明した方法の実施を可能にするすべての特徴を含み、情報処理システムにロードされると、これらの方法を実行することができる。本文脈におけるコンピュータプログラム手段又はコンピュータプログラムは、情報処理能力を有するシステムに特定の機能を直接実行させるか、又は、次のa)別の言語への変換のいずれか又は両方の後に実行させることを目的とした一組の命令の、任意の言語、コード、又は表記によるいずれの表現も意味する。このようなコンピュータプログラムは、コンピュータ可読媒体又は機械可読媒体に記憶することができる。この媒体は、データ、命令、メッセージ又はメッセージパケット、及び他の機械可読情報を当該媒体から読み出すことを可能にする。コンピュータ可読媒体又は機械可読媒体は、ROM、フラッシュメモリ、ディスクドライブメモリ、CD−ROM、及び他の永久ストレージ等の不揮発性メモリを含んでもよい。加えて、コンピュータ可読媒体又は機械可読媒体は、たとえば、RAM、バッファ、キャッシュメモリ、及びネットワーク回路等の揮発性ストレージも含んでもよい。さらに、コンピュータ可読媒体又は機械可読媒体には、有線ネットワーク又は無線ネットワークを含めて、デバイスがコンピュータ可読情報又は機械可読情報を読み出すことを可能にする、ネットワークリンク及び/又はネットワークインターフェース等の一時的な状態の媒体のコンピュータ可読情報又は機械可読情報も含まれ得る。
【0077】
本発明の好ましい実施形態と現在考えられるものを図示して説明してきたが、本発明の真の範囲から逸脱することなく、さまざまな他の変更を行うことができ、均等物に置き換えることができることが当業者に理解されよう。加えて、本明細書で説明した中心となる発明の概念から逸脱することなく、特定の状況を本発明の教示に適合させるために多くの変更を行うこともできる。さらに、本発明の一実施形態は、上述した特徴のすべてを含むとは限らない。したがって、本発明は開示された特定の実施形態に限定されるものでないことが意図されており、本発明は、添付の特許請求の範囲内に含まれるすべての実施形態を含むことが意図されている。