(57)【要約】      （修正有）【課題】プロトコルスタックの下位層でフラグメンテーションが発生し、セグメントが分割された場合でもアプリケーション層（ＩＤＳやＩＰＳ）での内容チェックを可能とする。【解決手段】下位層において分割されたＰＤＵをバッファリングし、セグメントを順序づけるシーケンス番号をつけてアプリケーション層に渡す。その後、未受信分のフラグメンテーションパケットを受信した時点でこれらを連結可能な固有情報と共にアプリケーション層に渡す。【選択図】図２
2010158016.tif 000002
【特許請求の範囲】
【請求項１】
プロトコルスタックにおいて下位層（１１）から上位層（１３）に受信データセグメントを送信する方法であって、
データセグメントは該データセグメントを順序付けるシーケンス番号にそれぞれ関連付けられ、
前記上位層は連続するＫバイトのデータを処理するようになっており、Ｋは正の整数であり、
該方法は、以下のステップ、
／ａ／  前記下位層において現在のデータセグメントを受信するステップ（２１）と、
／ｂ／  前記現在のデータセグメントに先行するデータセグメントが依然として受信されていない場合に、前記現在のデータセグメントの最初のＫ−１バイトを、該現在のデータセグメントに関連付けてメモリ内に記憶し、
前記現在のデータセグメントの次のデータセグメントが依然として受信されていない場合に、前記現在のデータセグメントの最後のＫ−１バイトに関連する固有情報を、該現在のデータセグメントに関連付けて記憶するステップ（２２）と、
／ｃ／  前記現在のデータセグメントを前記上位層に送信するステップ（２３）と、
を含み、前記現在のデータセグメントは、前記次のデータセグメントが既に受信されている場合に、該次のデータセグメントが受信されたときに該次のデータセグメントと関連付けて記憶されている最初のＫ−１バイトと共に送信され、先行するデータセグメントが既に受信されている場合に、該先行するデータセグメントが受信されたときに該先行するデータセグメントと関連付けて記憶されている固有情報と共に送信される、方法。
【請求項２】
ステップ／ｂ／において、１つのデータセグメントの最後のＫ−１バイトに関連する前記固有情報は、該データセグメントの最後のＫ−１バイトに対応する、請求項１に記載の方法。
【請求項３】
前記現在のデータセグメントの最初のＫ−１バイト及び最後のＫ−１バイトを記憶するために、２つの欠落したデータセグメントの間でデータセグメント（複数可）グループが検出されるとストレージ構造が作成され、該ストレージ構造は、
前記セグメントグループの最初のＫ−１バイトを記憶するデータバッファへのポインタを指示するフィールド（３１）と、
前記セグメントグループの最後のＫ−１バイトを記憶するデータバッファへのポインタを指示するフィールド（３２）と、
前記セグメント（複数可）グループの第１のバイトのシーケンス番号を指示するフィールド（３３）と、
前記セグメント（複数可）グループの長さ値を指示するフィールド（３４）と、
次のセグメント（複数可）グループに対応する次のストレージ構造へのポインタを指示するフィールド（３５）と、
を備える、請求項２に記載の方法。
【請求項４】
前記下位層の受信ウィンドウは、前記ストレージ構造のチェーン化されたリストを通じて指示され、１つのストレージ構造は、１つのセグメント（複数可）グループに関連付けられる、請求項３に記載の方法。
【請求項５】
前記チェーン化されたリスト内の前記ストレージ構造は、各データセグメントが受信されると更新される、請求項４に記載の方法。
【請求項６】
新たな受信データセグメントが、セグメント（複数可）グループの直前又は直後に位置する場合に、該セグメント（複数可）グループの前記ストレージ構造が更新される、請求項４又は請求項５に記載の方法。
【請求項７】
前記上位層は、決定性有限オートマトン又は非決定性有限オートマトンの状態ベクトルに基づいてパターンマッチングアルゴリズムを実行し、前記固有情報は、状態ベクトル値であり、前記下位層において前記上位層から受信される、請求項１に記載の方法。
【請求項８】
２つの欠落したデータセグメントの間でデータセグメント（複数可）グループが検出されるとストレージ構造が作成され、該ストレージ構造は、
前記セグメントグループの最初のＫ−１バイトを記憶するデータバッファへのポインタを指示するフィールド（３１）と、
前記オートマトンの状態ベクトル値を前記セグメントグループに関連付けて指示するフィールドと、
前記セグメント（複数可）グループの第１のバイトのシーケンス番号を指示するフィールド（３３）と、
前記セグメント（複数可）グループの長さ値を指示するフィールド（３４）と、
次のセグメント（複数可）グループに対応する次のストレージ構造へのポインタを指示するフィールド（３５）と、
を備える、請求項７に記載の方法。
【請求項９】
ステップ／ｃ／において、前記現在のデータセグメントの前記シーケンス番号が、前記上位層にさらに送信される、請求項１から請求項８までのいずれか１項に記載の方法。
【請求項１０】
下位層（１１）と上位層（１３）とを備えるプロトコルスタック製品（１２４）であって、
前記下位層は受信データセグメントを前記上位層に送信するようになっており、データセグメントは該データセグメントを順序付けるシーケンス番号にそれぞれ関連付けられ、
前記上位層は連続するＫバイトのデータを処理するようになっており、Ｋは正の整数であり、
前記下位層は、
現在のデータセグメントを受信するようになっているレシーバ（１２１）と、
前記現在のデータセグメントに先行するデータセグメントが依然として受信されていない場合に、前記現在のデータセグメントの最初のＫ−１バイトを、該現在のデータセグメントと関連付けて記憶するようになっているデータバッファ（１２２）と、
前記現在のデータセグメントの次のデータセグメントが依然として受信されていない場合に、前記現在のデータセグメントの最後のＫ−１バイトに関連する固有情報を、該現在のデータセグメントと関連付けて記憶するようになっているデータバッファ（１２５）と、
前記現在のデータセグメントを前記上位層に送信するようになっているトランスミッタ（１２３）と、
を備え、前記現在のデータセグメントは、前記次のデータセグメントが既に受信されている場合に、該次のデータセグメントと関連付けて記憶されている最初のＫ−１バイトと共に送信され、及び先行するデータセグメントが既に受信されている場合に、該先行するデータセグメントに関連付けて記憶されている前記固有情報と共に送信される、プロトコルスタック製品。
【請求項１１】
１つのデータセグメントの最後のＫ−１バイトに関連する前記固有情報は、該データセグメントの最後のＫ−１バイトに対応する、請求項１０に記載のプロトコルスタック製品。
【請求項１２】
前記上位層（１３）は決定性有限オートマトン又は非決定性有限オートマトンの状態ベクトルに基づいてパターンマッチングアルゴリズムを実行し、前記固有情報は、状態ベクトル値であり、前記下位層において前記上位層から受信される、請求項１０に記載のプロトコルスタック製品。
【請求項１３】
伝送ネットワークを通じてデータを受信するようになっている端末（１２０）であって、請求項１０から請求項１２までのいずれか１項に記載のプロトコルスタック製品（１２４）を備える、端末。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、包括的には、ネットワークを通じて受信データセグメントを処理することに関し、より詳細には、受信データセグメントをアプリケーションに送信するために、該受信データセグメントを管理することに関する。
【背景技術】
【０００２】
ネットワーク分析に基づくアプリケーションのような幾つかのアプリケーションを端末レベルで実行するために、ネットワークスタックの様々なレベルにおけるプロトコルデータユニット(Protocol Data Unit)（ＰＤＵ）の事前のコンテンツ分析が必要とされ得る。
【０００３】
これらのアプリケーションは、ＩＤＳ（「侵入検知システム(Intrusion Detection System)」を表す）アプリケーション又はＩＰＳ（「侵入防止システム(Intrusion Prevention System)」を表す）アプリケーションに対応し得る。これらのアプリケーションは、ウィルス又は攻撃シグネチャ(attacks signatures)を探すのに有用である。これらのアプリケーションは、たとえば、コネクション指向型プロトコルのようなトランスポートプロトコルスタック（「伝送制御プロトコル(Transmission Control Protocol)」を表すＴＣＰ）又はコネクションレス型プロトコル（「ユーザデータグラムプロトコル(User Datagram Protocol)」を表すＵＤＰ）の上位に位置することができる。
【０００４】
ネットワークを通じて送信される任意のアプリケーションに関連する幾つかのデータは、ＴＣＰセグメンテーション及び／又はＩＰフラグメンテーションに起因して幾つかのデータセグメントに分散される可能性がある。実際、送信されるデータのサイズに応じて、ＩＰ層はＩＰデータグラムをフラグメント化(細分化)することができ、そして、該ＩＰデータグラムは幾つかのイーサネット（登録商標）パケット内で移送される。このようなフラグメンテーションは、中間機器によるルーティング中に発生し得る。
【０００５】
ネットワークを通じて送信されるデータにセグメンテーション又はフラグメンテーション法が適用されるとき、順序付けられたシーケンス番号がデータセグメントにそれぞれ関連付けられる。しかし、データセグメントは、それらのシーケンス番号によって示される順序とは異なる順序で受信され得る。送信側と受信側との間でのデータセグメントの順序違いは、例えばＴＣＰプロトコルが使用されるときの肯定応答されていないデータセグメント(non acknowledged data segments)の再放出、又はネットワーク内部のパスに依存する運搬時間の違いに起因して発生する場合がある。さらに、受信データセグメントの数が、送信データセグメントの数と異なる場合がある。
【０００６】
これらの全ての特性は、受信されるＰＤＵのコンテンツ分析を非常に複雑にする可能性がある。これは、特に、最初に送信されたメッセージ、つまりＴＣＰストリーム又はＵＤＰデータグラムを形成することが要求され得るためである。このために、特にＴＣＰプロトコルが使用されるとき、受信データセグメントに対し、ＩＰデフラグメンテーションステップ及びデータ再組み立てステップが実施され得る。
【０００７】
ＩＰデフラグメンテーションステップによって、ＩＰデータグラム全体を再構築することが可能になり、該ＩＰデータグラムを上位層（ＴＣＰ又はＵＤＰ）に送信することができる。同様に、データ再組み立てステップによって、データセグメントを配送し、それによって最初の送信データストリームを再構成することが可能になる。
【０００８】
受信側において、そのようなデフラグメンテーションステップ及び再組み立てステップは、メモリ使用に関してコストがかかる。さらに、一般的に、再組み立てステップは連続した全てのデータセグメントを待ち、その後、それらを上位層に送信することを担当する。したがって、幾つかのデータセグメントが依然として受信されていないとき、再組み立てステップはそれらの受信を待ち、その後、完全なデータストリームを上位層に送信する。不都合なことに、これらの状態において、状況によっては上位層への送信バーストが発生し得る。
【０００９】
発明の概要
上記を鑑みて、送信バーストを回避すると共にメモリ空間を節約しながら、順序付けられたデータセグメントを上位のアプリケーション層に送信する必要性が存在する。
【００１０】
第１の態様において、本発明は、プロトコルスタックにおいて下位層から上位層に受信データセグメントを送信する方法であって、
データセグメントは該データセグメントを順序付けるシーケンス番号にそれぞれ関連付けられ、
上記上位層は連続するＫバイトのデータを処理するようになっており、Ｋは正の整数であり、
該方法は、以下のステップ、
／ａ／  現在のデータセグメントを受信するステップと、
／ｂ／  現在のデータセグメントに先行するデータセグメントが依然として受信されていない場合に、上記現在のデータセグメントの最初のＫ−１バイトを、該現在のデータセグメントに関連付けてメモリ内に記憶し、
現在のデータセグメントの次のデータセグメントが依然として受信されていない場合に、上記現在のデータセグメントの最後のＫ−１バイトに関連する固有情報を、該現在のデータセグメントに関連付けて記憶するステップと、
／ｃ／  上記現在のデータセグメントを上位層に送信するステップと、
を含み、上記現在のデータセグメントは、次のデータセグメントが既に受信されている場合に、該次のデータセグメントと関連付けて記憶されている最初のＫ−１バイトと共に送信され、先行するデータセグメントが既に受信されている場合に、該先行するデータセグメントと関連付けて記憶されている固有情報と共に送信される、方法を提案する。
【００１１】
用語「データセグメント」はネットワークにおいて送信に使用されるデータの任意の部分に対応し、特にセグメンテーションプロセス又はフラグメンテーションプロセスにおいて取得することができる。
【００１２】
これらの特徴によって、有利には、任意のデータセグメントが受信されるとすぐに、該データセグメントを上位層に送信することが可能になる。確かに、このコンテキストにおいては、上位層は、該層の処置を適用することができるようにするために、少なくともＫバイトを有することを必要とする。たとえば、この上位層は、アプリケーション層とすることができ、少なくともＫバイトのデータに対しパターンマッチングアプリケーションを適用することができる。Ｋは、発見される最長の文字列の長さである。
【００１３】
より正確には、ストレージ構造によって、上位層に送信されるデータセグメントの最初のＫ−１バイトがメモリ内に保持される。したがって、幾つかのデータセグメントが上位層に送信される一方で、幾つかの前のデータセグメントが依然として受信されていない場合であっても、上位層は、該層の処置を適用できる。これは、欠落したデータッセグメントが受信されると、この新たなデータセグメントと共に連続したＫ−１バイトが再度送信されるためである。したがって、上位層は、シーケンス番号に関して、つまり初期の送信順序に関して、データセグメントが順序どおりに送信されない場合であっても、その処置を継続的に適用することができる。換言すれば、そのような特性によって、データセグメントが連続して受信されない場合であっても、データセグメントを、該データセグメントが受信されるとすぐに送信することが可能となる。そのような処理によって、データセグメントが順序どおり受信されない場合であっても、上位層が、該層の処置を継続的に適用することが可能になる。
【００１４】
実際に、既に受信したデータセグメントの直後の新たなデータセグメントが受信されると、該既に受信したデータセグメントに関連付けられた固有情報が、該新たな受信データセグメントと同時に送信される。本発明の一実施の形態では、固有情報はデータセグメントの最後のＫ−１バイトに対応することができ、別の実施形態では、固有情報は状態ベクトル値に対応することができる。後者の場合、上位層は、状態ベクトルを用いて決定性有限オートマトン又は非決定性有限オートマトンに基づいたパターンマッチングアルゴリズムの実行を担当することができる。本発明に従って上位層においてデータセグメントが受信されると、新たな状態ベクトル値が取得されると共に、下位層に送信されて、記憶される。
【００１５】
これらの状態では、データセグメントが受信されるとすぐに送信されるので、上位層への送信のバーストは発生し得ない。さらに、データセグメントが完全に受信されるまで受信ウィンドウの全てのデータセグメントを記憶することが、もはや必要とされないので、メモリ空間が節約される。
【００１６】
加えて、データを記憶するのに使用されるデータバッファはＫ−１バイトの固定サイズを有し、可変サイズのデータバッファを管理するよりも処理が容易であるため、メモリ空間の管理が容易である。
【００１７】
一実施の形態では、ステップ／ｂ／において、１つのデータセグメントに関連する固有情報は、該データセグメントの最後のＫ−１バイトに対応する。
【００１８】
ここで、有利には、次のデータセグメントが依然として受信されていないときに、受信データセグメントのＫ−１バイトが記憶され、これらのＫ−１バイトを、上記次のセグメントが受信されるときに、該次のデータセグメントに関連付けて送信することができるようにする。上位層はＫバイトの処置を継続的に適用することができる。
【００１９】
一実施の形態では、現在のデータセグメントの最初のＫ−１バイト及び最後のＫ−１バイトを記憶するために、２つの欠落したデータセグメントの間でデータセグメント（複数可）グループが検出されるとストレージ構造が作成され、該ストレージ構造は、
セグメントグループの最初のＫ−１バイトを記憶するデータバッファへのポインタを指示するフィールドと、
セグメントグループの最後のＫ−１バイトを記憶するデータバッファへのポインタを指示するフィールドと、
上記セグメント（複数可）グループの第１のバイトのシーケンス番号を指示するフィールドと、
セグメント（複数可）グループの長さ値を指示するフィールドと、
次のセグメント（複数可）グループに対応する次のストレージ構造へのポインタを指示するフィールドと、
を備える。
【００２０】
このストレージ構造は、有利には、下位層の受信ウィンドウの効率的な表現を保持するようになっており、それによって、この下位層が本方法の主要なステップを適用できるようにする。
【００２１】
下位層の受信ウィンドウは、ストレージ構造のチェーン化されたリストを通じて表すことができ、１つのストレージ構造は、１つのセグメント（複数可）グループ(a group of segment(s))に関連付けられる。
【００２２】
チェーン化されたリスト内のストレージ構造は、各データセグメントが受信されると更新される。
【００２３】
新たな受信データセグメントが、セグメント（複数可）グループの直前又は直後に位置する場合に、該セグメント（複数可）グループのストレージ構造が更新される。用語「セグメントグループ」は、１つのセグメントしか含まない場合があるセグメントグループ、及び受信ウィンドウにおいて依然として受信されていない少なくとも１つのセグメントが先行するセグメントグループに対応する。
【００２４】
一実施の形態では、上位層は、決定性有限オートマトン又は非決定性有限オートマトンの状態ベクトルに基づいてパターンマッチングアルゴリズムを実行し、固有情報は、状態ベクトル値であり、下位層において上位層から受信される。
【００２５】
一実施の形態では、２つの欠落したデータセグメントの間でデータセグメント（複数可）グループが検出されるとストレージ構造が作成され、該ストレージ構造は、
セグメントグループの最初のＫ−１バイトを記憶するデータバッファへのポインタを指示するフィールド（３１）と、
オートマトンの状態ベクトル値を上記セグメントグループに関連付けて指示するフィールドと、
上記セグメント（複数可）グループの第１のバイトのシーケンス番号を指示するフィールド（３３）と、
セグメント（複数可）グループの長さ値を指示するフィールド（３４）と、
次のセグメント（複数可）グループに対応する次のストレージ構造へのポインタを指示するフィールド（３５）と、
を備える。
【００２６】
一実施の形態では、ステップ／ｃ／において、現在のデータセグメントのシーケンス番号を上位層にさらに送信することができる。
【００２７】
この特徴は、上位層が受信ウィンドウ内のデータの位置に基づくアプリケーションを実行するときに、非常に有利であり得る。
【００２８】
第２の態様では、本発明は、下位層と上位層とを備えるプロトコルスタックであって、
上記下位層は受信データセグメントを上記上位層に送信するようになっており、データセグメントは該データセグメントを順序付けるシーケンス番号にそれぞれ関連付けられ、
上記上位層は連続するＫバイトのデータを処理するようになっており、Ｋは正の整数であり、
上記下位層は、
現在のデータセグメントを受信するようになっているレシーバと、
現在のデータセグメントに先行するデータセグメントが依然として受信されていない場合に、上記現在のデータセグメントの最初のＫ−１バイトを、該現在のデータセグメントと関連付けて記憶するようになっているデータバッファと、
現在のデータセグメントの次のデータセグメントが依然として受信されていない場合に、上記現在のデータセグメントの最後のＫ−１バイトに関連する固有情報を、該現在のデータセグメントと関連付けて記憶するようになっているデータバッファと、
上記現在のデータセグメントを上位層に送信するようになっているトランスミッタと、
を備え、上記現在のデータセグメントは、次のデータセグメントが既に受信されている場合に、該次のデータセグメントと関連付けて記憶されている最初のＫ−１バイトと共に送信され、先行するデータセグメントが既に受信されている場合に、該先行するデータセグメントに関連付けて記憶されている上記固有情報と共に送信される、プロトコルスタックを提案する。
【００２９】
固有情報は、対応するデータセグメントのＫ−１バイトとすることができる。そして、データバッファは、現在のデータセグメントの次のデータセグメントが依然として受信されていない場合に、該現在のデータセグメントの最後のＫ−１バイトを、該現在のデータセグメントと関連付けて記憶するようになっていることができ、
トランスミッタは、先行するデータセグメントが既に受信されている場合に、該先行するデータセグメントと関連付けて記憶されている最後のＫ−１バイトと共に現在のデータセグメントを送信するようになっていることができる。
【００３０】
代替的に、上位層は、決定性有限オートマトン又は非決定性有限オートマトンの状態ベクトルに基づいてパターンマッチングアルゴリズムを実行することができ、固有情報は、状態ベクトル値であり、下位層において上位層から受信される。
【００３１】
この状態ベクトル値は、上位層によって計算されて、下位層に送信される。
【００３２】
第３の態様では、本発明は、伝送ネットワークを通じてデータを受信するようになっている端末であって、第２の態様によるプロトコルスタックを備える、端末を提案する。
【００３３】
以下の説明から、本発明のさらなる特徴及び利点がより明らかになる。以下の説明は、純粋に例示としてのみ与えられ、添付の図面と合わせて読まれるべきである。
【図面の簡単な説明】
【００３４】
【図１】本発明の一実施形態を有利に実行することができるプロトコルスタックを示す図である。
【図２】本発明の一実施形態による方法の主要なステップを示す図である。
【図３】本発明の一実施形態によるストレージ構造を示す図である。
【図４】データセグメント受信の１つのケースにおける、本発明の一実施形態による方法の適用を示す図である。
【図５】データセグメント受信の１つのケースにおける、本発明の一実施形態による方法の適用を示す図である。
【図６】データセグメント受信の１つのケースにおける、本発明の一実施形態による方法の適用を示す図である。
【図７】データセグメント受信の１つのケースにおける、本発明の一実施形態による方法の適用を示す図である。
【図８】データセグメント受信の１つのケースにおける、本発明の一実施形態による方法の適用を示す図である。
【図９】データセグメント受信の１つのケースにおける、本発明の一実施形態による方法の適用を示す図である。
【図１０】本発明の一実施形態による、下位層から上位層への受信データセグメントの送信を示す図である。
【図１１】本発明の一実施形態による、下位層から上位層への受信データセグメントの送信を示す図である。
【図１２】本発明の一実施形態によるプロトコルスタックを備える端末の図である。
【発明を実施するための形態】
【００３５】
本発明の一実施形態は、再組み立てされたデータに基づくパターンマッチングアプリケーションのために有利に実行することができる。パターンマッチングは、受信データ内の、正規表現を探すこと又は正確なテキスト文字列を探すことのいずれによっても行うことができる。
【００３６】
図１は、本発明の一実施形態を有利に実行することができるプロトコルスタックを示している。
【００３７】
そのようなプロトコルスタックは、イーサネット（登録商標）及びＩＰ（「インターネットプロトコル」を表す）のようなネットワークスタックとすることができる下位層１０を含む。この層１０の上位に、ＴＣＰ（「伝送制御プロトコル」を表す）層のようなトランスポート層１１が位置し、下位層として参照される。このトランスポート層１１の上位に、上位アプリケーション層１３が位置する。この上位層１３は、パターンマッチングアプリケーションに対応することができる。本発明の一実施形態は、ＴＣＰ層１１内で実行することができる。
【００３８】
図２は、本発明の一実施形態による方法の主要なステップを示している。
【００３９】
本発明の一実施形態によれば、特定のストレージ構造によって、受信ウィンドウのイメージがメモリ内に保持される。ステップ２１において現在のデータセグメントが受信されると、ステップ２２において、先行するデータセグメントが依然として受信されていない場合に、現在の受信データセグメントの最初のＫ−１バイトが記憶され、次のデータセグメントが受信されていない場合に、現在の受信データセグメントの最後のＫ−１バイトに関連する固有情報が記憶される。次に、ステップ２３において、この現在の受信データセグメントが上位層に送信される。有利には、上位層が正しい処置を適用できるようにするために、データセグメントは、次のデータセグメントが既に受信されている場合に、該次のデータセグメントの最初のＫ−１バイトと関連付けて送信され、前のデータセグメントが既に受信されている場合に、固有情報と関連付けて送信される。
【００４０】
これらの特性によって、上位層が受信データを関連した方法で処理することを可能にしながら、各データセグメントを、該セグメントが受信されるとすぐに送信することが可能である。
【００４１】
図３は、本発明の一実施形態によるデータストレージ構造を示している。
【００４２】
本発明の一実施形態による受信ウィンドウのイメージを表すのに使用されるデータストレージ構造は、以下のフィールド：
セグメントグループの第１のバイトのシーケンス番号を記憶するフィールド３１と、
セグメントグループの長さ値を記憶するフィールド３２と、
セグメントグループの最初のＫ−１バイトを記憶するデータバッファへのポインタを記憶するフィールド３３と、
セグメントグループの最後のＫ−１バイトを記憶するデータバッファへのポインタを記憶するフィールド３４と、
必要であれば、次のストレージ構造を指すポインタ「次」を記憶するフィールド３５と、
を備える。
【００４３】
そのようなストレージ構造を使用することによって、欠落したデータセグメントを待つことなく、すべての受信データセグメントを、それらが受信されるとすぐに送信することが可能になる。実際に、セグメントグループが検出されると、そのようなストレージ構造が作成される。欠落したデータセグメントが後に受信されると、該データセグメントを、それぞれのシーケンス番号に従って、前に位置するＫ−１バイト及び後に位置するＫ−１バイトに関連付けて送信することができ、それによって、上位層が少なくともＫバイトに対し該層の処置を適用することが可能になる。
【００４４】
下位層の受信ウィンドウの境界を、一方では、レシーバ（つまり考察中の端末）によって依然として受信されていない第１のバイトのシーケンス番号であるウィンドウ最下部(Bottom of Window)（ＢｏＷ）によって定めることができ、他方では、必要とされるウィンドウサイズをＢｏＷに加えることによって相対的に定義することができるウィンドウ最上部(Top of Window)（ＴｏＷ）によって定めることができる。
【００４５】
本発明の一実施形態では、受信ウィンドウに全くホールがない場合であっても、つまり欠落したデータセグメント部がない場合であっても、データバッファへのポインタを記憶するために、上記のように定義される少なくとも１つのストレージ構造が必要とされる。このデータバッファは、ＢｏＷの第１のバイトのシーケンス番号と、先行するＫ−１バイト、つまり以前に受信ウィンドウ内にあった最後のデータセグメントの最後のＫ−１バイトとの間に含まれるシーケンス番号に関連付けられるＫ−１バイトを記憶する。
【００４６】
図４は、本発明の一実施形態によるデータストレージ構造の使用を示している。
【００４７】
本発明の一実施形態が有利には任意の他のプロトコルに適用することができる場合であっても、次のセクションはＴＣＰ接続に適用される。
【００４８】
この図４は、幾つかのデータセグメントが受信済みとして指示され、他のデータセグメントが欠落しているとして指示される受信ウィンドウ４００のステータスを示している。受信データセグメントは縞面を用いて示され、欠落したデータセグメントは空白面を用いて示される。各欠落したデータセグメント部分はホールとして参照される。
【００４９】
用語「セグメントグループ(Group of Segments)」、「ＧｏＳ」は、２つのホール間の連続した受信データセグメントから成るグループに対応する。図示される受信ウィンドウ４００は、ＧｏＳ＃０として参照される第１のＧｏＳと、ＧｏＳ＃１として参照される第２のＧｏＳとを含む。
【００５０】
受信ウィンドウ４００内に、３つの異なるホール、すなわちホール＃０、ホール＃１、及びホール＃２が示される。
【００５１】
本発明によれば、この受信ウィンドウ４００のイメージは、データストレージ構造３１，３２，３３のチェーンを通じて記憶される。第１のデータストレージ構造４１は、
上位層に既に送信されたデータの最後のＫ−１バイト４０１が記憶されているバッファへのポインタと、
以前に送信したＧｏＳの第１のバイトに関連付けられるシーケンス番号と、
ＧｏＳ＃０の長さと、
次のデータストレージ構造、つまりストレージ構造３２へのポインタと、
を含む。
【００５２】
第２のデータストレージ構造３２は、
ＧｏＳ＃０の最初のＫ−１バイトが記憶されているバッファへのポインタと、
ＧｏＳ＃０の最後のＫ−１バイトが記憶されているバッファへのポインタと、
ＧｏＳ＃０の第１のバイトに関連付けられるシーケンス番号と、
ＧｏＳ＃０の長さと、
次のデータストレージ構造、つまりストレージ構造３３へのポインタと、
を含む。
【００５３】
第３のデータストレージ構造３３は、
ＧｏＳ＃１の最初のＫ−１バイトが記憶されているバッファへの２つのポインタと、
ＧｏＳ＃１の第１のバイトに関連付けられるシーケンス番号と、
ＧｏＳ＃１の長さと、
を含む。
【００５４】
ＧｏＳ＃１はＫ−１バイト未満のバイトを含む。結果として、データストレージ構造の第１のポインタの双方が同じものとなる。
【００５５】
有利には、本発明の一実施形態によれば、一方では、全ての受信データセグメントはそれらが受信されるとすぐに上位層に送信することができ、他方では、受信ウィンドウは、メモリ空間を節約することを可能にするストレージ構造のチェーン化されたリストを通じて記憶される。
【００５６】
この種類のストレージ構造を使用することによって、既に受信した全てのデータセグメントを記憶することが回避されるため、多くのメモリ空間をとることなく受信ウィンドウのイメージを記憶することが可能になる。実際に、各セグメントグループの最初のＫ−１バイト及び最後のＫ−１バイトのみ（つまり欠落したデータセグメントの前に順序付けされたＫ−１バイト、及び欠落したデータセグメントの後に順序付けされたＫ−１バイトのみ）がデータバッファ内に記憶される。このストレージによって、データセグメントのうちの幾つかが欠落している場合であっても、データセグメントが受信されるとすぐに送信されるときに、上位層が継続的な処置を適用することが可能になる。
【００５７】
受信ウィンドウがそのようなステータスを呈する(present)とき、それは、ホール＃０、ホール＃１、及びホール＃３において幾つかのセグメントが欠落している場合であっても、ＧｏＳ＃０及びＧｏＳ＃１内に含まれるデータが既に上位層に送信されたことを意味する。既に送信された各ＧｏＳの最初のＫ−１バイト及び最後のＫ−１バイトは、メモリ内に記憶される。この状態において、ホール＃０においてこれらの最初のＫ−１バイトの直前の欠落したセグメントが受信されるとき、上位層に該最初のＫ−１バイトを送信することが可能であり、ホール＃１においてこれらの最後のＫ−１バイトの直後の欠落したセグメントが受信されるとき、上位層に該最後のＫ−１バイトを送信することが可能である。
【００５８】
セグメントグループがＫバイトより少ないサイズを有するとき、ストレージ構造はセグメントグループの全てのバイトのコピーを記憶するデータバッファへのポインタを保持する。実際に、このケースでは、最初のＫ−１バイト及び最後のＫ−１バイトは同一であり、２つのポインタは同じコピーデータバッファを指す。ここで、フィールド長は記憶されるバイト数を指示する。
【００５９】
一実施形態において、開かれたＴＣＰ接続毎に、連結ストレージ構造のリストが作成される。
【００６０】
次の複数の図面は、欠落したデータセグメントの受信の異なる複数のケースにおける、本発明の一実施形態による受信データセグメントの処理を示している。
【００６１】
図５は、一実施形態による孤立した欠落したデータセグメントの受信を示している。
【００６２】
欠落したデータセグメント５０３は、受信ウィンドウのイメージにおいて孤立したデータセグメントとして受信される。このケースにおいて、新たな受信データセグメントは既存のＧｏＳ（「セグメント（複数可）グループ(Group of Segment(s))」）に加えることができない。
【００６３】
図５は、本発明による、データセグメント５０３の受信を示す第１の部分５０１と、この受信に基づいて更新される連結ストレージ構造を示す第２の部分５０２とを含む。
【００６４】
孤立したデータセグメント５０３が受信されると、新たなストレージ構造５０４が作成される。用語「孤立したデータセグメント」は、受信ウィンドウの表現のホールにおいて受信されるデータセグメントを意味し、このデータセグメントは、関連付けられるシーケンス番号（複数可）が、受信ウィンドウにおいて既に受信された既存のセグメントグループのデータセグメントと連続していないため、既存のストレージ構造に加えることができない。
【００６５】
この新たなストレージ構造は、既存の、ストレージ構造のチェーン化されたリスト内に含まれる。ストレージ構造４１の次ポインタは新たなストレージ構造５０４を指し、新たなストレージ構造５０４の次ポインタはストレージ構造４３を指す。さらに、ストレージ構造５０４の他のフィールドは、上述したように埋められる。この状態において、受信データセグメントの最初のＫ−１バイト及び最後のＫ−１バイトがメモリ内に保持されているので、上位層がパターンマッチング処置のような継続的な処置をＫバイトに適用することを可能にしながら、データセグメント５０３を上位層に送信することができる。実際に、データセグメント５０３の直前のデータセグメントが受信されると、該データセグメントは、ストレージ構造５０４によって指される最初のＫ−１バイトとともに、上位層に送信される。データセグメント５０３の直後のデータセグメントが受信されると、該データセグメントは、ストレージ構造５０４によって指される最後のＫ−１バイトとともに、上位層に送信される。したがって、上位層は、上述したようにＫバイトに対し関連するパターンマッチングアルゴリズムを実行することができる。
【００６６】
別のケースにおいて、図６に示すように、新たな受信データセグメント６０３を既存のＧｏＳの最後のバイトに繋げることができる。図６において、第１の部分６０１は受信ウィンドウの新たなステータスを示し、第２の部分６０２は本発明の一実施形態に従って更新されるストレージ構造のチェーン化されたリストを示す。
【００６７】
たとえば、この新たな受信データセグメントは、受信ウィンドウの最上部に位置する可能性があるか、又は既に受信した２つのＧｏＳの間に、それらの間のホールを完全に埋めることなく位置する可能性があるか、又は受信ウィンドウにおいて受信される最後のデータセグメントに追加される可能性がある。これらのケースにおいて、新たな受信データセグメントを既存のＧｏＳに含めることができる。
【００６８】
図示されるケースにおいて、既に作製されたストレージ構造４２が更新される。更新した後、ストレージ構造４２のフィールド３２は新たな受信データセグメントの最後のＫ−１バイトのコピーを指す。ストレージ構造の長さフィールドも更新される。
【００６９】
さらに、このケースでは、新たな受信データセグメント６０３は上位層に送信される。この上位層が、関連するコンテンツ分析をＫバイトに基づいて適用することを可能にするために、データセグメントは、ストレージ構造４２によって指されるデータバッファ内に記憶されている最後のＫ−１バイトに関連付けられて送信される。換言すれば、これらの最後のＫ−１バイトがデータセグメント６０３に繋げられて、その結果が上位層に送信される。
【００７０】
図７は、それぞれのシーケンス番号に従って、新たな受信データセグメント７０３を既存のＧｏＳの第１のバイトと繋げることができる、同様のケースを示している。第１の部分７０１はこの新たな受信データセグメントの受信を示し、第２の部分７０２はこの新たなデータセグメントの受信を考慮に入れたストレージ構造のチェーン化されたリストを示す。
【００７１】
新たなデータセグメント７０３を受信する前は、ストレージ構造４１、４２、及び４３のチェーン化されたリストが受信ウィンドウを表す。既存のＧｏＳ＃０がストレージ構造４２に関連付けられる。
【００７２】
新たな受信データセグメント７０３を、ＧｏＳ＃０の先頭に繋げることができる。そのとき、この新たなデータセグメント７０３を考慮に入れるように、ストレージ構造４２が更新される。より正確には、データセグメント７０３を含むＧｏＳ＃０の新たな長さを指示するように長さフィールドが更新され、そのデータセグメント７０３の最初のＫ−１バイトのコピーを指すように、最初のＫ−１バイトのデータバッファへのポインタが更新される。
【００７３】
新たなデータセグメント７０３は、部分７０１におけるストレージ構造４２（つまり更新前のストレージ構造）のフィールド３１によって指されていた最初のＫ−１バイトと繋げられた後、上位層に送信されることができる。
【００７４】
図８は、受信ウィンドウ内のホールをぴったり埋める新たなデータセグメントの受信を示している。このケースでは、新たな受信データセグメント８０３を、ストレージ構造８２によって表されるＧｏＳ＃０、及びストレージ構造８３によって表されるＧｏＳ＃１において繋げることができる。
【００７５】
新たなデータセグメント８０３は、ストレージ構造８３のフィールド３１によって指される最初のＫ−１バイト、及びストレージ構造８２のフィールド３１によって指される最後のＫ−１バイトと繋げられ、その後、繋げた結果が上位層に送信される。
【００７６】
さらに、部分８０２に示されるように、チェーン化されたストレージ構造のリストが更新される。より正確には、新たな受信データセグメント８０３を通じてＧｏＳ＃０及びＧｏＳ＃１を共に連結することができるため、ＧｏＳを除去することができる。次に、ストレージ構造８３が消滅することができ、それに従って、ストレージ構造８２が、以前からのＧｏＳ＃０、ＧｏＳ＃１、及び新たな受信データセグメント８０３を含む新たなＧｏＳ＃０を表すように更新される。
【００７７】
新たな受信データセグメントによって受信ウィンドウの上側部分を埋めることが可能になると、受信ウィンドウをシフトすることができる。図９はこのケースを示している。前の受信ウィンドウの最後のセグメントグループの最後のＫ−１バイト９１がメモリ内に保持される。
【００７８】
図１０は、本発明の一実施形態による、上位層に送信されるデータを示している。
【００７９】
部分１０１は新たな受信データセグメントに対応し、部分１０３は、前のデータセグメントが既に受信されている場合の、該前のデータセグメントの最後のＫ−１バイトに対応し、部分１０２は、次のデータセグメントが既に受信されている場合の、該次のデータセグメントの最初のＫ−１バイトに対応する。
【００８０】
必要となるメモリを削減し、上位層において適用されるマッチングプロセスを加速するために、次のセクションはメカニズムの最適化を説明する。
【００８１】
上位層がパターンマッチングアルゴリズムを適用することを担当するとき、このアルゴリズムの状態ベクトル値は、新たなデータセグメントが受信される度に記憶され得る。この状態ベクトル値は、マッチングアルゴリズムが現在の分析の終了時点で止まっているときの、たとえばエイホ・コラシックのようなＤＦＡ（「決定性有限オートマトン(Deterministic Finite Automata)」を表す）の現在の状態に対応するか、又はＮＦＡ（「非決定性有限オートマトン(Non Deterministic Finite Automata)」を表す）のコンテキストを記憶するビットマップ符号化状態ベクトル値に対応することができる。
【００８２】
本発明の一実施形態では、受信データセグメントの最後のＫ−１バイトのコピーを直接保持する代わりに、有利にはパターンマッチングアルゴリズムの状態ベクトル値が記憶される。より正確には、データセグメントが上位層に送信されると、上位層は、該層のパターンマッチングアルゴリズムを適用し、新たな状態ベクトル値を取得する。この新たな状態ベクトル値は、次に下位層に送信され、それによって下位層は、本発明の一実施形態に従って、次のデータセグメントが依然として受信されていないとき、この状態ベクトル値を、直前に送信したデータセグメントと関連付けられる固有情報として、該直前に送信したデータセグメントと関連付けて記憶することができる。
【００８３】
このケースでは、セグメントの最後のＫ−１バイトのコピーを保持する必要がない。受信データセグメントの最初のＫ−１バイトのみを記憶して、重複パターンの検出を可能にすることができる。そして、状態機械(state machine)は、新たなデータセグメントを受信すると、現在の状態から継続(continue)することができる。
【００８４】
第１に、この最適化によってメモリ空間を節約することができる。実際に、状態ベクトル値を記憶するのに必要とされるメモリ空間は、一般的にＫ−１バイトを記憶するのに必要とされるメモリ空間よりも小さくすることができる。第２に、この最適化によって、既に受信するとともに既に上位層に送信した別のデータセグメントに新たなデータセグメントを繋げることができるときに、受信データセグメントの終端（最後のＫ−１バイト）を２回解析することが回避される。状態ベクトル値を記憶することによって、解析アルゴリズムが、記憶されている状態ベクトル値を用いて開始することが可能になる。結果として、分析は、有利にはこの開始点から継続することができる。
【００８５】
これによって、従来技術による完全な再組み立ての後に実施されるのと同じだけ、分析を速く実施することが可能になる。この実施形態は、データセグメントのほとんどが順序どおりに受信されるときに特に関心を引く。
【００８６】
ケースに応じて、上位層におけるコンテンツ分析は、次のデータセグメントが依然として受信されていないときは現在のデータセグメントに対して実施でき、又は次のデータセグメントがすでに受信されているときは、現在のデータセグメントを次のデータセグメントの最初のＫ−１バイトと繋げたものに対して実施できる。
【００８７】
この実施形態によれば、ストレージ構造は、セグメントグループの最後のＫ−１バイトを記憶するデータバッファへのポインタを記憶する代わりに状態ベクトル値を記憶するフィールドを含む。この状態ベクトルフィールドは、例えばベクトルのサイズに応じて、直接、状態ベクトル値としてもよく、又は状態ベクトル値のコピーへのポインタとしてもよい。
【００８８】
図１１は、このような一実施形態による、上位層に送信されるデータを示している。
【００８９】
部分１１１は新たな受信データセグメントに対応し、部分１１２は次のデータセグメントの最初のＫ−１バイトに対応し、部分１１３は前のデータセグメントに関連する固有情報に対応する。固有情報は、このコンテキストでは状態ベクトル値である。
【００９０】
この場合、完全な再組み立てが実施されていないため、メモリ空間を節約することができる。受信ウィンドウは、受信することができる許可されたシーケンス番号の範囲を特定するウィンドウ最下部変数及びウィンドウ最上部変数によって境界を定めることができる。
【００９１】
ストレージ構造毎に、セグメントグループの最初のＫ−１バイトを記憶するか、又は代替的にパターンマッチングアルゴリズムの現在の状態ベクトル値を記憶するのに、小さなデータバッファしか必要とされない。
【００９２】
図１２は、本発明の一実施形態によるプロトコルスタックを含む端末を示している。
【００９３】
端末１２０は、ネットワークからの受信データに適合され、これらの受信データに基づいてコンテンツ分析が実行される。端末１２０は、受信データセグメントを送信する方法を実行するプロトコルスタック１２４を含む。
【００９４】
下位層は、
現在のデータセグメントを受信するようになっているレシーバ１２１と、
現在のデータセグメントに先行するデータセグメントが依然として受信されていない場合に、上記現在のデータセグメントの最初のＫ−１バイトを、該現在のデータセグメントと関連付けて記憶するようになっているデータバッファ１２２と、
現在のデータセグメントの次のデータセグメントが依然として受信されていない場合に、上記現在のデータセグメントの最後のＫ−１バイトに関連する固有情報を、該現在のデータセグメントと関連付けて記憶するようになっているデータバッファ１２５と、
上記現在のデータセグメントを上位層に送信するようになっているトランスミッタ１２３と、
を備え、上記現在のデータセグメントは、次のデータセグメントが既に受信されている場合に、該次のデータセグメントと関連付けて記憶されている最初のＫ−１バイトと共に送信され、先行するデータセグメントが既に受信されている場合に、該先行するデータセグメントに関連付けて記憶されている上記固有情報と共に送信される。
【００９５】
初期化ステップの間に、空いているストレージ構造のプール及び空いているデータバッファのプールを定義することができる。それらは、接続を処理するのに必要とされるメモリリソースを動的に割当て及び割当て解除するために使用される。これらのプールのサイズは、たとえば、画定された受信ウィンドウ内の所与の数のホールとの所与の数の接続を処理することが可能になるように選択することができる。
【００９６】
本発明の一実施形態によれば、受信データセグメントが受信ウィンドウ内に適合する場合（つまり、受信データセグメントが大きすぎない場合、又は受信データセグメントが考察中の受信ウィンドウ内に位置する場合）に、プロトコルスタックにおけるＴＣＰ層に対応することができる下位層を検査することが可能である。重複するセグメントがないかを検査することが可能である。異常が検出されると、エラーを報告することができ、さらなる処理を中断することができる。
【００９７】
幾つかの状態では、所与のオフセットにおいて特定の文字列が存在するか否かを検査するか、又は所与のオフセットに位置する文字列を特定することが必要とされる。このケースでは、受信データセグメントの一部分しか関心を引き得ない。この部分は、開始シーケンス番号及び長さ値によって特定され得る。一実施形態によれば、関心を引く受信ウィンドウ内の位置を特定することによって、このようなアプリケーションを実施することが非常に容易である。このために、受信ウィンドウ内の位置に関連する情報を下位層から上位層へ送信することが可能である。この情報はシーケンス番号とすることができる。
【００９８】
本発明の一実施形態は、たとえば、プライベートネットワークに属するホストへのトラフィックを転送するゲートウェイにおいて有利に実施することができる。
【００９９】
上位層は、たとえば、ウィルススキャン、トラフィック異常検出、ＱｏＳアプリケーション、又はトラフィック分析のようなコンテンツ分析を必要とするアプリケーションを実行することができる。本発明の方法が必要とするメモリ空間はより少ないため、有利には、たとえば多くのＴＣＰ接続を開くことに基づく攻撃の効率が低くなる。結果として、この方法によって、幾つかの攻撃に対する防御を増大することができる。
【０１００】
プロトコルの識別は、パケットの複数の部分を分析することを必要とする古典的なアプリケーションである。たとえば、ＳＩＰ又はＨＴＴＰのようなプロトコルにおいて、メソッド名、ヘッダのような何らかの関心を引くフィールドを抽出するか、又はメッセージの境界設定を実施することが可能である。この種類の処理は、ＳＳＬ（「セキュアソケットレイヤ(Secure Socket Layer)」を表す）トランザクションのモニタリングを行う調査を実施するときに必要とされる。ＳＳＬネゴシエーションフェーズの開始及び終了は、パケットコンテンツが暗号化されていないため安全ではなく、所与のバイトパターンを探すことによって識別することができる。このバイトパターンは、完全なペイロードと比較して短く、その位置特定は既知であるため、完全なペイロードを調べる必要もなければ記憶する必要もない。本発明の一実施形態による方法を実行することによって、必要となるメモリを削減し、リソース消耗攻撃に対し端末をよりロバストにすることができる。
【０１０１】
本発明の一実施形態による方法を、ペイロード全体を再構築することなく、ＩＤＳ／ＩＰＳ内、又は何らかのパケット制御を実施することを必要とする任意の機器内に位置することができるＴＣＰ「スヌーパ(snooper)」モジュールにおいて実行することが非常に有利であり得る。そのような機器は、フロー再組み立てを実施する従来の解決策と比較して必要とされるメモリ空間を小さくしながら、たとえば、ペイロード検査によるプロトコルの識別と共にネットワーク接続のモニタリングを実施することができる。
【０１０２】
このような方法を、（たとえばＵＤＰに関して）トランスポート層再組み立てによってセグメンテーションがサポートされていないときに、ＩＰデフラグメンテーションに適用することも有利である。このケースでは、受信ウィンドウはＩＰデータグラムの長さに対応することができる。これは一般的に、古典的なウィンドウサイズよりも大幅に小さい。フラグメントはセグメントに非常に類似する。シーケンス番号の代わりに、オフセットを使用してＩＰデータグラム内のフラグメントの開始位置を特定することができる。
【図１】
2010158016.tif 000003
【図２】
2010158016.tif 000004
【図３】
2010158016.tif 000005
【図４】
2010158016.tif 000006
【図５】
2010158016.tif 000007
【図６】
2010158016.tif 000008
【図７】
2010158016.tif 000009
【図８】
2010158016.tif 000010
【図９】
2010158016.tif 000011
【図１０】
2010158016.tif 000012
【図１１】
2010158016.tif 000013
【図１２】
2010158016.tif 000014
【外国語明細書】
2010158016.tif 000015
2010158016.tif 000016
2010158016.tif 000017
2010158016.tif 000018
2010158016.tif 000019
2010158016.tif 000020
2010158016.tif 000021
2010158016.tif 000022
2010158016.tif 000023
2010158016.tif 000024
2010158016.tif 000025
2010158016.tif 000026
2010158016.tif 000027
2010158016.tif 000028
2010158016.tif 000029
2010158016.tif 000030
2010158016.tif 000031
2010158016.tif 000032
2010158016.tif 000033
2010158016.tif 000034
2010158016.tif 000035
2010158016.tif 000036
2010158016.tif 000037
2010158016.tif 000038
2010158016.tif 000039
2010158016.tif 000040
2010158016.tif 000041
2010158016.tif 000042
2010158016.tif 000043
2010158016.tif 000044
2010158016.tif 000045