説明

テキストベースのプロトコルによる受信データメッセージのハンドリング

【課題】テキストベースプロトコルに従って、データメッセージを端末で受信する。
【解決手段】最初に、受信データメッセージを、事前パース基準のセットに従って事前パースする。次に、上記データメッセージに関連付けられるメッセージコンテキストを生成する。当該メッセージコンテキストは、事前パースステップから取得された情報を示す。次に、上記データメッセージ及び上記関連付けられるメッセージコンテキストを、端末上で実行されているアプリケーションに提供する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、包括的には、SIPプロトコル(「セッション開始プロトコル」を表す)又はHTTPプロトコル(「ハイパーテキスト転送プロトコル」を表す)又はSMTPプロトコル(「シンプルメール転送プロトコル」を表す)のようなテキストベースプロトコルに関し、より詳細には、このタイプのプロトコルに基づくアプリケーションを使用する端末の保護に関する。
【背景技術】
【0002】
いくつかのテキストベースのプロトコルは、多くのネットワークで使用される。IETF(「インターネットエンジニアリングタスクフォース」を表す)によって標準化されたプロトコルSIPがこれに該当する。このテキストベースのプロトコルは、特に、アプリケーションVoIP(「ボイスオーバインターネットプロトコル」を表す)に使用される。
【0003】
このようなテキストベースのプロトコルは、高水準プログラミング言語のように、文法規則セットによって定義されたシンタックスを有する。その結果、SIPメッセージの復号は、複雑なタスクとなる可能性があり、このような復号オペレーションを担当するエンティティは、大量のメモリ及び計算資源を有する。
【0004】
図1は、SIPメッセージ14がTCP(「転送制御プロトコル」を表す)レイヤ又はUDP(「ユーザデータグラムプロトコル」を表す)レイヤを通じて送信される従来のアーキテクチャにおけるSIPメッセージの処理を示している。メッセージSIP14が、TCP/UDPスタック11を通じて端末のUDPポート又はTCPポート上で受信されると、メッセージSIP14はSIPパーサ12によって解析される。このパーサは、このSIPメッセージのシンタックスをチェックし、対応するSIPアプリケーション13に適合するSIP構造体15を生成する。
【0005】
この処理中、受信されたSIPメッセージは、2回チェックされる。最初はSIPパーサ12のレベルでチェックされ、後にSIPアプリケーション13のレベルでチェックされる。一般に、SIPパーサ又はSIPアプリケーションによってSIPメッセージにエラーが検出されると、そのSIPメッセージは廃棄される。
【0006】
SIPパーサ12において実行されるチェックのステップは、複雑であり、多くの時間を費やす。確かに、SIPメッセージの廃棄を決定する前に、SIPパーサは、このメッセージをかなり完全にパース(構文解析)する必要がある。その結果、処理電力は、不必要に消費される可能性がある。
【0007】
加えて、一般に、端末は、フォームファクタ又はコストのようなさまざまな理由によって処理資源を制限される可能性があり、そのため、処理資源は通常の動作状態に適合するように決定される。その結果、このような端末が、たとえば、SIPパーサレベルにおける多くのチェックタスクが原因で異常な動作状態で動作すると、端末は、この場合に十分な処理資源を有しないので、その基本タスクを正しく実行することができない。
【0008】
したがって、多くのSIPメッセージをいくつかの端末へ送信することは、このプロトコルに基づくネットワークサービスに対する効率的な攻撃になる可能性がある。特に、SIPメッセージを処理するいくつかのソフトウェア機能は、端末があらゆる通常のオペレーションを実行することを妨げる効率的な攻撃のターゲットになる可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【0009】
本発明は、端末上で実行されるテキストベースのプロトコルに基づくアプリケーションのロバスト性及び性能を向上させることを目的とする。
【0010】
上記に鑑み、性能、及び攻撃に対する保護を増大させることができる、テキストベースのプロトコルに従って受信されたデータメッセージをハンドリングする方法を強化する必要性がある。
【課題を解決するための手段】
【0011】
本発明の第1の態様は、端末においてテキストベースのプロトコルに従って受信データメッセージをハンドリングする方法を提案し、
当該方法は、以下のステップ、すなわち、
/1/事前パース(pre parcing)基準のセットに従って、上記受信データメッセージを事前パースするステップと、
/2/データメッセージに関連付けられるメッセージコンテキストを生成するステップであって、上記メッセージコンテキストは、事前パースするステップから取得された情報を示す、生成するステップと、
/3/データメッセージ及び上記関連付けられるメッセージコンテキストを端末上で実行されているアプリケーションに提供するステップと、
を含む。
【0012】
端末上で実行されるアプリケーションに、受信データメッセージに関連したメッセージコンテキストを提供することによって、アプリケーションレベルで当該データメッセージに対して行われる解析の上流側で、受信メッセージに対してチェックを行ういくつかのステップを実行することが可能である。したがって、いくつかのチェックステップを先取りして、アプリケーションレベルでデータメッセージをチェックすることに起因する負荷を削減すると共に、端末レベルでの受信データメッセージのチェックを最適化することが可能である。
【0013】
これらの状況では、多くのデータメッセージを送信して対応するアプリケーションを過負荷にすることに基づくいくつかの攻撃を防止することができる。SIPアプリケーションに対してこのような方法を実行することは、特に有利となり得る。
【0014】
一実施の形態では、事前パース基準のセットは、文法規則のセット(a set of grammatical rules)及び/又はセマンティック規則のセット(a set of semantic rules)を含む。
【0015】
文法規則のセットは、解析されたテキストベースのプロトコルに従って有利に定めることができ、いくつかの決定された関連のあるフィールドに対する部分解析に対応することができる。
【0016】
いくつかの決定された関連のあるフィールドは、完全な文法解析によって提供されるロバスト性とハンドリングの効率性との間の良好な妥協を有するように選択することができる。
【0017】
SIPプロトコルの場合、このセットは、対応するIETF RFC3261で定義されたABNF文法(「拡張バックス・ナウア記法(Augmented Backus-Naur form)」を表す)に基づくことができ、効率性及びロバスト性を向上させるために簡単化することができる。
【0018】
セマンティック規則のセットは、いくつかの決定された関連のあるフィールドの有効性をチェックする部分解析に対応することができる。
【0019】
この規則のセットは、効率性とロバスト性との間の妥協を可能にすることができる。この部分解析は、たとえば、関連のあるフィールドのうちの1つのコンテンツをチェックすることに対応することができ、且つデータメッセージのこのようなフィールドの長さをチェックすることに対応することができる。
【0020】
事前パースするステップにおいて、データメッセージを、以下のクラス、すなわち、
文法規則のセットに基づき文法的に無効(grammatically invalid)、又は
セマンティック規則のセットに基づきセマンティック的に無効(semantically invalid)、又は
事前パース基準に関して有効、
のうちの1つに有利に分類することができ、関連付けられるメッセージコンテキストは上記クラスを示すことができる。
【0021】
この情報は、データメッセージ及びそれに関連付けられるメッセージコンテキストを受信する対応するアプリケーションにとって非常に有用であることができる。
【0022】
事前パースするステップの前に、事前廃棄ステップを有利に実行することができる。当該事前廃棄ステップは、メッセージが、事前廃棄基準のセットに基づいて廃棄されるものとみなされるか否かを判断することを担当する。このような事前廃棄基準は、たとえば、受信メッセージのスループットのしきい値に基づくことができる。
【0023】
本発明の一実施の形態では、事前廃棄として分類されるデータメッセージは、前処理の他のステップを通じて処理されない。
【0024】
受信データメッセージがデータパケットで受信されるとき、ステップ/1/の前に、連続したデータメッセージを受信データパケットからデリニエート(delineating)するステップを有利に実行することができる。このステップは、使用されるトランスポートプロトコルがTCPプロトコルであるときに有用であることができる。
【0025】
データメッセージ及び関連付けられるメッセージコンテキストをアプリケーションに提供するステップの前に、事前パースステップの結果に基づいて上記データメッセージをフィルタリングするステップをさらに実行することができる。
【0026】
テキストベースのプロトコルは、SIPプロトコル、HTTPプロトコル、及びSMTPプロトコル等の、IETFによって定義されたプロトコルのうちの1つとすることができる。
【0027】
メッセージコンテキストは、事前パースステップ中に満たす(fill)ことができる。
【0028】
本発明の第2の態様は、端末においてテキストベースプロトコルに従って受信データメッセージをハンドリングするようになっている前処理モジュールを提案し、
当該前処理モジュールは、以下のユニットから成るセット、すなわち、
−事前パース基準のセットに従って、上記受信データメッセージを事前パースするようになっている事前パースユニットと、
−上記データメッセージに関連付けられるメッセージコンテキストを生成するようになっている生成ユニットであって、当該メッセージコンテキストは、事前パースユニットから取得された情報を示す、生成ユニットと、
−上記データメッセージ及び上記関連付けられるメッセージコンテキストを端末上で実行されるアプリケーションに提供するようになっているフィルタリングユニットと、
から成るセットを備える。
【0029】
この前処理モジュールは、端末レベルでハンドリングされる接続ごとに1つのユニットのセットを備えることができる。
【0030】
この前処理モジュールは、ユニットのセットから少なくとも1つのユニットに関する構成情報を受信するようになっている構成インターフェースをさらに備えることができる。
【0031】
このような前処理モジュールは、オフロードモジュールとすることができる。これは、前処理をメインプロセッサとは別のプロセッサが実行することができることを意味する。
【0032】
本発明の第3の態様は、本発明の第2の態様による前処理モジュールを備える端末を提案する。
【0033】
本発明のさらなる特徴及び利点は、以下の説明からより明らかになるであろう。以下の説明は、単に例示として与えられ、添付図面と共に読まれるべきである。
【図面の簡単な説明】
【0034】
【図1】従来技術によるSIPメッセージハンドリングのアーキテクチャの図である。
【図2】本発明の一実施形態による端末のアーキテクチャにおける、受信されたSIPメッセージの処理を示す図である。
【図3】本発明の一実施形態によるSIPソケットを詳細に示す図である。
【図4】ハードウェア端末のSIP前処理モジュールの使用を示す図である。
【発明を実施するための形態】
【0035】
本発明は、以下の本明細書において、SIPプロトコルに対する一例示の適用で説明される。しかし、同じ原理を他の任意のテキストベースのプロトコルに適用することは容易である。
【0036】
SIPプロトコルのパースは、特に組み込み環境で、CPU及びメモリ資源を必要とする特に複雑なタスクである。これは、SIPプロトコルが受信側で多くの制御を伴う複雑な記述言語に基づいているからである。
【0037】
本発明の一実施形態は、端末側で実行されるSIPアプリケーションによって行われるパース及びチェックのタスクを容易にすることを可能にする。そのために、本発明の一実施形態では、受信されたSIPシグナリングメッセージ内部の主要なアイテムを発見及びチェックするために、前処理が行われる。
【0038】
このような前処理は、いくつかの場合にはSIPメッセージを廃棄可能にするために、又は、SIPアプリケーションレベルのチェック段階に有用であるいくつかの情報を取り出すために、いくつかの主要なアイテムのみをチェックすることによって、受信されたSIPメッセージを高速且つ効率的にチェックすることを可能にする。そのために、いくつかの情報が、本発明に従い、関連付けられるメッセージコンテキストにおいて、SIPアプリケーションに提供されるSIPメッセージに関連付けられる。
【0039】
したがって、このような前処理を行うことによって、SIPアプリケーションに情報を通知することができ、それによってアプリケーションレベルで行われるチェックステップが容易になる。
【0040】
この前処理は、SIPアプリケーションによって行われるパースに取って代わるものではない。しかしながら、前処理は、アプリケーションレベルで実行されるパースの効率性を向上させるために、受信された各SIPメッセージについて、SIPアプリケーションに有用である情報を含む関連付けられるメッセージコンテキストを提供する。その上、この前処理は、たとえばエラーのあるSIPメッセージに起因する過負荷を防止することによって、SIPアプリケーションのロバスト性を有利に高めることができる。
【0041】
このようなメッセージコンテキストは、その関連付けられるメッセージコンテキストに含まれる情報に基づいて前処理によって無効とみなされたSIPメッセージを廃棄するために、又は、SIPメッセージ全体をパースすることなくSIPメッセージによって伝達された幾つかの特定の情報に直接アクセスするために、SIPアプリケーションレベルで有利に使用することができる。なお、このような特定の情報は、関連付けられるメッセージコンテキスト上に示されている。
【0042】
その結果、このメッセージコンテキストは、いくつかのSIPメッセージの廃棄を提案すること、又は、SIPアプリケーションレベルでパースするのに有用であるいくつかの情報を示すことのいずれかによって、SIPアプリケーションの負荷を低減することを可能にする。
【0043】
これらの状況では、SIPプロトコルを実施する端末においてSIPシグナリングチャネルの悪用の影響を低減又は防止することが可能である。
【0044】
一実施形態では、SIPシグナリングチャネルの悪用は、以下のように定義することができる。すなわち、
−非SIPデータパケットをSIPシグナリングチャネルによって送信すること、
−エラーのあるSIPメッセージをSIPシグナリングチャネルによって送信すること、又は
−適合していないレートでSIPシグナリングチャネルによってデータパケットを送信すること、
と定義することができる。
【0045】
本発明の一実施形態では、SIPアプリケーションは、SIPメッセージに関連して提供されたメッセージコンテキストに含まれる情報を正しく且つ効率的に利用するように設計される。しかしながら、たとえ前処理が本発明に従って実行されても、既存のSIPアプリケーションを実行することができる。
【0046】
本発明によるSIP前処理の技術的な実施には、何の制限も付随していない。たとえば、SIP前処理は、SIPアプリケーションレベルで実行されるSIP処理ステップの上流側で、ソフトウェアモジュール又はハードウェアモジュールのいずれとしてでも端末機器において実施することができる。
【0047】
図2は、本発明の一実施形態による端末のアーキテクチャにおける受信されたSIPメッセージの処理を示している。
【0048】
SIPシグナリングセッションは、発呼側端末と着呼側端末との間に確立することができる。発呼側端末は、呼セッション要求を着呼側端末へ送信することによって呼セッションを開始することができる。
【0049】
このようなSIPシグナリングセッションは、UDPプロトコル又はTCPプロトコルに対応することができるレイヤ4フローの上に確立することができる。この場合、SIPシグナリングセッションは、
−発呼側端末及び着呼側端末のそれぞれのIPアドレス、
−発呼側端末によって選択された所与の送信元ポート番号、及び
−RFC3261(「コメント要求(Request For Comments)」を表す)で定義された5060のような標準値とすることができる宛先ポート番号、
によって一意に識別される。
【0050】
使用されるレイヤ4プロトコルがTCPプロトコルであるとき、TCP接続は、SIPシグナリングセッションの確立よりも前に発呼側端末と着呼側端末との間に確立され、このSIPシグナリングセッションの終了後に切断される。
【0051】
その場合、TCP接続の一方向によって送信されたSIPメッセージは、たとえば、各SIPメッセージヘッダの特定のフィールドに示されたコンテンツ長の表示、SIP要求メッセージのメソッド名の表示、又はSIP応答メッセージのステータスライン上の表示のような、SIPメッセージ内に設けられた情報を使用することによって区切られる。
【0052】
使用されるレイヤ4プロトコルがUDPプロトコルであるとき、各SIPメッセージは、単に、単一のUDPデータグラムにカプセル化される。SIPメッセージの区切りは、この場合、UDPによって暗黙的に行われる。
【0053】
本発明の一実施形態では、前処理が、特定の宛先ポートのセットのレイヤ4フローによって受信されたデータパケットに適用される。
【0054】
例示として、図2において、端末20は、
−データパケットが受信されるネットワークとのインターフェースであるようになっているプロトコルスタック21(TCP/IPスタック)、
−SIPソケット22と呼ばれる複数の前処理エンティティを含むSIP前処理モジュール24、並びに
−第1及び第2のSIPアプリケーション23、
を備える。
【0055】
図示されたケースでは、ソケット#1、ソケット#2、及びソケット#3の3つの異なるSIPソケットが、本発明の一実施形態に従って端末レベルで管理される。
【0056】
これらのSIPソケット22のそれぞれの内部では、最初にデータパケットがデータパケットFIFO201で受信される。次に、受信されたデータパケットは、前処理ユニット202で処理される。この前処理ユニット202の出力では、受信された各データメッセージについて、メッセージコンテキストが生成される。データメッセージ及びその関連付けられるメッセージコンテキストは、SIPアプリケーションレベル23へ送信される。
【0057】
有利なことに、次に、この対応するSIPアプリケーションは、関連付けられるメッセージコンテキストに含まれている情報に基づき、受信された各SIPメッセージに対してパースステップを実行するようになっている。
【0058】
SIPアプリケーションレベルで実行される解析をより効率的にするために、パケット前処理レベルにおいて、受信されたSIPメッセージを異なるクラスに分類することが有用であり得る。異なるクラスは、以下のものとすることができる。
−廃棄(Discarded):たとえば、ネットワークインターフェース上に着信するメッセージがあまりにも多いため、又は、送信元IPアドレスがブラックアドレスリストに属するために、SIPメッセージを事前パースすることができないことを意味する。
−文法的に無効(Grammatically invalid):SIPメッセージが、文法規則のセットに基づいて検出されるシンタックスエラー又は文法エラーを有することを意味する。
−セマンティック的に無効(Semantically invalid):SIPメッセージが、セマンティック的に正しくないか又はセマンティック規則のセットに関して欠落しているいくつかの情報を含むことを意味する。
−メッセージ有効(Message valid):SIPメッセージが事前パース基準のセットに関して正しいことを意味する。この事前パース基準のセットは、上記文法規則のセット及び/又は上記文法規則のセットに対応することができる。
【0059】
そのために、前処理ユニット202は、事前パース基準のセット、及び/又は文法規則のセット及び/又は上記セマンティック規則のセットにアクセスする。
【0060】
これらの状況では、本発明の一実施形態によれば、本発明に従って、事前パースされた各SIPメッセージにクラスが関連付けられる。この関連付けは、事前パースされた各SIPメッセージについて、決定されたクラスを含むメッセージコンテキストを生成することによって行われる。
【0061】
したがって、このSIP前処理は、一実施形態によれば、SIPアプリケーションに、受信されたSIPメッセージ、及び前処理ユニットレベルで提供されたクラスを示す関連付けられるコンテキストを提供する。
【0062】
この関連付けられるコンテキストは、SIPアプリケーションのパースプロセス及び決定プロセスを加速することを可能にする他のいくつかの有用である情報も示すことができる。
【0063】
例示として、各SIPアプリケーションは、それぞれのTCP/UDPポートにバインド(bind)され、このポート上で着信するTCP/UDPデータパケットをリスン(listen)する。
【0064】
SIP前処理モジュール24の内部では、SIPソケット22と呼ばれる1つのSIP前処理エンティティが、1つの管理されたTCP接続に専用化されている。しかしながら、単一のSIPユーザアプリケーションを宛先とした着信するすべてのUDPメッセージを処理するのに必要とされるソケットは、1つのみとすることができる。
【0065】
SIPソケット22は、受信されたトラフィックを解析するが、有利に、上位のSIPアプリケーションによって送信されたデータに対してトランスペアレントのままとすることができる。
【0066】
たとえば、2つのSIPアプリケーションがポート番号5060及びポート番号5061上でそれぞれ実行されている場合、ポート5060及び5061で受信されたUDPメッセージを処理するために、2つの別個のSIPソケット22をそれぞれ割り当てることができる。その後、好ましくは、新しいTCP接続ごとに新しいSIPアプリケーションを割り当てる。
【0067】
たとえば、POSIX(「UNIX(登録商標)用ポータブルオペレーティングシステムインターフェース(Portable Operating System Interface for UNIX)」を表す)環境では、TCP/UDPソケットと同じ方法で、新しいSIPソケット22をオープン及びクローズすることができる。
【0068】
図3は、本発明の一実施形態によるSIPソケット22を詳細に示している。
【0069】
SIPソケット22は、
−データパケットFIFO201、並びに
−SIP前処理ユニット202であって、
−デリニエーション(delineation)ユニット306、
−事前廃棄ユニット307、
−文法事前パースユニット308、
−セマンティック事前パースユニット309、及び
−フィルタリングユニット310、
を含む、SIP前処理ユニット202、
を備えることができる。
【0070】
事前廃棄ユニット307は、いくつかの事前廃棄基準に基づいて、いくつかのデータメッセージを早期に廃棄するようになっている。
【0071】
SIPシグナリングセッションは、TCP/IPスタック21によって端末20のSIPポートへ伝達される。データパケットは、このSIPポート上で受信され、FIFO201内にキューイングされる。
【0072】
次に、受信データパケットから、連続したSIPメッセージが、デリニエーションユニット306によってデリニエートされる。
【0073】
理論的には、連続した有効なSIPメッセージが受信されると、前のSIPメッセージの終了及び次のSIPメッセージの開始を見つけることを意味する、これらのSIPメッセージの連続を規定するのに何ら問題はない。確かに、各SIPメッセージにおいて、コンテンツ長ヘッダは、対応するSIPメッセージの正確なサイズを示す。
【0074】
しかし、無効なSIPメッセージが受信されると、たとえば、受信されたSIPメッセージのコンテンツ長ヘッダが間違った情報を示しているとき、このSIPメッセージを廃棄することができ、デリニエーションユニットは、新しいSIPメッセージの最初のラインを見つけるまで、データを消費する。SIP応答メッセージのこの最初のラインは、たとえば、文字列「SIP/2.0」に基づいて判断することができる。
【0075】
したがって、FIFO201に記憶されているデータパケットは、事前廃棄ユニット307に送信されるために、デリニエートユニット306の出力で連続したSIPメッセージを通じて示される。確かに、デリニエーションユニット306は、各SIPメッセージを事前廃棄ユニット307へ送信する。
【0076】
この事前廃棄ユニット307は、たとえば、SIPメッセージのフラッディング(flooding)を回避するようになっているか、又は、有害なアドレス若しくは悪意のあるアドレスとして知られている送信元アドレスから到着したSIPメッセージの受信を防止するようになっている。そのため、事前廃棄ユニット307は、送信元アドレスのブラックリストにアクセスすることができる。
【0077】
前処理ユニット202でメッセージを廃棄するこのステップによって、受信されたSIPデータメッセージのハンドリングをより効率的にすることができ、いくつかの場合には、廃棄されたSIPデータメッセージに対する他の任意の解析の処理を回避することができる。
【0078】
事前廃棄ユニット307によって「廃棄」として分類されたSIPメッセージは、それ以降のユニットによって解析されず、フィルタリングユニット310に直接渡される。関連付けられるコンテキストは、廃棄の理由をさらに示すことができる。
【0079】
SIPメッセージに対して廃棄を適用する理由に関して、本発明には、何の制限も付随していない。たとえば、本発明の一実施形態では、事前廃棄ユニット307は、単位時間当たりあまりにも多くのSIPメッセージが受信されると、SIPメッセージをランダムに廃棄するようにすることができる。そのために、しきい値を定義することができ、受信されたSIPメッセージの個数がこのしきい値よりも高いとき、この事前廃棄ユニット307は、単位時間当たりしきい値よりも低い個数の受信パケットをハンドリングするために、文法事前パースユニット308を通過する前に、いくつかの受信メッセージをランダムに廃棄する。
【0080】
事前廃棄ユニット307は、廃棄されないSIPメッセージを文法事前パースユニット308に提供する。
【0081】
この段階では、文法事前パースユニット308は、RFC3261又はRFC2334で定義されたSIP ABNF文法のように、SIPアプリケーションレベル23で適用される文法規則のセットと比較して、有利に削減することができるSIP文法規則のセットに基づきSIPメッセージを事前パースすることを担当する。前処理ユニットは、SIPアプリケーションレベルで実行されるSIPメッセージの解析に取って代わるように設計されていないことを思い起こされたい。
【0082】
事前パースユニット308によって使用されるこのSIP文法規則のセットは、サポートされるSIPアプリケーション23のタイプに従って有利に能率化することができる。
【0083】
この文法事前パースユニット308は、事前廃棄ユニット307によって提供されたSIPメッセージが文法的に有効であるのか、又は文法的に無効であるのかを判断するようにすることができる。
【0084】
文法事前パースユニット308は、以下で説明するように、SIPメッセージを処理することができる。
【0085】
少なくともいくつかのSIPヘッダは、事前にパースすることができる。より正確には、これらのSIPヘッダのいくつかのフィールドを、関連のあるフィールドとして有利に判断することができ、これらの関連のあるフィールドのみを、文法規則のセットに従って、この文法事前パースユニット308でチェックする。たとえば、文法規則のセットは、関連のある各フィールドの認可された文字セット及びそれらの最大許容長を定義する。SIPメッセージは、そのすべての関連のあるフィールドが文法規則のセットを順守している場合に、文法的に有効とみなされる。
【0086】
次に、SIPメッセージが文法的に有効として検出された場合、考慮されているSIPメッセージの最初のラインがパースされる。最初のラインを処理することで現在のメッセージがSIPメッセージであるか否かを検出することが可能になるので、SIPメッセージの最初のラインの処理は、他のラインの処理と有利に異なるものとすることができる。この検出は、最初のラインの「SIP/2.0」文字列の存在に基づいて行うことができる。
【0087】
その後、最初のラインを処理することによって、メッセージがSIPメッセージとしてチェックされると、このSIPメッセージがSIP応答であるのか、又はSIP要求であるのかを意味するSIPメッセージのタイプをチェックすることが可能である。
【0088】
文法事前パースユニットレベルで行われるチェックは、SIPメッセージのメソッド名に関するチェックを考慮することができる。したがって、SIPメッセージにおいてメソッド名を識別することができ、要求URI(「Uniform Resource Identifier:統一資源識別子」を表す)を、最初のライン内で突き止めることができる。これは、オフセット及び長さを求めることができることを意味する。
【0089】
たとえば、SIP応答メッセージの場合、RFC3261で戻りコード番号として参照されるフィールドを復号する。これは、対応するASCIIコード番号がデジタル値に変換されることを意味する。リーズンフレーズ(reason phrase:理由語句)(フィールド)のASCII文字列の開始のオフセットが返される。
【0090】
最初のラインを処理した後、文法事前パースユニット308は、SIPメッセージの他のラインを処理するようになっている。これら他のラインはヘッダラインである。
【0091】
一般に、各ヘッダラインは、ヘッダ名(Header Name)で始まり、ヘッダ名の後には、RFC3261で定義されたHCOLON文法規則(最終的にはスペース又は表(tabulations)で囲まれる「:」)が続き、ラインの残りの部分はヘッダ値を含む。空のラインは、ヘッダの終端を示すことができる。
【0092】
文法事前パースユニット308は、SIPメッセージのヘッダ名を突き止めて識別するようにすることができる。その結果、文法事前パースユニット308は、対応するオフセット及び長さで、ヘッダフィールドのロケーションを提供することができる。このオフセット及びこの長さが、共に予想通りであるか否かをチェックすることが可能である。
【0093】
加えて、この文法事前パースユニット308は、考慮されているフィールドで使用される文字が、可能な文字(possible characters)の所定のセットに属するか否かをチェックすることもできる。たとえば、「コンテンツ長」ヘッダに使用される文字が以下の数字セット、すなわち、
(0;1;2;3;4;5;6;7;8;9)
に属することを設計することができる。
【0094】
次に、文法事前パースユニット308は、ヘッダ名の所定のセットのみを解析することができる。そのために、SIPメッセージにおいて、このセットに属するヘッダ名のみについて、ヘッダ値を抽出する。このヘッダ名のセットは、SIPメッセージの本体サイズをチェックすることができるようにするために、少なくとも「コンテンツ長(Content-Length)」ヘッダを有利に含むことができる。
【0095】
ヘッダ値は、たとえば、デジタル値に変換することができ、SIPメッセージに関連付けられるメッセージコンテキスト内にコピーすることができる。
【0096】
また、ヘッダ名のセットは、応答メッセージのメソッド名をチェックすることができるようにするために、「CSeq」ヘッダを意味するSIPメソッド名に対応するヘッダも含むことができる。
【0097】
他のヘッダは、本発明の一実施形態に従ってSIP前処理が実行されるSIPアプリケーションの必要性に応じて、具体的にパースすることができる。たとえば、RFC3261の「www認証(www-authenticate)」ヘッダとして参照されるフィールド内にアナウンスされた値を得ることは、いくつかのSIPアプリケーションにとって有用であり得る。
【0098】
文法事前パースユニット308はさらに、SIPメッセージの本体サイズをチェックするようにすることができる。理論的には、メッセージ本体サイズは、対応するヘッダのコンテンツ長フィールドにたとえばバイト数で公示されたサイズに対応するはずである。
【0099】
TCPのようなレイヤ4トランスポートプロトコルが使用されるとき、コンテンツ長ヘッダフィールドは、すべてのSIP要求メッセージ及びSIP応答メッセージに存在するはずである。この情報が提供されない場合、端末は、TCP接続がクローズされるまで、メッセージ本体が続くものと仮定することができ、メッセージ本体をエラーのあるSIPメッセージとみなすことができる。
【0100】
レイヤ4プロトコルがUDPプロトコルである場合、この情報は、提供されない場合がある。この後者の場合、メッセージの本体は、SIPヘッダの後のデータメッセージの残りの部分を占有するはずである。本体がないとき、コンテンツ長は0に等しい。
【0101】
エラーがこの段階で検出された場合、メッセージは、「セマンティック的に無効」として分類される。これは、フレーミングエラーであり、現在のメッセージを破棄することができる。
【0102】
文法事前パースユニット308によって処理されたSIPメッセージは、次に、追加のチェック及び処理(たとえば変換)を行うため、又は、SIPメッセージに関連付けられるメッセージコンテキスト構造体を満たすために、セマンティック処理ユニット309に提供される。この段階の出力として、メッセージは、セマンティック的に有効又は無効として分類される。
【0103】
セマンティック処理ユニット309は、SIPメッセージに対応するメソッド名を識別するようになっている。メソッド名は、上述したように、SIP要求メッセージについては最初のラインにおいて、又は、SIP応答メッセージについてはCSeqヘッダにおいて、文法事前パースユニット308によって突き止められる。このメソッド名は、次に、既知のメソッド名の定義されたセット内で識別され、対応するメソッド識別子MethodIDが求められる。
【0104】
既知のメソッド名のセットは有限であり、SIPアプリケーションによって定義することができる。未知のメソッド名がSIPメッセージにおいて識別されたとき、そのSIPメッセージは、セマンティック的に無効として分類される。
【0105】
たとえば、この既知のメソッド名のリストは、以下のものとすることができる。
【0106】
【表1】

