(57)【要約】  ネットワーク処理装置は、ファイヤーウォールと他のネットワークインターフェイスマネージメントの動作を行う新規なアーキテクチャを提供する。UPM (Unified Policy Management)アーキテクチャは、ファイヤーウォールポリシーマネージメントをルーティングおよびスイッチングの決定に統合させるために、同じメモリと処理構造を使用する。他の実施形態では、再構成可能なセマンティックプロセッサ(Reconfigurable Semantic Processor: RSP)が異なる構文要素を識別するパーサを使用する。これらの構文要素は、その後で、１または複数のセマンティックプロセッシングユニット(SPUs)によって使用され、異なるファイヤーウォールやネットワークインターフェイスやルーティングやスイッチングや他のパケット処理作業が行われる。【選択図】  図１
2008524965.tif 000002
【特許請求の範囲】
【請求項１】
DoS (Denial of Service)攻撃を監視しかつフィルタリングする方法であって、
可能性のあるDoS攻撃と関連付けられたパケットを識別するステップと、
メモリ内でDoSエントリーとして前記パケットの状態を追跡するステップと、
前記メモリ内で以前のDoSエントリーが無い場合は、新しいパケットの通過を許可するステップと、
前記新しいパケットがすでに通過することを許可された後で、当該新しいパケットに対して前記メモリに新しいDoSエントリーを加えるステップと、を含むことを特徴とする前記方法。
【請求項２】
前記メモリ内ですでにDoSエントリーを有しているパケットを受信するステップと、
前記対応するDoSエントリーにDoS攻撃フラグが設定されている場合には、前記パケットを除外するステップと、
タイムスタンプが所定の時間より古い場合には、前記タイムスタンプ、カウンタおよび前記対応するDoSエントリーに対するDoSフラグをアップデートするステップと、をさらに含む請求項１に記載の方法。
【請求項３】
前記メモリ内ですでにDoSエントリーを有しているパケットを受信するステップと、
前記対応するDoSエントリーにDoS攻撃フラグが設定されていない場合には、前記パケットの通過を許可するステップと、
前記新しいパケットがすでに通過することを許可された後で前記対応するDoSエントリーに対するカウンタをインクリメントするステップと、
前記カウンタの値がDoS攻撃スレショルド以上であってかつ前記対応するDoSエントリーに対するタイムスタンプが所定の時間内である場合には、DoS攻撃フラグを設定するステップと、をさらに含む請求項１に記載の方法。
【請求項４】
送信情報ベース（Forwarding Information Base： “FIB”)として、かつファイヤーウォールポリシーマネージメントに対して、同じメモリサブシステムを用いるように構成されたプロセッサを備えたネットワーク処理デバイス。
【請求項５】
前記プロセッサは、ルーティングおよびスイッチングの両方の決定とファイヤーウォールオペレーションの実行をするために、複数のパケットに含まれた宛先アドレスとファイヤーウォールポリシーメトリックスを前記メモリサブシステム内のアクセスコントロールリスト(Access Control List：“ACL”)のエントリーの同じセットと比較するようになっている請求項４に記載のネットワーク処理デバイス。
【請求項６】
前記ACLエントリーは、前記パケットに含まれた宛先アドレスとファイヤーウォールポリシーメトリックスに対応する述語と、前記パケットにどのようなファイヤーウォールあるいは送信オペレーションを実行すべきかを示すアクションと、を含む請求項４に記載のネットワーク処理デバイス。
【請求項７】
前記プロセッサは、複数のパケットにおけるアドレスとファイヤーウォールポリシーメトリックスを識別するように構成されたデータパーサと、
前記識別されたアドレスとファイヤーウォールポリシーメトリックスに従って、前記パケットに対してファイヤーウォールオペレーションとパケット送信オペレーションの両方を行なう１または複数のセマンティックプロセッシングユニットと、を含む請求項４に記載のネットワーク処理デバイス。
【請求項８】
複数のパケットを解析して複数のネットワークインターフェイスオペレーションと関連付けされた構文要素を特定し、次いで該特定された構文要素に従って複数のマイクロ命令を起動する直接実行パーサと、
前記直接実行パーサによって起動された前記マイクロ命令を実行することによって前記ネットワークインターフェイスオペレーションを行う１または複数のセマンティックプロセッシングユニットと、を備えたことを特徴とするセマンティックプロセッサ。
【請求項９】
データシンボルを受信するように構成された入力ポートと、
スタックシンボルを格納した直接実行パーサスタックであって、前記パーサが前記受信したデータシンボルに応じて前記スタックシンボルを処理するようになっている直接実行パーサスタックと、
少なくとも１つの受信したデータシンボルと前記パーサによって供給されたシンボルとの組み合わせによってインデックス化が可能な生成規則コードのデータが格納されたパーサテーブルと、
前記生成規則コードによってインデックス化が可能な生成規則のデータが格納された生成規則テーブルと、
前記セマンティックプロセッシングユニットによってアクセス可能であり、かつ前記生成規則コードによってインデックス化されたマシンインストラクションのデータが格納されたセマンティックコードテーブルと、をさらに備えた請求項８に記載のセマンティックプロセッサ。
【請求項１０】
前記パーサは、場合によってはDoS攻撃の一部の可能性のある複数のDoSパケットを特定し、前記セマンティックプロセッシングユニットに、前記DoS候補のパケットが受信されたレートを監視させ、監視されたレートに従って当該DoS候補のパケットを除外するか通過させるかの判断をさせる請求項８記載のセマンティックプロセッサ。
【請求項１１】
前記パーサにより特定されたパケットセマンティック要素と対応する述語を有するエントリーと、前記パケットにどのようなファイヤーウォールあるいは送信オペレーションを実行すべきかを決めるために前記セマンティックプロセッシングユニットによって用いられるアクションと、を含むアクセスコントロールリスト（Access Control List: ACL）をさらに備える請求項８に記載のセマンティックプロセッサ。
【請求項１２】
宛先アドレスと対応する出力ポートを含む送信情報ベース（Forwarding Information Base (FIB)）をさらに含み、前記セマンティックプロセッシングユニットは、前記ACLからの述語と前記FIBからの宛先アドレスの組み合わせを用いて前記パケットをどのようにして送信しかつ処理するかを決めるようになっている請求項１１に記載のセマンティックプロセッサ。
【請求項１３】
前記ACLは、前記同じ宛先アドレス述語に対して異なる出力ポートに関連付けられた異なるURL述語を含み、前記パーサは、前記パケットに含まれた宛先アドレスおよびURL値を識別し、前記セマンティックプロセッシングユニットは、前記パケットを合致した宛先アドレスおよびURL述語を有する前記ACLで特定された出力ポートへ送るようになっている請求項１２に記載のセマンティックプロセッサ。
【請求項１４】
パブリックアドレスをプライベートアドレスに合致させるネットワークアドレス送信および／またはプロトコルアドレス送信(Network Address Translation and/or Port Address Translation: NAT/PAT)ルックアップテーブルをさらに備え、前記パーサは、前記パケット内のパブリックアドレスまたはプライベートアドレスを特定し、前記セマンティックプロセッシングユニットに当該パブリックアドレスまたはプライベートアドレスを前記ルックアップテーブルからの対応するパブリックアドレスまたはプライベートアドレスに置換するように指示する請求項８に記載のセマンティックプロセッサ。
【請求項１５】
第１のIPバージョンフォーマットを第２のIPバージョンフォーマットの対応するアドレスにマッピングするインターネットプロトコル(IP)バージョン変換テーブルをさらに備え、前記パーサは、前記パケットで用いられたIPバージョンを特定し、前記セマンティックプロセッシングユニットに前記パケットにおけるアドレスを前記他のIPバージョン用の異なるアドレスで置換するように指示する請求項８に記載のセマンティックプロセッサ。
【請求項１６】
暗号化キー、暗号化アルゴリズム識別子および／またはSPI（Security Parameter Indices）と関連する仮想的プライベートネットワーク(Virtual Private Network: VPN)テーブルをさらに備え、前記パーサは、前記パケット内のSPIを特定し、前記セマンティックプロセッシングユニットに、前記特定されたSPIを前記仮想的プライベートネットワークテーブルに合致したSPIを適用し、次いで前記暗号化キー、暗号化アルゴリズム識別子および／または前記仮想的プライベートネットワークから戻された認定されたアルゴリズム識別子に従って前記パケットを暗号化するようになっている請求項８に記載のセマンティックプロセッサ。
【請求項１７】
データストリームにおいて構文要素を識別するデータパーサと、
前記データパーサによって識別された構文要素に従って、前記データパーサから脅威をフィルタリングする脅威フィルタリング回路と、を備えたことを特徴とする侵入検出システム。
【請求項１８】
さらに、前記脅威フィルタリング回路によって用いられ、前記脅威をフィルタリングをしている間、略一定の時間、前記データストリームの出力を遅延させるための遅延バッファを含む請求項１７に記載の侵入検出システム。
【請求項１９】
前記脅威フィルタリング回路は、複数のアプリオリアクセスコントロールリスト（ACL）フィルタの第１のセットを用いる前記データストリームの第１の初期脅威フィルタリングを行い、前記識別された構文要素に従って生成された複数のアクセスコントロールリスト（ACL）フィルタの第２のセットを用いて前記遅延バッファにおけるデータの第２のフィルタリングを行う請求項１８に記載の侵入検出システム。
【請求項２０】
前記脅威フィルタリング回路は、脅威のシグネチャに適用された前記識別された構文要素からトークンを生成し、前記構文要素に対応する複数の脅威のフィルタのセットを動的に生成する請求項１７に記載の侵入検出システム。
【請求項２１】
前記トークンは、脅威と関連付けされている可能性のある前記データストリームにおける構文要素に対してだけ生成され、前記データストリームにおける他の部分に対してはトークンが生成されないようになっている請求項２０に記載の侵入検出システム。
【請求項２２】
前記データパーサは、パーサスタックに含まれているシンボルに従って前記データを解析する請求項１７に記載の侵入検出システム。
【請求項２３】
前記パーサは、前記データストリーム中の前記異なる構文要素に対応する生成規則ルールコードを含むパーサテーブルを有しており、前記生成規則ルールコード前記パーサスタックからのシンボルと前記データストリームの複数の部分に従ってインデックス付けされている請求項２２に記載の侵入検出システム。
【請求項２４】
さらに、前記生成規則コードによってインデックス付けされている生成規則を含む生成規則テーブルを有しており、前記生成規則のうちのいくつかは、前記データストリームからの前記脅威をフィルタリングする際に前記脅威フィルタリング回路によって実行される生成規則を含む請求項２３に記載の侵入検出システム。
【請求項２５】
さらに、複数のネットワーク処理デバイスにある複数の脅威フィルタリング回路からのトークンを受信する中央侵入検出装置を備えており、前記複数のネットワーク処理デバイスは、該複数のネットワーク処理装置によって処理された複数の異なるデータストリームの複数の異なる構文要素を識別するようになっており、前記中央侵入検出装置は、前記複数の異なる構文要素に従って複数のフィルタを生成するとともに当該フィルタを前記異なるネットワーク処理デバイスに戻すように配信する請求項１７に記載の侵入検出システム。
【請求項２６】
前記中央侵入検出装置は、前記トークンを送信するネットワーク処理デバイスによって実行されるネットワーク処理動作に従って、前記フィルタを生成する請求項２５に記載の侵入検出システム。
【請求項２７】
さらに、前記脅威フィルタリング回路が前記データストリームからの脅威をフィルタリングする前に、当該データストリームからの複数のフラグメント化されたパケットを再構築する再循環バッファを備える請求項１７に記載の侵入検出システム。
【請求項２８】
データストリーム中の構文要素を識別する直接実行パーサと、
前記直接実行パーサによって識別された構文要素に従って、前記データストリームに対して侵入検出処理を実行する１または複数のセマンティックプロセッシングユニットと、を含むことを特徴とするセマンティックプロセッサ。
【請求項２９】
さらに、前記構文要素に対応する非終端シンボルを前記データストリームのある部分と結合させることによってインデックス付けがなされた複数の生成規則コードの複数のセットを含むパーサテーブルを備えた請求項２８に記載のセマンティックプロセッサ。
【請求項３０】
さらに、前記パーサテーブルの前記生成規則コードによってインデックス付けがなされた複数の生成規則を含む生成規則テーブルを備え、前記複数の生成規則の少なくともある部分は、前記侵入検出処理を実行する１または複数のセマンティックプロセッシングユニットによって実行される複数のマイクロ命令をインデックス化した複数のSPUエントリーポイント値を含む請求項２９に記載のセマンティックプロセッサ。
【請求項３１】
前記１または複数のセマンティックプロセッシングユニットは、前記データストリーム中の複数のパケットを複数のアプリオリACLフィルタの第１のセットと比較し、次いで前記比較の結果に従って、前記複数のパケットを廃棄するかあるいは格納する請求項２８に記載のセマンティックプロセッサ。
【請求項３２】
前記１または複数のセマンティックプロセッシングユニットは、前記侵入検出処理を実行しつつ所定の遅延時間だけ前記パケットを格納する請求項３１に記載のセマンティックプロセッサ。
【請求項３３】
前記１または複数のセマンティックプロセッシングユニットは、前記直接実行パーサによって識別された前記複数の構文要素から複数のトークンを生成し、当該複数のトークンを該トークンに対応するアクセスコントロールリスト(ACL)を動的に生成する脅威アナライザに供給する請求項３２に記載のセマンティックプロセッサ。
【請求項３４】
前記１または複数のセマンティックプロセッシングユニットは、前記格納されたパケットの中から前記動的に生成されたアクセスコントロールリストに一致（マッチ）するパケットを廃棄する請求項３３に記載のセマンティックプロセッサ。
【請求項３５】
さらに、データストリームからの複数のフラグメント化されたパケットを再構築するために前記１または複数のセマンティックプロセッシングユニットによって使用される再循環バッファを備え、前記直接実行パーサは、前記再構築された複数のパケットの中で複数の構文要素を識別し、前記１または複数のセマンティックプロセッシングユニットは、前記識別された複数の構文要素に従って侵入検出処理を行う請求項２８に記載のセマンティックプロセッサ。
【請求項３６】
前記直接実行パーサは、前記データストリーム中の複数のSMTP (Simple Mail Transport Protocol)パケットを識別するとともに、前記１または複数のセマンティックプロセッシングユニットに対して、前記複数のSMTPパケットから複数の電子メールエレメントを抽出しかつ該抽出された電子メールエレメントを用いて後から前記SMTPパケットに適用される複数の電子メール脅威フィルタのセットを生成するように命令する請求項２８に記載のセマンティックプロセッサ。
【請求項３７】
複数の異なるPDAセマンティック状況に対応する複数のセクションに構成されたセマンティックテーブルを有するPDA (PushDown Automaton)エンジンであって、前記複数のセクションの少なくともいくつかは、入力データに含まれている可能性のある多数の文字からなるセマンティック要素に対応する１または複数のエントリーを含んでおり、前記セマンティックテーブルは、前記異なるセマンティック状況を特定する複数のシンボルを前記入力データの複数のセグメントに結合することによってインデックス化されていることを特徴とするPDAエンジン。
【請求項３８】
さらに、前記結合されたシンボルと入力データのセグメントと一致（マッチ）する現在のPDAセマンティック状況におけるセマンティックエントリーに従って、次のPDA状況を特定するセマンティック状況スタンプを含む請求項３７に記載のPDAエンジン。
【請求項３９】
さらに、前記複数の入力データセグメントと結合するためのシンボルをポップするとともに、前記セマンティック状況スタンプによって特定される前記次のシンボルをプッシュするスタックを含む請求項３８に記載のPDAエンジン。
【請求項４０】
前記スタックは、多数の以前のセマンティック状況を表す複数の非終端シンボルを含む請求項３９に記載のPDAエンジン。
【請求項４１】
前記セマンティックテーブルは、前記入力データで特定された前記セマンティック要素に従ってかつ前記セマンティック要素に含まれる可能性のある個々の文字とは無関係に、異なるPDAセマンティック状況間での変換を行う請求項３７に記載のPDAエンジン。
【請求項４２】
前記セマンティックテーブルは、コンテントアドレッサブルメモリ（Content Addressable Memory: CAM）を有しており、該コンテントアドレッサブルメモリ内におけるセマンティックエントリーのロケーションは、次のセマンティック状況を特定するために用いられる入力データにおけるセマンティック要素と一致（マッチ）する請求項３７に記載のPDAエンジン。
【請求項４３】
さらに、前記コンテントアドレッサブルメモリによってインデックス付けされるスキップデータマップを含み、該スキップデータマップは、入力データの量を特定し、前記複数のセマンティックエントリーとの比較のために前記PDAエンジンにシフトするようになっている請求項４２に記載のPDAエンジン。
【請求項４４】
さらに、前記セマンティックテーブルによって特定された前記セマンティック要素に従って、前記入力データの別の処理を実行する１または複数のセマンティックプロセッシングユニット（“SPUｓ”）を有する再構成可能なセマンティックプロセッサを備えた請求項３７に記載のPDAエンジン。
【請求項４５】
さらに、前記１または複数のセマンティックプロセッシングユニットによって実行される複数のマイクロ命令を起動させるために前記セマンティックテーブルによってインデックス化されたセマンティックエントリーポイントマップを備える請求項４４に記載のPDA エンジン。
【発明の詳細な説明】
【関連する出願】
【０００１】
本出願は、2005年7月21日に出願された「ネットワークインターフェイスおよびファイヤーウォールデバイス」という発明の名称のアメリカ特許出願No.11/187,049、2005年7月22日に出願された「プッシュダウンオートマトンを用いているセマンティックエレメントを検出するための方法および装置」という発明の名称のアメリカ特許出願No.60/701,748および2005年5月9日に出願された「侵入検知システム」という発明の名称のアメリカ特許出願No.11/125,956に基づく優先権を主張している。この「侵入検知システム」という発明の名称のアメリカ特許出願No.11/125,956は、2004年12月21日に出願されたアメリカ仮特許出願No.60/639,002の優先権を主張するものでありかつ2003年1月24日に出願された同時係属のアメリカ特許出願No. 10/351,030の一部継続出願である。上記の出願は、すべて引用することにより、それらの内容が本出願に組み入れられているものとする。
【発明の背景】
【０００２】
インターネットの解放性は、インターネットに接続されたマシンに対する様々な攻撃をもたらすようになった。これらの攻撃は、対象のマシンが正確に動作することを不可能にするパケットシークエンスを送ることで実行される。この攻撃は、この対象のマシンをクラッシュさせる攻撃や、サービス妨害（Denial of Service: DoS）や、分散型サービス妨害（Distributed Denial of Service: DDoS）や、このマシンが使用不能になるか、このマシンのデータを破損させるか、DoSの攻撃ソースのクローンとして動作させるようにこの対象のマシンのファイルやソフトウェアを変更する攻撃などのカテゴリーに分類される。
【０００３】
多くの攻撃は、公的のインターネットに接続されているマシン上で生成され、企業のインターネットへのコネクションを介して企業に侵入する。インターネットへのコネクションポイントを一つ以上持っている企業もある。したがって、二つのネットワーク間のインターフェイスに配置されているネットワークデバイス（ファイヤーウォールとも呼ばれる）は、これらの攻撃を防ぐために用いられる。例えば、ファイヤーウォールは、公的のインターネットと私的なインターネット間や、二つのインターネットサービスプロバイダー（ISP）ネットワーク間や、二つのローカルエリア・ネットワーク間や、他の何らかのネットワーク間に配置してもよい。ファイヤーウォールデバイスがすべてのインターネットへのコネクションポイントに配置されている場合、その内部のネットワークおよびマシンの周りに境界ファイヤーウォール（perimeter firewall）が形成される。
【０００４】
このファイヤーウォールは、認証されていない攻撃パケットが私的なネットワークに侵入するのを防ぐ機能と、場合によっては、私的なネットワークの内部からの認証されていない送信を防ぐ機能を持つ。ファイヤーウォールのその他の用途には、パケット内部の情報を修正することなどもある。例えば、ファイヤーウォールは、公的なインターネットプロトコル（IP）アドレスと私的なインターネットプロトコル（IP）アドレス間で変換を行うためのネットワークアドレス変換器（NAT）として用いることもできる。
【０００５】
従来は、ファイヤーウォールオペレーションは、主に、PowerPC（登録商標）のような組み込みプロセッサもしくはIntel class x86プロセッサ（“Intel”は登録商標）のどちらかのプロセッサ上で起動しているソフトウェアモジュールの集合として実行されてきた。問題は、これらのハードウェアのアーキテクチャが、上記のファイヤーウォールオペレーションを効果的に実行するための処理能力を持っていないことである。このため、パケットが送信元から宛先まで流れてきたら、その各々を調べ、それらのパケットが有効であるかを判定するための各種ルールを適用することにより、完全に各種攻撃を防ぎ、それらを取り除くことは不可能ではないとしても難しい。
【０００６】
本発明は、この問題および従来例と関連する問題を解決することを目的とする。
【発明の開示】
【０００７】
ネットワーク処理デバイスは、ファイヤーウォールおよびその他のネットワークインターフェイスの管理オペレーションを制御するための今までにないアーキテクチャを提供する。本発明の他の態様としては、統合型ポリシー管理（Unified Policy Management: UPM）アーキテクチャは、同一のメモリと処理構造を用いて、ファイヤーウォールポリシーマネージメントをルーティングおよびスイッチング判定と統合する。別の実施例では、再構成可能なセマンティックプロセッサ（Reconfigurable Semantic Processor: RSP）は、パーサ(Pasesr)を用いて、異なる構文要素を識別する。これらの識別された構文要素が、その後、一つまたは複数のセマンティック処理ユニット(Semantic Processing Unit: SPUs)によって使用され、異なるファイヤーウォール、ネットワークインターフェイス、ルーティング、スイッチングおよびその他のパケット処理オペレーションを実行する。
【０００８】
本発明の前述した目的、特徴、利点およびそれら以外の特徴、目的、利点は、添付図面と関連して記載された本発明の好ましい実施例の以下の詳細な説明から明らかとなるであろう。
【詳細な説明】
【０００９】
図１は、ネットワークインターフェイスデバイス25Aを介して公的IPネットワーク12に接続されている私的インターネットプロトコル（Internet Protocol: IP）ネットワーク24を示している。この公的IPネットワーク12は、パケット交換を提供しさえすればどのような広域ネットワーク（WAN）でもよい。私的ネットワーク24は、公的IPネットワーク12と通信することを必要とする企業内ネットワーク（company enterprise network）やインターネットサービスプロバイダー（Internet Service Provider: ISP）ネットワークや家庭内ネットワークなどである。
【００１０】
私的ネットワーク24内のネットワーク処理デバイス25A−25Dは、パケット交換ネットワーク上で通信しさえすればどのようなタイプの通信装置でもよい。例えば、ネットワーク処理デバイス25Aおよび25Bは、ルーターや、スイッチや、ゲートウェイや、ファイヤーウォールなどでよい。エンドポイント25Cは、パーソナル・コンピュータ（PC）であり、エンドポイント25Dは、インターネットウェブサーバーのようなサーバーである。このPC 25Cは、有線イーサネット接続のような有線接続、もしくは例えばIEEE802.11プロトコルを用いている無線接続を介して前記私的ネットワーク24に接続されてもよい。
【００１１】
再構成可能なセマンティックプロセッサ（Reconfigurable Semantic Processor: RSP）100は、私的ネットワーク24内のネットワークデバイス25A−25Dを任意に組み合わせたものの中で稼動する。異なるRSP 100は、前記私的ネットワーク24の中に入っていくネットワークトラフィック22とこの私的ネットワーク24を通り抜けていくネットワークトラフィック22の両方を収集し、解析する。この例では、ネットワーク処理デバイス25A内のRSP 100Aは、私的ネットワーク24のためのファイヤーウォールおよび通常のネットワークインターフェイスとして稼動するように構成されている。以下で説明するネットワークインターフェイスオペレーションおよび通常のファイヤーウォールのオペレーションは、RSP 100内で実行されるように示されているが、これらのオペレーションの中には、他の従来のコンピュータアーキテクチャ内でも実行できるものもあるということを理解されたし。
【００１２】
ある例では、RSP 100Aは、サービス妨害（DoS）攻撃16を検出し、それらを防ぐように構成される。公的IPネットワーク12に接続されている外部PC 14は、私的ネットワーク24内の一つまたは複数のネットワーク処理デバイス25A−25Dを停止させるように意図したDoS攻撃を生成するかもしれない。RSP 100Aは、公的IPネットワーク12から受信した全入力（incoming）パケット20を監視し、そのパケットストリーム20内にあるDoS攻撃16と関連するパケットをすべて廃棄する。RSP 100Aはまた、パケット16を検出し、廃棄することに加え、DoS攻撃16に関連しているとして廃棄されなかったパケット22に対して別のネットワークインターフェイスオペレーション26を実行することできる。例えば、RSP 100Aは、ウィルスおよびマルウェアの検出およびフィルタリングと、ネットワークアドレス変換（Network Address Translation: NAT）と、ルーティングと、統計的な解析と、ロギングと、公的IPネットワーク12と私的IPネットワーク24の間で転送されるパケットに対して必要とされるその他のパケット変換オペレーションなどの機能を適当に組み合わせて提供することができる。これらのオペレーションはすべて、以下でより詳しく説明する。
【００１３】
別の例では、RSP 100は、私的ネットワーク24の内部に配置されている別のネットワーク処理デバイス、もしくは私的ネットワーク24への入り口である別のいずれかの主要なアクセスポイントに配置されている別のネットワーク処理デバイスに組み込んでもよい（設置してもよい）。例えば、RSP 100Bは、以下でより詳細に説明する、同様の認証や、ルーティングや、統計的解析などのオペレーション26を提供するためにサーバー25D内に配置してもよい。他のやり方では、パケットオペレーション26の一部は、RSP 100B内では実行可能であり、RSP 100A内では実行不可能であるかもしれない。例えば、RSP 100Bは、RSP 100Aによって実行される他のすべてのパケット解析フィルタリングおよびパケット変換に加えて、統計的解析や、DoSフィルタリングを実行してもよい。
【００１４】
私的ネットワーク24内の他のネットワーク処理デバイス25Bおよび25Cは、いずれも、以下で説明されるオペレーションのうちのいずれかを実行するように構成された一つまたは複数のRSP 100を有していてもよい。このRSP 100を用いるプラットフォームはまた、無線インターフェイス（例えば、携帯電話符号分割多重アクセス方式（cellular CDMA）や、時分割多重アクセス（TDMA）や、802.11や、ブルートゥースなど）を介してパケットまたはその他のデータストリームを受け取るなんらかの無線デバイス（例えば、無線携帯端末（wireless PDA）や、無線携帯電話や、無線ルーターや、無線アクセスポイントや、無線クライアントなど）であってもよい。
【００１５】
再構成可能なセマンティックプロセッサ（RSP）
図２Aは、以下で説明する、ある実施例で、ファイヤーウォールオペレーションおよびその他のネットワークインターフェイスオペレーションを実施するために用いられている再構成可能なセマンティックプロセッサ（RSP）100のブロック図を示している。このRSP 100は、入力ポート120を介して受信されるパケットデータストリームをバッファするための入力バッファ140と、出力ポート152を介して出力されるパケットデータストリームをバッファするための出力バッファ150と、を有している。
【００１６】
直接実行パーサ（Direct Execution Parser: DXP）180は、入力バッファ140において受信されるパケットまたはフレーム（例えば入力「ストリーム」）と、出力バッファ150へと出力されるパケットまたはフレーム（例えば出力「ストリーム」）と、再循環バッファ160内で再循環されるパケットまたはフレーム（例えば再循環「ストリーム」）の処理を制御する。入力バッファ140、出力バッファ150および再循環バッファ160は、先入れ先出し（FIFO/first-in-first-out）バッファであるのが好ましい。
【００１７】
また、DXPは、セマンティックプロセッシングユニット（Semantic Processing Unit: SPU）200によるパケットの処理も制御する。このセマンティックプロセッシングユニット200は、バッファ140、バッファ150およびバッファ160とメモリサブシステム215間のデータ転送を制御する。メモリサブシステム215は、入力ポート120から受け取ったパケットを格納し、以下で説明する、統合型ポリシー管理（UPM）オペレーションおよびその他のファイヤーウォールオペレーションのために用いられるアクセス制御リスト（Access Control List: ACL）テーブルをCAM 220内に格納する。
【００１８】
RSP 100は、所定のファイヤーウォールオペレーションを実行するために少なくとも三つのテーブルを使用する。生成規則(PR)176を検索するためのコード178は、パーサテーブル（Parser Table: PT）170に格納される。文法生成規則176は、生成規則テーブル（Production Rule Table: PRT）190内に格納される。SPU 200によって実行されるコードセグメント212は、セマンティックコードテーブル（Semantic Code Table: SCT）210内に格納される。パーサテーブル170内のコード178は、例えば、行列フォーマット（row-column format）やコンテントアドレッサブルフォーマット（content addressable format）などのやり方で格納される。行列フォーマットでは、パーサテーブル170の行は、内部パーサスタック(parser stack) 185により提供される非終端コードNT 172によりインデックス付けされ、列は、入力バッファ140内のデータの先頭から抽出された入力データ値DI[N]174によりインデックス付けされる。コンテントアドレッサブルフォーマットでは、パーサスタック185からの非終端コード172と、入力バッファ140からの入力データ値174を連結したものが、このパーサテーブル(paser table) 170に対する入力をなす。
【００１９】
生成規則テーブル190は、パーサテーブル170からのコード178によりインデックス付けされる。テーブル170および190は、パーサテーブル170に対するクエリが、非終端コード172および入力データ値174に対応する（適用可能な）生成規則176を直接送り返すように、図２Aに示されているようにリンクされていてもよい。DXP 180は、パーサスタック185の一番上にある非終端コードを、PRT190から送り返された生成規則（PR）176と取り替え、その後入力バッファ140からのデータの解析を続ける。
【００２０】
また、セマンティックコードテーブル210も、パーサテーブル170により生成されたコード178か、生成規則テーブル190により生成された生成規則176、もしくはその両方によってインデックス付けされる。通常、解析結果は、DXP 180が、所定の生成規則176に対して、セマンティックコードテーブル210からのセマンティックエントリーポイント（SEP）ルーチン212がSPU 200によってロードされ、かつ実行されるべきかを判定することを可能にする。
【００２１】
SPU 200は、コンテキストシンボルによるアドレス化が可能なように構成されたメモリインターフェイスを提供するメモリサブシステム215に対するいくつかのアクセスパスを有する。メモリサブシステム215、パーサテーブル170、生成規則テーブル190およびセマンティックコードテーブル210は、内部メモリデバイスか、例えばダイナミックランダムアクセスメモリ（DRAM）やコンテントアドレッサブルメモリ（CAM）のような外部メモリデバイスもしくはそれらリソースの組み合わせを用いる。各テーブルまたはコンテキストは、共有物理メモリ領域に対するコンテキストインターフェイスに一つまたは複数のその他のテーブルまたはコンテキストを提供するだけでもよい。
【００２２】
管理（maintenance）中央演算処理装置（MCPU）56は、SPU 200とメモリサブシステム215の間に接続される。MCPU 56は、RSP 100にとって望ましい機能の中で、従来のソフトウェアとハードウェアによって無理なく遂行できるものはすべて実行する。これらの機能は、通常、あまり使われずかつ最優先で実行されるものではない（時間的に重要でない）機能であり、その機能の複雑性からSCT 210内に含めるようなものではない。MCPU 56は、SPU 200に、MCPUの代わりにタスクを実行するようにリクエストする機能も持っているのが好ましい。
【００２３】
メモリサブシステム215は、ハッシュ機能（ハッシング関数）またはコンテントアドレッサブルメモリ（CAM）検索を介してDRAM 280内のデータにアクセスするためのアレイマシンコンテキストデータメモリ（AMCD）230を有している。暗号処理ブロック240は、データの暗号化や、復号化や、認証を行い、コンテキスト制御ブロックキャッシュ250は、DRAM 280へのコンテキスト制御ブロックをキャッシュするとともに、DRAM 280からのコンテキスト制御ブロックをキャッシュする。通常キャッシュ260は、基本オペレーションにおいて使用されるデータをキャッシュし、ストリーミングキャッシュ270は、データストリームがDRAM 280へと書き込まれている間と、データストリームがDRAM 280から読み出されている間に、これらのデータストリームをキャッシュする。コンテキスト制御ブロックキャッシュ250は、ソフトウェア制御のキャッシュであるのが好ましい。すなわち、いつキャッシュラインが使用され、いつ開放される（free）のかをSPU 200が決定するのが好ましい。電気回路240、250、260および270はそれぞれ、DRAM 280とSPU 200の間に接続される。TCAM 220は、AMCD 230とMCPU 56の間に接続され、ファイヤーウォールの性能（performance）を十分に向上させるやり方で、アクセス制御リスト（ACL）テーブルおよびその他の要素（parameter）を格納している。
【００２４】
より詳細な、RSP 100の機能ブロックに対する設計最適化は、2003年1月24日に出願された「再構成可能なセマンティックプロセッサ」という発明の名称の同時係属のアメリカ特許出願No. 10/351,030に記載されている。この特許出願は、これを引用することにより、その内容が本出願に組み入れられているものとする。
【００２５】
ファイヤーウォールオペレーションおよびネットワークインターフェイスオペレーションのためのRSPの使用
図１と関連して前述したファイヤーウォールオペレーションおよびその他のネットワークインターフェイスオペレーション26は、生成規則およびセマンティックエントリーポイント（SEP）ルーチン212を使用するRSP 100を用いて実施される。RSPデバイス100の入力ポート120に到着したパケットは、パーサテーブル170内の文法テーブルエントリーを用いて解析され、SEPルーチン212によって意味的に（semantically）処理される。SEPルーチン212は、以下の動作1−5のどれかを実行することを決定する。
1.  該パケットをそのまま受け入れ、それを出力ポート152へ送る。
2.  該パケットをさらなる解析の対象から除外し、それを転送しない。
3.  該パケットを修正した後、それを出力ポート152へ送る。
4.  該パケットを保持し、現在のセッションに関するさらなるパケットが到着するのを待ち、当該パケットに対する最終的な処理（disposition）を決定する。
5.  該パケットを特定の宛先に向けるか、さらなる解析のためにRSP内へ送り返す。
【００２６】
パーサテーブル170内の文法規則は、受け入れ可能なパケットに通過することを許可する一方、周知の異常もしくは疑わしい異常を伴うパケットに対してはSPU 200にフラグを立てるように構成される。文法による通過判定（通過させるかさせないか）の一例としては、TCPフラグ配列（TCP flag settings）がある。TCPフラグフィールドは、その内部に8ビットを持ち、その一部の組み合わせだけが有効である。この文法規則は、パーサテーブル170内で、受け入れ可能なTCP配列はすべて許可し、受け入れ不可能なTCP配列は拒絶するように符号化される（code）。例えば、同一のパケットに設けられたTCPのSYNとFINの組み合わせのメッセージは、有効な組み合わせではないので、DXP 180によって直接除外される（dropされる）。
【００２７】
一部の受け入れ不可能なパケットまたはオペレーションは、補助用SEPルーチン212によってのみ判定されるかもしれない。これらは、主に、セッションおよびプロトコルの状況と関連している。ある例では、対応するTCP SYNメッセージを送る前に、TCPデータペイロードセグメントを送るかもしれない。この例では、SEPルーチン212は、メモリ280から、TCP SYNメッセージが先に送られていないTCPセッションに関するパケットを除外する。
【００２８】
直接実行パーサ(DXP) 180は、SPU 200内で追加のサイクルを消費することなくパケットを直接拒絶したり、DoS処理において攻撃パケットでないパケットを直接転送したりすることができるので、SEPコード212と関連しているパーサ文法(parser grammars)を用いることは、（従来のファイヤーウォールを用いたシステムに比べ）性能の向上を提供する。従来のファイヤーウォールは、各パケットを「問題のある」ルールのリストと照合しなければならない。このリストは、新しい攻撃が発見されるのに伴って時間とともに大きくなる。逆に、パーサ文法は、問題の無いパケットだけを記述して、それらの問題の無いパケットだけがRSP 100を通過することを許可されるように書くことができる。このようにして、問題のあるパケットは、自動的に除外されるか、SPU 200によって直接処理される。これは、より拡張性のあるパケット監視オペレーションを提供する。
【００２９】
RSPパーサおよび生成規則テーブル (RSP Parser and Production Rule Table)
RSP 100の、ファイヤーウォールもしくは統合型ポリシー管理（UPM）としてのオペレーションは、特別な例によってよりよく理解できるであろう。以下で説明される例では、RSP 100は、TCPパケットの対サービス妨害（DoS）フィルタリングを提供する。しかし、当業者ならば、以下で説明される概念は、どのような通信プロトコルを用いて送信されるどのようなデータストリームに関するどんな種類のファイヤーウォールオペレーションにも簡単に適用できるとわかるだろう。同様の概念は、以下で説明される統合型ポリシー管理（UPM）オペレーションにも簡単に適用できる。
【００３０】
ファイヤーウォールオペレーションおよびUPMオペレーションには、入力データストリームに関する構文を解析し、検出することが含まれる。これらのオペレーションを、図２Bおよび図２Cと関連して説明する。まず図２Bに関して、パーサテーブル170の内部および生成規則テーブル190の内部には、異なる多数の文法に関連する（複数の）コードが同時に存在していてもよい。例えば、コード300は、メディアアクセス制御（MAC）パケットヘッダーのフォーマットの解析に関連し、コード302は、IPパケットの処理に関連し、また別のコードのセットであるコード304は、転送制御プロトコル（TCP）パケットの処理などに関連する。パーサテーブル170内の別のコード306は、以下でより詳しく説明する別のファイヤーウォールオペレーションもしくはサービス妨害（DoS）オペレーションに関連する。
【００３１】
PRコード178は、生成規則テーブル190内に格納されている対応する生成規則176にアクセスするために用いられる。特定の検索の実行において必要とされない限り、入力値308（例えば、現在の入力値DI[n] 174（nはバイトで選択された一致幅）と連結される非終端（NT）シンボル172）は、PRテーブル170内でなんらかの特定の順番で割り当てられる必要は無い。
【００３２】
ある実施例では、パーサテーブル170は、DXP 180からNTシンボル172とデータ値DI[n] 174を受け取るアドレッサ310も備えている。アドレッサ310は、NTシンボル172をデータ値DI[n] 174と連結させ、この連結した値308を、パーサテーブル170へと送る。概念的には、生成規則テーブル170の構造を、NTコード172とデータ値174の特有な組み合わせのそれぞれに対して一つのPRコード178を持ったマトリックスとして見ることが有用であることが多いが、本発明はそのようには限定されない。異なるアプリケーションに対しては、異なるタイプのメモリおよびメモリ構成が適当である場合もある。
【００３３】
ある実施例では、パーサテーブル170は、コンテントアドレッサブルメモリ（CAM）として実施され、アドレッサ310は、CAMがPRコード178を検索するための鍵としてNTコード172および入力データ値DI[n] 174を使用する。CAMは、TCAMエントリーが格納された(populated with TCAM entries)三値（ternary）CAM (TCAM)であるのが好ましい。各TCAMエントリー（entry）は、NTコード312とDI[n]一致値（DI[n] match value）314を含む。各NTコード312は、複数のTCAMエントリーを保持することができる。
【００３４】
DI[n] 一致値（DI[n] match value）314の各ビットは、「0」、「1」または「X」に設定される。この「X」は「無視（Don't Care）」を表す。この機能により、PRコード178は、パーサテーブル170が適合(match)を見つけるために、DI[n] 174の数ビットまたは数バイトけがコード化されたパターンと適合（一致／match）することを必要とする。
【００３５】
例えば、TCAMの一行は、TCP SYNパケットに対するNTコードNT_TCP_SYN 312Aを有しており、その後にそのTCP SYNパケット内に存在しているであろう宛先IPアドレスやTCPメッセージ識別子などのコンテンツを表すさらなる（additional）バイト314Aが続く。このTCAM行の残りのバイトは「無視（Don't Care）」に設定される。こうして、NT_TCP_SYN 312Aおよび数バイトのDI[N]がパーサテーブル170に提示された場合、DI[N]の内の最初のバイトのセットがTCP SYNメッセージ識別子を含んでいれば、DI[N]の残りのバイトが何を含んでいても適合（一致／match）が生じることとなる。
【００３６】
パーサテーブル170内のTCAMは、上述したように、NT172およびDI[N] 174と一致するTCAMエントリーに対応するPRコード178Aを生成する。この例では、PRコード178Aは、TCP SYNパケットと関連付けられている。このPRコード178Aは、DXP180に送り返されるか、PRテーブル190に直接送り返されるか、またはその両方に送り返されてもよい。ある実施例では、PRコード178Aは、一致状態を作り出すTCAMエントリーの行インデックスとなる。
【００３７】
図２Cは、生成規則テーブル190の一つの実行可能性のある実施例を示している。この実施例では、アドレッサ320は、DXP 180かパーサテーブル170のいずれか一方からPRコード178を受け取り、DXP 180からNTシンボル172を受け取る。好ましくは、この受け取ったNTシンボル172は、パーサテーブル170へ送られるNTシンボルと同一のNTシンボルであり、パーサテーブルではこのNTシンボルは当該受け取ったPRコード178を生成するのに用いられたものである。
【００３８】
アドレッサ320は、これらの受け取ったPRコード178およびNTシンボル172を使用して対応する生成規則176にアクセスする。アドレッサ320はいくつかの実施例においては必ずしも必要ではないが、使用される場合は、DXP 180の一部やPRT 190の一部として設けることができ、また中間の（intermediate）機能ブロックとして設けることができる。例えば、パーサテーブル170またはDXP 180がアドレスを直接作る場合、アドレッサは必要とされない。
【００３９】
生成規則テーブル190内に格納されている生成規則176は、三つのデータセグメントを含む。これらのデータセグメントは、シンボルセグメント177Aと、SPUエントリーポイント（SEP）177Bセグメントと、スキップバイトセグメント177Cと、を含む。これらのセグメントは、長さ固定のセグメントでも長さ可変のセグメントであってもよく、ヌル終端化されている（null-terminated）のが好ましい。シンボルセグメント177Aは、DXPのパーサスタック185（図２A）上へ転送される（プッシュされる）複数のシンボルを有している。該複数のシンボルは、終端シンボルと非終端シンボルの両方もしくはその一方からなる。SEPセグメント177Bは、SPU 200がデータのセグメント（segments of data）を処理するのに用いるSPUエントリーポイント（SEP）を有している。以下で説明するある実施例では、SEPセグメント177Bは、現在解析されているパケット内で識別された、ACL（ACL＝Access control list）の述語および構文上のその他の要素に対応する。
【００４０】
スキップバイトセグメント177Cは、入力バッファ140が自身のバッファポインタをインクリメントし、入力ストリームの処理を進めるために使用するスキップバイト値を有している。また、生成規則の処理において有用なその他の情報も生成規則176の一部として格納することができる。
【００４１】
この例では、生成規則コード178Aによってインデックス付けされる生成規則176は、入力バッファ140内の識別されたTCP SYNパケットに対応する。SEPセグメント177Bは、図２Aのセマンティックコードテーブル210内のSPUコード212をポイントする。このSPCコード212は、SPU 200によって実行されると、以下図４−１１で説明されるように、識別されたTCP SYNパケットに対して（on）DoSオペレーションを実行するものである。
【００４２】
ある実施例では、SPU 200は、並列処理的に実行できるセマンティックプロセッシングエレメントの配列（array）を有する。生成規則176A内のSEPセグメント177Bは、一つまたは複数のSPU 200を起動し、並列処理的に（in parallel）、異なるパケットに対して同一のファイヤーウォールオペレーションを実行したり、同一のパケットに対して異なるファイヤーウォールオペレーションを実行したりすることができる。同様のオペレーションは、以下で説明するいかなるファイヤーウォールオペレーションや、ネットワークインターフェイスオペレーションや、UPMオペレーションに必要な他の種類のパケット識別もしくはデータ識別を検出するのにも用いることができるのは明らかであろう。
【００４３】
上述したように、パーサテーブル170は、TCP SYNパケットと関連している別の文法や、TCP SYNパケットと関連していない別の文法を含んでいてもよい。例えば、パーサテーブル170に含まれるIP文法302は、DoS処理（以下の図４−１１参照）を制御するために、識別されたTCP SYNメッセージと組み合わせて用いられる入力バッファ140内の識別されたNT_IP宛先アドレスと関連している生成規則コード178を含んでいてもよい。
【００４４】
生成規則コード302内の一致データ値（matching data value）314は、図１の私的ネットワーク24内に配置されたネットワーク処理デバイスの宛先IPアドレスを含んでいる。NT_IPコード172と関連している入力データDI[I] 174が、PRコード302に関する一致値314に含まれる宛先アドレスを保持していない場合、デフォルト生成規則コード178が生成規則テーブル190へ供給されてもよい。このデフォルト生成規則コード178は、DXP 180か、SPU 200もしくはその両方に入力バッファ140から当該パケットを廃棄するように命令する（direct）生成規則テーブル190内の生成規則176をポイントする。
【００４５】
サービス妨害（Denial of Service (DoS)）
図３は、どのようなやり方でDoS攻撃16が、ネットワーク処理デバイス406を危険にさらすことができるのかを示している。一般的に、DoS攻撃の予防の目的は、悪意あるパケットが私的ネットワーク24内のネットワーク処理デバイスへのアクセス権を得るのを防ぐことである。以下の説明では、ネットワークデバイスを多数のパケットであふれさせることに関連したDoS攻撃の一例について論じる。しかしながら、一つまたは少数の悪意あるパケットに関連した他のタイプの悪意ある攻撃も多数存在する。例えば、他の悪意ある攻撃は、ネットワーク処理デバイスプロトコルの通常のオペレーションを中断させる（disrupt）一つまたは複数のパケットに関連している可能性がある。ネットワーク処理デバイスまたはネットワークに対するこれらの攻撃はすべて、以下では通常、DoS攻撃と呼ばれ、それらはすべて本システムの範囲内に含まれる。
【００４６】
図３に関連して、攻撃デバイス14は、必ずしもそうというわけではないが、通常私的ネットワーク24の外部で動作しており、私的ネットワーク24を多数のパケットであふれさせる。ある例では、攻撃コンピュータ14は、転送制御プロトコル（TCP）同期（SYN）パケット400のフラッド(floods)を、私的ネットワーク24内の宛先アドレスへ送る。別の例では、攻撃者14は、パケットフラグメント402を私的ネットワーク24内の宛先アドレスへ送る。どちらの場合も、パケット16は、私的ネットワーク24内の一つまたは複数のネットワークデバイス406に、受信した異なるTCP SYNパケット400それぞれに対する状態408を維持させ、かつ受信したパケットフラグメント402の各セットに対する状態410を維持させる。
【００４７】
TCP SYN攻撃400およびパケットフラグメント攻撃402は、実行可能性のある多数の異なるタイプのDoS攻撃の例に過ぎない。例えば、攻撃者は、TCP終了（FIN）パケットを送ったり、パケットフラグメントをオーバーラップさせたりすることで、ネットワークデバイスを停止させることもできる。別のポートに基づいたDoS攻撃では、ワームが私的ネットワーク24内のマシン内に配置される。このワームは、その後攻撃者14に命令され、当該私的ネットワーク24の内側から偽造メッセージ（bogus message）送る。このDoS攻撃は、インターネット・コントロール・メッセージ・プロトコル（ICMP）メッセージを介して開始されてもよい。
【００４８】
新しいTCP SYNパケット400がネットワーク処理デバイス406によって受信されると必ず、新しいTCPセッション状態408が維持され、対応するTCP ACKメッセージ404が送信側デバイス（攻撃者14）に送り返される。しかし、当該攻撃者14は、TCP ACK返答404を無視し、その代わりに、その私的ネットワーク24に新しいTCP SYNメッセージを送り続ける。攻撃者14は、TCP SYNメッセージ400に偽造された送信元アドレスを挿入することもある。この場合、ネットワークデバイス406は、TCP SYN ACKメッセージ404を別の被害者側コンピュータに送ることになるので、被害者側コンピュータはTCP SYN ACKメッセージ404のフラッドの処理という負担を強いられることとなる。
【００４９】
このネットワーク処理デバイス406は、なんらかの所定の期間中、各TCP SYNメッセージ400に対応するTCP状態408を維持することを要求される。大量の偽造のTCP状態408を維持すると、ネットワークデバイス406内のリソースは、他の正当なIPトラフィックの処理速度がひどく落ちるか、その正当なIPトラフィックが停止するところまで使い果たされる。
【００５０】
同様の筋書きで、攻撃者14は、関連したシーケンス番号を持つパケットフラグメント402を送ることもある。ネットワーク処理デバイス406は、シーケンス402内の各パケットフラグメントが受信され終わるか、なんらかのタイムアウト時間が終了するまで状態410を維持しなければならない。攻撃者14は、意図的に、パケットフラグメント402を当該シークエンスから除外する。これは、ネットワークデバイス406に、タイムアウト時間の持続期間中、パケットフラグメントのセットそれぞれに対する状態410を維持することを要求し、これにより、処理リソースを使い果たさせる。
【００５１】
これらのタイプのDoS攻撃を防ぐための従来の技術は、入力パケット16のレート（rate）制限を行うことであった。例えば、ネットワーク処理デバイス406は、すべてのTCP SYNパケットに関して宛先アドレスを識別する。特定の宛先アドレス宛のTCP SYNパケットは、受信されたパケットの数が所定のレートを上回ると、除外される。
【００５２】
しかし、各DoS攻撃を継続的に監視し、追跡するのには、大量のデバイスリソースが用いられる。ネットワーク処理デバイス406は、すべての入力パケットを実行可能性のあるDoS脅威それぞれに関して監視することを要求される。例えば、該ネットワーク処理デバイス406は、各TCP SYNパケットと各パケットフラグメントを識別することを要求される。この処理だけでも厳しいものである。しかし、ネットワーク処理デバイス406は、同様に受信されたパケットの数およびレートを追跡することも要求され、さらに必要であれば、DoSレートのスレッショルドに到達する同様のタイプのパケットを除外することも要求される。問題の一つは、現在のコンピュータアーキテクチャには、現在のネットワーク回線のレートにおいてこれらのDoSオペレーションを実行する能力（機能）が無いということである。
【００５３】
図４に関して、ファイヤーウォール420は、固有のやり方でパケットのレート制限を行うことにより、効率的にDoS攻撃を識別するとともにDoS攻撃を防ぐ。以下の説明では、DoS攻撃の一部である可能性があるあらゆるパケットを、DoS候補パケットと呼ぶ。例えば、TCP SYNパケットは、DoS攻撃で使用されることがある。そのため、TCP SYNパケットは、ファイヤーウォール420にDoS候補パケットとして識別される。フラグメントパケットも実行可能性のあるDoS攻撃で使用されることがあるので、このパケットもファイヤーウォール420にDoS候補パケットとして識別される。
【００５４】
ファイヤーウォール420は、関連した宛先アドレスに係るDoS候補パケットのレート制限を行う。実行可能性のあるDoS攻撃それぞれに関して宛先アドレスの識別と管理を行うのには、大量の処理リソースが必要となる可能性がある。しかし、ファイヤーウォール420内で使用されるアーキテクチャは、従来のファイヤーウォールのアーキテクチャよりも高性能であり、より拡張性がある（scalable）ので、このアーキテクチャは、異なる多数のDoS攻撃を高いラインレートで監視しかつ除外することができる。
【００５５】
ゾーン (Zones)
ポリシー管理は、ネットワーク処理デバイスまたはネットワークに異なるゾーンを割り当てることができる。これらの異なるゾーンは、例えば、異なる外部ネットワークインターフェイスやこのネットワーク処理デバイス内の内部ネットワークインターフェイスと関連していてもよい。これらのゾーンは、ネットワークポリシー管理の配慮によってDoSオペレーションとは独立して指示されてもよい。一方で、ファイヤーウォール420のある態様は、ポリシーマネージャーがDoS脅威を解析する際にあらかじめ指定した異なるインターフェイスゾーンを配慮する。
【００５６】
例えば、第一のゾーン1は、インターフェイス426を介して公的ネットワーク12から受信される公的IPトラフィックと関連させてもよい。第二のゾーン2は、VPNトンネル424を介して私的ネットワーク12上で受信される中程度の信頼度の仮想私的ネットワーク(VPN)トラフィックと関連させてもよい。例えば、VPNトンネル424は、私的ネットワーク24と家庭用コンピュータ422の間に確立されてもよい。この家庭用コンピュータ422は、私的ネットワーク24を稼動している会社の従業員によって操作されてもよい。第三のゾーン3は、私的ネットワーク24の内部を出所とし、インターフェイス428を介して受信される高い信頼度を持つIPトラフィックと関連させてもよい。
【００５７】
各ゾーンは、異なる信頼のレベルと関連していてもよく、したがって、異なるDoSレート制限が割り当てられてもよい。このDoSレート制限は、特定の期間にファイヤーウォール420を通過することを許可される同一の宛先アドレスを持つ特定のタイプのDoS候補パケット（例えば、TCP SYNメッセージを含んでいるパケットなど）の数と関係している。レート制限の限界に到達したら、同一のDoSタイプで同一の宛先アドレスを持ったそれ以降の（additional）パケットは、すべて除外される。例えば、インターフェイス426を介してゾーン1から受信されたパケットは、それらが公的ネットワーク12を介して信頼できない送信元から受け取られたことから、最も低い信頼度と関連付けられる。したがって、ゾーン1から受信されたパケットには、他のゾーンと比べて低いDoSレート制限値（限界）を割り当ててもよい。
【００５８】
ゾーン2は、恐らくは、パケットが既知のリソース422から受信されるので、中程度の信頼度をもつ。したがって、ゾーン2には、ゾーン1よりも高いDoSレート限界を割り当ててもよい。例えば、規定された期間にゾーン1を通過することが許可される同一の宛先アドレスを持つTCP SYNパケットよりも多くの同一の宛先を持つTCP SYNパケットが、規定された期間にゾーン2を通過することを許可される。この例では、インターフェイス428上で受信されるすべてのパケットは、私的ネットワーク24内に配置されているマシンからのものであるため、ゾーン3は、高い信頼度を持つ。したがって、ゾーン3で受信されるパケットには、さらに高いDoSレート限界を割り当ててもよい。
【００５９】
受信されるパケットと関連付けられるゾーンは、送信元アドレスまたはポート情報によって識別されてもよい。例えば、RSP 100もしくはファイヤーウォール420内で用いられている別の処理デバイスは、入力パケットと関連付けられるゾーンを、関連した送信元アドレスのVLAN IDやパケットがそれを介して受信されるインターフェイスに基づいて決定してもよい。ファイヤーウォール420は、その際、部分的に、パケットと関連している識別されたゾーンに基づいて、DoS攻撃を管理する。例えば、潜在的なDoS脅威に関連しているパケットを、それらに関連しているゾーンに従ってカウントし、管理し、レート制限することができる。これにより、ファイヤーウォール420は、それらに関連している信頼度に従って、より効率的にDoSリソースを異なるインターフェイスに割り当てることができる。これについては以下でより詳しく説明する。
【００６０】
図５に関して、図４に示されているファイヤーウォール420のある実施例は、DoS候補のパケットおよび非DoS候補のパケットを含んでいるかもしれない入力パケットストリーム440を受け取るプロセッサ442を有している。このプロセッサ420はまず、パケットストリーム440内のDoS攻撃と関連しているかもしれないパケット（DoS候補パケット）を識別する。例えば、プロセッサ442は、TCP SYNメッセージを含んでいるすべての入力パケットフラグメントまたは入力パケットをDoS候補パケットと識別してもよい。
【００６１】
プロセッサ442は、テーブル464にアクセスし、識別されたDoS候補パケットと関連しているゾーン468を特定する。例えば、プロセッサ442は、識別されたDoSパケット内のポート値をテーブル464のポート番号エントリー466と照合してもよい。このプロセッサはその後、テーブル464内のゾーン468を、適合したポート番号エントリー（matching port number entry）466と関連しているものとみなしてもよい。
【００６２】
プロセッサ442は、識別されたDoSパケットに関する宛先アドレス472と、関連しているゾーン値468を組み合わせたものをコンテントアドレッサブルメモリ(CAM) 444へのアドレスとして用いる。このCAM 444は、宛先アドレス値とゾーン値の組み合わせであるDoSエントリー445を収容している。CAM 444内のアドレス位置は、静的ランダムアクセスメモリ（SRAM）450へのポインタとして用いられる。
【００６３】
SRAM450内のメモリ位置は、DoS攻撃フラグ452、タイムスタンプ454、ジェネレーション値456およびオフセット458を含むフィールドへと分割される。DoS攻撃フラグ452は、特定の宛先アドレスに関するパケットの数があらかじめ決められたDoSレート制限値を超えるたびに設定される。上述したように、DoSレート制限値は、異なるゾーン448に対してカスタマイズすることができる。
【００６４】
タイムスタンプ454は、TCAM 444に新しいエントリーが加えられるたびに設定され、そして、タイムスタンプの古さ（age of the time stamp）があらかじめ決められたDoS期間を超えてしまうたびに再設定される。ジェネレーション値456は、プロセッサ442が、TCAM 444、SRAM 450および動的ランダムメモリ（DRAM）462内のDoSエントリーの割り当ておよび管理を行うのに用いられる。オフセット値458は、DRAM 462へのポインタとして用いられる。DRAM 462は、DoS期間内にファイヤーウォール420によって受信される特定の宛先アドレスに関するパケットの数を追跡するカウンタ460のセットを有している。
【００６５】
プロセッサ442は、DoS攻撃の一部である可能性がある新しいDoS候補パケット474を識別する。新しく識別されたパケット474に関する宛先アドレス472およびゾーン値468は、CAM 444へのアドレスとして用いられる。新しいDoS候補パケット474は、今あるどのエントリーとも一致しないであろうから、プロセッサ442は、パケット474に対する新しいDoSエントリー445をCAM 444に加える。
【００６６】
CAM 444内の新しいDoSエントリーに対応するDoS攻撃フラグ452はクリア（消去）され、タイムスタンプ454は、現在のタイム値へ設定される。ジェネレーション値456は、現在どのようなジェネレーションがプロセッサ442内で動作中であっても、以下の図６でより詳しく説明されるように設定される。プロセッサ442は、アドレスオフセット値458を用いて、DRAM 462内の対応するカウンタ460を1へインクリメントする。プロセッサ442は、その後、パケットストリーム440内の次のパケットを処理する。
【００６７】
パケットストリーム440内の、潜在的（possible）DoS攻撃に対する基準を満たさないパケットは、DoS候補パケット441とは識別されない。例えば、パケット441は、パケットフラグメントでなく、TCP SYNメッセージを含まない正規のIPパケットであるかもしれない。この場合、プロセッサ442は、これらのパケット441が、これ以上何らかのDoS処理を受けることなくファイヤーウォール420を通過することを許可する。
【００６８】
パケットストリーム440内の次のパケットは、潜在的（possible）DoS攻撃（DoS候補パケット）と識別されるかもしれない。この例では、識別された次のパケットは、すでに、対応するDoSエントリーをCAM 444内に保持しているかもしれない。例えば、同一の宛先アドレスを持つ一つまたは複数のTCP SYNパケットまたはパケットフラグメントが、これよりも前に、同一のDoS期間内にファイヤーウォール420によって受信されていたのかもしれない。その結果、パケットに関する宛先アドレス472およびゾーン468は、CAM 444内のエントリーのうち一つと一致するであろう。適合（一致）したCAMエントリー445に対応するアドレス449は、その後SRAM 450へのアドレスとして用いられる。
【００６９】
プロセッサ442は、まず、SRAM 450内のDoS攻撃フラグ452を確認する。DoS攻撃フラグ452が設定されている場合、プロセッサ442は、パケットストリーム440内の対応するパケットを除外する。必要であれば、プロセッサ442は、その際、タイムスタンプ454およびジェネレーション値456をアップデートしてもよい。
【００７０】
DoS攻撃フラグ452が設定されていない場合、プロセッサ442は、パケットストリーム440内の関連しているパケットがファイヤーウォール420を通過することを許可する。プロセッサ442は、その後、SRAM 450およびDRAM 462内のDoS状態情報をアップデートする。例えば、プロセッサ442は、DRAM 462内の対応するカウンタ460をインクリメントし、その後タイムスタンプ454を現在のタイム値と比較する。タイムスタンプ454が古すぎない場合、DRAM 462内のカウンタ460の対応する値は有効にされ、DoSレート制限値と比較される。カウンタ値460がDoSレート制限値を下回っている場合、プロセッサ442は、パケットストリーム440内の次のパケットの処理へと進む。
【００７１】
タイムスタンプ454が現在のタイム値と比較された際に古すぎた場合、DRAM 462内の対応するカウント値460は、無効となっており(stale)、0へ再設定される。タイムスタンプ454も同様に現在のタイム値へと再設定される。これは、それぞれの所定の期間内にカウント460を効率的に再設定する。タイムスタンプ454が有効であり（古すぎない）かつDRAM462内のインクリメントされたカウント460がDoSレート制限値を上回っている場合、プロセッサ442は、対応するDoS攻撃フラグ452を設定する。これにより、プロセッサ442は、同一の宛先アドレスを持つ同様のパケットを除外することとなる。
【００７２】
ジェネレーション (Generation)
ジェネレーション値456は、CAM 444、SRAM 450およびDRAM 462内のDoSエントリーを管理するために用いられる。図６の例に関して、CAM 444は、論理的に、四つの異なるジェネレーションセクション480へ分割される。しかし、これは一つの実施例に過ぎず、このシステムは、任意に設定可能なサイズを持った任意の数のジェネレーションセクションを持つように構成することができる。
【００７３】
図５のプロセッサ442は、複数のジェネレーション480に従って複数のDoSエントリーを挿入し、取り除くことで、より効率的にDoS攻撃を識別し、管理することができる。図５−７に関して、プロセッサ442は、オペレーション490で、DoSエントリーを現在のジェネレーション480へ入力し始める。図６に示されるように、DoSエントリー482は現在のジェネレーション0へと入力される。オペレーション492では、プロセッサ442は、現在のジェネレーション0へ加えられた各エントリー482に対して、次のジェネレーション1からエントリー484を一つ取り除く。これにより、プロセッサ442が次のジェネレーションへ移行する際に、CAM 444が常に利用可能な領域を保持していることが保障される。
【００７４】
DoSエントリー482は、すでにCAM 444内に存在しているかもしれない。この例では、プロセッサ442は、オペレーション494で、今ある（existing）DoSエントリーに対して現在割り当てられているジェネレーション値456を現在のジェネレーションのものへ切り替える。例えば、DoSエントリー482は、プロセッサ442がジェネレーション0内で動作している間に受信されるとする。このDoSエントリー482は、現在ジェネレーション2に割り当てられている今ある（existing）DoSエントリー489と適合（一致／match）するかもしれない。オペレーション494では、プロセッサ442は、DoSエントリー489をジェネレーション2からジェネレーション0へと移す（切り替える／switch）。プロセッサ442が、SRAM 450内のジェネレーション値456を2から0へ再び割り当てると、DoSエントリー489は、CAM 444内の別の位置へ物理的に移されるわけではなく、論理的にジェネレーション0へ移されるということが理解できるであろう。
【００７５】
今あるDoSエントリーを現在のジェネレーションに移すことにより、比較的長い期間CAM 444内に存在しているが活動中の（active）DoSに対するエントリーは、プロセッサ442によって廃棄されないことが保障される。例えば、DoS攻撃は、長期間続くかもしれない。新しく受信された、同一のDoS攻撃に関連しているパケットはそれぞれ、CAM 444内に今あるDoSエントリーを現在のジェネレーション値へとアップデートするであろう。これは、DoS攻撃へと成長しなかった他の古いDoSエントリーや、もはや活動中のDoS攻撃に相当しない他の古いDoSエントリーがCAM 444から取り除かれるのに対し、活動中のDoS攻撃に相当するDoSエントリーが、CAM 444内に残ることを保障する。
【００７６】
オペレーション496では、プロセッサ442は、いつ次のジェネレーションへの切り替えがなされるべきかを決定する。異なるイベントにより、プロセッサ442が次のジェネレーションへ移ることもある。プロセッサ442は、現在のジェネレーションがエントリーで満たされている場合、オペレーション498で、次のジェネレーションへ移ってもよい。これは、例えば、攻撃者が異なる宛先アドレスを持った多数のTCP SYNメッセージを送った場合に起こることがある。
【００７７】
プロセッサ442は、所定の期間が終了した場合、オペレーション498内で、次のジェネレーションへ移ってもよい。これは、すべてのタイムスタンプ454（図５）が、プロセッサ442により追跡される現在の期間（time period）と対応することを保障する。例えば、DRAM 462内の関連しているカウント値と組み合わされているSRAM 450内のタイムスタンプ454は、現在受信中の異なる宛先アドレスに関するパケットのレートを決定する。タイムスタンプ期間が終了したら、プロセッサ442は、タイムスタンプ値454と、関連しているカウント値460の両方を再設定する必要がある。
【００７８】
しかし、現在のタイム値がプロセッサ442により使用され、ロールオーバーされ（roll-over）、ゼロにリセットされた後も、古いDoSエントリーがCAM 444内に残る可能性がある。この場合、プロセッサ442は、前のタイムスタンプ期間に対応するDRAM 462内のカウント460に、誤ってカウント値を加える可能性がある。これにより、カウンタ460が誤って複数のタイムスタンプ期間にわたってパケットをカウントし、DoS攻撃の誤検出に繋がる可能性がある。言い換えると、複数のタイムスタンプ期間パケットをカウントすると、実際のパケットのレートの誤表示（false indication）に繋がる。
【００７９】
この起こりうるロールオーバー問題を解決するために、プロセッサ442は、オペレーション496で、ある所定の期間の後、現在のジェネレーション内のエントリーの数に関わらず自動的に次のジェネレーションへ移る。この所定の期間は、ジェネレーションの総数によって増やされると（この例ではジェネレーションの総数は4である）、プロセッサ442によって用いられるロールオーバータイムスタンプ期間よりも少なくなる。
【００８０】
例えば、プロセッサ442は、4秒ごとにロールオーバーする現在のタイマーを保持してもよい。次のジェネレーションへ移るのに用いられる所定のタイムスタンプ期間は、0.5秒ごとに設定されてもよい。これは、CAM 444内のすべての停滞中のDoSエントリーが2秒ごとに取り除かれることを保障する。そのため、プロセッサ422は、SRAM 454内のすべてのタイムスタンプ454が同じタイムスタンプ期間に関連付けされるであろうことを保証する。また、これには、SRAM 450がタイムスタンプ454に対して使用するバイト数を減らすことができるという予想外の利点がある。言い換えると、このタイムスタンプ値454は、約2秒またはそれ以上の期間（時間）を追跡するのに十分なビット数だけを必要とする。
【００８１】
オペレーション496で、サイズ限界とタイムスタンプ期間のどちらにも到達していない場合、プロセッサ442は、現在のジェネレーションを新しいDoSエントリーで満たし続けるとともに、今あるDoSエントリーをオペレーション490〜494で現在のジェネレーションへと再割り当て続ける。オペレーション496で、サイズ限界とタイムスタンプ期間のどちらかに到達している場合、プロセッサ442は、オペレーション498で次のジェネレーションへ移り、その新しいジェネレーションにエントリーを加え始める。例えば、プロセッサ442は、新しいDoSエントリー486をジェネレーション1へと移し始め、それに伴って、次のジェネレーション2から今あるDoSエントリー488を取り除き始める。
【００８２】
合理的DoS攻撃識別 (Streamlining DoS Attach Identification)
少し戻って図５に関して、入力パケット440がCAM 444内で識別された場合、DRAM 462内の関連しているカウンタ460をインクリメントし、多数の同様のパケットが、タイムスタンプ454によって追跡されている期間中にDoS攻撃用のスレッショルドに到達したかどうか判定することが必要となるかもしれない。しかし、DRAM 462にアクセスするのに必要となる時間は、DoS攻撃判定およびそれに続くパケットの除外を遅らせるかもしれない。また、これはファイヤーウォール420を通過した他のパケットの処理も遅らせるかもしれない。DoS攻撃フラグ452は、プロセッサ442によって、現在のDoS攻撃の一部であるDoSパケットをすばやく識別するのに用いられる。
【００８３】
図５および図８に関して、DoS攻撃フラグ452は、DoS攻撃を識別し、処理する上で避けられない遅れを減らすために、その他の処理オペレーションと合わせて使用される。オペレーション540では、プロセッサ442はパケットを受信する。プロセッサ442は、オペレーション542で、受信したパケットが、現在はDoSエントリーとしてCAM 444内には含まれていない新しい宛先アドレスおよびゾーンを有しているかどうか判定する。
【００８４】
CAM 444内に前から存在するエントリーが無い場合、パケットはすぐにファイヤーウォール420を通過することを許可される。そのようなパケットは、現時点では、CAM 444内で識別されないので、そのパケットは現在のDoS攻撃の一部足りえず、その後除外されることは無い。パケットが通過することを許可された後、プロセッサ442は、事後（パケットの通過を許可した後）、DoS管理オペレーションを実施する。これは、識別されたパケットに続く他のパケットが、無駄に遅らされることがないことを保障する。
【００８５】
この「パケットの通過を許可した後」のメンテナンスでは、プロセッサ422は、図６および７と関連して前述したように、オペレーション546で、現在のジェネレーションに新しいDoSエントリーを加え、オペレーション548で、次のジェネレーションからDoSエントリーを取り除く。オペレーション550で、プロセッサ442は、DoS攻撃フラグ452をクリアし（まだクリアされていない場合）、新しいタイムスタンプ値454を設定し（設け）、現在のジェネレーション値456を設定し(設け)、DRAM 462内の対応するカウンタ460をインクリメントする。
【００８６】
必要であれば、プロセッサ442は、オペレーション552で、現在のジェネレーションを変更する。例えば、上述したように、プロセッサ442は、現在のジェネレーション内がエントリーで満たされるか、所定のタイムスタンプ期間が終了したら、現在のジェネレーションを変更する。新しいDoSエントリーに対するタイムスタンプ454は、設定された（設けられた）だけなので、新しいDoSエントリーが現在のジェネレーションに対する現在のDoSエントリー限界に到達していても、タイムスタンプ期間は終了しない。
【００８７】
オペレーション542に戻るが、プロセッサ442は、CAM 444内に現在存在するDoSエントリーに対応する宛先アドレスおよびゾーンを有しているパケットを受信するかもしれない。適合したCAMエントリーに対応するSRAM 450内のDoS攻撃フラグ452は、オペレーション560で、すぐにプロセッサ442により読み込まれる。対応するDoS攻撃フラグ452が設定されて（設けられて）いる場合、このパケットは、オペレーション580ですぐに除外される。このパケットは、該パケットを出力せずに、最終的にメモリ内で当該パケットを上書きすることで除去されてもよい。
【００８８】
必要であれば、プロセッサ442は、オペレーション582〜586でSRAM 450内の情報をアップデートする。しかし、DoS攻撃フラグ452はすでに設定されているので、プロセッサ442は、DRAM 462内の関連しているカウンタをインクリメントする必要は無い。例えば、オペレーション582で、プロセッサ442は、DoSエントリーに対するジェネレーション値456を現在のジェネレーションでアップデートしてもよい。続いてオペレーション584では、プロセッサ442は、タイムスタンプ454が終了しているかどうか判定する。例えば、プロセッサ442によって追跡されている現在のタイムスタンプ値とタイムスタンプ454との間の時間差が、所定の期間よりも（例えば一秒）長い場合、タイムスタンプ454は現在のタイムスタンプ値へ再設定される。それに応じてオペレーション586で、関連しているカウンタ値460およびDoS攻撃フラグ452は、クリアされてもよい。
【００８９】
タイムスタンプ454はごく稀に、（例えば一秒ごとに）再設定されることが必要となることがあるので、オペレーション586で、DRAM 462内のカウント値は、ごく稀にアクセスされることが必要となる。DRAM 462は、SRAM 450より長いアクセス時間を必要とするので、これは特に重要である。したがって、プロセッサ442がDoS管理のために必要とする時間は、少なくなる。一方で、DoS管理オペレーションは、パケットがオペレーション580で除外された後実行されるので、他の入力パケット440（図５）は、プロセッサ442によって無駄に遅らされることはない。これによって、ファイヤーウォール420は、DoS攻撃中に、他の正当なパケットの処理をほとんど遅らせることなく、ギガビット以上のラインレート(回線速度)でパケットをフィルタリングすることができる。
【００９０】
オペレーション560では、パケットは、CAM 444内には存在するが、関連しているDoS攻撃フラグ452は設定されていないDoSエントリーを有しているかもしれない。オペレーション562で、パケットは、ファイヤーウォール420を通過することを許可される。必要であれば、プロセッサ442は、オペレーション564で、CAM 444内の適合したDoSエントリーに対するジェネレーション情報456をアップデートする。例えば、SRAM 450内で識別（注目）されている現在のジェネレーション456は、現在のジェネレーションへ設定される。必要であればプロセッサ442はオペレーション564で、図６および７に関して前述したように、ジェネレーション期間が終了するか、現在のジェネレーション内のジェネレーションエントリーの最大数が所定の限界数に到達したら、現在のジェネレーションを変更してもよい。
【００９１】
今あるDoSエントリーに対するカウンタ460は、オペレーション566で、インクリメントされ、プロセッサ442は、オペレーション568で、カウント値460および関連しているタイムスタンプ454の古さを確認する。オペレーション570で、タイムスタンプ値がタイムスタンプ期間の値よりも大きくなっている（タイムスタンプが期限切れのタイムスタンプである）場合、カウント460およびタイムスタンプ454はオペレーション572で再設定される。
【００９２】
オペレーション570でタイムスタンプが有効である場合、プロセッサ442はオペレーション574で、カウンタ460がDoS攻撃用のスレッショルドを超えているかどうか判定する。カウンタ460がDoS攻撃用のスレッショルドを超えていない場合、プロセッサ442は、オペレーション540へ戻り、起こりえる（潜在的な）DoS攻撃に対して識別された次のDoS候補パケットを処理する。カウンタ460がDoS攻撃用のスレッショルドを超えている場合、続いてオペレーション576で、DoS攻撃フラグ452が、設定される。
【００９３】
ある実施例では、DoS攻撃フラグ452は、関連しているパケットがファイヤーウォール420を通過した後に設定されることに注意されたし。この追加の１パケットは、通常、私的ネットワーク24（図３）内の対象のマシンのオペレーションに支障をきたすほどのものではない。一方で、DoS管理オペレーションを完了するのを待つ必要なく、パケットにファイヤーウォール420を通過させる機能は、ファイヤーウォールの性能を向上させる。さらに、上述したオペレーションは、ありえるDoS攻撃（DoS候補パケット）と関連しているパケットに対してのみ実行されてもよいので、DoSの管理および監視に必要となる処理の量は、すべての受信したパケットを、ありえるDoS攻撃に関して処理する他のファイヤーウォールアーキテクチャよりも大幅に少なくなる。
【００９４】
RSP内でのDoSの実行 (Implementing DoS in RSP)
すこし戻って図５に関して、上述したファイヤーウォールシステムを実行するためにはどのようなプロセッサ442を用いてもよい。しかし、さらに性能を向上させるために、ある実施例におけるプロセッサ442は、図２A−２Cにおいて前述した再構成可能なセマンティックプロセッサ（RSP）100を用いて実施される。図９は、どのようにしてRSP 100がDoSを防ぐために用いられるのかをより詳しく示している。説明を簡単にするために、図２A−２Cにおいて前述したRSP 100内の処理構成要素の一部は、図９では示されていない。
【００９５】
入力パケット600は、入力バッファ140内で受信される。DXP 180は、潜在的なDoS攻撃（DoS候補パケット）と関連しているかもしれないパケット600を識別する文法を関連しているパーサテーブル170（図２A）内に有している。例えば、パーサ文法は、TCP SYNメッセージ、TCP FINメッセージおよびパケットフラグメントなどを含んでいるあらゆる入力パケット600を識別してもよい。DoS候補パケットが識別されると、DXP 180はSPU 200にDoS識別メッセージ602を送る。このメッセージ602は、SPU 200によって実行されるSEPコード620を、SCT 210から起動する。DoS SEPコード620は、SPU 200に、図３−８と関連して前述した異なるDoSオペレーションを実行させる。
【００９６】
メモリサブシステム215は、以前図５において示したDRAM 462、CAM 444およびSRAM 450を収容している。ある実施例におけるアレイマシンコンテキストデータメモリ（AMCD）230は、ハッシュ機能（ハッシング関数）またはコンテントアドレッサブルメモリ（CAM）444を介してDRAM 462またはSRAM 450内のデータにアクセスするために用いられる。
【００９７】
AMCD 230は、それぞれがCAM 444内のエントリーと関連しているビット605を含んでいるフリーテーブル604を有している。CAM 444内の使用されていないエントリーはすべて、フリーテーブル604内で0ビット605として表され、CAM 444内の有効なDoSエントリーはすべて、フリーテーブル604内で関連している1ビット605として表される。AMCD 320は、フリーテーブル604内の最初の0ビットを識別するSPU 200からのファインド・ファースト・ゼロ（FFZ）命令に対応する。
【００９８】
新しいDoSエントリーをロードするためにCAM 444内の位置を識別する必要があるとき、SPU 200は、フリーテーブル604上でFFZ命令を実行する。FFZ命令は、フリーテーブル604内の最初の0ビットの位置を戻す。その0ビットは、その後、CAM 444内の対応するエントリーに対するポインタとして用いられる。SPU 200は、新しいパケットに関する宛先アドレスおよびゾーンをCAM 444内で識別された宛先位置へとロードする。
【００９９】
図６と関連して上述したように、DoSエントリーは、CAM 444内の現在のジェネレーションに加えられ、同時に他のDoSエントリーは、新しいジェネレーションから取り除かれる。SPU 200は、ジェネレーションテーブル608を用いて、CAM 444内のどのエントリーを新しいジェネレーションから取り除くべきかをすばやく識別する。CAM 444内の各ジェネレーションは、関連しているジェネレーションテーブル608A−Dを有している。CAM 444内の特定のジェネレーションと関連している有効な各DoSエントリーは、関連しているジェネレーションテーブル608内に対応している0ビットのセットを有している。例えば、CAM 444内の第三のエントリーは、ジェネレーション0と関連しているDoSエントリーを含んでいる。したがって、SPU 200は、ジェネレーションテーブル608Aの三番目のビットを0へ設定する。
【０１００】
DoSエントリーが、ジェネレーション0に関して取り除かれる場合、SPU 200は、ジェネレーションテーブル608A上でFFZオペレーションを実施する。ジェネレーションテーブル608A内の第三のビットは、識別され、その後SPU 200によって、CAM 444内の対応する第三のDoSエントリーを無効にするのに用いられる。例えば、SPU 200は、ジェネレーションテーブル608A内の第三のビットを1へ設定し、フリーテーブル604内の第三のビットを0へ設定する。もちろん、これは、テーブル604および608がどのように動作するかについての一例にすぎない。他のテーブル構成も同様に用いることができる。
【０１０１】
上述したように、CAM 444内の有効なエントリーを識別するとともにCAM 444からどのエントリーを取り除くべきかを識別するこれらのDoS管理オペレーションは、SPU 200が関連しているパケットをすでに除去し終わっているか、SPU 200がすでに、関連しているパケットにRSP 100を通過することを許可している場合、実行することができる。
【０１０２】
また、メモリサブシステム215は、すでにポリシーマネージャーによって識別されているゾーンを識別するために、SPU 200によって用いられるテーブル606を有している。例えば、パケットは、DXP 180によって識別されたポート番号を有していてもよい。SPU 200は、このポート番号をテーブル606内のパケットタグ610Aと比較し、パケットを受信しているゾーン610Bを識別してもよい。テーブル606は、DoS攻撃を識別するための各ゾーンと関連しているパケットレート610Cを含んでいてもよい。タイマー612は、SPU 200がSRAM 450内の各DoSエントリーに対するタイムスタンプを生成するために用いられ、さらに、SPU 200が各タイムスタンプに対するタイムスタンプ期間がいつ終了するかを判定するために用いられる。ジェネレーションテーブル614は、現在のジェネレーションを識別する。
【０１０３】
RSP 100は、偽造されたIPアドレスを有しているあらゆるパケットを識別して、廃棄することもできる。例えば、IPアドレスのセットは、マルチキャスト宛先アドレスとして保存される。保存されたマルチキャストアドレスに対応する送信元アドレスを持っている受信されたパケットはいずれも、DXP 180によって検出され、すぐに除去することができる。
【０１０４】
図１０および１１は、RSP 100がどのようにして上述したDoSオペレーションを実行するのかを高いレベルで示している。大まかに図９を見つつ特に図１０および１１に関して、オペレーション650で、DXP 180は、入力パケット600を解析する。パーサテーブル170内の文法は、DXP 180がオペレーション652で、DoS候補パケットを識別するのにも用いられる。同時に、DXP 180は、SPU 200に、入力パケット600をDRAM 462内に格納するように命令するか、一時的にそのパケットを入力バッファ140内に保持してもよい。DXP 180は、オペレーション654で、そのパケットに関する宛先アドレスおよびパケットが受信されたゾーンの識別も行う。
【０１０５】
DoS候補パケットが識別されると、DXP 180はオペレーション656で、SPU 200に、必要とされるDoSオペレーションと関連しているDoS SEPコード620をロードするように信号を送る。例えば、SEPコード620は、識別されたTCP SYNパケットまたは識別されたパケットフラグメントと関連している特定の種類のDoSオペレーションと関連していてもよい。
【０１０６】
このSPU 200は、オペレーション658で、識別された宛先アドレスおよび関連しているゾーン情報をCAM 444内のエントリーと比較する。オペレーション660で、CAM 444内に対応するDoSエントリーが存在している場合、SPU 200はオペレーション662で、該パケットがファイヤーウォールを通過することを許可する。これは単に、SPU 200がDRAM 462内の対応するパケットに対して、当該パケットを出力バッファ150に送る前に、必要とされるその他のあらゆるファイヤーウォールオペレーションを続けるということを意味する。すなわち、（該パケットが）まだDRAM 462内に格納されていない場合、SPU 200は、入力バッファ140内の当該パケットが、さらなる処理のためにDRAM 462内に格納されることを許可してもよい。
【０１０７】
SPU 200は、その後、必要とされるあらゆるDoS管理を実行する。例えば、SPU 200はオペレーション664で、AMCD 320内のテーブル614を読み込み、関連しているDoSオペレーションに対して現在どのジェネレーションが動作中であるのかを判定する。また、SPU 200は、テーブル604および608を読み込み、新しいDoSエントリーをCAM 444内のどこに加え、どのDoSエントリーを新しいジェネレーションから取り除くかを判定する。オペレーション666で、SPU 200は、CAM 444を新しいDoSエントリーでアップデートし、SRAM 450内の対応するメモリ位置の（にある）コンテンツを読み込む。最後に、オペレーション668で、SPU 200はSRAM 450内のタイムスタンプとジェネレーション情報およびDRAM 462内のカウント情報をアップデートする。
【０１０８】
図１１に関して、パケットに関する宛先アドレスおよびゾーンがすでにCAM 444内のDoSエントリーとなっている場合、SPU 200はオペレーション700でSRAM 450内の対応するメモリ位置を読み込む。SPU 200はオペレーション702で、DoS攻撃フラグが設定されているかどうか確認する。DoS攻撃フラグが設定されている場合、該SPUはオペレーション704で、DRAM 462または入力バッファ140からすぐにそのパケットを取り除く。例えば、SPU 200は、パケットが無効であることを示すドロップフラグをDRAM 462内に設定してもよい。
【０１０９】
この無効なパケットは、その後DRAM 462から読み出されることは無く、最終的に他のデータで上書きされる。まだDRAM 462の中に格納されていない場合、該パケットは、入力バッファ140から取り除かれる。DoS攻撃フラグが設定されていない場合、SPU 200はオペレーション706で、さらなる処理のために、すぐに当該パケットを開放する（releasesuru）。例えば、当該パケットは、入力バッファ140からDRAM 462内の特定の位置へすぐに送られてもよい。すでにDRAM 462内に存在する場合、当該パケットは、さらなるファイヤーウォール処理のためにその他のSPU 200へ受け流してもよいし、さらなるファイヤーウォール処理が必要でない場合は出力バッファ150へ送ってもよい。他のやり方としては、SPU 200は、DXP 180によって再解析するために当該パケットをDRAM 462から再循環バッファ160へ送ってもよい。例えば、DXP 180は、当該パケット内のその他のファイヤーウォールオペレーションと関連しているその他のコンテンツを識別するかもしれない。
【０１１０】
オペレーション708で、SPU 200は、SRAM 450内の情報をアップデートするとともに、必要であれば、DRAM 462内の関連しているカウント460をインクリメントする。SPU 200はその後オペレーション710で、テーブル604、606、608および614内のあらゆる必要な情報をアップデートする。SPU 200はその後、DXP 180から新しいSEP命令602が来るのを待つ。
統合型ファイヤーウォール/ルーティング管理
（統合型ポリシー管理／Unified Policy Management）
図１２に関して、ファイヤーウォール804は、第一のネットワーク800と第二のネットワークの間で動作する。ファイヤーウォール804は、様々なネットワークインターフェイスオペレーションを提供する。例えば、上述したようなDoS攻撃の識別およびフィルタリングに加えて、該ファイヤーウォールは、異なるネットワークフォーマット間（例えば、IPバージョン4（IPv4）とIPバージョン6（IPv6）の間）でパケットの変換を実行したり、公的IPアドレスと私的IPアドレスの間で変換（ネットワークアドレス変換（NAT））を実行する必要があるかもしれない。このファイヤーウォール804は、その他のウィルス検出オペレーションおよびセキュリティオペレーションも実行するように要求されるかもしれない。
【０１１１】
他の分離したネットワークコンピュータデバイス806（例えばルーターまたはスイッチ）は、ファイヤーウォール804を通過したパケットをルーティングまたはスイッチングすることを要求する。例えば、ルーター/スイッチ806から受信したパケットは、その後さらに、該パケットをネットワーク812内のその他のネットワーク処理デバイスへ送る他のルーターまたはスイッチ808へ送られてもよい。同様に、ルーター/スイッチ806は、パケットをサーバー810や個人用コンピュータ（PC）814などのエンドポイントへルーティングしてもよい。
【０１１２】
この従来のアーキテクチャに関する問題は、ファイヤーウォール804およびルーティングデバイス806が独立して(autonomously)動作することである。このため、各デバイス804および806に対して別々の処理と別々のメモリデバイスが必要となる。これは、周辺機器のハードウェアコストを増やすだけではなく、拡張性も制限する上、これらの周辺機器がパケットを要求されるラインレートで処理するのを妨げるかもしれない。
【０１１３】
例えば、ファイヤーウォール804は、ありえる（possible）TCP SYNパケットに関するすべての入力パケットを監視するように要求されるかもしれない。上述したように、これは、ファイヤーウォール804に、各入力パケットに関して宛先アドレスを識別することを要求するかもしれない。DoS攻撃の一部ではないTCP SYNパケットは、その後ルーター806へ送られる。ルーター806は該パケットを適切な宛先へルーティングするために、その後再び、ファイヤーウォール804から受け取った複数のパケット805の宛先アドレスを見つけなくてはならない。したがって、各ネットワーク処理デバイス804および806は、同一の複数のパケットに対していくつかの同一のパケット処理オペレーションを実行するように要求される。その結果、各デバイス804および806は、別々のパケット状態やパケットバッファなどを維持しなければならない。これは、上述したように、ネットワーク処理デバイスの全体的な拡張性および処理能力を制限する。
【０１１４】
図１３に示すように、本発明の別の態様は、ネットワーク処理デバイス820内で統合型ポリシー管理（Unified Policy Manegement: UPM）を用いて、より効率的にパケットを処理する。ある例では、UPMは、従来のファイヤーウォールおよび周辺機器のオペレーションをパケット送信オペレーションと統合する。このパケット送信オペレーションは、現在までのところ、別々のプロセッサを独立して動作させることで実行されている。ある実施例では、様々な異なるUPMオペレーションを提供するために、プロセッサ822によって独自のアクセス制御リスト（ACL）テーブルが用いられている。
【０１１５】
プロセッサ822は、入力パケットストリーム802を受け取り、その後個々のパケット821と関連している述語セット(predicate set) 854を識別する。この述語セット854は、以下で図１４においてより詳しく描かれているが、一般的には、ファイヤーウォールオペレーションや送信オペレーションに関連していれば、受信されたパケット内のどのような情報でもよい。例えば、述語セット854は、それらに限定されるわけではないが、IPアドレス、TCPポート番号やIPプロトコル識別子などを含んでいてもよい。本発明の別の独自の態様における述語セット854は、その他のアプリケーション層の情報（例えば、付属機器の識別子やその他のテキスト文書など）と同様により高度な開放型システム間相互接続（Open System Interconnect: OSI）層の情報（例えば、セッション初期化プロトコル（SIP）情報、Unuversal Resource Locator (URL)情報、簡易メール転送プロトコル(SMTP)情報、ハイパーテキスト・トランスファー・プロトコル(HTTP)情報、ファイル転送プロトコル（FTP）情報）などを含んでいてもよい。
【０１１６】
アクセス制御リスト（ACL）テーブル840は、異なるUPMオペレーションまたはその他のファイヤーウォールオペレーションと関連していてもよい述語セット850の異なる組み合わせによって構成される。例えば、ファイヤーウォールポリシーACL 848の第一のセットは、入力パケット821がネットワーク処理デバイス820を通過することを許可されているかどうか判定する異なるサービス妨害（DoS）オペレーションと関連していてもよい。ファイヤーウォールポリシーACL 848は、ネットワーク処理デバイス820によって実行される必要があるかもしれないその他のパケットの変換、認証およびフィルタリングオペレーション（例えば、ネットワークアドレス変換（NAT）や、ウィルスの検出およびフィルタリングや、IPのバージョン間の変換など）と関連していてもよい。
【０１１７】
別の特に独特の態様では、ACLテーブル840は、異なる宛先アドレス844を異なる宛先ポート番号846と関連付ける転送情報ベース842(Forward Information Base（FIB））を有していてもよい。FIB 842は、ACLテーブル840の別々のセクション内に属しているか、以下でより詳しく説明するファイヤーウォールポリシーACL 848の一部と統合されるか、もしくはその両方であってもよい。
【０１１８】
テーブル840内のACLエントリーは、プロセッサ822に、関連しているパケットがネットワーク処理デバイス820を通過することを許可もしくは拒否するように命令するアクション852も含んでいる。他のACLアクション852は、該関連しているパケットを特定の宛先に向けたり、さらなる処理のためにプロセッサ822へ向けたりしてもよい。他の状況では、ファイヤーウォールポリシーアクション852は、プロセッサ822に、当該関連しているパケット821を特定の出力ポート846へルーティングするように命令してもよい。
【０１１９】
テーブル840内のファイヤーウォールポリシーACL 848とFIB 842の組み合わせは、通常は同一のネットワーク処理デバイス820内で実行されることはない様々な異なるUMPオペレーションを提供する。例えば、UPMオペレーションの小さなサブセットには、DoSまたは侵入検出と関連して上述したように、パケット838を取り除くことが含まれる。ネットワーク処理デバイス820は、パケット824が宛先アドレスへ送られる前にパケット824を修正したり、タグ付けしたりすることもできる。例えば、パケット824は、特定のチャネル826へとカプセル化されたり、特定のQoSレベルでタグ付けされたりしてもよい。
【０１２０】
他のUPMアクションでは、ACL 840内のエントリーは、プロセッサ822に、通過または除去されたいずれかのパケット830の統計値をサーバー828に記録するように命令してもよい。他のUPMオペレーションでは簡潔に上述したように、ACLテーブル840内のエントリーは、プロセッサ822に、異なるファイヤーウォールポリシーメトリックスに従ってパケット834を異なるサブネットワーク832またはデバイス836に送らせてもよい。例えば、特別なHTTPセッションを含むパケット834だけをサーバー836へとルーティングし、残りのパケットはすべて、サブネット832へとルーティングしてもよい。
【０１２１】
以上の図１３と関連した説明および以下のさらなる説明では、ルーティングおよびスイッチングは、置き換え可能なように用いられる。当業者ならば、UPMシステム820は、以下でより詳しく説明されるように、その他のファイヤーウォールポリシーメトリックスと組み合わされている統合型レイヤー2スイッチングおよび／またはレイヤー3ルーティングオペレーションを実施することができるということを理解するであろう。
【０１２２】
アクセス制御リスト (Access Control List)
図１４は、図１３と関連して前述したACLテーブル840内のエントリーの例を示している。どのような述語とアクションの組み合わせもACLテーブル840内で併用することができ、図１４は例をいくつか示しているに過ぎない。ある実施例では、プロセッサ822(図１３)は、一つまたは複数のACL述語を連結させ、その連結させた述語セット854をACLテーブル840を有するCAMへのアドレスエントリーとして用いる。ACLテーブル840内の第一のエントリーに対するアクションに関連しているアクションで、プロセッサ822によって提示された述語セット854と適合する（match）アクションが、CAMによって出力される。
【０１２３】
ACLテーブル840内の第一のエントリー860は、宛先IPアドレス述語860A、送信元IPアドレス述語860B、TCPポート番号述語860C、確立したTCPセッション述語860Dおよび許可アクション860Eを含んでいる。この例では、ACL860はACLテーブル840内の第一のエントリーである。もちろん、どのようなシークエンスおよび組み合わせのACLエントリーをACLテーブル840へロードしてもよい。
【０１２４】
関連しているアクション860Eは、プロセッサ822によって供給された述語セット854が述語860A−860Dと適合したらACLテーブル840から出力される。この例では、ACLテーブル840は、入力パケット821（図１３）に関する宛先IPアドレスが述語860A内の値と適合(match)するとともに入力パケット821（図１３）に関する送信元IPアドレスが述語860B内の値と適合(match)したら、許可アクション860Eを出力する。述語860Aおよび860B内で識別されたIPアドレスは、完全な送信元IPアドレスおよび宛先IPアドレスに関連しているサブネットアドレスだけを含んでいてもよい。IPアドレス内のその他のビットは、サブネットマスクが現在ルーティングテーブル内で用いられているようなやり方と同様に、マスクされ「無視」値として出力されてもよい。
【０１２５】
ACLエントリー860を照合するために、パケット821（図１３）は、述語860Cに対応する関連TCPポート番号（associated TCP port number）も有していなければならない。どの送信元限定子(source qualifier)および宛先限定子(destination qualifier)もTCPポート番号述語860Cとは関連していないことに注意されたし。これは、パケット821内の同一の送信元TCPポート番号Cと同一の宛先TCPポート番号Cのどちらかが述語860Cと適合(match)するということを意味する。最後に、ACLエントリー860を照合するためには、入力パケット821は、確立されたTCP述語860Bによって要求されるように、すでに確立されたTCPセッションの一部でなければならない。述語860Dは単に、入力パケット821がすでに確立されたTCPセッションの一部であると判定された際に、プロセッサ822によって設定される述語セット854内のフラグであってもよい。そのため、ACLエントリー860は、新しいTCPセッションを確立しようと試みているTCP SYNメッセージを含んでいるパケットとは適合(mutch)しないであろう。
【０１２６】
次の二つのACLエントリー862および864は、サービス妨害（DoS）攻撃と関連しているファイヤーウォールポリシーと関連している。ACLエントリー862を照合するために、入力パケット821内のアドレスは、それぞれ宛先IPアドレス述語862Aおよび送信元IPアドレス述語862Bと適合しなければならない。さらに、入力パケット821はまた、タイプTCP述語862Cに要求されるようにTCPパケットでなければならない。ACL862は、TCPパケットに関する特定の宛先IPアドレスおよび送信元IPアドレスを図４と関連して前述したような特定のゾーンに対応するTCP DoSアクション862Dと関連付ける。したがって、アクション862Dは、プロセッサ822に、ゾーン１に対応した特定のパケットレート用のスレッショルドを用いて、図４−１１と関連して前述したようなDoSオペレーションを実施するように命令してもよい。
【０１２７】
ACLエントリー864は、TCP DoSアクション864Dと関連しており、宛先IPアドレス述語862Aと同一の宛先IPアドレス述語864Aを含んでいる。しかし、述語864Bは、送信元IPアドレス述語862Bとは異なる送信元IPアドレスCを含んでいる。これは、異なるネットワークインターフェイスから受信したパケットに対応する。したがって、ACLアクション864Dは、異なる対応するゾーン3に対するTCP DoSオペレーションのためのものである。そのため、アクション864Dを受信したプロセッサ822は、DoS攻撃を判定するためにことなるパケットレート用のスレッショルドを用いてもよい。
【０１２８】
ACLエントリー866は、インターネットプロトコルバージョン4(IPv4)からインターネットプロトコルバージョン6(IPv6)への変換に関連している。例えば、入力パケット821は、IPv6を用いて動作するネットワーク上で受信されてもよい。一方で、ネットワーク処理デバイス820のもう一方の側で動作しているネットワークはIPv4を用いてもよい。したがって、ネットワーク処理デバイス820は、すべてのIPv6パケットをIPv4パケットに変換する必要があるかもしれない。
【０１２９】
入力パケット821のIPヘッダー内のIPタイプフィールドは、該パケットをIPv4またはIPv6と認識する。プロセッサ822は、IPタイプフィールド内の宛先IPアドレスおよびIPバージョン識別子をパケット821から抽出し、これらの情報の形式をACLテーブル840に適用される述語セット854の形式に合わせる。述語セット854がACLエントリー866内の述語866Aおよび866Bとマッチした場合、プロセッサ822は、XLATEIPv6アクション866Cを受け取る。XLATEIPv6アクション866Cは、プロセッサ822に、入力IPv6パケット821を特定のルール5を用いているIPv4に変換するように命令する。例えば、IPv6−ルール5は、プロセッサ822に、IPv6パケットをIPv4ヘッダーへとカプセル化したり、IPv6アドレスの一部をIPv4ヘッダー内に含まれる異なる会社コードとホストコードに分割したりしてもよい。このIPv6とIPv4間の変換は、図２４でさらに詳しく示される。
【０１３０】
ACLエントリー868および870は、ルーティングオペレーションまたはスイッチングオペレーションに基づいたポリシーと関連付けされている。ACLエントリー868は、ファイヤーウォールポリシーメトリックス868Bと組み合わされる転送情報ベース（FIB）ルーティング基準868Aおよび868Cを含んでいる。同様に、ACLエントリー870は、ファイヤーウォールポリシーメトリックス870Bと組み合わされるFIBルーティング基準870Aおよび870Cを含んでいる。これらのACLエントリー868および870は、ネットワーク処理デバイス820が、IP宛先アドレスおよびファイヤーウォールポリシーメトリックスの両方に基づいてパケットを異なるポートにルーティングまたはスイッチングすることを可能にする。
【０１３１】
例えば、ACLエントリー868は、送信アクション868Cを含んでいてもよい。この送信アクション868Cは、プロセッサ822に、出力パケット821を、宛先IPアドレスGを有しているTCPパケットタイプ868Bに関するポート3へ出力するように命令する。一方、ACLエントリー870は、プロセッサ822に、同一の宛先IPアドレスを持つUDPパケットタイプ870Bを異なる出力ポート4へ送るように命令する。これらのポリシーに基づいたルーティング用ACLは、例えば、TCPバス脅威をさらなるDoS処理のために特定の処理デバイスへルーティングするのに用いてもよい。一方で、UDPパケットは述語870Aに対応する宛先アドレスへとルーティングされる。もちろんACLテーブル840内のエントリーは、統合型ポリシー管理を実施するために用いることができる様々なACLの内の一例に過ぎない。
【０１３２】
図１５は、図１３のネットワーク処理デバイス820がどのようにしてUPMを実施するのかをより詳しく説明している。プロセッサ822は、オペレーション880で、入力パケット821を受信し、オペレーション882で入力パケットから述語セット854を生成する。例えば、プロセッサ822は、所定の順番で所定のIPパケットフィールドのセットの形式を述語の形式に合わせる。IPパケットフィールドの一つが入力パケット821内に存在しない場合、該リスト内の次のパケットフィールドは抽出され、その後それ以前に抽出され、フォーマット済みの述語と組み合わされる。
【０１３３】
プロセッサ822は、オペレーション884で、述語セット854をACLテーブル840へ適用し、オペレーション886で、ACLテーブル840内のマッチした述語エントリーから送り返されたアクションを受け取り、それを実行する。簡単のため、図１５では、三つのアクションカテゴリーだけがACLテーブル840から返ってくるものとして示されている。しかし、何個の異なるアクションをACLエントリーに構成してもよい。オペレーション892で、除外（除去）アクション852がACLテーブル840から送り返された場合、プロセッサ822は、オペレーション900で当該パケットを廃棄する。プロセッサ822はオペレーション902で、次の入力パケット821に対するオペレーションを開始するまでは、除外（除去）されたパケットに関するどのような統計情報を記録してもよい。
【０１３４】
パス（通過）アクション852がオペレーション890でACLテーブルから送りかえされた場合、プロセッサ822はオペレーション898で、FIB 842（図１３）に従って該パケットをルーティングまたはスイッチングしてもよい。パスアクション890は、転送ポート番号（forwarding port number）を含んでいても、プロセッサ822に、転送ポート情報を得るためにACLテーブル840に再アクセスするように命令してもよい。
【０１３５】
誘導（steer）ACLアクション852がオペレーション888でACLテーブルから送り返される場合、プロセッサ822は、オペレーション894で、このACLアクションと関連しているファイヤーウォールオペレーションを実行する。該当する場合、プロセッサ822は、オペレーション894で、関連しているファイヤーウォールポリシーメトリックスに従って当該パケットを送信してもよい。例えば、図１４と関連して前述したように、誘導（steer）ACLアクション852は、プロセッサ822に、TCPパケットを特定のポートを介して、DoS攻撃を調べるネットワーク処理デバイスに向けて送信するように命令してもよい。
【０１３６】
他のやり方では、誘導（steer）ACLアクション852は、オペレーション888で、プロセッサ822に、当該パケットに対してさらなるファイヤーウォール処理を実施するように命令してもよい。例えば、誘導（steer）ACLアクション852は、プロセッサ822に、ネットワークアドレス変換（NAT）を実施するように命令してもよい。それに応じて、プロセッサ822は、必要であれば、オペレーション882で、当該パケット821から別の述語セット854を抽出し、オペレーション884で、新しい述語セット854をACLテーブル840に再適用してもよい。ACLテーブル840から送り返された次のACLアクション852に従って、プロセッサ882は、NATオペレーションが終わりしだい、当該パケットの除去、通過または誘導を行ってもよい。
【０１３７】
上位OSIレイヤーに従ったパケット転送 (Forwarding Packets According to Upper Layers)
図１６は、ルーティングオペレーションおよびスイッチングオペレーションをファイヤーウォールポリシー管理と統合する別のやり方の例を示している。ACLテーブル910は、図１３のACLテーブル840と似ている。しかし、ACLテーブル910は、転送情報ベース（FIB）を、それぞれ、レイヤー4についてはポリシーメトリックス910Dと、レイヤー7についてはポリシーメトリックス910Eと組み合わせている。
【０１３８】
特に注意すべき重要な点は、単にテーブル910に新しい述語を加えるだけで、どのような組み合わせのポリシー管理メトリックスでも従来のルーティングおよびスイッチング転送テーブルに加えることができるという点である。その他の特に注意すべき重要な点は、ルーティングおよびスイッチング判定は、従来、開放型システム間相互接続（OSI）インターネットモデルのレイヤー2およびレイヤー3に限定されているという点である。例えば、スイッチまたはルーターは、通常、パケットポート番号およびIPアドレスに基づいてパケット転送判定を行う。
【０１３９】
図１３に示されているネットワーク処理デバイスアーキテクチャと組み合わされたACLテーブル910は、転送判定を上位のOSI層内に含まれている情報に基づいて行われるようにすることができる。例えば、ACLテーブル910内のパケット転送判定の一部は、データリンク層（レイヤー2）内の情報、ネットワーク層(レイヤー3)内の情報、転送層（レイヤー4）内の情報およびアプリケーション層(レイヤー7)内の情報に基づいている。もちろん、転送判定は、他のどのOSI層に基づいていてもよい。
【０１４０】
さらに詳しく説明するために、ACLテーブル910は、IP宛先アドレス述語910Aを含んでいる。このIPアドレス述語910Aは、アクション910Cで特定される異なる出力ポートにそれぞれのパケットを送るのに用いられる。述語910B内の従来のサブセットマスクは、宛先IPアドレス述語910A内でビットをマスキングするために用いられる。例えば、第一のACLエントリー912内では、アドレスの最初の三つのサブネットフィールド「10.0.0」だけが、入力パケット821に関する宛先IPアドレスと比較される。ACLエントリー916内では、最初のサブネットフィールド「10」だけが、入力パケット821に関する宛先IPアドレスと比較される。
【０１４１】
この例では、転送判定は、レイヤー4についての述語910D、またはレイヤー7についての述語910Eに加えて、宛先IPアドレス910Aに基づいて行われる。例えば、宛先IPアドレス「10.0.0.x」（xは、「無視」を表す）を持った入力TCPパケットは、出力ポート15へルーティングされる。その他の例では、宛先IPアドレス「10.0.0.x」を持った入力UDPパケットは、出力ポート5へルーティングされる。
【０１４２】
入力パケットに対するTCPおよびUDP識別子は、最初のパケット処理中に、プロセッサ822が宛先IPアドレスを識別するのと同時に、プロセッサ822によって識別される。宛先IPアドレスおよびTCPまたはUDP識別子は、その後、パケットを送るための適切な出力ポートを判定するためにACLテーブル910内のエントリーと比較される。これは、パケットがレイヤー4メトリックスに基づいてどのように転送されるのかについての一例を示している。
【０１４３】
ACLエントリー914は、従来の転送テーブルエントリーであって、入力パケットが宛先IPアドレス内にサブネットフィールド「12.0.x.x」を含んでいる場合に特定の出力ポート2にパケットを送る。
【０１４４】
ACLエントリー916は、ルーティング判定を宛先IPアドレスおよびレイヤー7セッションインターネットプロトコル（SIP）メトリックスに基づいて行う。例えば、IP宛先アドレス「10.x.x.x」を持った非SIPパケットは、ネットワーク処理デバイス820内の出力ポート7へルーティングされる。一方、IP宛先アドレス「10.x.x.x」を持ったSIPパケットは、出力ポート4へルーティングされる。これは、特定のネットワーク処理デバイス（例えば、SIPプロキシサーバーなど）へルーティングされる必要があるボイス・オーバー・アイピー（VoIP）SIP信号を含んでいるパケットに対して有効である。その他の非SIP IPトラフィックは、宛先アドレスに従って従来どおりのやり方でルーティングされる。ACLエントリー916内のSIP述語910Eと比較されるのに用いられるSIP識別子は、パケットがSIPメッセージを含んでいる場合にプロセッサ822によって生成されるフラグである。
【０１４５】
ACLエントリー918は、ルーティングがレイヤー7メトリックスに基づいて行われる別の例を示している。この種のルーティングに関するアプリケーションは、ウェブサーバーにアクセスするために用いられてもよく、その際に、その後に続くURLパケットを効率よく異なる位置へとルーティングするのに用いられてもよい。図１６と図１７の両方に関して、企業は、ウェブサーバー934を運営してもよい。このウェブサーバー934は、インターネット932を介して異なるユーザー930によってアクセスされる。このウェブサーバー934は、ユーザー930に、異なるビジネスサービスに対する異なる複数のリンクを提供するウェブページ936を表示してもよい。例えば、第一URLリンク938は、ユーザー930を顧客サポートに接続させ（direct）、第二のリンク940は、ユーザー930を自動車販売に接続させ、第三のリンク942は、ユーザー930を家具販売に接続させてもよい。
【０１４６】
これらの異なるデータ938、940および942のそれぞれをサポートするリンクウェブサーバーは、異なるインターネット上の位置に配置されてもよいし、それに限定されるわけではないが、場合によっては異なる地理的位置に配置されてもよい。例えば、顧客サポートサーバー944は、アトランタの本社に配置し、自動車販売サーバー946は、デトロイトに配置し、家具販売サーバー949は、フランスのパリに配置してもよい。ACLテーブル910（図１６）は、ユーザー930をより効率的にURLリンク938、940および942
に接続させるために用いられる。
【０１４７】
例えば、ユーザーが顧客サポートリンク938をクリックすると、ウェブサーバー934は、URL「Http://DEST1」を含んでいる宛先IPアドレス「10.10.x.x」を持ったパケットを生成する。図１７のルーター935は、該IP宛先アドレスとURLの両方をACLテーブル910内のエントリーと比較する。そのようにして、ルーター935は、該パケットを出力ポート1を介して顧客サポートサーバー944へとルーティングする。また、ルーター935は、同一の宛先IPアドレス「10.10.x.x」を持った複数のパケットを、URL「fttp:DEST2」を含んでいるものを除いて受信する。ルーター935は、それに応じて、これらのパケットをポート2を介して自動車サーバー946へとルーティングする。宛先IPアドレス「10.10.x.x」および関連しているURL/DEST3を持ったパケットは、ポート3を介して家具サーバー948へとルーティングされる。これは、要求されるIP宛先へのより直接的なルーティングを提供する。
【０１４８】
RSPを用いた統合型ポリシー管理 (Unified Pollicy Management Using RSP)
上述したように、統合型ポリシー管理（UPM）は、図１３に示したように、従来のプロセッサおよびコンピュータシステムアーキテクチャ内で実施することができる。しかし、性能をさらに向上させるために、UPMは、前に図２A―２Cに示したようなRSP 100と同様の再構成可能なセマンティックプロセッサ（RSP）内で実施されてもよい。
【０１４９】
図１８および１９と関連して、オペレーション1000で、RSP 100内のDXP 180は、入力バッファ140内のパケットを解析し、かつUPMオペレーションを実施するのに必要とされるすべてのACL述語954を識別する文法を実行する。DXP180は、オペレーション1002で、SPU 200に命令を送り、SEPコード212を起動する。SEPコード212は、SPU 200にACL述語954のフォーマットを述語セット956のフォーマットへと変換させる。その後、この述語セット956はACLテーブル979に入れられる。この例では、ACLテーブル979の一部または全体は、一つまたは複数のCAM 220内に格納される。
【０１５０】
SPU 200によって、好きな数のACL述語954を、DXP 180内で実行される文法およびDXP 180によって起動される関連しているSEPコード212に従って、ACL述語956に組み合わせてもよい。例えば、DXP 180内の文法は、パケット宛先アドレスと、パケット送信元アドレスに対するACL述語954を識別してもよい。別の述語954は、IPv6からIPv4への変換またはTCP DoSオペレーションに対して識別されてもよい。DXPがIPv6パケットであると識別した場合、DXP180は、SPU 200に、宛先IPアドレス述語とIPv6パケットタイプ述語を組み合わせる作業を行わせるSEPコード212を起動してもよい。同様に、TCPパケットが識別された場合、DXP 180は、SPU 200に宛先IPアドレス述語954と述語セット956内のTCPパケットタイプ述語954を組み合わせる作業を行わせるSEPコード212を起動してもよい。
【０１５１】
オペレーション1004で、SPU 200は、ACL述語セット956をCAM 220内のACLテーブル979に入れる。SPU 200は、オペレーション1006で、CAM 220から送り返されたACLアクション952に従ってパケットを処理する。オペレーション1010で、ACLアクション252は、SPU 200に現在DRAM 280(図２A) 内に格納されているパケットを廃棄させる単なる除外命令でもよい。オペレーション1012で、ACLアクション952は、SPU 200にDRAM280内の（に格納されている）パケットを出力バッファ150へ送らせる、命令でもよい。
【０１５２】
別の状況では、ACLアクション952は、SPU 200にさらに、特定のファイヤーウォールオペレーションと関連しているかもしれないSEPコード212を起動させてもよい。例えば、ACLエントリー980のセットは、異なるファイヤーウォールオペレーションと関連していてもよい。ACLエントリー980Aは、以下でより詳しく説明される侵入検知システム（DIS）ライセンスオペレーションと関連付けられてもよい。別のACLエントリー980Bは、「ネットワーク処理デバイス内の侵入検知のための方法および装置」という発明の名称の同時継続出願に記述されており、それに記載されたIDSオペレーションと関連付けられてもよい。この同時継続出願は、2005年5月9日に出願された「侵入検知システム」という発明の名称のアメリカ特許出願No.11/125,956であり、これを引用することにより、その内容が本出願に組み入れられているものとする。
【０１５３】
その他のACLエントリー980C〜Fは、その他のファイヤーウォールオペレーションと関連付けられてもよい。その他のファイヤーウォールオペレーションとは、すでに上述したか、以下でより詳しく説明されるような、ネットワークアドレス変換（NAT）、IPv4−IPv6変換、TCPセッションに関するサービス妨害（DoS）およびパケットフラグメントに関するDoSなどである。
【０１５４】
例えば、SPU 200は、DoS TCPパケットと対応するACLエントリー880Eと適合(match)するACL述語セット956を、CAM 220に入れてもよい。ACLエントリー980Eに含まれるアクションは、セマンティックコードテーブル210をポイントするポインタ982であってもよい。SPU 200は、図１９のオペレーション1008で、ポインタ位置982にあるSEPコードを起動し、それを実行してもよい。この例では、位置982にあるSEPコード212は、SPU 200に図４〜１１と関連して前述したようなTCP DoSオペレーションの一部または全部を実施させる。
【０１５５】
ACLエントリー980E内のアクションによって起動されたTCP DoSオペレーションが完了した後、SEPコード212は、SPU 200にさまざまな他のファイヤーウォールオペレーションのうちのどれを実行させてもよい。例えば、パス1014によって表されるように、SPU 200には、DXP 180によって識別されたACL述語954から別の述語セット956を作り上げるように命令してもよい。新しい述語セット956は、他のファイヤーウォールオペレーションを実施するために、その後ACLテーブル979に再び入れられてもよい。SEPコード212は、図１９のパス1016によって表されるようにSPU 200にパケットを取り除くように命令するか、パス1018によって表されるようにパケットを出力ポートへ送るように命令してよい。
【０１５６】
図１３−１７と関連して前述したように、RSP 100は、統合型ポリシー管理も実施することができる。この統合型ポリシー管理とは、ルーティングオペレーションとスイッチングオペレーションの両方を他のファイヤーウォールポリシー管理オペレーションと統合したものである。従って、CAM 220は、宛先IPアドレスおよび関連している宛先ポート番号を有しているエントリーを含んでいる転送情報ベース984を含んでいてもよい。図１６と関連して上述したように、FIBテーブル984は、従来のFIBエントリー987およびその他のエントリー986を含んでいる。これら従来のFIBエントリー987およびその他のエントリー986は、宛先アドレスとその他のファイヤーウォールポリシーメトリックス988の両方に従ってパケットをルーティングする。
【０１５７】
RSP 100は、ファイヤーウォール機能や、従来のルーターまたはスイッチ機能や、それら両方の組み合わせたものの機能の間で簡単に機能切り替えを行い動作することができる。例えば、セマンティックコードテーブル210内のパス990（図１８）は、RSP 100をDoS TCPオペレーションからルーティングオペレーションへ切り替えることを表している。SPU 200によってCAM 220 に送られる第一の述語セット956は、DoS TCPエントリー980Eと適合（match）するかもしれない。DoS TCPオペレーションと関連しているSEPコード982の実行が完了したら、SPU 200に、別の述語セット956をCAM 220に送るように命令してもよい。新しい述語セット956は、FIB 984内のエントリー986または987と適合するかもしれない。FIB 984内のエントリーは、SPU 200に従来のルーティングオペレーションまたはUPMルーティングオペレーションを実施するSCT 210内のSEPコード992を起動するように命令してもよい。
【０１５８】
他のやり方では、CAM 220に入れられた最初の述語セット956は、最初はDoS TCPエントリー980Eと適合する代わりに、FIBエントリー986と適合するかもしれない。エントリー986内に含まれる結果として生じるアクションは、SPU 200に、関連パケットを出力ポートを介して、TCP DoSオペレーションを提供する別のデバイスに送るように命令するかもしれない。
ネットワークアドレス変換（NAT）/ポートアドレス変換（PAT）
図２０に関して、RSP 100は、NAT/PATオペレーション用にプログラムすることもできる。NAT/PATオペレーションとは、ファイヤーウォール1062を通過中のパケットのIPアドレスか、ポート番号か、またはその両方を、公的ネットワーク12上でパケットを運ぶ（transport）のに用いられる公的IPアドレスと、私的ネットワーク24上でパケットを運ぶのに用いられる私的IPアドレスの間で変換するオペレーションのことである。
【０１５９】
通常、私的ネットワーク24内で動作している異なるネットワーク処理デバイスと関連付けられている固有の私的IPアドレスは複数ある。一方、一つまたは少数の公的IPアドレスは、複数の私的IPアドレスを表すのに用いられる。この公的アドレスから私的アドレスへの変換は、私的ネットワーク24内の内部マシンが識別されることを防ぎ（protect the identity）、私的ネットワーク24内の複数の私的アドレスへマッピングされることを要求される公的アドレスの数を減らす。
【０１６０】
別の実施例では、一つまたは複数の私的IPアドレスが、関連付けられている固有の公的IPアドレスを持つ。これは、必ずしも公的IPアドレスの数を減少させないが、ファイヤーウォール1062が、対応する私的IPアドレスを公的ネットワーク12から隠すことを可能にする。この一対一マッピングは、ファイヤーウォール1062が、複数の公的IPアドレスを私的ネットワーク24内の異なるネットワークデバイスへと再構成することを可能にする。
【０１６１】
RSP 100は、入力パケット1061の公的IPアドレス1058を私的IPアドレス1074へ変換する。私的IPアドレス1074は、その後、内部パケット1076を私的ネットワーク24内の関連付けされているネットワーク処理デバイス1078へとルーティングするのに用いられる。RSP 100はまた、私的ネットワーク24内のローカルデバイス1078から、私的IPアドレス1070を含んでいるパケット1072を受け取る。パケット1072が私的ネットワーク12内のエンドポイント1056に向けられる場合、RSP 100は、私的IPアドレス1070を公的IPアドレス1052へと変換する。この公的IPアドレス1052は、パケット1050を、公的ネットワーク12を介してエンドポイント1056へとルーティングするのに用いられる。
【０１６２】
より詳しく説明するために、私的ネットワーク24内で動作中のデバイス1078は、最初に、ファイヤーウォール1062を介してパケット1072を公的ネットワーク12内の宛先へと送ってもよい。RSP 100は、パケット1072を受け取り、私的送信元IPアドレス1070をファイヤーウォール1062と関連している公的IPアドレス1052へと変換する。また、RSP 100によって出力パケット1050に特定のポート番号1054を割り当ててもよい。RSP 100は、その後、私的IPアドレスエントリー1068および対応するポート番号エントリー1066を加えることで、検索テーブル1064をアップデートする。
【０１６３】
出力パケット1050を受信したデバイス1056は、パケット1061をローカルデバイス1078へ送り返してもよい。デバイス1056は、パケット1050内の公的IP送信元アドレス1052およびポート番号1054を、ローカルデバイス1078へと送り返されるパケット1061の宛先アドレス1058およびポート番号1060として用いる。RSP 100は、パケット1061内の宛先アドレス1058およびポート番号1060を、検索テーブル1064内のポート番号エントリー1066へとマッピングする。RSP 100は、適合ポート番号エントリー1060と対応する検索テーブル1079内の私的IPアドレスエントリー1070を識別する。
【０１６４】
RSP 100は、パケット1061内の公的宛先IPアドレス1058を、検索テーブルから識別された私的IPアドレス1070に置き換える。私的アドレスと公的アドレスの間での変換中に、RSP 100は、パケットを分解し（de-assemble）、チェックサム値を生成し、その後パケットを再構成してもよい。
【０１６５】
図２１―２３は、どのようにしてRSP 100が上述したNAT/PAT変換を実施するのかについての一例をより詳しく示している。DXP 180(図２１)は、オペレーション1100(図２２)で、私的ネットワーク24から受信した入力パケットを解析し、私的IP送信元アドレス1070を識別する。DXP 180は、オペレーション1102で、SPU 200にSCT 210からマイクロ命令をロードするように信号を送る。このマイクロ命令は、私的IP送信元アドレス1070を公的IP送信元アドレスへと変換することに関する。
【０１６６】
SPU 200は、オペレーション1104で、パケットに対して公的IPアドレスおよびポート番号を生成する。公的IPアドレスは通常、ファイヤーウォール1062（図２０）に割り当てられたIPアドレスである。オペレーション1106で、SPU 200は、パケットの1072のポート番号および対応する私的IPアドレスを検索テーブル1079へとロードする。図２１は、CAM 220およびSRAM 221を用いている検索テーブル1079がどのように実施されるのかについての一例を示している。SPU 200は、出力パケット1050と関連付けされているポート番号を、AMCD 230を介してCAM位置220Aへと格納し、対応する私的IPアドレス1070をエントリー221AとしてSRAM 221に格納する。
【０１６７】
オペレーション1108で、SPU 200は、関連ポート番号1054（図２０）を含んでいるパケット1072の私的IP送信元アドレス1070を公的送信元IPアドレス1052に置き換える。SPU 200はまた、オペレーション1110で、この出力パケット1050に対する新しいチェックサムを生成してもよい。最終的に、SPU 200は、オペレーション1112で、公的IPアドレス1052およびポート番号1054を持ったパケット1050をDRAM 280から出力ポート152へと送る。
【０１６８】
図２３は、RSP 100は、入力パケットの公的宛先IPアドレスを私的IPアドレスへと変換するやり方を説明している。オペレーション1120で、DXP 180は、公的ネットワーク12から受け取った入力パケット1061を解析し、関連している5タプル（tuple）アドレスを識別する。DXP 180は、オペレーション1122で、SPU 200にSCT 210からマイクロ命令212（図２A）をロードするように信号を送る。このマイクロ命令は、公的IP宛先アドレス1058およびポート番号1060を対応する私的IP宛先アドレス1074へと変換することに関する。
【０１６９】
SPU 200は、オペレーション1124で、入力パケット1061からの公的宛先IPアドレス1058およびポート番号1060を、検索テーブル1079内のIPアドレスおよびポート番号エントリー220Aと比較する。例えば、SPU 200は、宛先ポート番号をCAM 220へのアドレスとして用いる。ポート番号と適合する（match）セクション220A内のアドレスは、SRAM 221内のセクション221Aへのポインタとして用いられる。オペレーション1126で、SPU 200は、SRAM 221から識別された私的宛先IPアドレスを読み込み、パケットの公的IP宛先アドレス1058を識別された私的IPアドレス1074に置き換える。オペレーション1128で、SPU 200はまた、変換されたパケットに対して新しいチェックサムを生成する。最終的に、SPU 200は、オペレーション1130で、パケット1076を出力ポート152を介してDRAMメモリ280から私的ネットワーク24へと出力する。
【０１７０】
RSP 100は、NAT/PATオペレーションの後にも先にも、同一のパケットに対して他の変更および監視オペレーションを実行するように構成されてもよい。この例では、SPU 200は、さらなるファイヤーウォール処理のために新しい私的IPアドレス1074を持ったパケットをDRAM 280から再循環バッファ160(図２A)へと送り返してもよい。他のファイヤーウォールオペレーションは、その後再循環バッファ160内のパケットに対して実行される。
IPv6/IPv4変換 (IPv6/IPv4 Translation)
図２４に関して、ファイヤーウォール1062は、インターネットプロトコルバージョン4（IPv4）とIPバージョン6（IPv6）の間または他のIPのプロトコルバージョンの間で変換を行う必要があるかもしれない。例えば、第一のネットワーク1150がIPv6を用いている一方で第二のネットワーク1160は、IPv4を用いているかもしれない。そのためファイヤーウォール1062は、IPv6パケット1156の128ビットのアドレス領域1158を、IPv4パケット1172の32ビットのアドレス領域1170へと変換する必要がある。ヘッダーとペイロード以外の情報も、IPv4とIPv6の間で変換される必要があるかもしれない。
【０１７１】
ある例では、ファイヤーウォール1062は、IPv6パケット1156をIPv4パケット1172へと変換する。この例では、ファイヤーウォール1062は、IPv6パケット1156をカプセル化してIPv4トンネル1164へ入れる。逆の変換については、ファイヤーウォール1062は、IPv4パケットをIPv6パケットへ変換するか、IPv4パケット1172をカプセル化してIPv6トンネルへ入れる。これらの異なる変換は、ファイヤーウォール1062によって繋がれるIPネットワークの種類によって決まる。
【０１７２】
入力パケット1158は、メディアアクセス制御（MAC）ヘッダー1180、IPヘッダー1182およびTCPヘッダー1184を含んでいるかもしれない。タイプフィールド1186は、このIPヘッダー1182に関するIPのバージョン番号を特定する。図２１、２４および２５に関して、DXP 180（図２１）は、オペレーション1200（図２５）で、入力パケット1158を解析し、タイプフィールド1186内の特定のIPバージョンを特定する。タイプフィールド1186がIPv4を示し、かつRSP 100の反対の端（end）に繋がれているネットワークでもIPv4が用いられている場合、DXP 180は、SPU 200内で、IPバージョン変換のための何らかのSEPコードを起動しなくてよい。
【０１７３】
しかし、タイプフィールド1186が、RSP 100の反対の端（end）で用いられているIPバージョンと異なるIPバージョンを示した場合、DXP 180は、オペレーション1202で、SPU 200にSCT 210（図２A）からマイクロ命令をロードするように信号を送る。このマイクロ命令は、入力パケットを他のネットワークのIPバージョンへ変換するためのものである。この例では、マイクロ命令は、SPU 200にIPv6パケットをIPv4パケットに変換させる。
【０１７４】
SPU 200は、オペレーション1204で、DXP 180によって特定されたIPv6アドレスを、128ビットのIPv6アドレスと関連付けがなされているCAM 220（図21）内のセクション220Bと照合する適用する。CAM 220は、対応する32ビットのIPv4アドレスを含んでいるSRAM 221のセクション221B内の対応するエントリーをアドレス指定する（address）。SPU 200は、オペレーション1206で、SRAM 221から出力されたIPv4アドレスを読み込み、オペレーション1208で、パケット内のIPv6アドレスを特定されたIPv4アドレスに置き換える。他のやり方では、SPU 200は、IPv6パケットをカプセル化して、SRAM 221内の特定されたIPv4アドレスを用いるIPv4トンネルへ入れる。オペレーション1210で、SPU 200は、新しいチェックサムを生成し、オペレーション1212で、変換されたIPv4パケットかあるいはIPv6パケットを含んでいるIPv4トンネルのいずれかをDRAM 280から出力ポート152へ送る。
【０１７５】
図２５で説明したものと同様のプロセスは、入力IPv4パケットをIPv6パケットへと変換するのにも用いることができる。上述したものと同一のプロセスは、将来生まれるかもしれない他のどのようなIPパケットのバージョン間での変換にも用いることができる。RSP 100は、単に新しいIPバージョンの番号を識別し、その後SEPコードのセットを起動する。このSEPコードは、SPU 200によって、第一のIPバージョンと第二のIPバージョンとの間でパケットを変換するのに用いられる。
【０１７６】
IPバージョン変換は、図１３−１９と関連して前述した統合型ポリシー管理オペレーションと組み合わせることもできる。例えば、RSP 100は、異なるIPバージョンのものであると特定されたパケットを、パケット内の特定されたIPバージョンをサポートしているかもしれない関連した異なるIPサブネットへとルーティングすることができる。
【０１７７】
RSP 100の多くの独特な特徴のうちの一つは、追加のパケットの処理オペレーションを、追加のハードウェアを必要とすることなく、しかもソフトウェアまたは処理状態の複雑性を実質的に増加させることなく、実行できることである。例えば、図２１に示されているものと同一の、NAT/PAT変換のためのRSP構成（configuration）は、IPv4とIPv6との間での変換にも用いることができる。IPv6からIPv4へのアドレスマッピング220Bと221Bおよび逆のIPv4からIPv6へのアドレスマッピング220Cと221Cは、それぞれ、NAT/PAT変換に用いられるIP公的アドレス220AおよびIP私的アドレス221Aと並べて(alongside)CAM 220内に格納されてもよい。さらに、巨大化したIPv6パケットのヘッダーを解析するためには、ほんの数サイクルの追加のサイクルが必要とされるだけなので、巨大化した128ビットのIPv6ヘッダーを解析することは、RSP 100にとっての全体のパケット処理のレートをほんの数サイクル増やすに過ぎない。
【０１７８】
共通DXP解析(common DXP parsing)を活用することで、複数の異なるファイヤーウォールオペレーションを同一のRSP 100内でより効率的に実行することができる。例えば、図２１で、DXP 180は、NAT/PATオペレーションとIPv6/IPv4オペレーションの両方に対していくつかの同一の解析オペレーションを実施してもよい。例えば、IPアドレスはDXP 180によって、NAT変換とIPバージョン変換の両方のために特定される。そのため、同一のDXPアドレス解析結果をNAT変換とIPバージョン変換の両方のために用いることができる。そのため、DXP 180は、NAT文法の他には少数の文法しか必要としない。
【０１７９】
RSP 100はまた、何らかの特定のデータサイズを処理することに限定されない。そのため、何らかのIPv4またはIPv6オペレーションや、将来生み出されるかもしれない何らかの他のIPバージョンまたはアドレスサイズの処理は、同じRSPアーキテクチャ100を用いて簡単に実施することができる。RSP 100は、DXP 180に最低限の新しい文法を加え、SPU 200によって実行されるための追加のSEPコードを加え、いくつかの追加のエントリーをCAM 220およびSRAM 221内に加えるだけで、こうした異なるIPバージョンおよびアドレスサイズを処理するように構成することができる。
【０１８０】
これは、効率的にIPv4パケットの代わりにIPv6パケットを処理するために完全な再設計を必要とする従来のハードウェアアーキテクチャとは正反対である。例えば、従来のプロセッサでは（in）、データパスサイズ、レジスタサイズおよび論理素子は、巨大化した128ビットのIPv6アドレスに対して再設計される必要があるだろう。
【０１８１】
仮想私的ネットワーク（VPN）統合 (Virtual Private Network (VPN) Integration)
図２６は、どのようにして仮想私的ネットワーク（VPN）トンネル1207がインターネット1212を介して確立されるかについての一例を示している。コンピュータ1216は、企業サーバー1202からファイル1200をリクエストする。サーバー1202は、ファイル1200にアクセスし、該ファイルをIPパケット1204として、離れたユーザ1216にVPN/ファイヤーウォール1206を介して送り返す。
【０１８２】
ファイヤーウォール1206は、該パケット1204を、（例えばIP送信元保護（IPSG）のような）IPセキュリティプロトコルカプセル化セキュリティペイロード（IPSec ESP）トレーラ1210およびIPセキュリティプロトコル認証ヘッダー（IPSec AH）1208を用いてカプセル化する。これらのIPSecヘッダー1208および1210は、レイヤー3プロトコルに位置する。これらのヘッダーは、トランスポートモードでは、IPヘッダーの後ろかつ上位層のプロトコルヘッダーの前に配置され、トンネルモードでは、カプセル化されたIPヘッダーの前に配置される。IPSecヘッダー1210およびAHヘッダー1208は、個別に用いることも、互いに組み合わせて用いることもできる。
【０１８３】
IPSec ESPヘッダー1210は、受信したパケットを復号化するのに必要となる情報を含んでおり、また場合によっては受信したパケット1204を認証するのに必要となる認証ダイジェスト（authentication digest）を含んでいる。IPSec AHヘッダー1208は、受信したパケット1204を認証するのに必要となる認証ダイジェストを含んでいる。IPSecパケット1218がIPSec AHヘッダー1208を含んでいる場合、認証ダイジェストは、レイヤー3プロトコル内に位置する。そうでない場合、IPSec ESPモードでは、ESPトレーラ1210内のパケットペイロードの後ろには認証ダイジェストだけが配置される。
【０１８４】
IPSecパケット1218は、インターネット1212をVPNトンネル1207として経由してコンピュータ1216へと送られる。VPN/ファイヤーウォール1214は、AHヘッダー1208およびESPヘッダー1210内の情報に従ってIPSecパケット1218を復号化する。復号化されたIPパケット1204は、その後コンピュータ1216へ転送される。VPN/ファイヤーウォール1214は、前述したように、復号化されたパケット1204に対して他のどのようなファイヤーウォールオペレーションを実施してもよい。
【０１８５】
図２７は、VPN/ファイヤーウォール1206および1214内のRSP 100によって実行されるオペレーションをより詳しく示している。RSP 100はまず、予備的な（初期）DoSフィルタリング1220を実施し、DoS攻撃レート用のスレッショルドを超えて受信されたIPSecパケット1218をフィルタリングする。DoSフィルタリング1220は、図４−１１と関連して前述したのと同様のやり方で、どのような非IPSecパケットもフィルタリングすることができる。
【０１８６】
セキュリティアソシエーション（SA）検索オペレーション1222は、IPSecパケット1218からIPアドレス、パケットセッション識別子および複数のセキュリティパラメータインデックス（SPIs）1226を抽出する。これらは、RSP 100によって用いられる必要とされる復号化技術および認証技術を特定する。SPI 1226およびその他のIP情報は、DoS、UPM、NAT変換およびIPバージョン変換と関連して前述した検索テーブルおよびACLテーブルと同様もしくは同一の検索テーブル1224へ送られる。検索テーブル1224は、復号鍵1228、復号化アルゴリズム識別子1230および認証アルゴリズム識別子1232を送り返す。
【０１８７】
関連している復号化アルゴリズムは、IPSecパケット1218内のビットを暗号化された状態から暗号化されていない状態に変換する。復号化アルゴリズムの例としては、Data Encryption Standard (DES)、Triple Data Encryption Standard (T-DES)、Advanced Encryption Standard（AES）やCBCモードのT-DESなどがある。認証アルゴリズムは、データに対してハッシュ演算（hash operation）を行い、IPパケット1204内のビットが、もともとはサーバー1202から送られたビットと同じであるかを検証する。認証アルゴリズムの例としては、MD5やSHA1がある。
【０１８８】
SA検索1222の結果は、復号化オペレーション1234へ提供される。その後、復号化オペレーション1234は、IPSecパケット1218をもとのIPパケット1204へと復号化する。SA検索1222および復号化オペレーション1234がどのように実行されるかについてのさらなる詳細は、以下の同時継続出願内で説明されている。
・2005年5月11日に出願されたアメリカ特許出願No.11/127,445
「流動的復号化/暗号化/認証ブロックを有するマルチプロセッサアーキテクチャ
（MULTIPROCESSOR ARCHITECTURE WITH FLOATING DECRYPTION/ENCRYPTION/AUTHENTICATION BLOCKS）」
・2005年5月11日に出願されたアメリカ特許出願No.11/127,443
「IPセキュリティ復号化/暗号化/認証
（IP SECURITY DECRYPTION/ENCRYPTION/AUTHENTICATION）」
・2005年5月11日に出願されたアメリカ特許出願No.11/127,468
「パイプライン型IPセキュリティ復号化/暗号化/認証
（PIPELINED IP SECURITY DECRYPTION/ENCRYPTION/AUTHENTICATION）」
・2005年5月11日に出願されたアメリカ特許出願No.11/127,467
「DMAインターフェイスを有するDEAエンジン（DMA Engine with DMA interface）」
これらの出願は、以上の引用をすることにより、その内容が本出願に組み入れられているものとする。
【０１８９】
DXP 180は、入力パケットを解析し、特定されたIPタイプフィールドに従ってIPSecパケット1218を識別する。続いて、DXP 180内の文法は、SEPコード212（図２A）を起動するためにDXP 180によって使用されるSPI 1226を識別する。このSEPコード212は、SPU 200に、SPI 1226をCAM 220内のACLに入れ、その後CAM検索からの出力結果（result）に従って復号化1234を実行するように命令する。例えば、復号化鍵1228、復号化アルゴリズム識別子1230および認証アルゴリズム識別子1232は、前に図２１と関連して説明したものと同一のCAM/SRAM構造内に格納することができる。CAM検索からの出力結果は、追加のSEPコードを示すACLアクションである。この追加のSEPコードは、識別子1230と関連付けされている復号化アルゴリズムおよび識別子1232と関連付けされている認証アルゴリズムを、復号化鍵1228を用いて実行するものである。
【０１９０】
同一のIPSecセッションに関して、暗号化されていないパケット（例えば、同一の5タプルを持ったパケット）が受信された場合、CAM 220内の対応するACLエントリーはSPU 200にこれらのパケットを除外するように命令してもよい。これは、認証されていない攻撃者がVPNセッション1207を乗っ取る（take over）のを防ぐ。
【０１９１】
復号化されたIPパケットは、その後、一つまたは複数の異なるポスト復号化オペレーションへと送られる。これらのポスト復号化オペレーションは、転送オペレーション1236を含んでいてもよい（この転送オペレーション1236は、前述したUPMアプリケーションにおけるオペレーションと同様な場合もある）。例えば、RSP 100は、転送オペレーション1236で、図１３−１９と関連して前述したFIBを用いた何らかのさらなるファイヤーウォールオペレーションをすることなく、単に、復号化されたパケット1204を宛先アドレスへと転送してもよい。
【０１９２】
他のやり方では、復号化オペレーション1234からの出力は、第二のDoSフィルタリング1238を通過するようにしてもよい。第二のDoSフィルタリング1238は、IPパケット1204内の現在は復号化されているIPアドレスおよびその他の識別子に対してDoS検出およびDoSフィルタリングを実施することができる。例えば、DoSオペレーションおよびその他のUPMオペレーションに用いられる述語の一部は、現在は復号化されている。復号化された述語は識別され、その後第二のDoSオペレーション1238、UPMオペレーション、または何らかの必要とされる他のファイヤーウォールオペレーションを実施するのに用いられる。
【０１９３】
追加のファイヤーウォールオペレーションには、2005年7月14日に出願された「セマンティックプロセッサTCP状態マシンを用いたTCPの隔離（TCP ISOLATION WITH SEMANTIC PROCESSOR TCP STATE MACHINE）」という名称の同時継続のアメリカ特許出願No.11/181,528に開示されているTCPプロキシオペレーション1240が含まれていてもよい。ここで、この同時継続出願は、それを引用することにより、その内容が本出願に組み入れられているものとする。別の実行可能性のあるポスト復号化オペレーション1242では、RSP 100は、NAT/PATアプリケーションと関連して前述したように、復号化されたIPアドレスを公的アドレスまたは私的IPアドレスへと変換してもよい。
【０１９４】
どのファイヤーウォールオペレーションが実行されたのかと、復号化されたIPパケット1204の種類と、に応じて、RSP 100は、ポスト復号化オペレーション1236、1238、1240または1242をどのように組み合わせて実行してもよい。もちろん、上述した他のいずれのファイヤーウォールオペレーションもまた実行可能である。
【０１９５】
ファイヤーウォールポリシー管理を用いたライセンス供与
図２８に関して、RSP 100と組み合わされたACLテーブル1506は、効率的にアンチウィルス（AV）ライセンスを割り当てるのに用いることができる。現在、AVライセンスは、個々のマシン1514に割り当てられる。問題は、システム管理者がこれらのライセンスを管理するのは難しいということである。例えば、ネットワークに加えられた新しいマシン1514それぞれに対して、追加のライセンスを購入し、AVソフトウェアをインストールしなければならない。ライセンス契約が終了したら、ネットワーク管理者は、個々のマシンにAVソフトウェアを再インストールするか、それらのソフトウェアを再び有効化しなければならない。さらに、AVソフトウェアに対するアップロードはいずれも、各々のコンピュータ1514へ個別にロードされなければならない。
【０１９６】
RSP 100は、集中型のライセンス管理を提供する。例えば、AVソフトウェア1504は、ファイヤーウォール1502内のRSP 100によって以下の同時継続のアメリカ特許出願で説明されているのと同様のやり方で実行することができる。この同時継続出願とは、2005年5月9日に出願された「ネットワーク処理デバイス内での侵入検知のための方法および装置」という発明の名称のアメリカ特許出願No.11/125,956のことである。その他のやり方では、AVソフトウェア1504は、従来のネットワーク処理デバイスによって実行されてもよい。
【０１９７】
以上のこととは関係なく、RSP 100は、どのサブネットワーク1520、1522および1524がAVライセンスを持っているか判定し、それに応じて、それらのライセンスを与えられたサブネットワークに向けられたパケットだけにAVソフトウェア1504を適用する。図２８および２９に示すように、RSP 100は、公的インターネット1500から、特定の宛先アドレス1527を持ったパケット1525を受け取る。RSP 100内のDXP 180は、IP宛先アドレス1527を特定してSPU 200に送り、その後SPU 200にSEPコードを実行させる。このSEPコードは特に、宛先アドレス1527に対応しているサブネットワークがAVライセンスを持っているかどうか確認するものである。
【０１９８】
例えば、SPU 200は、パケットの宛先アドレス1527をCAM 220へ送る。この宛先アドレス1527は、ACLエントリー1526内の述語1528と適合する（マッチする）かもしれない。ACLエントリー1526と関連付けられているアクション1530は、ACL述語1528と適合したパケット宛先アドレス1527と関連しているサブネットワーク1522（図２８）に対するライセンスが存在しているということを示している。アクション1530は、追加のSEPコードに対するポインタであってもよい。このSEPコードは、SPU 200に、現在サブネットワーク1522との間に確立しているコネクションの数が割り当てられたライセンスの数より少ないかどうか判定するように命令するものである。サブネットワーク1522に対して購入されたライセンスの数が、動作中のコネクションの数よりも多い場合、AVソフトウェア1504はパケット1525へ適用される。
【０１９９】
ファイヤーウォール1502内のSPU 200またはその他の処理機器（processing elements）は、インターネット1500と各サブネットワーク1520、1522および1524との間で動作中のコネクションの数のカウント1529を継続して保持することができる。メモリ221は、動作中のコネクションのカウント1529と、ファイヤーウォール1502に接続されているサブネットワークそれぞれに対して購入されたライセンス1531の数と、を格納する。
【０２００】
SPU 200は、すでに特定されているパケット宛先アドレス1527をCAM 220に入れることによって、AVソフトウェア1504がパケット1525に適用されるべきかを、すばやく判定することができる。CAM 220は、SRAM 221内の、サブネットワーク1522に対する現在のコネクションカウント1529および有効な（available）ライセンス1531を含んでいる位置を識別する。一つまたは複数のAVライセンスが有効である場合、他のファイヤーウォールオペレーションを実施する前、またはその実施中、もしくはその実施後、SPU 200は、AVソフトウェア1504をパケット1525に適用する。
【０２０１】
サブネットワークが公的ネットワーク上に位置している場合、AVソフトウェア1504を通過するすべてのパケットに対してトンネルを確立してもよい。例えば、サブネットワーク1524は、ファイヤーウォール1502から離れた場所に位置していてもよい。サブネットワーク1524がAVライセンスを割り当てられている場合、対応しているACLエントリー1526内のアクション1530は（このACLエントリー1526は、サブネットワーク1524に対するアドレスと適合している）、SPU 200に、パケットをサブネットワーク1524へ送る前に、このパケットをカプセル化して、安全なトンネル1518へ入れるように命令してもよい。
【０２０２】
AVソフトウェア1504は、AVライセンスを持たないサブネットワークへは適用されない。例えば、サブネットワーク1520と関連しているACLエントリーに対しては、ライセンス鍵アクション1530は、一つも作られない。従って、RSP 100は、サブネットワーク1520へ向けられたパケットにはAV 1504を適用しない。
【０２０３】
RSP配列
図３０および３１に示すように、複数のRSP 100を互いに接続してシーケンシャルファイヤーウォールオペレーションまたは並列ファイヤーウォールオペレーションを提供することができる。例えば、図３０の構成では、複数のRSP 100A―100Dが、互いに直列に組み合わされ、それぞれが異なるファイヤーウォールオペレーションや、ルーティングオペレーションや、侵入検知システム（IDS）オペレーションを実行する。第一のRSP 100Aは、5タプルの送信元および宛先IPアドレスおよびポート番号を抽出することにより、入力パケット1598からIP情報を識別し、入力パケット1598から当該IP情報を抽出する。
【０２０４】
次に、第二のRSP 100Bは、図４−１１と関連して説明したように、TCPと関連したオペレーション（例えば、TCPセッションの管理、DoS攻撃と関連したあらゆるTCPパケットのフィルタリングなど）を実行してもよい。第三のRSP 100Cは、パケット内で運ばれているかもしれないあらゆるHTTPセッションを検索するパケット処理オペレーションを実施してもよい。最後に、RSP 100Dは、ウィルスまたはその他の特定のタイプの情報（例えば、2005年5月9日に出願された「ネットワーク処理デバイス内での侵入検知のための方法および装置」という発明の名称の同時継続のアメリカ特許出願No.11/125,956で説明されているようなウィルスまたはその他の特定のタイプの情報）を含んでいるかもしれないHTTPセッション内のあらゆるテキストまたは実行ファイルを検索してもよい。
【０２０５】
もちろん、どのように組み合わせたRSP 100も、様々なファイヤーウォールオペレーションと非ファイヤーウォールオペレーションを任意の組み合わせたオペレーションを実行することができ、図３０は、その一例を示しているに過ぎない。追加された各RSPは、性能の大幅な線形的な向上を提供する。例えば、RSP 100Aは、解析されたどのような、ファイヤーウォール述語、IDSトークン、非終端（NT）312、生成コード178およびSEPコード177B（図２Bおよび２C）など1602も次のRSP 100Bへ送ることができる。パケット処理が完了したら、RSP 100Bは、同様の状態情報1602をRSP 100Cへ送ることができる。
【０２０６】
これは、それ以降の各RSP 100が、すでに以前のRSP内ですでに完了された解析と同一の解析の一部を繰り返さなければいけないことを防ぐ。さらに、DXP 180（図２A）のアーキテクチャは、各RSP 100が、NT 132をパーサスタック185（図２A）へロードするだけで、以前のRSPと同一の状態にすばやく変化することを可能にする。例えば、RSP 100Aは、IP宛先アドレスを含んでいるACL述語を識別してもよい。RSP 100Aは、ACL述語と、関連しているNT 132をメッセージ1602に入れて、関連しているパケット1600とともにRSP 100Bへ送る。RSP 100Bは、その後、すでにRSP 100Aから離れた（left off）状態で、すでに特定されているIPアドレス情報を用いて、パケット1600に対するTCPオペレーションを開始することができる。従って、RSP 100Bはパケット1600を再解析して、例えば、宛先IPアドレスを再識別する（rediscover）必要はない。
【０２０７】
これは、パケットプロセッサ状態をすぐに受け渡しできない従来のプロセッサアーキテクチャと正反対である。結果として、パケット処理システムに追加される従来の各プロセッサは、必ずしもネットワーク処理デバイスの全体的な性能を線形的に向上させない。言い換えると、従来のコンピュータアーキテクチャを用いているパケット処理デバイスの数を倍にしても、全体の処理能力は必ずしも倍にはならない。反対に、本実施例では、RSP 100の数を倍にすれば、ホストネットワーク処理システムの全体の性能は、ほぼ倍になる。
【０２０８】
図３１は、RSP 100の別の構成を示している。この構成では、一つまたは複数のRSP 100が平行して動作する。第一のRSP 100Aは、パケットから抽出されたIPアドレスと、その他の述語と、に基づいて、もしファイヤーウォールオペレーションが実行される必要があるならば（if any）、他のどのファイヤーウォールオペレーションがこれらの入力パケット1598に対して実行される必要があるのかを判定する初期UPMオペレーションを実行する。RSP 100Aは、その後、これらのパケットを、識別されたファイヤーウォールポリシーメトリックスに従ってRSP 100B−Gへとルーティングする。
【０２０９】
例えば、識別されたファイヤーウォール述語に基づいて、パケット1598はRSP 100Bによって提供されるDoS処理を要求するかもしれない。それに応じて、RSP 100AはこれらのパケットRSP 100Bへとルーティングする。RSP 100Bが、このパケットに対する宛先サブネットアドレスは、図２８および２９と関連して上述したように、関連したIDSライセンスを有していると判定した場合、このパケットは、アンチウィルス処理のためにRSP 100Cへルーティングされてもよい。そうでない場合、RSP 100Bは、このパケットをローカルネットワーク1604内のエンドポイントへ転送してもよい。
【０２１０】
RSP 100A内のUPMルーティングが、このパケットはIPv4フォーマットへと変換される必要があると判定した場合、このパケットはRSP 100Dへルーティングされる。このパケット1598は、RSP 100Eへと送られる。続いて、RSP 100Eは、様々な上位OSI層データに従ってこのパケットを処理する。例えば、RSP 100Eは、図１７と関連して前述したように、このパケット内のHTTP情報に従ってこのパケットをルーティングしてもよい。
他のパケットはそれぞれ、他のNATオペレーションを実施するためならRSP 100Fへ、他のDoSオペレーションを実施するためならRSP 100Gへ、ルーティングされてもよい。
コマンドライン・インターフェース（CLI）/ロギング/統計値
コマンドライン・インターフェース (Command Line Interface)
図２Aに戻るが、コマンドライン・インターフェース（CLI）282は、MCPU 56と組み合わされ、コンピュータ284のオペレータがCLIコマンドとデータ286をRSP 100に入力することを可能にする。その後、MCPU 56は、コンピュータ284から受け取ったCLIコマンド286を解釈し、それに従って動作する。例えば、CLIコマンド286は、MCPU 56に、新しいACLエントリーをメモリサブシステム215内のTCAM 220へロードするように命令してもよい。また、CLIコマンド286は、MCPU 56に、データをメモリサブシステム215内の他のどのメモリ構成要素へロードするように命令してもよい。
【０２１１】
また、CLIコマンド286は、RSP 100内の他の記憶装置構成要素や、テーブルを構成するのに用いられてもよい。例えば、CLIコマンド286は、MCPU 56に、新しいパーサ文法をパーサテーブル170へロードするように命令したり、生成規則176を生成規則テーブル190へロードするように命令したり、新しいSEPコード212をセマンティックコードテーブル210へロードするように命令してもよい。CLIコマンド286は、MCPU 56に、メモリサブシステム215内の記憶装置構成要素またはテーブルのどれか一つから情報を読み込むように命令したり、RSP 100内のその他の処理構成要素から情報を読み込むように命令したりすることができる。
【０２１２】
ロギング (Logging)
SEPコード212は、SPU 200に、ロギングのために、検出されたイベントの一部をMCPU 56へ記録するように命令することができる。例えば、SPU 200は、DoS攻撃の一部であると識別された何らかのパケットをMCPU 56へ送ってよい。DoS攻撃が検出された場合、SEPコード212は、SPU 200に、除外されたパケットのサンプル（one exemplary dropped packet）をMCPU 56へ送るように命令する。SEPコード212は、同様のパケットが除外されるたびに、MCPU 56へ告知するようにSPU 200に命令してもよい。
【０２１３】
MCPU 56は、除外されたパケット内に含まれる特定の情報と、同様に除外されたパケットの数を特定する統計値と、をログへとフォーマットする。このログは、システムログマシンのIPアドレスを持ったIPパケットへとフォーマットされてもよい。この場合、システムログマシンはその後、RSP 100内で検出されたイベントを受け取り、記録する。このログを含んでいるパケットは、SPU 200によって、出力ポート152を介してシステムログマシンへと送られてもよい。
【０２１４】
どのようなイベントもRSP 100によって記録することができる。また、それに限定されるわけではないが、これらのイベントは、前述したファイヤーウォールオペレーション内で識別されるいずれのイベントを含んでいてもよい。例えば、SEPコード212は、SPU 200に、CAM 220内の特定のACLエントリーと適合する（マッチする）パケットをMCPU 56へ送るように命令してもよい。
【０２１５】
統計値 (Statistic)
必要とされるどのような統計値もRSP 100の中に記録することができ、かつ他の場所に保存するかあるいはロギングシステムに送ることができる。例えば、SPU 200は、すべての受け取ったパケットや、除外されたパケットや、出力されたパケットをカウントするようにプログラムされてもよい。別のSEPコード212は、他の関連しているファイヤーウォールオペレーションに加えてロギングコマンドを含んでいてもよい。RSP 100は、送受信されたパケットと関連したどのような統計情報も識別する。送受信されたパケットと関連した統計情報の例としては、受信されたパケットの数や、受信されたパケットのサイズや、送信されたパケットのサイズおよび数や、除外されたパケットの数や、悪いチェックサムを持ったパケットの数や、複製されたパケットの数や、失敗したログインの試みなどが挙げられる。この統計値は、CLIコマンド286を介してコンピュータ284にダウンロードするか、一定期間ごとに、SPU 200によって出力ポート152を介してパケットとして送信することができる。
【０２１６】
認定（certification）
前述したファイヤーウォールオペレーションはいずれも、認定されており、いろいろな業界に受け入れられている認定基準に準拠している。この認定基準には、Institute for Computer Security Association (ICSA)、National Institute of Standards and Technology(NIST)、University of New Hampshire(UNH)、PLUG Festなどが含まれる。
要約（summation）
アクセス制御リストと組み合わせたRSPアーキテクチャの今までにない利用法により、同一のハードウェアを使用しかつ最小限のソフトウェア再構成を行うだけで、異なるファイヤーウォール、UPMまたはその他のパケット処理オペレーションをより効率的に実行できる。これらの複数のファイヤーウォールオペレーションは、DXPまたは前の他のファイヤーウォール解析オペレーションによって確認されている構文的な要素(例えば述語）を利用することができる。このようにして、RSPは高度に拡張性のあるファイヤーウォールアーキテクチャを提供する。
【０２１７】
上述したように、前述したオペレーションはいずれも、任意のネットワーク処理デバイス上で実施することができ、エッジデバイスや従来はファイヤーウォールと呼ばれていたシステム上で動作することに限定されない。例えば、DoS、UPMおよびその他のオペレーションは、ゲートウェイ、ルーター、サーバー、スイッチおよびその他の何らかのエンドポイントデバイス上で実行されてもよい。さらに、上述されたオペレーションの大部分は、必ずしもRSP 100を用いて実施される必要はないし、代わりに従来のコンピュータアーキテクチャ内で実施されてもよい。
【０２１８】
侵入検知 (Intrusion Detection)
以下の説明では、「ウィルス」という単語は、あらゆる種類の侵入、認証されていないデータ、スパム、スパイウェア、サービス妨害（DoS）攻撃、もしくは、ネットワーク処理デバイスによって侵入と見なされるあらゆる他の種類のデータ、信号、メッセージ送信などを表す。「ウィルス」という単語は、別の呼び方では、「マルウェア」と呼ばれ、何らかの特定の種類の認証されていないデータまたはメッセージに限定されない。
【０２１９】
図３２Aは、周辺機器（エッジデバイス）2025Aを介して公的インターネットプロトコル（IP）ネットワーク2012に接続されている私的IPネットワーク2024を示している。公的IPネットワーク2012は、パケット交換を提供しさえすればどのような広域ネットワーク（WAN）でもよい。私的ネットワーク2024は、攻撃（例えば、公的ネットワーク2012から来るウィルスまたは他のマルウェア攻撃など）を防御する必要がある企業ネットワークや、インターネットサービスプロバイダー（ISP）ネットワークや、家庭内ネットワークなどである。
【０２２０】
私的なネットワーク2024内のネットワーク処理デバイス2025A−2025Dは、パケット交換ネットワーク上で通信しさえすればどのようなタイプのコンピュータ関係の構成要素でもよい。例えば、ネットワーク処理デバイス2025Aおよび2025Bは、ルーターや、スイッチや、ゲートウェイなどでよい。この例では、ネットワーク処理デバイス2025Aは、ファイヤーウォールとして動作し、デバイス2025Bはルーターまたはスイッチとして動作する。（デバイス2025Bはルーターや、スイッチや、デバイス2025Cとして動作する。）エンドポイント2025Cは、個人用コンピュータ（PC）であり、エンドポイント2025Dは、インターネットウェブサーバーのようなサーバーである。このPC 2025Cは、有線イーサネット接続のような有線接続もしくは例えばIEEE802.11プロトコルを用いている無線接続を介して前記私的ネットワーク2024に接続されてもよい。
【０２２１】
侵入検知システム（IDS）2018は、私的ネットワーク2024内で動作しているネットワークデバイス2025A−2025Dの何らかの組み合わせで実施される。各IDS 2018は、ホストネットワーク処理デバイス2025を通過するネットワークトラフィックのパケットストリーム2022を受信し、それを解析し、その後、パケットストリーム2022内でウィルスを含んでいるすべてのパケット2016を識別し、それらを廃棄する。ある実施例では、IDS 2018は、以下でより詳しく説明する再構成可能なセマンティックプロセッサ(RSP)を用いて実施される。しかし、IDS 2018は、RSPを用いた実施例に限定されず、その他の処理デバイスもまた使用できるということが理解できるであろう。
【０２２２】
ある実施例では、IDS 2018は、エッジルーター2025A内にインストールされる。このエッジルーター2025Aは、私的ネットワーク2024を外部公的ネットワーク2012に繋ぐ。ある実施例では、IDS 2018は、従来IDSオペレーションを実施していないネットワーク処理デバイス内で実施してもよい。例えば、IDS 2018は、ルーターまたはスイッチ2025B内で実施してもよい。また別の例では、IDS 2018は、一つまたは複数のエンドポイントデバイス内（例えば、PC 2025C内や、ウェブサーバー2025D内）で実施してもよい。異なる複数のネットワーク処理デバイス2025A−2025D内で侵入検知システム2018を実施すれば、より完全な侵入検知が得られ、複数の異なるアクセスポイントを介して私的ネットワーク2024に侵入したウィルス2026は、エッジルーター2025Aを介して侵入したものを除いて、取り除くことができる。例えば、従業員（employee）の個人用コンピュータ2025Cを介して私的/内部ネットワーク2024にアクセスするウィルスは、PC 2025C、ルーター2025B、またはサーバー2025D上で稼動しているIDS 2018によって検出し、取り除くことができる。
【０２２３】
別の実施例では、ネットワーク処理デバイス2025内のIDS 2018は、私的ネットワーク2024に起因するウィルス2016Aを検出し、それを取り除くのに用いられる。例えば、PC 2025Cの操作者は、公的IPネットワーク2012内で稼動しているネットワークデバイスへ向けられたウィルス2106Aを生成するかもしれない。このウィルス2016Aが公的IPネットワーク2012へと出力される前に、このウィルスを識別してそれを取り除くために、内部ネットワーク2024内で稼動している複数のIDS 2018のどのような組み合わせも、用いることができる。
【０２２４】
セマンティックプロセッサは、私的ネットワーク2024の全範囲にわたってアンチウィルスオペレーションを組み込み、分散させることを可能にする。例えば、このセマンティックプロセッサは、ネットワークルーターまたはスイッチ2025Bの複数のポート内で侵入検知オペレーションを実施することができる。組み込まれた侵入検知システムIDS 2018は、現在の境界アンチウィルス検出スキーム（current perimeter anti virus scheme）よりも強固であり、この現在の境界アンチウィルス検出スキームよりも効果的な侵入検知を提供する。この侵入検知スキームは、電子メールの添付ファイルなどの特定の疑わしいデータタイプを処理する必要はなく、データフローに対して、ネットワークの送信速度において、オフライン状態で実行される。
【０２２５】
構文的な要素を用いた侵入検知 (Intrusion Detection Using Syntactic Elements)
図３２Bは、従来の侵入検知システムがどうやってフィルタを生成するのかを示している。入力データストリーム2071は、複数のパケット2072を含んでいる。これらのパケット2072は、一つまたは複数のヘッダー2072Aおよびペイロード2072Bを含んでいる。従来の侵入検知システムは、無差別に、データストリーム2071内の各パケット2072の各バイト2074を、脅威シグネチャ2058と比較する。脅威シグネチャとの比較によって生成されたフィルタ2075はすべて、その後全体のデータストリーム2071へと適用される。
【０２２６】
この侵入検知スキームは、不必要にコンピューティングリソースを消費する。例えば、ヘッダーデータ2072Aのような、データストリーム2071内の情報の一部は、脅威を含んでいることはまず無いであろう。それにもかかわらず、図３２Bの侵入検知システムは、無差別に（blindly）、データストリーム2071内の各バイトを脅威シグネチャ2058と比較する。これは、侵入検知を実行しているコンピューティングリソースに、不必要に負担を負わせる。
【０２２７】
また、図３２Bの侵入検知スキームは、現在ウィルスについてスキャンされている複数のパケット間のコンテキストを区別しない。例えば、電子メールウィルスと関連している脅威シグネチャ2058は、パケット2072が実際に電子メールメッセージを含んでいるかどうかにかかわらず、すべてのパケット2072に適用される。従って、電子メールウィルスと関連している脅威シグネチャ2058は、HTTPメッセージを含んでいるパケット2072と比較されるかもしれない。これは、この侵入検知システムの拡張性をさらに制限する。
【０２２８】
図３２Cは、より効率的にウィルスを検出するために、データストリーム内の構文要素を確認するIDS 2018のある実施例を示している図である。このIDS 2018は、パーサを用いてパケット2072と関連しているセッションコンテキスト2082を特定する。例えば、最初の解析オペレーション中に、一つまたは複数のメディアアクセス制御（MAC）アドレス2076A、インターネットプロトコル（IP）アドレス2076Bおよび転送制御プロトコル（TCP）アドレス2076Cが、特定されるかもしれない。この例では、パーサは、パケット2072は簡易メール転送プロトコル（SMTP）電子メールメッセージを含んでいると特定するかもしれない。これらのセッションコンテキスト2082の識別子2076A−2076Dは、別の呼び方では構文要素と呼ばれる。
【０２２９】
構文要素2076を特定することで、IDS 2018は、より効率的にウィルスまたはその他のマルウェア脅威を検出し、それらを取り除くことができる。例えば、IDS 2018は、当該パケット2072の先頭（beginning）で検出されるセッションコンテキスト2082に基づいてさらなる侵入検知オペレーションをカスタマイズすることができる。例えば、セッションコンテキスト2082は、パケット2072は電子メールメッセージを含んでいるとして識別する。その結果、IDS 2018は、特に電子メールメッセージと関連しているさらなる構文的要素2076E−2076Hを検索し、識別することができる。さらに正確に言えば、ウィルスを含んでいるかもしれない電子メールのセマンティック要素を識別する。
【０２３０】
例えば、IDS 2018は、電子メールメッセージ内の「送信先（宛先）（to）：」、「差出人（送信元）（from）：」および「題名（subject）：」などのフィールド（fields）についての情報を含んでいるセマンティック要素2076E−2076Gを識別する。また、IDS 2018は、電子メールメッセージ内に含まれている電子メール添付ファイル2076Hを識別してもよい。この例では、ウィルスまたはマルチウェアが含まれている可能性があるのは、電子メール添付ファイルを含んでいる構文要素2076H内だけである。他の構文要素2076A−2076Dは、侵入脅威とはならないであろう。従って、電子メール添付ファイルを含んでいる構文要素2076Hだけが該脅威シグネチャ2058と比較される。
【０２３１】
他の構文要素2076A−2076Dは、パケット2072をフィルタリングするのに用いられるフィルタ2070を生成するのを補助するのに用いてもよい。例えば、フィルタ2070は、構文要素2076F内で確認されたものと同一の「差出人（from）：」フィールド（field）を持っているか、構文要素2076B内で確認されたものと同一のIP送信元アドレスを持っている、すべてのパケットをフィルタリングするように生成されてもよい。
【０２３２】
従って、IDS 2018は、IPセッションコンテキスト2082、データストリームのトラフィック特性および構文2076に基づいて侵入の企図を検出することができる。これらの侵入は、この後、ネットワークトラフィック内で識別された構文要素2076を、厄介だと見なされるイベントを記述している脅威シグネチャ規則2058と比較することで検出される。これらの規則2058は、いかなる活動（例えば、特定のサービスと接続されている特定のホスト）を記述することもできるし、どのような活動が警告するに相当するかについて（例えば、所定の数の異なるホストに対する攻撃があると「スキャン」を構成するとする）、あるいは既知の攻撃や既知の脆弱性に対するアクセスを記述しているシグネチャについて記述することができる。
【０２３３】
一定のパケットディレイ (Fixed Packet Delay)
図３３は、IDS 2018と組み合わせて用いられているディレイバッファを示している。侵入監視オペレーション2040は、場所的には、再構成可能なセマンティックプロセッサ（RSP）2100内で実行するか、RSP 2100内またはRSP 2100の外部で動作している他の侵入監視回路（intrusion monitoring circuitry）と組み合わされて実行することができる。
【０２３４】
図３３および３４に関して、ブロック2048Aで、RSP 2100は、入力ポート2120からパケット2022を受信する。RSP 2100は、ブロック2048Bで、ウィルスや別タイプの脅威を含んでいる第一カテゴリーのパケット2032Aを廃棄する予備的な（初期）脅威フィルタリングオペレーションを実施してもよい。この初期フィルタリング2048Bは、例えば、所定の既知の脅威シグネチャを有するテーブルにアクセスすることで実行されてもよい。この初期フィルタリングは、特定のデータ2032Aを、IDS 2018によってさらに処理されるのを防ぐ。例えば、サービス妨害攻撃や、既知のウィルス攻撃や、認証されていないIPセッションを検出することができれば、IDS 2018によってさらに処理することなく関連しているパケットを取り除くことができる。
【０２３５】
ブロック2048Cで、RSP 2100は、残っているパケット2022をパケットディレイ(遅延)バッファ2030へ格納する。ある例では、このパケットディレイ(遅延)バッファ2030は、ダイナミックランダムアクセスメモリ（DRAM）もしくは、一時的に入力データストリーム2022をバッファするようにサイズ調整された別タイプのメモリである。ブロック2048Dで、RSP 2100はさらに、入力データストリームの構文を識別する。例えば、RSP 2100は、電子メールメッセージを含んでいるパケットを識別するかもしれない。
【０２３６】
ウィンドウズ（登録商標）ベースのPCに対する侵入攻撃の大部分は、メッセージ内のファイルまたはスクリプトとして到着する電子メールメッセージに起因する。攻撃内のデータのフォーマットは、単純な二進法のマシンコードまたはASCIIテキストである。これらのメッセージは、配信メカニズムの構文と、セマンティックスと、を満たしてはじめてアクティブ化可能にとなる。例えば、電子メールメッセージ内の実行ファイルは、Request For Comment (RFC) 2822に規定されているMultipurpose Internet Mail Extensions (MINE)準拠のファイル添付形式を用いているSimple Mail Transfer Protocol/Point of Presence (SMTP/POP)を用いて転送される。それゆえ、RSP 2100は、ブロック2048Dで、SMTPとMIMEプロトコルの何らかの組み合わせに対応しているパケットを識別してもよい。
【０２３７】
RSP 2100は、ブロック2048Eで、データストリーム2022に関して識別された構文に対応するトークン (token) 2068を生成する。例えば、トークン2068は、識別された電子メールメッセージの特定の部分要素を含んでいるかもしれない。この部分要素の例としては、電子メッセージの差出人（「From：」）、電子メールメッセージの宛先（「To：」）、電子メールメッセージの題名（「Subject：」）、電子メールが送られた時間（「Sent：」）、電子メールメッセージに含まれている添付ファイルなどがある。RSP 2100はこのセッション情報を分析するので、ネットワーク処理デバイス（例えば、ルーターやスイッチなど）内での脅威フィルタリングは、単一のパケット内で見つる要素に限定されない。すなわち、TCPセッションの乗っ取り企てや、FTPストリームを迂回させようとする企てや、HTTPS証明書を偽造しようとする企てなどもフィルタリングする。
【０２３８】
トークン2086は、ブロック2048Fで、パケットディレイ(遅延)バッファ2030内に含まれているデータの構文に対してカスタマイズされている第二のさらに徹底したフィルタセットを動的に生成するのに用いられる。例えば、トークン2068は、電子メールメッセージ内に含まれているウィルスと関連付けられたフィルタ2070を生成するのに用いられる。これは、IDS 2018の拡張性にとって重要である。データの構文と関連付けられたフィルタを生成することにより、このIDSは、より効率的に脅威をスキャンすることができる。例えば、IDS 2018は、現在処理されている種類のデータには不適当なフィルタを適用することに時間を浪費せずに済む。
【０２３９】
RSP 2100は、ブロック2048Gで、このカスタマイズされたフィルタセット2070を、パケットディレイ(遅延)バッファ2030内に格納されているデータへ適用する。フィルタ2070によって識別された脅威を含んでいるすべてのパケット2032Bは廃棄される。このデータが、あらかじめ決められた一定の時間、パケットディレイ(遅延)バッファ2030内に格納された後、RSP 2100は、ブロック2048Hで、該データを出力ポート2152へ出力する。
【０２４０】
パケットディレイ(遅延)バッファ2030によって提供されるこの一定のディレイ(遅延)は、監視オペレーション2040に、時間を与える。この時間は、脅威を査定し、負担している処理の中に新しい脅威があるかどうか判定し、構文と関連付けられたフィルタ2070のセットを形成し、当該データ2034が出力ポート2152から出力される前にこれらのフィルタを適用するための時間である。1Gbps（1ギガビット毎秒）のイーサネットLANシステムに対して、バッファ2030内でかけられるディレイ(遅延)は、通常、約20ミリ秒（ms）から50ミリ秒（ms）となる。もちろん、他の一定にしたディレイ(遅延)時間も用いることもできる。
【０２４１】
RSP 2100は、データストリーム2022を処理するために今までにない解析技術を用いる。これは、RSP 2100が、侵入監視オペレーション2040を、同一のネットワーク処理デバイス内で実行されているかもしれない他の入力ネットワークルーティングオペレーションからオフラインにすることなく、IDS 2018をネットワークの回線転送速度で実施することを可能にする。これは、RSP 2100が、入力パケット2022を一定にしたパケットディレイ（遅延）をかけて処理することを可能にする。このパケットディレイ（遅延）は、侵入者が侵入検知システムを実行するネットワーク処理デバイス2025（図３２A）を識別し、それを回避するのを困難にする。
【０２４２】
例えば、侵入者は、私的ネットワーク2024（図３２A）をウィルスに感染させようと試みている間、ネットワークの遅れを監視する。繰り返されるウィルス攻撃に応答している特定のネットワークパスにおいて他より長い応答時間が識別された場合、侵入者は、このパスが侵入検知システムを含んでいると判断するかもしれない。他のネットワークパスは、試みられた攻撃に応答するのに他より長い時間がかからなかった場合、侵入者は、このパスは侵入検知システムを含んでいないと結論し、この識別されたネットワークパス内のポートまたはデバイスを介してウィルスを送るかもしれない。
【０２４３】
データ2022の種類や、そのデータストリーム2022に対して生成されかつ適用されるフィルタの種類とは無関係な一定のパケットディレイ（遅延）を、入力ポート2120と出力ポート2152の間に設けることで、IDS 2018は、侵入者がIDS 2018を実行しているネットワーク処理デバイス2025を識別するのを防ぐ。もちろん、これは実施例の一つに過ぎず、他のIDS実施例2018は、一定にしたパケットディレイを用いて実行されなくてもよい。
【０２４４】
別の実施例では、RSP 2100は、識別された特定の種類のデータにだけ一定のディレイをかけ、一方で、他のデータは一定のディレイをかけることなく処理する。データストリームの構文を識別することで、IDS 2018は、ウィルスに関してスキャンする必要があるデータストリームと、ウィルスに関してスキャンする必要がないデータストリームと、を識別することができる。IDS 2018は、その後、理にかなったやり方で、スキャンされたデータストリームに対してだけ一定のディレイをかける。例えば、RSP 2100は、TCP SYNメッセージを含んでいると識別されたパケットに一定のディレイをかけてもよい。このSYNパケット内に何の不正（irregularity）も検出されなかった場合、RSP 2100は、図３４と関連して前述したような、一定のディレイをかけることなく、それ以降に（subsequently）受信されるTCPデータパケットを受信して、それらを処理してもよい。それゆえ、確立されていないTCPセッションは、他のトラフィックが遅延させられないのに対して、遅延させられるかもしれない。
【０２４５】
図３５は、図３４に示されているIDS 2018によって実行されるオペレーションのより詳しい説明である。データストリーム2022からのパケットは、入力ポート2120を介してパケット入力バッファ（PIB）2140によって受信される。パケット2022からのバイトは、直接実行パーサ（DXP）2180およびセマンティック処理ユニット（SPU）2200によって処理される。この例では、一つまたは複数のSPU 2200は、アクセス制御リスト(ACL）照合オペレーション2050、セッション検索オペレーション2052およびトークン生成オペレーションを同時に実行することができる。
【０２４６】
ACL照合オペレーション2050は、データストリーム2022内の入力パケットをアプリオリであると知られている（that are known a priori）フィルタ2064の初期ACLリストと照合する。ACL照合オペレーション2050は、ACLフィルタ2064と適合したパケットを取り除き、その後残ったパケット2022をディレイ(遅延)FIFO 2030へとロードする。
【０２４７】
セッション検索オペレーション2052は、パケット2022を既知で、有効なIPセッションと照合する。例えば、DXP 2180は、TCP SYNメッセージに関するTCPセッション、ポート番号および到着レートを識別するセッション検索2052に対して情報を送ってもよい。セッション検索2052は、このTCPセッションおよびポート番号は今までに確認されているかどうかと、そしてそれがいつなのかを判定する。パケット2022が有効なTCP/IPセッションと識別された場合、これらのパケット2022を、出力バッファ（POB）2150へ直接送ってもよい。
【０２４８】
トークン生成オペレーション2054は、DXP 2180によって識別されたデータストリーム2022の構文に従ってトークン2068を生成する。ある例では、トークンジェネレータ2054は、5タプルデータセットを含んでいるトークン2068を生成する。この場合、5タプルデータセットには、入力バッファ2140内で処理されているパケットと関連している送信元IPアドレス、宛先IPアドレス、送信元ポート番号、宛先ポート番号およびプロトコル番号が含まれる。これらのトークン2068は、TCPパケット内のあらゆる異常（anomaly）（例えば、未知のIPまたはTCPオプションなど）を含んでもよい。
【０２４９】
以下で説明する例では、トークン2068の一部は、電子メールメッセージと関連している構文要素も含んでいる。例えば、DXP 2180は、図３２Cで説明したように、簡易メール転送プロトコル（SMTP）セッションと関連しているパケットを識別してもよい。トークン生成オペレーション2054は、その後、電子メールセッションからSMTS/MIME添付ファイルのような特定の情報を抽出する。電子メールメッセージと関連しているトークン2068のある例は、以下のType-Length-Value(TLV)フォーマットを用いて生成される。
Token #1
Type: SMTP/MIME Attachment (method for transferring files in email messages)
Length: # of bytes in the file
Value: actual file
別の例では、DXP 2180は、入力バッファ2140内のハイパーテキスト・マークアップ・ランゲージ（HTML）セッションと関連しているパケット2022を識別する。トークン生成オペレーション2054は、それに応じて、特に以下のHTTPセッションと関連していて、以下のHTTPセッションを特定するトークンを生成する。
Token #2
Type: HTML Bin Serve (method for transferring files in web pages)
Length: # of bytes in file
Value: actual file
トークン2068は、上述したようなトークン生成オペレーション2054によって、トークン2068内に含まれている構文情報が、脅威/ウィルス解析およびACL対策エージェント2056によって、簡単に脅威シグネチャ2058と比較できるようにフォーマットされる。ある例では、対策エージェント2056は、トークン2068をメモリ内に格納されている所定の脅威シグネチャ2058と比較する通常目的の中央処理ユニット（CPU）である。例えば、対策エージェント2056は新しい侵入対策フィルタが必要かどうかを決定する（decide）ために、「BRO」−http://ee.ibl.gov/bro.htmlや、「SNORT」−http://www.snort.orgのようなさまざまな既存のアルゴリズムを利用してもよい。これらのアルゴリズムはともに、これらを引用することにより、その内容が本出願に組み入れられているものとする。脅威シグネチャ2058は、例えば、SNORTやMcAfeeから利用できる市販の侵入検知データベースによって供給されてもよい。
【０２５０】
対策エージェント2056は、トークン2068と脅威シグネチャ2058の間にあった適合(matches)例に対応する出力ACLフィルタ2070を動的に生成する。例えば、脅威シグネチャ2058は、トークン2068の一つの中に含まれている電子メール添付ファイルのウィルスを識別するかもしれない。対策エージェント2056は、その後、ウィルスに感染した電子メール添付ファイルを含んでいるパケットの送信元IPアドレスを含んでいるフィルタ2070を動的に生成する。このフィルタ2070は、ACLオペレーション2062へ出力される。その後、このオペレーションは、ディレイ（遅延）FIFO 2030内から、フィルタ2070によって特定される送信元IPアドレスを含んでいるパケット2016をすべて廃棄する。その後、残っているパケットは出力バッファ2150へ出力される。
【０２５１】
再構成可能なセマンティックプロセッサ（RSP）
図３６は、ある実施例において、前述したIDS 2018を実施するのに用いられている再構成可能なセマンティックプロセッサ（RSP）2100のブロック図を示している。このRSP 2100は、入力ポート2120を介して受信されるパケットデータストリームをバッファするための入力バッファ2140と、出力ポート2152を介して出力されるパケットデータストリームをバッファするための出力バッファ2150と、を有している。
【０２５２】
直接実行パーサ（DXP）2180は、入力バッファ2140において受信されるパケットまたはフレーム（例えば入力「ストリーム」）と、出力バッファ2150へ出力されるパケットまたはフレーム（例えば、出力「ストリーム」）と、再循環バッファ2160内で再循環されるパケットまたはフレーム（例えば、再循環「ストリーム」）と、の処理を制御する。入力バッファ2140、出力バッファ2150および再循環バッファ2160は、先入れ先出し(FIFO: first in-first-out)バッファであるのが好ましい。また、DXP 2180は、セマンティックプロセッシングユニット（SPU）2200によってパケットの処理を制御する。このセマンティックプロセッシングユニット（SPU）は、バッファ2140、2150および2160とメモリサブシステム2215間でのデータの転送を制御する。メモリサブシステム2215は、入力ポート2120から受信したパケットを格納し、また、該入力データストリーム内の脅威を識別するために用いられる脅威シグネチャ2058（図３５）も格納する。
【０２５３】
RSP 2100は、所定のIDSオペレーションを実行するために少なくとも三つのテーブルを用いる。生成規則2176を検索するためのコード2178は、パーサテーブル（PT）2170内に格納される。文法生成規則2176は、生成規則テーブル（PRT）2190内に格納される。SPU 2200によって実行されるコードセグメントは、セマンティックコードテーブル（SCT）2210内に格納される。パーサテーブル2170内のコード2178は、行列（row-column）フォーマットやコンテントアドレッサブル（content addressable）フォーマットなどのやり方で格納される。行列（row-column）フォーマットでは、パーサテーブル2170の行は、内部パーサスタック2185によって提供される非終端コードＮＴ 2172によりインデックス付けされ、パーサテーブル2170の列は、入力バッファ2140内のデータの先頭から抽出される入力データ値DI[N]2174によりインデックス付けされる。コンテントアドレッサブル（content addressable）フォーマットでは、パーサスタック2185からの非終端コード2172と入力バッファ2140からの入力データ値2174を連結したものが、パーサテーブル2170に対する入力をなす。
【０２５４】
生成規則テーブル2190は、パーサテーブル2170からのコード2178によってインデックス付けされる。テーブル2170と2190は、パーサテーブル2170に対するクエリが、非終端コード2172および入力データ値2174に適用可能な生成規則2176を直接送り返すように、図３６に示されているようにリンクされてもよい。DXP 2180は、パーサスタック2185の一番上にある非終端コードを、PRT 2190から送り返された生成規則（PR）2176と取り替え、その後入力バッファ2140からのデータの解析を続ける。
【０２５５】
セマンティックコードテーブル2210もまた、パーサテーブル2170により生成されたコード2178か、生成規則テーブル2190により生成された生成規則2176、もしくはその両方によってインデックス付けされる。通常、解析結果は、所定の生成規則2176に対してSPU 2200がセマンティックコードテーブル2210からのコードセグメント2212をロードしかつ実行すべかどうかを、DXP 2180が検出することを可能にする。
【０２５６】
SPU 2200は、コンテキストシンボルによるアドレス化が可能なように構成された（structured）メモリインターフェイスを提供するメモリサブシステム2215に対するいくつかのアクセスパスを有する。メモリサブシステム2215、パーサテーブル2170、生成規則テーブル2190およびセマンティックコードテーブル2210は、内臓メモリか、外部メモリデバイス（例えば、同期動的ランダムアクセスメモリ（DRAM）やコンテントアドレッサブルメモリ（CAM））を用いるか、もしくはこれらのリソースを組み合わせて用いる。各テーブルまたはコンテキストは、一つまたは複数の他のテーブルまたはコンテキストを有する共有物理メモリ領域に、コンテキストインターフェイスを提供するだけでよい。
【０２５７】
管理（maintenance）中央演算処理装置（MCPU）2056は、SPU 2200とメモリサブシステム2215の間に接続される。MCPU 2056は、RSP 2100にとって望ましい機能の中で、従来のソフトウェアとハードウェアによって無理なく遂行できるものを実行する。これらの機能は、通常、あまり使われずかつ最優先で実行されるものではない（時間的に重要でない）機能であり、その機能の複雑性からSCT 210内に含めるようなものではない。また、MCPU 2056は、MCPUの代わりにタスクを実行するようにSPU 2200にリクエストする機能を持っているのが好ましい。ある実施例では、MCPU 2056は、SPU 2200が入力パケットストリームからウィルスをフィルタリングするのに用いるアクセス制御リスト（ACL）の生成をアシストする。
【０２５８】
メモリサブシステム2215は、ハッシュ機能（ハッシング関数）またはコンテントアドレッサブルメモリ（CAM）検索を介してDRAM 2280内のデータにアクセスするためのアレイマシンコンテキストデータメモリ（AMCD）2230を有している。暗号処理ブロック2240は、データの暗号化や、復号化や、認証を行い、コンテキスト制御ブロックキャッシュ2250は、DRAM 2280へのコンテキスト制御ブロックをキャッシュするとともに、DRAM 2280からのコンテキスト制御ブロックをキャッシュする。通常キャッシュ2260は、基本演算において使用されるデータをキャッシュし、ストリーミングキャッシュ2270は、データストリームがDRAM 2280へ書き込まれている間と、データストリームがDRAM 2280から読み出されている間に、これらのデータストリームをキャッシュする。コンテキスト制御ブロックキャッシュ2250は、ソフトウェア制御のキャッシュであるのが好ましい。すたわち、いつキャッシュラインが使用され、いつ開放される（free）のかをSPU 2200が決定するのが好ましい。サーキット2240、2250、2260および2270は皆、DRAM 2280とSPU 2200の間に接続される。TCAM 2220は、AMCD 2230とMCPU 2056の間に接続される。
【０２５９】
より詳細な、RSP 2100の機能ブロックに対する設計最適化は、本発明の範囲には含まれない。適用可能なセマンティックプロセッサの機能ブロックの詳細なアーキテクチャについてのいくつかの例に関しては、2003年1月24日に出願された「再構成可能なセマンティックプロセッサ」という発明の名称の同時係属のアメリカ特許出願No. 10/351,030を参照されたし。この特許出願は、これを引用することにより、その内容が本出願に組み入れられているものとする。
【０２６０】
RSPを用いた侵入検知 (Intrusion Detecton in Fragmented Packets)
RSP 2100の侵入検知コンテキストにおける役割は、特定の例によってよりよく理解できるであろう。以下の例では、RSP 2100は、電子メールメッセージ内に位置しているウィルスまたはその他のマルウェアを取り除く。当業者ならば、説明された概念は、どのようなタイプのウィルスまたは他のタイプのマルウェアの検出や、何らかの通信プロトコルを用いて転送される何らかのデータストリームに対するいろいろなタイプの侵入検知に簡単に適用できるということが理解できるであろう。
【０２６１】
初期侵入検知オペレーションには、入力データストリームの構文を解析し、検出することが含まれる。これらは、図３７および３８と関連して説明される。図３７に示すように、多くの異なる文法と関連しているコードが、パーサテーブル2170および生成規則テーブル2190内に同時に存在していてもよい。例えば、コード2300は、MACパケットヘッダーフォーマットの解析に関連しており、コード2302は、IPパケット処理に関連しており、また別のコードのセット2304は、TCPパケット処理に関連している。パーサテーブル2170内の他のコード2306は、図３２A−３５と関連して前述されている侵入検知2018に関連しており、この例では特に、データストリーム2022（図３５）内の簡易メール転送プロトコル（SMTP）パケットを識別する。
【０２６２】
PRコード2178は、生成規則テーブル2190内に格納されている対応する生成規則2176にアクセスするのに用いられる。特定の検索の実行において必要とされるのでなければ、入力値2308（例えば、現在の入力値DI[n]2174（nはバイトで選択された一致幅）と組み合わされた非終端（NT）シンボル2172）は、PRテーブル2170内で何らかの特定の順番で割り当てられる必要は無い。
【０２６３】
ある実施例では、パーサテーブル2170は、DXP 2180からデータ値DI[n]2174とNTシンボル2172を受け取るアドレッサ2310も備えている。アドレッサ2310は、NTシンボル2172をデータ値DI[n]2174と連結させ、この連結した値2308をパーサテーブル2170へと送る。概念的には、パーサテーブル2170の構造を、NTコード2172とデータ値2174の特有な組み合わせのそれぞれに対して一つのPRコード2178を持ったマトリックスとして見ることが有用であることが多いが、本発明の実施例に関してはそのようには限定されない。異なるアプリケーションに対しては、異なるタイプのメモリおよびメモリ構成が適当であるかもしれない。
【０２６４】
ある実施例では、パーサテーブル2170はコンテントアドレッサブルメモリ（CAM）として実施され、アドレッサ2310は、CAMがPRコード2178を検索するための鍵としてNTコード2172および入力データ値DI[n]2174を用いる。CAMは、TCAMエントリーが格納された(populated with TCAM entries）三値（ternary）CAM(TCAM)であるのが好ましい。各TCAMエントリーは、NTコード2312とDI[n]適合値2314（DI[n] match value）を含む。各NTコード2312は、複数のTCAMエントリーを保持することができる。
【０２６５】
DI[n] 適合値2314（DI[n] match value）の各ビットは、「0」、「1」または「X」に設定することができる。この「X」は「無視（Don't Care）」を表す。この機能により、PRコード2178は、パーサテーブル2170が適合(match)を見つけるために、DI[n] 2174の数ビットまたは数バイトだけがコード化されたパターンと適合することを必要とする。
【０２６６】
例えば、TCAMのある行は、SMTPパケットに対するNTコードNT_SMTP 2312Aを含んでおり、その後に該SMTPパケット内に特定のタイプのコンテンツが含まれていることを表す付加バイト2314A（例えば、電子メール添付ファイルに対するラベル）が続くかもしれない。このTCAM行の残りのバイトは「無視（Don't Care）」に設定される。こうして、NT_SMTP 2312Aと、数バイトのDI[N]と、がパーサテーブル2170に提示された際、DI[N]の最初の数バイト（first set of bytes of DI[N]）が添付ファイル識別子を含んでいれば、DI[N]の残りのバイトが何を含んでいても適合(match)が生じることとなる。
【０２６７】
パーサテーブル2170内のTCAMは、前述したように、NT 2172およびDI[N]2174と適合するTCAMエントリーに対応するPRコード2178Aを生成する。この例では、PRコード2178Aは、電子メールメッセージを含んでいるSMTPパケットと関連している。PRコード2178Aは、DXP 2180へ送り返されるか、PRテーブル2190に直接送り返されるか、またはその両方に送り返されてもよい。ある実施例では、PRコード2178Aは、適合状態を作り出すTCAMエントリーの行インデックスである。
【０２６８】
図３８は、生成規則テーブル2190の一つの実行可能性のある実施例を示している。この実施例では、アドレッサ2320は、DXP 2180とパーサテーブル2170のいずれか一方からPRコード2178を受け取り、DXP 2180からNTシンボル2172を受け取る。好ましくは、受け取ったNTシンボル2172は、パーサテーブル2170へと送られるNTシンボルと同一のNTシンボル2172であり、受け取ったPRコード2178を配置するのに用いられる。
【０２６９】
アドレッサ2320は、これらの受け取ったPRコード2178およびNTシンボル2172を用いて対応する生成規則2176にアクセスする。アドレッサ2320は、一部の実施例においては必ずしも必要ではないが、使用される場合は、DXP 2180の一部や、PRT 2190の一部として設けることができ、また中間（intermediate）の機能ブロックとして設けることができる。例えば、パーサテーブル2170またはDXP 2180がアドレスを直接作る場合、アドレッサは必要とされない。
【０２７０】
生成規則テーブル2190に格納される生成規則2176は、三つのデータセグメントを含む。これらのデータセグメントには、シンボルセグメント2177Aと、SPUエントリーポイント（SEP）セグメント2177Bと、スキップバイトセグメント2177Cと、が含まれる。これらのセグメントは、長さ固定のセグメントでも長さ可変のセグメントであってもよく、ヌル終端化されている（null-terminated）のが好ましい。シンボルセグメント2177Aは、パーサスタック2185(図３６)上へプッシュされる終端シンボルか、非終端シンボルか、またはその両方を有している。SEPセグメント2177Bは、データセグメントの処理中にSPU 2200によって使用されるSPUエントリーポイント（SEP）を収容している。スキップバイトセグメント2177Cは、入力バッファ2140によって自身のバッファポインターをインクリメントし、入力ストリームの処理を進めるために使用されるスキップバイトデータを有している。また、生成規則の処理において有用なその他の情報も生成規則2176の一部として格納することができる。
【０２７１】
この例では、生成規則コード2178Aによってインデックス付けされる一つまたは複数の生成規則2176Aは、入力バッファ2140内で識別されたSMTPパケットと対応する。SEPセグメント2177Bは、図３６のセマンティックコードテーブル2210内のSPUコード2212をポイントする。このSPUコードは、SPU 2200によって実行されると、図３５と関連して前述したような様々なACL照合2050オペレーション、セッション検索2052オペレーションおよびトークン生成2054オペレーションを実行する。ある実施例では、SPU 2200は、平行して動作させることができるセマンティック処理要素の配列を有している。生成規則2176A内のSEPセグメント2177Bは、一つまたは複数のSPU 2200を起動して、ACL照合オペレーション2050、セッション検索オペレーション2052およびトークン生成オペレーション2054を平行して実行してもよい。
【０２７２】
前述したように、パーサテーブル2170は、SMTPパケットと関連していない別タイプのデータを処理する文法を収容していてもよい。例えば、パーサテーブル2170内に含まれるIP文法2302は、入力バッファ2140内の識別されたNT_IP宛先アドレスと関連している生成規則コード2178を含んでいてもよい。
【０２７３】
生成規則テーブルコード2302内の適合データ値2314は、RSP 2100が属するネットワーク処理デバイスのIPアドレスを含んでいるかもしれない。NT_IPコード2172と関連している入力データDI[I]2174が、PRコード2302に関する適合値2314内に含まれている宛先アドレスを持っていない場合、デフォルト生成規則コード2178が生成規則テーブル2190に提供されてもよい。このデフォルト生成規則コード2178は、生成規則テーブル2190内の生成規則2176をポイントしてもよい。ここで言う生成規則2176は、DXP 2180か、SPU 2200か、その両方に、入力バッファ2140から該パケットを廃棄するように命令するものである。
【０２７４】
セマンティックプロセッシングユニット（SPU）
前述したように、DXP 2180は、IPセッション、TCPセッションのような入力ストリーム内の特定の構文要素（現在の例ではSMTP電子メールセッション）を識別する。これらの構文解析オペレーションは、IDSシステム2018の全体的な性能にとって重要である。DXP 2180によって入力ストリームの実際の構文が識別されるので、図３５と関連して前述したようなそれに続くIDSオペレーションは、今ではSPU 2200によってより効率的に実行することができる。
【０２７５】
例えば、SPU 2200は、電子メールメッセージと関連付けられているACLフィルタを、解析されたデータストリームに適用するだけでよい。これによりいくつかの利点が得られる。第一に、必ずしも、すべてのパケットのすべてのバイトを、すべての脅威シグネチャ2058（図３５）と比較しなくてもよい。その代わりに、電子メールメッセージと関連している脅威シグネチャのサブネットだけをSMTPパケットに適用すればよい。これには、IDS 2018の拡張性を増加させるという実質的な利点がある。また、これによって、IDS 2018がより多くのウィルスとマルウェアを検出し、より高いパケットレートで動作することが可能となる。
【０２７６】
図３９は、前に図３５と関連して説明したACL照合オペレーション2050および出力ACLオペレーション2062をより詳しく説明している。ブロック2040で、DXP 2180は、SPU 2200にSCT 2210から適切なマイクロ命令をロードするように信号を送る。これらのマイクロ命令は、前に図３５と関連して説明したACL照合オペレーション2050と出力ACLオペレーション2062を実行するものである。図３８と関連して前述したように、DXP 2180は、生成規則2176Aに含まれるSPUエントリーポイント（SEP）セグメント2177Bを介してSPU 2200に信号を送る。
【０２７７】
SEPセグメント2177Bに応じてアクセスされるSCT 2210内のSPUコード2212（図３６）に従って、SPU 2200は、ブロック2402で、DXP 2180によって識別された入力データストリーム内の特定の構文要素を得る。例えば、DXP 2180は、IP送信元アドレス、IP宛先アドレス、宛先ポート番号、送信元ポート番号およびプロトコルタイプを含む5タプル構文要素を識別するかもしれない。もちろん、これは一例に過ぎず、DXP 2180によってデータストリーム2022（図３５）内に、他の構文要素が識別されることもある。
【０２７８】
ブロック2404で、SPU 2200は、DXP 2180によって識別された構文要素を、TCAM 2220内に収容されているアプリオリアクセス制御リスト（ACL）フィルタセット（a priori set of ACL filters）と比較する。例えば、TCAM 2220内のアプリオリACLフィルタセットは、既知の脅威と関連している様々なIPアドレスを含んでいるかもしれない。ある例では、SPU 2200は、パケットのIPアドレスなどの構文要素をAMCD 2230を介してTCAM 2220に送ることで、入力バッファ2140内のパケットに関する構文要素を、TCAM 2220内のアプリオリフィルタと比較する。その際、このIPアドレスは、TCAM 2220へのアドレスとして用いられる。TCMA 2220は、AMCD 2230を介してSPU 2200に結果を送り返す。
【０２７９】
SPU 2200は、ブロック2406で、TCAM 2220からの結果を確認する。TCAM 2220からの出力は、パケット除去や、パケット格納や、場合によってはIPセキュリティ（IPSEC）パケットの存在を示す可能性がある。例えば、TCAM 2220は、入力バッファ2140内のパケットから供給されるIPアドレスが、TCAM 2220内のアプリオリフィルタエントリーのうちの一つと適合した場合、パケット除去フラグを生成してもよい。入力データストリーム2022に関するIPアドレスがTCAM 2220内のエントリーのいずれとも適合(match)しない場合、パケット格納フラグが出力される。TCAM 2220は、暗号化されたIPSECパケットに対応するエントリーも含んでいるかもしれない。IPアドレスが、IPSECエントリーのうちの一つと適合する場合、TCAM 2220は、IPSECフラグを出力する。
【０２８０】
SPU 2200は、ブロック2408で、PIB 2140内のパケットで、TCAM 2220内にパケット除去フラグを生成するパケットをすべて除去する。SPU 2200は、単に入力バッファ2140に次のパケットへスキップするように命令するだけでパケットを除外することができる。TCAM 2220からパケット格納フラグが出力された場合、SPU 2200は、ブロック2410で、入力バッファ2140からのパケットをDRAM 2280へ格納する。DRAM 2280は、図３４および３５と関連して前述したディレイFIFO 2030として稼動する。TCAM 2220からIPSECフラグが出力された場合、SPU 2200は、メモリサブシステム2215内の暗号処理回路2240を介して入力バッファ2140内のパケットを送信してもよい。復号化されたパケットは、その後、図３６の再循環バッファ2160へ送り返され、前述したACL照合オペレーションが繰り返されてもよい。
【０２８１】
DRAM 2280(図３５のディレイFIFO 2030)内にパケットが格納されている間、MCPU 2056（図３５の対策エージェント2056）は、入力データストリームから抽出されたトークン2068と対応するACLフィルタ2070を動的に生成する。これは、以下で図４１と関連してより詳しく説明される。SPU 2200は、ブロック2412で、DRAM 2280に格納されているパケットを、現在はTCAM 2220内に格納されている、動的に生成されたACLフィルタ2070（図３５）と比較する。例えば、SPU 2200は、ブロック2402で識別されたパケットに関するものと同一の5タプルを用いてもよい。
【０２８２】
SPU 2200は、このパケットに関する5タプルを、TCAM 2220内の動的に生成されたフィルタ2070と比較する。TCAM 2220からパケット除去フラグという結果を生成するDRAM 2280内のパケットはすべて、その後ブロック2414で、SPU 2200によってDRAM 2280から削除される。あらかじめ決められた一定のディレイ時間の後、SPU 2200は、ブロック2416で、残りのパケットを出力ポート2152へ出力する。
【０２８３】
CAM 2220は、他のアプリオリフィルタを有していてもよいということが理解できるであろう。例えば、CAM 2220は、パケットの中に含まれるかもしれない様々なプロトコルまたはデータと関連付けられたフィルタを有していてもよい。DXP 2180は、TCAM 2220内のフィルタと照合される（apply to）必要がある構文要素を特定し、それをSPU 2200に送る。
【０２８４】
ディレイFIFOにより提供される一定の時間ディレイ内では、ウィルスまたはマルウェアを判定することができないかもしれない。例えば、ウィルスは、巨大な数メガビットのメッセージの末端に含まれているかもしれない。この状況では、IDS 2018は、該パケットの受信者と同一の受信者へ送られるウィルス通知メッセージを生成してもよい。このウィルス通知メッセージは、当該パケットはウィルスを含んでいるというメッセージである。ウィルス通知メッセージは、該受信者に、ウィルスを含んでいる当該パケットを捨てるように通知する。
【０２８５】
図４０は、前に図３５と関連して前述したセッション検索オペレーション2052の間に、SPU 2200によって実行されるオペレーションを説明している。ブロック2430で、DXP 2180は、SPU 2200にSCT 2210から適切なマイクロ命令をロードするように信号を送る。この場合、これらの適切なマイクロ命令は、図３８と関連して前述したように、関連しているSEPセグメント2177Bを送ることによってセッション検索オペレーションを実行することと関連している。
【０２８６】
ある例では、SPU 2200は、ブロック2432で、入力パケットに関する送信元および宛先アドレスと、送信元および宛先ポート番号と、をDXP 2180から受信する。SPU 2200は、その後、このアドレスとポート番号を、DRAM 2280内に含まれているパケットに関する現在のセッション情報と比較する。一部のIPセッションに関しては、SPU 2200は、ブロック2434で、DRAM 2280内で稼動しているディレイFIFO 2030内のフラグメント化されたパケットを再順序付けする必要があるかもしれない。SPU 2200は、ブロック2438で、現在のIPセッションに関して前に受信されたパケットの複製である、入力バッファ2140内のパケットをすべて除去してもよい。
【０２８７】
図４１は、図３５と関連して前述したトークン生成オペレーション2054を説明している。ブロック2450で、DXP 2180は、図３６−３８と関連して前述したように、入力ストリームからのデータを解析する。ブロック2452で、DXP 2180は、入力バッファ2140内のデータストリーム内の構文要素で、ウィルスまたはマルウェアと関連しているかもしれない構文要素を識別する。上の例では、この識別には、DXP 2180が電子メールメッセージを含んでいるパケットを識別（特定）することが含まれてもよい。一方で、DXP 2180によって識別される構文要素は、IPアドレスと、送信元アドレスおよび宛先アドレスを含むIPデータフローと、特定のデータフローに対して識別されたトラフィックレートなどを含んでいればどのようなものでもよい。
【０２８８】
DXP 2180は、ブロック2454で、SPU 2200にSCT 2210から特定のトークン生成オペレーションと関連したマイクロ命令をロードするように信号を送る。より詳しくは、図３８のSEPセグメント2177Bによって識別されたマイクロ命令は、SPU 2200に、DXP 2180によって識別された特定の構文要素に関するトークンを生成するように命令する。
【０２８９】
SPU 2200は、その後ブロック2456で、識別された構文要素からトークン2068（図３５）を生成する。例えば、SPUコード2212（図３６）は、SPU 2200に、特定された電子メールメッセージから見つかった構文要素を抽出するように命令してもよい。SPU 2200は、パケット内の「差出人：」、「宛先：」および「題名：」フィールドからの情報を含んでいるトークンを生成してもよい。SPU 2200は、データストリーム内に存在するかもしれないどのような電子メール添付ファイルに対しても抽出を行い、トークンを生成してもよい。
【０２９０】
例えば、SPU 2200は、図３５と関連して前述したようなTLVトークン＃1を生成してもよい。
Token #1
Type: SMTP/MIME Attachment (method for transferring files in email messages) Length: # of bytes in the file 
Value: actual file
DXP 2180は、脅威と関連しているかもしれない、多数の異なるタイプの構文要素を識別することができるということも理解できるであろう。DXP 2180は、異なる構文要素に対して異なるSPUコード2212（図３６）を起動することができる。例えば、上述したように、DXP 2180は、HTMLメッセージと対応している構文要素も識別することができる。DXP 2180は、以下に示すものと同様でもよいHTMLトークンを生成するようにSPU 2200に命令するSEPセグメント2177Bを送ってもよい。
Token #2
Type: HTML Bin Serve (method for transferring files in web pages)
Length: # of bytes in file
Value: actual file
SPU 2200は、ブロック2457で、簡易アプリケーションに関するトークンを、図３５の脅威シグネチャ2058へとフォーマットする。例えば、SPU 2200は、トークンを Type-Length-Value (TLV)データにフォーマットする。SPU 2200は、その後ブロック2458で、フォーマットされたトークンを、図３６のMCPU 2056へ、または図３５と関連して説明したような外部の脅威/ウィルス解析およびACL対策エージェント2056へ送ってもよい。
【０２９１】
ある実施例では、MCPU 2056は、トークン2068を、TCAM 2220内に含まれている脅威シグネチャ2058へと適用して、動的に生成されたACLフィルタ2070のセットを生成する。SPU 2200は、その後、図３９と関連して前述した出力ACLオペレーション2062で、TCAM 2220内の動的に生成されたACLフィルタ2070を、DRAM 2280ディレイFIFO内に格納されているパケットと照合する。ACLフィルタ2070と適合するディレイFIFO内のパケットは、すべて除去される。
【０２９２】
ある実施例では、TCAM 2220は、脅威シグネチャテーブルおよびACLフィルタテーブルの両方を含む複数のテーブルを収容してもよい。TCAM 2220内の脅威シグネチャテーブルは、MCPU 2056によってアクセスされ、TCAM 2220内のACLフィルタは、AMCD 2230を介して複数のSPU 2200によってアクセスされる。
【０２９３】
別の実施例では、外部脅威解析デバイスは、RSP 2100の外部で（off chip from RSP）稼動する。この実施例では、外部のTCAMが、脅威シグネチャを含んでいてもよい。SPU 2200は、トークン2068を、外部脅威解析デバイスへ送る。この外部脅威解析デバイスは、その後、動的に生成されたACLフィルタ2070をMCPU 2056へ出力する。MCPU 2056は、その後、動的に生成されたACLフィルタ2070をTCAM 2220へ書き込む。SPU 2200は、その後、図３５と関連して説明したACL照合オペレーション2050と、出力ACLオペレーション2062と、のためにTCAM 2220内のACLフィルタにアクセスする。
【０２９４】
ACLフィルタ2070の実際の生成のされ方は、当業者には周知であるので、これ以上詳しくは説明しない。しかし、これまでに、侵入検知システムが、データストリーム内の識別された構文要素と関連しているトークンに従って動的にACLフィルタを生成したことがあるとは考えられない。
【０２９５】
フラグメント化されたパケットにおける侵入検知
現在は、インターネットメッセージ内で既知のパターンを検索するテキストスキャナが存在する。脅威の誤検出を避けるために、長いシークエンスのテキストは、通常、正規表現形式のパターン適合技術(regular expression style technique)を使って適合される。しかし、これらの技術は、バイトが連続的（contiguous）であるか、脅威スキャナが広範囲なコンテキストメモリ用いることを必要とする。
【０２９６】
例えば、ウィルススクリプトは、以下に示すような一つの長いラインとして含まれてもよい。
以下に含まれる全ファイルを対象とする場合（For all files in）：
c:\; { open (xxx); delete (xxx); close (xxx);} end. 
それに応じて、アンチウィルススキャナーは、全体のテキスト文字列を検索しなければならない：
s/*open(*);delete(*);close(*)*/ 
一方で、攻撃者は、以下のようにウィルスを複数のパケットフラグメントに分けるかもしれない：
IP frag #1 : For all files in c:\; { open (xxx);
IP frag #2: delete (xxx); close (xxx);} end;
従来のウィルススキャナは、上記のフラグメント化されたIPパケット内のウィルスを検出することができないかもしれない。TCP/IPプロトコルが最終的に、フラグメント化されたメッセージを組み合わせて（together）元に戻した時点では、ウィルスは、すでに私的ネットワークに侵入している。RSP 2100は、上述した侵入検知オペレーションを実施する前に、フラグメント化されたパケットを検出し、再構築する。これにより、IDSは、複数のフラグメント化されたパケットにわたる（span）ウィルスを検出することができる。
【０２９７】
図４２Aは、図３６のRSP 2100がどのようにしてフラグメント化されたパケット内のウィルスを検出するかを説明しているフローチャート2500である。図３６および４２Aに関して、ブロック2502で、パケット（データ）は入力ポート2120を介して入力バッファ2140において受信される。ブロック2510で、DXP 2180は、入力バッファ2140のパケットのヘッダーの解析を開始する。DXP 2180は、受信したパケットがIPフラグメント化されたパケットであると判定された場合、受信したパケットのヘッダーの解析をやめる。DXP 2180は、IPヘッダーを完全に解析し、続く層（TCP、UDP、iSCSIなど）に属するヘッダーについてはどのヘッダーに対しても解析を行わないのが好ましい。DXP 2180は、パーサスタック2185上の文法またはSPU 2200によって命令された場合、解析をやめる。
【０２９８】
次のブロック2520では、DXP 2180は、SPU 2200にSCT 2210から適切なマイクロ命令をロードし、入力バッファ2140からフラグメント化されたパケットを読み込むように信号を送る。次のブロック2530では、SPU 2200は、このフラグメント化されたパケットをストリーミングキャッシュ2270を介してDRAM 2280へ書き込む。ブロック2520とブロック2530は2つの個別のステップとして示されているが、他のやり方としては、これらは、SPU 2200が該パケットの読み込みと書き込みを同時に行うことで一つのステップとして実行されてもよい。このSPU 2200が同時に読み込みと書き込みを実行するオペレーションは、SPUパイプライン方式として知られている。このオペレーションでは、SPU 2200は、セマンティックプロセッサ2100内の2つのブロック間で転送されるストリーミングデータ用のコンジット（conduit）またはパイプラインとして動作する。
【０２９９】
次の判定ブロック2540では、SPU 2200は、コンテキスト制御ブロック（CCB/Context Control Brock）が適切なIPパケットフラグメントの収集や順序付けのために割り当てられているかどうかを判定する。IPフラグメント化されたパケットに対応するフラグメントを収集しかつ順付けするためのCCBは、DRAM 2280内に格納されるのが好ましい。CCBは、DRAM 2280内のIPフラグメントに対するポインタと、まだ到着していないIPフラグメント化されたパケットに対するビットマスクと、割り当てられた時間が過ぎたら、セマンティックプロセッサ2100にさらなるIPフラグメント化されたパケットを待つのをやめさせ、その後、DRAM 2280内のCCBに格納されたデータを開放させるためのタイマー値と、を有している。
【０３００】
SPU 2200は、受信したIPパケットフラグメントのヘッダーからのID（identification）およびプロトコルと組み合わされている、受信したIPフラグメント化されたパケットの送信元IPアドレスを鍵として使用して、AMCD 2230のコンテントアドレッサブルメモリ（CAM）の検索機能にアクセスすることで、CCBが割り当てられているかどうか判定するのが好ましい。その他のやり方としては、このIPフラグメント鍵は、DRAM 2280内の離れたCCBテーブル内に格納される。そして、このやり方では、これらの鍵は、受信したIPパケットフラグメントのヘッダーからのIDおよびプロトコルと組み合わされている、受信したIPフラグメント化されたパケットの送信元IPアドレスを使用することでCAMとアクセスさせられる。このようにIPフラグメント鍵のアドレス化を行うことで、鍵の重複と鍵のサイズ調整の問題を回避する。
【０３０１】
SPU 2200が、特定のIPフラグメント化されたパケットに対するフラグメントの収集および順序付けのためにCCBがまだ割り当てられていないと判定した場合、実行プログラムはブロック2550へと進み、そこでSPU 2200がCCBを割り当てる。SPU 2200は、割り当てられたCCBに対応する鍵を、AMCD 2230内のIPフラグメントCCBテーブルへ入力し、CCB内に設けられたタイマーを起動する。ここで言う鍵とは、受信されたIPフラグメント化されたパケットのヘッダーからのIDおよびプロトコルと、受信したIPフラグメントの送信元IPアドレスと、から構成されるものである。与えられたフラグメント化されたパケットに関する最初のフラグメントが受信されると、後の再循環のために、IPヘッダーもCCBへ保存される。以後のフラグメントに関しては、IPヘッダーは保存される必要はない。
【０３０２】
いったんCCBがIPフラグメント化されたパケットの収集および順序付けのために割り当てられると、次のブロック2560では、SPU 2200はDRAM 2280内のIPフラグメント化されたパケット（からIPヘッダーを除いたもの）に対するポインタをCCB内に格納する。フラグメントに対するポインタは、例えばリンクリスト（linked list）としてCCB内に設けることができる。好ましくは、SPU 2200は、受信されたフラグメントに対応するマスクの一部を受信されたものとしてマーキングすることで、新たに割り当てられたCCB内のビットマスクもアップデートする。
【０３０３】
次の判定ブロック2570では、SPU 2200は、パケットからのIPフラグメントのすべてが受信されたかどうか判定する。この判定は、CCB内のビットマスクを使用して達成されるのが好ましい。当業者であれば、本発明とともに利用可能なビットマスク（すなわち均等にトラッキングを行う機構）を実施するのに容易に利用可能な多数の技術があるということを理解できるであろう。IPフラグメント化されたパケットに関するIPフラグメントのすべてを受信し終わっていない場合、セマンティックプロセッサ2100は、他のフラグメントを受信するまで、該フラグメント化されたパケットに関するこれ以上の処理を保留する。
【０３０４】
IPフラグメントのすべてを受信し終わっている場合、次のブロック2580では、SPU 2200は、DRAM 2280からIPフラグメントを正しい順序で読み込み、その後、前述した侵入検知処理のようなさらなる解析と処理のために、それらを再循環バッファ2160へ書き込む。本発明のある実施例では、SPU 2200は、特別なヘッダーと、再構築されたIPパケット（フラグメント化ビットは設定されていないまま）の最初の部分と、だけを再循環バッファ2160へ書き込む。
【０３０５】
特別なヘッダーは、DXP 2180が、IPフラグメント化されたパケットのすべてを再循環バッファ2160へと転送しなくても、DRAM 2280内に格納されている再構築されたIPフラグメント化されたパケットの処理を方向付けることを可能にする。特別なヘッダーは、IDSオペレーション2018を含むパーサ文法をロードするように指定された非終端シンボルと、CCBに対するポインタと、から構成することができる。その結果、パーサ180は通常、IPヘッダーを解析することができ、その後上位層（例えばTCP）のヘッダーの解析へと進むことができる。再循環バッファ2160内の、再構築された、ウィルスを含んでいるかもしれないパケット内の構文要素が識別されたら、DXP 2180は、SPU 2200にSCT 2210から、前述した侵入検知オペレーション2050、2052および2054を実行する命令をロードするように信号を送る。例えば、再構築されたパケットが電子メールメッセージを含んでいると識別された（identify）場合、DXP 2180は、SPU 2200に、前述した様々な電子メールフィールドに対応するトークンを生成するように命令する。
【０３０６】
図４２Bは、IDS 2018がどのようにして複数のTCPパケットに対して侵入検知オペレーションを実行するのかを示しているフローチャートである。ブロック2592Aでは、転送制御プロトコル（TCP）セッションが、イニシエータ（initiator）と、RSP 2100をホストするネットワーク処理デバイスと、の間で確立される。RSP 2100は、パーサテーブル2170およびPRT 2190内に適切な文法を有しており、TCPセッションを確立するためのマイクロコードをSCT 2210内に有している。ある実施例では、一つまたは複数のSPU 2200は、TCPセッションに関する状態を整理し（organize）、保持する。このTCPセッションに関する状態の整理および保持には、TCP再順序付けのためのDRAM 2280内でのCCBの割り当てと、ウィンドウサイズ制限と、割り当てられた時間フレーム内にイニシエータからさらなるTCPパケットが到着しない場合にTCPセッションを終了させるためのタイマーと、が含まれる。
【０３０７】
イニシエータとのTCPセッションが確立した後、次のブロック2592Bで、RSP 2100は、ブロック2592Aで確立されたTCPセッションに対応するTCPパケットが入力バッファ2140に到着するのを待つ。RSP 2100は、入力データを処理するための多数のSPU 2200を有していてもよいので、RSP 2100は、ブロック2592Aで確立されたTCPセッションに対応する次のTCPパケットを待っている間にも、平行して複数のパケットを受信し、処理することができる。
【０３０８】
TCPパケットは、ブロック2592Cで、入力ポート2120を介して入力バッファ2140において受信され、DXP 2180は、入力バッファ2140内のパケットのTCPヘッダーを解析する。DXP 2180は、割り当てられたSPU 2200にマイクロ命令を送る。このマイクロ命令は、実行されると、割り当てられたSPU 2200に、入力バッファ2140から受信したパケットを読み込み、受信したパケットをストリーミングキャッシュ2270を介してDRAM 2280へ書き込むように要求する。割り当てられたSPU 2200は、その後、TCP CCBを設け、受信したパケットのDRAM 2280内での位置をポイントする（示す）ポインタをTCP CCBに格納し、その後TCP CCB内のタイマーを再び起動する。割り当てられたSPU 2200は、その後開放され、さらなる処理のために、DXP 2180が決めるように割り当てることができる。
【０３０９】
次のブロック2592Dでは、受信したTCPパケットは、必要であれば、ペイロードデータの適切なシークエンスを確定させるために再順序付けされる。当技術分野で周知のように、TCPパケットは、先行するパケットがすべて到着している場合、適切な順番にあると見なされる。受信されたパケットが、適切な順番にあると判定された場合、担当の（responsible）SPU 2200は、SCT 2210から再循環のためのマイクロ命令をロードする。
【０３１０】
次のブロック2592Eでは、割り当てられたSPUは、TCPヘッダーからのTCPコネクション情報とTCP非終端を組み合わせて、特別なTCPヘッダーを作る。割り当てられたSPU 2200は、その後、特別なTCPヘッダーを再循環バッファ2160へ書き込む。その他のやり方では、特別なTCPヘッダーは、対応しているTCPペイロードを有している再循環バッファ2160へ送られてもよい。
【０３１１】
次のブロック2592Fでは、特別なTCPヘッダーと再構築されたTCPペイロードは、TCPデータ内のまた別の（additional）構文要素を識別するためにDXP 2180によって解析される。侵入を含んでいるかもしれないと識別された構文要素はすべて、前述した侵入検知オペレーションに従ってSPU 2200によって処理される。
【０３１２】
分散型トークン生成 (Distributed Token Generation)
図４３は、ネットワーク2600内で稼動している分散型IDSシステムの実施例の一つを示している。ネットワーク2600は、電子メールサーバー2610Aや、ファイヤーウォール2610Bや、ウェブサーバー2610Cのような異なる働きをする異なるネットワーク処理デバイス2610を有している。異なるネットワークデバイス2610A−Cはそれぞれ、上述したIDS 2018と同様な、IDS 2620A−Cを実行する。ある実施例では、図３６−４１と関連して説明したものと同様のRSP 2100を使用して、一つまたは複数のIDS 2620が実施される。一方で、他の実施例では、一つまたは複数のIDS 2620は別のハードウェアアーキテクチャを用いて実施される。
【０３１３】
各ネットワーク処理デバイス2610は、中央集中型の侵入解析を実行する中央侵入検出器2670に接続されている。IDS 2620A−2620Cは、入力データストリームを解析し、それぞれ図３５と関連して前述したトークン2068と同様のトークン2640A−2640Cを生成する。トークン2640は、中央侵入検出器2670へ送られる。
【０３１４】
図４３−４４に関して、中央侵入検出器2670は、ブロック2802で、IDS 2620 (2620A-2620C)それぞれからトークン(26402640A−2640C)を受信する。侵入検出器2670は、ブロック2804で、それぞれのトークン2640に従って、異なるデータフローのトラフィックパターンを解析する。続いてブロック2806でこの解析に従って、複数のフィルタが生成される。さらにブロック2808では、この解析に従って、複数の脅威シグネチャが生成されるかもしれない。これらの新しいフィルタと脅威シグネチャは、その後ブロック2810で、各IDS 2620へと分散される。
【０３１５】
ある例では、図４３のファイヤーウォール2610Bは、公的インターネット2630から受信された新しいデータフローを特定するトークン2640Bを生成してもよい。このトークン2640Bは、中央侵入検出器2670へ送られ、新しい送信元IPアドレスAを特定する。ウェブサーバー2610Cは、トークン2640Cを侵入検出器2670へ送ってもよい。第一のトークン2640C_1は、新しい送信元IPアドレスAを特定し、第二のトークン2640C_2は、この新しい送信元IPアドレスAはウェブサーバー2610C内のファイルにアクセスするために用いられたということを示す。
【０３１６】
中央侵入検出器2670は、トークン2640B、2640C_1および2640C_2を相互に関連付けて、通常は検出されないかもしれない潜在的なウィルスまたはマルウェアを認識（identify）する。例えば、侵入検出器2670は、ファイヤーウォール2610Bから受信された、トークン2640B内の新しい送信元IPアドレスAが、ウェブサーバー2610C内のファイルも開いているIPアドレスAと同一のものであると判定してもよい。この例では、公的インターネット2630からの外部リンクは、内部ネットワークのファイルを開かないと仮定する。
【０３１７】
この場合、トークン2640Bは、ファイヤーウォール2610Bから受信されたものなので、中央侵入検出器2670は、該IPアドレスAは、外部の公的インターネット2630から受信されたと結論する。従って、中央侵入検出器2670は、ファイヤーウォール2610B内のIDS 2620Bに新しいフィルタ2750を送り、場合によっては、他のネットワークデバイス2610Aおよび2610Cにも新しいフィルタ2750を送る。このフィルタ2750は、送信元IPアドレスAを持ったパケットがネットワーク2600に侵入することを防ぐ。
【０３１８】
別の例では、電子メールサーバー2610A内のIDS 2620Aは、トークン2640A_1を生成する。このトークン2640A_1は、未知の送信元IPアドレスAから電子メールが受信されたということを示す。IDS 2620Aはまた、トークン2640A_2を送る。このトークン2640A_2は、トークン2640A_1内で特定された電子メールに含まれるMIME添付ファイルを特定する。
【０３１９】
中央侵入検出器2670は、前に受信したトークン2640B、2640C_1および2640C_2を根拠に（from）、IP送信元アドレスAと関連しているデータフローはすべて、ウィルスまたはマルウェアを含んでいるかもしれないと判定する。これに応じて、中央侵入検出器2670は、トークン2640A_2内に含まれるMIME添付ファイルの名前、またはコンテンツもしくはその両方、に対応する新しいシグネチャ2660を動的に生成してもよい。中央侵入検出器2670は、電子メールサーバー2610A内のIDS 2620Aに新しいシグネチャ2660を送り、場合によっては、ネットワーク2600内で稼動している他のすべてのIDS 2620にも新しいシグネチャ2660を送る。IDS 2620Aは、その後、図３５に示されている脅威シグネチャ2058のセットに新しいシグネチャを加える。
【０３２０】
このように、IDSシステム2600は、トークン2640の有する構文コンテンツと、トークンを送るネットワーク処理デバイス2610の種類の両方に従って、フィルタやシグネチャを生成することができる。例えば、ファイヤーウォール2610Bによって生成されたトークン2640Bを、ネットワーク内の他のネットワーク処理デバイスから生成されたトークンよりも、疑わしいものとして扱ってもよい。また、上述したように、ファイヤーウォール2610Bによって識別された新しいIPアドレス（公的インターネットから受信されたIPパケット）についての情報（knowledge）を、電子メールサーバー2610Aまたはウェブサーバー2610Cによって検出された他のオペレーションについての情報と組み合わせて、より完全にウィルスを検出することができる。
【０３２１】
別の実施例では、中央侵入検出器2670は、検出されたウィルスまたは他のマルウェアと関係しているネットワーク処理デバイスはどれでも無効化することができる。例えば、ウィルス2660は、PC 2650内で稼働中のIDS 2662によって検出されるかもしれない。IDS 2662は、ウィルス2660について中央侵入検知器2670に通知する。中央侵入検出器2670は、その後、ウィルス2660の送信元が特定され、除外されるまで、ネットワーク2600からPC 2650を切り離す。
【０３２２】
ツリーサーチの拡張性 (Scalability of Tree Search)
前述したIDS 2018は、脅威が出現する可能性があるセッションコンテキスト内でスキャンを行うことで、現在の侵入検出の性能を向上させる。適合パターン（マッチングパターン）のためには、正規表現（regular expression）ではなくパーサツリー(paser tree)が用いられる。パケットデータ内の侵入検知およびその他の脅威の検知は、既知の脅威のパターンと適合するパターンに関して入力パケットストリームを「スキャン」することで実行される。
【０３２３】
正規表現スキャナは、パケットの全バイトをスキャンしなければならず、また、パケットのどの部分が脅威を含んでいるかもしれないのかを断定する機能を持たない。例えば、電子メール内の脅威は、電子メール添付ファイルを介してのみ侵入するかもしれない。電子メールメッセージの定義された本体は、ASCII文字の文字列である。通常は、ソフトウェアがこの文字列に従って予期しない行動や、悪意ある行動をとることはない。電子メールメッセージに対する添付ファイルは、Multipurpose Internet Mail Extensions (MIME)のような特定の公開された構文およびヘッダーによって定義される。
【０３２４】
さらに、多くの場合、電子メールメッセージの転送に用いられるIPプロトコルのヘッダーは、電子メールクライアントに悪意ある行動をとらせることはない。通常は、電子メール内のスクリプトやプログラムの実行が、侵入問題の原因となる。そのため、潜在的なウィルスを検出するためには、電子メールメッセージのMIME部分だけがスキャンされる必要がある。
【０３２５】
電子メールメッセージのMIME部分を検出するには、電子メールメッセージを転送するために用いられるプロトコル(TCP／IP）および電子メールMIMEフォーマットを理解することが必要となる。RSP 2100は、すばやく解析を行い、拡張性があるやり方で、メッセージのMIME部分にだけウィルススキャンを開始する。これは、スキャンしなければならないパケットの数を削減し、さらにそれぞれのパケット内のスキャンしなければならないバイト数も削減する。RSP 2100は、入力データストリームの構文解析を実施する。これによって、IDS 2018は、どのタイプのデータがスキャンされる必要があるのかを理解し、その後、実行される必要があるスキャンのタイプを理解する。これによって、IDS 2018は、入力ストリームの構文に対応するトークン2068をより効率的に生成することができる。
【０３２６】
DXP 2180およびRSP 2100のその他の機能は、この種の脅威スキャンに対して最適化され、従来のハードウェアアーキテクチャを用いている通常表現スキャナと比べて、性能を向上させている。例えば、図３６のパーサテーブル2170およびパーサスタック2185内で使用される三値コンテントアドレッサブルメモリ（TCAM）と組み合わされたLL（k）パーサは、正規表現エンジンよりも早く入力ストリームをサーチする（search）ことができる。
【０３２７】
正規表現スキャナは、適合があるかどうかを判定するために（determine a possible match）かなりの（significant）長さかつ長さが可変のデータの先読み(look ahead)を行うことが要求される。予測不能マッチング（ワイルドカードマッチング／wild card matching）も、独特なオペレーションを要求する。一方で、TCAMと組み合わされたLL(k)パーサは、過去の長い予測不能な(ワイルドカードwildcard)文字列をスキップし、一回のクロックサイクルで特定のバイトをすべて照合する。
【０３２８】
セッションコンテンツの修正 (Modifying Session Content)
図４５に関して、IDS 2018は、識別されたセッションコンテキスト2852内の情報に対して追加や、修正を行ったりするのにも用いることができる。言い換えると、IDS 2018は、侵入脅威に含まれると認識されたパケットを除去することだけに限定されない。図４５は、ネットワーク処理デバイス2856とIPリンク2866を確立しているPC 2864を示している。IDS 2018は、デバイス2856内で稼動し、上述したようなIPリンク2866と関連した特定のセッションコンテキスト2852を識別する。例えば、IDS 2018は、PC 2864によって、WAN 2850内で稼動している他のエンドポイントデバイスへ送られるHTTPメッセージや、FTTPメッセージや、SMTP電子メールメッセージなどを識別してもよい。
【０３２９】
IDS 2018は、識別されたセッションコンテキスト2852と関連している特定のタイプのコンテンツ2862に対して追加や、修正を行ったりするようにプログラムすることができる。ある例では、IDS 2018は、電子メールメッセージまたはFTTPメッセージ内に含まれるドキュメント（文章）内のクレジットカード番号2858を取り除くようにプログラムされてもよい。別の例では、IDS 2018は、FTTPドキュメント（文章）または電子メールドキュメント（文章）内で識別されたなんらかのドキュメント（文章）に対して電子透かし2860を付加することができる。例えば、IDS 2018は、PC 2864のIP送信元アドレスを含んでいるドキュメント（文章）に対して電子透かし(digital watermark) 2860を付加してもよい。
【０３３０】
RSP 2100内のDXP 2180は、前述したようにIPリンク2866を介して運ばれるさまざまなセッションコンテキスト2852を識別する。SPU 2200は、その際、識別されたセッションコンテキスト2852と関連しているさまざまなタイプのコンテンツ2862と関連しているトークンを生成してもよい。例えば、SPU 2200は、図３５と関連して前述したように、電子メール添付ファイルを含んでいるトークンを生成してもよい。RSP 2100は、電子メール添付ファイルに含まれているあらゆるドキュメント（文章）を検索する。
【０３３１】
第一の例では、DXP 2180は、外部のWAN 2850へと向けられるあらゆるIPパケットを識別してもよい。DXP 2180は、その際、SPU 2200に、パケットに含まれており、なおかつクレジットカード番号を含んでいるドキュメント（文章）をすべて検索するように命令する。クレジットカード番号が検出された場合、IDS 2018は、このクレジットカード番号を「X」の並びで置き換えて、クレジットカード情報を隠す。第二の例では、SPU 2200は、FTTPセッションまたは電子メールセッション内で検出されたドキュメント（文章）にデジタル透かし2860を付加してもよい。その後、修正されたクレジットカード情報や電子透かし情報を含むドキュメント(文章)は、FTTPセッションまたは電子メールセッションに対応する宛先アドレスへ送られる。
【０３３２】
同様の修正は、どのような識別されたセッションコンテキスト2852と関連しているどのようなタイプのコンテンツ2862に対しても行うことができる。例えば、特定のIP送信元アドレスまたはIP宛先アドレスは、別のIPアドレスへと変更することができ、その後このアドレスは、何らかの識別されたセッションコンテキスト2852またはセッションコンテンツ2862に従って、IPネットワークへ送り返される。
【０３３３】
図４６は、より効率的にデータを検索するためにコンテキスト自由文法（Context Free Grammar（CFG））を使用するプッシュダウンオートマトン（PushuDoown Automaton: PDA）エンジン3040の一例を示している。セマンティックテーブル3042は、様々なセマンティック状態を表す非終端（NT）シンボル3046を含んでいる。これらのシンボル3046は、PDAエンジン3040によって管理される。また各セマンティック状態3046は、一つまたは複数の対応するセマンティックエントリー3044を持っている。これらのセマンティックエントリー3044は、入力データ3014内に含まれているセマンティック要素3015と関連付けられている。入力データ3014の任意（arbitrary）部分3060は、現在の非終端シンボル3062と組み合わされ、セマンティックテーブル3042のエントリーに利用される。
【０３３４】
インデックス3054は、セマンティックテーブル3042によって出力される。このインデックス3054は、シンボル3062と入力データセグメント3060を組み合わせたものと一致（match）するエントリー3046、3044に対応する。セマンティック状態マップ3048は、PDAエンジン3040の次のセマンティック状態を表す次の終端シンボル3054を認識する（identify）。次の非終端シンボル3054は、スタック3052へプッシュされる。続いて、このシンボル3054は、入力データ3014の次のセグメント3060と組み合わせるために、スタック3052からポップされる。PDAエンジン3040は、対象の検索文字列（target search string）3016が検出されるまで入力データ3014の解析を続ける。
【０３３５】
まず、スタック3052は、PDAエンジン3040のセマンティック状態を、他のセマンティック状態の中にネストする（nest）ことを可能にする終端シンボルおよび非終端（NT）シンボルを含んでいてもよい。これにより、複数のセマンティック状態を単一の非終端シンボルによって表すことが可能となる。また、これは、PDAエンジン3040が管理しなければならない状態の数を大幅に少なくする。
【０３３６】
次に、図４６と４７に関して、通常、関連しているセマンティック要素が検出されるまでは、セマンティック状態の遷移（transition）はない。例えば、PDA 3040は、最初は、第一のセマンティック状態（SS1）3070で稼動し、完全な（entire）セマンティック要素「WWW.」が検出されるまでは、第二のセマンティック状態(SS2) 3072へ移行しない。同様に、PDAエンジン3040は、次のセマンティック要素「.ORG」が検出されるまでは、セマンティック状態(SS2) 3072のままでいる。このセマンティック要素が一つあれば、PDAエンジン3040は、セマンティック状態(SS2) 3072からセマンティック状態(SS3) 3074へ遷移する。それゆえ、PDAエンジン3040の特徴の一つは、入力データ3014内で検索される必要されるがあるセマンティック要素の数に対応するセマンティック状態3070、3072および3074の数である。
【０３３７】
逆に、図４６のPDAエンジン3040は、さらに長い文字列を検索するのにこれ以上のセマンティック状態を必要としないかもしれない。例えば、図４８は、PDAエンジン3040に、文字列「WWWW.XXXX.ORGG」を検索するように要求する別の検索（search）を示している。この例では、PDAエンジン3040は、第一のセマンティック要素「WWWW.」においてさらに一字「W」を検索し、第二のセマンティック要素「.ORGG」においてさらに一字「G」を検索するように要求される。図４８の新しい検索文字列に加えられた追加の文字によって、前に図４７において必要であったセマンティック状態3070、3072、3074の数は増えてはいない。
【０３３８】
PDAエンジン3040は、状態の分岐(state branching)を減らしたり、削除したりすることができる。PDAエンジン3040は、第二の「WWW.」文字列の可能性を、セマンティック要素「.ORG」を検索するセマンティック状態3072の中へネストすることで、これらのさらなる分岐状態を削除する。これは、図４７のパス3075によって表される。この場合、PDAエンジン3040は、第二の「WWW.」の可能性と、「.ORG」を検索している間、セマンティック状態3072のままでいる。
【０３３９】
PDAエンジン3040の他の態様では、実質的にセマンティックテーブル3042の複雑さに影響を与えたりそれを増加させることなく、追加の検索文字を加えることができる。図４９は、第三のセマンティック要素「.EXE」が、図４６のPDAエンジン3040によって実行される検索に加えられたものとして示されている。追加のセマンティック要素「.EXE」は、セマンティックテーブル3042に、追加のセマンティック状態3076を一つだけ加える。
【０３４０】
図４６のPDAアーキテクチャは、よりコンパクトで効率的な状態テーブルをもたらす。ここで言う状態テーブルは、さらなる検索基準が加えられた場合に、より予測しやすく、安定した線形的な状態の拡張を行えるものである。例えば、データ検索に新しい文字列が加えられた場合、全体のセマンティックテーブル3042は、書き換えられる必要はなく、増加分に対する追加の（incremental additional）セマンティック状態だけを必要とする。
【０３４１】
実施方法の例示（Example Implementation）
図５０−５４は、前に図４６において示したPDAエンジン3040によって実行されるPDAコンテキスト自由文法の例をより詳細に示している。まず図５０に関して、PDAエンジン3040がURL文字列「WWW.XXX.ORG」を検索するところに同一の検索例が用いられている。もちろん、これは一例に過ぎず、どのような文字列、または文字の組み合わせもPDAエンジン3040を用いて検索することができる。
【０３４２】
PDAエンジン3040は、セマンティックテーブル3042、セマンティック状態マップ3048およびスタック3052がすべて中央処理ユニット（CPU）によってアクセスされるメモリ内に配置されるように、ソフトウェア内で実行することもできるということに注意されたし。この通常目的のCPUは、その際、以下で説明するオペレーションを実施する。他の実施例では、以下で図４７と関連してより詳しく説明する再構成可能なセマンティックプロセッサ（RSP）を使用する。
【０３４３】
この例では、セマンティックテーブル3042を実施するためにコンテントアドレッサブルメモリ（CAM）が用いられる。他の実施例では、静的ランダムアクセスメモリ（SRAM）または動的ランダムアクセスメモリ（DRAM）を用いてもよい。セマンティックテーブル3042は、上述したように、セマンティック状態セクション3046へ分割される。このセマンティック状態セクション3046は、対応する非終端（NT）シンボルを収容することができる。この例では、セマンティックテーブル3042は、セマンティック状態を二つしか持っていない。セクション3046A内の第一のセマンティック状態は、非終端NT1により識別され、セマンティック要素「WWW.」と関連付けられている。セクション3046B内の第二のセマンティック状態は、非終端NT2により識別され、セマンティック要素「.ORG」と関連付けられている。
【０３４４】
セマンティックテーブル3042の第二のセクション3044は、入力データ3014内のセマンティック要素と対応している様々なセマンティックエントリーを収容している。同一のセマンティックエントリーは、同一のセマンティック状態セクション3046内に複数個存在していてもよい。例えば、セマンティックエントリーWWW.は、セマンティック要素「WWW.」が、入力データ3014内で現れるかもしれない異なる位置を特定するため、セクション3046A内の異なる位置に配置されてもよい。これは一例に過ぎず、PDAエンジン3040のオペレーションをさらに最適化するために使用される。別の実施例では、特定のセマンティックエントリーだけが一度だけ用いられ、入力データ3014を各異なるデータの位置を照合するためにシークエンス的に入力バッファ3061へ移させるようにしてもよい。
【０３４５】
セマンティックテーブル3042内の第二のセマンティック状態セクション3046Bは、効率的に2つのセマンティックエントリーを含んでいる。「ORG.」エントリーは、入力データ3014内の「ORG.」文字列を検出するのに用いられ、「WWW.」エントリーは、入力データ3014内にあるかもしれない第二の「WWW.」文字列を検出するのに用いられる。この場合も、複数の異なる「.ORG」および「WWW.」エントリーは、解析の最適化のために、セマンティックテーブル3042のセクション3046Bへ選択的に（optionally）ロードされる。単一の「WWW.」エントリーと、単一の「ORG.」エントリー（すなわち図５０に示されているものよりも少ないエントリー）を使用することも同様に可能である。
【０３４６】
この例では、セマンティック状態マップ3048は、三つの異なるセクションを含んでいる。一方で、これより少ないセクションを使用してもよい。次の状態セクション3080は、セマンティックテーブル3042内の一致したセマンティックエントリーを、PDAエンジンに使用される次のセマンティック状態へマッピングする。セマンティックエントリーポイント（SEP）セクション3078は、以下でより詳しく説明するセマンティックプロセッシングユニット（SPU）に対するマイクロ命令を起動するのに用いられる。このセクションはオプション的なものであり、PDAエンジン3040は、他のやり方では、次の状態セクション3080内で識別される非終端シンボルを用いて、次に入力データ3014に対して実行されるその他のオペレーションを決定する。
【０３４７】
例えば、非終端シンボルNT3がマップ3048から出力された場合、対応するプロセッサ（図示せず）は、入力データ3014内でURL文字列「WWW.XXX.ORG」が検出されたということを認識する。このプロセッサは、次に、プロセッサは、PDAエンジン3040がURLを認識した後、入力データ3014に対して要求されるその後のすべての処理を実行する。このように、SEPセクション3078は、PDAエンジン3040の最適化例の一つに過ぎず、含まれていても、含まれていなくてもよい。
【０３４８】
スキップバイトセクション3076は、入力データ3014から、次のオペレーションサイクルで、入力バッファ3061へ移す数バイトを識別する。一致全パーサエントリーテーブル（Match All Paser Entries Table: MAPT）3082は、セマンティックテーブル3042内に一致がない場合に用いられる。
【０３４９】
実行(Execution)
オペレーションシンボルの特別な末端「＄」はまず、最初の非終端NT1とともにスタック3052へプッシュされる。この非終端NT1は、URLを検索することと関連付けられている第一のセマンティック状態を表す。入力データ3014のNT1シンボルおよび第一のセグメント3060は、入力バッファ3061へロードされ、CAM 3090へ送られる。この例では、入力バッファ3061内のコンテンツは、CAM 3090内のどのエントリーとも一致しない。従って、CAM 3090によって生成されるポインタ3054は、MAPTテーブル3082内のデフォルトNT1エントリーをポイントする。デフォルトNT1エントリーは、PDAエンジン3040に、入力データ3014の次の１バイトを入力バッファ3061へ移すように命令する。PDAエンジン3040は、続いて、次の非終端NT1シンボルをスタック3052へプッシュする。
【０３５０】
図５１は、入力データ3014の次のバイトが入力バッファ3061へ移された後の、次のPDAサイクルを示している。第一のURLセマンティック要素3060A（「WWW.」）は、現在、入力バッファ3061内に収容されている。非終端シンボルNT1は再び、スタック3052からポップされ、入力バッファ3061内の入力データ3060と組み合わされる。入力バッファ3061とセマンティックテーブル3042のコンテンツを比較すると、NT1エントリー3042Bで一致が生じる。テーブルエントリー3042Bと関連付けられているインデックス3054Bは、セマンティック状態マップエントリー3048Bをポイントする。エントリー3048B内の次の状態は、非終端シンボルNT2を含んでいる。この非終端シンボルNT2は、次のセマンティック状態への遷移を表す。
【０３５１】
マップエントリー3048Bは、次の解析サイクルに関して入力データ3014を移すためにPDAエンジン3040が必要とするバイト数も識別する。この例では、「WWW.」文字列が、入力バッファ3061内の最初4バイト内で検出されるので、エントリー3048B内のスキップバイト値は、PDAエンジン3040に、次の（another）8バイトを入力バッファ3061へ移すように命令する。スキップバイト値は、ハードウェアに依存しており、セマンティックテーブル3042のサイズにより異なることがある。もちろん、これより大きい幅のセマンティックテーブルもしくは、これより小さい幅のセマンティックテーブルを有している別のハードウェア実施例が、使用されてもよい。
【０３５２】
図５２は、入力データ3014の次の8バイトが入力バッファ3061へ移された後の、次のPDAエンジン3040のサイクルを示している。同様に、新しいセマンティック状態NT2は、スタック3052へプッシュされ、その後スタック3052からポップされ、入力データ3014の次のセグメントと組み合わされる。入力バッファ3061内のコンテンツは、再びセマンティックテーブル3042に入れられる。PDAサイクルでは、入力バッファ3061内のコンテンツは、セマンティックテーブル3042内のどのセマンティックエントリーとも一致しない。従って、NT2状態に対するデフォルトポインタ3054Cは、MAPT 3082内の対応するNT2エントリーをポイントする。このNT2エントリーは、PDAエンジン3040に、次の（additional）１バイトを入力バッファ3061に移し、同一のセマンティック状態NT2をスタック3052へプッシュするように命令する。
【０３５３】
図５３は、入力データ3014の次のバイトが入力バッファ3061へ移された後の、次のPDAサイクルを示している。この例では、入力バッファ3061内のコンテンツとセマンティックテーブル3042内のNT2エントリーとの間にはまだ一致はない。従って、セマンティック状態NT2に対するデフォルトポインタ3054Cは、再びMAPT 3082内のNT2エントリーをポイントする。テーブル3082内のデフォルトNT2エントリーは、PDAエンジン3040に、入力データ3014からの次のバイトを入力バッファ3061へ移し、かつ別のNT2シンボルをスタック3052へプッシュするように命令する。最後の2つのPDAサイクル（図５２および５３）の間は、非終端NT2によって表されるセマンティック状態の遷移はないということに注意されたし。そのため、たとえ、PDAエンジン3040が第二のセマンティック要素「.ORG」のうちの最初の三文字である「.OR」を受信したとしても状態の遷移はない。
【０３５４】
図５４は、入力バッファ3061内のコンテンツがセマンティックテーブル3042内のNT2エントリー3042Dと一致している次のPDAサイクルを示している。対応するポインタ3054Dは、セマンティック状態マップ3048内のエントリー3048Dをポイントする。この例では、エントリー3048Dは、次のセマンティック状態NT3へマッピングを行うことで、URL「WWW.XXX.ORG」が検出されたということを示す。PDAエンジン3040は、完全なセマンティック要素「.ORG」が検出されるまではセマンティック状態NT3へ遷移しないということに注意されたし。
【０３５５】
マップエントリー3048Dはまた、場合によっては（optionally）セマンティックプロセッシングユニット（SPU）(図５５参照)によって実行されるマイクロ命令を起動するポインタSEP1も含んでいる。このマイクロ命令は、検出されたURLに対応するさらなるオペレーションを入力データ3014に対して実行するためのものである。例えば、SPUは、以下の同時継続出願で説明されているようにファイヤーウォールオペレーション、ウィルス検出オペレーションなどを実行するために、これ以降の（additional）入力データ3014を他から離して（peel off）もよい。ここでいう同時継続出願とは、2005年7月21日に出願された「ネットワークインターフェイスおよびファイヤーウォールデバイス」という発明の名称のアメリカ特許出願No.11/187,049と、2005年5月9日に出願された「侵入検知システム」という発明の名称のアメリカ特許出願No.11/125,956のことである。これらはともに、引用することにより、その内容が本出願に組み入れられているものとする。
【０３５６】
マップエントリー3048Dは、SPUに対するSEPマイクロ命令を起動するのと同時に、PDAエンジン3040に、非終端NT3によって表される新しいセマンティック状態をスタック3052へプッシュするように命令してもよい。これによって、PDAエンジン3040に、検出されたURL3016に続く入力データ3014内の他のセマンティック要素に対して、別の検索を開始させてもよい。例えば、図４９に示すように、PDAエンジン3040は、PDAエンジン3040は、入力データ3014に含まれているかもしれない実行ファイルと関連しているセマンティック要素「.EXE」の検索を開始してもよい。また、前述したように、新しいセマンティック要素「.EXE」を検索するには、PDAエンジン3040が追加のセマンティック状態をセマンティックテーブル3042に追加することだけが必要となる。
【０３５７】
また、前述したように、PDAエンジン3040は、解析されたデータアイテムそれぞれに対して別々の状態を維持しなければならないということはない。状態は、異なるセマンティック要素間の遷移に対してだけ維持される。例えば、図５０、５２および５３は、セマンティックテーブル3042内のセマンティックエントリーのいずれとも完璧には一致しないデータ入力を示している。これらの状況では、PDAエンジン3040は、一致しないデータ文字列に対して何らかの状態を維持する（retain）ことなくデータの解析を続ける。
【０３５８】
また、図４６−４８と関連して前述したように、PDAエンジン3040内のセマンティック状態は、検索文字列の長さとは実質的に無関係である。例えば、「WWW.」の代わりにより長い検索文字列「WWWW.」を検索することは、単に、セマンティックテーブル3042内のセマンティックエントリー「WWW.」を、長いセマンティックエントリー「WWWW.」に置き換え、それに従ってマップ3048内のスキップバイト値を調整する（adjust）だけで実行可能である。
【０３５９】
再構成可能なセマンティックプロセッサ（RSP）
図５５は、ある実施例において、前述したプッシュダウンオートマトン（PDA）エンジン3040を実施するのに用いられている再構成可能なセマンティックプロセッサ（RSP）2100のブロック図を示している。このRSP 3100は、入力ポート3120を介して受信されるパケットデータストリームをバッファするための入力バッファ3140と、出力ポート3152を介して出力されるパケットデータストリームをバッファするための出力バッファ3150と、を有している。
【０３６０】
直接実行パーサ（DXP）3180は、PDAエンジン3040を利用しかつ、入力バッファ3140において受信されるパケットまたはフレーム（例えば入力「ストリーム」）と、出力バッファ3150へ出力されるパケットまたはフレーム（例えば、出力「ストリーム」）と、再循環バッファ3160内で再循環されるパケットまたはフレーム（例えば、再循環「ストリーム」）の処理を制御する。入力バッファ3140、出力バッファ3150および再循環バッファ3160は、先入れ先出し(FIFO)バッファであるのが好ましい。
【０３６１】
また、DXP 3180は、セマンティックプロセッシングユニット（SPU）3200によってパケットの処理を制御する。このセマンティックプロセッシングユニット（SPU）は、バッファ3140、3150および3160とメモリサブシステム3215間でのデータの転送を制御する。メモリサブシステム3215は、入力ポート3120から受信したパケットを格納し、また、以下の同時継続出願において記載されている統合型ポリシー管理（UPM）、ファイヤーウォール、ウイルス検出およびその他の何らかのオペレーションのために用いられるアクセス制御リスト（ACL）をCAM 3220内に格納する。
【０３６２】
ここでいう同時継続出願とは、2005年7月21日に出願された「ネットワークインターフェイスおよびファイヤーウォールデバイス(“NETWORK INTERFACE AND FIREWALL DEVICE”)」という発明の名称のアメリカ特許出願No.11/187,049と、2005年5月9日に出願された「侵入検知システム(“INTRUSION DETECTION SYSTEM”)」という発明の名称のアメリカ特許出願No.11/125,956のことである。これらはともに、引用することにより、その内容が本出願に組み入れられているものとする。
【０３６３】
RSP 3100は、所定のPDAアルゴリズムを実行するために少なくとも三つのテーブルを用いる。生成規則3176を検索するためのコード3178は、パーサテーブル（PT）3170内に格納される。ある実施例では、パーサテーブル3170は、図４６に示すセマンティックテーブル3042を収容している。文法生成規則3176は、生成規則テーブル（PRT）3190内に格納される。生成規則テーブル3190は、例えば、図４６に示すセマンティック状態マップ3048を収容してもよい。SPU 3200によって実行されるコードセグメント3212は、セマンティックコードテーブル（SCT）3210内に格納される。これらのコードセグメント3212は、図５０−５４に示すセマンティック状態マップ3048内のSEPポインタ3078に従って起動されてもよい。
【０３６４】
パーサテーブル3170内のコード3178は、行列（row-column）フォーマットやコンテントアドレッサブル（content addressable）フォーマットなどのやり方で格納される。行列（row-column）フォーマットでは、パーサテーブル3170の行は、内部パーサスタック3185によって提供される非終端コードＮＴ 3172によりインデックス付けされ、パーサテーブル3170の列は、入力バッファ3140内のデータの先頭から抽出される入力データ値DI[N]3174によりインデックス付けされる。コンテントアドレッサブル（content addressable）フォーマットでは、図５０−５４の入力バッファ3061によって示されるように、パーサスタック3185からの非終端コード3172と入力バッファ3140からの入力データ値3174を連結したものが、パーサテーブル3170に対する入力をなす。
【０３６５】
生成規則テーブル3190は、パーサテーブル3170からのコード3178によってインデックス付けされる。テーブル3170と3190は、パーサテーブル3170に対するクエリが、非終端コード3172および入力データ値3174に適用可能な生成規則3176を直接送り返すようにリンクされてもよい。DXP 3180は、パーサスタック3185の一番上にある非終端コードを、PRT 3190から送り返された生成規則（PR）3176と取り替え、その後入力バッファ3140からのデータの解析を続ける。
【０３６６】
セマンティックコードテーブル3210もまた、パーサテーブル3170により生成されたコード3178か、生成規則テーブル3190により生成された生成規則3176、もしくはその両方によってインデックス付けされる。通常、解析結果は、所定の生成規則3176に対してSPU 3200がセマンティックコードテーブル3210からのセマンティックエントリーポイント（SEP）ルーチン3212をロードしかつ実行すべかどうかを、DXP 3180が検出することを可能にする。
【０３６７】
SPU 3200は、コンテキストシンボルによるアドレス化が可能なように構成された（structured）メモリインターフェイスを提供するメモリサブシステム3215に対するいくつかのアクセスパスを有する。メモリサブシステム3215、パーサテーブル3170、生成規則テーブル3190およびセマンティックコードテーブル3210は、内臓メモリか、外部メモリデバイス（例えば、同期動的ランダムアクセスメモリ（DRAM）やコンテントアドレッサブルメモリ（CAM））を用いるか、もしくはこれらのリソースを組み合わせて用いる。各テーブルまたはコンテキストは、一つまたは複数の他のテーブルまたはコンテキストを有する共有物理メモリ領域に、コンテキストインターフェイスを提供するだけでよい。
【０３６８】
管理（maintenance）中央演算処理装置（MCPU）3056は、SPU 3200とメモリサブシステム3215の間に接続される。MCPU 3056は、RSP 3100にとって望ましい機能の中で、従来のソフトウェアとハードウェアによって無理なく遂行できるものを実行する。これらの機能は、通常、あまり使われずかつ最優先で実行されるものではない（時間的に重要でない）機能であり、その機能の複雑性からSCT 210内に含めるようなものではない。また、MCPU 3056は、SPU 3200に、MCPUの代わりにタスクを実行するようにリクエストする機能を持っているのが好ましい。
【０３６９】
メモリサブシステム3215は、ハッシュ機能（ハッシング関数）またはコンテントアドレッサブルメモリ（CAM）検索を介してDRAM 3280内のデータにアクセスするためのアレイマシンコンテキストデータメモリ（AMCD）3230を有している。暗号処理ブロック3240は、データの暗号化や、復号化や、認証を行い、コンテキスト制御ブロックキャッシュ3250は、DRAM 3280へのコンテキスト制御ブロックをキャッシュするとともに、DRAM 3280からのコンテキスト制御ブロックをキャッシュする。通常キャッシュ3260は、基本演算において使用されるデータをキャッシュし、ストリーミングキャッシュ3270は、データストリームがDRAM 3280へ書き込まれている間と、データストリームがDRAM 3280から読み出されている間に、これらのデータストリームをキャッシュする。コンテキスト制御ブロックキャッシュ3250は、ソフトウェア制御のキャッシュであるのが好ましい。すなわち、いつキャッシュラインが使用され、いつ開放されるのかをSPU 3200が決定するのが好ましい。サーキット3240、3250、3260および3270はすべて、DRAM 3280とSPU 3200の間に接続される。TCAM 3220は、AMCD 3230とMCPU 3056の間に接続され、ファイヤーウォールや、統合型ポリシー管理や、他の侵入検知オペレーションを実行するために用いられるかもしれないアクセス制御リスト（ACL）テーブルおよびその他のパラメーターを含んでいる。
【０３７０】
より詳細な、RSP 3100の機能ブロックに対する設計最適化は、2003年1月24日に出願された「再構成可能なセマンティックプロセッサ」という発明の名称の同時係属のアメリカ特許出願No. 10/351,030に記載されている。この特許出願は、これを引用することにより、その内容が本出願に組み入れられているものとする。
【０３７１】
パーサテーブル(Parser Table)
図４６−５４と関連して前述したように、パーサテーブル3170はコンテントアドレッサブルメモリ（CAM）として実施され、NTコード2172および入力データ値DI[n] 2174は、CAMがPRT 3190内の生成規則に対応するPRコード3178を検索するための鍵として用いられてもよい。CAMは、TCAMエントリーが格納された(populated with TCAM entries)三値（ternary）CAM(TCAM)であるのが好ましい。各TCAMエントリー（entry）は、NTコードとDI[n]適合値（DI[n] match value）を含む。各NTコードは、複数のTCAMエントリーを保持することができる。DI[n] 適合値（DI[n] match value）の各ビットは、「0」、「1」または「X」に設定することができる。この「X」は「無視（Don't Care）」を表す。この機能により、PRコードは、パーサテーブル3170が適合(match)を見つけるために、DI[n] 2174の数ビットまたは数バイトだけがコード化されたパターンと適合することを必要とする。例えば、TCAMのある行は、IP宛先アドレスフィールドに関するNTコードNT_IPを含んでおり、その後にセマンティックプロセッサを内蔵しているデバイスに対応するIP宛先アドレスを表す4バイトが続くかもしれない。このTCAM行の残りの4バイトは「無視（Don't Care）」に設定される。こうして、NT_IPと、8バイトのDI[8]と、がパーサテーブル3170に提示された際、DI[8]の最初の4バイトが正しいIPアドレスを含んでいれば、DI[8]の終わりの4バイトが何を含んでいても適合が生じることとなる。
【０３７２】
TCAMは、「無視（Don't Care）」機能を採用しており、一つのNTに対し複数のTCAMエントリーがあってよいので、TCAMは所定のNTコードおよびDI[n]適合値に対して、複数の適合する（matching）TCAMエントリーを見つけることができる。TCAMは、そのハードウェア全体でこれらの適合（match）に優先順位をつけ（prioritize）、そこで最優先された適合（match）のみ出力する。さらに、NTコードおよびDI[n] 適合値（DI[n] match value）がTCAMに提示された場合、TCAMは、並列処理的にすべてのTCAMエントリーを受け取ったNTコード及びDI[n]適合値と適合させることを試みる。そのため、TCAMは、セマンティックプロセッサ3100の一回のクロックサイクルにおいて、パーサテーブル3170内に適合が見つかったかどうかを判定する機能を持つ。
【０３７３】
このアーキテクチャ（構造）の他の見方には、「可変先読み（variable look-ahead）」パーサとして見る見方がある。TCAMには一定のデータ入力セグメント（例えば8バイト）が入力されるが、TCAMのコード化により、次の生成規則（または図４６−５４と関連して説明したようなセマンティックエントリー）が現在の8バイトの入力のいずれかの部分に基づいて生成されることを可能にする。入力ストリームの先頭の部分にある現在の8バイト内のいずれかの部分にある１ビットまたは１バイトのみが現在の規則に対して関係を持つ場合、TCAMエントリーは、照合の間、残りを無視するようにコード化してもよい。本質的に、現在の「シンボル」は、所定の生成規則に対して、入力ストリームの先頭の部分の64ビットの何らかの組み合わせで定義することができる。一般的に、理にかなったコード化を行うことで、解析サイクルの回数と、NTコード数と、テーブルエントリーの数は、所定の解析タスクに関して減らすことができる。
【０３７４】
TCAMによる生成規則テーブル3170の実施は、以下の同時継続出願においてさらに詳しく説明される。ここで言う同時継続出願とは、2005年7月14日に出願された「CAMおよびSRAMを用いたパーサテーブル/生成規則テーブルの構成（PARSER TABLE/PRODUCTION RULE TABLE CONFIGURATION USING CAM AND SRAM）」という発明の名称のアメリカ特許出願No.11/181,527のことであり、これはすべて引用することにより、その内容が本出願に組み入れられているものとする。
【０３７５】
上述したシステムは、前記オペレーションのすべてあるいはいくつかを行う専用のプロセッサシステムや、マイクロコントローラや、プログラマブル論理装置を使用することができる。また、上述したオペレーションのいくつかは、ソフトウェアで実行してもよく、またその他のオペレーションはハードウェアで実行してもよい。
【０３７６】
便宜上、オペレーションは、相互接続された機能ブロックまたは区別できるソフトウェアモジュールとして説明されている。しかし、これは必ずしもこうでなければならないというわけではなく、これらの機能ブロックまたはモジュールが等価に、一つの論理デバイスや、プログラムや、オペレーションへ境界があいまいな形で統合されるというケースがあってもよい。どのような場合おいても、前述した機能ブロックおよびソフトウェアモジュールや、フレキシブルなインターフェイスの特徴は、それらだけで実施しても、他のオペレーションと組み合わせて、ハードウェアもしくはソフトウェアで実施してもよい。
【０３７７】
本発明の好ましい実施例で、本発明の本質について記載しかつ説明したので、本発明は、その本質から逸脱することなくその構成と詳細において変更してもよいということを理解されたい。我々は、請求項の精神および範囲を逸脱しないようなすべての変更および変形をクレームする。
【図面の簡単な説明】
【０３７８】
【図１】再構成可能なセマンティックプロセッサ（RSP）を用いているネットワーク処理デバイスのブロック図である。
【図２Ａ】前記RSPをより詳しく示すブロック図である。
【図２Ｂ−２Ｃ】前記RSP内で用いられているパーサテーブルと生成規則テーブルを示すより詳細な図である。
【図３】どのようにしてサービス妨害（DoS）攻撃がネットワーク処理デバイスを無効化するのかを示している図である。
【図４】どのようにしてファイヤーウォールがDoS攻撃を異なるゾーンと関連付けるのかを示している図である。
【図５】図４に示されているファイヤーウォールのより詳細な図である。
【図６】どのようにしてファイヤーウォール内のメモリが異なるジェネレーションに分割されているかを示す図である。
【図７】図６に示す異なるジェネレーションの間でどのようにファイヤーウォールが動作するかをフローチャートである。
【図８】図５のファイヤーウォールがどのようにしてDoS攻撃を処理するかを示すフローチャートである。
【図９】図２Ａに示すRPSがDoS攻撃を処理するためにどのように構成されているかを示すブロック図である。
【図１０】図９に示すRSPがどのように候補パケットを処理するのかを示すフローチャートである。
【図１１】図９に示すRSPがどのように候補パケットを処理するのかを示すフローチャートである。
【図１２】独立して動作するファイヤーウォールとルーティング装置を示すブロック図である。
【図１３】統合型ルーティングおよびファイヤーウォールポリシーマネージメント(UPM)を提供するパケット処理アーキテクチャを示す図である。
【図１４】アクセスコントロールリスト(ACL)テーブルにおけるサンプルエントリーを示す図である。
【図１５】どのようにして図１３のパケットプロセッサがUPMを提供するかを示すフローチャートである。
【図１６】上層レイヤーのパケット特性に基づいて送信アクションを提供するUPMテーブルのもう1つの例を示すブロック図である。
【図１７】どのようにして統合型UPMが異なるリソースロケーター(URL)の値にしたがってパケットをルートするのに使用することができるのかの一例を示すブロック図である。
【図１８】RSPにおいてどのようにして統合型ポリシーマネージメントが実行されるかの一例を示すブロック図である。
【図１９】どのようにして図１８のRSPが動作するかを示すフローチャートである。
【図２０】どのようにしてRSPがネットワークアドレス変換(NAT)やポートアドレス変換(PAT)に用いられるのかを示す図である。
【図２１】どのようにしてRSPがNAT/PAT変換およびIPパケット変換用に構成されているかを示すより詳細な図である。
【図２２】どのようにしてRSPがNTA/PAT変換を実行するかを示すフローチャートである。
【図２３】どのようにしてRSPがNTA/PAT変換を実行するかを示すフローチャートである。
【図２４】どのようにしてRSPがIPv4とIPv6との間でパケットを変換するかを示す図である。
【図２５】どのようにしてRSPがIPv4とIPv6との間でパケットを変換するかをより詳細に示すフローチャートである。
【図２６】どのようにしてRSPが仮想私的ネットワーク(VPN)の統合に用いられるかを示す図である。
【図２７】どのようにしてRSPが仮想私的ネットワーク(VPN)の統合に用いられるかを示す図である。
【図２８】どのようにしてファイヤーウォールがアンティ−ウィルスライセンスを異なるサブネットワークに割り当てるかを示す図である。
【図２９】どのようにしてファイヤーウォールがアンティ−ウィルスライセンスを異なるサブネットワークに割り当てるかを示す図である。
【図３０】どのようにして多数のRSPが分散型ファイヤーウォール処理のために一体に接続されているかを示す図である。
【図３１】どのようにして多数のRSPが分散型ファイヤーウォール処理のために一体に接続されているかを示す図である。
【図３２Ａ】私的ネットワークで実行される進入検出システム(IDS)を示すブロック図である。
【図３２Ｂ】従来の進入検出システム(IDS)の限界を示すブロック図である。
【図３２Ｃ】データストリームにおける構文要素を識別するとともに脅威を識別するために該構文要素を用いる図３２Ａの進入検出システム（IDS）の一実施例を示す図である。
【図３３】再構成可能なセマンティックプロセッサ(RSP)を用いて、どのように進入検出システム(IDS)が実行されるかを示すブロック図である。
【図３４】どのように図３３の進入検出システム(IDS)が動作するかを示すフローチャートである。
【図３５】図３３に示す進入検出システム(IDS)詳細なブロック図である。
【図３６】図３３に示す再構成可能なセマンティックプロセッサ(RSP)のブロック図である。
【図３７】どのようにしてRSPの直接実行パーサ(DXP)が電子メールメッセージを含むパケットを識別するかを示す図である。
【図３８】どのようにしてRSPの直接実行パーサ(DXP)が電子メールメッセージを含むパケットを識別するかを示す図である。
【図３９】どのようにしてRSPが脅威フィルタをデータストリームに適用するかを示すフローチャートである。
【図４０】どのようにしてRSPがセッションルックアップを行うのかを示すフローチャートである。
【図４１】どのようにしてRSPが入力ストリームからトークンを生成するのかを示すフローチャートである。
【図４２Ａ】どのようにしてRSPが進入検出オペレーションの前にフラグメント化されたパケットを再構築するのかを示すフローチャートである。
【図４２Ｂ】どのようにしてRSPが進入検出オペレーションの前にTCPパケットの再並び替えをするのかを示すフローチャートである。
【図４３】どのようにして中央進入検出器が異なるネットワーク処理デバイスから生成されたトークンを相互に関連付けるのかを示す図である。
【図４４】どのようにして中央進入検出器が異なるネットワーク処理デバイスから生成されたトークンを相互に関連付けるのかを示すフローチャートである。
【図４５】どのようにしてIDSがデータストリームからの情報の修正あるいは情報の除去のために用いられるのかを示す図である。
【図４６】PDA (PushDown Auomaton)エンジンを示す図である。
【図４７】どのようにして図４６のPDAエンジンがURLサーチを行うのかを示すセマンティック状態図である。
【図４８】どのようにしてPDAエンジンが長い文字列をサーチするために同じ数のセマンティック状態を用いるのかを示すセマンティック状態図である。
【図４９】どのようにしてPDAエンジンがさらなるセマンティック要素をサーチするために1つのさらなるセマンティック状態を使用するだけなのかを示す図である。
【図５０】どのようにしてPDAエンジンがURLサーチを行うかの例を示す詳細な図である。
【図５１】どのようにしてPDAエンジンがURLサーチを行うかの例を示す詳細な図である。
【図５２】どのようにしてPDAエンジンがURLサーチを行うかの例を示す詳細な図である。
【図５３】どのようにしてPDAエンジンがURLサーチを行うかの例を示す詳細な図である。
【図５４】どのようにしてPDAエンジンがURLサーチを行うかの例を示す詳細な図である。
【図５５】再構成可能なセマンティックプロセッサ(RSP)において、どのようにしてPDAエンジンが実行されるかを示す詳細な図である。
【図１】
2008524965.tif 000003
【図２Ａ】
2008524965.tif 000004
【図２Ｂ】
2008524965.tif 000005
【図２Ｃ】
2008524965.tif 000006
【図３】
2008524965.tif 000007
【図４】
2008524965.tif 000008
【図５】
2008524965.tif 000009
【図６】
2008524965.tif 000010
【図７】
2008524965.tif 000011
【図８】
2008524965.tif 000012
【図９】
2008524965.tif 000013
【図１０】
2008524965.tif 000014
【図１１】
2008524965.tif 000015
【図１２】
2008524965.tif 000016
【図１３】
2008524965.tif 000017
【図１４】
2008524965.tif 000018
【図１５】
2008524965.tif 000019
【図１６】
2008524965.tif 000020
【図１７】
2008524965.tif 000021
【図１８】
2008524965.tif 000022
【図１９】
2008524965.tif 000023
【図２０】
2008524965.tif 000024
【図２１】
2008524965.tif 000025
【図２２】
2008524965.tif 000026
【図２３】
2008524965.tif 000027
【図２４】
2008524965.tif 000028
【図２５】
2008524965.tif 000029
【図２６】
2008524965.tif 000030
【図２７】
2008524965.tif 000031
【図２８】
2008524965.tif 000032
【図２９】
2008524965.tif 000033
【図３０】
2008524965.tif 000034
【図３１】
2008524965.tif 000035
【図３２Ａ】
2008524965.tif 000036
【図３２Ｂ】
2008524965.tif 000037
【図３２Ｃ】
2008524965.tif 000038
【図３３】
2008524965.tif 000039
【図３４】
2008524965.tif 000040
【図３５】
2008524965.tif 000041
【図３６】
2008524965.tif 000042
【図３７】
2008524965.tif 000043
【図３８】
2008524965.tif 000044
【図３９】
2008524965.tif 000045
【図４０】
2008524965.tif 000046
【図４１】
2008524965.tif 000047
【図４２Ａ】
2008524965.tif 000048
【図４２Ｂ】
2008524965.tif 000049
【図４３】
2008524965.tif 000050
【図４４】
2008524965.tif 000051
【図４５】
2008524965.tif 000052
【図４６】
2008524965.tif 000053
【図４７】
2008524965.tif 000054
【図４８】
2008524965.tif 000055
【図４９】
2008524965.tif 000056
【図５０】
2008524965.tif 000057
【図５１】
2008524965.tif 000058
【図５２】
2008524965.tif 000059
【図５３】
2008524965.tif 000060
【図５４】
2008524965.tif 000061
【図５５】
2008524965.tif 000062
【国際調査報告】
2008524965.tif 000063
2008524965.tif 000064
2008524965.tif 000065