具體的RFC文件參見RFC3581。

RPORT機制:

  1. 客戶端需要在top most via上帶上rport引數
  2. 服務端發現via中有rport引數時,將此via中加入received引數和rport引數,引數帶的值分別是服務端看到的訊息來源地址和埠(如果有NAT等地址轉換裝置,則即為轉換後的IP和port)。
  3. 當有需要傳送的響應時,按照rport中的埠傳送SIP 響應。也就是說IP和埠均完全遵照從哪裡來的,發回哪裡去的原則。(如果沒有rport欄位時,服務端的策略是IP使用UDP包中的地址,即從哪裡來回哪裡去,但是埠使用的via中的埠)
.

RFC文件中的例子:

客戶端傳送INVITE形如:
INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 10.1.1.1:4540;rport;branch=z9hG4bKkjshdyff
服務端收到後根據自己所得到的源地址和埠,重寫via,如有必要新增自己的via轉發
INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP proxy.example.com;branch=z9hG4bKkjsh77
Via: SIP/2.0/UDP 10.1.1.1:4540;received=192.0.2.1;rport=9988;branch=z9hG4bKkjshdyff
當需要給此請求傳送響應時,發往received,rport兩個引數記錄的IP和PORT。NAT裝置再把發往轉換後地址192.0.2.1的包發往10.1.1.1地址。
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.1.1.1:4540;received=192.0.2.1;rport=9988;branch=z9hG4bKkjshdyff