2024年7月5日 星期五

SIP header Via

所有 SIP 訊息都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。

格式 sent-protocol sent-by[;branch=branch][;參數...]

  • sent-protocol 格式是「SIP/2.0/transport」,transport 可以是 UDPTCPTLSSCTP 等。
  • sent-by 格式是 host[:port],host 可以是主機的網域名稱或 IP 位址,可以加上 port。host 建議 FQDN。無 port 時,預設值在 UDP/TCP/SCTP 是 5060、TLS 是 5061。在 用來送回應。收到請求的 Via 中有 sent-by 且 branch 符合自己送的,
  • 參數 branch:
    • 意思是分支。在 RFC3261 以「z9hG4bK」開頭,是必要的。值對某個 UAC 而言是時空上唯一,用來快速識別 Transaction,但在 CANCEL 和 INVITE 失敗的 ACK 是沿用原始請求的 branch。
    • 在 RFC2543,forking proxy 插入 branch 用來區分不同分支,同一個 call 在不同 proxy 可能用相同的 branch 值,沒有唯一的特性,不適合作為 Transaction ID。某種程度上不會產生「z9hG4bK」開頭的值。
    • Proxy 也用來偵測 loop。
  • 參數 received: Server Transport 收到請求檢查頂頭 Via 的 sent-by,如果是網域主機名稱,或不同於封包的來源 IP 位址時,紀錄封包的來源位址,助於之後 server transport 送回應。
  • 參數 maddr:Client Transport 紀錄
  • 參數 ttl:Client Transport 紀錄
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds

比較:Contact

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...