【0107】
MethodIDの値は、メッセージのタイプ(要求又は応答)に依存することに気付くことができる。
【0108】
ヘッダ名は、ヘッダ名の定義されたセット内で識別することもできる。次に、ヘッダ名識別子HeaderIDを求めることができ、関連付けられるメッセージコンテキスト内に挿入することができる。単一のHeaderIDについて、いくつかのエイリアスを定義することができる。未知のヘッダを有するSIPメッセージは、セマンティック的に無効として分類される。
【0109】
既知のヘッダのセットは有限であり、SIPアプリケーションによって定義することができる。
【0110】
たとえば、このヘッダ名のセットは、以下のものとすることができる。
【0111】
【表2】

【0112】
メソッド識別子MethodIDに従って、いくつかのヘッダは、SIPメッセージにおいて一意とすることができる。一意のヘッダ名のリストを、メソッド名のセットの各メソッド名について、SIPアプリケーションが定義することができる。
【0113】
複製されたヘッダを有するSIPメッセージを、セマンティック的に無効として分類することができる。
【0114】
セマンティック処理ユニット309はさらに、ヘッダパラメータ長をチェックし、次いで各ヘッダパラメータの長さがSIPアプリケーションによって定義することができる範囲内に含まれるか否かを判断するようにすることができる。
【0115】
セマンティック処理ユニット309はさらに、ヘッダ名をカウントすると共に、それらの発生回数をチェックするようにすることができる。そのために、各ヘッダ名の発生がカウントされる。各ヘッダの発生総数は、通常、各MethodIDについてSIPアプリケーションが定義することができる所与の範囲内に含まれ得る。発生回数がこの所与の範囲外である場合、メッセージを「セマンティック的に無効」として分類することができる。
【0116】
【表3】

