郭朝鑫
(中國電子科技集團第三十研究所,四川 成都 610041)
近年來,隨著通信技術和網絡技術的飛速發展,網絡融合的進程進一步加快,IP分組網絡作為實時和非實時業務的承載已成為大勢所趨,IP電話相關技術及應用受到廣泛關注。其中,會話初始協議(SIP,Session Initiation Protocol)由于簡單、靈活、可擴展性強的特點,是目前通信界最為活躍的通信協議之一,SIP電話是當前研究的熱點之一,也是電話網發展的方向之一。
當前越來越多企業采用 SIP電話進行企業內部數據網絡和語音網絡的整合,出于共享公網 IP資源及保護內網安全的考慮,大量的企業網和用戶本地網采用了私有 IP地址通過出口的網絡地址轉換器(NAT, Network Address Translators)接入公網,NAT的大量部署給SIP電話的應用造成了較大困難。一方面,NAT后的SIP電話作為被叫時,由于其 IP地址是私有的,對公網不可見,呼叫消息無法到達NAT后的SIP電話,通信不能建立;另一方面,即使NAT后的SIP電話做主叫時,由于其 SIP呼叫消息中包含了IP層的信息如主叫的IP地址等,而此IP地址是私有的,對于公網上的網絡設備和被叫都是不可路由的,同樣會導致通信無法正常建立。綜上所述,SIP電話的NAT穿越技術是影響SIP電話大規模部署應用的關鍵技術之一,該技術的研究對推動SIP電話的大規模應用具有重要的意義。
SIP電話系統包含兩個基本組件:SIP用戶代理[1]和SIP網絡服務器。用戶代理是呼叫的終端系統元素,而SIP網絡服務器是處理與多個呼叫相關信令的網絡設備。網絡服務器包括代理服務器、注冊服務器和重定向服務器。
SIP的消息采用文本方式,報文語法格式和整體框架都借鑒了超文本傳輸協議(HTTP,Hypertext Transfer Protocol)和簡單郵件傳輸協議(SMTP,Simple Mail Transfer Protocol),簡單、擴展性好。SIP協議[2-3]定義了INVITE、ACK、BYE、CANCEL、REGISTER、OPTIONS 等 6 種基本方法來實現呼叫,每一種方法都是一個請求消息。
圖1表示了一種典型的中小規模SIP電話系統。該系統中,SIP服務器集成了代理服務器、注冊服務器和重定向服務器的功能,為方便進行集中的媒體控制和提供增值服務以及媒體的NAT穿越,系統配置了媒體服務器,SIP電話終端位于NAT之后。

