RFC3581——SIP中的rport機制

   

1.    介紹

RFC3581的下載地址:http://www.ietf.org/rfc/rfc3581.txt服務器

該協議比較簡短,主要用於描述rportresponse-port)機制。網絡

1.1 NAT分類

NAT:網絡地址轉換(NAT,Network Address Translation)屬接入廣域網(WAN)技術,是一種將私有(保留)地址轉化爲合法IP地址的轉換技術,它被普遍應用於各類類型Internet接入方式和各類類型的網絡中。緣由很簡單,NAT不只完美地解決了lP地址不足的問題,並且還可以有效地避免來自網絡外部的攻擊,隱藏並保護網絡內部的計算機。加密

NAT經常使用的分類以下:spa

Full Cone NAT(徹底圓錐型)插件

Address Restricted Cone NAT(地址限制圓錐型 )3d

Port Restricted Cone NAT(端口限制圓錐型) 代理

Symmetric NAT(對稱型)

htm

1.1.1 徹底圓錐型NAT

在徹底圓錐型NATFull Cone NAT)中,NAT會將客戶機地址{X:y}轉換成公網地址{A:b}並綁定。任何包均可以經過地址{A:b}送到客戶主機的{X:y}地址上。如圖所示:
  
接口

1.1.2 地址限制圓錐型NAT

地址限制圓錐型NATAddress Restricted Cone NAT)會將客戶機地址{X:y}轉換成公網地址{A:b}並綁定,只有來自主機{P}的包才能和主機{X:y}通訊。以下圖所示:
   
生命週期

1.1.3 端口限制圓錐型NAT

端口限制圓錐型NAT(Port Restricted Cone NAT)會將客戶機地址{X:y}轉換成公網地址{A:b}並綁定,只有來自主機{P,q}的包才能和主機{X:y}通訊。以下圖所示:
   

1.1.4 對稱型NAT

對稱型NATSymmetric NAT)會將客戶機地址{X:y}轉換成公網地址{A:b}並綁定爲{X:y}|{A:b}<->{P:q}。對稱型NAT只接受來自{P:q}incoming packet,將它轉給{X:y} ,每次客戶機請求一個不一樣的公網地址和端口,NAT會新分配一個端口號{C,d} 。以下圖所示:
    

1.2問題描述

1.2.1 SIP Proxy沒法穿過NAT回送SIP信令

由於SIP信令中的FromContact頭域記錄的是私網地址和端口,NAT沒法識別和轉換。如圖所示:
  

1.2.2 使用UDP Hole Punching的問題

       

這個內網的NAT上打了一個方向爲211.136.91.58,(這就是稱爲UDP Hole Punching的技術)之後211.136.91.58就能夠經過這個洞與內網的192.168.1.223聯繫了,可是其餘的IP不能利用這個洞。

在沒有活動的時候,這個Hole會過時:

NAT對於地址轉換關係是有必定生命期的,某個地址轉換後在一段時間內沒有被使用將會被清除,當這個業務流再次出現時,將會創建一個新的地址轉換關係。

SIP代理沒法穿越

SIPUDPTCP上操做。當在UDP中使用的時候,對請求的響應被髮送給請求所來自的地址,端口字段帶在請求的Via頭字段中。一半以上的信息(例如:IP地址)帶在 IP包頭中,還有一半的信息(例如:端口信息)帶在SIP消息頭中。SIP這樣作的緣由是爲了監聽全部的信息,包括請求消息和響應消息。

可是這種方式在客戶端在 NAT中的狀況不適用,在NAT的環境中,迴應可能發送不過去,由於與在請求中找到的地址不同,並且此前也沒有方法讓客戶端來獲得源端口信息。

2.    NAT的經常使用解決方案

解決NAT穿越有不少中解決方案,經常使用的有:

2.1 ALGApplication Level Gateway

能夠識別SIP信令,可以適當地修改數據包。ALG能夠是單獨的鏈接於外網和內網之間的設備,也能夠是內置於防火牆內的插件。

FW/NAT發現外網呼叫信令爲SIP時,將其轉發到ALG(應用層網關),經過ALG創建起內網僞地址終端與外網終端的通訊鏈接。

使用ALG須要對現有設備升級改造。例如思科的路由器都支持配置ALG