【0117】
最後に、SIPメッセージを、セマンティック処理ユニット309によって処理した後、セマンティック的に有効であるか又はセマンティック的に無効であるかのいずれかのステータスに関連付ける。その後、このSIPメッセージが、フィルタリングユニット310に送信される。
【0118】
フィルタリングレベルでは、SIPメッセージを廃棄するか、又は、その関連付けられるメッセージコンテキストと共に対応するSIPアプリケーション23へSIPメッセージを送信することができる。
【0119】
このフィルタリングユニット310は、廃棄マスクを有利に適用することができる。これは、このフィルタリングユニット310が、このSIPメッセージに関連付けられるメッセージコンテキストにおいて示されたクラスに従ってSIPメッセージを廃棄することができることを意味する。
【0120】
フィルタリングユニット310は、データパケットFIFOのキューイング解除をさらに担当することができる。
【0121】
以下の表は、フィルタリングマスクパラメータを説明している。
【0122】
【表4】

【0123】
たとえば、パラメータ「Filtering_mask(フィルタリングマスク)」が0100に設定されているとき、このパラメータは、「文法的に無効」として分類されたメッセージのみがフィルタリングユニットによって廃棄されることを指定する。他のすべてのメッセージクラスは、さらなる解析のために維持される。
【0124】
本発明の一実施形態では、使用することができるプリミティブのセットを通じてコマンドインターフェースを介してSIPソケット22をロード及び構成することができる。これらのプリミティブは、「open(オープン)」、「bind(バインド)」、「listen(リスン)」、「accept(受理)」、「write(書き込み)」、「read(読み出し)」のような、POSIX環境で定義された標準的なソケットプリミティブと同様のものとすることができる。
【0125】
以下のセクションは、入力として受信された、一実施形態によるSIPソケット22の構成を説明する。
【0126】
SIPソケットをバインドするために、TCP/UDPポートは、TCPパケット又はUDPパケットの受信用に予約される。TCPの場合、このポートは、着信する新しいTCP接続をリスンするのに使用することができる。
【0127】
以下のパラメータを設定することができる。すなわち、
−プロトコル(UDP又はTCP)、
−ローカルポート番号(たとえば5060)、
−SIPメソッド名のリスト、
−各SIPメソッド名について、
○要求及び応答のような有効なヘッダ名のリスト、
○各ヘッダ名について、
・最小発生回数及び最大発生回数、並びに
・パラメータの最小長及び最大長、
−認証されていない送信元IPアドレスのリスト
−メッセージの分類による廃棄マスク
を設定することができる。
【0128】
以下のセクションは、特に、SIPメッセージ前処理中に生成されるメッセージコンテキストのコンテンツを詳しく述べることによって、一実施形態によるSIPソケットの出力を説明する。
【0129】
メッセージコンテキストは、メッセージの前処理中に生成される3つのタイプの報告を含むことができる。すなわち、
−「メソッド説明報告」を示す最初のライン報告、
−連続した各ヘッダラインの複数のヘッダライン報告、及び
−メッセージが全体的に処理されたときに生成される最終報告、
を含むことができる。
【0130】
SIPメッセージのメッセージコンテキストに含まれるグローバル報告に対応するように、異なる報告を連結することができる。
【0131】
たとえば、SIPメッセージがSIPメッセージの最初のラインからエラーのあるメッセージとして識別された場合、最終報告のみを書き込むことができる。
【0132】
そのために、フィールド「Report_type(報告タイプ)」は、報告タイプを符号化することができる。このフィールドは、
−method_report(メソッド報告)、
−header_report(ヘッダ報告)、及び
−final_report(最終報告)
に設定することができる。
【0133】
一実施形態によるSIPメッセージに関連付けられるメッセージコンテキストに含まれる異なる報告をデリニエートするためには、異なる方法がある。たとえば、すべての報告について固定サイズを決定することも可能であるし、任意の記号又は空白によってすべての報告を分離することも可能であるし、リンクリストとして報告を管理することも可能である。
【0134】
この報告のコンテンツは、メッセージがSIP要求メッセージとして識別されるのか、又はSIP応答メッセージとして識別されるのかに依存し得る。
【0135】
メッセージが、SIP要求メッセージとして識別される場合、報告は、以下の情報、すなわち、
○method_reportに対応するReport_type(報告タイプ)、
○要求又はMethodID又はRequestURI_Idx(要求URIインデックス)又はURI_Length(URI長)又はLine_Length(ライン長)に対応するMsg_type(メッセージタイプ)、
を含むことができる。
【0136】
たとえば、データ「INVITE sip:bob@192.0.2.4 SIP/2.0 <CR><LF>」を含むSIPメッセージは、以下の情報、すなわち、
Msg_type = 要求、
MethodID = INVITE、
RequestURI_ldx =7、
URI_Length = 17、
Line_Length = 34(ライン終端セパレータのとき)
を含む報告に関連付けられる。
【0137】
そうではなく、SIPメッセージがSIP応答メッセージとして識別される場合、関連付けられる報告は、以下の情報、すなわち、
○Report_type = method_report、
○Msg_type = 応答/MethodID/CodeID(コードID)/ReasonPhrase_Idx(リーズンフレーズインデックス)/Line_Length
を含む。
【0138】
たとえば、SIPメッセージ「SIP/2.0 200 OK」は、以下の情報、すなわち、
Msg_type = 応答、
CodeID = 200、
ReasonPhrase_Idx = 12、
Line_Length = 16(ライン終端セパレータがカウントされたとき)
を含む報告に関連付けられる。
【0139】
以下の情報を、ヘッダ報告の各ライン(最初のラインを除く)に含めることができる。
○Report_type = header_report
○HeaderID/HeaderValue_Idx(ヘッダ値インデックス)/LineLen(リスン長)/HeaderValueLen(ヘッダ値長)。
【0140】
一実施形態では、メッセージコンテキストには1つの最終報告のみがある。この最終報告は、対応するSIPメッセージの前処理の要約を含む。
【0141】
この最終報告において、以下の情報が提供される。すなわち、
−Report_type = final_report(最終報告)
−MsgStatus(メッセージステータス):廃棄又は文法的に無効又はセマンティック的に無効又はメッセージ有効
−Content-Length値(コンテンツ長値)
−他の値(指定された場合):たとえばCSeq
が提供される。
【0142】
SIP前処理モジュール24は、ソフトウェアモジュールで実施することもできるし、ハードウェアモジュールで実施することもできる。
【0143】
図4は、ハードウェア端末におけるSIP前処理モジュール24の使用を示している。
【0144】
ネットワークプロセッサ41は、レイヤ4までのプロトコルスタック21をハンドリングする。このネットワークプロセッサモジュール21は、イーサネット(登録商標)MACインターフェースに直接接続することができる。
【0145】
アプリケーションプロセッサ43は、オペレーティングシステムのもとで、そのネットワークスタックハンドリングがネットワークプロセッサにおいてオフロードされた状態で、アプリケーション23を実行するようにすることができる。
【0146】
予約されたポート(たとえば、ポート5060上でバインドされたソケット)で受信されたデータパケットは、SIPソケット#1へ送信される。予約されたポート(たとえば、ポート5061上でバインドされたソケット)で受信されたデータパケットは、SIPソケット#2へ送信される。データパケットの残りは、アプリケーションプロセッサによって直接ハンドリングされる。
【0147】
SIP前処理モジュールは、たとえば、パースする特定のフィールド、過負荷検出用の最大しきい値等に関して、アプリケーションプロセッサによって有利に構成され得る。
【0148】
一実施形態に従ってSIPメッセージを前処理した後、SIPメッセージが有効である場合には、SIPメッセージは、アプリケーションプロセッサ43に渡される。有利なことに、アプリケーションは、その後、そのレベルで必要とされる場合に、関連付けられるメッセージコンテキストを利用し、他のすべてのパースタスク及びメッセージ解釈タスクを行う。SIPメッセージが有効でない場合には、上述したように、SIPメッセージは、フィルタリングレベルで、廃棄マスクの分類に従って破棄され得る。この最後の場合に、一実施形態では、より短いメッセージコンテキストのみが、アプリケーションプロセッサ43へ転送される。
【0149】
ネットワークプロセッサ41からアプリケーションプロセッサ43への送信パスは、任意のタイプのトラフィックを送信するようにすることができる。アプリケーションプロセッサ43からネットワークプロセッサ41へいくつかの情報を送信するのに、別のパスを使用することができる。
【0150】
この種の前処理では、メッセージを連続して処理することができる。好ましくは、従来のソフトウェアパースのようにバックトラッキングをハンドリングする必要がないので、各文字は1回だけ読み出される。
【0151】
同じ入力シンボルを使用するいくつかの状態マシンを並列に評価することができる。たとえば、文字列終端セパレータが検索されている間、文字列マッチャ(string matcher)が評価され、セパレータが見つかったときに文字列マッチャの結果が検討される。
【0152】
いくつかの「ルックアヘッド(look-ahead)」機能を実施するために、事前にいくつかの文字を読み出すことも有用であり得る。解析する次のいくつかの文字を知ることによって、これは、ラインシーケンスの終端を決定したり、ヘッダの終端を識別したりするのに有用である。読み出された文字を、或る深さのシフトレジスタにプッシュし、必要とされるルックアヘッドが提供される。
【0153】
文字列マッチング機能は、メソッドの識別又は異なる可能なヘッダの識別を行うために実行することができる。このコンテキストでは、たとえば、既知の「Aho-corasick」複数文字列マッチングアルゴリズムを使用することができる。決定性有限オートマトン(Deterministic Finite Automata)(DFA)をこのアルゴリズムで生成することができ、各オートマトンは、認識された文字列に対応するDFAの状態を受理する。
【0154】
SIP文法は、大文字であるMETHODの符号化を除いて、通常、文字について大文字と小文字とを区別しない。Aho Corasick DFAに記憶されている文字列は、大文字に正規化される。入力ストリームは、文字列マッチャに提示される前に、大文字に正規化される。通常のストリームは、チェックを可能にするように保存することができる。
【0155】
特定の機能又は特定の機能のセットを使用して、特定のフィールドで用いられる文字が許容されるか否かをチェックすることができる。これは、入力アルファベットの各可能な値について異なるセットの機能(文字セット)の事前に計算された値を含むルックアップテーブルを使用して実施することができる。小さなメモリを使用して非常に効率的且つコンパクトなルックアップテーブルを実施することが可能である。
【0156】
以下のパラグラフは、ハードウェアで実施することができるような事前パースの主要なステップを示している。
【0157】
メッセージの最初のラインの処理は、他のラインの処理とは異なっている。その処理は、非常に単純であり、メッセージが要求メッセージであるのか、又は応答メッセージであるのかを非常に容易に識別することを可能にする。最初のワードが解析されて、そのワードが既知のメソッドであるのか、又は文字列「SIP/2.0」であるのかがチェックされる。この文字列が見つかった場合、メッセージは、応答であると仮定され、そうでない場合、メッセージは要求であると仮定される。
【0158】
METHOD又はSIP/2.0の文字列の識別は、Aho-Corasick DFAを使用することによって行うことができる。
【0159】
ラインセパレータが見つかったときを意味する最初のラインの処理の終わりに、メソッドの説明を生成することができる。
【0160】
後続のラインの前処理は、各ラインがHeaderIDで始まり、その後にHCOLON(最終的にはスペース又はHTABによって囲まれる「:」)が続くことに基づくことができる。ラインの残りの部分は、パラメータを含むことができる。
【0161】
後続のラインの各最初のワードは、Aho-Corasick等の複数文字列マッチングアルゴリズムによって識別することができる。セパレータが検出されると、文字列マッチャの結果を評価して、ヘッダ名が認識されるか否かがチェックされる。
【0162】
各ラインの解析の終わりに、≪ヘッダ報告≫を生成する。処理は、空白ライン、すなわちシーケンスCR LF CR LFを識別することによって「ヘッダ終端(end of header)」が検出されると、終了する。
【0163】
その後、最終報告を生成する。
【0164】
このメカニズムは、SIPシグナリングプロトコルに基づく住宅ゲートウェイ又はビジネスゲートウェイ及びいわゆるIP電話等の端末機器で有利に実施することができる。このメカニズムは、SIPアプリケーションまでSIPシグナリングチャネルを通じて注入される可能性のある無用なデータ処理のための過剰な量の処理資源の先取りを防止する。