圖1 一個中小規模的SIP電話系統組成
NAT穿越技術與NAT的類型[4]關系密切,根據映射方式的不同,NAT可分為完全圓錐型,地址受限圓錐型,端口受限圓錐型和對稱型這4種。
完全圓錐型 NAT:將從同一內部 IP 地址和端口出來的所有請求,都映射到相同的外部 IP 地址和端口。任何外部主機通過向映射的外部地址發送報文,可以實現和內部主機進行通信。
地址受限圓錐型 NAT:將從相同的內部 IP 地址和端口的所有請求,映射到相同的外部 IP 地址和端口。但是與完全圓錐型NAT 不同,當且僅當內網主機之前已經向公網主機發送了分組,此公網主機才能夠向內網主機發送分組。
端口受限圓錐型 NAT:類似于地址受限圓錐型 NAT,但更嚴格,它增加了端口號的限制。
對稱型NAT:從相同的內部IP地址和端口,并且到相同的目的地址和端口的所有請求,都映射到同一個外部 IP地址和端口。如果同一個內部主機,用相同的內部 IP地址和端口,發送了一個報文到另一個目的主機,則會使用不同的映射。而公網主機,只有在接收到分組后,才能與發送分組的內網主機進行通信。
目前主要的NAT穿越技術[5-6]有以下幾類。
(1)應用層網關
應用層網關(ALG,Application Level Gateway)工作在應用層,一般駐留在NAT設備中。ALG通過修改SIP信令中所攜帶的內網終端的地址和端口為NAT 的公網地址和端口,并保存相應的映射,控制NAT打開映射條目所對應的NAT端口來穿透 NAT。ALG 原理比較簡單,但擴展性不好,每增加一種應用時,都需要對NAT進行升級。
(2)基于UDP的NAT簡單穿越
基于UDP的NAT簡單穿越(STUN[7],Simple Traversal of UDP Through Network Address Translators),通過某種機制由內網終端預先從 STUN 服務器(部署于公網)獲得內網主機IP 和端口在NAT 上映射的IP 和端口,然后在報文消息中所描述的地址信息直接填寫NAT上的對外地址,從而實現NAT穿越。該方式最大的優點是無需改動NAT,局限性在于終端需具備STUN代理功能,不支持TCP連接的穿越,不支持對稱NAT的穿越。
(3)采用中繼的NAT穿越
采用中繼的 NAT穿越(TURN[8],Traversal Using Relay NAT)解決NAT問題的思路與STUN相似,也是基于用戶通過某種機制預先得到其內網地址對應在公網的地址,STUN方式得到的地址為出口NAT上的地址,而TURN方式得到的地址為TURN服務器上的地址。該方式解決了STUN應用無法穿透對稱NAT的缺陷,同時支持基于TCP的應用,局限性在于所有報文都必須經過 TURN服務器轉發,增大了包的延遲和丟包的可能性。
(4)會話邊界控制器
會話邊界控制器(SBC,Session Border Controller)是近幾年一種較新的NAT穿越技術,它位于接入控制層,其服務器部署在內網和SIP服務器(公網)之間,完成信令中轉和媒體轉發。對于SIP終端而言,可以將SBC看作集成注冊服務器和代理服務器的SIP服務器。SBC進行NAT穿越最大的優點在于不需要對現有的網絡結構作任何的假設和變更,但是SBC服務器也容易成為內網和公網通信的瓶頸。
在圖1所示的SIP電話系統中,針對NAT的穿越設計,主要的應用需求分析如下:
①SIP電話系統最好不對網絡結構提出限制;
②不要對現有的網絡設備如NAT等升級改造;
③為減少維護管理投入,在內網和公網邊界處不建議新增設備;
④SIP相關服務設備直接與公網連接,無NAT;
⑤SIP相關服務設備種類應盡量少,以減少系統部署后的維護工作量;
⑥SIP電話以及SIP相關服務設備可以增加支持NAT穿越的功能實體。
根據上述需求分析,ALG方式需要對NAT進行升級改造,不適合該SIP電話系統采用。而SBC方式需要在NAT邊界處部署SBC服務器,也不能完全滿足需求,但是,SBC的NAT穿越思路對本系統有較大借鑒意義。STUN方式和TURN方式,與本系統的NAT穿越需求比較接近,然而,如單獨使用其中的一種方式,仍存在著或多或少的缺陷,如STUN方式對NAT的類型有較大限制,TURN方式其服務器較容易成為系統瓶頸。因此,需綜合分析本系統的NAT穿越需求,借鑒這幾種NAT穿越技術,設計出適合的NAT穿越方案。
針對圖1所示的SIP電話系統,設計NAT穿越方案如下。
對于SIP信令等協議消息的穿越,借鑒TURN方式,SIP電話終端通過與公網服務器的消息交互,預先得到其內網地址與公網地址的映射關系,然后在協議消息中修改相關信息。同時,為簡化設備種類,將NAT穿越服務器功能實體與SIP服務器集成在一起。SIP服務器采用分布式部署方式,在系統用戶規模較大時,配置多臺SIP服務器進行負荷分擔,同時 SIP服務器可互為備份。SIP服務器還具有控制媒體服務器完成媒體通道的開啟和釋放相關功能。
為解決SBC方式媒體轉發的瓶頸,將媒體轉發功能獨立出來,采用單獨的媒體服務器完成。媒體服務器采用分布式部署的方式,根據系統用戶的規模,系統中可配置一臺或多臺媒體服務器,1臺SIP服務器可控制管理多臺媒體服務器。在SIP服務器管理區域內,媒體服務器可互為備份。
對于SIP電話終端,針對NAT穿越,主要的功能包括:維護與SIP服務器的消息交互,以獲得其內網地址與公網地址的映射關系;修改SIP消息相關參數;話音通信時建立與媒體服務器的媒體轉發通道。
圖2給出了一次典型通話的通信流程。在圖2中,假定SIP電話終端A、B均位于NAT之后,NAT的類型為對稱型。

