SIP 請求的過程,UAC 和每一个經過的 Proxy,攏會加一筆頂頭 Via 來紀錄自己。回應會照這Via 紀錄反過來送回。如果請求會建立 Dialog,Dialog 建立後就知道對方位址 (Contact),後續 Dialog 內請求就直送對方,免經過這些 Proxy。
Dialog 建立過程中經過的那些 Proxy 中,如果仍要參與後續 Dialog 內的 Transaction,在經手 Dialog 建立的請求時,加上一筆頂頭 Record-Route 紀錄自己。當請求到達 UAS 後,UAS 會將全部 Record-Route 按照順序紀錄成 Route Set,並複製到回應訊息。UAC 收到回應訊息時,將全部 Record-Route 依相反順序紀錄成 Route Set。之後 Dialog 內 (如 ACK、BYE、re-INVITE) 的請求,依 Route Set 順序產生 Route 信頭,並依此順序轉送。
在 Dialog 建立請求時,UAC 也可以事先設定 Route 信頭,例如 outbound proxy。
參數- lr (loose router):請求先照 Route 順序傳送,最後才是請求 URI。過程中 Proxy 收到後,移除應該是自己的頂頭 Route。和 loose router 相對的,是舊 SIP 的 strict routing,需要一開始把請求 URI 移為最尾的 Route,過程中一直把頂頭 Route 移到請求 URI 使用。有 lr 參數採用 loose routing,否則採用 strict routing。
- r2=
- ftag=
- nat=
UAC 發請求有 Route Set 時,如果 Route Set 的第 1 个 URI 有 lr 參數,Request-URI 放 remote target URI,Route 封頭 按順序放 Route Set 並含所有參數。如果 Route Set 的第 1 个 URI 沒有 lr 參數,Request-URI 放第 1 个 Route Set 去除 Request-URI 不允許的參數,Route 封頭按順序放剩下的 Route Set 並含所有參數,最後再加上 remote target URI。
應用:
- 作 NAT 的 proxy 需要持續作位址轉換
- 作 accounting 的 proxy 需要知道何時 BYE 通話結束。
SIP REGISTER 可以有 Route,忽略 Record-Route。
參考來源
沒有留言:
張貼留言