猫型エンジニアのブログ

プログラム/ネットワーク系の技術関連をまとめたページです 

SIPお勉強 その10

SIPの仕様の中でもプロキシの転送周りは特に複雑な気がします。まだちょっとあやふやなところがあるため後で書き換えする予定。

▪️ルースルーティング vs ストリクトルーティング

 下にRFCの仕様から抜粋しましたが、これだけじゃ結局違いが全然わからないです。多分ここが一番違いがわかりやすいと思います。転送処理において、Request-URIとRouteヘッダの使い方が異なる模様です。

  • ストリクトルーティングの方は転送の都度Request-URIの書き換えが発生するが、ルースルーティングの場合は書き換えを行わない。
  • ストリクトルーティングのRouteヘッダは最終転送先を指定するが、ルースルーティングの場合は次の転送先を指定する。
ルースルーティング

プロキシがRouteヘッダーフィールドの処理のために、この仕様で定義されている手順に従う場合、そのプロキシはルースルーティングであるといわれる。この手順は、デスティネーションに向かう途中で訪れる必要があるプロキシのセット(Routeヘッダーフィールド中に存在する)から、リクエストのデスティネーション(Request-URI中に存在する)を分離する。これらの仕組みに準拠するプロキシはルースルータ(Loose Router)としても知られている。

ストリクトルーティング

プロキシがRFC2543およびこのRFCの以前の処理中版のRoute処理ルールに従う場合、そのプロキシはストリクトルーティングであるといわれる。そのルールは、Routeヘッダーフィールドが存在したときに、プロキシにRequest-URIのコンテンツを破壊させていた。ルースルーティング動作を優先して、この仕様ではストリトルーティング動作は使用されない。ストリクトルーティングを実行するプロキシはストリクトルータ(Strict Router)としても知られている。

Routeヘッダフィールド

Routeヘッダーフィールドは、リストされたプロキシのセットを経由してリクエストをルーティングさせるために使用される。

Record-Route

Record-Routeヘッダーフィールドは、ダイアログ中のそれ以降のリクエストをプロキシを通してルートさせるために、そのプロキシによってリクエストに挿入される。

▪️転送とヘッダ

SIPヘッダには転送関連のヘッダが多いが以下のように使い分けられているようだ。

VIAヘッダ

トランザクション内のレスポンスは、VIAヘッダを逆から辿ってリクエストの発信元へ到達する。

Contactヘッダ

ダイアログ内の新規リクエスト(Byeとか)は、Contactヘッダに対して送信することもできる。