(57)【要約】【課題】異常に大量のFragmentパケットに基づくメモリの枯渇とバックプレッシャを回避する。【解決手段】Fragmentパケットのリアセンブル処理回路２の前段にセレクタ１を設け、Non-Fragmentパケットはリアセンブル処理回路をバイパスすることで、リアセンブル処理回路２のメモリ枯渇による影響を受けずに受信動作が行える。また、リアセンブル処理回路２のセグメント管理テーブルに受信パケットカウンタを備え、更に閾値レジスタを設けて、閾値を超えるパケットは不正攻撃パタンと判定して廃棄する。セレクタ１はパケット多重化回路３からのバックプレッシャのみをパケット発信元へ出力する。【選択図】図１
2007267051.tif 000002
【特許請求の範囲】
【請求項１】
受信するパケットがFragmentパケットか否かの判定処理を行うFragmentセレクタ回路と、
前記判定処理の結果によりFragmentパケットと判定されたパケットが前記Fragmentセレクタ回路から送付されると、リアセンブルメモリに格納し、全パケットの到着を待って元のパケットにリアセンブルするリアセンブル処理回路と、
前記判定処理の結果によりNon-Fragmentパケットと判定されたパケットが前記Fragmentセレクタ回路から前記リアセンブル処理回路をバイパスして送付されると、前記リアセンブル処理回路から送付されるFragmentパケットとNon-Fragmentパケットの入力に対する送信調停処理を行い、後段のモジュールにパケットを出力するパケット多重回路を有することを特徴とするパケット受信回路。
【請求項２】
前記Fragmentセレクタ回路は、前記パケット多重回路を経由して前記後段モジュールからのバックプレッシャ信号を受けるとパケット発信元へ出力し、前記リアセンブル処理回路はバックプレッシャ信号を前記Fragmentセレクタ回路へ出力しないことを特徴とする請求項１記載のパケット受信回路。
【請求項３】
前記Fragmentセレクタ回路は、
受信されたパケットをそのまま逐次入力するヘッダ解析用バッファと、
前記ヘッダ解析用バッファに入力されたパケットのIPヘッダ情報を解析し、DFレコードがFragmentを禁止し、またはMFレコードが次パケットの不存在を示し、かつFOレコードが先頭パケットであることを示している場合はNon-Fragmentパケットと判定して前記パケット多重化回路３へ、その他の場合はFragmentパケットと判定して前記リアセンブル処理回路へそれぞれ送付する送信先セレクタ回路を備えることを特徴とする請求項１または請求項２記載のパケット受信回路。
【請求項４】
前記リアセンブル処理回路は、
前記Fragmentセレクタ回路から入力されたFragmentパケットを格納するリアセンブルメモリと、
前記リアセンブルメモリに格納されたFragmentパケットの属するセグメント毎に、格納されたFragmentパケットの数をカウントするパケットカウンタが設けられたセグメント管理テーブルと、
前記カウンタのカウント値に対する閾値が設定される閾値レジスタを備え、
前記カウント値が前記閾値を超えると、前記リアセンブルメモリに格納されている当該セグメントのFragmentパケットを廃棄すると共に、前記セグメント管理テーブルのレコードも抹消することを特徴とする請求項１ないし請求項３のいずれかに記載のパケット受信回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット受信回路、特に、交換器・レイヤ3スイッチ、ルータなどの通信装置における大量のフラグメント（Fragment）パケットによる攻撃を防御するパケット受信回路に関する。
【背景技術】
【０００２】
通信経路間で転送されるパケット長が、ある通信経路間で規定されているパケット長より長い場合、複数のパケットに分割される。この分割されたFragmentパケットは、組み立て機能(リアセンブル機能)を実装している、交換機，レイヤ2，3スイッチ，ルータなどの通信装置におけるリアセンブル処理回路で元のパケットに組み立てられる。
【０００３】
図８は、このようなリアセンブル処理のイメージを示す（文献公知発明に係るものではない）。到着したFragmentパケットは、IP-Fragmentの場合、IPヘッダのMF(More Fragment)ビットが「0」の場合のFO（Fragment Offset）情報でリアセンブル後のパケット長を決定し、そのパケット長分のデータの到着管理を行っている。図８では、Fragmentパケットに対するFO情報「a」によって、そのFragmentパケットの格納位置が指定され、その格納位置からパケット長のデータが未到着セグメントに宛がわれることを示している。
【０００４】
図９は上記のようなリアセンブル処理を行う従来のリアセンブル処理回路の詳細を示す。この回路では、到着したパケットはリアセンブルメモリ７に格納され、その管理がセグメント管理テーブル６によってセグメント毎に行なわれる。セグメント管理テーブル６では、IP-Fragmentパケットの場合、送信元IPアドレス(IP-SA)，宛先IPアドレス(IP-DA)およびID(IP-ID)によって、リアセンブルすべきFragmentパケット(同一セグメントのパケット)であることを区別し、到着管理（到着または未到着の管理）とリアセンブルメモリ６に格納したパケットのポインタを管理する。図９では、セグメントαのパケットａ，ｂと、セグメントβのパケットｃ，ｄ，ｅがリアセンブルメモリ７に格納されている状態下において、セグメントβのパケットｆを受信し、リアセンブルメモリ７に格納しようとしている状態を示している。
【０００５】
セグメント管理テーブル６にて、全てのFragmentパケットが揃ったと判断された場合、パケットはリアセンブル完了として出力される。一方、Fragmentパケットの一部が中継経路の途中で消失した場合の対策として、タイマー監視機能を設け、タイムアウト処理を行うことで、同一セグメント内のパケットを廃棄することで、リアセンブルメモリ７内のFragmentパケットの滞留を防いでいる。
【０００６】
また、パケット受付け時にパケットを構成するセル数だけカウント数を上昇させるカウンタ装置を設け、パケットの先頭のセルが到着した際、カウント数と当該パケット構成するセル数の和がバッファの閾値以下の場合は当該パケットを受け付けてバッファに転送し、カウント数と当該パケット構成するセル数の和がバッファの閾値を超えた場合には当該パケットの受付を拒否し、先頭セルおよび当該パケットを構成する後続セルを全ては廃棄し、カウント数を変化させないようにした技術が知られている（例えば、特許文献１参照）。
【０００７】
【特許文献１】特開平09-214501号公報（第１頁、図３）
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した従来技術（図８，図９）では、同一セグメントに属するFragmentパケットの数に規定は設けられておらず、また、Fragment Offsetが同じパケットについても制限は設けられていないため、Fragment Offsetを操作して、全Packetが揃わないようにパケットを送信するような攻撃パタンでは、タイマーでタイムアウトされるまでは、パケットを受信し続けてしまいリアセンブルメモリが枯渇する。または、不正な攻撃パタンによってリアセンブルメモリが枯渇する場合であっても、バックプレッシャが作動し正常パケットの受信動作に支障をきたすという問題点がある。
【０００９】
図１０は、Fragment Offsetが同じ値のパケットを受信し続けている例を示す。タイムアウト値を短縮すると、正常処理も廃棄対象となる可能性が出てくるため、タイムアウト間隔の短縮は解決法とはできない。一方、同一セグメント内に限らず、通信経路の途中で、Fragmentパケットの一部が消失するようなケースが連続で発生した場合も、攻撃パタンでは無いにせよ、タイムアウト処理が実行されるまでは、リアセンブルメモリ内にパケットを滞留するためメモリ枯渇の要因となる。通信経路では殆どの場合において、FragmentパケットよりもFragmentされてないパケット（Non-Fragmentパケット）の割合が高いが、上記のケースの場合、Non-Fragmentパケットの受信動作も停止してしまう。
【００１０】
また、特許文献１記載の技術では、FragmentパケットとNon-Fragmentパケットの別を問わず、一律にセルの受付と受付拒否を行なうため、不正なフラグメントパケットの大量送信による攻撃によって、Non-Fragmentパケットが不当に受付拒否されてしまうという問題点がある。
【００１１】
そこで、本発明の目的は、Fragmentパケットの大量送信による攻撃によって引き起こされるメモリ枯渇や正常パケットの受信処理の妨害を回避することができるパケット受信回路を提供することにある。
【課題を解決するための手段】
【００１２】
本発明のパケット受信回路は、受信するパケットがFragmentパケットか否かの判定処理を行うFragmentセレクタ回路（図１の１）と、判定処理の結果によりFragmentパケットと判定されたパケットがFragmentセレクタ回路から送付されると、リアセンブルメモリに格納し、全パケットの到着を待って元のパケットにリアセンブルするリアセンブル処理回路（図１の２）と、判定処理の結果によりNon-Fragmentパケットと判定されたパケットがFragmentセレクタ回路からリアセンブル処理回路をバイパスして送付されると、リアセンブル処理回路から送付されるFragmentパケットとNon-Fragmentパケットの入力に対する送信調停処理を行い、後段のモジュールにパケットを出力するパケット多重回路（図１の３）を有することを特徴とする。
【００１３】
また、Fragmentセレクタ回路（図１の１）は、パケット多重回路を経由して後段モジュールからのバックプレッシャ信号を受けるとパケット発信元へ出力し、リアセンブル処理回路（図１の２）はバックプレッシャ信号をFragmentセレクタ回路へ出力しないことを特徴とする。
【００１４】
すなわち、リアセンブル処理回路（図１の２）の前段にFragmentセレクタ回路（図１の１）を設けて、FragmentパケットとNon-Fragmentパケットを分離し、Fragmentパケットのみをリアセンブル処理回路へ入力させると共に、バックプレッシャのパケット発信元への接続をNon-Fragmentパケットからのもののみとするのである。
【００１５】
具体的には、Fragmentセレクタ回路（図１の１）は、受信されたパケットをそのまま逐次入力するヘッダ解析用バッファ（図２の４）と、ヘッダ解析用バッファに入力されたパケットのIPヘッダ情報を解析し、DFレコードがFragmentを禁止し、またはMFレコードが次パケットの不存在を示し、かつFOレコードが先頭パケットであることを示している場合はNon-Fragmentパケットと判定してパケット多重化回路へ、その他の場合はFragmentパケットと判定してリアセンブル処理回路へそれぞれ送付する送信先セレクタ回路（図２の５）を備える。
【００１６】
また、リアセンブル処理回路（図１の２）は、Fragmentセレクタ回路から入力されたFragmentパケットを格納するリアセンブルメモリ（図４の７）と、リアセンブルメモリに格納されたFragmentパケットの属するセグメント毎に、格納されたFragmentパケットの数をカウントするパケットカウンタが設けられたセグメント管理テーブル（図４の６）と、カウンタのカウント値に対する閾値が設定される閾値レジスタ（図４の８）を備え、カウント値が閾値を超えると、リアセンブルメモリに格納されている当該セグメントのFragmentパケットを廃棄すると共に、セグメント管理テーブルのレコードも抹消する。
【発明の効果】
【００１７】
本発明の第１の効果は、Fragmentセレクタ回路を設けて、受信したパケットをFragmentパケットとNon-Fragmentパケットに分離し、Fragmentパケットのみをリアセンブル処理回路へ送付することとしたため、ネットワーク内でFragmentパケットよりも大多数の割合を占めるNon-Fragmentパケットの入力によってリアセンブルメモリが枯渇するのを回避することができるということである。
【００１８】
本発明の第２の効果は、Fragmentパケットを処理するリアセンブル処理回路からはバックプレッシャ信号を出力しないこととしたため、リアセンブル処理回路内で、攻撃やエラーによって欠如したパケットが大量に溜まるといった理由でメモリが枯渇した場合でも、受信処理が制限される範囲をFragmentパケットに制限できるため、Fragmentパケットを利用した攻撃の影響を受けることなく受信可能になるということである。
【００１９】
本発明の第３の効果は、セグメント管理テーブルにパケットカウンタを設けて同一セグメントとして受信したパケット数を把握し、パケットカウンタのカウント値に対する閾値を設定する構成としたため、閾値により攻撃パケットか否かの判断基準を設け、これを超えたセグメントはセグメント管理テーブルとリアセンブルメモリから削除して同一セグメントにリアセンブル処理が実行できないようにして、Fragmentパケットを連続で送信する攻撃を防ぎ後段モジュールからのバックプレッシャ信号の頻度を低減することが可能になるということである。
【発明を実施するための最良の形態】
【００２０】
［構成の説明］
次に、本発明の実施の形態について図面を参照して詳細に説明する。図１は、本発明のパケット受信回路のブロック図を示す。このパケット受信回路は、Fragmentセレクタ回路１，リアセンブル処理回路２およびパケット多重回路３で構成されている。
【００２１】
Fragmentセレクタ回路１は、Fragmentパケットか否かの判定処理を行う。その結果、Fragmentパケットと判定されたパケットは後段のリアセンブル処理回路２に送付され、リアセンブル処理回路２にて、Fragmentパケットのリアセンブル処理を行う。すなわち、Fragmentパケットはリアセンブルメモリに格納され、全パケットの到着を待って、元のパケットにリアセンブル後、パケット多重回路３に送付される。
【００２２】
一方、Non-Fragmentパケットと判定されたパケットは、リアセンブル処理回路２をバイパスし、パケット多重回路３に送付される。パケット多重回路３は、FragmentパケットとNon-Fragmentパケットの入力に対する送信調停処理を行い、後段のモジュールにパケットを出力する。後段のモジュールは、パケットの受信が集中して処理が追いつかなくなると、パケット多重回路３へバックプレッシャ（back pressure）信号を出力する。
【００２３】
バックプレッシャ信号はFragmentセレクタ回路１とリアセンブル処理回路２に入力し、Fragmentセレクタ回路１はバックプレッシャ信号をパケットの送信元へ転送することによってパケットの送信を中止させる。一方、リアセンブル処理回路２はバックプレッシャ信号を出力することはない。これはリアセンブルメモリが枯渇した場合であっても同様である。
【００２４】
図２は、Fragmentセレクタ回路１の詳細を示す。Fragmentセレクタ回路１はヘッダ解析用バッファ４と送信先セレクタ回路５を備える。ヘッダ解析用バッファ４は受信されたパケットをそのまま逐次入力する。これは、Fragmentパケットか否かを判断する識別子が、パケットの先頭にあるとは限らないからであり、IP-Fragmentの場合は、IPヘッダ内に該当する情報が格納されているため、送信先が確定するまでの間、IPヘッダを読み込んでヘッダ解析用バッファ４に滞留しておく必要があるからである。
【００２５】
Fragmentパケットか否かの判定は、IP-Fragmentの場合は、具体的にはIPヘッダのDFレコード（Don’t Fragment），MFレコード（More Fragment）およびFOレコード（Fragment Offset）により行う。その判定処理のフローチャートを図３に示す。判定結果は送信先セレクタ回路５に入力し、送信先セレクタ回路５は、Fragmentパケットならリアセンブル処理回路２、Non-Fragmentパケットならパケット多重化回路３へパケットを送付する。
【００２６】
IPヘッダの内のDFレコードはFragmentの許否を表示し、DFレコードの値が「０」なら許可、「１」なら禁止を示す。また、MFレコードは後続のパケットの存否を表示し、MFレコードの値が「０」なら不存在、「１」なら存在を示す。また、FOレコードはパケットのセグメントにおける位置を表示し、FOレコードの値が「０」なら先頭のパケット、「１」なら後続のパケットを示す。
【００２７】
図３において、先ず、DFレコードの値が「１」ならNon-Fragmentパケットと判定される（図３のステップＳ１）。DFレコードの値が「０」なら、更にMFレコードの値とFOレコードの値が問われ、共に「０」ならNon-Fragmentパケット、いずれかが「１」ならFragmentパケットと判定される（図３のステップＳ２）。共に「０」ということは、先頭パケット、かつ最終パケットであることを意味し、これはNon-Fragmentパケットということになるからである。
【００２８】
図４は、リアセンブル処理回路２の詳細を示す。この回路は、セグメント管理テーブル６，リアセンブルメモリ７および閾値レジスタ８を備える。リアセンブルメモリ７は、Fragmentセレクタ回路１から入力されたFragmentパケットを格納し、その管理がセグメント管理テーブル６によってセグメント毎に行なわれる。すなわち、Fragmentセレクタ回路１を設けたことによって、Non-Fragmentパケットはリアセンブル処理回路２をバイパスしてパケット多重化回路３に送付されるので、リアセンブルメモリ７が格納されることはない。これにより、リアセンブルメモリ７の枯渇を低減することができる。
【００２９】
セグメント管理テーブル６は、リアセンブルメモリ７に格納されたパケットの属するセグメント毎に、送信元IPアドレス（IP-SA），宛先IPアドレス（IP-DA），ID（IP-ID），パケット到着管理，パケット格納先ポインタ管理およびパケットカウンタのフィールドから成るレコードを有する。パケット到着管理とは、セグメントが到着しているか未到着であるかの管理であり、パケットカウンタはFragmentパケットの到着毎にカウントアップする。
【００３０】
閾値レジスタ８はパケットカウンタに対する所定の閾値を保持する。閾値は任意の値に設定可能であり、図４では「４」とされている。全セグメントのパケットカウンタは閾値レジスタ８に設定される閾値に服する。すなわち、いずれのセグメントにおいても、パケットカウンタのカウント値が閾値を超えると同一セグメントとしてリアセンブル中であるFragmentパケットを廃棄する。また、当該セグメントのレコードも抹消する。これにより、異常に細切れな不正Fragmentパケットに基づいて加速されるリアセンブルメモリ７の枯渇と、パケット多重回路３への不正Fragmentパケットの送付、ひいては後段モジュールからのバックプレッシャ信号の発生を回避することができる。
【００３１】
閾値の現実的な設定値の例としては、IP-Fragmentの場合、FOが8Byte単位なので、最大パケット長が1514Byteの環境では、制御ヘッダを除いた最大実データ長が1460Byteとなり、1460/8=182.5 → 183という値が設定される。
【００３２】
送信元IPアドレス（IP-SA），宛先IPアドレス（IP-DA）およびID（IP-ID）によって、リアセンブルすべきFragmentパケット（同一セグメントのパケット）であることを区別し、到着管理とリアセンブルメモリ７に格納したパケットのポインタを管理する。図４では、セグメントαのパケットａ，ｂと、セグメントβのパケットｃ，ｄ，ｅがリアセンブルメモリ６に格納されている状態を示している。従って、セグメントαのカウント値は「２」、セグメントβのカウント値は「３」であるため、閾値レジスタ６の閾値「４」を超えておらず、まだ廃棄されることはない。セグメント管理テーブル６にて、全てのFragmentパケットが揃ったと判断された場合、パケットはリアセンブル完了としてパケット多重回路３へ出力される。
【００３３】
図５は、図４に示したような状態下において、セグメントβに属するFragmentパケットｆを受信し、リアセンブルメモリ７に格納しようとしている状態を示す。Fragmentパケットｆを受信すると、セグメント管理テーブルのセグメントβのパケットカウンタをカウントアップし、リアセンブルメモリ７にFragmentパケットｆを格納する。ここで、閾値レジスタ８に設定されている閾値「４」と同値になったため、セグメント管理テーブルのセグメントβに対するレコードと、該当するリアセンブルメモリ７内のFragmentパケットc〜fを削除する。削除後の状態を図６に示す。
【００３４】
図７は、図１の内でバックプレッシャ信号の伝達ルートを強調して示す。後段モジュールからのバックプレッシャ信号はリアセンブル処理回路２にも入力されるが、そこからFragmentセレクタ回路１へは出力されない。また、リアセンブルメモリ枯渇時であってもリアセンブル処理回路２がバックプレッシャ信号を出力することはない。すなわち、Fragmentセレクタ回路１は、後段モジュールからパケット多重化回路３を経由するバックプレッシャ信号のみを受け入れた出力する。これによって、リアセンブルメモリ枯渇時にもFragmentセレクタ回路１自体にバックプレッシャ信号が入力されないため、Non-Fragmentパケットに関しては受信動作が可能である。
【００３５】
なお、以上の説明では、Fragmentパケットのリアセンブル処理を回路にて実現することを前提として記述しているが、ソフトウェアで制御するようにしてもよい。
【００３６】
また、IP-Fragmentに限らず、再構築を必要とするデータと再構築を必要としないデータが混在されて入力する制御装置や、悪意のあるユーザーに再構築を必要とするデータを入力される虞のある通信装置などにも本発明を適用することが可能である。
【図面の簡単な説明】
【００３７】
【図１】本発明のパケット受信回路のブロック図
【図２】Fragmentセレクタ回路１の詳細図
【図３】Fragmentセレクタ回路におけるFragmentパケット判定処理のフローチャート
【図４】リアセンブル処理回路２の詳細図
【図５】リアセンブル処理回路２におけるパケットカウント追加の状態を示す図
【図６】図５の状態からセグメントβを削除した後の状態を示す図
【図７】図１の内でバックプレッシャ信号の伝達ルートを強調して示下図
【図８】一般的なリアセンブル処理のイメージを示す図
【図９】従来のリアセンブル処理回路の詳細図
【図１０】Fragment Offsetが同じ値のパケットを受信し続けている例を示す図
【符号の説明】
【００３８】
１      Fragmentセレクタ回路
２      リアセンブル処理回路
３      パケット多重化回路
４      ヘッダ解析用バッファ
５      送信先セレクタ回路
６      セグメント管理テーブル
７      リアセンブルメモリ
８      閾値レジスタ
【図１】
2007267051.tif 000003
【図２】
2007267051.tif 000004
【図３】
2007267051.tif 000005
【図４】
2007267051.tif 000006
【図５】
2007267051.tif 000007
【図６】
2007267051.tif 000008
【図７】
2007267051.tif 000009
【図８】
2007267051.tif 000010
【図９】
2007267051.tif 000011
【図１０】
2007267051.tif 000012