(57)【特許請求の範囲】
【請求項１】
複数の不揮発性パケット・ストレージ・メモリ・ユニットと、
ファイル・システムを含む不揮発性ファイル・システム・メモリ・ユニットと、
フィールドプログラマブル・ゲート・アレイ技術に基づくネットワーク・インターフェース・ユニットと、前記ネットワーク・インターフェース・ユニットは、順次受信されるパケットをチャンクに配置するように構成され、各チャンクは、複数のパケットを含み、前記ネットワーク・インターフェース・ユニットは、チャンクごとにチャンク・インデックスを生成するようにさらに構成され、前記チャンク・インデックスは、関連するチャンク内の最初のパケットおよび最後のパケットのタイムスタンプならびに前記関連するチャンク内のパケットのカウントを含み、
前記ネットワーク・インターフェース・ユニットに結合された第１のプロセッサおよび第１のメモリと、前記第１のメモリは、第１のリング・バッファ、インデックス・バッファ、およびチャンク処理キューを含み、
前記第１のプロセッサおよび前記不揮発性ファイル・システム・メモリ・ユニットに結合された第２のプロセッサおよび第２のメモリと、前記第２のメモリは、第２のリング・バッファおよび入出力キューを含み、
前記第２のプロセッサおよび前記複数の不揮発性パケット・ストレージ・メモリ・ユニットに結合されたストレージ・コントローラと
を含むシステムであって、
前記ネットワーク・インターフェース・ユニットは、直接メモリ・アクセス転送によってチャンクを前記第１のリング・バッファに書き込み、関連するチャンク・インデックスを前記インデックス・バッファに書き込むように構成され、
前記第１のプロセッサは、前記第１のリング・バッファ内に記憶された特定のチャンクのために前記入出力キュー内のエントリおよび前記チャンク処理キュー内のエントリを割り振り、前記特定のチャンクを識別するために前記チャンク処理キューを読み取り、前記特定のチャンクを前記第１のリング・バッファから前記入出力キュー内の前記割り振られたエントリに関連する前記第２のリング・バッファ内の位置にコピーするように構成され、
前記第２のプロセッサは、前記特定のチャンクを前記複数の不揮発性パケット・ストレージ・メモリ・ユニットのうちの１つに書き込むように前記ストレージ・コントローラに指示するように構成され、
前記第１のプロセッサまたは前記第２のプロセッサは、前記関連するチャンク・インデックスを前記ファイル・システムに書き込むようにさらに構成される
システム。
【請求項２】
前記関連するチャンク・インデックス内のパケットの前記カウントは、前記関連するチャンク内の伝送制御プロトコル（ＴＣＰ）パケットのカウントおよび前記関連するチャンク内のユーザ・データグラム・プロトコル（ＵＤＰ）パケットのカウントを含む、請求項１に記載のシステム。
【請求項３】
前記チャンクのそれぞれのサイズは、固定され、同一である、請求項１に記載のシステム。
【請求項４】
前記チャンクのそれぞれは、整数個数のパケットを含み、前記チャンクのいずれかの未使用空間は、パディング・バイトによって充填される、請求項１に記載のシステム。
【請求項５】
前記第１のプロセッサおよび前記第１のメモリは、第１のｎｏｎ−ｕｎｉｆｏｒｍ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ（ＮＵＭＡ）ノードの一部であり、前記第２のプロセッサおよび前記第２のメモリは、第２のＮＵＭＡノードの一部である、請求項１に記載のシステム。
【請求項６】
前記第１のプロセッサまたは前記第２のプロセッサは、前記チャンク処理キュー内に連続して配置される前記チャンクのグループに関して、
前記チャンクのグループに誤り訂正符号を適用することによって１つまたは複数のパリティ・チャンクを計算し、
前記１つまたは複数のパリティ・チャンクを前記第２のメモリのチャンク・パリティ書込バッファ内に記憶し、
前記複数の不揮発性パケット・ストレージ・メモリ・ユニットとは別々の１つまたは複数の不揮発性パリティ・ストレージ・メモリ・ユニットにまたがって前記１つまたは複数のパリティ・チャンクを書き込む
ようにも構成される、請求項１に記載のシステム。
【請求項７】
前記複数の不揮発性パケット・ストレージ・メモリ・ユニットは、複数のソリッド・ステート・ドライブ（ＳＳＤ）を含む、請求項１に記載のシステム。
【請求項８】
前記ネットワーク・インターフェース・ユニットは、それぞれが少なくとも１０ギガビット毎秒の回線速度を有する１つまたは複数のイーサネット・インターフェースを含む、請求項１に記載のシステム。
【請求項９】
前記第１のプロセッサおよび前記第１のメモリは、第１のシステム・バスによって前記ネットワーク・インターフェース・ユニットに通信可能に結合され、前記第２のプロセッサおよび前記第２のメモリは、第２のシステム・バスによって前記不揮発性ファイル・システム・メモリ・ユニットに通信可能に結合される、請求項１に記載のシステム。
【請求項１０】
前記ネットワーク・インターフェース・ユニットは、前記第１のシステム・バスによって前記第１のメモリにチャンクを書き込む直接メモリ・アクセス（ＤＭＡ）エンジンを含み、前記ネットワーク・インターフェース・ユニットは、前記ＤＭＡエンジンが前記第１のシステム・バス上での輻輳を検出する時に遅延または受信されたパケットを捨てさせる背圧スロットルを含む、請求項９に記載のシステム。
【請求項１１】
第１のメモリによってネットワーク・インターフェース・ユニットからチャンクおよびチャンク・インデックスを受信することと、前記チャンクは、前記ネットワーク・インターフェース・ユニットによってキャプチャされた複数のパケットを含み、前記チャンク・インデックスは、前記チャンク内の最初のパケットおよび最後のパケットのタイムスタンプならびに前記チャンク内のパケットのカウントを含み、
前記第１のメモリの第１のリング・バッファ内に前記チャンクを記憶し、前記第１のメモリのインデックス・バッファ内に前記チャンク・インデックスを記憶することと、
前記第１のメモリに結合された第１のプロセッサによって、第２のメモリの入出力キュー内の前記チャンクのエントリと前記第１のメモリのチャンク処理キュー内の前記チャンクのエントリとを割り振ることと、
前記チャンクを識別するために、前記第１のプロセッサによって、前記チャンク処理キューを前記第２のメモリおよびストレージ・コントローラに読み取ることと、
前記第１のプロセッサによって、前記チャンクを前記第１のリング・バッファから前記第２のメモリの第２のリング・バッファ内の位置にコピーすることと、前記位置は、前記入出力キュー内の前記割り振られたエントリに関連し、
第２のプロセッサによって、前記ストレージ・コントローラに結合された複数の不揮発性パケット・ストレージ・メモリ・ユニットのうちの１つに前記チャンクを書き込むように前記ストレージ・コントローラに指示することと、
前記第１のプロセッサまたは前記第２のプロセッサによって、前記チャンク・インデックスをファイル・システムに書き込むことと
を含む方法。
【請求項１２】
前記チャンクのそれぞれのサイズは、固定され、同一である、請求項１１に記載の方法。
【請求項１３】
前記チャンクのそれぞれは、整数個数のパケットを含み、前記チャンクのいずれかの未使用空間は、パディング・バイトによって充填される、請求項１１に記載の方法。
【請求項１４】
前記第１のプロセッサおよび前記第１のメモリは、第１のｎｏｎ−ｕｎｉｆｏｒｍ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ（ＮＵＭＡ）ノードの一部であり、前記第２のプロセッサおよび前記第２のメモリは、第２のＮＵＭＡノードの一部である、請求項１１に記載の方法。
【請求項１５】
前記第１のプロセッサまたは前記第２のプロセッサは、前記チャンク処理キュー内に連続して配置される前記チャンクのグループに関して、
前記チャンクのグループに誤り訂正符号を適用することによって１つまたは複数のパリティ・チャンクを計算し、
前記１つまたは複数のパリティ・チャンクを前記第２のメモリのチャンク・パリティ書込バッファ内に記憶し、
前記複数の不揮発性パケット・ストレージ・メモリ・ユニットとは別々の１つまたは複数の不揮発性パリティ・ストレージ・メモリ・ユニットにまたがって前記１つまたは複数のパリティ・チャンクを書き込む
ようにも構成される、請求項１１に記載の方法。
【請求項１６】
前記複数の不揮発性パケット・ストレージ・メモリ・ユニットは、複数のソリッド・ステート・ドライブ（ＳＳＤ）を含む、請求項１１に記載の方法。
【請求項１７】
前記ネットワーク・インターフェース・ユニットは、それぞれが少なくとも１０ギガビット毎秒の回線速度を有する１つまたは複数のイーサネット・インターフェースを含む、請求項１１に記載の方法。
【請求項１８】
前記第１のプロセッサおよび前記第１のメモリは、第１のシステム・バスによって前記ネットワーク・インターフェース・ユニットに通信可能に結合され、前記第２のプロセッサおよび前記第２のメモリは、第２のシステム・バスによって前記複数の不揮発性パケット・ストレージ・メモリ・ユニットに通信可能に結合される、請求項１１に記載の方法。
【請求項１９】
前記ネットワーク・インターフェース・ユニットは、前記第１のシステム・バスによって前記第１のメモリにチャンクを書き込む直接メモリ・アクセス（ＤＭＡ）エンジンを含み、前記ネットワーク・インターフェース・ユニットは、前記ＤＭＡエンジンが前記第１のシステム・バス上での輻輳を検出する時に遅延または受信されたパケットを捨てさせる背圧スロットルを含む、請求項１８に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
［0001］  データ・パケット・キャプチャは、ネットワークおよびネットワーク・プロトコルの保護およびデバッグのための必須のツールになった。コンピューティング・デバイスは、ネットワーク・インターフェースが接続されているネットワークのセグメントをトラバースするパケットの一部またはすべてを受信するようにネットワーク・インターフェースを構成することによって、ネットワーク上のパケットをキャプチャすることができる。コンピューティング・デバイスは、キャプチャされたパケットを記憶し、かつ／またはその内容の表現をリアル・タイムで表示することができる。いくつかの例として、侵入検知システム（ＩＤＳ）、侵入防止システム（ＩＰＳ）、およびパケット・アナライザは、正確なデータ・パケット・キャプチャに頼る。
【発明の概要】
【０００２】
［0002］  ＴｃｐｄｕｍｐおよびＷｉｒｅｓｈａｒｋなどの従来のデータ・パケット・キャプチャ・ツールは、汎用コンピューティング・デバイス（たとえば、ＷＩＮＤＯＷＳ（登録商標）オペレーティング・システムまたはＬＩＮＵＸ（登録商標）オペレーティング・システムを動作させるパーソナル・コンピュータ）上で動作する。これらのツールは、記憶またはリアル・タイム表示のためにパケットをキャプチャする機構を提供する。
【０００３】
［0003］  プロセッサ速度、メモリ・サイズ、およびネットワーク・データ・レートは、それぞれ最近２０年にわたって大幅に増大したが、ネットワーク・データ・レート改善は、プロセッサ速度およびメモリ・サイズの改善をしのいだ。その結果、高速ネットワーク内で信頼性のある低損失データ・パケット・キャプチャを提供することは、困難である。たとえば、１０ギガビット毎秒、４０ギガビット毎秒、または１００ギガビット毎秒の速度で動作する今日のイーサネット・リンクの１つの上ですべてのデータ・パケットをキャプチャすることは、一般的なコンピューティング・デバイスでのソフトウェアベースの実装を使用することによっては事実上不可能である。キャプチャされたパケットは、コンピューティング・デバイスのカーネル（オペレーティング・システム）による処理を待っている時にネットワーク・インターフェース内で捨てられ、コンピューティング・デバイス上で動作するパケット・キャプチャ・アプリケーションによる処理を待っている時にカーネル内で捨てられ、あるいは、パケット到着レートが、キャプチャされたパケットをコンピューティング・デバイスのファイル・システム（たとえば、ディスク・ドライブ）に書き込めるレートを超えるので捨てられる可能性がある。
【０００４】
［0004］  本明細書の実施形態は、個々のパケットではなくパケットのチャンクを処理するパケット・キャプチャ・アーキテクチャを含む。これらのチャンクは、カスタマイズされたネットワーク・インターフェースとメモリ・ユニットと長期（不揮発性）パケット・ストレージとの間で転送される時の十分なバッファリングを用いてパイプライン化された形で処理される。この特別な設計のアーキテクチャの結果として、１００ギガビット毎秒の持続的キャプチャ・レートを達成することができる。
【０００５】
［0005］  したがって、第１の例の実施形態は、複数の不揮発性パケット・ストレージ・メモリ・ユニットと、ファイル・システムを含む不揮発性ファイル・システム・メモリ・ユニットとを含むことができる。第１の例の実施形態は、フィールドプログラマブル・ゲート・アレイ技術に基づくネットワーク・インターフェース・ユニットをも含むことができ、ネットワーク・インターフェース・ユニットは、順次受信されるパケットをチャンクに配置するように構成され、各チャンクは、複数のパケットを含み、ネットワーク・インターフェース・ユニットは、チャンクごとにチャンク・インデックスを生成するようにさらに構成され、チャンク・インデックスは、関連するチャンク内の最初のパケットおよび最後のパケットのタイムスタンプならびに関連するチャンク内のパケットのカウントを含む。第１の例の実施形態は、ネットワーク・インターフェース・ユニットに結合された第１のプロセッサおよび第１のメモリをも含むことができ、第１のメモリは、第１のリング・バッファ、インデックス・バッファ、およびチャンク処理キューを含む。第１の例の実施形態は、第１のプロセッサおよび不揮発性ファイル・システム・メモリ・ユニットに結合された第２のプロセッサおよび第２のメモリをも含むことができ、第２のメモリは、第２のリング・バッファおよび入出力キューを含む。第１の例の実施形態は、第２のプロセッサおよび複数の不揮発性パケット・ストレージ・メモリ・ユニットに結合されたストレージ・コントローラをも含むことができる。ネットワーク・インターフェース・ユニットは、直接メモリ・アクセス転送によってチャンクをキャプチャ・リング・バッファに書き込み、関連するチャンク・インデックスをインデックス・バッファに書き込むように構成され得る。第１のプロセッサは、第１のリング・バッファ内に記憶された特定のチャンクのために入出力キュー内のエントリおよびチャンク処理キュー内のエントリを割り振り、特定のチャンクを識別するためにチャンク処理キューを読み取り、特定のチャンクを第１のリング・バッファから入出力キュー内の割り振られたエントリに関連する第２のリング・バッファ内の位置にコピーするように構成され得る。第２のプロセッサは、特定のチャンクを複数の不揮発性パケット・ストレージ・メモリ・ユニットのうちの１つに書き込むようにストレージ・コントローラに指示するように構成され得る。第１のプロセッサまたは第２のプロセッサは、関連するチャンク・インデックスをファイル・システムに書き込むようにさらに構成され得る。
【０００６】
［0006］  第２の例の実施形態は、第１のメモリによってネットワーク・インターフェース・ユニットからチャンクおよびチャンク・インデックスを受信することを含むことができ、チャンクは、ネットワーク・インターフェース・ユニットによってキャプチャされた複数のパケットを含み、チャンク・インデックスは、チャンク内の最初のパケットおよび最後のパケットのタイムスタンプならびにチャンク内のパケットのカウントを含む。第２の例の実施形態は、第１のメモリの第１のリング・バッファ内にチャンクを記憶し、第１のメモリのインデックス・バッファ内にチャンク・インデックスを記憶することをも含むことができる。第２の例の実施形態は、第１のメモリに結合された第１のプロセッサによって、第２のメモリの入出力キュー内のチャンクのエントリと第１のメモリのチャンク処理キュー内のチャンクのエントリとを割り振ることをも含むことができる。第２の例の実施形態は、チャンクを識別するために、第１のプロセッサに結合された第１のプロセッサによって、チャンク処理キューを第２のメモリおよびストレージ・コントローラに読み取ることをも含むことができる。第２の例の実施形態は、第１のプロセッサによって、チャンクを第１のリング・バッファから第２のメモリの第２のリング・バッファ内の位置にコピーすることをも含むことができ、位置は、入出力キュー内の割り振られたエントリに関連する。第２の例の実施形態は、第２のプロセッサによって、ストレージ・コントローラに結合された複数の不揮発性パケット・ストレージ・メモリ・ユニットのうちの１つにチャンクを書き込むようにストレージ・コントローラに指示することをも含むことができる。第２の例の実施形態は、第１のプロセッサまたは第２のプロセッサによって、チャンク・インデックスをファイル・システムに書き込むことをも含むことができる。
【０００７】
［0007］  第３の例の実施形態は、パケット・フィルタ指定を入手することを含むことができ、パケット・フィルタ指定は、時間期間およびプロトコルの表現を含む。  第３の例の実施形態は、ファイル・システムに記憶された複数のチャンク・インデックスにパケット・フィルタ指定を適用することをも含むことができる。複数のチャンク・インデックスは、ファイル・システムとは別々の複数の不揮発性パケット・ストレージ・メモリ・ユニット内に記憶されたキャプチャされたパケットのチャンクにそれぞれ関連することができる。複数のチャンク・インデックスは、チャンク内のキャプチャされたパケットのそれぞれのキャプチャ・タイムスタンプおよびプロトコルの表現を含むことができる。パケット・フィルタ指定の適用は、パケット・フィルタ指定と一致するパケットを含む複数のチャンク・インデックスからのチャンク・インデックスのサブセットを識別することができる。第３の例の実施形態は、チャンク・インデックスのサブセットに関して、複数の不揮発性パケット・ストレージ・メモリ・ユニットから関連するチャンクを取り出すことを含むことができる。第３の例の実施形態は、関連するチャンクにパケット・フィルタ指定を適用することを含むことができる。パケット・フィルタ指定の適用は、パケット・フィルタ指定に一致するパケットのサブセットを識別することができる。第３の例の実施形態は、パケットのサブセットをファイル・システムに書き込むことを含むことができる。
【０００８】
［0008］  第４の例の実施形態では、製造品は、コンピューティング・システムによって実行される時に、コンピューティング・システムに、第１、第２、および／または第３の例の実施形態による動作を実行させるプログラム命令をその上に記憶された非一時的コンピュータ可読媒体を含むことができる。
【０００９】
［0009］  第５の例の実施形態では、コンピューティング・システムは、少なくとも１つのプロセッサならびにメモリおよびプログラム命令を含むことができる。プログラム命令は、メモリ内に記憶され、少なくとも１つのプロセッサによって実行される時に、コンピューティング・システムに、第１、第２、および／または第３の例の実施形態による動作を実行させることができる。
【００１０】
［0010］  第６の例の実施形態では、システムは、第１、第２、および／または第３の例の実施形態の動作のそれぞれを実行する様々な手段を含むことができる。
【００１１】
［0011］  上記ならびに他の実施形態、態様、利点、および代替案は、必要に応じて添付図面を参照して、以下の詳細な説明を読むことによって、当業者に明白になるだろう。さらに、この発明の概要と、本明細書で提供される他の説明および図面とは、例としてのみ実施形態を示すことを意図されており、したがって、多数の変形形態が可能である。たとえば、請求される実施形態の範囲内に留まりながら、構造的要素およびプロセス・ステップを再配置し、組み合わせ、分散させ、除去し、または他の形で変更することができる。
【図面の簡単な説明】
【００１２】
【図１】［0012］例の実施形態によるコンピューティング・デバイスを示す概略図である。
【図２】［0013］例の実施形態によるパケット・キャプチャをサポートするカーネル空間およびユーザ空間内のパケット処理を示す図である。
【図３Ａ】［0014］例の実施形態によるパケット・キャプチャ・ファイル内のデータの配置を示す図である。
【図３Ｂ】［0015］例の実施形態によるパケット・キャプチャ・ファイル・ヘッダを示す図である。
【図３Ｃ】［0016］例の実施形態によるパケット・キャプチャ・ファイル内の毎パケット・ヘッダを示す図である。
【図４】［0017］例の実施形態による高速パケット・キャプチャのために配置されたコンピューティング・デバイスを示す概略図である。
【図５】［0018］例の実施形態による高速パケット・キャプチャのために配置されたネットワーク・インターフェースを示す図である。
【図６Ａ】［0019］例の実施形態によるネットワーク・インターフェース・ユニット上の物理ポートの構成要素を示す図である。
【図６Ｂ】［0020］例の実施形態によるネットワーク・インターフェース・ユニット上の論理ポートを示す図である。
【図６Ｃ】［0021］例の実施形態によるネットワーク・インターフェース・ユニット上のパッカー・モジュールを示す図である。
【図６Ｄ】［0022］例の実施形態によるネットワーク・インターフェース・ユニット上の外部メモリ・インターフェース・モジュールを示す図である。
【図６Ｅ】［0023］例の実施形態によるネットワーク・インターフェース・ユニット上の直接メモリ・アクセス・エンジン・モジュールを示す図である。
【図７】［0024］例の実施形態によるホスト・プロセッサおよびメモリ配置を示す図である。
【図８Ａ】［0025］例の実施形態によるメモリ・モジュール内のデータ構造を示す図である。
【図８Ｂ】［0026］例の実施形態によるメモリ・モジュール内のデータ構造ならびにメモリ・モジュールと長期パケット・ストレージとの間の接続性を示す図である。
【図８Ｃ】［0027］例の実施形態による図８Ａおよび図８Ｂのデータ構造の間の関係を示す図である。
【図８Ｄ】［0028］例の実施形態による流れ図である。
【図９】［0029］例の実施形態による別の流れ図である。
【発明を実施するための形態】
【００１３】
［0030］  例の方法、デバイス、およびシステムを、本明細書で説明する。単語「例」および「例示的」が、本明細書では「例、実例、または例証として働く」を意味するのに使用されることを理解されたい。「例」または「例示的」として本明細書で説明されるすべての実施形態または特徴が、そのように述べられない限り、必ずしも他の実施形態または特徴より好ましいまたは有利と解釈されるべきではない。したがって、本明細書で提示される主題の範囲から逸脱せずに、他の実施形態を利用することができ、他の変更を行うことができる。
【００１４】
［0031］  したがって、本明細書で説明される例の実施形態は、限定的であることを意図されたものではない。本明細書で全般的に説明され、図面に示された本開示の諸態様を、様々な異なる構成で配置し、置換し、組み合わせ、分離し、設計することができることが、たやすく理解されよう。たとえば、「クライアント」構成要素および「サーバー」構成要素への特徴の分離を、複数の形で行うことができる。
【００１５】
［0032］  さらに、文脈がそうではないことを暗示しない限り、図面のそれぞれに示された特徴を、お互いと組み合わせて使用することができる。したがって、すべての図示された特徴が各実施形態に必要とは限らないことを理解しての上で、図面は、全般的に、１つまたは複数の全体的な実施形態の構成要素態様と見なされなければならない。
【００１６】
［0033］  さらに、本明細書または特許請求の範囲での要素、ブロック、またはステップのすべての列挙は、明瞭さのためのものである。したがって、これらの要素、ブロック、またはステップが特定の配置を厳守しまたは特定の順序で実行されることをそのような列挙が要求しまたは意味すると解釈してはならない。
【００１７】
Ｉ．例のコンピューティング・デバイスおよびその上でのパケット・キャプチャ
［0034］  上で注記したように、従来のコンピューティング・デバイス上でのパケット・キャプチャは、これらのデバイスが着信パケットの高い持続的レートの処理に最適化されていないことに起因して制限されている。このセクションは、これらのデバイスのボトルネックに焦点を合わせて、比較のためにこれらのデバイスを再検討する。このセクションは、キャプチャされたパケットを記憶するための人気のあるファイル・フォーマットをも紹介する。
【００１８】
Ａ．例のコンピューティング・デバイス
［0035］  図１は、コンピューティング・デバイス１００を例示し、そのようなコンピューティング・デバイス内に含まれ得る構成要素の一部を示す、単純化されたブロック図である。コンピューティング・デバイス１００は、クライアント・デバイス（たとえば、ユーザによって能動的に操作されるデバイス）、サーバー・デバイス（たとえば、クライアント・デバイスに計算サービスを提供するデバイス）、またはなんらかの他のタイプの計算プラットフォームとすることができる。
【００１９】
［0036］  この例では、コンピューティング・デバイス１００は、プロセッサ１０２、メモリ１０４、ネットワーク・インターフェース１０６、および入出力ユニット１０８を含み、これらのすべてが、システム・バス１１０または同様の機構によって結合され得る。いくつかの実施形態では、コンピューティング・デバイス１００は、他の構成要素および／または周辺デバイス（たとえば、取り外し可能なストレージ、プリンタなど）を含むことができる。
【００２０】
［0037］  プロセッサ１０２は、中央処理装置（ＣＰＵ）、コプロセッサ（たとえば、数学コプロセッサ、グラフィックス・コプロセッサ、または暗号コプロセッサ）、デジタル信号プロセッサ（ＤＳＰ）、ネットワーク・プロセッサ、および／またはプロセッサ動作を実行する、ある形の集積回路またはコントローラなど、任意のタイプのコンピュータ処理ユニットのうちの１つまたは複数を表すことができる。いくつかの場合に、プロセッサ１０２は、シングルコア・プロセッサとすることができ、他の場合に、プロセッサ１０２は、複数の独立な処理ユニットを有するマルチコア・プロセッサとすることができる。プロセッサ１０２は、実行される命令および関連データを一時的に記憶するレジスタ・メモリならびに最近使用された命令およびデータを一時的に記憶するキャッシュ・メモリをも含むことができる。
【００２１】
［0038］  メモリ１０４は、レジスタ・メモリおよびキャッシュ・メモリ（プロセッサ１０２内に組み込まれる場合がある）ならびにランダム・アクセス・メモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、および不揮発性メモリ（たとえば、フラッシュ・メモリ、ハード・ディスク・ドライブ（ＨＤＤ）、ソリッド・ステート・ドライブ（ＳＳＤ）、コンパクト・ディスク（ＣＤ）、デジタル・ビデオ・ディスク（ＤＶＤ）、および／またはテープ・ストレージ）を含むがこれらに限定されない、任意の形のコンピュータ使用可能メモリとすることができる。他のタイプのメモリを使用することができる。いくつかの実施形態で、メモリ１０４は、Ｉｎｔｅｒｎｅｔ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｒｆａｃｅ（ｉＳＣＳＩ）などのリモート・メモリを含むことができる。
【００２２】
［0039］  メモリ１０４は、プログラム命令および／またはプログラム命令が作用することのできるデータを記憶することができる。図１に示されているように、メモリは、ファームウェア１０４Ａ、カーネル１０４Ｂ、および／またはアプリケーション１０４Ｃを含むことができる。ファームウェア１０４Ａは、コンピューティング・デバイス１００の一部またはすべてをブートしまたは他の形で開始するのに使用されるプログラム・コードとすることができる。カーネル１０４Ｂは、メモリ管理、プロセスのスケジューリングおよび管理、入出力、ならびに通信のためのモジュールを含む、オペレーティング・システムとすることができる。カーネル１０４Ｂは、オペレーティング・システムがコンピューティング・デバイス１００のハードウェア・モジュール（たとえば、メモリ・ユニット、ネットワーキング・インターフェース、ポート、およびバス）と通信することを可能にするデバイス・ドライバをも含むことができる。アプリケーション１０４Ｃは、ウェブ・ブラウザまたは電子メール・クライアントなどの１つまたは複数のユーザ空間ソフトウェア・プログラムならびにこれらのプログラムによって使用される任意のソフトウェア・ライブラリとすることができる。ファームウェア１０４Ａ、カーネル１０４Ｂ、およびアプリケーション１０４Ｃのそれぞれは、関連するデータ（図示せず）をメモリ１０４内に記憶することができる。
【００２３】
［0040］  ネットワーク・インターフェース１０６は、イーサネット（たとえば、Ｆａｓｔ  Ｅｔｈｅｒｎｅｔ、Ｇｉｇａｂｉｔ  Ｅｔｈｅｒｎｅｔなど）などの１つまたは複数の有線インターフェースを含むことができる。ネットワーク・インターフェース１０６は、同軸ケーブルもしくは電力線などの非イーサネット媒体またはＳｙｎｃｈｒｏｎｏｕｓ  Ｏｐｔｉｃａｌ  Ｎｅｔｗｏｒｋｉｎｇ（ＳＯＮＥＴ）もしくはデジタル加入者線（ＤＳＬ）技術などの広域媒体を介する通信をサポートすることもできる。ネットワーク・インターフェース１０６は、ＩＥＥＥ  ８０２．１１（Ｗｉｆｉ）、ＢＬＵＥＴＯＯＴＨ（登録商標）、全地球測位システム（ＧＰＳ）、または広域無線インターフェースなど、１つまたは複数の無線インターフェースをさらに含むことができる。しかし、他の形態の物理層インターフェースおよび他のタイプの標準的なまたはプロプライエタリな通信プロトコルを、ネットワーク・インターフェース（１つまたは複数）１０６を介して使用することができる。一例として、コンピューティング・デバイス１００のいくつかの実施形態は、イーサネット・インターフェース、ＢＬＵＥＴＯＯＴＨ（登録商標）インターフェース、およびＷｉｆｉインターフェースを含むことができる。
【００２４】
［0041］  入出力ユニット１０８は、コンピューティング・デバイス１００とのユーザおよび周辺デバイスの相互作用を容易にすることができる。入出力ユニット１０８は、キーボード、マウス、タッチ・スクリーン、その他など、１つまたは複数のタイプの入力デバイスを含むことができる。同様に、入出力ユニット１０８は、スクリーン、モニタ、プリンタ、および／または１つもしくは複数の発光ダイオード（ＬＥＤ）など、１つまたは複数のタイプの出力デバイスを含むことができる。それに加えてまたはその代わりに、コンピューティング・デバイス１００は、たとえばｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ（ＵＳＢ）ポート・インターフェースまたはｈｉｇｈ−ｄｅｆｉｎｉｔｉｏｎ  ｍｕｌｔｉｍｅｄｉａ  ｉｎｔｅｒｆａｃｅ（ＨＤＭＩ）ポート・インターフェースを使用して他のデバイスと通信することができる。
【００２５】
［0042］  コンピューティング・デバイス１００を、パケット・キャプチャに使用することができる。具体的には、カーネル１０４Ｂおよびアプリケーション１０４Ｃに対する変更が、そのようなキャプチャを容易にすることができる。コンピューティング・デバイス１００は、ネットワーク・インターフェース１０６によってパケットを受信し、任意選択でこれらのパケットをカーネル１０４Ｂ内でフィルタリングし、その後、フィルタリングされたパケットをパケット・キャプチャ・アプリケーションに供給することができる。後者は、アプリケーション１０４Ｃのうちの１つとすることができる。いくつかの場合に、フィルタリングは、パケット・キャプチャ・アプリケーション自体で行われ得る。いずれにせよ、パケット・キャプチャ・アプリケーションは、記憶および／または表示のために一連のパケットを入手することができる。
【００２６】
Ｂ．例のプロトコル・スタック
［0043］  図２は、コンピューティング・デバイス１００などの汎用コンピュータのプロトコル・スタックを示す。キャプチャされたパケットは、プロトコル・スタック２００の少なくとも一部をトラバースすることができる。
【００２７】
［0044］  プロトコル・スタック２００は、２つの全般的なセクションすなわちカーネル空間およびユーザ空間に分割される。カーネル空間モジュールは、オペレーティング・システム機能を実行し、ユーザ空間モジュールは、特定のタイプのカーネルをサポートするコンピューティング・デバイス上で実行するように設計され得るエンドユーザ・アプリケーションまたはエンドユーザ・サービスである。したがって、ユーザ空間モジュールは、カーネルによって提供されるメモリ管理サービス、通信サービス、および入出力サービスに頼ることができる。図２のカーネル空間は、図１のカーネル１０４Ｂ一部を参照することができ、図２のユーザ空間は、図１のアプリケーション１０４Ｃの一部を参照することができる。
【００２８】
［0045］  一般に、プロトコル・スタック２００は、より多数またはより少数のソフトウェア・モジュールを含む可能性がある。具体的には、カーネル空間は、オペレーティング・システム動作を実行する追加のカーネル空間ソフトウェア・モジュールを含む可能性があり、ユーザ空間は、アプリケーション動作を実行する追加のユーザ空間ソフトウェア・モジュールを含む可能性がある。
【００２９】
［0046］  Ｗｉｆｉドライバ・モジュール２０２は、１つまたは複数の物理Ｗｉｆｉハードウェア構成要素を動作させ、かつ／または制御する、カーネル空間ソフトウェア・モジュールとすることができる。いくつかの実施形態で、Ｗｉｆｉドライバ・モジュール２０２は、Ｗｉｆｉハードウェアへのソフトウェア・インターフェースを提供し、コンピューティング・デバイス１００のカーネル１０４Ｂが、使用されるＷｉｆｉハードウェアの正確な制御機構を知る必要なしにＷｉｆｉハードウェア機能にアクセスすることを可能にする。データ・パケットがＷｉｆｉハードウェアによって送信されまたは受信される時に、これらのパケットは、Ｗｉｆｉドライバ・モジュール２０２を通過することができる。
【００３０】
［0047］  同様に、イーサネット・ドライバ・モジュール２０４は、１つまたは複数の物理イーサネット・ハードウェア構成要素を動作させ、かつ／または制御する、カーネル空間ソフトウェア・モジュールである。いくつかの実施形態で、イーサネット・ドライバ・モジュール２０４は、イーサネット・ハードウェアへのソフトウェア・インターフェースを提供し、コンピューティング・デバイス１００のカーネル１０４Ｂが、使用されるイーサネット・ハードウェアの正確な制御機構を知る必要なしにイーサネット・ハードウェア機能にアクセスすることを可能にする。データ・パケットがイーサネット・ハードウェアによって送信されまたは受信される時に、これらのパケットは、イーサネット・ドライバ・モジュール２０４を通過することができる。
【００３１】
［0048］  プロトコル・スタック２００は、図２に示されていない他のドライバ・モジュールをも含む場合がある。たとえば、ＢＬＵＥＴＯＯＴＨ（登録商標）ドライバ・モジュール、セルラ・ドライバ・モジュール、および／またはＧＰＳドライバ・モジュールが、プロトコル・スタック２００に組み込まれる場合がある。さらに、Ｗｉｆｉドライバ・モジュール２０２およびイーサネット・ドライバ・モジュール２０４のいずれかまたは両方が省略される場合がある。
【００３２】
［0049］  低水準ネットワーキング・モジュール２０６は、ドライバ・ソフトウェア・モジュールとネットワーク層ソフトウェア・モジュール（たとえば、ＩＰｖ６モジュール２１０およびＩＰｖ４モジュール２１２）との間でインバウンド・データ・パケットおよびアウトバウンド・データ・パケットをルーティングする。したがって、低水準ネットワーキング・モジュール２０６は、ソフトウェア・バスまたはスイッチング機構として働くことができ、おそらく、ドライバ・ソフトウェア・モジュールとネットワーク層ソフトウェア・モジュールとの間のアプリケーション・プログラミング・インターフェースを提供することができる。たとえば、低水準ネットワーキング・モジュール２０６は、インバウンド・データ・パケットがＩＰｖ６モジュール２１０およびＩＰｖ４モジュール２１２のうちの１つにルーティングされ得るようにするためにインバウンド・データ・パケットがその中に配置される１つまたは複数のキューと、アウトバウンド・データ・パケットがＷｉｆｉドライバ・モジュール２０２およびイーサネット・ドライバ・モジュール２０４のうちの１つにルーティングされ得るようにするためにアウトバウンド・データ・パケットがその中に配置される１つまたは複数のキューとを含むことができる。いくつかの実施形態で、低水準ネットワーキング・モジュール２０６は、別々のカーネル空間ソフトウェア・モジュールとしては存在しない場合があり、その機能性は、その代わりに、ドライバ・モジュールおよび／またはネットワーク層（たとえば、ＩＰｖ６および／またはＩＰｖ４）ソフトウェア・モジュールに組み込まれ得る。
【００３３】
［0050］  ＩＰｖ６モジュール２１０は、インターネット・プロトコル・バージョン６（ＩＰｖ６）を動作させる。ＩＰｖ６は、拡張されたアドレス空間、デバイス自動構成、単純化されたヘッダ、統合されたセキュリティおよびモビリティ・サポート、ならびに改善されたマルチキャスト能力を特徴とするインターネット・プロトコルのバージョンである。ＩＰｖ６モジュール２１０は、上位層モジュール（ＴＣＰモジュール２１４およびＵＤＰモジュール２１６のモジュールを含む）から受信したアウトバウンド・データ・パケットをＩＰｖ６ヘッダ内でカプセル化する。逆に、ＩＰｖ６モジュール２１０は、低水準ネットワーキング・モジュール２０６から受信したインバウンドＩＰｖ６データ・パケットをカプセル化解除もする。図２には示されていないが、ＩＰｖ６モジュール２１０は、ＩＰｖ６に関連するエラー・メッセージおよび情報メッセージのサポートならびにマルチキャストおよびアドレス解決を提供するＩＣＭＰｖ６モジュールに関連付けられ得る。
【００３４】
［0051］  ＩＰｖ４モジュール２１２は、インターネット・プロトコル・バージョン４（ＩＰｖ４）を動作させる。ＩＰｖ４は、ＩＰｖ６より狭いアドレス空間を特徴とするインターネット・プロトコルのバージョンである。ＩＰｖ６モジュール２１０と同様に、ＩＰｖ４モジュール２１２は、上位層モジュール（ＴＣＰモジュール２１４およびＵＤＰモジュール２１６のモジュールを含む）から受信したアウトバウンド・データ・パケットをＩＰｖ４ヘッダ内でカプセル化する。逆に、ＩＰｖ４モジュール２１２は、低水準ネットワーキング・モジュール２０６から受信したインバウンド・データ・パケットをカプセル化解除もする。図２には示されていないが、ＩＰｖ４モジュール２１２は、単純なエラー報告、診断、およびデバイスの制限された構成、ならびに宛先が到達不能である時、パケットがあるルーターから別のルーターにリダイレクトされた時、または多すぎる転送ホップを経験したことに起因してパケットが破棄された時を報告するメッセージを提供するＩＣＭＰｖ４モジュールに関連付けられ得る。
【００３５】
［0052］  本明細書で使用される時に、用語「インターネット・プロトコル」および「ＩＰ」は、ＩＰｖ６およびＩＰｖ４の一方または両方を指す可能性がある。
【００３６】
［0053］  ＴＣＰモジュール２１４は、伝送制御プロトコル（ＴＣＰ）を動作させる。ＴＣＰは、ネットワーキング・プロトコル・スタックのトランスポート層で動作する、信頼性のあるエンドツーエンド・プロトコルである。ＴＣＰは、ＴＣＰ接続が明示的に確立され、破壊されるという意味で、コネクション指向である。ＴＣＰは、送信側と受信側との間のありそうなパケット消失を検出し、潜在的に失われたパケットを再送することのできる機構を含む。ＴＣＰは、送信側が受信側からデータの少なくとも一部の肯定応答を受信する前に、制限された量のデータのみが、送信側によって送信され得、送信側が、過剰な量のデータで中間ネットワークを氾濫させるのを防ぐために輻輳制御機構を動作させることができるという点で、変更されたスライディング・ウィンドウ・プロトコルでもある。
【００３７】
［0054］  ＵＤＰモジュール２１６は、ユーザ・データグラム・プロトコル（ＵＤＰ）を動作させる。ＵＤＰは、コネクションレスの、信頼性のないトランスポート層プロトコルである。ＴＣＰとは異なって、ＵＤＰは、ＵＤＰセッションに関する状態をほとんど維持せず、ＵＤＰパケット内に含まれるアプリケーション・データの配送を保証しない。
【００３８】
［0055］  高水準ネットワーキング・モジュール２１８は、（ｉ）ユーザ空間ソフトウェア・モジュールと（ｉｉ）ネットワーク層またはトランスポート層のソフトウェア・モジュール（たとえば、ＴＣＰモジュール２１４およびＵＤＰモジュール２１６）との間でインバウンド・データ・パケットおよびアウトバウンド・データ・パケットをルーティングする。したがって、高水準ネットワーキング・モジュール２１８は、ソフトウェア・バスまたはスイッチング機構として働くことができ、おそらく、ユーザ空間ソフトウェア・モジュールとトランスポート層ソフトウェア・モジュールとの間のアプリケーション・プログラミング・インターフェースを提供することができる。たとえば、高水準ネットワーキング・モジュール２１８は、インバウンド・データ・パケットがユーザ空間ソフトウェア・モジュールにルーティングされ得るようにするためにインバウンド・データ・パケットがその中に配置される１つまたは複数のキューと、アウトバウンド・データ・パケットがＴＣＰモジュール２１４およびＵＤＰモジュール２１６のうちの１つにルーティングされ得るようにするためにアウトバウンド・データ・パケットがその中に配置される１つまたは複数のキューとを含むことができる。いくつかの実施形態で、高水準ネットワーキング・モジュール２１８は、ユーザ空間ソフトウェア・モジュールがデータを送信し、受信するのに使用できる明確に定義された機能呼出しを提供するＴＣＰ／ＩＰソケット・インターフェースとして実施され得る。
【００３９】
［0056］  上で注記したように、アプリケーション２２０およびアプリケーション２２２などのユーザ空間プログラムは、コンピューティング・デバイス１００のユーザ空間内で動作することができる。これらのアプリケーションは、たとえば、電子メール・アプリケーション、ソーシャル・ネットワーキング・アプリケーション、メッセージング・アプリケーション、ゲーミング・アプリケーション、またはなんらかの他のタイプのアプリケーションとすることができる。カーネル空間へのインターフェース（たとえば、高水準ネットワーキング・モジュール２１８および／または他のインターフェース）を介して、これらのアプリケーションは、入出力動作を実行できる可能性がある。
【００４０】
［0057］  これまでに説明された図２のモジュールは、着信（受信）および発信（送信）のパケットベース通信に使用されるソフトウェアを表す。着信パケットおよび発信パケットの処理の例を続ける。
【００４１】
［0058］  イーサネット・ハードウェアは、コンピューティング・デバイス１００にアドレッシングされたパケットを受信する時に、そのパケットをハードウェア・バッファ内にキューイングし、イーサネット・ドライバ・モジュール２０４に割込みを送ることができる。割込みに応答して、イーサネット・ドライバ・モジュール２０４は、ハードウェア・バッファからパケットを読み取り、パケットを妥当性検査し（たとえば、チェックサム動作を実行し）、パケットが配送されるべき上位層プロトコル（たとえば、ＩＰｖ６モジュール２１０またはＩＰｖ４モジュール２１２）を判定し、イーサネット・ヘッダおよびトレイラ・バイトをはぎ取り、上位層プロトコルの指示と共にパケットを低水準ネットワーキング・モジュール２０６に渡すことができる。
【００４２】
［0059］  低水準ネットワーキング・モジュール２０６は、判定された上位層プロトコルのキューにパケットを配置することができる。さしあたり、このプロトコルがＩＰｖ４であると仮定すると、低水準ネットワーキング・モジュール２０６は、パケットをキューに配置することができ、そのキューから、パケットはＩＰｖ４モジュール２１２によって読み取られる。
【００４３】
［0060］  ＩＰｖ４モジュール２１２は、キューからパケットを読み取り、パケットを妥当性検査し（たとえば、チェックサム動作を実行し、パケットが所定の回数を超えて転送されなかったことを検証し）、パケットがフラグメントである場合には他のパケットと組み合わせ、パケットが配送されるべき上位層プロトコル（たとえば、ＴＣＰモジュール２１４またはＵＤＰモジュール２１６）を判定し、ＩＰｖ４ヘッダ・バイトをはぎ取り、判定された上位層プロトコルにパケットを渡すことができる。さしあたり、このプロトコルがＴＣＰであると仮定すると、ＩＰｖ４モジュール２１２は、パケットをＴＣＰモジュール２１４に供給することができる。いくつかの場合に、これは、パケットをキューに配置することを伴う場合があり、あるいは、ＩＰｖ４モジュール２１２が、パケットにアクセスできるメモリ・アドレスをＴＣＰモジュール２１４に供給する場合がある。
【００４４】
［0061］  ＴＣＰモジュール２１４は、キューからパケットを読み取り、パケットを妥当性検査し、すべての必要なＴＣＰ輻輳制御および／またはスライディング・ウィンドウ動作を実行し、パケットが配送されるべきアプリケーション「ソケット」を判定し、ＴＣＰヘッダ・バイトをはぎ取り、判定されたアプリケーションの指示と共にパケットのペイロードを高水準ネットワーキング・モジュール２１８に渡すことができる。この点で、「パケット」は、ヘッダを全く含まず、ほとんどの場合に、アプリケーション・データのブロックのみである。
【００４５】
［0062］  高水準ネットワーキング・モジュール２１８は、ソケット通信アプリケーション・プログラミング・インターフェースに関連するキューを含むことができる。各「ソケット」は、通信セッションを表すことができ、１つまたは複数のアプリケーションに関連付けられ得る。あるソケットに関してキューイングされた着信データは、最終的に、適当なアプリケーションによって読み取られ得る。さしあたり、パケットからのアプリケーション・データがアプリケーション２２０用であると仮定すると、高水準ネットワーキング・モジュール２１８は、アプリケーション２２０のソケットのキュー内にアプリケーション・データを保持することができる。
【００４６】
［0063］  アプリケーション２２０は、ソケットからアプリケーション・データを読み取り、その後、このデータを処理することができる。この点で、着信パケット処理は終了している。
【００４７】
［0064］  発信パケット処理は、アプリケーション２２０などのアプリケーションが、ソケットにアプリケーション・データを書き込む時に始まるものとすることができる。ソケットは、たとえば、ＴＣＰソケットまたはＵＤＰソケットとすることができる。アプリケーション・データがＴＣＰソケットに関するものであると仮定すると、アプリケーション２２０は、高水準ネットワーキング・モジュール２１８にアプリケーション・データを供給することができ、高水準ネットワーキング・モジュール２１８は、ＴＣＰモジュール２１４のためにアプリケーション・データをキューイングすることができる。
【００４８】
［0065］  ＴＣＰモジュール２１４は、キューからアプリケーション・データを読み取り、アプリケーション・データのＴＣＰヘッダの内容を判定し、パケットを形成するためにＴＣＰヘッダ内にアプリケーション・データをカプセル化することができる。ＴＣＰヘッダ内のフィールドの値は、関連するＴＣＰセッションの状況ならびにアプリケーション・データの内容によって決定され得る。ＴＣＰモジュール２１４は、ＩＰｖ６モジュール２１０またはＩＰｖ４モジュール２１２のいずれかにパケットを供給することができる。この判定は、アプリケーション・データがそこから読み取られたソケットのタイプに基づいて行うことができる。さしあたり、ソケット・タイプがＩＰｖ４を示すと仮定すると、ＴＣＰモジュール２１４は、パケットをＩＰｖ４モジュール２１２に供給することができる。いくつかの場合に、これは、パケットをキューに配置することを含む場合があり、あるいは、ＴＣＰモジュール２１４が、そこでパケットにアクセスできるメモリ・アドレスをＩＰｖ４モジュール２１２に供給する場合がある。
【００４９】
［0066］  ＩＰｖ４モジュール２１２は、パケットのＩＰｖ４ヘッダの内容を判定し、ＩＰｖ４ヘッダ内にパケットをカプセル化することができる。ＩＰｖ４ヘッダ内のフィールドの値は、アプリケーション・データがそこから読み取られたソケットならびにアプリケーション・データの内容によって決定され得る。ＩＰｖ４モジュール２１２は、アウトバウンド・ハードウェア・インターフェースを判定するために、フォワーディング・テーブル内でパケットの宛先（たとえば、その宛先ＩＰアドレス）をルック・アップすることができる。さしあたり、このインターフェースがイーサネット・ハードウェアであると仮定すると、ＩＰｖ４モジュール２１２は、パケットがイーサネット・ドライバ・モジュール２０４のためにキューイングされなければならないことの指示と共に、パケットを低水準ネットワーキング・モジュール２０６に供給することができる。
【００５０】
［0067］  低水準ネットワーキング・モジュール２０６は、パケットを受信し、これをイーサネット・ドライバ・モジュール２０４のキュー内に配置することができる。代替案では、ＩＰｖ４モジュール２１２は、パケットをイーサネット・ドライバ・モジュール２０４に直接に供給することができる。
【００５１】
［0068］  いずれにせよ、イーサネット・ドライバ・モジュールは、パケットをイーサネット・ヘッダおよびトレイラ内にカプセル化し、そのパケットをイーサネット・ハードウェアに供給することができる。イーサネット・ハードウェアは、パケットを送信することができる。
【００５２】
［0069］  いくつかの環境では、用語「フレーム」は、データリンク層でフレーム化されたデータ（すなわち、少なくともいくつかのヘッダ・バイトまたはトレイラ・バイトを付加されたアプリケーション・データ）を指すのに使用され、用語「パケット」は、ネットワーク（ＩＰ）層でフレーム化されたデータを指すのに使用され、用語「セグメント」は、トランスポート（ＴＣＰまたはＵＤＰ）層でフレーム化されたデータを指すのに使用される。単純さのために、術語「パケット」が、層に関わりなくフレーム化されたアプリケーション・データを表すのに使用される。
【００５３】
Ｃ．パケット・キャプチャ
［0070］  プロトコル・スタック２００およびそのモジュールのそれぞれによって実行される動作を考慮すると、パケット・キャプチャ・アーキテクチャが、着信（受信）パケットと発信（送信）パケットとの両方を傍受し、そのコピーをキャプチャできることが望ましい。パケット・キャプチャ・モジュール２０８は、この機能性を容易にするためにカーネル空間内に存在する。
【００５４】
［0071］  Ｗｉｆｉドライバ・モジュール２０２、イーサネット・ドライバ・モジュール２０４、および低水準ネットワーキング・モジュール２０６のうちの１つまたは複数が、パケット・キャプチャ・モジュール２０８へのインターフェースを有することができる。このインターフェースは、これらのモジュールが、コンピューティング・デバイス１００によって送信され、受信されるパケットのコピーをパケット・キャプチャ・モジュール２０８に供給することを可能にする。たとえば、Ｗｉｆｉドライバ・モジュール２０２およびイーサネット・ドライバ・モジュール２０４は、それらが受信するすべてのパケットのコピー（Ｗｉｆｉヘッダおよびイーサネット・ヘッダを含む）を、これらのパケットが最終的にコンピューティング・デバイス１００にアドレッシングされない場合であっても、パケット・キャプチャ・モジュール２０８に供給することができる。さらに、Ｗｉｆｉドライバ・モジュール２０２およびイーサネット・ドライバ・モジュール２０４は、それらが送信するすべてのパケットのコピーを供給することができる。これは、コンピューティング・デバイス１００によって生成されたパケットをもキャプチャすることを可能にする。
【００５５】
［0072］  受信されたパケットのキャプチャに関して、Ｗｉｆｉハードウェアおよび／またはイーサネット・ハードウェアなどのネットワーク・インターフェース・ハードウェア構成要素は、通常、コンピューティング・デバイス１００によって使用されるアドレスと一致する宛先Ｗｉｆｉアドレスまたは宛先イーサネット・アドレスを有しないすべての着信パケットを破棄する。したがって、Ｗｉｆｉドライバ・モジュール２０２およびイーサネット・ドライバ・モジュール２０４は、コンピューティング・デバイス１００によって使用されるアドレスと一致するＷｉｆｉ宛先アドレスまたはイーサネット宛先アドレスを有する着信パケットならびにマルチキャストまたはブロードキャストのＷｉｆｉ宛先アドレスまたはイーサネット宛先アドレスを有するすべての着信パケットだけを受信することができる。しかし、Ｗｉｆｉハードウェアおよび／またはイーサネット・ハードウェアを、「プロミスキャス・モード」にすることができ、その結果、これらの構成要素は、着信パケットを全く破棄しなくなる。その代わりに、通常はハードウェアによって破棄されるはずの着信パケットが、Ｗｉｆｉドライバ・モジュール２０２およびイーサネット・ドライバ・モジュール２０４に供給される。これらのモジュールは、パケットのコピーをパケット・キャプチャ・モジュール２０８に供給する。
【００５６】
［0073］  いくつかの実施形態で、Ｗｉｆｉドライバ・モジュール２０２およびイーサネット・ドライバ・モジュール２０４は、着信パケットを低水準ネットワーキング・モジュール２０６に供給することができ、低水準ネットワーキング・モジュール２０６は、これらのパケットのコピーをパケット・キャプチャ・モジュール２０８に供給することができる。発信方向では、低水準ネットワーキング・モジュール２０６が、パケットのコピーをパケット・キャプチャ・モジュール２０８に供給することもできる。これらの発信パケット内のＷｉｆｉおよびイーサネットのヘッダおよびトレイラ情報を供給するために、低水準ネットワーキング・モジュール２０６は、パケットをパケット・キャプチャ・モジュール２０８に供給する前に、パケットのＷｉｆｉカプセル化およびイーサネット・カプセル化を実行することができる。低水準ネットワーキング・モジュール２０６は、これらのカプセル化されたパケットのコピーをＷｉｆｉドライバ・モジュール２０２および／またはイーサネット・ドライバ・モジュール２０４に供給することもでき、Ｗｉｆｉドライバ・モジュール２０２および／またはイーサネット・ドライバ・モジュール２０４は、さらなるカプセル化の追加を控えることができ、その代わりに、受信されたままのパケットをそれらのそれぞれのハードウェア・インターフェースに供給することができる。
【００５７】
［0074］  パケット・キャプチャ・モジュール２０８は、パケットをキャプチャするために、パケット・キャプチャ・アプリケーション２２４に従って動作することができる。具体的には、パケット・キャプチャ・アプリケーション２２４は、それを介して１つまたは複数のパケット・フィルタ式を入力できるユーザ・インターフェースを提供することができる。このユーザ・インターフェースは、グラフィカル・ユーザ・インターフェース、コマンド・ライン、またはファイルを含むことができる。
【００５８】
［0075］  パケット・フィルタ式は、パケット・キャプチャ・アプリケーション２２４に配送されなければならないパケットを指定することができる。たとえば、パケット・フィルタ式「ｈｏｓｔ  １０．０．０．２  ａｎｄ  ｔｃｐ」は、ＩＰアドレス１０．０．０．２を有するコンピューティング・デバイスへおよびそのコンピューティング・デバイスからのすべてのＴＣＰパケットをキャプチャすることができる。追加の例として、パケット・フィルタ式「ｐｏｒｔ  ６７  ｏｒ  ｐｏｒｔ  ６８」は、すべての動的ホスト構成プロトコル（ＤＨＣＰ）トラフィックをキャプチャすることができ、パケット・フィルタ式「ｎｏｔ  ｂｒｏａｄｃａｓｔ  ａｎｄ  ｎｏｔ  ｍｕｌｔｉｃａｓｔ」は、ユニキャスト・トラフィックだけをキャプチャすることができる。
【００５９】
［0076］  パケット・フィルタ式は、上で示したように、「ａｎｄ」、「ｏｒ」、および「ｎｏｔ」などの論理的な結合を含むことができる。これらの結合を用いると、複雑なパケット・フィルタを定義することができる。それでも、上で示したパケット・フィルタ式は、例であり、異なるパケット・フィルタリング構文を使用することができる。たとえば、いくつかのフィルタは、ビット列およびオフセットを含むことができ、パケットへのオフセット・バイト数の位置にビット列を含むすべてのパケットと一致することができる。
【００６０】
［0077］  パケット・フィルタ式を入手した後に、パケット・キャプチャ・アプリケーション２２４は、この式の表現をパケット・キャプチャ・モジュール２０８に供給することができる。パケット・キャプチャ・アプリケーション２２４およびパケット・キャプチャ・モジュール２０８は、たとえば、ｒａｗ  ｓｏｃｋｅｔを使用して通信することができる。ｒａｗ  ｓｏｃｋｅｔは、プロトコル（たとえば、ＩＰｖ４、ＩＰｖ６、ＴＣＰ、またはＵＤＰ）処理なしでアプリケーションとカーネル・モジュールとの間のパケットおよびコマンドの通信を可能にする、特殊なタイプのソケットである。しかし、他のタイプのソケットおよびＡＰＩが、ｒａｗ  ｓｏｃｋｅｔの代わりにパケット・キャプチャに使用され得る。
【００６１】
［0078］  いくつかの実施形態では、パケット・キャプチャ・モジュール２０８は、パケット・フィルタ式の表現をバイトコードまたは別のフォーマットにコンパイルすることができる。その後、パケット・キャプチャ・モジュール２０８は、それが受信するパケットごとにこのバイトコードを実行して、パケットが指定されたフィルタと一致するかどうかを判定することができる。パケットがフィルタと一致しない場合には、そのパケットを破棄することができる。パケットがフィルタと一致する場合には、パケット・キャプチャ・モジュール２０８は、そのパケットをパケット・キャプチャ・アプリケーション２２４に供給することができる。したがって、パケット・キャプチャ・アプリケーション２２４は、パケット・キャプチャ・セッションの始めにパケット・キャプチャ・モジュール２０８にパケット・フィルタ式を供給することができ、このフィルタと一致するパケットのストリームを受信することができる。
【００６２】
Ｄ．パケット・キャプチャ・フォーマット
［0079］  パケット・キャプチャ・アプリケーションは、複数の可能なフォーマットのうちの１つで、受信されたパケットを記憶することができる。１つのそのようなフォーマットが、図３Ａに示されたＰＣＡＰ（パケット・キャプチャ）フォーマットである。ファイル３００は、パケットがキャプチャされた時刻の順で記憶される、ＰＣＡＰフォーマットの一連のＮ＋１個のキャプチャされたパケットを表す。ＰＣＡＰヘッダ３０２は、図３Ｂで定義されるデータ構造である。Ｎ＋１個のキャプチャされたパケットのそれぞれには、毎パケット・ヘッダならびにすべてのプロトコル・ヘッダおよびペイロード・バイトが先行する場合がある。例の毎パケット・ヘッダ３０３が、図３Ｃに示されている。
【００６３】
［0080］  ファイル３００は、コンピューティング・デバイス１００の短期ストレージ（たとえば、メイン・メモリ）または長期ストレージ（たとえば、ディスク・ドライブ）内に記憶され得る２進ファイルとすることができる。いくつかの場合に、パケット・キャプチャが発生する時にコンピューティング・デバイス１００上でリアル・タイムに表示されるキャプチャされたパケットの表現。したがって、より後にキャプチャされたパケットが、より以前にキャプチャされたパケットが表示のためにファイル３００から読み取られている間にファイル３００に追加される場合がある。他の実施形態では、ファイル３００は、後の処理のために長期ストレージに書き込まれ得る。
【００６４】
［0081］  上で注記したように、図３Ｂは、ＰＣＡＰヘッダ３０２の内容を示す。先頭ファイル３００に配置されたＰＣＡＰヘッダ３０２の１つのインスタンスがある場合がある。
【００６５】
［0082］  マジック・ナンバ３０４は、ＰＣＡＰヘッダ３０２を有するファイルの先頭の事前定義のマーカーとすることができ、キャプチャを実行したコンピューティング・デバイスのバイト順序付けを示すように働く。たとえば、マジック・ナンバ３０４は、キャプチャするデバイスのネイティブ・バイト順序付けで０ｘａ１ｂ２ｃ３ｄ４の１６進数値を必ず有すると定義され得る。ファイル３００を読み取るデバイスが、マジック・ナンバ３０４がこの値を有することを見出す場合には、このデバイスとキャプチャするデバイスのバイト順序付けは同一である。ファイル３００を読み取るデバイスが、マジック・ナンバ３０４が０ｘｄ４ｃ３ｂ２ａ１の値を有することを見出す場合には、このデバイスは、マジック・ナンバ３０４に従うフィールドのバイト順序付けをスワップしなければならない可能性がある。
【００６６】
［0083］  メジャー・バージョン３０６およびマイナ・バージョン３０８は、ファイル３００内で使用されるＰＣＡＰフォーマットのバージョンを定義することができる。ほとんどの場合に、メジャー・バージョン３０６は２であり、マイナ・バージョン３０８は４であり、これは、バージョン番号が２．４であることを示す。
【００６７】
［0084］  タイム・ゾーン・オフセット３１０は、キャプチャするデバイスのローカル・タイム・ゾーンと協定世界時（ＵＴＣ）との間の秒単位の差を指定することができる。いくつかの場合に、キャプチャするデバイスは、そのローカル・タイム・ゾーンに関わりなく、このフィールドに０をセットする。
【００６８】
［0085］  タイムスタンプ精度３１２は、ファイル３００内のすべてのタイムスタンプの精度を指定することができる。実際には、このフィールドには、しばしば０がセットされる。
【００６９】
［0086］  キャプチャ長３１４は、キャプチャできる最大パケット・サイズをバイト単位で指定することができる。いくつかの実施形態で、この値には６５５３６がセットされるが、たとえばユーザが大ペイロード・パケットに関心がない場合には、より小さい値をセットすることができる。このフィールドで指定されるものより大きいパケットがキャプチャされる場合には、そのパケットは、最大パケット・サイズに従うために切り詰められる場合がある。
【００７０】
［0087］  データリンク・プロトコル３１６は、キャプチャが行われたデータリンク・インターフェースのタイプを指定することができる。たとえば、このフィールドは、イーサネットの場合に１、Ｗｉｆｉの場合に１０５などの値を有することができる。
【００７１】
［0088］  図３Ｃは、毎パケット・ヘッダ３０３の内容を示す。図３Ａに示されているように、ファイル３００内で表されるパケットごとに、毎パケット・ヘッダ３０３の１つのインスタンスがあるものとすることができる。毎パケット・ヘッダ３０３の各インスタンスは、それに関連するパケットに先行することができる。
【００７２】
［0089］  タイムスタンプ秒３２０およびタイムスタンプ・マイクロ秒３２２は、関連するパケットがキャプチャされた時刻を表すことができる。上で注記したように、これは、キャプチャするデバイスのローカル時刻またはＵＴＣ時刻とすることができる。
【００７３】
［0090］  キャプチャされたパケット長３２４は、実際にキャプチャされ、ファイル３００内に保存されたパケット・データのバイト数を指定することができる。オリジナル・パケット長３２６は、パケットが、それがその上でキャプチャされたネットワークに現れた時のパケットのバイト数を指定することができる。
【００７４】
［0091］  一般に、キャプチャされたパケット長３２４は、オリジナル・パケット長３２６以下になると期待される。たとえば、キャプチャ長３１４が１０００バイトであり、パケットが５００バイトである場合に、キャプチャされたパケット長３２４およびオリジナル・パケット長３２６は、両方とも５００とすることができる。しかし、パケットが１５００バイトである場合には、キャプチャされたパケット長３２４は１０００とすることができ、オリジナル・パケット長３２６は１５００とすることができる。
【００７５】
［0092］  図１および図２の文脈で説明した伝統的なシステムは、制限されたシナリオでは良好に実行する可能性があるが、高速パケット・キャプチャを頑健な形ではサポートしない可能性がある。たとえば、近代イーサネット・インターフェース・ハードウェアは、１０ギガビット毎秒、４０ギガビット毎秒、および１００ギガビット毎秒のデータ・レートをサポートする。伝統的なシステムは、パケット・キャプチャおよびフィルタリングをソフトウェアで実行するので、これらのシステムの最高速度は、通常はプロセッサ１０２の速度によって制限される。ハードウェア・インターフェースが、回線速度でパケットを受信している場合に、プロセッサ１０２は、着信パケットを十分に素早く処理できない可能性がある。さらに、プロセッサ１０２は、様々なオペレーティング・システム・タスクおよび他のアプリケーションに関連するタスクなど、他のタスクを並列に実行している場合がある。
【００７６】
［0093］  その点までに、１パケットあたりのプロセッサ・サイクル数は、高速プロセッサに関しても不十分である可能性がある。たとえば、１６コアを有する３．０ギガヘルツ・マルチプロセッサは、６４バイト・パケットを１００ギガビット毎秒で処理する時に、１パケットあたり約３２２サイクルを有するにすぎない。より詳細には、プロセッサは、４８，０００，０００，０００サイクル／毎秒の集計速度で動作する。インターフェースの１００ギガビット毎秒は、最大１２，５００，０００，０００バイト毎秒を提供する。最小の可能なイーサネット・パケット（１２バイトのパケット間ギャップおよび８バイト・プリアンブルを伴う、それぞれ６４バイト）のワースト・ケース・シナリオを仮定すると、約１４８，８０９，５２３パケット毎秒が到着する。したがって、プロセッサは、多くとも３２２．５６サイクル毎パケットを使用することができる。これは、持続的な処理には不十分である。
【００７７】
［0094］  その結果、一部のパケットは、フィルタリングされ得る前に、またはファイルに書き込まれ得る前に、捨てられる可能性がある。具体的には、パケットは、（ｉ）ネットワーク・インターフェース・ハードウェア・バッファが、それに関連するドライバ・モジュールがそこからパケットを除去できる速度より速い速度で満杯になるか、（ｉｉ）パケット・キャプチャ・モジュール２０８に関連するいずれかのキューが、パケット・キャプチャ・モジュール２０８がパケット・フィルタリング動作を実行できる速度より速い速度で満杯になるか、（ｉｉｉ）パケット・キャプチャ・アプリケーション２２４に関連するいずれかのキューが、パケット・キャプチャ・アプリケーション２２４が関連するパケットをファイル・システムに書き込むかこれらのパケットの表現を表示できる速度より速い速度で満杯になる場合に、捨てられる可能性がある。特筆すべきことに、ＨＤＤまたはＳＤＤ上のファイル・システムへの書込は、システムの持続可能なパケット・キャプチャ速度を低速化する、重大なオーバーヘッドを伴う場合がある。
【００７８】
［0095］  これは、正確で完全なパケット・キャプチャに頼るアプリケーションに関する問題を引き起こす。たとえば、パケット・キャプチャ・アプリケーション２２４が、ネットワーク・プロトコル解析ツールである場合に、欠けているパケットは、ネットワーク・プロトコルのデバッグを、不可能でないとしても困難にする可能性がある。さらに、パケット・キャプチャ・アプリケーション２２４が、侵入検知システムである場合に、欠けているパケットは、効果的に、このシステムがネットワーク攻撃を頑健で時宜を得た形で検出することを不可能にする可能性がある。
【００７９】
［0096］  次のセクションは、例の高速パケット・キャプチャ・システムのキャプチャ方向手順を説明する。この説明は、キャプチャされたパケットがネットワーク・インターフェース上で受信される時からそれらが不揮発性メモリ（たとえば、伝統的なファイル・システムなしのＳＳＤ）に記憶されるまでのキャプチャされたパケットの経路に従う。後続のセクションは、記憶されたパケットがさらなる処理および／または表示のために不揮発性メモリからどのように読み取られるのかを説明する。
【００８０】
ＩＩ．例の改善された高速パケット・キャプチャ・システム−キャプチャ方向
［0097］  図４は、高速パケット・キャプチャのためにカスタマイズされた例のコンピューティング・デバイス４００を示す。いくつかの実施形態では、コンピューティング・デバイス４００は、異なる構成要素を含むことができ、かつ／または、その構成要素は、異なる形で配置され得る。
【００８１】
［0098］  ホスト・プロセッサおよび専用システム・メモリ４０２は、１つまたは複数のプロセッサを含むことができ、そのそれぞれは、メモリの専用ユニット（たとえば、数ギガバイトのＲＡＭ）に結合され、またはこれに関連付けられ得る。たとえば、各プロセッサおよびそれに関連するメモリのユニットは、それ自体のメモリおよび他のｎｏｎ−ｕｎｉｆｏｒｍ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ（ＮＵＭＡ）ノード内のメモリならびに長期パケット・ストレージ４０４Ａおよびホスト・オペレーティング・システム・ストレージ４０４ＢのメモリにアクセスできるＮＵＭＡノードとすることができる。ＮＵＭＡノードの特定の配置が、図７の実施形態に示されている。
【００８２】
［0099］  特筆すべきことに、ホスト・プロセッサおよび専用システム・メモリ４０２は、システム・バス４１４およびシステム・バス４１６への接続を有することができる。システム・バス４１４および４１６は、それぞれ、たとえばｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ  ｅｘｐｒｅｓｓ（ＰＣＩｅ）バスとすることができる。図４では、システム・バス４１４は、ＦＰＧＡベースのネットワーク・インターフェース４０６、管理ネットワーク・インターフェース４１０、および入出力ユニット４１２にホスト・プロセッサおよび専用システム・メモリ４０２を通信可能に結合する。同様に、システム・バス４１６は、長期パケット・ストレージ４０４Ａおよびホスト・オペレーティング・システム・ストレージ４０４Ｂにホスト・プロセッサおよび専用システム・メモリ４０２を通信可能に結合する。それでも、これらの構成要素のすべてが１つのシステム・バスによって接続される配置を含む他の配置が可能である。
【００８３】
［0100］  長期パケット・ストレージ４０４Ａは、１つまたは複数のＳＳＤなどの不揮発性ストレージを含むことができる。特筆すべきことに、長期パケット・ストレージ４０４Ａは、キャプチャされたパケットをそのチャンク内で記憶することができる。
【００８４】
［0101］  ホスト・オペレーティング・システム・ストレージ４０４Ｂも、１つまたは複数のソリッド・ステート・ドライブなどの不揮発性ストレージを含むことができる。長期パケット・ストレージ４０４Ａとは異なって、ホスト・オペレーティング・システム・ストレージ４０４Ｂは、ホスト・プロセッサおよび専用システム・メモリ４０２のプロセッサによって使用されるオペレーティング・システムおよびファイル・システムを記憶することができる。
【００８５】
［0102］  ＦＰＧＡベースのネットワーク・インターフェース４０６は、１００メガビット毎秒、１ギガビット毎秒、１０ギガビット毎秒、２５ギガビット毎秒、４０ギガビット毎秒、または１００ギガビット毎秒のトランシーバを１つまたは複数収容できるカスタム・ハードウェア・モジュールとすることができる。ＦＰＧＡベースのネットワーク・インターフェース４０６は、これらのインターフェースによってパケットを受信し、その後、記憶のためにこれらのパケットをキャプチャし、処理することができる。名前から暗示されるとおり、ＦＰＧＡベースのネットワーク・インターフェース４０６は、フィールドプログラマブル・ゲート・アレイまたは他のデジタル・ハードウェア論理に基づくものとすることができる（すなわち、実際のＦＰＧＡがすべての実施形態で使用されるとは限らない）。イーサネットが、本明細書で提供される例においてパケット・キャプチャ用のインターフェース・タイプとして使用されるが、他のインターフェース・タイプが可能である場合がある。
【００８６】
［0103］  一時パケット・ストレージ・メモリ４０８は、ＦＰＧＡベースのネットワーク・インターフェース４０６によってキャプチャされたパケットがホスト・プロセッサおよび専用システム・メモリ４０２に最終的に書き込まれ得るようになるまでこれらのパケットを保持するように構成されたＲＡＭの１つまたは複数のユニットを含むことができる。ＦＰＧＡベースのネットワーク・インターフェース４０６は、１つまたは複数のメモリ・コントローラによって一時パケット・ストレージ・メモリ４０８に接続することができる。
【００８７】
［0104］  ネットワーク管理インターフェース４１０は、接続性およびデータ転送に使用される１つまたは複数のネットワーク・インターフェースとすることができる。たとえば、ＦＰＧＡベースのネットワーク・インターフェース４０６は、そこからパケットがキャプチャされる１つまたは複数の高速イーサネット・インターフェースを収容することができるが、ネットワーク管理インターフェース４１０は、リモート・アクセス、リモート構成、およびキャプチャされたパケットを含むファイルの転送に使用され得る１つまたは複数のネットワーク・インターフェースを収容することができる。たとえば、ユーザは、ネットワーク管理インターフェース４１０によってコンピューティング・デバイス４００にログ・オンし、パケット・キャプチャ・セッションをリモートに開始しまたは停止することができる可能性がある。
【００８８】
［0105］  入出力ユニット４１２は、コンピューティング・デバイス４００とのユーザおよび周辺デバイスの相互作用を容易にすることができるという点で、入出力ユニット１０８に類似するものとすることができる。したがって、入出力ユニット４１２は、１つまたは複数のタイプの入力デバイスおよび１つまたは複数のタイプの出力デバイスを含むことができる。
【００８９】
［0106］  いくつかの実施形態で、コンピューティング・デバイス４００は、他の構成要素、周辺デバイス、および／または接続性を含むことができる。したがって、図４の図示は、例のためのものであって限定的であることは意図されていない。
【００９０】
Ａ．例のＦＰＧＡベースのネットワーク・インターフェース
［0107］  図５は、ＦＰＧＡベースのネットワーク・インターフェース４０６および一時パケット・ストレージ・メモリ４０８のより詳細な図を示す。具体的には、ＦＰＧＡベースのネットワーク・インターフェース４０６は、トランシーバ・モジュール５００、物理ポート・モジュール５０２、論理ポート・モジュール５０４、パッカー・モジュール５０６、外部メモリ・インターフェース・モジュール５０８、および直接メモリ・アクセス（ＤＭＡ）エンジン・モジュール５１０を含む。一時パケット・ストレージ・メモリ４０８は、メモリ・バンク５１２を含むことができ、１つまたは複数のメモリ・コントローラによって外部メモリ・インターフェース・モジュール５０８に結合され得る。ＤＭＡエンジン・モジュール５１０は、システム・バス４１４に結合され得、このバスへのパケット（たとえば、１つまたは複数のパケットのチャンクの形の）の書込を制御することができる。図５では、キャプチャされたパケットは、一時パケット・ストレージ・メモリ４０８での可能な一時的な記憶を伴って、全般的に左から右へ流れる。
【００９１】
［0108］  図６Ａは、トランシーバ・モジュール５００、物理ポート・モジュール５０２、および論理ポート・モジュール５０４の間の接続性ならびに物理ポート・モジュール５０２の構成要素を示す。
【００９２】
［0109］  トランシーバ・モジュール５００の各トランシーバ６００は、組み合わされ、共通の回路網または単一のハウジングを共有する送信器と受信器との両方を含むことができる。前に注記したように、トランシーバ６００は、たとえば１０ギガビット毎秒、４０ギガビット毎秒、または１００ギガビット毎秒のイーサネット・トランシーバとすることができる。トランシーバ６００のそれぞれは、物理ポート５０２のポート６０２にも結合され得る。この結合は、イーサネットの媒体アクセス制御（ＭＡＣ）機能、前方誤り訂正（ＦＥＣ）機能、およびｐｈｙｓｉｃａｌ  ｃｏｄｉｎｇ  ｓｕｂｌａｙｅｒ（ＰＣＳ）機能（図示せず）を実行するユニットを含むことができる。
【００９３】
［0110］  ポート６０２は、デリミタ６０４、サイクル・アライナ６０６、エクスパンダ６０８、リクロッカ６１０、ＮＯＰジェネレータ６１２、および先入れ先出し（ＦＩＦＯ）バッファ６１４という構成要素を含むことができる。いくつかの実施形態では、ポート６０２は、より多数またはより少数の構成要素を含むことができ、各ポートは、一意の番号を付けられ得る（たとえば、０からｎまで）。いずれにせよ、パケット（およびその処理）の流れは、全般的に左から右である。
【００９４】
［0111］  デリミタ６０４は、イーサネットのプリアンブル・ビットおよびエピローグ・デリミタ・ビットを検出することによって着信イーサネット・パケットの先頭ビットおよび終了ビットを識別することができる。このシーケンスは、１６進数で０ｘＦＢ  ０ｘ５５  ０ｘ５５  ０ｘ５５  ０ｘ５５  ０ｘ５５  ０ｘ５５  ０ｘＤ５（最下位ビットが先の順序付けを使用）と表すことができる。このシーケンスの直後に受信されたビットを、イーサネット・パケットの最初とすることができる。デリミタ６０４は、各パケットの最初のバイトが受信された時のナノ秒タイムスタンプを高精度クロック・ソースから記録することもできる。このタイムスタンプは、伝搬遅延に関して、固定されたオフセットだけ調整され得る。
【００９５】
［0112］  サイクル・アライナ６０６は、バス・サイクルあたり最大で１つのパケットがあるように着信パケットを整列させ配置することができる（すなわち、より大きいパケットは、複数のサイクルを必要とする場合がある）。一例として、１００ギガビット・イーサネットは、ＭＡＣインターフェースからの４つの１２８ビット・バスを使用することができる。これらのバスは、レーン０、１、２、および３と呼ばれる場合がある。いくつかの場合に、単一のバス・サイクルにＭＡＣインターフェースから出力される２つのパケット（より正確には、２つのパケットの一部）がある場合がある。たとえば、レーン０〜２が、パケットｎからのビットを含み、レーン３がパケットｎ＋１からのビットを含む場合がある。サイクル・アライナ６０６は、２つのサイクルにまたがってこれらのビットを配置する。第１のサイクルには、レーン０〜２はパケットｎからのビットを含み、レーン３はヌルである。第２のサイクルには、レーン０〜２はヌルであり、レーン３はパケットｎ＋１からのビットを含む。
【００９６】
［0113］  エクスパンダ６０８は、サイクル・アライナ６０６によって整列されたビットを集計し、より幅広いバス（たとえば２０４８ビット・バス）にパックする。エクスパンダ６０８は、各パケットの最初のビットが同一レーン内で始まるようにするためにこれを行う。各パケットの先頭の固定位置を有することは、ダウンストリーム処理をより複雑でないものにする。いくつかの実施形態で、エクスパンダ６０８は、パケットの最初のビットがレーン０の最初のビット位置に配置されるように、１６個の１２８ビット・レーンにまたがって各パケットを配置することができる。
【００９７】
［0114］  リクロッカ６１０は、パケット処理のタイミングをトランシーバ６００のタイミングからポート６０２のタイミングに調整することができる。１００ギガビット・イーサネットの場合に、リクロッキングは、３２２メガヘルツ（イーサネット速度）から２５０メガヘルツ（ポート速度）へのものである。１０ギガビット・イーサネットの場合に、リクロッキングは、１５６メガヘルツ（イーサネット速度）から２５０メガヘルツ（ポート速度）へのものである。
【００９８】
［0115］  ＮＯＰジェネレータ６１２は、長期パケット・ストレージ４０４ＡまでのＦＰＧＡベースのネットワーク・インターフェース４０６のキャプチャ・パイプラインをフラッシュするのに使用され得る０ｘ００バイトのペイロード（たとえば、２５６バイトの転送サイズに関して１６バイト・ヘッダを伴う２４０バイトの人工的なヌル・パケット）を有する、単一サイクル全幅パケットのバーストを生成することができる。ＮＯＰジェネレータ６１２は、インアクティビティ（たとえば、所定の長さの時間にわたって受信されるパケットがないこと）によってまたはソフトウェア（図６Ａに示されていないインターフェースなど）を介する明示的な要求によってのいずれかで、それを行うようにトリガされ得る。
【００９９】
［0116］  ＦＩＦＯバッファ６１４は、受信されたパケットが論理ポート・モジュール５０４によってポート６０２から読み取られ得るようになるまで、複数の受信されたパケットをキュー内に保持することができる。
【０１００】
［0117］  図６Ｂは、論理ポート５０４の構成要素を示す。これらの構成要素は、例として提示される。より多数またはより少数の構成要素が、そのような論理ポート・モジュール内に存在してもよい。以前の図と同様に、パケットの流れ（およびその処理）は、全般的に左から右である。
【０１０１】
［0118］  ポート・アービタ６２０は、ポート６０２のそれぞれに関してＦＩＦＯバッファ６１４に接続される。各クロック・サイクルに、ポート・アービタ６２０は、ポート６０２のそれぞれから、より正確にはＦＩＦＯバッファ６１４のそれぞれのインスタンスから、１つまたは複数のパケットを取り出す。複数のポート６０２がこの形で準備のできているパケットを有する場合には、ポート・アービタは、これらのパケットを事前に定義された順序で（たとえば、最小のポート番号から最大のポート番号へ）取り出す。
【０１０２】
［0119］  パケット・クラシファイヤ６２２は、事前定義のルールに基づいて各着信パケットを分類する。分類は、２つの指定すなわち捨てるおよびスライスする（下で説明する）を含むことができる。このルールは、たとえばパケットの最初の６４バイト、１２８バイト、２５６バイト、または５１２バイトに対するビット単位の論理「積」動作および論理「比較」動作を含むことができる。合計１６〜５１２個のルールをサポートすることができ、これらのルールは、ソフトウェア・プログラム可能とすることができる。１つのパケットが、複数のルールに一致する場合がある。一例として、あるパケットが、ルールのうちの１つまたは複数に一致する場合に、そのパケットは、スライスに関して分類され得るが、パケットがどのルールにも一致しない場合には、そのパケットは、捨てるに関して分類される。
【０１０３】
［0120］  パケット・ドロッパ／スライサ６２４は、パケットの分類に基づいてパケットを捨てるまたはスライスするのいずれかを行うことができる。捨てられたパケットは、効果的に削除され、もはや処理されなくなる。スライスされたパケットは、サイズを減らされ、たとえば、パケットの最初の６４バイト、１２８バイト、２５６バイト、または５１２バイトを超えるバイトが、除去され得る。それを行うことで、パケット・ペイロード全体に関心が持たれていない時に、パケットの記憶がより効率的に行われる。
【０１０４】
［0121］  パケット・コンプレッサ６２６は、パケットのヘッダ（たとえば、イーサネット・ヘッダ、ＩＰヘッダ、ＴＣＰヘッダ、ＵＤＰヘッダ）および／またはペイロードを圧縮し、これを圧縮されたバージョンに置換することのできる任意選択の構成要素である。これが行われる時に、パケット・コンプレッサ６２６は、圧縮が実行されたことを示すフラグ・ビットをパケットのキャプチャ・ヘッダのうちの１つの中でセットすることもできる。いくつかの実施形態で、パケット・コンプレッサ６２６は、圧縮辞書６２８を使用することができる。後者は、圧縮されたパケット内でより短い一意の符号化によって表現される共通のバイト列のリストを含むことができる。
【０１０５】
［0122］  背圧スロットル６３０は、下流のモジュールおよび／または構成要素がパケットの着信フローについていけない時に、これらのモジュールおよび／または構成要素から背圧を適用することができる。たとえば、背圧は、システム・バス４１４が一時的に輻輳し、要求された速度でデータを送信できない時に適用され得る。この背圧は、１つまたは複数のクロック・サイクルの間に着信パケットの処理をスキップするための、背圧スロットル６３０からポート・アービタ６２０またはＦＩＦＯバッファ６１４のうちの１つもしくは複数への信号とすることができる。パケットが捨てられる、まれな場合に、背圧スロットル６３０は、捨てられたパケットの総数と背圧信号ごとの捨てられたパケットあたりのカウントとを維持することができる。これらの背圧信号は、それぞれ、ＤＭＡエンジン５１０（バス４１４での輻輳に起因して）、チャンク・アライナ６３２、およびパダー６３６から受信される。
【０１０６】
［0123］  チャンク・アライナ６３２は、キャプチャされたパケットのセットをパックできるように整列させる。各チャンクは、サイズにおいて１２８キロバイトから３２メガバイトであり、パケットがチャンク境界をまたがず、チャンクの最初のパケットがチャンク内で０のオフセットから始まるように、キャプチャされたパケットのそのようなセットを保持する。チャンク・アライナ６３２は、チャンク内の最後のパケットがそのチャンク内のすべての残り空間を充填するように、必要なパディングの量を判定することができる。
【０１０７】
［0124］  チャンク統計６３４は、チャンク内のデータに関する統計をまとめる。この統計は、チャンク内の最初のパケットおよび最後のパケットのタイムスタンプ、チャンク内のパケットの総数（おそらくはチャンク内のＴＣＰパケットの総数とＵＤＰパケットの総数との別々のカウントを含む）、チャンク内のバイトの総数（パディングを含まない）、チャンク内の圧縮されたバイトの総数、パケット・クラシファイヤ６２２によって捨てられると分類されたパケットの個数、および様々な他の内部性能メトリックを含む。これらの統計は、コンプレッサ統計６４４（図６Ｃ参照）に渡される。
【０１０８】
［0125］  パダー６３６は、チャンク・アライナ６３２によって指定された個数のパディング・バイトをチャンクの最後のパケットに追加する。パディング・バイトは、すべて０とすることができ、このパディングは、受信されたパケットの最後のバイトの後に適用され得る。
【０１０９】
［0126］  ヘッダ追加６３８は、各パケットの先頭にカスタム・ヘッダを付加する。カスタム・ヘッダの内容は、ＰＣＡＰ毎パケット・ヘッダ３０３の内容に類似し、またはこれと同一とすることができる。代替実施形態では、ヘッダは、長さ１６バイトとすることができ、パケットがＮＯＰジェネレータ６１２からのＮＯＰデータを含む時にセットされ得るＮＯＰフィールド、フレーム・チェック・シーケンス（ＦＣＳ）パケットのイーサネット・ヘッダが破壊されたパケットを示す時にセットされ得るＦＣＳ失敗フラグ、チャンクがパダー６３６からのパディングを含む時にセットされ得るパッド・フラグ、パケットがキャプチャされた時の時刻（ナノ秒単位、デリミタ６０４から供給される）を含むことができるタイムスタンプ・フィールド、実際にキャプチャされたパケットのバイト数を示すことができるパケット・キャプチャ・サイズ・フィールド、キャプチャの前のパケットの実際のサイズを示すことができるパケット・ワイヤ・サイズ・フィールド、およびパケットが受信された物理ポートを識別することができるポートＩＤフィールドというフィールドのうちの１つまたは複数からなることができる。他のフィールドが可能であり、より多数またはより少数のフィールドが存在する場合がある。パケット・キャプチャ・サイズは、パケット・ドロッパ／スライサ６２４および／またはコンプレッサ６２６が、キャプチャされたパケットのサイズを縮小するように構成されている時に、パケット・ワイヤ・サイズより小さくなる可能性がある。
【０１１０】
［0127］  図６Ｃは、パッカー５０６の構成要素を示す。これらの構成要素は、例として提示される。より多数またはより少数の構成要素が、そのような論理ポート・モジュール内に存在する場合がある。以前の図面と同様に、パケットの流れ（およびその処理）は、全般的に左から右である。
【０１１１】
［0128］  ストリーム・パッカー６４０は、ヘッダ追加６３８からパケットを受け取ることができる。ストリーム・パッカー６４０は、これらのパケットを、たとえばバス幅に基づいて５１２ビット幅、１０２４ビット幅、２０４８ビット幅、または４０９６ビット幅とすることのできるパックされたバイト・ストリームに配置することができる。たとえば、バスが、２０４８ビット（２５６バイト）幅であると仮定する。データは、多くとも１パケット毎サイクルの速度でストリーム・パッカー６４０に入る。８０バイト・パケットｎが、サイクル０中に到着し、８０バイト・パケットｎ＋１が、サイクル１中に到着し、１２８バイト・パケットｎ＋２が、サイクル２中に到着すると仮定する。このシーケンスは、各サイクル中に、２０４８ビット・バスの少なくとも半分を未使用のままにする。
【０１１２】
［0129］  ストリーム・パッカー６４０は、可能な場合に各サイクル中にバス全体が使用されるように、これらのパケットを配置する。したがって、ストリーム・パッカー６４０の最初の出力サイクルは、パケットｎのすべて、パケットｎ＋１のすべて、およびパケットｎ＋２の最初の９６バイト、総計２０４８ビットを含むはずである。ストリーム・パッカー６４０の第２の出力サイクルは、パケットｎ＋２の残りの３２バイトと、それに続く任意のさらなるパケットとを含むはずである。ストリーム・パッカー６４０は、パケットを、サイズにおいて１２８キロバイトから３２メガバイトであるチャンクに形成する。したがって、各チャンクは、複数のパケット、おそらくは数百個または数千個のパケットを含む可能性がある。
【０１１３】
［0130］  コンプレッサ６４２は、ストリーム・パッカー６４０からのパックされたバイト・ストリームを圧縮することができる。これらの圧縮動作は、任意選択であり、コンプレッサ６４２が着信データ・レートでパケットをチャンクに圧縮できない場合には省略され得る。その代わりに、コンプレッサ６４２は、過負荷である時に、回線速度性能を維持するために、パススルー・モードでパケットを書き込むことができる。
【０１１４】
［0131］  いくつかの実施形態で、Ｌｅｍｐｅｌ−Ｚｉｖ−Ｗｅｌｃｈ（ＬＺＷ）などの一般的な圧縮方式を使用することができる。この方式は、２または３の倍率で長期パケット・ストレージ内に記憶されるパケットの有効な個数を増やすことができるが、高速インターフェース（たとえば、４０メガビット毎秒または１００メガビット毎秒）から着信するデータの回線レート圧縮には遅すぎる可能性がある。パススルー・モードのトリガは、入力キューが満杯になる（または高潮線を超える）時とすることができ、その後、チャンクは、入力キューが低潮線に達するまでコンプレッサを迂回する。
【０１１５】
［0132］  コンプレッサ統計６４４は、チャンク統計６３４から情報を受け取り、コンプレッサ６４２からのさらなる情報を提供する。この情報は、圧縮されたペイロードのサイズと、チャンクごとの巡回冗長検査（ＣＲＣ）とを含むことができる。
【０１１６】
［0133］  図６Ｄは、外部メモリ・インターフェース５０８の構成要素を示す。これらの構成要素は、例として提示される。より多数またはより少数の構成要素が、そのようなメモリ・インターフェース内に存在する場合がある。以前の図面と同様に、パケットの流れ（およびその処理）は、全般的に左から右である（メモリ・バンク５１２を通る迂回路を伴う）。
【０１１７】
［0134］  外部メモリ・インターフェース５０８は、メモリ・バンク５１２内で着信チャンクをバッファリングするように働くことができる。それを行うことは、そうでなければこれらのチャンクを捨てさせる可能性があるシステム・バス４１４上の輻輳を回避するのを助ける。システム・バス４１４は、ホスト・プロセッサおよび専用システム・メモリ４０２、入出力ユニット４１２、または他の周辺機器による使用に起因して、チャンクを転送するには忙しすぎる場合がある。この輻輳は、１０マイクロ秒から数ミリ秒以上のいずれかで存続する可能性がある。
【０１１８】
［0135］  外部メモリ・インターフェース５０８は、パケットがキャプチャされているインターフェース（１つまたは複数）の全二重回線速度で動作することができる。たとえば、１００ギガビット毎秒イーサネット・インターフェースが、パケットをキャプチャするのに使用されている場合に、外部メモリ・インターフェース５０８とメモリ・バンク５１２との間での読取および書込は、２００ギガビット毎秒までで行われる可能性がある（たとえば、１００ギガビット毎秒の読取と１００ギガビット毎秒の書込）。
【０１１９】
［0136］  メモリ書込モジュール６５０は、コンプレッサ６４２からチャンクを受け取り、これらのチャンクをメモリ・コントローラ６５２Ａ、６５２Ｂ、および６５２Ｃによってメモリ・バンク５１２に書き込むことができる。チャンクは、別個のブロックでメモリに書き込まれ得、そのサイズは、メモリ・コントローラ６５２Ａ、６５２Ｂ、および６５２Ｃと外部メモリ６５４Ａ、６５４Ｂ、および６５４Ｃとの間のバス幅に基づくものとすることができる。これらのブロックのそれぞれについて、メモリ書込モジュール６５０は、ＣＲＣを計算し、ブロックと共にそれぞれのＣＲＣを記憶することができる。いくつかの実施形態では、メモリ書込モジュール６５０は、外部メモリ６５４Ａ、６５４Ｂ、および６５４Ｃにまたがって、ラウンド・ロビンの形または外部メモリ６５４Ａ、６５４Ｂ、および６５４Ｃのそれぞれへの負荷のバランスを粗くとるなんらかの他の形でこれらのブロックを書き込むことができる。
【０１２０】
［0137］  メモリ読取モジュール６５６は、メモリ・コントローラ６５２Ａ、６５２Ｂ、および６５２Ｃによって、メモリ・バンク５１２からブロックを取り出し、これらのブロックをチャンクに再アセンブルすることができる。それを行う際に、メモリ読取モジュール６５６は、各ブロックのＣＲＣを再計算し、これをブロックの記憶されたＣＲＣと比較して、ブロックが記憶中に破壊されたかどうかを判定することができる。
【０１２１】
［0138］  ３つのメモリ・コントローラおよび３つの外部メモリが図６Ｄに示されているが、より多数またはより少数のメモリ・コントローラおよび外部メモリを使用することができる。各メモリ・コントローラは、すべての外部メモリ・リフレッシュ・サイクルが同時に発生するように、そのリフレッシュ・サイクルを同期させることができる。これは、複数の別々のメモリ・バンクが一致して使用される時のメモリ・スループットを改善することができる。
【０１２２】
［0139］  図６Ｅは、ＤＭＡエンジン５１０の構成要素を示す。これらの構成要素は、例として提示される。より多数またはより少数の構成要素が、ＤＭＡエンジン内に存在する場合がある。以前の図面と同様に、パケットの流れ（およびその処理）は、全般的に左から右である。
【０１２３】
［0140］  チャンクＦＩＦＯ  ６６０は、メモリ読取モジュール６５６からチャンクを受け取り、ＤＭＡエンジン５１０によるさらなる処理のためにこれらのチャンクを一時的に記憶するバッファである。同様に、統計ＦＩＦＯ  ６６２は、特定のチャンクに関してＦＰＧＡベースのネットワーク・インターフェース４０６の様々なユニットから統計を受け取る別のバッファである。これらの統計は、チャンク統計６３４およびコンプレッサ統計６４４からのデータを含むことができるが、これに限定はされない。このデータは、たとえば、チャンク内のパケットの最初のタイムスタンプおよび最後のタイムスタンプ、チャンク内の複数のパケット、チャンクの圧縮されたサイズ、ならびに現在のクロック・サイクルでの様々なＦＩＦＯレベルおよび／またはハードウェア性能メトリックを含む。チャンクＦＩＦＯ  ６６０および統計ＦＩＦＯ  ６６２は、独立に動作するが、実際には（設計により）チャンクＦＩＦＯ  ６６０および統計ＦＩＦＯ  ６６２内のデータは、通常は同一のチャンクを参照する。
【０１２４】
［0141］  チャンクＦＩＦＯ  ６６０と統計ＦＩＦＯ  ６６２との両方からのデータは、ＤＭＡアービタ６６４によって読み取られる。ＤＭＡアービタ６６４は、両方のＦＩＦＯからのこのデータならびにキャプチャ・リング８００（図８Ａ参照）からの状況更新を多重化する。これらの状況更新は、チャンク記憶に使用可能な、キャプチャ・リング８００内の次のメモリ位置を示す。ＤＭＡアービタ６６４は、キャプチャ・リング８００からの状況更新の処理に最高優先順位を、統計ＦＩＦＯ  ６６２から出力に２番目に高い優先順位を、チャンクＦＩＦＯ  ６６０からのチャンクに最低優先順位を割り当てる。
【０１２５】
［0142］  システム・バス４１４は、複数の独立のバス４１４Ａ、４１４Ｂ、および４１４Ｃからなることができる。３つのバスが図６Ｅに示されているが、より多数またはより少数のバスを使用することができる。ＤＭＡ出力６６６は、それぞれＰＣＩｅインターフェース６６８Ａ、６６８Ｂ、および６６８Ｃによってバス４１４Ａ、４１４Ｂ、および４１４Ｃに書き込まれる、チャンクＦＩＦＯ  ６６０および統計ＦＩＦＯ  ６６２からのデータをスケジューリングする。たとえば、ＤＭＡ出力６６６は、公平なラウンドロビン・スケジューラに従って、このデータを最大サイズのバス・パケット（たとえば、２５６バイト）として多重化し、バス４１４Ａ、４１４Ｂ、および４１４Ｃに書き込むことができる。
【０１２６】
［0143］  ＤＭＡ性能モニタ（図示せず）が、ＤＭＡアービタ６６４またはＤＭＡ出力６６６のいずれかに組み込まれ得る。たとえば、バス４１４Ａ、４１４Ｂ、および４１４ＣがＰＣＩｅバスである場合に、このモジュールは、各バスの最小ｃｒｅｄｉｔの個数、最大ｃｒｅｄｉｔ、ｏｃｃｕｐａｎｃｙ、ｓｔａｌｌ  ｄｕｒａｔｉｏｎなどを判定することによって、その性能を監視することができる。 これは、各バス上でのＰＣＩｅ  ｃｒｅｄｉｔの割振り（これらのバスでのフロー制御のための）およびＮＵＭＡノードのキャプチャ・リング・バッファ８００に関するフロー制御のためのＤＭＡ  ｃｒｅｄｉｔの割振り（下の図８Ａ参照）を含む。
【０１２７】
［0144］  後者の機構は、ｃｒｅｄｉｔ  ｔｏｋｅｎシステムに基づくものとすることができる。たとえば、１つのｔｏｋｅｎは、キャプチャ・リング・バッファ８００への２５６バイト書込動作（最大サイズのＰＣＩｅ書込動作）に匹敵するものとすることができる。ＤＭＡアービタ６６４は、複数のＤＭＡ  ｃｒｅｄｉｔを維持する。これは、キャプチャ・リング・バッファ８００内のエントリ数に初期化される。フル・サイズのＰＣＩｅ書込動作が行われるたびに、ＤＭＡ  ｃｒｅｄｉｔカウントは減分される。ＤＭＡ  ｃｒｅｄｉｔの総数が０である場合には、背圧がシグナリングされ、これは、最終的に背圧スロットル６３０がパケットを捨てることにつながる。またＤＭＡ  ｃｒｅｄｉｔが０である時には、ＰＣＩｅ書込動作は発行されない。ＮＵＭＡノードのうちの１つで動作するソフトウェアは、チャンクが処理され、キャプチャ・リング・バッファ８００から除去され、本質的にそのメモリ・エリアを解放し、したがってハードウェアが新しいチャンクを書き込めるようになった後に、ＤＭＡ  ｃｒｅｄｉｔを追加する。
【０１２８】
Ｂ．例のホスト・プロセッサおよび専用メモリのアーキテクチャ
［0145］  図７は、ＦＰＧＡベースのネットワーク・インターフェース４０６と長期パケット・ストレージ４０４Ａとの間の接続性を提供するホスト・プロセッサおよび専用メモリ４０２を示す。具体的には、ホスト・プロセッサおよび専用メモリ４０２は、プロセッサ７００、メモリ７０２、プロセッサ７０４、およびメモリ７０６を含むことができる。プロセッサ７００とプロセッサ７０４との両方が、複数（たとえば、２つ、４つ、または８つ）の個々のプロセッサを表すことができる。
【０１２９】
［0146］  ＦＰＧＡベースのネットワーク・インターフェース４０６は、システム・バス４１４によってプロセッサ７００に接続する。プロセッサ７００およびメモリ７０２は、第１のＮＵＭＡノードの構成要素である。同様に、プロセッサ７０４およびメモリ７０６は、ｑｕｉｃｋ  ｐａｔｈ  ｉｎｔｅｒｃｏｎｎｅｃｔ（ＱＰＩ）インターフェースまたはなんらかの他のタイプのプロセッサ相互接続によって第１のＮＵＭＡノードに接続され得る第２のＮＵＭＡノードの構成要素とすることができる。
【０１３０】
［0147］  第２のＮＵＭＡノードは、システム・バス４１６によってストレージ・コントローラ７０８にも接続され得る。システム・バス４１４と同様に、システム・バス４１６は、複数の独立のバスを含むことができる。ＮＵＭＡノード通信のこの分離は、ＦＰＧＡベースのネットワーク・インターフェース４０６からメモリ７０２への書込とメモリ７０６から長期パケット・ストレージ４０４Ａへの書込とのスループット特性および待ち時間特性を分離することによって、パケット・キャプチャ性能をさらに改善する。
【０１３１】
［0148］  ストレージ・コントローラ７０８は、たとえばホスト・バス・アダプタ（ＨＢＡ）コントローラとすることができる。ストレージ・コントローラ７０８は、第２のＮＵＭＡノードに長期パケット・ストレージ４０４Ａへのアクセスを提供することができる。長期パケット・ストレージ４０４Ａは、ｎ個のソリッド・ステート・ドライブのアレイまたはなんらかの他の形の不揮発性ストレージを含むことができる。いくつかの実施形態で、複数のストレージ・コントローラが、１００ギガビット毎秒のパケット・ストレージ速度をサポートするのに使用され得る。第１および／または第２のＮＵＭＡノードは、ホスト・オペレーティング・システム・ストレージ４０４Ｂにさらに接続され得る。
【０１３２】
［0149］  要約すると、パケットのチャンクは、ＦＰＧＡベースのネットワーク・インターフェース４０６からメモリ７０２に直接に書き込まれる。プロセッサ７００は、メモリ７０２からこれらのチャンクを読み取り、ＣＲＣの生成および／またはチャンク統計の計算など、なんらかの追加処理を適用する。その後、プロセッサ７００は、メモリ７０６にチャンクを書き込む。プロセッサ７００および／またはプロセッサ７０４は、入出力スケジューラを走行させ、この入出力スケジューラは、メモリ７０６から長期パケット・ストレージ４０４Ａ内のストレージのユニットのうちの１つの指定された位置にチャンクを書き込むようにストレージ・コントローラ７０８に指示する。ストレージ・コントローラ７０８は、これに応答して、これらの書込を実行する。動作のこのシーケンスは、図８Ａ〜図８Ｄにさらに示されている。
【０１３３】
［0150］  図８Ａは、メモリ７０２内のパケット記憶および管理のための例のデータ構造を示す。キャプチャ・リング・バッファ８００は、ＤＭＡ出力６６６によって転送されたチャンクを保持し、従来のリング・バッファとして動作する。キャプチャ・リング・バッファは、いくつかの実施形態ではサイズにおいて４ギガバイトとすることができるが、任意のサイズ（たとえば、１ギガバイト、２ギガバイト、８ギガバイト、１６ギガバイトなど）とすることができる。
【０１３４】
［0151］  キャプチャ・リング・バッファ８００など、本明細書のリング・バッファは、通常はｂ個のエントリの固定サイズ・アレイとして実施され、ポインタが、現在の頭部位置および尾部位置を参照する。プロデューサは、新しいエントリを尾部の現在位置に書き込み、コンシューマは、頭部から最も古いエントリを除去する。これらの頭部ポインタおよび尾部ポインタは、読取および書込ごとにｍｏｄｕｌｏ  ｂだけ増分され、その結果、バッファは、それ自体の回りで論理的にラップするようになる。
【０１３５】
［0152］  チャンク・インデックス・バッファ８０２は、キャプチャ・リング・バッファ８００内のチャンクごとに、統計ＦＩＦＯ  ６６２からの情報（最終的に、他の可能なソースの中でもチャンク統計６３４およびコンプレッサ統計６４４から発する）を記憶することができる。したがって、この情報は、チャンク内の最初のパケットおよび最後のパケットのタイムスタンプ、チャンク内のパケットの総数、チャンク内のバイトの総数（パディングを含まない）、チャンク内の圧縮されたバイトの総数などを含むことができる。
【０１３６】
［0153］  キャプチャ・リングＤＭＡ状況８０４Ａ、８０４Ｂ、および８０４Ｃは、それぞれバス４１４Ａ、４１４Ｂ、および４１４Ｃに関連するメモリ位置を記憶する。その内容は、下で説明するように、キャプチャ・リング・バッファ８００への書込アクセスを制御するのに使用され得る。
【０１３７】
［0154］  チャンク処理キュー８０６は、メモリ７０６への書込の準備ができているキャプチャ・リング・バッファ８００内のチャンクへの参照を含む。この構造の使用も、下で説明する。
【０１３８】
［0155］  図８Ｂは、メモリ７０６内のパケット記憶および管理のための例のデータ構造ならびにストレージ・コントローラ７０８および長期パケット・ストレージ４０４Ａに対するその関係を示す。キャプチャ書込バッファ８１０は、キャプチャ・リング・バッファ８００から転送されたチャンクを一時的に記憶する。その後、これらのチャンクは、不揮発性ストレージのｎ個のユニット（ＳＳＤ０〜ＳＳＤｎ）にまたがって分散される。それを行うために、各チャンクは、これらのユニットのうちの１つへの書込のためにキューイングされる。この情報は、入出力キュー８１４に記憶される。不揮発性ストレージのｎ個のユニットのそれぞれについて、入出力キュー８１４は、エントリのリストを含む。これらのエントリは、連続するチャンクを使用可能なユニットに分散させるために投入される。便宜上、３つのユニット（ＳＳＤ）だけが図８Ｂに示されているが、より多数のユニットを使用することができる。チャンク・パリティ書込バッファ８１２は、チャンクに関する冗長性データをキューイングする。
【０１３９】
［0156］  たとえば、ＳＳＤ０書込バッファ８１６内のＳＳＤ０エントリ０は、キャプチャ書込バッファ８１０内の第１のチャンク（チャンク０）を参照することができ、ＳＳＤ１書込バッファ８１８内のＳＳＤ１エントリ０は、キャプチャ書込バッファ８１０内の第２のチャンク（チャンク１）を参照することができ、ＳＳＤ２書込バッファ８２０内のＳＳＤ２エントリ０は、キャプチャ書込バッファ８１０内の第３のチャンク（チャンク２）を参照することができる。同様に、ＳＳＤ０書込バッファ８１６内のＳＳＤ０エントリ１は、キャプチャ書込バッファ８１０内の第４のチャンク（チャンク３）を参照することができ、ＳＳＤ１書込バッファ８１８内のＳＳＤ１エントリ１は、キャプチャ書込バッファ８１０内の第５のチャンク（チャンク４）を参照することができ、ＳＳＤ２書込バッファ８２０内のＳＳＤ２エントリ１は、キャプチャ書込バッファ８１０内の第６のチャンク（チャンク５）を参照することができる。１ＳＳＤあたりのより多数のエントリを使用することができる。ＳＳＤへのチャンクのこのマッピングによれば、ｄ個のＳＳＤを有するシステムに関して、チャンクｃは、ＳＳＤ  ｓエントリｅにマッピングされ、ここで、ｓ＝ｃ  ｍｏｄ  ｄであり、
【数１】
0006830516.tif 000002
またはＳＳＤ０書込バッファ８１６／ＳＳＤ１書込バッファ８１８／ＳＳＤ２書込バッファ８２０のＦＩＦＯプロデューサ・インデックスである。
【０１４０】
［0157］  チャンクおよび関連データの処理は、次の説明に従って行うことができる。ＤＭＡ出力６６６は、チャンクＦＩＦＯ６６０からキャプチャ・リング・バッファ８００内のそれぞれの位置にチャンクを書き込むことができ、統計ＦＩＦＯ６６２からのデータは、チャンク・インデックス・バッファ８０２内のそれぞれの位置に書き込まれ得る。ＤＭＡ出力６６６は、バス４１４Ａ、４１４Ｂ、および４１４Ｃによってキャプチャ・リングＤＭＡ状況８０４Ａ、８０４Ｂ、および８０４Ｃに更新をブロードキャストすることもできる。書き込まれるデータは、キャプチャ・リング・バッファ８００内の次に使用可能な位置へのポインタとすることができる。したがって、キャプチャ・リングＤＭＡ状況８０４Ａ、８０４Ｂ、および８０４Ｃの内容は、バス４１４Ａ、４１４Ｂ、および４１４Ｃのうちの少なくとも１つが他のバスより低速に動作している（たとえば、輻輳しているかストールしている）時に、同一の値をとらない場合がある。この機構は、メモリ・ロックを使用せずにキャプチャ・リング・バッファ８００およびチャンク・インデックス・バッファ８０２への複数の同時書込を可能にするようにも働く。
【０１４１】
［0158］  プロセッサ７００は、最も古い転送されたチャンクの位置に関してキャプチャ・リングＤＭＡ状況８０４Ａ、８０４Ｂ、および８０４Ｃを繰り返して読み取る可能性がある。最も古い転送されたチャンクは、キャプチャ・リングＤＭＡ状況８０４Ａ、８０４Ｂ、および８０４Ｃのいずれかの「最小値」によってポイントされるキャプチャ・リング・バッファ８００の位置にあるチャンクとすることができる（これらの値が、リング・バッファが前進する時にリング・バッファの末尾から先頭にラップ・アラウンドすることを考慮に入れて）。これは、システムの輻輳およびストールに起因するＤＭＡ出力６６６またはシステム・バス４１４Ａ、４１４Ｂ、および４１４Ｃの分割または再順序付けに関わりなく、特定のチャンクに関するキャプチャ・リング・バッファ８００へのすべての書込の完了を維持する。
【０１４２】
［0159］  このチャンクが識別された後に、プロセッサ７００は、上で説明したＳＳＤへのチャンクのマッピングに従って、入出力キュー８１４内にエントリ（たとえば、ＳＳＤ０エントリ１、ＳＳＤ１エントリ０など）を割り振ることができる。さらに、プロセッサ７００は、選択されたＳＳＤ上で、チャンクを記憶すべき新しい位置を割り振ることができる。プロセッサ７００は、チャンク処理キュー８０６内に、チャンクのメモリ位置、関連するチャンク・インデックスのメモリ位置、および入出力キュー８１４内のエントリの指示を配置することもできる。
【０１４３】
［0160］  この形で処理されるｊ個の連続するチャンクのすべてのセットに関して（ｊは、２から１００までのいずれかである）、ｒ個のパリティ・チャンク（ｒは、１から５までのいずれかである）が、冗長性のために生成され得る。たとえば、ｊ個の連続するチャンクのオーバーラップしないセットが、チャンク処理キュー８０６内での表現のために処理され終えた時に、プロセッサ７００またはプロセッサ７０４のうちの１つが、これらのチャンクに基づいて１つまたは複数のリードソロモン符号（または他の誤り訂正符号）を計算することができる。これらの符号は、パリティ・チャンクを形成し、１つまたは複数のパリティＳＳＤ（図示せず）内に記憶され得る。パリティＳＳＤは、図８Ｂおよび下で説明されるものに似た形で書き込まれ得る。この冗長性手順は、ＲＡＩＤ５またはＲＡＩＤ６の冗長性手順に似ているが、より高いレベルの回復をサポートする。原理的に、このシステムは、より多数のＳＳＤの障害から回復することができる。
【０１４４】
［0161］  チャンク・パリティ書込バッファ８１２は、パリティＳＳＤへの書込動作のためにパリティ・データが記憶され、キューイングされる場所である。このプロセスは、パリティ・データがプロセッサによって処理され、キャプチャ・リング・バッファ８００またはキャプチャ書込バッファ８１０と共には使用されないことを除いて、ＳＳＤへのチャンクの書込のプロセスに類似する。
【０１４５】
［0162］  いずれにせよ、プロセッサ７００、プロセッサ７０４、またはその両方は、メモリ７０２のキャプチャ・リング・バッファ８００内のチャンクをメモリ７０４内のキャプチャ書込バッファ８１０に転送するために動作の以下のセットを実行することができる。いくつかの場合に、複数のプロセッサが、異なるチャンクに対して並列に動作することができる。
【０１４６】
［0163］  まず、プロセッサは、キャプチャ・リング・バッファ８００内の次のチャンクの位置、チャンク・インデックス・バッファ８０２内のそれに関連するインデックス、および入出力キュー８１４内のそのターゲット・エントリを入手するために、チャンク処理キュー８０６の頭部を読み取る。ターゲット・エントリに基づいて、プロセッサは、キャプチャ書込バッファ８１０内の指定されたメモリ位置にこのチャンクを書き込む。
【０１４７】
［0164］  次に、入出力キュー８１４内のターゲット・エントリから、プロセッサは、チャンクが記憶されるＳＳＤおよびその中の位置を判定する。プロセッサは、キャプチャ書込バッファ８１０内のメモリ位置から指定されたＳＳＤ内のこの位置にチャンクを書き込むようにストレージ・コントローラ７０８に指示するコマンドを発行する。たとえば、チャンクが、ＳＳＤ０書込バッファ８１６のＳＳＤ０エントリ１によって参照される場合に、そのチャンクは、ＳＳＤ０に書き込まれる。
【０１４８】
［0165］  次に、ＣＲＣが、チャンク全体に対して計算される。このＣＲＣは、不揮発性メモリ内のチャンクのデータの完全性が、将来の任意の時に妥当性検査されることを可能にする。ＣＲＣの値、指定されたＳＳＤ上に記憶されたチャンクの位置、ならびにチャンク・インデックス・バッファ８０２内のチャンクに関するエントリが、ホスト・オペレーティング・システム・ストレージ４０４Ｂに書き込まれる。特筆すべきことに、これは、チャンクをＳＳＤから検索する必要があるのではなく、チャンクが、ホスト・オペレーティング・システム・ストレージ４０４Ｂ内の単一のルック・アップを介して見つけられることを可能にする。チャンク・インデックス・バッファ８０２内のエントリは、それに関連するチャンクよりはるかに小さいので、これは、特定のチャンクを見つけることを安価な手順にする。他のチャンク統計も、ホスト・オペレーティング・システム・ストレージ４０４Ｂに書き込まれ得る。
【０１４９】
［0166］  ストレージ・コントローラ７０８が、ＳＳＤへのチャンク（ならびにおそらくは書込のためにキューイングされている他のチャンク）の書込を完了する時に、ストレージ・コントローラ７０８は、入出力キュー８１４に関連する入出力キュー完了バッファ（図示せず）にその旨の指示を書き込む。プロセッサ７００または７０４の一方は、書込が完了する時を判定するために入出力キュー完了バッファを監視することができる。書込完了が検出された後に、プロセッサは、チャンクがストレージにコミットされたことを示すために、ホスト・オペレーティング・システム・ストレージ４０４Ｂ内のチャンクに関連するエントリを更新することができる。
【０１５０】
［0167］  図８Ｃは、図８Ａおよび図８Ｂのデータ構造の間の関係を示す。具体的には、図８Ｃは、例のチャンク８２２および例のチャンク・インデックス８２４を含む。チャンク８２２は、最も以前にキャプチャされたもの（パケット０）から最も最近にキャプチャされたもの（パケットＴ）へ順序付けられた、Ｔ＋１個のキャプチャされたパケットを含む。チャンク・インデックス８２４は、チャンク８２２に関連付けられ、パケット０がキャプチャされた時を表すタイムスタンプ、パケットＴがキャプチャされた時を表すタイムスタンプ、およびチャンク８２２内のパケットの個数（Ｔ＋１）を含む（他の情報の中でも）。
【０１５１】
［0168］  上で説明したように、チャンク８２２およびチャンク・インデックス８２４は、ＤＭＡによってそれぞれキャプチャ・リング・バッファ８００およびキャプチャ・インデックス・バッファ８０２に転送され得る。データの転送またはコピーは、図８Ｃでは実線を用いて表現され得る。その一方で、データの間の関係は、点線を用いて表現され得る。
【０１５２】
［0169］  エントリ８２６が、チャンク処理キュー８０６に追加される。このエントリは、キャプチャ・リング・バッファ８００内のチャンク８２２とキャプチャ・インデックス・バッファ８０２内のチャンク・インデックス８２４との両方の位置ならびにＳＳＤｘのキュー内のエントリｙである入出力キュー８１４内の位置を参照する。プロセッサは、チャンク８２２を、キャプチャ・リング・バッファ８００からＳＳＤｘのキュー内のエントリｙに関連するキャプチャ書込バッファ８１０内の位置にコピーする。ＳＳＤｘの書込キューの処理の一部として、プロセッサは、チャンク８２２をＳＳＤｘに書き込むようにストレージ・コントローラにも指示する。ＳＳＤなどの長期ストレージ内にチャンクを記憶するのに使用されるフォーマットは、図３を参照して説明したＰＣＡＰフォーマットから変化することができる。
【０１５３】
［0170］  プロセッサは、チャンク・インデックス８２４とチャンク８２２のＣＲＣおよびＳＳＤ記憶位置とをホスト・オペレーティング・システム・ストレージ４０４Ｂにさらにコピーする。この手順のステップが完了する時に、キャプチャ・リング・バッファ８００、キャプチャ・インデックス・バッファ８０２、およびキャプチャ書込バッファ８１０内の、チャンク８２２およびチャンク・インデックス８２４を一時的に記憶するのに使用された位置は、他の使用のために解放され得る。
【０１５４】
［0171］  この配置は、データ・パケットの高速キャプチャおよび記憶を提供する。具体的には、１００ギガバイト毎秒の持続的レートをサポートすることができる。本明細書で説明されるエンド・ツー・エンド・ストレージ・システムは、個々のパケットではなくチャンクに作用することと、処理のしやすさのためにチャンクならびにチャンク内のパケットを注意深く整列することと、複数のチャンクを並列に処理できるようにするためにチャンク処理をパイプライン化することと、各チャンクを１回だけ（メモリ７０２からメモリ７０６に）コピーすることと、同一のＳＳＤへの順次書込を超えて順次書込性能を高めるためにＳＳＤ（または他のストレージ・ユニット）のアレイにまたがってチャンクを順次書き込むことと、他の動作よりチャンク書込動作を優先することとによってそれを行う。
【０１５５】
［0172］  特筆すべきことに、特定のＳＳＤに書き込む時に、各チャンクは、順次増加する位置に書き込まれる。これは、内部ガーベジ・コレクションおよびウェアレベリング論理に起因するＳＳＤストールを制限する。
【０１５６】
Ｃ．例のパケット・キャプチャ動作
［0173］  図８Ｄは、例の実施形態を示す流れ図である。図８Ｄによって示されるプロセスは、ネットワーク・インターフェースおよびストレージ・コントローラに結合された１つまたは複数のプロセッサおよびメモリによって実行され得る。ストレージ・コントローラは、次いで長期パケット・ストレージに結合され得る。ネットワーク・インターフェースは、パケットを受信し、これらのパケットをチャンクに配置する。
【０１５７】
［0174］  図８Ｄの実施形態は、この図に示された特徴のうちの任意の１つまたは複数の除去によって単純化され得る。さらに、これらの実施形態は、以前の図面のいずれかのまたは本明細書の他所で説明される特徴、態様、および／または実施態様と組み合わされ得る。
【０１５８】
［0175］  ブロック８３０は、第１のメモリによってネットワーク・インターフェースからパケットのチャンクおよびチャンク・インデックスを受信することを含むことができる。チャンクは、ネットワーク・インターフェースによってキャプチャされた複数のパケットを含むことができ、チャンク・インデックスは、チャンク内の最初のパケットおよび最後のパケットのタイムスタンプならびにチャンク内のパケットのカウントを含むことができる。ネットワーク・インターフェース・ユニットは、それぞれが少なくとも１０ギガビット毎秒の回線速度を有する１つまたは複数のイーサネット・インターフェースを含むことができる。
【０１５９】
［0176］  関連するチャンク・インデックス内のパケットのカウントは、関連するチャンク内のＴＣＰパケットのカウントおよび／または関連するチャンク内のＵＤＰパケットのカウントを含むことができる。より一般的な場合に、関連するチャンク・インデックス内のパケットのカウントは、関連するチャンク内のユーザ・プログラム可能なパケット分類に関する複数の独立なカウンタを含むことができる。
【０１６０】
［0177］  いくつかの実施形態では、チャンクのそれぞれのサイズは、固定され、同一である。チャンクのそれぞれは、整数個のパケットを含むことができ、チャンクのいずれかの未使用空間は、パディング・バイトによって充填され得る。
【０１６１】
［0178］  ブロック８３２は、第１のメモリの第１のリング・バッファ内にチャンクを記憶し、第１のメモリのインデックス・バッファ内にチャンク・インデックスを記憶することを含むことができる。
【０１６２】
［0179］  ブロック８３４は、第１のメモリに結合された第１のプロセッサによって、第２のメモリの入出力キュー内のチャンクのエントリと第１のメモリのチャンク処理キュー内のチャンクのエントリとを割り振ることを含むことができる。
【０１６３】
［0180］  ブロック８３６は、チャンクを識別するために、第１のプロセッサによって、チャンク処理キューを読み取ることを含むことができる。
【０１６４】
［0181］  ブロック８３８は、第１のプロセッサによって、チャンクを第１のリング・バッファから第２のメモリの第２のリング・バッファ内の位置にコピーすることを含むことができる。位置は、入出力キュー内の割り振られたエントリに関連することができる。
【０１６５】
［0182］  ブロック８４０は、第１のプロセッサ、第２のメモリ、およびストレージ・コントローラに結合された第２のプロセッサによって、ストレージ・コントローラに結合された複数の不揮発性パケット・ストレージ・メモリ・ユニットのうちの１つにチャンクを書き込むようにストレージ・コントローラに指示することを含むことができる。第１のプロセッサおよび第１のメモリは、第１のＮＵＭＡノードの一部とすることができ、第２のプロセッサおよび第２のメモリは、第２のＮＵＭＡノードの一部とすることができる。複数の不揮発性パケット・ストレージ・メモリ・ユニットは、複数のＳＳＤを含むことができる。
【０１６６】
［0183］  いくつかの実施形態で、第１のプロセッサおよび第１のメモリは、第１のシステム・バスによってネットワーク・インターフェース・ユニットに通信可能に結合され、第２のプロセッサおよび第２のメモリは、第２のシステム・バスによって複数の不揮発性パケット・ストレージ・メモリ・ユニットに通信可能に結合される。ネットワーク・インターフェース・ユニットは、第１のシステム・バスによって第１のメモリにチャンクを書き込むＤＭＡエンジンを含むことができる。ネットワーク・インターフェース・ユニットは、ＤＭＡエンジンが第１のシステム・バス上での輻輳を検出する時に遅延または受信されたパケットを捨てさせる背圧スロットルをも含むことができる。
【０１６７】
［0184］  ブロック８４２は、第１のプロセッサまたは第２のプロセッサによって、複数の不揮発性パケット・ストレージ・メモリ・ユニットとは別々のファイル・システムにチャンク・インデックスを書き込むことを含むことができる。
【０１６８】
［0185］  いくつかの実施形態では、第１のプロセッサまたは第２のプロセッサは、チャンク処理キュー内に連続して配置されるチャンクのグループに関して、チャンクのグループに誤り訂正符号を適用することによって１つまたは複数のパリティ・チャンクを計算し、１つまたは複数のパリティ・チャンクを第２のメモリのチャンク・パリティ書込バッファ内に記憶し、複数の不揮発性パケット・ストレージ・メモリ・ユニットとは別々の１つまたは複数の不揮発性パリティ・ストレージ・メモリ・ユニットにまたがって１つまたは複数のパリティ・チャンクを書き込むようにも構成され得る。
【０１６９】
ＩＩＩ．例の改善された高速パケット・キャプチャ・システム  読取方向
［0186］  パケットのチャンクの記憶に加えて、コンピューティング・デバイス４００は、パケットの特定の記憶されたチャンクから特定のパケットを取り出すこともできる場合がある。これらの取り出されたパケットは、その後、使用可能なパケット解析ツールとの互換性のある、ＰＣＡＰフォーマットなどのフォーマットに変換され得る。
【０１７０】
［0187］  たとえば、パケットの複数のチャンクが、長期パケット・ストレージ４０４Ａ内に記憶され得、関連するチャンク・インデックスが、ホスト・オペレーティング・システム・ストレージ４０４Ｂ内に記憶され得る。フィルタ式が受け取られ得る。たとえば、フィルタ式は、ユーザによって供給されまたはファイルから読み取られ得る。フィルタ式は、時間期間を指定することができる。
【０１７１】
［0188］  プロセッサ７００または７０４のいずれか１つが、ホスト・オペレーティング・システム・ストレージ４０４Ｂ内に記憶されたチャンク・インデックス内でこのフィルタへの一致をルック・アップすることができる。たとえば、フィルタが、特定の時間期間（たとえば、開始タイムスタンプおよび終了タイムスタンプによって定義される）を指定する場合に、一致するチャンク・インデックスは、その特定の時間期間内にキャプチャされたパケットを含むチャンクに関連するチャンク・インデックスである。チャンク・インデックス内の順序付けられたタイムスタンプに対する二分探索が、特定のチャンクを突き止めるのに使用され得る。
【０１７２】
［0189］  各一致するチャンク・インデックスは、それに関連するチャンクの、長期パケット・ストレージ４０４Ａ内の記憶位置への参照を含む。これらの位置に基づいて、プロセッサは、これらのチャンクを取り出すようにストレージ・コントローラ７０８に指示することができる。ＣＲＣ計算が、各チャンクに対して走行され、関連するチャンク・インデックス内のＣＲＣ計算と比較され得る。これらの値が一致しない場合には、チャンクは、破棄され得、チャンク・データ全体が、誤り訂正パリティ情報を使用して再計算され得る。
【０１７３】
［0190］  ＣＲＣが妥当性検査された後に、チャンクは、圧縮解除され得（圧縮が適用された場合に）、フィルタと一致するチャンク内の個々のパケットが、識別され得る。これらのパケットは、チャンクから抽出され、パケット解析ツールによってサポートされるフォーマット（たとえば、ＰＣＡＰフォーマット）で記憶され得る。
【０１７４】
［0191］  図９は、例の実施形態を示す流れ図である。図９によって示されるプロセスは、ネットワーク・インターフェースおよびストレージ・コントローラに結合された１つまたは複数のプロセッサおよびメモリによって実行され得る。ストレージ・コントローラは、次いで長期パケット・ストレージに結合され得る。ネットワーク・インターフェースは、パケットを受信し、これらのパケットをチャンクに配置する。
【０１７５】
［0192］  図９の実施形態は、この図に示された特徴のうちの任意の１つまたは複数の除去によって単純化され得る。さらに、これらの実施形態は、以前の図面のいずれかのまたは本明細書で説明される特徴、態様、および／または実施態様と組み合わされ得る。
【０１７６】
［0193］  ブロック９００は、パケット・フィルタ指定を入手することを含むことができ、パケット・フィルタ指定は、時間期間およびプロトコルの表現を含む。
【０１７７】
［0194］  ブロック９０２は、ファイル・システムに記憶された複数のチャンク・インデックスにパケット・フィルタ指定を適用することを含むことができる。複数のチャンク・インデックスは、ファイル・システムとは別々の複数の不揮発性パケット・ストレージ・メモリ・ユニット内に記憶されたキャプチャされたパケットのチャンクにそれぞれ関連することができる。複数のチャンク・インデックスは、チャンク内のキャプチャされたパケットのそれぞれのキャプチャ・タイムスタンプおよびプロトコルの表現を含むことができる。パケット・フィルタ指定の適用は、パケット・フィルタ指定と一致するパケットを含む複数のチャンク・インデックスからのチャンク・インデックスのサブセットを識別することができる。
【０１７８】
［0195］  ブロック９０４は、チャンク・インデックスのサブセットに関して、複数の不揮発性パケット・ストレージ・メモリ・ユニットから関連するチャンクを取り出すことを含むことができる。
【０１７９】
［0196］  ブロック９０６は、関連するチャンク内の各パケットにパケット・フィルタ指定を適用することを含むことができる。パケット・フィルタ指定の適用は、パケット・フィルタ指定に一致するパケットのサブセットを識別することができる。
【０１８０】
［0197］  ブロック９０８は、パケットのサブセットをファイル・システムに書き込むことを含むことができる。このファイル・システムは、ローカルまたはリモートとすることができる。
【０１８１】
ＩＶ．結論
［0198］  本開示は、本願で説明された特定の実施形態に関して限定されてはならず、これらの実施形態は、様々な態様の例示であることを意図されている。当業者に明白であるとおり、その範囲から逸脱することなく、多数の変更および変形を行うことができる。本明細書で説明された方法および装置に加えて、本開示の範囲内の機能的に同等の方法および装置が、前述の説明から当業者に明白になろう。そのような変更および変形は、添付の特許請求の範囲の範囲内に含まれることが意図されている。
【０１８２】
［0199］  上の発明を実施するための形態は、添付図面を参照して、開示されるシステム、デバイス、および方法の様々な特徴および動作を説明する。本明細書および図面で説明される例の実施形態は、限定的であることを意図されたものではない。本明細書で提示される主題の範囲から逸脱せずに、他の実施形態を利用することができ、他の変更を行うことができる。本明細書で全般的に説明され、図面に示された本開示の諸態様は、様々な異なる構成で配置され、置換され、組み合わされ、分離され、設計され得ることが容易に理解されよう。
【０１８３】
［0200］  図に示され、本明細書で議論されるメッセージ・フロー図、シナリオ、および流れ図のいずれかまたはすべてに関して、各ステップ、ブロック、および／または通信は、例の実施形態による情報の処理および／または情報の伝送を表すことができる。代替実施形態は、これらの例の実施形態の範囲内に含まれる。これらの代替実施形態では、たとえば、ステップ、ブロック、伝送、通信、要求、応答、および／またはメッセージとして説明された動作が、用いられる機能性に依存して、実質的に同時または逆順を含めて、図示されまたは議論された順序から外れて実行され得る。さらに、より多数またはより少数のブロックおよび／または動作が、本明細書で議論されるはしご図、シナリオ、および流れ図のいずれかと共に使用され得、これらのはしご図、シナリオ、および流れ図は、部分的にまたは全体的に、互いに組み合わされ得る。
【０１８４】
［0201］  情報の処理を表すステップまたはブロックは、本明細書で説明される方法または技法の特定の論理機能を実行するように構成され得る回路網に対応することができる。その代わりにまたはそれに加えて、情報の処理を表すステップまたはブロックは、モジュール、セグメント、またはプログラム・コードの一部（関連データを含む）に対応することができる。プログラム・コードは、方法または技法の特定の論理動作またはアクションを実施するためにプロセッサによって実行可能な１つまたは複数の命令を含むことができる。プログラム・コードおよび／または関連データは、ＲＡＭ、ディスク・ドライブ、または別の記憶媒体を含むストレージ・デバイスなど、任意のタイプのコンピュータ可読媒体上に記憶され得る。
【０１８５】
［0202］  コンピュータ可読媒体は、レジスタ・メモリおよびプロセッサ・キャッシュなど、短い時間期間の間にデータを記憶するコンピュータ可読媒体などの非一時的コンピュータ可読媒体をも含むことができる。コンピュータ可読媒体は、より長い時間期間の間にプログラム・コードおよび／またはデータを記憶する非一時的コンピュータ可読媒体をさらに含むことができる。したがって、コンピュータ可読媒体は、たとえばＲＯＭ、光ディスク、磁気ディスク、コンパクト・ディスク読取専用メモリ（ＣＤ−ＲＯＭ）など、二次のまたは永続的な長期ストレージを含むことができる。コンピュータ可読媒体は、任意の他の揮発性または不揮発性のストレージ・システムをも含むことができる。コンピュータ可読媒体は、たとえば、コンピュータ可読記憶媒体または有形のストレージ・デバイスと考えることができる。
【０１８６】
［0203］  さらに、１つまたは複数の情報伝送を表すステップまたはブロックは、同一の物理デバイス内のソフトウェア・モジュールおよび／またはハードウェア・モジュールの間での情報伝送に対応することができる。しかし、他の情報伝送は、異なる物理デバイス内のソフトウェア・モジュールおよび／またはハードウェア・モジュールの間とすることができる。
【０１８７】
［0204］  図面に示された特定の配置を、限定的とみなしてはならない。他の実施形態が、所与の図内に示された各要素をより多数またはより少数含むことができることを理解すべきである。さらに、図示された要素の一部を組み合わせるまたは省略することができる。さらに、例の実施形態は、図面に示されていない要素を含むことができる。
【０１８８】
［0205］  様々な態様および実施形態を本明細書で開示したが、他の態様および実施形態が、当業者に明白になろう。本明細書で開示された様々な態様および実施形態は、例示のためのものであって、限定的であることは意図されておらず、真の範囲は、以下の特許請求の範囲によって示される。
【要約】      （修正有）【課題】記憶またはリアル・タイム表示のためにパケットをキャプチャする機構を提供する。【解決手段】メモリにおいて、個々のパケットではなくパケットのチャンクを処理するパケット・キャプチャ・アーキテクチャを含む。これらのチャンクは、カスタマイズされたネットワーク・インターフェースとメモリ・ユニットと長期（不揮発性）パケット・ストレージとの間で転送される時の十分なバッファリングを用いてパイプライン化された形で処理される。【選択図】図８Ｂ【図１】
0006830516.tif 000003
【図２】
0006830516.tif 000004
【図３Ａ】
0006830516.tif 000005
【図３Ｂ】
0006830516.tif 000006
【図３Ｃ】
0006830516.tif 000007
【図４】
0006830516.tif 000008
【図５】
0006830516.tif 000009
【図６Ａ】
0006830516.tif 000010
【図６Ｂ】
0006830516.tif 000011
【図６Ｃ】
0006830516.tif 000012
【図６Ｄ】
0006830516.tif 000013
【図６Ｅ】
0006830516.tif 000014
【図７】
0006830516.tif 000015
【図８Ａ】
0006830516.tif 000016
【図８Ｂ】
0006830516.tif 000017
【図８Ｃ】
0006830516.tif 000018
【図８Ｄ】
0006830516.tif 000019
【図９】
0006830516.tif 000020