2.2 MidComIETF MIDCOM(Middlebox Communications

容許第三方(MIDCOM Agent )成爲受FW/NAT信任的實體,而後表明FW/NAT作出決定,強迫其開放端口傳送媒體流或數據流。這些受信任的實體經過「MidCom」定義的新協議與FW/NAT進行通訊。

協議的識別不禁Middlebox完成,而是由外部的MIDCOM Agent完成。

使用MidCom須要對現有設備升級改造。

2.3 STUN(Simple Traversalof UDP Through Network)

 
      IETF RFC 3489
定義瞭如何肯定由NAT分配的公網地址和端口,不須要改造現有NAT

主要特點

可以讓客戶端發現NAT的存在以及類型;

可以讓客戶端發現NAT的綁定生命週期;

能夠工做在多NAT串聯環境下;

很是簡單的協議,易於實現,負載低;

STUN服務器能夠位於公網任何地方。

適用範圍

不適用於Symmetric NAT

對於Non- Symmetric NAT都適用;

若是雙方都位於同一個NAT以後,就不適用。

2.4 SBC(Session Border Controller)

             
   
Signaling Solution

Ø SBC能夠幫助SIP信令穿越已經存在的FW/NAT,而不須要對現有的FW/NAT設備作任何改變;

Ø 對於SIP終端,SIP終端設備會週期性發送註冊消息到SBC

Media Traversal Solution

SBC能夠把相應的媒體流發送到防火牆上的相關IP地址和端口,而後正確地使媒體流到達防火牆後的用戶側。

3     rport機制講解

3.1 方案描述

得到IP地址是在Via頭中帶上received參數。爲了獲得端口信息,也參考了這種方式,即在Via頭中帶上rport屬性來指明端口信息。

當在客戶端和服務器之間是NAT的時候,請求可能會在NAT中建立(或刷新)一個綁定,爲了讓客戶端收到響應信息,在事務處理的過程當中這個綁定必須保持存在。大多數的NAT綁定有超過1分鐘的超時時間,這超過了non-INVITE事務的持續時間,於是對non-INVITE事務的請求的響應只能在綁定存在的時候存在。INVITE事務卻是不存在這個問題。

爲了保持這個綁定,客戶端應該在每隔20s左右重發INVITE請求,這種重發機制須要發生在收到一個臨時的響應後。

固然剛纔所說的大概1分鐘的超時時間也不是肯定的,有時候會比這長,此時重發機制能夠發慢一點,不然,能夠發快一點。這些問題可參考RFC3489

若是是支持rport機制的服務器,它須要在接收到的請求中檢查Via頭是否包含一個沒有值的rport參數。若是有,它須要在迴應中帶上rport的值,這與received的處理相似。

爲了穿越對稱性的對稱性的NAT,響應須要發送到相同的IP地址和端口。當服務器在多端口或接口的請求上監聽請求時,它必須記住請求是從何處發的。對一個穩定的Proxy,在一個傳輸的持續時間中,記住這些東西是沒有問題的。可是對於不穩定的Proxy,它不存儲請求和響應中的狀態信息,爲了達到本規範的要求,它須要將地址和端口信息加密到Via頭字段中,在響應信息到達的時候,它能提取加密的信息並將它放到響應中。

rport機制須要終端支持該種機制,所以應用狀況比較受限。可是在筆者的應用場景(呼叫中心)中,主要要解決的問題是坐席能在NAT環境中穿越,給服務器發送信息。由於坐席所使用的SIP軟電話是本公司開發的,因此能夠保證是支持rportreceived的。

3.2 實例

下面舉一個發送REGISTER信息的實例,在請求信息的Via頭中包含了沒有值的rport參數,以下所示:

REGISTER sip: 124.40 . 120.188 : 5060  SIP / 2.0
Via: SIP/
2.0 / UDP  124.42 . 4.203 : 15500 ;branch = z9hG4bK - d8754z - 1049ed261d2e643d - 1 --- d8754z -;rport
Max
- Forwards:  70
Contact: <
sip: 19988888888 @ 192.168 . 2.65 : 12344 ;rinstance = 7cd1c532e92fdb0e > ;expires =
To: "
19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 >
From: "
19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 > ;tag =203ba359
Call
-ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 
1 REGISTER
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User
- Agent: eyeBeam release 1105a stamp  56793
Content-
Length: 

    發送到的服務器支持rport機制,它看到請求中的rport後,將經過分析UDP包信息獲得的的NAT的公網地址(124.42.4.203)和端口信息(15500)分別做爲receivedrport屬性帶給客戶端:

SIP / 2.0   200  OK
Via: SIP
/ 2.0 / UDP  124.42 . 4.203 : 15500 ;branch = z9hG4bK - d8754z - 1049ed261d2e643d - 1 --- d8754z - ;rport = 15500 ;received = 124.42 . 4.203
From: 
" 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 > ;tag = 203ba359
To: 
" 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 > ;tag = 0005 - 058 - 7d6dc90516ae2e21
Call
- ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 
4  REGISTER
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,INFO,UPDATE,PRACK,REFER,SUBSCRIBE,NOTIFY,MESSAGE
Contact: 
< sip: 124.40 . 120.188 : 5060 >
Content
- Length: 

   客戶端在獲得響應信息後,知道了所使用的公網地址和端口,在然後按期重發的REGISTER信息中,Contact變換成124.42.4.203: 15500,例如新發的REGISTER信息變爲:

REGISTER sip: 124.40 . 120.188 : 5060  SIP / 2.0
Via: SIP
/ 2.0 / UDP  124.42 . 4.203 : 15500 ;branch = z9hG4bK - d8754z - 1049ed261d2e643d - 1 --- d8754z - ;rport
Max
- Forwards:  70
Contact: 
< sip: 19988888888 @ 124.42 . 4.203 15500 ;rinstance = 7cd1c532e92fdb0e > ;expires =
To: 
" 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 >
From: 
" 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 > ;tag = 203ba359
Call
- ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 
2  REGISTER
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User
- Agent: eyeBeam release 1105a stamp  56793

Content - Length:


rport方式主要是對sip信令中Via字頭的擴展,不過同時也要求SIP Proxy支持該功能。
NAT以後的sip client在發送請求的時候在via字頭中添加rport字段,該消息經發出後路由到SIP Proxy,SIP Proxy經過檢查消息的源地址和Via字段中的地址,得知該client處於NAT以後,而且基於已有的rport,將消息的真實地址即公網上的地址經過received和rport字段返回給client端,這樣client就知道本身真實的公網地址,能夠解決信令穿越的問題。

 4.    參考文檔

神州泰嶽應用開發事業部鄭昀《SIP穿越NAT
   
RFC3581http://www.ietf.org/rfc/rfc3581.txt

相關文章
相關標籤/搜索