【特許請求の範囲】
【請求項1】
端末(20)においてテキストベースのプロトコルに従って受信データメッセージをハンドリングする方法であって、
該方法は、以下のステップ、すなわち、
/1/事前パース基準のセットに従って、前記受信データメッセージを事前パースするステップ(308、309)と、
/2/前記データメッセージに関連付けられるメッセージコンテキストを生成するステップであって、該メッセージコンテキストは、前記事前パースするステップから取得された情報を示す、生成するステップと、
/3/前記データメッセージ及び前記関連付けられるメッセージコンテキストを前記端末上で実行されているアプリケーションに提供するステップと、
を含み、
前記事前パースするステップにおいて、前記データメッセージは、以下のクラス、すなわち、
文法規則のセットに基づき文法的に無効、又は
セマンティック規則のセットに基づきセマンティック的に無効、又は
事前パース基準に関して有効、
のうちの1つに分類され、
前記関連付けられるメッセージコンテキストは前記クラスを示す、方法。
【請求項2】
前記事前パース基準のセットは、文法規則のセット及び/又はセマンティック規則のセットを含む、請求項1に記載の受信データメッセージをハンドリングする方法。
【請求項3】
前記文法規則のセットは、前記テキストベースのプロトコルに従って定められ、いくつかの決定された関連のあるフィールドに対する部分解析に対応する、請求項2に記載の受信データメッセージをハンドリングする方法。
【請求項4】
前記セマンティック規則のセットは、前記いくつかの決定された関連のあるフィールドの有効性をチェックする部分解析に対応する、請求項3に記載の受信データメッセージをハンドリングする方法。
【請求項5】
前記事前パースするステップの前に、事前廃棄するステップが実行され、該事前廃棄するステップは、或るメッセージが、事前廃棄基準のセットに基づき事前廃棄されるものとして分類されるか否かを判断することを担当する、請求項1から4までのいずれか1項に記載の受信データメッセージをハンドリングする方法。
【請求項6】
受信データメッセージがデータパケットで受信されるとき、前記ステップ/1/の前に、受信データパケットから連続したデータメッセージをデリニエートするステップ(306)が実行される、請求項1から5までのいずれか1項に記載の受信データメッセージをハンドリングする方法。
【請求項7】
前記データメッセージ及び前記関連付けられるメッセージコンテキストを前記アプリケーションに提供するステップの前に、少なくとも前記事前パースするステップの結果に基づいて、前記データメッセージをフィルタリングするステップ(310)をさらに含む、請求項1から6までのいずれか1項に記載の受信データメッセージをハンドリングする方法。
【請求項8】
前記メッセージコンテキストは、前記事前パースするステップの間に満たされる、請求項1から7までのいずれか1項に記載の受信データメッセージをハンドリングする方法。
【請求項9】
端末(20)においてテキストベースのプロトコルに従って受信データメッセージをハンドリングするようになっている前処理モジュール(24)であって、
該前処理モジュールは、以下のユニットから成るセット、すなわち、
事前パース基準のセットに従って、前記受信データメッセージを事前パースするようになっている事前パースユニット(308、309)であって、該データメッセージは、以下のクラス、すなわち、
文法規則のセットに基づき文法的に無効、又は
セマンティック規則のセットに基づきセマンティック的に無効、又は
事前パース基準に関して有効、
のうちの1つに分類され、関連付けられるメッセージコンテキストは前記クラスを示す、事前パースユニット(308、309)と、
前記データメッセージに関連付けられる前記メッセージコンテキストを生成するようになっている生成ユニットであって、該メッセージコンテキストは、前記事前パースユニットから取得された情報を示す、生成ユニットと、
前記データメッセージ及び前記関連付けられるメッセージコンテキストを前記端末上で実行されているアプリケーションに提供するようになっているフィルタリングユニット(310)と、
から成るセットを備える、前処理モジュール。
【請求項10】
前処理モジュール(24)であって、前記端末レベルでハンドリングされる接続ごとに、1つのユニットのセットを備える、請求項9に記載の前処理モジュール。
【請求項11】
前処理モジュール(24)であって、少なくとも1つのユニットに関する構成情報を前記ユニットのセットから受信するようになっている構成インターフェースをさらに備える、請求項9又は10に記載の前処理モジュール。
【請求項12】
端末(20)であって、請求項9から11までのいずれか1項に記載の前処理モジュールを備える端末。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2009−284471(P2009−284471A)
【公開日】平成21年12月3日(2009.12.3)
【国際特許分類】
【外国語出願】
【出願番号】特願2009−85127(P2009−85127)
【出願日】平成21年3月31日(2009.3.31)
【出願人】(503163527)ミツビシ・エレクトリック・アールアンドディー・センター・ヨーロッパ・ビーヴィ (175)
【氏名又は名称原語表記】MITSUBISHI ELECTRIC R&D CENTRE EUROPE B.V.
【住所又は居所原語表記】Capronilaan 46, 1119 NS Schiphol Rijk, The Netherlands
【Fターム(参考)】