專利名稱:一種基于sip軟終端的私網穿越系統和方法
技術領域:
本發明涉及互聯網和多媒體通信技術,尤其涉及一種基于會話初始協議(SIP)軟 終端的私網穿越系統和方法。
背景技術:
隨著下一代網絡(NGN)技術的進一步發展和走向成熟,以音頻、視頻為核心的多 媒體及數據通信業務,在商用和個人領域已呈現出巨大的增長空間。提供音頻、視頻的新型 多媒體增值業務成為電信業務和互聯網應用的融合點,因此網絡電話(VOIP)技術成為了 爭相研究的熱點。VOIP技術實現了在IP網絡上實時的傳送語音、視頻和數據等多媒體業務目前,應用于VOIP的主要技術規范有兩種——國際電信聯盟(ITU)的H. 323協議 和因特網工程任務小組(IETF, Internet Engineer Task Force)的SIP協議。H. 323協議 是傳統的實現電話信令模式,便于與傳統的電話網相連,因此相對而言應用最為廣泛。但是 SIP協議借鑒的因特網的其它標準和協議的設計思想,以其簡單、靈活、兼容、可擴展性強等 特性成為了 VOIP和未來網絡的新的發展方向。Internet的快速膨脹導致了全球IPv4地址空間面臨耗盡的危機,網絡地址轉換 (NAT, Network Address Translation)成為解決全球IPv4地址匱乏的一種重要技術(NAT 也叫網絡掩蔽或者IP掩蔽)。NAT技術實現了專用網絡中的內部主機使用私有地址進行通 信,當內部主機要連接Internet時可以共享一個公網地址與外部主機進行通信。但NAT技 術只是將IP數據包中的私有地址和端口對Ix ;y}映射為一個全球IP地址和端口對{X:Y}, 并用{X:Y}替換IP數據包中的私有地址和端口對{x ;y},使其可以在Internet中進行傳 輸。SIP消息頭和消息體中包含了通信雙方的本地IP地址,如果通信雙方中只要有一 方是內部網絡中的主機,即本地的IP地址是私網IP地址,就會導致無法建立SIP信令和媒 體流的正常連接。因此,SIP消息的這個特性成為了其穿越NAT的阻礙,如何高效地穿越NAT 成為了影響SIP協議能否進一步推廣的最重要的因素。目前,國內外雖然有許多關于穿越 NAT的草案或規范,但是他們都是獨立與具體協議,兩者沒有有機的結合起來。現有穿越NAT的相關技術,大體上可分為基于STUN協議和基于TURN協議兩類。所 述STUN協議是一種發現通信雙方是否存在NAT和防火強以及NAT的類型的一種輕量級的 客戶端_服務器協議。其主要通過STUN客戶端和服務器之間的交互得到內部網絡中的私 有地址所映射的公網地址,還可利用STUN客戶端和服務器之間的交互信息用以判斷網絡 中存在的NAT類型。所述TURN協議是一種允許內網主機使用中繼方式與對端通信的客戶端_服務器 協議。TURN協議的主要思想同STUN協議相似,也是通過TURN客戶端和服務器之間的交互, 使內網的主機獲取到一個公網地址,但此公網地址不是STUN協議中得到的NAT的出口地 址,而是TURN服務器的地址,也就是中繼服務器的地址。由此可見,STUN協議和TURN協議都是獨立與任何具體的應用層協議的,其各有其優缺點。STUN協議本身不支持對稱NAT的穿越、而TURN協議支持對稱NAT的穿越,但是其 報文需要經過TURN服務器進行轉發,這將增大包的時延和丟包的可能性。
發明內容
有鑒于此,本發明的主要目的在于提供一種基于SIP軟終端的私網穿越系統和方 法,用以穿越多級串聯的NAT,并且降低傳輸數據報文的包時延和丟包率,提高通信的實時 性,從而推進基于SIP協議的VOIP等業務的實現與開展。為達到上述目的,本發明的技術方案是這樣實現的一種基于會話初始協議SIP軟終端的私網穿越系統,該系統主要包括私網穿越模 塊、SIP信令代理模塊(SIP UA模塊)、Java媒體處理模塊(JMF模塊)和音視頻編解碼模 塊;其中,私網穿越模塊,作為整個SIP軟終端系統的一個模塊,與SIP軟終端中的其他模塊 協調工作,共同完成SIP終端會話的交互過程;用于與STUN服務器和TURN服務器交互,以 獲取有效信息,當SIP UA需要所述信息時,私網穿越模塊將所述有效信息反饋給SIP UA;SIP UA模塊,作為整個軟終端系統中SIP信令的代理模塊,所有SIP信令的交互 過程都由SIP UA模塊完成,當啟動SIP軟終端時,SIP UA模塊就開始監聽SIP的各信令端 口,準備接收和發送各種SIP信令;JMF模塊,用以捕獲音、視頻設備的音視頻流,然后調用音視頻編解碼器進行編碼, 最終打包成實時傳輸協議RTP包發送給對端通信方;音視頻編解碼模塊,用以對所述音、視頻流的編解碼。其中,所述的有效信息,包括通過STUN客戶端和服務器之間交互得到的內部網絡 中的私有地址所映射的公網地址以及網絡中存在的NAT類型;或通過TRUN客戶端和服務器 之間的交互使內網的主機獲取一個公網地址。所述的通過TRUN客戶端和服務器之間的交互使內網的主機獲取一個公網地址為 中繼服務器的地址。一種基于SIP軟終端的私網穿越方法,該方法包括如下步驟A、網絡地址轉換NAT類型的學習過程的步驟;B、SIP信令和STUN信令、TURN信令融合過程的步驟;C、媒體流端口的保持過程的步驟。所述步驟A進一步包括A1、在發送SIP注冊消息前,首先向公網的STUN服務器的IP1和端口 P0RT1發送 STUN請求消息;A2、判斷響應中IP地址和端口與本地地址是否一致,如果STUN響應中攜帶的出口 IP地址和端口與本地主機IP地址和端口號一致,則將isPublic標志位置為真,此時停止 發送STUN請求;如果STUN響應中攜帶的出口 IP地址和端口與本地主機不一致,則說明本 地主機處于NAT后面,保存此次NAT的出口 IP地址,然后繼續向STUN服務器的IP1和端口 P0RT2發送STUN請求,記錄STUN響應中出口 IP地址和端口號;A3、對比前一次和本次獲得的端口號,如果兩個端口號一致,則說明該網絡是非 對稱型的NAT網絡,則將useStun標志位置為真;否則,該網絡則為對稱型NAT網絡,將
5useTurn標志位置為真。所述步驟B進一步包括B1、當SIP應用服務器得到SIP客戶端的注冊地址后,在需要和客戶端建立會話時 向客戶端發起invite請求,客戶端收到invite請求后恢復180RING和帶SDP的SIP消息, 對180RING消息無需做任何修改,但是對帶SDP的SIP消息需要在發送前從STUN信令或 TURN獲取有效信息,來修改此消息;B2、SIP UA查詢isPublic標志位,如果上一個過程將isPublic標志置為真的話, 則,只需都填寫本地址和端口即可;若查詢到isPublic標志位為isfalse,則查詢useTurn 禾口 useStun的標志位;B3、如果得到的網絡參數useStun為真,則優先使用以后需要接收音、視頻流的地 址和端口,向STUN服務器發送STUN請求,將得到響應的音、視頻流的本地址所映射的出口 NAT地址提交給SIP UA,SIP UA將這些地址分別填寫在SDP的音、視頻地址處;如果得到的 網絡參數是useTurn為真,則象使用STUN協議一樣,只是此時從響應中得到的地址是TURN 服務器為客戶端在其上分配的端口,將此地址填寫到SDP中就意味著SIP客戶端以后接收 到的音、視頻流都是通過TURN服務器中轉過來的。步驟C所述媒體流端口的保持過程的步驟具體為啟動兩個線程重復綁定實際用 于接收音、視頻的端口,然后間隔一段時間就向通信方發送簡單的UDP包,周期性的發送簡 單的UDP包,不僅在防火強上打通進出流媒體的通道,而且也維持了內網主機在NAT網關上 的映射;當會話結束時,停止兩個發包的線程,如果采用的是TURN方式,需要再綁定接收音 視頻的端口向TURN服務器發送Rfresh消息,使TRUN服務器釋放為TURN客戶端分配的相 關資源。本發明所提供的基于SIP軟終端的私網穿越系統和方法,具有以下優點該系統和方法使SIP信令與SIP擴展協議、STUN消息、TURN消息有機的融合在一 起。SIP信令采用擴展協議與SIP應用服務器配合通信,使得不帶SDP的SIP信令不需要發 送STUN、TURN消息就完成了穿越,只有帶SDP的SIP信令才需要發送STUN、TURN消息,提取 響應中的有效信息。該方法時SIP信令完全在直通的情況下進行通信,且媒體流也是在直 通情況下不能使用時才采取中轉的方式,大大提高了通信雙方的效率,同時也保證了通信 的實時性。而且,使用STUN協議和TURN協議無需對現有網絡中的硬件設備進行更改,并且 能夠實現穿越多級串聯的NAT。
圖1為本發明基于SIP軟終端的私網穿越系統的功能框圖;圖2為本發明的基于SIP軟終端的私網穿越方法流程圖;圖2a為圖2所述的網絡學習過程的流程示意圖;圖2b為本發明基于SIP軟終端的注冊用戶建立會話的流程示意圖;圖3為本發明基于SIP軟終端的NAT穿越系統的具體交互過程示意圖之一(針對 非對稱NAT消息);圖4為本發明基于SIP軟終端的NAT穿越系統的具體交互過程示意圖之二(針對 對稱NAT消息)。
具體實施例方式下面結合附圖及本發明的實施例對本發明的方法作進一步詳細的說明。本發明的基本思想由于網絡環境極其復雜,單純的使用一種穿越方法,并不能使 SIP信令和媒體流得到完善有效的穿越。如果單獨使用STUN協議與SIP信令結合,SIP信 令和媒體流只能穿透非對稱型的網絡,遇到對稱型網絡時,仍然無法建立正常的連接;如果 單獨使用TURN協議與SIP信令結合,雖然可以穿透任何類型的NAT網絡,但是SIP信令和 媒體流都需要經過TURN服務器的中轉,大大增加了報文的時延和丟包的可能,因而降低了 音視頻的實時性。因此,鑒于以上現況的考慮,本發明提出一種同時利用SIP信令的特性與 STUN協議和TURN協議有機結合的私網穿越系統和方法,并根據STUN協議和TURN協議的技 術特點以及SIP消息的特殊性,將兩者有機地融合在一起,完成SIP信令和媒體流的穿越。圖1為本發明基于SIP軟終端的私網穿越系統的功能框圖,如圖1所示,SIP軟終 端系統主要分為四個模塊,分別為私網穿越模塊10、SIP信令代理模塊11、JMF模塊(Java 媒體處理模塊)12和音視頻編解碼模塊13 ;其中,所述私網穿越模塊10,作為整個SIP軟終 端系統的一個模塊,與SIP軟終端中的其他模塊協調工作,共同完成SIP終端會話的交互過 程。所述私網穿越模塊10,即STUN/TURN客戶端(Client)模塊,作為SIP軟終端的私 網穿越模塊,用于與STUN服務器(Server)和TURN服務器(Server)交互,以獲取有效信息。 當SIP UA模塊即SIP信令代理模塊11需要該信息時,私網穿越模塊10將所述有效信息反 饋給SIP UA。這里,所述的有效信息,包括通過STUN客戶端和服務器之間交互得到的內部網絡 中的私有地址所映射的公網地址以及網絡中存在的NAT類型;或通過TRUN客戶端和服務器 之間的交互使內網的主機獲取一個公網地址(但此公網地址并非STUN協議中得到的其NAT 出口地址,而是TURN服務器的地址,也就是中繼服務器的地址)。所述SIP信令代理模塊(即SIP UA模塊)11,作為整個軟終端系統中SIP信令的 代理模塊,所有SIP信令的交互過程都由SIP UA模塊11完成,當啟動SIP軟終端時,SIP UA模塊11就開始監聽SIP的各信令端口,準備接收和發送各種SIP信令。JMF模塊(即Java媒體處理模塊)12,用以捕獲音、視頻設備的音視頻流,然后調 用音視頻編解碼器進行編碼,最終打包成實時傳輸協議(RTP)包發送給對端通信方。音視頻編解碼模塊13,用以對所述音、視頻流的編解碼。這里,如果SIP軟終端處在私網的環境中,SIP UA模塊11會調用私網穿越模塊10 獲取有效信息,進行SIP信令的交互,會話建立后由JMF模塊12和音視頻編解碼器模塊13 負責發送和接收、呈現音視頻。本發明的利用SIP信令的特性與STUN協議、TURN協議有機結合的高效穿越方法, 根據SIP信令的交互過程可劃分為三個部分SIP信令交互前的網絡NAT類型學習過程、 SIP信令和STUN信令以及TURN信令融合的過程、媒體流端口的保持過程。圖2為本發明的基于SIP軟終端的私網穿越方法流程圖,如圖2所示,該方法包括 如下步驟步驟21、網絡NAT類型的學習過程。
這里,該過程如圖2a所示,包括在發送SIP注冊消息前,首先向公網的STUN服務 器的IP1和端口 P0RT1發送STUN請求消息;判斷響應中IP地址和端口與本地地址是否一致,如果STUN響應中攜帶的出口 IP 地址和端口與本地主機IP地址和端口號一致,則將isPublic標志位置為真,說明本地主機 處于公網中,此時則停止發送STUN請求。如果STUN響應中攜帶的出口 IP地址和端口與本 地主機不一致,則說明本地主機處于NAT后面,保存此次NAT的出口 IP地址,然后繼續向 STUN服務器的IP1和P0RT2發送STUN請求,記錄STUN響應中出口 IP地址和端口號。對比前一次和本次獲得的端口號,如果兩個端口號一致,則說明該網絡是非對稱 型的NAT網絡,則將useStun標志位置為真,否則該網絡則是對稱型NAT網絡,將useTurn 標志位置為真。該過程探測出了網絡的NAT類型,對下一步SIP信令采用的NAT穿越機制提供了 依據。可見,所述網絡NAT類型的學習過程,是整個私網穿越過程的基石,為第二個過程 (SIP信令和STUN信令、TURN信令融合的過程)發送哪種類型的消息提供了依據。SIP信 令和STUN信令、TURN信令融合過程是最關鍵的一個過程,SIP信令和媒體流能否穿越NAT 主要取決于該過程獲取的信息是否為有效信息。而第三個過程,即媒體流端口的保持過程, 也是必不可少的一部分,因為即使第二個過程都是通過的有效信息,但是由于NAT的時效 和防火強問題,缺少第三個過程的音視頻流也不能順利地接收和呈現。步驟22、SIP信令和STUN信令、TURN信令融合的過程。這里,所述的SIP信令,包含SIP消息頭和SIP消息體兩部分。SIP消息頭中包含 SIP攜帶了的IP地址和端口號,用于通信雙方建立信令會話;而SIP消息體SDP——會話描 述協議中攜帶的是通信雙方接收音視頻的地址和端口號。如果SIP消息頭中有一方攜帶了 私網地址,通信方會按照SIP消息頭中攜帶的私網地址進行回復,私網地址在Internet網 中是無法路由的,從而導致雙方無法建立會話連接。為了保證會話連接的實時性,不帶SDP 的SIP信令不需要STUN信令和TURN信令的協助,而是應用SIP擴展協議的一部分,在需要 協商接收媒體地址時即需要發送帶SDP的SIP信令的時候再配合STUN信令和TURN信令修 改SDP中所攜帶的私網地址。SIP軟終端要想和SIP應用服務器進行通信,必須先在應用服務器注冊。必須保證 SIP軟終端注冊的地址信息是公網地址才行,否則當SIP應用服務器發送邀請加入會話的 消息時,SIP軟終端將無法接收到請求。為了解決這個問題,該方法采用SIP的擴展協議, 在發送的SIP消息頭的VIA域加上RP0RT字段,消息頭中其他字段仍然填寫的是本地地址 和端口,這樣使SIP應用服務器不僅將接收到SIP注冊消息的來源地址和端口號(即網絡 層的IP地址和傳輸層的端口號)填寫到回復信令的VIA字段的R0RT和RECEIVED字段中, 而且把該地址注冊為客戶端的地址。此地址必然是公網地址,因為如果該客戶端處于公網 之中,來源地址和端口必然和SIP消息頭中攜帶的客戶端的本地地址是一致的都是公網地 址;如果該客戶端處于私網中,來源地址和端口與SIP消息頭中攜帶的地址是不一致的,來 源地址和端口是通過NAT網關修改后的對外暴露的公網地址和端口。通過對SIP消息做最 小的修改,保證了注冊地址的正確性,從而保證SIP應用服務器肯定能通過該地址找到其 對應的SIP客戶端。由于地址的轉換是有時效性的,這種保證只能保證短時間內的通信。如果長時間不通過NAT網關上的映射對端口向外界發送消息,這種映射關系將會自動取消, 即注冊的公網地址也同時失效了。為了保證注冊的公網地址和端口一直有效,間隔一段時 間就發送一次注冊包,保持和刷新私網用戶注冊的地址,使SIP應用服務器可以在任意時 刻通過該注冊地址找到私網中的SIP客戶端。私網用戶周期性發送注冊消息的行為要從啟 動SIP客戶端一直持續到SIP客戶端退出應用程序為止。圖2b為本發明基于SIP軟終端的注冊用戶建立會話的流程示意圖,如圖2所示, SIP應用服務器得到了 SIP客戶端的注冊地址后,會在需要和客戶端建立會話時向客戶 端發起invite請求,客戶端收到invite請求后會恢復180RING和帶SDP的SIP消息,對 180RING消息無需做任何修改,但是對帶SDP的SIP消息需要在發送前從STUN信令或TURN 獲取有效信息,來修改此消息。如果此信令仍向SIP注冊消息那樣只在VIA域加RP0RT字段,會話仍然無法建立, 因為SIP應用服務器會根據此SIP消息的中的CONTACT字段進行回復ACK消息,如果填寫 的是本地地址,回復的ACK消息也無法進行路由,完整的連接無法建立,因此提取SIP應用 服務器發送過來的INVITE消息中的TO域中地址填寫到將要發送的帶SDP的SIP消息的 CONTACT域中去,INVITE消息中的TO域的地址是SIP客戶端注冊的地址,填寫該地址可以 確保SIP信令的交互過程順利完成。只修改CONTACT域僅保證了 SIP信令的交互過程,由于 SDP中填寫的接收音視頻端口還是本地地址和端口,媒體流仍然無法穿透NAT。此時,單純 靠SIP客戶端和應用服務器的交互信息,無法完成SDP的正確修改,需要STUN協議和TURN 協議進行協助。在發送帶SDP的SIP信令之前,根據上一個過程學習到的網絡參數信息來 判斷是否需要發送額外的信令。SIP UA查詢isPublic標志位,如果上一個過程將isPublic標志置為真的話,說明 處在公網中,不需要發送額外的信令,只需都填寫本地址和端口即可;若查詢到isPublic 標志位為isfalse,則查詢useTurn和useStun的標志位,如果得到的網絡參數是useStun 為真,則優先使用以后需要接收音、視頻流的地址和端口,并向STUN服務器發送STUN請求, 將得到響應的音、視頻流的本地址所映射的出口 NAT地址提交給SIP UA, SIP UA將這些地 址分別填寫在SDP的音、視頻地址處;如果得到的網絡參數是useTurn為真,則象使用STUN 協議一樣,只是此時從響應中得到的地址是TURN服務器為客戶端在其上分配的端口,將此 地址填寫到SDP中就意味著SIP客戶端以后接收到的音、視頻流都是通過TURN服務器中轉 過來的,因此,使用TURN協議的優先級要比STUN協議低。STUN協議的方式是直通的方式, 沒有經過任何中轉,其效率和實時性最高,但是卻不能穿透對稱NAT,但此時TURN協議就彌 補了 STUN的缺陷。因此,該過程能夠使STUN和TURN協議配合使用,相輔相成,同時又使其SIP消息 有機的融合在一起。步驟23、媒體流端口的保持過程。這里,第二個過程完整了 SIP信令的穿越過程,但是媒體流的穿越仍然沒有全部 完成。SIP終端通常接收音視頻的端口和發送音視頻不是一組,如果SIP終端不主動使用實 際接收音視頻的地址向將來要向其發送媒體流的主機和服務器發送數據包的話,NAT和防 火墻將會阻止音視頻流進來。因為NAT和防火墻會阻止那些內網主機從來沒有主動發過數 據包的外網主機發送進來的數據包,它們會認為這破壞了內網的安全性。
為了音視頻流可以正常通信,必須在NAT和防火墻之間打通一條通道。該方法中 采用使用啟動兩個線程重復綁定實際用于接收音、視頻的端口,然后間隔一段時間就向通 信方發送簡單的UDP包,這些簡單的UDP包不會影響其它的真正的音視頻包,其只負責在 NAT和防火墻之間打通一條通信通道。周期性的發送簡單的UDP包,不僅在防火強上打通 進出流媒體的通道,而且也維持了內網主機在NAT網關上的映射。會話結束時,停止兩個 發包的線程,如果采用的是TURN方式,需要再綁定接收音視頻的端口向TURN Server發送 Rfresh消息,使TRUN Server釋放為TURN Client分配的相關資源。圖3為本發明基于SIP軟終端的NAT穿越系統的具體交互過程示意圖之一(針對 非對稱NAT消息),如圖3所示,所述系統將SIP的交互和私網穿越模塊有機的結合在一起, 協調地完成一個建立會話、接收音視頻和呈現音視頻的過程。該過程包括如下步驟(l)SIP UA調用NetworkConfigure類中的determineAddressO 方法探測網絡NAT 的類型,該方法是NAT穿越系統暴露給SIP UA的接口方法;(2)接口方法中再調用STUN Client向STUN Server的IP1和P0RT1地址發送 STUN Binding 請求;(3)接收到STUN Server發送過來的STUN Binding Response,得到一個解析地 址,查看如果該解析地址和發送STUN請求的地址和端口是否一致,如果一致將isPublic = ture,如果按不一致,將該解析地址保存下來;(4) STUN Client 向 STUN Server 的 IP1 和 P0RT2 地址發送 STUN Binding 請求;(5)接收到STUN Server發送過來的STUN Binding Response,得到一個解析地址, 發現該解析地址與第一次的請求得到的地址一致,因此將useStim = true ;(6)返回探測類型的字符串表示;(7)構造SIP注冊消息,在SIP消息頭的VIA域中添加RP0RT字段,發送SIP注冊 消息;(8) SIP Server將收到SIP注冊消息后,解析SIP注冊消息,發現SIP消息頭中VIA 字段中有RP0RT字段,將這兩個地址和端口填寫在恢復的401消息的VIA域的RP0RT字段 和RECEIVED字段,SIP Server回復401鑒權消息;(9)構造SIP注冊消息,在SIP消息頭的VIA域中添加RP0RT字段,發送SIP注冊 消息;(10) SIP Server鑒權成功,將SIP消息的來源IP地址和UDP端口(公網地址)注 冊為該SIP UA的地址,恢復2000K消息;(11)開始建立會話,SIP Server根據SIP UA注冊的地址發送invite響應;(12)將SIP Server發送的invite消息的to域地址填寫到將要發送到的180ring 消息中,發送180ring消息;(13)調用 NetworkManagerServiceImp 1 類的 QueryStunServer 方法,查詢音頻端 口對應的出口 NAT地址;(14) STUN Client 用本地 IP 和音頻端 口 向 STUN Server 發送 STUN Bindingrequest;(15) STUN Server 向 STUN Client 返回 STUN Binding Response ;(16)將從響應中解析出的音頻的出口 NAT地址反饋給SIP UA ;
(17)調用 NetworkManagerServiceImp 1 類的 QueryStunServer 方法,查詢視頻端 口對應的出口 NAT地址;(18) STUN Client 用本地 IP 禾P 視頻端口向 STUN Server 發送 STUN Bindingrequest;(19) STUN Server 向 STUN Client 返回 STUN Binding Response ;(20)將從響應中解析出的視頻的出口 NAT地址反饋給SIP UA ;(21)將SIP Server發送的invite消息的to域地址填寫到將要發送到的2000K 消息中,并且獲取的音視頻地址和端口填寫在SIP SDP中,發送帶SDP的2000K消息中;(22) SIP Server返回帶SDP的ACK消息,SIP會話建立過程完成。圖4為本發明基于SIP軟終端的NAT穿越系統的具體交互過程示意圖之二(針對 對稱NAT消息),該過程包括如下步驟(l)SIP UA調用NetworkConfigure類中的determineAddressO 方法探測網絡NAT 的類型,該方法是NAT穿越系統暴露給SIP UA的接口方法;(2)接口方法中再調用STUN Client向STUN Server的IP1和P0RT1地址發送 STUN Binding 請求;(3)接收到STUN Server發送過來的STUN Binding Response,得到一個解析地址, 查看該解析地址和發送STUN請求的地址和端口是否一致,如果一致將isPublic = ture ; 如果按不一致,將該解析地址保存下來;(4) STUN Client 向 STUN Server 的 IP1 和 P0RT2 地址發送 STUN Binding 請求;(5)接收到STUN Server發送過來的STUN Binding Response,得到一個解析地址, 發現該解析地址與第一次的請求得到的地址不一致,因此將useTurn = true ;(6)返回探測類型的字符串表示;(7)構造SIP注冊消息,在SIP消息頭的VIA域中添加RP0RT字段,發送SIP注冊 消息;(8) SIP Server將收到SIP注冊消息后,解析SIP注冊消息,發現SIP消息頭中VIA 字段中有RP0RT字段,將這兩個地址和端口填寫在恢復的401消息的VIA域的RP0RT字段 和RECEIVED字段,SIP Server回復401鑒權消息;(9)構造SIP注冊消息,在SIP消息頭的VIA域中添加RP0RT字段,發送SIP注冊 消息;(10) SIP Server鑒權成功,將SIP消息的來源IP地址和UDP端口(公網地址)注 冊為該SIP UA的地址,恢復2000K消息;(11)開始建立會話,SIP Server根據SIP UA注冊的地址發送invite響應;(12)將SIP Server發送的invite消息的to域地址填寫到將要發送到的180ring 消息中,發送180ring消息;(13)調用 Ne tworkManager Serv i ce Imp 1 類的 QueryTurnServer 方法,查詢音頻端 口對應的中轉服務器地址和端口;(14)TURN Client 用本地 IP 和音頻端口向 TURN Server 發送 TURNallocate request ;(15) TURN Server分配SIP UA音頻端口對應的在TURN Server本地的中轉地址,分配地址成功,向 TURNClient 返回 TURN allocate successful Response ;(16)將從響應中解析出的音頻的中轉服務器地址反饋給SIP UA ;(17)調用 NetworkManagerServiceImp 1 類的 QueryTurnServer 方法,查詢視頻端 口對應的中轉服務器地址和端口;(18)TURN Client 用本地 IP 和視頻端口向 TURN Server 發送 TURN allocaterequest ;(19)TURN Server分配SIPUA視頻端口對應的在TURN Server本地的中轉地址,分 配地址成功,向 TURNClient 返回 TURN allocate successful Response ;(20)將從響應中解析出的視頻的出口 NAT地址反饋給SIP UA ;(21)將SIP Server發送的invite消息的to域地址填寫到將要發送到的2000K 消息中,并且獲取的音視頻地址和端口填寫在SIP SDP中,發送帶SDP的2000K消息中;(22) SIP Server返回帶SDP的ACK消息,SIP會話建立過程完成;并開始發送音視 頻;(23)會話結束時SIP終端向SIP UA發送bye消息;(24) SIP UA向SIP Server發送ACK消息,回收本次會話使用的各種資源;(25) SIP UA 再回收資源時調用 refreshAddress(AudioPort)方法;(26) TURN Client 用本地的 IP 和音頻端 口 向 TURN Server 發送 TURNrefresh 消 息;(27) TURN Server釋放原來音頻端口對應的中轉端口,向TURN Client發送TURN refresh successful 消息;(28) SIP UA 再回收資源時調用 refreshAddress(videoPort)方法;(29) TURN Client 用本地的 IP 和視頻端 口 向 TURN Server 發送 TURNrefresh 消 息;(30)TURN Server釋放原來視頻端口對應的中轉端口,向TURN Client發送TURN refresh successful 消息。綜上所述,本發明基于SIP軟終端的私網穿越方法,簡化了 STUN協議和TURN協議 中的消息流交互過程。STUN消息只需要STUN binding request和STUN binding response, TURN 消息中只需要 Allocate request、AllocateResponse、Refresh request、Refresh Response消息,協議中規定的其他STUN和TURN消息對SIP穿越沒有任何幫助,其如果加上 還會增大SIP消息的交互時間。在該方法中實現STUN消息和TURN消息并沒有完全按照規 范實現,簡化了消息內容,只保證能獲取有效信息。另外,根據網絡中各種NAT的特性,本發明提出了一種簡單有效的探測NAT類型的 方法。由于STUN方式只是對對稱的NAT是無效的,因此我們無需判斷出該網絡具體是哪種 的非對稱型NAT,只需知道是否是對稱的NAT即可,這樣大大減少了 STUN CLIENT和STUN SERVER交互的過程,減少了探測網絡所需的時間。以往的方法往只采用其中一種與SIP信令進行結合,而本發明綜合運用了兩種獨 立與任何關于建立音視頻會話的穿越方法,將STUN協議與TURN協議協調搭配,相輔相成。 既避免了單獨使用STUN協議時對網絡選擇性有效的方法,又避免了單獨使用TURN協議、需 要同時中轉信令和媒體流造成的時延問題。
12
以上所述,僅為本發明的較佳實施例而已,并非用于限定本發明的保護范圍。
權利要求
一種基于會話初始協議SIP軟終端的私網穿越系統,其特征在于,該系統主要包括私網穿越模塊、SIP信令代理模塊(SIP UA模塊)、Java媒體處理模塊(JMF模塊)和音視頻編解碼模塊;其中,私網穿越模塊,作為整個SIP軟終端系統的一個模塊,與SIP軟終端中的其他模塊協調工作,共同完成SIP終端會話的交互過程;用于與STUN服務器和TURN服務器交互,以獲取有效信息,當SIP UA需要所述信息時,私網穿越模塊將所述有效信息反饋給SIP UA;SIP UA模塊,作為整個軟終端系統中SIP信令的代理模塊,所有SIP信令的交互過程都由SIP UA模塊完成,當啟動SIP軟終端時,SIP UA模塊就開始監聽SIP的各信令端口,準備接收和發送各種SIP信令;JMF模塊,用以捕獲音、視頻設備的音視頻流,然后調用音視頻編解碼器進行編碼,最終打包成實時傳輸協議RTP包發送給對端通信方;音視頻編解碼模塊,用以對所述音、視頻流的編解碼。
2.根據權利要求1所述的基于SIP軟終端的私網穿越系統,其特征在于,所述的有效信 息,包括通過STUN客戶端和服務器之間交互得到的內部網絡中的私有地址所映射的公網 地址以及網絡中存在的NAT類型;或通過TRUN客戶端和服務器之間的交互使內網的主機獲 取一個公網地址。
3.根據權利要求2所述的基于SIP軟終端的私網穿越系統,其特征在于,所述的通過 TRUN客戶端和服務器之間的交互使內網的主機獲取一個公網地址為中繼服務器的地址。
4.一種基于SIP軟終端的私網穿越方法,其特征在于,該方法包括如下步驟A、網絡地址轉換NAT類型的學習過程的步驟;B、SIP信令和STUN信令、TURN信令融合過程的步驟;C、媒體流端口的保持過程的步驟。
5.根據權利要求4所述的基于SIP軟終端的私網穿越方法,其特征在于,所述步驟A進 一步包括A1、在發送SIP注冊消息前,首先向公網的STUN服務器的IP1和端口 P0RT1發送STUN 請求消息;A2、判斷響應中IP地址和端口與本地地址是否一致,如果STUN響應中攜帶的出口 IP 地址和端口與本地主機IP地址和端口號一致,則將isPublic標志位置為真,此時停止發送 STUN請求;如果STUN響應中攜帶的出口 IP地址和端口與本地主機不一致,則說明本地主 機處于NAT后面,保存此次NAT的出口 IP地址,然后繼續向STUN服務器的IP1和端口 P0RT2 發送STUN請求,記錄STUN響應中出口 IP地址和端口號;A3、對比前一次和本次獲得的端口號,如果兩個端口號一致,則說明該網絡是非對稱型 的NAT網絡,則將useStun標志位置為真;否則,該網絡則為對稱型NAT網絡,將useTurn標 志位置為真。
6.根據權利要求4所述的基于SIP軟終端的私網穿越方法,其特征在于,所述步驟B進 一步包括B1、當SIP應用服務器得到SIP客戶端的注冊地址后,在需要和客戶端建立會話時向 客戶端發起invite請求,客戶端收到invite請求后恢復180RING和帶SDP的SIP消息,對 180RING消息無需做任何修改,但是對帶SDP的SIP消息需要在發送前從STUN信令或TURN獲取有效信息,來修改此消息;B2、SIP UA查詢isPublic標志位,如果上一個過程將isPublic標志置為真的話,則, 只需都填寫本地址和端口即可;若查詢到isPublic標志位為isfalse,則查詢useTurn和 useStun的標志位;B3、如果得到的網絡參數useStim為真,則優先使用以后需要接收音、視頻流的地址和 端口,向STUN服務器發送STUN請求,將得到響應的音、視頻流的本地址所映射的出口 NAT 地址提交給SIP UA,SIP UA將這些地址分別填寫在SDP的音、視頻地址處;如果得到的網絡 參數是useTurn為真,則象使用STUN協議一樣,只是此時從響應中得到的地址是TURN服務 器為客戶端在其上分配的端口,將此地址填寫到SDP中就意味著SIP客戶端以后接收到的 音、視頻流都是通過TURN服務器中轉過來的。
7.根據權利要求4所述的基于SIP軟終端的私網穿越方法,其特征在于,步驟C所述媒 體流端口的保持過程的步驟具體為啟動兩個線程重復綁定實際用于接收音、視頻的端口, 然后間隔一段時間就向通信方發送簡單的UDP包,周期性的發送簡單的UDP包,不僅在防火 強上打通進出流媒體的通道,而且也維持了內網主機在NAT網關上的映射;當會話結束時, 停止兩個發包的線程,如果采用的是TURN方式,需要再綁定接收音視頻的端口向TURN服務 器發送Rfresh消息,使TRUN服務器釋放為TURN客戶端分配的相關資源。
全文摘要
本發明公開一種基于會話初始協議(SIP)軟終端的私網穿越系統和方法,該系統包括私網穿越模塊、SIP信令代理模塊、Java媒體處理模塊和音視頻編解碼模塊。該方法將SIP信令與SIP擴展協議、STUN消息、TURN消息有機的融合在一起;SIP信令采用擴展協議與SIP應用服務器配合通信,使得不帶SDP的SIP信令不需要發送STUN、TURN消息就完成了穿越,只有帶SDP的SIP信令才需要發送STUN、TURN消息,提取響應中的有效信息。應用本發明能夠在公網與私網之間保持直通的情況下進行通信,大大提高了通信雙方的效率,同時也保證了通信的實時性,并且能夠實現穿越多級串聯的NAT。
文檔編號H04L29/12GK101860536SQ20101018720
公開日2010年10月13日 申請日期2010年5月31日 優先權日2010年5月31日
發明者劉傳昌, 王月, 程渤, 章洋, 陳俊亮 申請人:北京郵電大學