圖2 一次典型通話的通信流程
SIP電話終端A、B入網時,需向SIP服務器發出探測消息,終端根據SIP服務器的應答,獲得NAT上的外部地址。同時,為維持該地址綁定,終端應定時向SIP服務器發送探測消息。該過程在圖2中未表示。
通信流程描述如下:
①終端A向SIP服務器發出“INVITE”消息,SIP服務器收到此消息后,通知媒體服務器開啟媒體轉發通道;
②SIP服務器向終端A發送“100TRY”消息,消息中攜帶媒體服務器的地址;
③終端A收到SIP服務器的“100TRY”消息,得到媒體服務器地址,向媒體服務器發出媒體轉發請求消息,由此媒體服務器和終端A均獲得媒體轉發時的NAT上的外部地址;
④SIP服務器向終端B轉發“INVITE”消息,消息中攜帶媒體服務器的地址;
⑤終端B收到SIP服務器的“INVITE”消息,得到媒體服務器地址,向媒體服務器發出媒體轉發請求消息,媒體服務器和終端B均獲得媒體轉發時的NAT上的外部地址;
⑥終端B向SIP服務器發送“100TRY”消息;
⑦終端B向SIP服務器發送“180RING”消息,SIP服務器轉發至終端A;
⑧終端B向SIP服務器發送“200 OK”消息,SIP服務器轉發至終端A,終端A發送“ACK”消息至SIP服務器,SIP服務器轉發給終端B;
⑨終端 A、B進入通話態,媒體通過媒體服務器轉發方式完成NAT的穿越;
⑩通話結束后,終端A向SIP服務器發送“BYE”消息,SIP服務器通知媒體服務器釋放此媒體通道;SIP服務器轉發“BYE”消息給終端B;
上述SIP電話系統的NAT穿越方案,將SIP代理服務器、注冊服務器和重定向服務器,以及針對NAT穿越的信令代理功能集成到SIP服務器中,大大減少了用戶的使用維護成本,同時,將媒體轉發功能采用獨立的服務器實現,結合分布式部署方式,克服了通常的NAT穿越方案媒體轉發的瓶頸。該方案特別適合于對網絡結構無限制,網絡設備不改造的應用環境。話音數據通過媒體服務器轉發帶來的時延和抖動,對SIP電話語音質量的影響評估以及相應的技術解決途徑,是下一步需要研究的工作之一。
[1] 陳蕊,唐紅,趙國峰.SIP協議用戶代理的研究與實現[J]. 通信技術,2010,43(02):171-173.
[2] ROSENBERG J, SCHULZRINNE H, CAMARILLO G,et al.RFC3261,SIP:Session Initiation Protocol[S].[s.l.]:IETF, 2002.
[3] HANDLEY M, JACOBSON V.RFC2327,SDP:Session Description Protocol[S]. [s.l.]:IETF, 1998.
[4] 賈姍姍.基于SIP協議的VoIP系統中NAT穿越方案的研究與實現[D].北京:北京郵電大學,2009.
[5] 王嘯,周淵平.VoIP系統中 NAT穿越技術的研究與實現[J].通信技術,2010,43(11): 111-113.
[6] 曹淼,李健,張燁,等. 基于 SIP的 VoIP穿透 NAT方法的研究與實現[J].網絡安全技術與應用,2009(04):64-66.
[7] ROSENBERG J, WEINBERGER J, HUITEMA C, et al.RFC3489,STUN -Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs) [S]. [s.l.]: IETF, 2003.
[8] 閔江. 一種利用TURN穿越對稱型NAT方案的設計與實現[D].武漢:華中科技大學,2008.