JP2006345231A - Sip−alg方法 - Google Patents
Sip−alg方法 Download PDFInfo
- Publication number
- JP2006345231A JP2006345231A JP2005169072A JP2005169072A JP2006345231A JP 2006345231 A JP2006345231 A JP 2006345231A JP 2005169072 A JP2005169072 A JP 2005169072A JP 2005169072 A JP2005169072 A JP 2005169072A JP 2006345231 A JP2006345231 A JP 2006345231A
- Authority
- JP
- Japan
- Prior art keywords
- sip
- alg
- phase
- state
- signal
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Abstract
【課題】シグナリング異常時からの迅速な復旧を可能にするSIP−ALG方法を提供する。
【解決手段】本発明は、2つのユーザエージェント(UA1、UA2)間のセッションの確立をSIP−ALGを介して行なうSIP−ALG方法において、セッションの開始から終了までを複数のフェーズに分割し、フェーズの1つでセッションに異常が発生したとき、異常が発生したフェーズの段階に応じて、少なくとも1つのユーザエージェントとSIP−ALGとの間で復旧信号を通信させることにより初期状態に復旧させる。
【選択図】 図1
【解決手段】本発明は、2つのユーザエージェント(UA1、UA2)間のセッションの確立をSIP−ALGを介して行なうSIP−ALG方法において、セッションの開始から終了までを複数のフェーズに分割し、フェーズの1つでセッションに異常が発生したとき、異常が発生したフェーズの段階に応じて、少なくとも1つのユーザエージェントとSIP−ALGとの間で復旧信号を通信させることにより初期状態に復旧させる。
【選択図】 図1
Description
本発明は、SIP−ALG方法に関し、特に、状態正常化シグナリングを行なうSIP−ALG方法に関する。
SIP(Session Initiation Protocol)は、双方向型セッションの開始、変更、終了を行うための呼制御(シグナリング)を実現するプロトコルである。セッションとは、関係する相手同士でのデータ交換をいう。SIPはインターネット技術の国際的な標準化組織であるIETF(Internet Engineering Task Force)によって、1999年3月にRFC2543として策定された。RFC2543はその後、2002年6月にRFC3261として改版されている。そして現在2004年でも、SIPは拡張仕様が検討、策定され、より実用性の高いプロトコルを目指して発展を続けている。
下記の表1に示すように、SIPの他にもIP網上でのシグナリングプロトコルは複数のものが策定されている。その中でもITU−T(International Telecommunication Union−Telecommunication sector)によって策定されたH.323は、策定時期が早かったことなどの理由から従来まで数多くの適用実績がある。今日H.323と肩を並べるまでに台頭を果たし、さらに今後主流となりつつあるSIPには、H.323にはない次のような特長がある。
インターネットとの親和性が高い
SIPはWebコンテンツの転送に使われるHTTP(HyperText Transfer Protocol)や、メールの送信に使われるSMTP(Simple Mail Transfer Protocol)といったプロトコルが備える特長を活かし、IP網上での動作を基本として考え出されたものである。そのためSIPはH.323と比較して、インターネットで利用される様々なプロトコルとの親和性が高いものとなっている。
軽量で拡張性が高い
H.323が複数のプロトコルを組み合わせているため複雑になっているのに対して、SIPはシグナリングの手順をはじめシンプルな仕様であるため軽量である。またSIPは他のプロトコルと組み合わせることによって機能を付加することができ、拡張性も高い。
テキストベースで抜いやすい
H.323がバイナリで記述されるのに対して、SIPはテキストで記述されるため、特に開発や運用保守に際してデバッグが比較的容易となっている。またテスト用の特別な機器を用意する必要もなく扱いやすい。
インターネットとの親和性が高い
SIPはWebコンテンツの転送に使われるHTTP(HyperText Transfer Protocol)や、メールの送信に使われるSMTP(Simple Mail Transfer Protocol)といったプロトコルが備える特長を活かし、IP網上での動作を基本として考え出されたものである。そのためSIPはH.323と比較して、インターネットで利用される様々なプロトコルとの親和性が高いものとなっている。
軽量で拡張性が高い
H.323が複数のプロトコルを組み合わせているため複雑になっているのに対して、SIPはシグナリングの手順をはじめシンプルな仕様であるため軽量である。またSIPは他のプロトコルと組み合わせることによって機能を付加することができ、拡張性も高い。
テキストベースで抜いやすい
H.323がバイナリで記述されるのに対して、SIPはテキストで記述されるため、特に開発や運用保守に際してデバッグが比較的容易となっている。またテスト用の特別な機器を用意する必要もなく扱いやすい。
このような特長をもつSIPは、IP綱上での音声通話(固定電話、携帯電話)をはじめ、ビデオ通信やチャットなどへ応用がなされ、普及を始めている。
SIPによる通信の構成要素
SIPはHTTPと同様、クライアント/サーバ型のトランザクションモデルを採用している。つまりSIPによる通信ではクライアントからリクエストが送出され、それに対するレスポンスがサーバから返されるという形式をとる。またSIPではピアツーピア型の通信を行うため、単一のセッションの間でもエンドポイントの役割は変化するのが普通である。エンドポイントは、通信の内容に応じてクライアント(リクエストを送る側)にもなれば、サーバ(レスポンスを返す側)のいずれにもなる。
SIPはHTTPと同様、クライアント/サーバ型のトランザクションモデルを採用している。つまりSIPによる通信ではクライアントからリクエストが送出され、それに対するレスポンスがサーバから返されるという形式をとる。またSIPではピアツーピア型の通信を行うため、単一のセッションの間でもエンドポイントの役割は変化するのが普通である。エンドポイントは、通信の内容に応じてクライアント(リクエストを送る側)にもなれば、サーバ(レスポンスを返す側)のいずれにもなる。
SIPによる通信の構成要素は、図1に示すようにユーザエージェント10、12、SIPサーバ14、ロケーションサーバ16の大きく3つに分けられる。
ユーザエージェント10、12のエンドポイント間では、サーバ14を経由して間接に、または相手同士で直接に、SIPによるシグナリングを行う。シグナリングによりセッションが確立した後、実際に音声や映像などメディアの交換が直接に行われる。
ユーザエージェント
SIPによる通信のエンドポイントに相当するのが、ユーザエージェント(UA:User Agent)である。ユーザのフロントエンドとして、セッションを確立するためのSIPメッセージの送受信やメディアの送受信などの処理を行う。
ユーザエージェント
SIPによる通信のエンドポイントに相当するのが、ユーザエージェント(UA:User Agent)である。ユーザのフロントエンドとして、セッションを確立するためのSIPメッセージの送受信やメディアの送受信などの処理を行う。
UAはユーザエージェントクライアント(UAC:User Agent Client)とユーザエージェントサーバ(UAS:User Agent Server)という2つの機能モジュールに分けられる。UACはリクエストを開始する機能モジュールである。それに対して、UASは受け取ったリクエストに対するレスポンスを生成する機能モジュールである。UAには必ずUACとUASの両方の機能が含まれており、単一のセッションであっても、どちらの機能も利用される。
UAの実装例としては、SIP電話端末、パソコンやPDA上で動作するソフトウェア(ソフトフォン)が挙げられる。図2にソフトフォンの例を示す。
SIPサーバ
SIPサーバは、UA間で行われるシグナリングの経路上に位置し、セッション確立を仲介する処理を行う。SIPサーバ14はさらにプロキシサーバ14a、リダイレクトサーバ14b、レジストラ14cの3つに分けられる。
プロキシサーバ
プロキシサーバ(Proxy Server)14aは、UAの代理としてSIPメッセージを中継する。プロキシサーバは、SIPメッセージを受け取るとロケーションサーバに問い合わせを行うことで宛先を判断し、リクエストをUASに、レスポンスをUACに転送する。ネットワークの構成に応じて、複数のプロキシサーバが経由されることもある。
リダイレクトサーバ
リダイレクトサーバ(Redirect Server)14bは、UAやプロキシサーバからリクエストを受け取ると、リダイレクトレスポンス(ステータスコードが3xxのレスポンス)を返す。このレスポンスにはUAやプロキシサーバがリクエストを送り直すべき宛先が記述される。プロキシサーバとは異なり、リダイレクトサーバはSIPメッセージを転送することはない。
レジストラ
レジストラ(Registrar)14cは、UAの現在位置を登録するリクエスト(REGISTERリクエスト)を受け取り、ロケーションサーバのデータベースに反映する。この情報は同一の管理ドメイン下にあるプロキシサーバやリダイレクトサーバによって、SIPメッセージの適切なルーティングを行うために利用される。
ロケーションサーバ
ロケーションサーバ(Location Server)16は、レジストラから登録されるUAの情報を保持し、それをプロキシサーバやリダイレクトサーバによって利用されるデータベースとして提供する。SIPではロケーションサーバへのアクセス方法を規定していないため、レコードに対する操作には別プロトコルが利用される。
SIPメッセージ
SIP URI
SIPによる通信では、リソースの特定にURI(Uniform ResourceIdentifier)を利用する。SIPで新たに定義されたURIにはSIP URIとSIPS URIの2つがあり、この他にもtel URIが利用できる。ここでSIPS URIとはSIPのセキュアなURIであり、TCPのようなコネクション指向のトランスポートプロトコルを利用する通信に対してTLS(Transport Layer Security)による暗号化が施される。RFC3261では、SIPのトランスポートプロトコルとしてTCPとUDPが必須とされている。しかし実際には、プロキシのようにシグナリングパス上のサーバにとって、長時間存続するコネクションを維持することが困難な場合がある。そのため実際には多くの場合に、UDPがトランスポートプロトコルとして利用される。このような理由から、本発明でもSIPのトランスポートプロトコルとしてUDPを想定する。
SIPサーバ
SIPサーバは、UA間で行われるシグナリングの経路上に位置し、セッション確立を仲介する処理を行う。SIPサーバ14はさらにプロキシサーバ14a、リダイレクトサーバ14b、レジストラ14cの3つに分けられる。
プロキシサーバ
プロキシサーバ(Proxy Server)14aは、UAの代理としてSIPメッセージを中継する。プロキシサーバは、SIPメッセージを受け取るとロケーションサーバに問い合わせを行うことで宛先を判断し、リクエストをUASに、レスポンスをUACに転送する。ネットワークの構成に応じて、複数のプロキシサーバが経由されることもある。
リダイレクトサーバ
リダイレクトサーバ(Redirect Server)14bは、UAやプロキシサーバからリクエストを受け取ると、リダイレクトレスポンス(ステータスコードが3xxのレスポンス)を返す。このレスポンスにはUAやプロキシサーバがリクエストを送り直すべき宛先が記述される。プロキシサーバとは異なり、リダイレクトサーバはSIPメッセージを転送することはない。
レジストラ
レジストラ(Registrar)14cは、UAの現在位置を登録するリクエスト(REGISTERリクエスト)を受け取り、ロケーションサーバのデータベースに反映する。この情報は同一の管理ドメイン下にあるプロキシサーバやリダイレクトサーバによって、SIPメッセージの適切なルーティングを行うために利用される。
ロケーションサーバ
ロケーションサーバ(Location Server)16は、レジストラから登録されるUAの情報を保持し、それをプロキシサーバやリダイレクトサーバによって利用されるデータベースとして提供する。SIPではロケーションサーバへのアクセス方法を規定していないため、レコードに対する操作には別プロトコルが利用される。
SIPメッセージ
SIP URI
SIPによる通信では、リソースの特定にURI(Uniform ResourceIdentifier)を利用する。SIPで新たに定義されたURIにはSIP URIとSIPS URIの2つがあり、この他にもtel URIが利用できる。ここでSIPS URIとはSIPのセキュアなURIであり、TCPのようなコネクション指向のトランスポートプロトコルを利用する通信に対してTLS(Transport Layer Security)による暗号化が施される。RFC3261では、SIPのトランスポートプロトコルとしてTCPとUDPが必須とされている。しかし実際には、プロキシのようにシグナリングパス上のサーバにとって、長時間存続するコネクションを維持することが困難な場合がある。そのため実際には多くの場合に、UDPがトランスポートプロトコルとして利用される。このような理由から、本発明でもSIPのトランスポートプロトコルとしてUDPを想定する。
SIP URIとSIPS URIの形式は下記の表2のようにRFC2396のガイドラインに従って定義されている。SIP URIの一般的な形式は次の通りである。SIPS URIはプロトコルスキームが、“sips”になることを除けばSIP URIと同じ形式である。
下線で示した部分は必ず指定しなくてはならない。各要素の意味は次の通りである。
user 宛先となるホストでのユーザID.ユーザIDを指定せずに単にホストを宛先とする場合には、’@’までを省略することができる。宛先のホストが電話番号を扱える場合には、電話番号を指定することもできる。
password ユーザIDに関連付けられたパスワード.ただし認証情報を平文で記述することになるため、RFC3261では使用を推奨していない。実装上は“user:password”を単一の文字列として扱うことができる。
host SIPリソースを提供するホスト.FQDN(Fully Qualified Domain Name)またはIPアドレスのいずれでも指定することができるが、FQDNを利用することが推奨される。
port リクエストの宛先ポート番号.UDP、TCP、およびSCTP(Stream Control Transmission Protocol)を使用する”sip”スキームでは5060、TCP、およびTLS上のTCPを利用する”sips”スキームでは5061がデフォルトで利用される。
uri−parameters URIパラメータ. ”<パラメータ名>=<パラメータ値>”の形式で、各組を’;’で区切ることで複数指定することができる。定義済みパラメータ名にはtransport、user、method、maddr、ttl、1rなどがあり、独自に追加定義することも可能である。
headers リクエストのヘッダフィールド. ”<ヘッダ名>=<値>”の形式で、各組を、’&’、で区切ることで複数指定することができる。特別なヘッダ名としてbodyが定義されており、この値はSIPメッセージのボディとなる。
メッセージの構成
SIPメッセージはテキストベースのプロトコルであり、文字コードセットとしてUTF−8(Uni−versal Ttansformation Format、8−bit Form)を利用する。UTF−8とは、文字コードポイント(文字の符号化用に割り当てられた整数値)を、ASCIIとの互換性を持たせつつ、他の文字を可変長のバイト列で符合化する方法である。UnicodeまたはUSC(Universal Character Set)で符合化された文字を、インターネットで転送する際の変換に利用される。
user 宛先となるホストでのユーザID.ユーザIDを指定せずに単にホストを宛先とする場合には、’@’までを省略することができる。宛先のホストが電話番号を扱える場合には、電話番号を指定することもできる。
password ユーザIDに関連付けられたパスワード.ただし認証情報を平文で記述することになるため、RFC3261では使用を推奨していない。実装上は“user:password”を単一の文字列として扱うことができる。
host SIPリソースを提供するホスト.FQDN(Fully Qualified Domain Name)またはIPアドレスのいずれでも指定することができるが、FQDNを利用することが推奨される。
port リクエストの宛先ポート番号.UDP、TCP、およびSCTP(Stream Control Transmission Protocol)を使用する”sip”スキームでは5060、TCP、およびTLS上のTCPを利用する”sips”スキームでは5061がデフォルトで利用される。
uri−parameters URIパラメータ. ”<パラメータ名>=<パラメータ値>”の形式で、各組を’;’で区切ることで複数指定することができる。定義済みパラメータ名にはtransport、user、method、maddr、ttl、1rなどがあり、独自に追加定義することも可能である。
headers リクエストのヘッダフィールド. ”<ヘッダ名>=<値>”の形式で、各組を、’&’、で区切ることで複数指定することができる。特別なヘッダ名としてbodyが定義されており、この値はSIPメッセージのボディとなる。
メッセージの構成
SIPメッセージはテキストベースのプロトコルであり、文字コードセットとしてUTF−8(Uni−versal Ttansformation Format、8−bit Form)を利用する。UTF−8とは、文字コードポイント(文字の符号化用に割り当てられた整数値)を、ASCIIとの互換性を持たせつつ、他の文字を可変長のバイト列で符合化する方法である。UnicodeまたはUSC(Universal Character Set)で符合化された文字を、インターネットで転送する際の変換に利用される。
SIPメッセージは、クライアントからサーバへのリクエスト、またはサーバからクライアントへのレスポンスのいずれかである。これらは詳細なシンタックスは異なるが、共にRFC2822の基本フォーマットを利用する。これらのメッセージは下記の表3に示すように、スタートライン、複数行のヘッダフィールド、ヘッダフィールドの終了を表す空白行、およびオプションのボディからなる。メッセージ内の各行はCRLFで区切られる。
スタートラインは、メッセージがリクエストの場合に特にリクエストラインと呼ばれる。またメッセージがレスポンスの場合には特にステータスラインと呼ばれる。
リクエスト
リクエストは、メッセージの先頭行にリクエストライン(Request−Line)を持つ。リクエストラインは1つの空白文字(SP)で区切られた、メソッド名(Method)、リクエストURI(Request−URI)、およびプロトコルのバージョン(SIP−Version)からなる。下記の表4にリクエストラインの一般形式を示す。
リクエスト
リクエストは、メッセージの先頭行にリクエストライン(Request−Line)を持つ。リクエストラインは1つの空白文字(SP)で区切られた、メソッド名(Method)、リクエストURI(Request−URI)、およびプロトコルのバージョン(SIP−Version)からなる。下記の表4にリクエストラインの一般形式を示す。
各要素の意味は次の通りである。
Method リクエストの種別を表す。RFC3261では、UAのコンタクト情報を登録するためのREGISTER、セッションを構築するためのINVITE、ACK、CANCEL、セッションを終了するためのBYE、およびサーバに能力を問い合わせるためのOPTIONSの6種類のメソッドが定義されている。また下記の表5に示すように、これらのメソッドに加えて、付随するその他のRFCでは拡張メソッドも定義されている。
Method リクエストの種別を表す。RFC3261では、UAのコンタクト情報を登録するためのREGISTER、セッションを構築するためのINVITE、ACK、CANCEL、セッションを終了するためのBYE、およびサーバに能力を問い合わせるためのOPTIONSの6種類のメソッドが定義されている。また下記の表5に示すように、これらのメソッドに加えて、付随するその他のRFCでは拡張メソッドも定義されている。
Request−URI リクエストの宛先となるユーザやサービスのロケーションを表す。SIP URI、SIPS URI、またはRFC2396で定義される一般的なURIとして記述される。
SIP−Version メッセージの記述に利用するSIPプロトコルのバージョンを表す。RFC3261に準拠する場合は、“SIP/2.0”となる。
レスポンス
レスポンスは、メッセージの先頭行にステータスライン(Status−Line)を持つ。ステータスラインは1つの空白文字(SP)で区切られた、プロトコルのバージョン(SIP−Version)、ステータスコード(Status−Code)、および関連付けられたフレーズ(Reason−Phrase)からなる。下記の表6にステータスラインの一般形式を示す。
SIP−Version メッセージの記述に利用するSIPプロトコルのバージョンを表す。RFC3261に準拠する場合は、“SIP/2.0”となる。
レスポンス
レスポンスは、メッセージの先頭行にステータスライン(Status−Line)を持つ。ステータスラインは1つの空白文字(SP)で区切られた、プロトコルのバージョン(SIP−Version)、ステータスコード(Status−Code)、および関連付けられたフレーズ(Reason−Phrase)からなる。下記の表6にステータスラインの一般形式を示す。
各要素の意味は次の通りである。
SIP−Version リクエストラインの場合と同様、メッセージの記述に利用するSIPプロトコルのバージョンを表す。
Status−Code l00番台から600番台までの3桁の整数からなる、リクエストに対する結果を表すコード. 下記の表7に、各区分のステータスコードの意味を示す。
SIP−Version リクエストラインの場合と同様、メッセージの記述に利用するSIPプロトコルのバージョンを表す。
Status−Code l00番台から600番台までの3桁の整数からなる、リクエストに対する結果を表すコード. 下記の表7に、各区分のステータスコードの意味を示す。
ここで1xxはプロビジョナル(暫定)レスポンス、2xx〜6xxはファイナル(最終)レスポンスに分類される。
Reason−Phrase テキストからなる、リクエストに対する結果についての短い説明.Status−Codeがオートマトンによる使用を意図しているのに対して、Reason−Phraseは人間のユーザによる使用を意図したものである。
シグナリングの構成単位
SIPによるシグナリングでは、連続する複数のメッセージによって意味のあるまとまりが形づくられる。本発明ではその中でも特に重要なトランザクションとダイアログについて触れる。
トランザクション
トランザクションとは、1つのリクエストとそれに村するレスポンス(ゼロ個以上の暫定レスポンス、および1つ以上の最終レスポンス)の組である。最終レスポンスが2xxでない場合に限り、トランザクションにはACKも含まれる。最終レスポンスが2xxである場合には、ACKはトランザクションの一部とは見なされない。
ダイアログ
ダイアログとは、トランザクション進行中に持続される、2つのUA間でのピアツーピアの関係である。INVITEリクエストに対する、100tryingを除く1xxレスポンス、および2xxレスポンスによって構築される。前者の手続きによって構築されたダイアログはearlyダイアログと呼ばれ、後者の手続きによって構築されたダイアログはconfirmedダイアログと呼ばれる。
Reason−Phrase テキストからなる、リクエストに対する結果についての短い説明.Status−Codeがオートマトンによる使用を意図しているのに対して、Reason−Phraseは人間のユーザによる使用を意図したものである。
シグナリングの構成単位
SIPによるシグナリングでは、連続する複数のメッセージによって意味のあるまとまりが形づくられる。本発明ではその中でも特に重要なトランザクションとダイアログについて触れる。
トランザクション
トランザクションとは、1つのリクエストとそれに村するレスポンス(ゼロ個以上の暫定レスポンス、および1つ以上の最終レスポンス)の組である。最終レスポンスが2xxでない場合に限り、トランザクションにはACKも含まれる。最終レスポンスが2xxである場合には、ACKはトランザクションの一部とは見なされない。
ダイアログ
ダイアログとは、トランザクション進行中に持続される、2つのUA間でのピアツーピアの関係である。INVITEリクエストに対する、100tryingを除く1xxレスポンス、および2xxレスポンスによって構築される。前者の手続きによって構築されたダイアログはearlyダイアログと呼ばれ、後者の手続きによって構築されたダイアログはconfirmedダイアログと呼ばれる。
SIPを利用した通信では、必ずしもサーバ側で状態を保持する必要がないため、端末側でそれぞれの結び付きを一意に保持しなくてはならない。ダイアログはこれを実現するためのものであり、次の3つの要素によって定義される。
・リモートtag(相手端末が作成したtag)
・ローカルtag(自端末が作成したtag)
・呼識別子
これらは、具体的には後述するTo tag、From tag、およびCall−IDに関連付けられ、3つの要素を組み合わせたものはダイアログIDと呼ばれる。
ヘッダフィールド
SIPメッセージには、スタートラインに続いて”<ヘッダ名>:<ヘッダ値>”の形式で複数のヘッダフィールドが続く。ヘッダフィールドは数多くの種類が定義されているが、本発明では特に利用頻度の高いものを選択して取り上げる。ヘッダフィールドの中でも、To、From、Via、Max−Forwards、CSeq、およびCa11−IDの6種類は、すべてのSIPリクエストメッセージに必須である。
To
Toヘッダフィールドは、リクエストの論理的な受信者を指定する。オプションの表示名(受信者名)は、ユーザインタフェースによって表示されることを意図している。tagパラメータは、ダイアログの構築に利用される。このヘッダフィールドのコンパクトフォームはtである。下記の表8にToヘッダフィールドを示す。
From
Fromヘッダフィールドは、リクエストのイニシュータ(生成元)を示す。Toヘッダフィールド同様、オプションの表示名(送信者名)は、エーザインタフエースによって表示されることを意図している。ただしクライアントの身元が隠される場合には、表示名としで、Anonymous”を使用するべきとされている。tagパラメータは、Toヘッダフィールド同様、ダイアログの構築に利用される。このヘッダフィールドのコンパクトフォームはfである。下記の表9にFromヘッダフィールドを示す。
Fromヘッダフィールドは、リクエストのイニシュータ(生成元)を示す。Toヘッダフィールド同様、オプションの表示名(送信者名)は、エーザインタフエースによって表示されることを意図している。ただしクライアントの身元が隠される場合には、表示名としで、Anonymous”を使用するべきとされている。tagパラメータは、Toヘッダフィールド同様、ダイアログの構築に利用される。このヘッダフィールドのコンパクトフォームはfである。下記の表9にFromヘッダフィールドを示す。
Via
Viaヘッダフィールドは、リクエストが経由したパスを示す。これはレスポンスが返される時にたどるべきパスとなる。”z9hG4bK”(マジッククッキー)で始まるbranchパラメ一夕は、トランザクションIDとして、ループ検知のためにプロキシサーバによって利用される。Viaヘッダフィールドは、この他にもmaddr、ttl、receivedなどのパラメータを含むことができる。このヘッダフィールドのコンパクトフォームはvである。下記の表10にViaヘッダフィールドを示す。
Viaヘッダフィールドは、リクエストが経由したパスを示す。これはレスポンスが返される時にたどるべきパスとなる。”z9hG4bK”(マジッククッキー)で始まるbranchパラメ一夕は、トランザクションIDとして、ループ検知のためにプロキシサーバによって利用される。Viaヘッダフィールドは、この他にもmaddr、ttl、receivedなどのパラメータを含むことができる。このヘッダフィールドのコンパクトフォームはvである。下記の表10にViaヘッダフィールドを示す。
Record−Route
Record−Routeヘッダフィールドは、ダイアログ中のそれ以降のリクエストを、指定したプロキシを経由して転送させるために、プロキシによってリクエストに挿入される。下記の表11にRecord−Routeヘッダフィールドを示す。
Record−Routeヘッダフィールドは、ダイアログ中のそれ以降のリクエストを、指定したプロキシを経由して転送させるために、プロキシによってリクエストに挿入される。下記の表11にRecord−Routeヘッダフィールドを示す。
Route
Routeヘッダフィールドは、Record−Routeヘッダフィールドにリストされたプロキシのセットを経由してリクエストを転送させるために利用される。下記の表12にRouteヘッダフィールドを示す。
Routeヘッダフィールドは、Record−Routeヘッダフィールドにリストされたプロキシのセットを経由してリクエストを転送させるために利用される。下記の表12にRouteヘッダフィールドを示す。
Max−Forwards
Max−Forwardsヘッダフィールドは、リクエストをダウンストリームサーバに転送できるプロキシの数を制限するために利用される。Max−Forwardsヘッダフィールドの値は、リクエストが転送されることを認められている残り回数を示す0〜255の整数である。このカウントは、そのリクエストを転送する各プロキシでデクリメントされる。推奨される初期値は70である。下記の表13にMax−Forwardsヘッダフィールドを示す。
Max−Forwardsヘッダフィールドは、リクエストをダウンストリームサーバに転送できるプロキシの数を制限するために利用される。Max−Forwardsヘッダフィールドの値は、リクエストが転送されることを認められている残り回数を示す0〜255の整数である。このカウントは、そのリクエストを転送する各プロキシでデクリメントされる。推奨される初期値は70である。下記の表13にMax−Forwardsヘッダフィールドを示す。
Contact
Contactヘッダフィールドは、ユーザがプロキシを経由せずに直接通信するためのURI情報を示す。RFC3261ではパラメータとして、q(品質値)、およびexpires(有効期限値)を定義している。このヘッダフィールドのコンパクトフォームはmである。下記の表14にContactヘッダフィールドを示す。
Contactヘッダフィールドは、ユーザがプロキシを経由せずに直接通信するためのURI情報を示す。RFC3261ではパラメータとして、q(品質値)、およびexpires(有効期限値)を定義している。このヘッダフィールドのコンパクトフォームはmである。下記の表14にContactヘッダフィールドを示す。
Explres
Expiresヘッダフィールドは、メッセージまたはコンテンツがそれ以降期限切れになる相対時間を示すが、正確な意味はメソッドに依存する。Expiresヘッダフィールドの値は、リクエストの受信時から計測された0から232−1の間の、秒を表す10進整数である。下記の表15にExpiresヘッダフィールドを示す。
Expiresヘッダフィールドは、メッセージまたはコンテンツがそれ以降期限切れになる相対時間を示すが、正確な意味はメソッドに依存する。Expiresヘッダフィールドの値は、リクエストの受信時から計測された0から232−1の間の、秒を表す10進整数である。下記の表15にExpiresヘッダフィールドを示す。
CSeq
CSeqヘッダフィールドは、10進数のシーケンス番号とリクエストのメソッド名の組み合わせで構成される。シーケンス番号は32ビットの符合なし整数で表現される。CSeqヘッダフィールドの値によって、トランザクションが順序付けられる。そのため新規リクエストとリクエストの再送を区別するために利用することができる。下記の表16にCSeqヘッダフィールドを示す。
CSeqヘッダフィールドは、10進数のシーケンス番号とリクエストのメソッド名の組み合わせで構成される。シーケンス番号は32ビットの符合なし整数で表現される。CSeqヘッダフィールドの値によって、トランザクションが順序付けられる。そのため新規リクエストとリクエストの再送を区別するために利用することができる。下記の表16にCSeqヘッダフィールドを示す。
CSeqシーケンス番号は、原則として新しいリクエストごとにインクリメントされる。ただし例外的にACKとCANCELリクエストに対しては、振り方が異なる。ACKリクエストのシーケンス番号は、確認応答の対象となるINVITEリクエストのそれと同じである。またCANCELリクエストのシーケンス番号は、キャンセルの村象となるリクエストのそれと同じである。
Call−ID
Call−IDヘッダフィールドは、特定の招待または特定のクライアントのすべての登録を一意に識別する。Call−IDの値はダイアログの構築に利用される。このヘッダフィールドのコンパクトフォームはiである。下記の表17にCall−IDヘッダフィールドを示す。
Call−IDヘッダフィールドは、特定の招待または特定のクライアントのすべての登録を一意に識別する。Call−IDの値はダイアログの構築に利用される。このヘッダフィールドのコンパクトフォームはiである。下記の表17にCall−IDヘッダフィールドを示す。
Content−Type
Content−Typeヘッダフィールドは、受信者に送られたメッセージボディのメディアタイプを示す。メディアタイプのエレメントはIANA(Internet Assigned Numbers Authority)によって登録されている。Content−Typeヘッダフィールドは、ボディが空でない場合には必ず存在しなければならない。このヘッダフィールドのコンパクトフォームはcである。下記の表18にContent−Typeヘッダフィールドを示す。
Content−Typeヘッダフィールドは、受信者に送られたメッセージボディのメディアタイプを示す。メディアタイプのエレメントはIANA(Internet Assigned Numbers Authority)によって登録されている。Content−Typeヘッダフィールドは、ボディが空でない場合には必ず存在しなければならない。このヘッダフィールドのコンパクトフォームはcである。下記の表18にContent−Typeヘッダフィールドを示す。
Content−Length
Content−Lengthヘッダフィールドは、受信者に送られたメッセージボディのサイズを、オクテット単位の10進数で示す。ここでメッセージボディのサイズにはヘッダフィールドとボディを分けるCRLFは含まない。ボディが存在しない場合、Content−Lengthヘッダフィールドの値は0に設定されなければならない。このヘッダフィールドのコンパクトフォームはlである。下記の表19にContent−Lengthヘッダフィールドを示す。
Content−Lengthヘッダフィールドは、受信者に送られたメッセージボディのサイズを、オクテット単位の10進数で示す。ここでメッセージボディのサイズにはヘッダフィールドとボディを分けるCRLFは含まない。ボディが存在しない場合、Content−Lengthヘッダフィールドの値は0に設定されなければならない。このヘッダフィールドのコンパクトフォームはlである。下記の表19にContent−Lengthヘッダフィールドを示す。
各種プロトコルとの連携
SIPを利用した通信では、SIP以外にも複数のプロトコルが連携して動作する。ここではその中でも、メディアセッションのセットアップに利用されるSDP、およびメディアによる通信の際に利用されるRTP/RTCPについて触れる。
SDP
SDP(Session Description Protocol)は、もともとマルチキャスト実験ネットワークMBone(Multicast Backbone)上で、ユーザをマルチメディア会議に召集したり、ユーザに対してセッションに関する情報を通知するために策定されたプロトコルである。SDPはSIPと同様にテキストベースであり、次のような情報が記述される。
・セッション記述
セッションの名前、ID、目的など、セッションを識別する情報
・時間記述
開始時刻、終了時刻、繰り返し回数など、セッションの有効期間に関する情報
・メディア記述
IPアドレスやポート番号、メディアの種別やコーデックなど、メディアに関する情報
RTP/RTCP
RTP(Real−time Transpoft Protocol)は、音声や映像のような実時間性(リアルタイム性)が要求されるデータを利用して、多人数マルチメディア会議のようなサービスをインターネットで実現することを目的に設計されたプロトコルである。現在ではIPネットワークでメディアをリアルタイムに転送する目的で広く利用されている。
SIPを利用した通信では、SIP以外にも複数のプロトコルが連携して動作する。ここではその中でも、メディアセッションのセットアップに利用されるSDP、およびメディアによる通信の際に利用されるRTP/RTCPについて触れる。
SDP
SDP(Session Description Protocol)は、もともとマルチキャスト実験ネットワークMBone(Multicast Backbone)上で、ユーザをマルチメディア会議に召集したり、ユーザに対してセッションに関する情報を通知するために策定されたプロトコルである。SDPはSIPと同様にテキストベースであり、次のような情報が記述される。
・セッション記述
セッションの名前、ID、目的など、セッションを識別する情報
・時間記述
開始時刻、終了時刻、繰り返し回数など、セッションの有効期間に関する情報
・メディア記述
IPアドレスやポート番号、メディアの種別やコーデックなど、メディアに関する情報
RTP/RTCP
RTP(Real−time Transpoft Protocol)は、音声や映像のような実時間性(リアルタイム性)が要求されるデータを利用して、多人数マルチメディア会議のようなサービスをインターネットで実現することを目的に設計されたプロトコルである。現在ではIPネットワークでメディアをリアルタイムに転送する目的で広く利用されている。
一方、RTCP(RTP ControI Protocol)は、RTPを制御するプロトコルとしてRTPと共に規定されているプロトコルである。RTCPは上位アプリケーションに対する、RTPパケットのフロー制御通知や、送受信端末間でのクロック同期などを行う。
RTP/RTCPはいずれもトランスポートプロトコルとしてUDPを利用する。また、いずれもバイナリで記述される。
前述したSIP−ALG装置は社団法人電子通信学会 信学技法 NS2003−208 PN2003−36(2003−12)に記載されている。
社団法人電子通信学会 信学技法 NS2003−208 PN2003−36(2003−12)
社団法人電子通信学会 信学技法 NS2003−208 PN2003−36(2003−12)
シグナリング異常時からの復旧
一般にSIPエンティティ(UAやプロキシのようなSIPによる構成要素となるホストを指す)は、トランザクション、またはセッションの開始から。また一方でエンティティの主要な動作は、シグナリングによって決定される。つまりエンティティは、シグナリングがなければ、その動作や状態を変化させることができない。
一般にSIPエンティティ(UAやプロキシのようなSIPによる構成要素となるホストを指す)は、トランザクション、またはセッションの開始から。また一方でエンティティの主要な動作は、シグナリングによって決定される。つまりエンティティは、シグナリングがなければ、その動作や状態を変化させることができない。
これはSIPによる通信の途中で、UAが強制終了したり、ユーザ端末がクラッシュするなど、メッセージの再送を行っても復旧できないエラーが発生したときに問題となる。つまりこのときSIPによる適切なシグナリングがないため、パス上のエンティティは初期状態に移行するための通知を受けることができない。これによって、エンティティは復旧までの間、様々なリソースを浪費することになってしまう。
例えば図3のような場合を考える。UAlとUA2との間ではセッションが確立し、メディアによる通信を開始しているとする。ここでUA2がクラッシュし、セッション終了リクエストであるBYEを生成せずに終了してしまうと、UAlとプロキシはこのセッションの終了を検知することができない。その結果、UAlとプロキシは、それぞれこのセッションのために確保したリソースを、無効となった後も保持し続けなければならなくなってしまう。
従来まで、この間題に対する解決策は、エンティティに対して独自にタイマを持たせることでしか実現されていなかった。そのため前述のエラーによってセッションに異常が発生してしまうと、エンティティはリソースの解放をタイムアウトまで個別に待つ必要があった。またエンティティに対して定義されているオートマトンには、タイマが設けられていない状態も存在していた。そのため特定の状態で前述のエラーが発生してしまうと、エンティティはそれを検知することができず、リソースを解放することができなかった。
異種ネットワーク間でのセッション確立
SIPによるシグナリングでは、メッセージの受信ホストがレスポンスの宛先を判断するためにIPおよびTCP/UDPヘッダ部分だけでなく、ペイロード部分にも送信ホストのアドレスが記述される。しかし通信を行うエンティティが、NATを介して異なるアドレス体系に存在する場合には、図4に示すようにこれが障害となる。
異種ネットワーク間でのセッション確立
SIPによるシグナリングでは、メッセージの受信ホストがレスポンスの宛先を判断するためにIPおよびTCP/UDPヘッダ部分だけでなく、ペイロード部分にも送信ホストのアドレスが記述される。しかし通信を行うエンティティが、NATを介して異なるアドレス体系に存在する場合には、図4に示すようにこれが障害となる。
通常のNAT(Network Address Translation)では、パケットを転送する際に、IPおよびTCP/UDPヘッダ部分に記述されるアドレスを書き換えるが、ペイロード部分ついては関知しない。そのため図4に示すように、リクエスト送信側のUAが、レスポンスの宛先としてペイロード内にローカルなアドレスを記述してしまうと、NATで変換されないまま転送される。その結果、受信側のUAは適切にレスポンスを返すことができなくなってしまう。つまり、アドレス体系の異なるネットワーク内に存在する2つのエンティティは、通常のNATを経由するだけでは通信を行うことができない。
この間題の解決策として、SIPを利用した通信でNATを実現するアプローチには複数のものが存在する。それぞれにメリットやデメリットがあり、現時点(2004年)では必ずしも完成されたものではない。本発明ではSIPで採用されている手法のうちのいくつかを取り上げる。
UPnP
UPnP(Universal Plug and Play)とは、UPnP Forumで規定された規格で、PCやAV機器など家庭内のいろいろな機器をネットワークを通じて接続し、相互に機能を提供しあう技術である。UPnPを利用すると、プライベートネットワーク内のホストからUPnP対応のルータに対して、ルータのもつパブリックなIPアドレスの割り当てや、ポート番号のマッピングを要求することができる。
UPnP
UPnP(Universal Plug and Play)とは、UPnP Forumで規定された規格で、PCやAV機器など家庭内のいろいろな機器をネットワークを通じて接続し、相互に機能を提供しあう技術である。UPnPを利用すると、プライベートネットワーク内のホストからUPnP対応のルータに対して、ルータのもつパブリックなIPアドレスの割り当てや、ポート番号のマッピングを要求することができる。
ルータに加えてSIPを利用するホストでもUPnPに対応すれば、プライベートネットワークとパブリックネットワークとの間で、SIPを利用して通信することができるようになる。ただし現時点ではUPnPに対応したルータ(UPnPサーバ)は数多く存在するものの、UAやプロキシなどSIPアプリケーションでUPnPに対応したもの(UPnPクライアント)は非常に少ない。
STUN
STUN(Simple Traversal of UDP through NATs)とは、アプリケーションがパブリックネットワークとの間のNAT、およびファイアウォールの存在とタイプを発見することを可能にする軽量プロトコルである。STUNは、NATがプライベートネットワーク内のホストに割り当てたパブリックなIPアドレスやポート番号を、アプリケーションに通知することができる。
STUN
STUN(Simple Traversal of UDP through NATs)とは、アプリケーションがパブリックネットワークとの間のNAT、およびファイアウォールの存在とタイプを発見することを可能にする軽量プロトコルである。STUNは、NATがプライベートネットワーク内のホストに割り当てたパブリックなIPアドレスやポート番号を、アプリケーションに通知することができる。
ただしこの方法を利用するためには、パブリックネットワーク内にSTUNサーバが必要となり、プライベートネットワーク内のSIPを利用するホストでもSTUNに対応する必要がある。これに加えて、途中に介在するNATの動作がコーン型でなければならない。つまり、NATの内側の同じIPアドレス、ポート番号から外側にパケットを送信する際に、NATの外側に割り当てられるIPアドレス、ポート番号が常に同じである必要がある。
B2BUA
B2BUA(Back to Back User Agent)とは、リクエストを受け取り、UASとしてそれを処理する論理的なエンティティである。同時に、そのリクエストに対してどのようなレスポンスを返すかを決定するためにUACとして動作し、リクエストを生成する。つまり、プライベートなUAとパブリックなUAが結合されたもので、それぞれのネットワークに対して独立したUAとして動作する。プロキシとは違い、ダイアログの状態を保持し、それが確立したすべてのリクエストに関与しなければならない。動作に関する明示的な定義はされていない。
B2BUA
B2BUA(Back to Back User Agent)とは、リクエストを受け取り、UASとしてそれを処理する論理的なエンティティである。同時に、そのリクエストに対してどのようなレスポンスを返すかを決定するためにUACとして動作し、リクエストを生成する。つまり、プライベートなUAとパブリックなUAが結合されたもので、それぞれのネットワークに対して独立したUAとして動作する。プロキシとは違い、ダイアログの状態を保持し、それが確立したすべてのリクエストに関与しなければならない。動作に関する明示的な定義はされていない。
この方法を利用するメリットとしては、UAやプロキシでは特別な処理を一切行う必要がない点がある。逆にデメリットとしては、B2BUAに対して負荷が集中するため、高い処理性能が求められるという点がある。
ALG
ALG(Application Level Gateway)とは、NATまたはファイアウォール上で通過するSIPメッセージを解析し、メッセージ内のプライベートなアドレスとパブリックなアドレスの変換を一括して行う方法である。動作に関する明示的な定義はされていないが、多くの検討がされてきている。
ALG
ALG(Application Level Gateway)とは、NATまたはファイアウォール上で通過するSIPメッセージを解析し、メッセージ内のプライベートなアドレスとパブリックなアドレスの変換を一括して行う方法である。動作に関する明示的な定義はされていないが、多くの検討がされてきている。
ALGはB2BUAと同様、サーバサイドに限定したアプローチであり、これらはタスクについても多くの共通点がある。実際、この方法を利用するメリットおよびデメリットは、B2BUAの場合と同様である。ただしB2BUAは、UAをベースとしているため、UAに対して定義されているオートマトンに基づく必要がある。それに対して、ALGにはその必要がないという相違点がある。ALGを利用することによって、B2BUAよりも柔軟な実装が可能になる。
したがって、本発明の目的は、シグナリング異常時からの迅速な復旧を可能にするSIP−ALG方法を提供することにある。
本発明は、2つのユーザエージェント(UA1、UA2)間のセッションの確立をSIP−ALGを介して行なうSIP−ALG方法において、セッションの開始から終了までを複数のフェーズに分割し、フェーズの1つでセッションに異常が発生したとき、異常が発生したフェーズの段階に応じて、少なくとも1つのユーザエージェントとSIP−ALGとの間で復旧信号を通信させることにより初期状態に復旧させることを特徴とする。
本発明によれば、セッションの開始から終了までの個々のフェーズにおけるシグナリング異常時から迅速な復旧が可能なSIP−ALG方法が得られる。
状態正常化シグナリングに基づくSIP−ALG:
状態正常化シグナリング
SIPでのセッション異常時からの復旧問題を解決するために、本発明では状態正常化シグナリングに基づくSIP−ALG装置を提案する。ここで状態正常化シグナリングとは、サーバがセッションの異常を検知したときに、適切なシグナリングを行うことによって、セッションを正常に終了させる手続きをいう。これによって、パス上のエンティティに対して、迅速かつ適切な状態遷移を促すことが可能となる。各エンティティは初期状態へ移行し、無効となったセッションのために確保されていたリソースを解放する。
状態正常化シグナリング
SIPでのセッション異常時からの復旧問題を解決するために、本発明では状態正常化シグナリングに基づくSIP−ALG装置を提案する。ここで状態正常化シグナリングとは、サーバがセッションの異常を検知したときに、適切なシグナリングを行うことによって、セッションを正常に終了させる手続きをいう。これによって、パス上のエンティティに対して、迅速かつ適切な状態遷移を促すことが可能となる。各エンティティは初期状態へ移行し、無効となったセッションのために確保されていたリソースを解放する。
本発明では、セッションを監視し、状態正常化シグナリングを行うサーバとしてSIP−ALGを利用する。この理由は、ALGではシグナリングとメディアの両方を監視することができるためである。ALGを利用することによって異種ネットワーク間接続が可能となるが、ALGはセッションを通して、シグナリングとメディアの両方が必ず経由するポイントともなる。本発明では、SIP−ALGに対して、自律的シグナリング機能、およびメディアモニタリング機能を付加することによって、状態正常化シグナリングを実現する。
自律的シグナリング
自律的シグナリングとは、セッションの状態に応じて、適切なメッセージ(リクエストおよびレスポンス)を生成する機能モジュールである。従来までSIP−ALGは、受け取ったメッセージを適切に変換し、送り出すだけであった。そのためALGは、呼の状態を保持し、特定のオートマトンに基づいて動作する、つまりステートフルである必要はなく、ステートレスな実装で十分であった。またALGは外部からの入力を受けてはじめて、その出力としてシグナリングを行うため、自身でメッセージを生成する必要もなかった。ここで、ALGが自律的シグナリングを行えるようにするためには、次の2点で拡張が必要となる。
セッションの状態管理
対象となるセッションの状態を把握することができるようにするために、シグナリングを監視し、セッションの継続中はその状態を保持する必要がある。
トランザクションの生成
自身でシグナリングを行うことができるようにするために、メッセージ(リクエストおよびレスポンス)を動的に生成し、トランザクションを適切に処理する必要がある。
メディアモニタリング
メディアモニタリングとは、メディアセッションを監視し異常を検知した場合に、自律的シグナリングモジュールに対してそれを通知する機能モジュールである。これによりセッションを通して、シグナリングだけではなくメディアも監視の対象とすることが可能となる。
セッションを構成するシグナリングのフェーズ分割
本発明では、INVITE−100Trying/180Ringing−200OK−ACKで開始し、BYE−200OKで終了する最も一般的なセッションについて、状態正常化シグナリングのコールフローを検討する。セッションを終了しSIPエンティティを初期状態に移行させるための手続きは、その時点でのセッションの状態によって異なる。そこで本発明では、一連のセッションをそれぞれ状態の異なる5つのフェーズに分割する。その上で、どのフェーズでシグナリングまたはメディアの異常が発生したかによって、その後に行うべきシグナリングを決定する。図5にセッションの各フェーズを示す。ここでFl、F3、F7、F9、およびFllは、それぞれのフェーズに移行するトリガとなるメッセージである。
フェーズI
SIP−ALGは初期状態(セッションが開始されていない状態)にあるとき、SIPUAlからのF1−INVITEを確認することによってフェーズIに移行する。フェーズIに移行した後、SIPUA2から一定時間内にレスポンスがないことを検知すると、セッションに異常が発生したとみなし、状態の正常化シグナリングを開始する。図6にフェーズIから復旧するコールフローを示す。
自律的シグナリング
自律的シグナリングとは、セッションの状態に応じて、適切なメッセージ(リクエストおよびレスポンス)を生成する機能モジュールである。従来までSIP−ALGは、受け取ったメッセージを適切に変換し、送り出すだけであった。そのためALGは、呼の状態を保持し、特定のオートマトンに基づいて動作する、つまりステートフルである必要はなく、ステートレスな実装で十分であった。またALGは外部からの入力を受けてはじめて、その出力としてシグナリングを行うため、自身でメッセージを生成する必要もなかった。ここで、ALGが自律的シグナリングを行えるようにするためには、次の2点で拡張が必要となる。
セッションの状態管理
対象となるセッションの状態を把握することができるようにするために、シグナリングを監視し、セッションの継続中はその状態を保持する必要がある。
トランザクションの生成
自身でシグナリングを行うことができるようにするために、メッセージ(リクエストおよびレスポンス)を動的に生成し、トランザクションを適切に処理する必要がある。
メディアモニタリング
メディアモニタリングとは、メディアセッションを監視し異常を検知した場合に、自律的シグナリングモジュールに対してそれを通知する機能モジュールである。これによりセッションを通して、シグナリングだけではなくメディアも監視の対象とすることが可能となる。
セッションを構成するシグナリングのフェーズ分割
本発明では、INVITE−100Trying/180Ringing−200OK−ACKで開始し、BYE−200OKで終了する最も一般的なセッションについて、状態正常化シグナリングのコールフローを検討する。セッションを終了しSIPエンティティを初期状態に移行させるための手続きは、その時点でのセッションの状態によって異なる。そこで本発明では、一連のセッションをそれぞれ状態の異なる5つのフェーズに分割する。その上で、どのフェーズでシグナリングまたはメディアの異常が発生したかによって、その後に行うべきシグナリングを決定する。図5にセッションの各フェーズを示す。ここでFl、F3、F7、F9、およびFllは、それぞれのフェーズに移行するトリガとなるメッセージである。
フェーズI
SIP−ALGは初期状態(セッションが開始されていない状態)にあるとき、SIPUAlからのF1−INVITEを確認することによってフェーズIに移行する。フェーズIに移行した後、SIPUA2から一定時間内にレスポンスがないことを検知すると、セッションに異常が発生したとみなし、状態の正常化シグナリングを開始する。図6にフェーズIから復旧するコールフローを示す。
ALGはUAlに対して、まずリクエストFlに対する最終エラーレスポンスF3を返す。続いてUAlからのF4によって、ALGとUAl間のトランザクションが正常形で終了する。
またALGはUA2に対しては、シグナリングを行わない。これはALGとUA2との間でダイアログが確立されていないことに基づいている。この状態ではCANCELによるリクエストのキャンセルや、BYEによるダイアログの終了は、RFC3261では認められていない。
フェーズII
SIP−ALGはフェーズIにあるとき、SIPUA2からのF3−100Trying、およびその他の暫定レスポンスを確認することによってフェーズIIに移行する。フェーズIIに移行した後、UA2から一定時間内に最終レスポンスがないことを検知すると、セッションに異常が発生したとみなし、状態の正常化シグナリングを開始する。図7にフェーズIIから復旧するコールフローを示す。
フェーズII
SIP−ALGはフェーズIにあるとき、SIPUA2からのF3−100Trying、およびその他の暫定レスポンスを確認することによってフェーズIIに移行する。フェーズIIに移行した後、UA2から一定時間内に最終レスポンスがないことを検知すると、セッションに異常が発生したとみなし、状態の正常化シグナリングを開始する。図7にフェーズIIから復旧するコールフローを示す。
ALGはUAlに対して、フェーズIと同様のシグナリングを行う。またALGはUA2に対しては、F8によってリクエストFlのキャンセルを試みる。もしもUA2からのレスポンスがあればFl0〜F12によって、ALGとUA2間のトランザクションが正常形で終了する。
フェーズIII
SIP−ALGはフェーズIまたはフェーズIIにあるとき、SIPUA2からのF7−200OKを確認することによってフェーズIIIに移行する。フェーズIIIに移行した後、SIPUAlから一定時間内にトランザクションを終了するACKリクエストがないことを検知すると、セッションに異常が発生したとみなし、状態の正常化シグナリングを開始する。図8にフェーズIIIから復旧するコールフローを示す。
フェーズIII
SIP−ALGはフェーズIまたはフェーズIIにあるとき、SIPUA2からのF7−200OKを確認することによってフェーズIIIに移行する。フェーズIIIに移行した後、SIPUAlから一定時間内にトランザクションを終了するACKリクエストがないことを検知すると、セッションに異常が発生したとみなし、状態の正常化シグナリングを開始する。図8にフェーズIIIから復旧するコールフローを示す。
まずALGはリクエストFlおよびレスポンスF7によって構築されたトランザクションを終了させる。ALGはあたかもUAlからのメッセージであるかのようにしてF9を生成し、UA2に対してトランザクションが正常形で終了したように見せる。
次にALGはUAl、UA2に村してそれぞれFl0、Fllによって、確立したセッションを終了させる。ALGはこれらをそれぞれあたかもUA2、UAlからのメッセージであるかのようにして生成する。ここでUAlはACKを送り出す前にBYEを受け取ることになるが、RFC3261では、UASはconfirmedダイアログ上ではBYEを送ることが認められている。
最後にALGはUAl、UA2からの最終成功レスポンスF12、F13を傍受する。これにより、Fl0、Fllによって開始されたトランザクションがそれぞれ正常形で終了する。ただしこのときUAlはシグナリングが行えない状態にあると考えられるため、F12は実際には行われない可能性が高い。
フェーズIV
SIP−ALGはフェーズIIIにあるとき、SIPUAlからのF9−ACKを確認することによってフェーズIVに移行する。フェーズIVに移行した後、片方向または両方向からメディアが一定時間ないことを検知すると、セッションに異常が発生したとみなし、状態の正常化シグナリングを開始する。図9にフェーズIVから復旧するコールフローを示す。
フェーズIV
SIP−ALGはフェーズIIIにあるとき、SIPUAlからのF9−ACKを確認することによってフェーズIVに移行する。フェーズIVに移行した後、片方向または両方向からメディアが一定時間ないことを検知すると、セッションに異常が発生したとみなし、状態の正常化シグナリングを開始する。図9にフェーズIVから復旧するコールフローを示す。
ALGによって行われるシグナリングFll〜F14は、フェーズIIIからの復旧でのFl0〜F13と同様である。ただしこのときUAlまたはUA2はシグナリングが行えない状態にあると考えられるため、F13またはF14は実際には行われない可能性が高い。
フェーズV
SIP−ALGはフェーズIVにあるとき、SIPUAl(またはSIPUA2)からのFll−BYEを確認することによってフェーズVに移行する。フェーズVに移行した後、UA2(またはUAl)から一定時間内に最終レスポンスがないことを検知すると、セッションに異常が発生したとみなし、状態の正常化シグナリングを開始する。図10にフェーズVから復旧するコールフローを示す。
フェーズV
SIP−ALGはフェーズIVにあるとき、SIPUAl(またはSIPUA2)からのFll−BYEを確認することによってフェーズVに移行する。フェーズVに移行した後、UA2(またはUAl)から一定時間内に最終レスポンスがないことを検知すると、セッションに異常が発生したとみなし、状態の正常化シグナリングを開始する。図10にフェーズVから復旧するコールフローを示す。
ここでは、ALGはリクエストFllによって開始されたトランザクションを終了させるだけである。ALGはあたかもUA2からのメッセージであるかのようにしてF13を生成し、UAlに対してトランザクションが正常形で終了したように見せる。
実施例環境
本発明では提案方式に基づいて状態正常化シグナリングを行うSIP−ALGを実装し、図11のような環境で検証実施例を行った。SIPUAにはソフトフォンとして、SJphoneを利用した。
本発明では提案方式に基づいて状態正常化シグナリングを行うSIP−ALGを実装し、図11のような環境で検証実施例を行った。SIPUAにはソフトフォンとして、SJphoneを利用した。
実施例では、UAlとUA2との間でALGを介してSIPによる通信を行い、そこでフェーズIからVまでの異常を発生させた。本発明では各フェーズにおいて、ALGによって適切に現在の状態を正常化するシグナリングが行われていることを検証する。
各フェーズからの復旧
フェーズI
フェーズIでの異常は、図6においてF2が行われた時点で、UA2が存在しないか、またはシグナリングが行えない状態になっているときに発生する。本発明では、UA2上でSIPフォンが稼働していないときに、UAlからセッション開始リクエストを生成することによって、この状況を発生させる。
各フェーズからの復旧
フェーズI
フェーズIでの異常は、図6においてF2が行われた時点で、UA2が存在しないか、またはシグナリングが行えない状態になっているときに発生する。本発明では、UA2上でSIPフォンが稼働していないときに、UAlからセッション開始リクエストを生成することによって、この状況を発生させる。
このフェーズについてのALGの実装では、UAlから最後に送られたFlを転送した後、2秒以内にUA2からの何らかのレスポンスがない場合に、状態正常化シグナリングを開始する。図6において、ALGによって状態の正常化が開始された後に行われるシグナリングのメッセージF3、およびF4を下記の表20、21に示す。
フェーズIからの復旧では、以上のシグナリングによってUAlおよびALGが初期状態に遷移し、セッションが正常に終了することを確認した。
フェーズII
フェーズIIでの異常は、図7においてF3またはF5が行われた後に、UA2がシグナリングを行えない状態になったか、またはユーザが時間内に応答しなかったときに発生する。前者からの復旧は、後者からの復旧の一部分であるため、ここでは後者の状態を想定する。本発明では、まずUAlからセッション開始リクエストを生成する。次にUA2上でユーザが時間内に応答しないことによって、この状況を発生させる。
フェーズII
フェーズIIでの異常は、図7においてF3またはF5が行われた後に、UA2がシグナリングを行えない状態になったか、またはユーザが時間内に応答しなかったときに発生する。前者からの復旧は、後者からの復旧の一部分であるため、ここでは後者の状態を想定する。本発明では、まずUAlからセッション開始リクエストを生成する。次にUA2上でユーザが時間内に応答しないことによって、この状況を発生させる。
このフェーズについてのALGの実装では、UA2から最後に送られたF3の後、または最後に送られたF5を転送した後、10秒以内にUA2からの最終レスポンスがない場合に、状態正常化シグナリングを開始する。図7において、ALGによって状態の正常化が開始された後に行われるシグナリングのメッセージF7〜F12を下記の表22〜27に示す。
フェーズIIからの復旧では、以上のシグナリングによって各UAおよびALGが初期状態に遷移し、セッションが正常に終了することを確認した。
フェーズIII
フェーズIIIでの異常は、図8においてF8が行われた時点で、UAlがシグナリングを行えない状態になっているときに発生する。本発明では、まずUAlからセッション開始リクエストを生成し、その直後にUAl上でSIPフォンを強制終了させる。次にUA2上でユーザが時間内に応答することによって、この状況を発生させる。
フェーズIII
フェーズIIIでの異常は、図8においてF8が行われた時点で、UAlがシグナリングを行えない状態になっているときに発生する。本発明では、まずUAlからセッション開始リクエストを生成し、その直後にUAl上でSIPフォンを強制終了させる。次にUA2上でユーザが時間内に応答することによって、この状況を発生させる。
このフェーズについてのALGの実装では、UA2から最後に送られたF7を転送した後、2秒以内にUAlからのACKがない場合に、状態正常化シグナリングを開始する。図8において、ALGによって状態の正常化が開始された後に行われるシグナリングのメッセージF9〜Fll、およびF13を下記の表28〜31に示す。
フェーズIV
フェーズIVでの異常は、図9においてFl0が行われた後に、セッション終了リクエストを伴わずにUAlまたはUA2からのメディアが一定時間以上なくなったときに発生する。本発明では、まずUAlとUA2との間でメディア通信を確立する。次にUA2上でSIPフォンを強制終了させ、セッション終了リクエストを伴わずにメディア通信を終了することによって、この状況を発生させる。
フェーズIVでの異常は、図9においてFl0が行われた後に、セッション終了リクエストを伴わずにUAlまたはUA2からのメディアが一定時間以上なくなったときに発生する。本発明では、まずUAlとUA2との間でメディア通信を確立する。次にUA2上でSIPフォンを強制終了させ、セッション終了リクエストを伴わずにメディア通信を終了することによって、この状況を発生させる。
このフェーズについてのALGの実装では、UA間でメディア通信が確立した後、セッション終了リクエストを伴わず、UAlまたはUA2からのメディアが1秒以上なかった場合に、状態正常化シグナリングを開始する。図9において、ALGによって状態の正常化が開始された後に行われるシグナリングのメッセージFll〜F13を下記の表32〜34に示す。
フェーズIVからの復旧では、以上のシグナリングによってUAlおよびALGが初期状態に遷移し、セッションが正常に終了することを確認した。
フェーズV
フェーズVでの異常は、図10においてF12が行われた時点で、UA2がシグナリングを行えない状態になっているときに発生する。本発明では、まずUAlとUA2との間でメディア通信を確立する。次にメディアモニタリングの機能を無効とした状態で、UA2上でSIPフォンを強制終了させる。最後にUAlからセッション終了リクエストを生成することによって、この状況を発生させる。
フェーズV
フェーズVでの異常は、図10においてF12が行われた時点で、UA2がシグナリングを行えない状態になっているときに発生する。本発明では、まずUAlとUA2との間でメディア通信を確立する。次にメディアモニタリングの機能を無効とした状態で、UA2上でSIPフォンを強制終了させる。最後にUAlからセッション終了リクエストを生成することによって、この状況を発生させる。
このフェーズについてのALGの実装では、UAlから最後に送られたFllを転送した後、2秒以内にUA2からの最終レスポンスがない場合に、状態正常化シグナリングを開始する。図10において、ALGによって状態の正常化が開始された後に行われるシグナリングのメッセージF13を下記の表35に示す。
フェーズVからの復旧では、以上のシグナリングによってUAlおよびALGが初期状態に遷移し、セッションが正常に終了することを確認した。
検証結果についての評価:
実施例により、すべてのフェーズにおいて、ALGによる状態正常化シグナリングが、パス上のUAに対して作用することを確認した。次に、各フェーズにおける状態正常化シグナリングの有効性について評価し、その上で最も効率的な状態正常化の手法について考察する。検討のために、RFC3261でUAに対して定義されているオートマトンを利用する。
フェーズI
フェーズIでは、INVITEを生成したUA(UAC)に村して、状態正常作シグナリングが作用する。ここではINVITEトランザクションにおけるUACのオートマトン(図12)を利用して、UACに対する状態正常化の効果を検討する。本発明で提案した、フェーズIにおける状態正常化シグナリングでは、UACに対して、CallingステートからCompletedステートへの遷移を促すことが可能になる。フェーズIでセッションに異常が発生する場合、図12において、UACはCallingステートにある。ここでUACを迅速にTerminatedステートに遷移させる必要がある。
検証結果についての評価:
実施例により、すべてのフェーズにおいて、ALGによる状態正常化シグナリングが、パス上のUAに対して作用することを確認した。次に、各フェーズにおける状態正常化シグナリングの有効性について評価し、その上で最も効率的な状態正常化の手法について考察する。検討のために、RFC3261でUAに対して定義されているオートマトンを利用する。
フェーズI
フェーズIでは、INVITEを生成したUA(UAC)に村して、状態正常作シグナリングが作用する。ここではINVITEトランザクションにおけるUACのオートマトン(図12)を利用して、UACに対する状態正常化の効果を検討する。本発明で提案した、フェーズIにおける状態正常化シグナリングでは、UACに対して、CallingステートからCompletedステートへの遷移を促すことが可能になる。フェーズIでセッションに異常が発生する場合、図12において、UACはCallingステートにある。ここでUACを迅速にTerminatedステートに遷移させる必要がある。
フェーズIにおける状態正常化シグナリングを行わないとき、UACはTimerB(以下T(B))が切れることによって、CallingステートからTerminatedステートに移行する。したがって、このとき復旧に要する時間はT(B)secである。
それに対して、フェーズIにおける状態正常化シグナリングを行うとき、UACはまずALGによってフェーズIの状態正常化が開始されるまで待機する必要がある。この時間、すなわちALGのもつフェーズI状態正常化タイマのタイムアウトをT‘1secとする。状態正常化シグナリングによって、UACはCallingステートからCompletedステートに移行する。これに続いて、UACはTimerD(以下T(D))が切れることによって、CompletedステートからTerminatedステートに移行する。したがって、このとき復旧に要する時間はT’1+T(D)secである。
以上のことから、状態正常化シグナリングを行う場合、T‘1+T(D)<T(B)となるようにT’1を決定することで、UACの迅速な状態遷移が可能となる。しかしここでSIPのトランスポートプロトコルとしてUDPを利用する場合、必ずT(D)>T(D)が成立する。そのためどのようにT‘1を決定しても、状態正常化シグナリングによって、デフォルトのタイムアウトよりも復旧が早くなることはない。したがって、フェーズIにおいては状態正常化シグナリングを行わず、UAにおいてデフォルトのタイムアウトを発生させるほうが効率的である。
フェーズII
フェーズIIでは、INVITEを生成し、それに対する1xxを受け取ったUA(UAC)に対して、状態正常化シグナリングが作用する。またユーザが時間内に応答しなかった場合には、INVITEに対する1xxを生成したUA(UAS)に対しても、状態正常化シグナリングが作用する。
UACに対する効果
ここではフェーズIからの復旧の場合と同様に、INVITEトランザクションにおけるUACのオートマトン(図12)を利用して、UACに対する状態正常化の効果を検討する。本発明で提案した、フェーズIIにおける状態正常化シグナリングでは、UACに対して、ProceedingステートからCompletedステートへの遷移を促すことが可能になる。フェーズIIでセッションに異常が発生する場合、図12において、UACはProceedingステートにある。ここでUACを迅速にTerminatedステートに遷移させる必要がある。
フェーズII
フェーズIIでは、INVITEを生成し、それに対する1xxを受け取ったUA(UAC)に対して、状態正常化シグナリングが作用する。またユーザが時間内に応答しなかった場合には、INVITEに対する1xxを生成したUA(UAS)に対しても、状態正常化シグナリングが作用する。
UACに対する効果
ここではフェーズIからの復旧の場合と同様に、INVITEトランザクションにおけるUACのオートマトン(図12)を利用して、UACに対する状態正常化の効果を検討する。本発明で提案した、フェーズIIにおける状態正常化シグナリングでは、UACに対して、ProceedingステートからCompletedステートへの遷移を促すことが可能になる。フェーズIIでセッションに異常が発生する場合、図12において、UACはProceedingステートにある。ここでUACを迅速にTerminatedステートに遷移させる必要がある。
フェーズIIにおける状態正常化シグナリングを行わないとき、UACはProceedingステートからどのステートにも移行することができない。これはProceedingステートにはタイマが全く設けられていないためである。したがって、このとき復旧することは不可能である。
それに対して、フェーズIIにおける状態正常化シグナリングを行うとき、UACはまずALGによってフェーズIIの状態正常化が開始されるまで待機する必要がある。この時間、すなわちALGのもつフェーズII状態正常化タイマのタイムアウトをT’2secとする。状態正常化シグナリングによって、UACはProceedingステートからCompletedステートに移行する。これに続いて、UACはT(D)が切れることによって、CompletedステートからTerminatedステートに移行する。したがって、このとき復旧に要する時間はT’2+T(D)secである。
以上のことから、従来までのオートマトンでは、フェーズIIにおいてセッションに異常が発生した場合、UACはProceedingステートから遷移できないため、復旧が不可能であった。しかし、本発明で提案した状態正常化シグナリングによって、UACはProceedingステートからの状態遷移が、T’2+T(D)secの時間で必ず可能となる。したがって、フェーズIIにおいてはUACに対する状態正常化シグナリングが有効である。
UASに対する効果
ここではINVITEトランザクションにおけるUASのオートマトン(図13)を利用して、UASに対する状態正常化の効果を検討する。本発明で提案した、フェーズIIにおける状態正常化シグナリングでは、UASに村して、ProceedingステートからCompletedステートへの遷移を促すことが可能になる。フェーズIIでユーザが時間内に応答しなかった場合、図13において、UASはProceedingステートにある。ここでUASを迅速にTerminatedステートに遷移させる必要がある。ユーザが応答しないことはセッションの異常ではないが、リソースの浪費となる可能性がある。公衆電話の場合、一定回数の呼出音が鳴ることで、留守番電話やFAXへの自動切り替えが行われることを考慮すれば、SIPでもこのような措置は安当であると考えられる。
UASに対する効果
ここではINVITEトランザクションにおけるUASのオートマトン(図13)を利用して、UASに対する状態正常化の効果を検討する。本発明で提案した、フェーズIIにおける状態正常化シグナリングでは、UASに村して、ProceedingステートからCompletedステートへの遷移を促すことが可能になる。フェーズIIでユーザが時間内に応答しなかった場合、図13において、UASはProceedingステートにある。ここでUASを迅速にTerminatedステートに遷移させる必要がある。ユーザが応答しないことはセッションの異常ではないが、リソースの浪費となる可能性がある。公衆電話の場合、一定回数の呼出音が鳴ることで、留守番電話やFAXへの自動切り替えが行われることを考慮すれば、SIPでもこのような措置は安当であると考えられる。
フェーズIIにおける状態正常化シグナリングが行われないとき、UASはProceedingステートからどのステートにも移行することができない。これはProceedingステートにはタイマが全く設けられていないためである。したがって、このときUACからセッションの取消を行わない限り、UASでは時間の制限なくユーザの呼出を継続する。
それに対して、フェーズIIにおける状態正常化シグナリングを行うとき、UASはまずALGによってフェーズIIの状態正常化が開始されるまで、T’2sec待機する必要がある。状態正常化シグナリングによって、はじめにUASはProceedingステートからCompletedステートに移行する。これに続いて、ALGからACKを受け取ることによって、UASはCompletedステートからConfirmedステートに移行する。最後に、UASはTimerI(以下T(I))が切れることによって、ConfirmedステートからTerminatedステートに移行する。したがって、このとき復旧に要する時間はT’2+T(I)secである。
以上のことから、従来までのオートマトンでは、フェーズIIにおいてユーザが応答しなかった場合、UASはProceedingステートから遷移できないため、時間の制限なくユーザの呼出が継続していた。しかし、本発明で提案した状態正常化シグナリングによって、UASはProceedngステートからの状態遷移が、T’2+T(I)secの時間で必ず可能となる。したがって、フェーズIIにおいてはUASに対する状態正常化シグナリングが有効である。
ただしこの場合、どのような呼であっても、リソースの浪費を抑制するために、呼出のための最長時間がT’2secとして決定される。しかし各UA(UACとUAS)では、状態正常化によって初期状態に移行した後であれば、再発信することも、またしないこともできる。そのためユーザに対して選択肢を与えることができ、利便性にも影響はないと考えられる。
フェーズIII
フェーズIIIでは、INVITEに対する2xxを生成したUA(UAS)に対して、状態正常化シグナリングが作用する・ただしここでINVITEトランザクションにおけるUASオートマトン(図13)において、UASは既にTerminatedステートにある。
フェーズIII
フェーズIIIでは、INVITEに対する2xxを生成したUA(UAS)に対して、状態正常化シグナリングが作用する・ただしここでINVITEトランザクションにおけるUASオートマトン(図13)において、UASは既にTerminatedステートにある。
しかしメディア通信は確立しているため、開始したセッションを終了するために、新しくBYEトランザクションが生成される・これによって、INVITEトランザクションにおけるUASは、新たにBYEトランザクションにおけるUASとなる。そのため、ここでは非INVITEトランザクションにおけるUASのオートマトン(図14)を利用して、UASに対する状態正常化の効果を検討する。本発明で提案した、フェーズIIIにおける状態正常化シグナリングでは、UASに対して、初期状態(BYEトランザクションが開始されていない状態)からTryingステートへの遷移を促すことが可能になる。フェーズIIIでセッションに異常が発生する場合、図14において、UASは初期状態にある。ここでUASを迅速にTerminatedステートに遷移させる必要がある。
フェーズIIIにおける状態正常化シグナリングを行わないとき、UASは、INVITEトランザクションを終了し、メディア通信を開始する。しかしこのときUAは特定のオートマトンに基づいて動作することはない。そのためUASはセッションの異常を検知することができず、メディア通信を終了することができない。したがって、このとき復旧することは不可能である。ここで、RFC3261では、「UASが2xxを生成したのにいつまでもACKを受け取らない場合、UASはダイアログを終了するためにBYEを生成するべきである」とされている。しかし実装は必須ではないため、すべてのUAに対して期待できる機能ではない。
それに対して、フェーズIIIにおける状態正常化シグナリングを行うとき、UASはまずALGによってフェーズIIIの状態正常化が開始されるまで待機する必要がある。この時間、すなわちALGのもつフェーズIII状態正常化タイマのタイムアウトをT’3secとする。状態正常化シグナリングによって、UASはALGからのBYEを受け取る。それを契機として、はじめにUASはTryingステートに入る。これに続いて、BYEに対する2xxを生成することによって、UASはTryingステートからCompletedステートに移行する。最後に、UASはTimerJ(以下T(J))が切れることによって、CompletedステートからTerminatedステートに移行する。したがって、このとき復旧に要する時間はT’3+T(J)secである。
以上のことから、従来までのオートマトンでは、フェーズIIIにおいてセッションに異常が発生した場合、UASはメディア通信を終了できない。しかし、本発明で提案した状態正常化シグナリングによって、UASはこの状態からの復旧が、T’3+T(J)secの時間で可能となる。したがって、フェーズIIIにおいてはUASに対する状態正常化シグナリングが有効である。またUASが独自にBYEを生成する場合、復旧に要する時間はT(B)+T(J)secである。そのためT’3+T(J)<T(B)+T(J)、つまりT’3<T(B)となるようにT’3を決定することで、この場合でもUASの迅速な状態遷移が可能となる。
フェーズIV
フェーズIVでは、異常が発生したセッションで、メディア通信を継続しているUAに対して、状態正常化シグナリングが作用する。一般にUAは、通信相手であるUAからのメディアをモニタリングすることはない。
フェーズIV
フェーズIVでは、異常が発生したセッションで、メディア通信を継続しているUAに対して、状態正常化シグナリングが作用する。一般にUAは、通信相手であるUAからのメディアをモニタリングすることはない。
フェーズIVにおける状態正常化シグナリングを行わないとき、メディア通信を継続しているUAは、通信相手であるUAからのメディアがなくなっても、セッションの異常とみなすことはなく、メディア通信を終了することができない。したがって、このとき復旧することは不可能である。フェーズIIIとの決定的な相違点として、INVITEトランザクションにおけるUASが、独自にBYEを生成することはないということがある。
それに対して、フェーズIVにおける状態正常化シグナリングを行うとき、メディア通信を継続しているUAは、まずALGによってフェーズIVの状態正常化が開始されるまで待機する必要がある。この時間、すなわちALGのもつフェーズIV状態正常化タイマのタイムアウトをT’4secとする。この後行われる状態正常化シグナリングの流れと、その効果は、フェーズIIIからの復旧の場合と同様である。したがって、このとき復旧に要する時間はT’4+T(J)secである。
以上のことから、従来までのメディア通信では、フェーズIVにおいてセッションに異常が発生した場合、UAは復旧が不可能であった。しかし、本発明で提案した状態正常化シグナリングによって、UAはこの状態からの復旧が、T’4+T(J)secの時間で可能となる。したがって、フェーズIVにおいてはUAに対する状態正常化シグナリングが有効である。
フェーズV
フェーズVでは、BYEを生成したUA(UAC)に対して、状態正常化シグナリングが作用する。ここでは非INVITEトランザクションにおけるUACのオートマトン(図15)を利用して、UACに対する状態正常化の効果を検討する。本発明で提案した、フェーズVにおける状態正常化シグナリングでは、UACに村して、TryingステートからCompletedステート、またはProceedingステートからCompletedステートへの遷移を促すことが可能になる。フェーズVでセッションに異常が発生する場合、図15において、UACはTryingステートにある。ここでUACを迅速にTerminatedステートに遷移させる必要がある。
フェーズV
フェーズVでは、BYEを生成したUA(UAC)に対して、状態正常化シグナリングが作用する。ここでは非INVITEトランザクションにおけるUACのオートマトン(図15)を利用して、UACに対する状態正常化の効果を検討する。本発明で提案した、フェーズVにおける状態正常化シグナリングでは、UACに村して、TryingステートからCompletedステート、またはProceedingステートからCompletedステートへの遷移を促すことが可能になる。フェーズVでセッションに異常が発生する場合、図15において、UACはTryingステートにある。ここでUACを迅速にTerminatedステートに遷移させる必要がある。
フェーズVにおける状態正常化シグナリングを行わないとき、UACはTimerF(以下T(F))が切れることによって、TryingステートからTerminatedステートに移行する。したがって、このとき復旧に要する時間はT(F)secである。
それに対して、フェーズVにおける状態正常化シグナリングを行うとき、UACはまずALGによってフェーズVの状態正常化が開始されるまで待機する必要がある。この時間、すなわちALGのもつフェーズV状態正常化タイマのタイムアウトをT’5secとする。状態正常化シグナリングによって、UACはTryingステートからCompletedステートに移行する。これに続いて、UACはTimerK(以下T(K))が切れることによって、CompletedステートからTerminatedステートに移行する。したがって、このとき復旧に要する時間はT’5+T(K)secである。
以上のことから、状態正常化シグナリングを行う場合、T’5+T(K)<T(F)となるようにT’5を決定することで、UACの迅速な状態遷移が可能となる。したがって、フェーズVにおいてはUACに対する状態正常化シグナリングが有効である。
フェーズIからの復旧の別の実施例討
フェーズIからの復旧では、図6において提案したシグナリングとはまた別の実施例で、状態正常化を実現することができる。図16はこの実施例におけるフェーズIからの復旧するコールフローを示す。
シグナリングの詳細
ALGはUAlに対して、まずリクエストFlに対する最終成功レスポンスF3を返す。続いてUAlからのF4によって、ALGとUAl間のINVITEトランザクションが正常形で終了する。ここでALGとUAl間でメディア通信が確立する。次にALGはUAlに対して、F5によって、確立したメディア通信を終了させる。ALGはF5をあたかもUA2からのメッセージであるかのようにして生成する。最後にALGはUAlからの最終成功レスポンスF6を傍受する。これにより、F5によって開始されたBYEトランザクションが正常形で終了する。
フェーズIからの復旧の別の実施例討
フェーズIからの復旧では、図6において提案したシグナリングとはまた別の実施例で、状態正常化を実現することができる。図16はこの実施例におけるフェーズIからの復旧するコールフローを示す。
シグナリングの詳細
ALGはUAlに対して、まずリクエストFlに対する最終成功レスポンスF3を返す。続いてUAlからのF4によって、ALGとUAl間のINVITEトランザクションが正常形で終了する。ここでALGとUAl間でメディア通信が確立する。次にALGはUAlに対して、F5によって、確立したメディア通信を終了させる。ALGはF5をあたかもUA2からのメッセージであるかのようにして生成する。最後にALGはUAlからの最終成功レスポンスF6を傍受する。これにより、F5によって開始されたBYEトランザクションが正常形で終了する。
またALGはUA2に対しては、シグナリングを行わない。これは本発明で利用した前述の実施例に基づくフェーズIからの復旧と同様である。
この実施例に基づくフェーズI状態正常化シグナリングでは、はじめにINVITEトランザクションにおけるUAC(図12)に対して、CallingステートからTerminatedステートへの遷移を促す。続いて開始したメディア通信を終了させるため、ALGによって新しくBYEトランザクションが生成される。これによって、INVITEトランザクションにおけるUASは、新たにBYEトランザクションにおけるUAS(図14)となる。BYEトランザクションにおけるUASはこのときTryingステートにあり、自身で2xxを生成することによって、Terminatedステートに移行する。このとき復旧に要する時間はT’1+T(J)secである。
フェーズIIからの復旧の別の実施例
図17に、本発明で利用した手法とは別の実施例に基づいて、フェーズIIから復旧するコールフローを示す。ただしここでALGとUAl間、およびALGとUA2間のシグナリングは、いずれも図17の順序であればよく、同期する必要はない。
シグナリングの詳細
ALGとUAl間での状態正常化シグナリングは、別の実施例に基づくフェーズIからの復旧と同様である。つまりF7、F9、Fll、F13はこの順序で、図16でのF3、F4、F5、F6に対応する。
フェーズIIからの復旧の別の実施例
図17に、本発明で利用した手法とは別の実施例に基づいて、フェーズIIから復旧するコールフローを示す。ただしここでALGとUAl間、およびALGとUA2間のシグナリングは、いずれも図17の順序であればよく、同期する必要はない。
シグナリングの詳細
ALGとUAl間での状態正常化シグナリングは、別の実施例に基づくフェーズIからの復旧と同様である。つまりF7、F9、Fll、F13はこの順序で、図16でのF3、F4、F5、F6に対応する。
またALGとUA2間の状態正常化シグナリングは、本発明で利用した前述の実施例に基づくフェーズIIからの復旧と同様である。つまりF8、Fl0、F12、F14はこの順序で、図7でのF8、Fl0、Fll、F12に対応する。
別の実施例に基づくフェーズIi状態正常化シグナリングでは、INVITEトランザクションにおけるUAC(図12)に対して、ProceedingステートからTerminatedステートへの遷移を促す。開始したメディア通信を終了させる手続きは、別手法に基づくフェーズIからの復旧の場合と同様である。このとき復旧に要する時間はT’2+T(J)secである。
10 ユーザエージェント(UA)
12 ユーザエージェント(UA)
14 SIPサーバ
14a プロキシサーバ
14b リダイレクトサーバ
14c レジストラサーバ
16 ロケーションサーバ
12 ユーザエージェント(UA)
14 SIPサーバ
14a プロキシサーバ
14b リダイレクトサーバ
14c レジストラサーバ
16 ロケーションサーバ
Claims (9)
- 2つのユーザエージェント(UA1、UA2)間のセッションの確立をSIP−ALGを介して行なうSIP−ALG方法において、セッションの開始から終了までを複数のフェーズに分割し、フェーズの1つでセッションに異常が発生したとき、異常が発生したフェーズの段階に応じて、少なくとも1つのユーザエージェントとSIP−ALGとの間で復旧信号を通信させることにより初期状態に復旧させることを特徴とするSIP−ALG方法。
- 請求項1記載のSIP−ALG方法において、前記フェーズは、UA1からSIP−ALGを介してUA2へ“INVITE”信号を送るフェーズIと、UA2からSIP−ALGを介してUA1へ“Trying”および“Ringing”信号を送るフェーズIIと、UA2からSIP−ALGを介してUA1へ“OK”信号を送るフェーズIIIと、
UA1からSIP−ALGを介してUA2へ“ACK”信号を送るフェーズIVと、UA1からSIP−ALGを介してUA2へ“BYE”信号を送るフェーズVのうちの少なくとも1つのフェーズを含むことを特徴とするSIP−ALG方法。 - 請求項2記載のSIP−ALG方法において、フェーズIの段階でUA2からのレスポンスがない異常が発生したとき、SIP−ALGからUA1へ“Request Timeout”信号を送り、UA1からSIP−ALGへ“ACK”信号を返すことにより、初期状態に復旧させることを特徴とするSIP−ALG方法。
- 請求項2記載のSIP−ALG方法において、フェーズIIの段階でUA2からの最終レスポンスがない異常が発生したとき、SIP−ALGからUA1へ“Request Timeout”信号を送るともにSIP−ALGからUA2へ“CANCEL”信号を送り、UA1からSIP−ALGへ“ACK”信号を返し、UA2からSIP−ALGへ“OK”および“Request Timeout”信号を返し、SIP−ALGからUA2へ“ACK”信号を返すことにより、初期状態に復旧させることを特徴とするSIP−ALG方法。
- 請求項2記載のSIP−ALG方法において、フェーズIIIの段階でUA1からACKがない異常が発生したとき、SIP−ALGからUA2へ“ACK”信号を送り、さらにSIP−ALGからUA1およびUA2へ“BYE”信号を送り、UA1およびUA2からSIP−ALGへ“OK”信号を返すことにより、初期状態に復旧させることを特徴とするSIP−ALG方法。
- 請求項2記載のSIP−ALG方法において、フェーズIVの段階でMultimedia Communication エラーが発生したとき、SIP−ALGからUA1およびUA2へ“BYE”信号を送り、UA1およびUA2からSIP−ALGへ“OK”信号を返すことにより、初期状態に復旧させることを特徴とするSIP−ALG方法。
- 請求項2記載のSIP−ALG方法において、UA2からの最終レスポンスがない異常が発生したとき、SIP−ALGからUA1へ“OK”信号を送ることにより、初期状態に復旧させることを特徴とするSIP−ALG方法。
- 請求項2記載のSIP−ALG方法において、フェーズIの段階でUA2からのレスポンスがない異常が発生したとき、SIP−ALGからUA1へ“OK”信号を送り、UA1からSIP−ALGへ“ACK”信号を返し、さらに、SIP−ALGからUA1へ“BYE”信号を送り、UA1からSIP−ALGへ“OK”信号を返すことにより、初期状態に復旧させることを特徴とするSIP−ALG方法。
- 請求項2記載のSIP−ALG方法において、フェーズIIの段階でUA2からの最終レスポンスがない異常が発生したとき、SIP−ALGからUA1へ“OK”信号を送るともにSIP−ALGからUA2へ“CANCEL”信号を送り、UA1からSIP−ALGへ“ACK”信号を返し、UA2からSIP−ALGへ“OK”および“Request Timeout”信号を返し、SIP−ALGからUA1へ“BYE”信号を送り、UA1からSIP−ALGへ“OK”信号を返し、SIP−ALGからUA2へ“ACK”信号を返すことにより、初期状態に復旧させることを特徴とするSIP−ALG方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005169072A JP2006345231A (ja) | 2005-06-09 | 2005-06-09 | Sip−alg方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005169072A JP2006345231A (ja) | 2005-06-09 | 2005-06-09 | Sip−alg方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006345231A true JP2006345231A (ja) | 2006-12-21 |
Family
ID=37641851
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005169072A Pending JP2006345231A (ja) | 2005-06-09 | 2005-06-09 | Sip−alg方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2006345231A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008172694A (ja) * | 2007-01-15 | 2008-07-24 | Toshiba Corp | コネクションを維持する装置、方法およびプログラム |
JP2009033260A (ja) * | 2007-07-24 | 2009-02-12 | Nippon Telegr & Teleph Corp <Ntt> | ダイアログ救済方法 |
JP2012044303A (ja) * | 2010-08-16 | 2012-03-01 | Oki Networks Co Ltd | 呼制御信号送信装置、プログラム及び方法 |
JP2012130001A (ja) * | 2010-12-16 | 2012-07-05 | Palo Alto Research Center Inc | コンテンツセントリックネットワークにおけるセッション開始プロトコル(sip)ベースのカストディアンルーティング |
-
2005
- 2005-06-09 JP JP2005169072A patent/JP2006345231A/ja active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008172694A (ja) * | 2007-01-15 | 2008-07-24 | Toshiba Corp | コネクションを維持する装置、方法およびプログラム |
JP4703576B2 (ja) * | 2007-01-15 | 2011-06-15 | 株式会社東芝 | コネクションを維持する装置、方法およびプログラム |
US7984159B2 (en) | 2007-01-15 | 2011-07-19 | Kabushiki Kaisha Toshiba | Apparatus, method, and terminal apparatus for maintaining connection |
JP2009033260A (ja) * | 2007-07-24 | 2009-02-12 | Nippon Telegr & Teleph Corp <Ntt> | ダイアログ救済方法 |
JP2012044303A (ja) * | 2010-08-16 | 2012-03-01 | Oki Networks Co Ltd | 呼制御信号送信装置、プログラム及び方法 |
JP2012130001A (ja) * | 2010-12-16 | 2012-07-05 | Palo Alto Research Center Inc | コンテンツセントリックネットワークにおけるセッション開始プロトコル(sip)ベースのカストディアンルーティング |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7469299B2 (en) | Bridging user agent and a proxy server for supporting network services | |
KR100728280B1 (ko) | Sip를 이용한 통신 시스템에서 호 해제 요청/응답메시지를 이용한 네트워크 상태 관리 방법 | |
US8296447B2 (en) | Method for copying session information, call control server for executing the same, and computer product | |
US20040252683A1 (en) | System, method , and computer program product for resolving addressing in a network including a network address translator | |
JP5173607B2 (ja) | 通信システム | |
KR20080044830A (ko) | Sip와 같은 컴퓨터 프로토콜에 기초하여 전화 호출을다이얼로그와 연관시키는 방법 | |
JP2005229273A (ja) | サーババックアップ装置 | |
US9420018B2 (en) | End-to-end address transfer | |
CN100574474C (zh) | 一种通讯系统中建立通讯业务连接的方法 | |
WO2007079647A1 (fr) | Procede, appareil et systeme de sauvegarde en reseau d'un systeme d'application sip | |
WO2007112640A1 (fr) | Procédé et appareil de remplacement de l'identification de session, serveur d'application et procédé de remplacement de session | |
JP2006345231A (ja) | Sip−alg方法 | |
US20080137647A1 (en) | VoIP terminal and method for providing multi-call service | |
JP6183881B2 (ja) | コーデック変換ゲートウェイ、コーデック変換方法、及び、コーデック変換プログラム | |
JP4136798B2 (ja) | 音声ガイダンス機能付き中継装置 | |
KR101344270B1 (ko) | 클라우드 환경을 위한 통신 장치 및 통신 장치 운영 방법 | |
WO2008080334A1 (fr) | Agent d'utilisateur dos à dos et procédé de transmission d'informations associé | |
EP2059001B1 (en) | Multitype SIP processing element | |
Tiilikainen | SIP (RFC 2543), an Implementation for Marratech Pro | |
Bhat | Voice Over IP–The SIP Way | |
US20140143314A1 (en) | Communication system | |
Govindaraju | Session Initiation Protocol and Services | |
Montavont | SIP Session Initiation Protocol | |
KALPANA | A new scheme to reduce session establishment time in session initiation protocol (SIP) | |
Gasterstädt et al. | Media Connectivity in SIP Infrastructures: Provider Awareness, Approaches, Consequences, and Applicability |