SIP穿越NAT的rport機制
除錯asterisk時發現從公網發來的INVITE的響應都不能正常返回到客戶端,抓包發現響應都發到via頭域中寫明的那個port上去了,而實際asterisk是從NAT轉換後的地址和埠接收的INVITE請求。最終發現需要在via中加入rport欄位,使得asterisk使用rport機制路由響應。
具體的RFC文件參見RFC3581。
RPORT機制:
- 客戶端需要在top most via上帶上rport引數
- 服務端發現via中有rport引數時,將此via中加入received引數和rport引數,引數帶的值分別是服務端看到的訊息來源地址和埠(如果有NAT等地址轉換裝置,則即為轉換後的IP和port)。
- 當有需要傳送的響應時,按照rport中的埠傳送SIP 響應。也就是說IP和埠均完全遵照從哪裡來的,發回哪裡去的原則。(如果沒有rport欄位時,服務端的策略是IP使用UDP包中的地址,即從哪裡來回哪裡去,但是埠使用的via中的埠)
RFC文件中的例子:
INVITE sip:user@example.com SIP/2.0
Via: SIP/2.0/UDP 10.1.1.1:4540;rport;branch=z9hG4bKkjshdyff
服務端收到後根據自己所得到的源地址和埠,重寫via,如有必要新增自己的via轉發
INVITE sip:user@example.com 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
轉載自http://blog.csdn.net/irwin_chen/article/details/20463189
相關文章
- Nat Aging:科學家揭開加速脂肪組織衰老的新型機制
- [SIP00]SIP 概念總結
- Nat Cancer:揭示人類慢性血液癌症過渡為惡性疾病背後的分子機制
- VoIP Protocols > SIPProtocol
- sip與openser的關係
- HDFS 02 - HDFS 的機制:副本機制、機架感知機制、負載均衡機制負載
- sip是什麼?Mac電腦如何關閉sip?關閉系統完整性保護SIP的方法教程Mac
- 關於SIP的原始碼地址原始碼
- [SIP01]SIP Header Fields裡面各欄位用途Header
- 配置虛擬機器NAT模式網路虛擬機模式
- SIP系統怎麼禁用?Mac上 sip系統完整性關閉方法,怎麼看sip是否關閉Mac
- SCN的機制
- 宿主機無法訪問VM中的linux(NAT模式)Linux模式
- bridged、host-only和NAT的虛擬機器用法虛擬機
- session機制和cookie機制SessionCookie
- 4、NAT
- 響應式流的核心機制——背壓機制
- VM NAT模式主機虛擬機器互聯注意事項模式虛擬機
- 穿越Vmware ESX對虛擬機器MAC地址限制虛擬機Mac
- SIP (Session Initiation Protocol) 協議SessionProtocol協議
- Redis的事件機制Redis事件
- 探索JavaScript的this機制JavaScript
- Java的代理機制Java
- PHP 的 SESSION 機制PHPSession
- Java的SPI機制Java
- Java的反射機制Java反射
- Java 的 SPI 機制Java
- iOS的安全機制iOS
- handler機制的原理
- mysql的鎖機制MySql
- cbo機制的研究
- 蘋果M1晶片的Mac怎麼關閉SIP?M1 mac關閉Sip方法教程!蘋果晶片Mac
- 使用ssh隧道穿透NAT訪問內網主機穿透內網
- 穿越矩陣矩陣
- IPv6的NAT原理
- 強大的螢幕取色軟體:Sip for macMac
- 【執行機制】 JavaScript的事件迴圈機制總結 eventLoopJavaScript事件OOP
- nat模式下解決虛擬機器無法ping通主機的問題模式虛擬機