專利名稱:一種基于會話初始協議的會話方法及設備的制作方法
技術領域:
本發明涉及會話初始協議(SIP,Session Initiation Protocol)技術領域,具體涉及一種基于會話初始協議的會話方法及設備。
背景技術:
互聯網協議電話(VoIP,Voice over Internet Protocol)基于IP分組交換網絡,通過對傳統的模擬語音信號進行數字化、壓縮、打包,封裝成幀等一系列處理,使得語音業務可以通過IP網進行承載。例如,IP電話就是VoIP的一項典型應用。
SIP是目前使用最廣的VoIP技術,也是第三代移動通信的一種重要通信協議。SIP消息包括SIP請求消息和SIP響應消息兩大類。SIP的典型組網應用如圖1所示。圖1中,注冊和代理服務器(Registrar Server&Proxy Server)、用戶代理(UA,UserAgent)1、UA2都直接連在公網上,都使用公網IP地址;安裝在個人電腦(PC)機上的軟電話(Softphone)和UA3均在私網中,并通過網絡地址轉換(NAT,NetworkAddress Translation)網關與公網相連。軟電話可以看作是UA的一種。
圖1中,UA1、注冊和代理服務器、UA2都獲得公網IP地址,且互相之間均路由可達。其中,UA1的公網IP地址是172.33.28.33,UA2的公網IP地址是172.33.27.45,注冊和代理服務器的公網IP地址是172.33.255.254。公網IP終端使用公網IP地址進行注冊和呼叫的流程如圖2所示。圖2列出了各個SIP消息中的關鍵字段。其中主要包括以下步驟 S201~S204,UA1和UA2分別向注冊和代理服務器注冊,將自己的SIP統一資源標識符(URI,Uniform Resource Identifiers)填充在SIP注冊(REGISTER)請求消息的Contact頭域中;注冊和代理服務器收到REGISTER請求消息后,將Contact頭域中的信息(Contact地址)記錄在數據庫中,以供后續的呼叫使用,并返回200OK消息。在圖2所示的交互中,注冊和代理服務器的數據庫中保存的UA1和UA2的Contact地址分別為 sip100@172.33.28.33:5060,和sip200@172.33.27.45:5060。
S205~S206,UA1需要呼叫UA2(UA2的號碼為200)時,通過注冊和代理服務器向UA2發送SIP邀請(INVITE)消息。圖2中所示的INVITE消息中,c和m字段分別為用于建立VoIP通話所需的媒體地址和端口號,即本端監聽媒體報文的地址172.33.28.33和端口號16844,對端將向該地址和端口發送實時傳輸協議(RTP,Real-time Transport Protocol)或實時傳輸控制協議(RTCP,Real-time Transport Control Protocol)報文;INVITE消息中的Contact頭域的值表明了后續請求將要發往的地址;INVITE消息中還包括有UA1所支持的媒體能力集信息,如RTP/AVP 18804表示UA1所支持的語音編碼,以與UA2進行媒體能力協商。圖2所示的INVITE消息中還包括有呼叫對端UA2的號碼200,注冊和代理服務器接收到上述INVITE消息后,根據呼叫對端UA2的號碼查找到UA2的注冊地址,從而將INVITE消息轉發給UA2。
S207~S211,UA2通過注冊和代理服務器向UA1返回100Trying或180Ringing響應消息,表示請求已收到正在處理;UA2摘機后,向UA1返回200OK的SIP響應消息,該響應消息中的Contact頭域的值表明了后續請求要發往的地址,并且在該消息中同樣將本端監聽媒體報文的地址和端口號、以及選取的語音編碼方式(其中RTP/AVP 18表示G.729語音編碼)等信息告知UA1;之后,UA1進一步向UA2返回ACK消息,UA2在收到UA1發送的ACK消息后,能力協商就完成了,語音呼叫得以建立成功。
S212~S214,然后,UA1和UA2分別向對端監聽的地址/端口號發送RTP報文,以進行語音通信。任意一端想要拆線,都會根據Contact頭域的值直接向對端發送SIP BYE消息,并在接收到對端返回的200OK應答后,呼叫就拆除了。
注意由于S206中的INVITE消息和S210中的200OK消息中的Contact頭域標明了后續請求發往的地址,所以,S211中的ACK應答消息和S213中的SIP BYE消息都將直接根據Contact的值發向對端。
位于NAT網關后的私網軟電話,如果按照圖2的流程進行注冊和呼叫,會出現下面的問題 軟電話發給注冊和代理服務器的SIP消息在到達NAT網關1時,NAT網關1將進行NAT轉換,將該SIP消息的IP報頭的源地址和用戶數據報協議(UDP,User Datagram Protocol)報頭的源端口號更改為公網IP地址和公網端口號,除此之外,SIP消息中涉及私網IP地址/端口號的其它內容并沒有隨之發生更改,所以注冊和代理服務器收到的由NAT網關1轉發的該SIP消息可能如下,其中下劃線部分的私網IP地址/端口號并沒有被NAT網關1更改 REGISTER sip172.33.255.254SIP/2.0 ViaSIP/2.0/UDP 192.168.1.3:5061;branch=z9hG4bK258e3d43b96 Call-IDHAnGUeIiNgSlZj124821548y0@192.168.1.3 From<sip:80481001@172.33.255.254:5060>;tag=b961466b To<sip:80481001@172.33.255.254:5060> CSeq1REGISTER Contact<sip:80481001(@192.168.1.3:5061> Expires3600 Max-Forwards70 Content-Length0 按照圖2所示的一般處理流程,注冊和代理服務器將記錄Contact頭域的值80481001@192.168.1.3:5061。由于注冊和代理服務器沒有到私網地址(192.168.1.3)的路由,將會導致后續的SIP消息無法返回給軟電話,進而導致軟電話無法與公網中的UA建立會話。為解決上述問題,現有技術中通常采用以下技術方案,以實現SIP消息穿越NAT網關 1)NAT網關支持SIP應用級網關(ALG,Application Level Gateway)功能,由NAT網關將TCP/UDP載荷中的私網地址/端口號修改為NAT網關上對外的公網地址/端口號。
2)利用用戶數據報協議簡單穿越網絡地址轉換器(STUN,Simple Traversalof User Datagram Protocol Through Network Address Translators)協議進行NAT穿越。該方案需要在公網中增加一個STUN服務器,并且要求UA支持STUN客戶端功能。
上述現有技術方案中有以下缺點 1)NAT ALG方式需要通過端口號來識別SIP消息,如果UA的SIP端口號與ALG設置的不同,則ALG無法生效。雖然SIP缺省的端口號為5060,但是目前很多軟電話和IP電話的端口號都是采用5060外的其它端口;其次,隨著SIP消息和頭域種類的增多,ALG也需要隨之不斷進行升級;再次,實際組網時,需要所有的NAT網關都支持SIP ALG,否則可能導致SIP呼叫無法建立成功。
2)利用STUN技術進行NAT穿越這種方法首先需要在公網中額外的增加一個STUN服務器,同時還要求SIP終端支持STUN客戶端功能,而且隨著NAT安全特性的不斷增強,現有的STUN技術已經很難單獨完成穿越NAT的功能,必須和其它技術相結合才可實現NAT穿越。
發明內容
本發明實施例所要解決的技術問題是提供一種基于SIP的會話方法及設備,NAT網關設備支持ALG功能,也不需要設置額外的STUN服務器,即可實現私網中的用戶代理與其它用戶代理之間的會話。
為解決上述技術問題,本發明實施例提供方案如下 一種基于會話初始協議SIP的會話方法,私網中的用戶代理UA通過網絡地址轉換NAT網關連接到公網,所述會話方法包括 UA建立第一IP地址/端口號和第二IP地址/端口號之間的對應關系,所述第一IP地址/端口號是UA發出的SIP消息所使用的源IP地址/源端口號,所述第二IP地址/端口號是NAT網關對第一類消息中的源IP地址/源端口號進行NAT處理后得到的公網IP地址/端口號,所述第一類消息的目的IP地址/目的端口號為設置在公網中的注冊和代理服務器的IP地址/端口號、源IP地址/源端口號為所述第一IP地址/端口號; UA利用SIP消息向所述注冊和代理服務器進行注冊并協商建立與會話對端之間的會話,并將會話過程中生成的媒體報文作為SIP消息體封裝在指定類型的SIP消息,并通過所述注冊和服務器將所述指定類型的SIP消息轉發給所述會話對端,所述指定類型的SIP消息用于供會話對端解析以得到其中攜帶的媒體報文;其中,在所述對應關系建立后,UA在發送任何SIP消息時,先根據所述對應關系,將該SIP消息頭域部分中的第一IP地址/端口號替換為第二IP地址/端口號,然后再將該SIP消息發送出去。
優選地,上述會話方法中,建立所述對應關系包括 UA向注冊和代理服務器發送源IP地址/源端口號為所述第一IP地址/端口號、目的IP地址/目的端口號為所述注冊和代理服務器的IP地址/端口號的第一SIP請求消息,所述第一SIP請求消息的源IP地址/源端口號在所述NAT網關處被轉換為所述第二IP地址/端口號; UA接收所述注冊和代理服務器針對所述第一SIP請求消息返回的第一SIP應答消息,所述第一SIP應答消息攜帶有所述第二IP地址/端口號; UA從所述第一SIP應答消息中提取所述第二IP地址/端口號,建立所述第一IP地址/端口號和所述第二IP地址/端口號之間的對應關系。
優選地,上述會話方法中,建立所述對應關系包括 UA通過與所述NAT網關進行交互,獲取所述NAT網關對所述第一類消息中的源IP地址/源端口號進行NAT處理后得到的第二IP地址/端口號; UA根據獲取的所述第二IP地址/端口號,建立所述第一IP地址/端口號和所述第二IP地址/端口號之間的對應關系。
優選地,上述會話方法中,所述媒體報文的源IP地址/源端口號是UA監聽媒體報文的IP地址/端口號,所述媒體報文的目的IP地址/目的端口號是所述會話對端監聽媒體報文的IP地址/端口號。
優選地,上述會話方法中,所述媒體報文包括實時傳輸協議報文和實時傳輸控制協議報文。
本發明實施例還提供了一種用戶代理UA,通過網絡地址轉換NAT網關連接到公網,所述UA包括 對應關系建立單元,用于建立第一IP地址/端口號和第二IP地址/端口號之間的對應關系,所述第一IP地址/端口號是UA發出的SIP消息所使用的源IP地址/源端口號,所述第二IP地址/端口號是NAT網關對第一類消息中的源IP地址/源端口號進行NAT處理后得到的公網IP地址/端口號,所述第一類消息的目的IP地址/目的端口號為設置在公網中的注冊和代理服務器的IP地址/端口號、源IP地址/源端口號為所述第一IP地址/端口號; SIP會話單元,用于利用SIP消息向所述注冊和代理服務器進行注冊并協商建立與會話對端之間的會話,并將會話過程中生成的媒體報文作為SIP消息體封裝在指定類型的SIP消息,并通過所述注冊和服務器將所述指定類型的SIP消息轉發給所述會話對端,所述指定類型的SIP消息用于供會話對端解析以得到其中攜帶的媒體報文;其中,在所述對應關系建立后,在發送任何SIP消息時,先根據所述對應關系將該SIP消息頭域部分中的第一IP地址/端口號替換為第二IP地址/端口號,然后再將該SIP消息發送出去。
優選地,上述UA中,所述對應關系建立單元包括 發送子單元,用于向注冊和代理服務器發送源IP地址/源端口號為所述第一IP地址/端口號、目的IP地址/目的端口號為所述注冊和代理服務器的IP地址/端口號的第一SIP請求消息,所述第一SIP請求消息的源IP地址/源端口號在所述NAT網關處被轉換為所述第二IP地址/端口號; 接收子單元,用于接收所述注冊和代理服務器針對所述第一SIP請求消息返回的第一SIP應答消息,所述第一SIP應答消息攜帶有所述第二IP地址/端口號; 維護子單元,用于從所述第一SIP應答消息中提取所述第二IP地址/端口號,并建立所述第一IP地址/端口號和所述第二IP地址/端口號之間的對應關系。
優選地,上述UA中,所述對應關系建立單元包括 獲取單元,用于通過與所述NAT網關進行交互,獲取所述NAT網關對所述第一類消息中的源IP地址/源端口號進行NAT處理后得到的第二IP地址/端口號; 維護子單元,用于根據獲取的所述第二IP地址/端口號,建立所述第一IP地址/端口號和所述第二IP地址/端口號之間的對應關系。
優選地,上述UA中,所述媒體報文的源IP地址/源端口號是UA監聽媒體報文的IP地址/端口號,所述媒體報文的目的IP地址/目的端口號是所述會話對端監聽媒體報文的IP地址/端口號。
優選地,上述UA中,所述媒體報文包括實時傳輸協議報文和實時傳輸控制協議報文。
從以上所述可以看出,本發明實施例提供的基于SIP的會話方法及其設備,從SIP協議本身著手,在不改變現有網元結構的情況下,可以實現SIP消息的NAT穿越,并實現私網中的SIP終端與公網中的SIP終端、私網中的SIP終端與其它私網中的SIP終端之間的媒體通信;本實施例可以適合目前大部分的組網應用,無需NAT網關支持ALG功能,也不需要設置額外的STUN服務器或者虛擬專用網(VPN)相關網元,即可實現媒體報文SIP的NAT穿越,極大的簡化了組網;并且,本實施例能夠很好的兼容現有的SIP協議。
圖1為現有技術的SIP典型組網示意圖; 圖2為現有技術中公網UA之間的注冊呼叫流程示意圖; 圖3為本發明實施例所述的基于SIP的會話方法的流程圖; 圖4為本發明實施例中PROBE消息和REGISTER消息的交互流程圖; 圖5為本發明實施例中SIP呼叫的流程圖; 圖6為本發明實施例中媒體報文的傳輸示意圖; 圖7為本發明實施例中所述UA的結構示意圖。
具體實施例方式 本發明實施例提供的基于SIP的會話方法及設備,通過對現有的SIP協議進行擴展和完善,使得基于SIP自身機制即可實現SIP消息穿越NAT網關,并通過將媒體報文封裝在SIP消息發送給會話對端,進而實現了媒體報文的NAT穿越,使得私網中的UA可以與其它私網或公網中的UA進行會話。以下將結合附圖通過具體實施例對本發明做進一步的說明。
請參考圖3,本發明實施例的基于SIP的會話方法中,私網中的UA通過NAT網關連接到公網,所述會話方法包括以下步驟 步驟31,UA建立并維護第一IP地址/端口號和第二IP地址/端口號之間的對應關系,所述第一IP地址/端口號是UA發出的SIP消息所使用的源IP地址/源端口號,所述第二IP地址/端口號是NAT網關對第一類消息中的源IP地址/源端口號進行NAT處理后得到的公網IP地址/端口號,所述第一類消息的目的IP地址/目的端口號為設置在公網中的注冊和代理服務器的IP地址/端口號、源IP地址/源端口號為所述第一IP地址/端口號; 步驟32,UA利用SIP消息向所述注冊和代理服務器進行注冊并建立與會話對端之間的會話,并將會話過程中生成的媒體報文作為SIP消息體封裝在指定類型的SIP消息,并通過所述注冊和代理服務器將所述指定類型的SIP消息轉發給會話對端,所述指定類型的SIP消息用于供會話對端解析以得到其中攜帶的媒體報文;其中,在建立所述對應關系之后,UA在發送任何SIP消息時,先根據所述對應關系,將該SIP消息頭域部分中的第一IP地址/端口號替換為第二IP地址/端口號,然后再將該SIP消息發送出去。
下面以圖1所示的應用環境為例,通過私網1中的軟電話與私網2中的UA3的會話流程,對上述步驟及所采用的SIP消息進行詳細說明。本實施例對現有的SIP協議進行了擴展和增強,實現了SIP消息和媒體報文的NAT穿越。但需要說明的是,本實施例只是提供一種對SIP協議的擴展機制,本實施例所采用的SIP消息格式并不對本發明的保護范圍構成限制。
為了在UA上建立所述對應關系,本實施例首先定義了一種新的SIP請求消息PROBE消息。UA在發起注冊和呼叫前,需要先發送PROBE消息給注冊和代理服務器,PROBE消息的IP報頭中的源IP地址/源端口號是UA的私網IP地址/SIP端口號,即SIP協議所使用的私網IP地址/端口號。以圖1中的軟電話為例,圖4給出了具體的PROBE消息以及REGISTER消息的交互流程和各個消息中的關鍵字段 S301,假設注冊和代理服務器上SIP協議所使用的IP地址/端口號為172.33.255.254/5060,軟電話上SIP使用的IP地址/端口號為192.168.1.3:5061(第一IP地址/端口號),即軟電話所發出的SIP消息的源IP地址/源端口號為內部的私網地址192.168.1.3:5061,目的IP地址/目的端口號為172.33.255.254/5060。軟電話在向注冊和代理服務器發起注冊之前,首先發送一個PROBE消息,該PROBE消息的內容和封裝后的格式如表1所示
表1 根據SIP的相關規定,SIP消息中的Via頭域的值用于表明對該SIP消息進行響應的地址;Contact頭域的值用于表明后續請求將要發往的地址。本實施例中PROBE消息中的Via頭域的值為192.168.1.3:5061,Contact頭域的值為80481001@192.168.1.3:5061。
S302,該PROBE消息到達NAT網關1,并由NAT網關1進行網絡地址轉換(NAT)處理首先,NAT網關1根據該PROBE消息的源IP地址/源端口號和目的IP地址/目的端口號,分配一個外部的公網IP地址/端口號,該公網IP地址/端口號與該PROBE消息的源IP地址/源端口號和目的IP地址/目的端口號相對應;然后,將該PROBE消息的源IP地址/源端口號由內部的私網IP地址/端口號(第一IP地址/端口號)轉換為外部的公網IP地址/端口號(第二IP地址/端口號),然后再將該PROBE消息轉發至公網中的注冊和代理服務器,并保存上述對應關系。假設該PROBE消息經過NAT網關1時,NAT網關1將PROBE消息的源IP地址/源端口號由192.168.1.3:5061替換為2.2.2.30:12288,并在NAT轉換表中保存如表2所示的對應關系。
表2 本實施例中NAT網關1不支持SIP ALG功能,因此PROBE消息中頭域部分涉及到私網地址和端口號的內容并不會進行更改。這樣,注冊和代理服務器接收到的由NAT網關1轉發的PROBE消息如表3所示,其中IP報頭和UDP報頭中的源IP地址和源端口號已經進行了轉換
表3 S303,注冊和代理服務器對該PROBE消息回復200OK應答消息,應答消息的格式如表4所示
表4 表4所示的200OK應答消息中,Via頭域為ViaSIP/2.0/UDP192.168.1.3:5061;received=2.2.2.30;re-port=12288。本實施例中對RFC3261規定的Via頭域應用做了擴展,增加了re-port參數 根據RFC3261的規定,如果收到的SIP請求消息的源IP地址與Via頭域的IP地址不同,則要在應答消息的Via頭域中加上一個received參數,該received參數指明了真正發出SIP請求消息的IP地址,并且將對該SIP請求消息的應答消息發送給received參數所指明的IP地址上。本實施例在收到的SIP請求消息的源IP地址與Via頭域的IP地址不同時,進一步在RFC3261的基礎上增加一個re-port參數,該re-port參數和received參數一起,精確指明了發出SIP請求消息的IP地址/端口號,在本實施例中就是2.2.2.30:12288,并且該應答消息也將被發送給2.2.2.30:12288。
S304,NAT網關1收到該200OK應答的IP消息后,查找自身保存的NAT轉換表,找到相匹配的匹配項,然后將“目的IP地址/目的端口號”做相應的NAT轉換,轉換為內部私網的IP地址/端口號192.168.1.3:5061,然后再發給192.168.1.3:5061。NAT轉換后的200OK應答消息如表5所示
表5 當軟電話收到該200OK應答消息后,根據其中Via頭域的received參數和re-port參數,就知道自身192.168.1.3:5061對應的公網地址為2.2.2.30:12288,從而可以建立一個對應關系表,如表6所示。該對應關系表與NAT網關的映射表(表2)相一致,也就達到了獲取NAT網關1為私網IP地址/端口號192.168.1.3:5061所映射的公網IP地址/端口號的目的。本實施例中還可以通過定期發送PROBE消息并接收相應的應答消息,根據應答消息中Via頭域的值維護所述對應關系表,達到定期更新對應關系的目的。
表6 S305,在生成所述對應關系表之后,軟電話發送REGISTER的SIP請求消息向注冊和代理服務器進行注冊。這里,軟電話按照現有的正常流程生成REGISTER消息,然后再根據上述對應關系表,將該REGISTER消息頭域部分的私網IP地址/端口號都替換為公網IP地址/端口號,再將REGISTER消息發送出去。具體的,將Via頭域由192.168.1.3:5061替換為2.2.2.30:12288,將Contact頭域由80481001@192.168.1.3:5061替換為80481001@2.2.2.30:12288。SIP消息中還可能包括有其它頭域,如From頭域、Remote-party-ID頭域等,這些頭域中的私網IP地址/端口號也要替換為公網IP地址/端口號。最終軟電話所發送的REGISTER消息如表7所示
表7 S306~S308,REGISTER消息到達NAT網關1后,NAT網關1按照正常的NAT處理流程進行處理,會發現目前已經有一個映射項與該REGISTER消息相匹配,因此不會再給192.168.1.3:5061分配新的地址/端口號,而是根據該映射項進行NAT轉換,然后再將REGISTER消息發送給注冊和代理服務器。因此,注冊和代理服務器接收到的REGISTER消息如表8所示
表8 此時,注冊和代理服務器收到的REGISTER消息中,IP報頭和UDP報頭中的源IP地址/源端口號為“2.2.2.30/12288”,與REGISTER消息的Via頭域相同,此時注冊和代理服務器記錄Contact頭域中的IP地址和端口號作為軟電話的注冊信息,以對軟電話進行注冊,并返回200OK應答消息。由于REGISTER消息的源IP地址/源端口號與Via頭域的IP地址/端口號相同,該應答消息中不會添加received和re-port參數。
這樣,通過上述S301~S308,私網1中的軟電話成功注冊到了注冊和代理服務器上,軟電話在注冊和代理服務器上的注冊信息為80481001@2.2.2.30:12288。后續的呼叫該軟電話的INVITE消息將會被注冊和代理服務器發送到NAT網關1(2.2.2.30:12288);然后,由NAT網關1進行NAT轉換后發送到私網1中的軟電話,從而實現了SIP消息從公網直接訪問私網。
可以看出,上述S301~S308打通了SIP層,實現了SIP消息穿越NAT網關,因此可以利用SIP消息攜帶媒體報文,在公網、私網之間傳遞媒體流信息。為此,本實施例還定義了另一種新的SIP請求消息用于攜帶媒體報文STRAM消息。利用SIP STRAM消息構造一個SIP隧道,實現媒體報文的NAT穿越。
以圖1所示的應用環境為例,UA3(SIP400@10.0.0.2:5060)和軟電話(SIP80481001@192.168.1.3:5061)各自處于不同的私網之中,分別通過NAT網關2和NAT網關1連接到公網。假設,UA3和軟電話都已經通過上述S301~S308中介紹的方法注冊到了注冊和代理服務器上。其中,兩個NAT網關所生成的映射表項如表9所示 表9 軟電話和UA3在注冊和代理服務器上的注冊信息如表10所示 表10 本實施例中,由于UA3和軟電話均處于NAT網關之后,在發起SIP呼叫(INVITE)請求的時候,就會要求使用新的STREAM消息來封裝包括RTP和RTCP報文在內的媒體報文。本實施例中,UA通過在SIP消息的Support頭域中指定參數“STREAM”,以表示本UA支持STREAM封裝,并通過在Require頭域中攜帶參數“STREAM”,表明自己處于NAT網關之后的私網中,要求會話雙方使用STREAM消息對后續的媒體報文進行封裝,具體的呼叫交互流程如圖5所示 S401~S402,INVITE請求消息的協商本實施例中軟電話和UA3都處于NAT后面,并且都支持對SIP的擴展。軟電話在呼叫UA3時,根據UA3的電話號碼400生成INVITE請求消息,通過注冊和代理服務器將該INVITE請求消息轉發給UA3。該INVITE消息包括有會話描述協議(SDP,SessionDescription Protocol)消息體,其中包含有UA3所支持的媒體能力集信息,用于與會話對端進行媒體能力協商;該INVITE消息的Supported和Require頭域中均填寫STREAM,分別表示本軟電話支持STREAM封裝、以及后續需要使用SIP STREAM消息封裝RTP和RTCP報文;該INVITE請求消息經NAT網關1發送到注冊和代理服務器,注冊和代理服務器再根據UA3的注冊信息,將該INVITE請求消息發送到NAT網關2(202.106.0.20:12345),再由NAT網關2轉發至UA3。
如圖5所示,軟電話生成INVITE請求消息,其中SDP部分包括了軟電話監聽媒體報文的地址與端口號,分別是o字段中的192.168.1.3和m字段中的16844,即,192.168.1.3:16844;該INVITE請求消息的IP報頭和UDP報頭的源IP地址和源端口號為192.168.1.3:5061;在發送該INVITE請求消息之前,軟電話根據圖4中建立的對應關系表,將INVITE請求消息頭域部分的私網IP地址/端口號替換為對外的公網IP地址/端口號,即,將Via和Contact頭域中的192.168.1.3:5061替換為2.2.2.30:12288,然后,再將該INVITE請求消息發送給注冊和代理服務器;該INVITE請求消息將首先到達NAT網關1,由NAT網關1根據表9進行NAT處理,將源IP地址和源端口號由192.168.1.3:5061替換為2.2.2.30:12288,然后再發送給注冊和代理服務器;注冊和代理服務器根據表10中UA3的注冊信息,將該INVITE請求消息發送到NAT網關2(202.106.0.20:12345);再由NAT網關2根據表9進行NAT處理,將其中的目的IP地址和目的端口號由202.106.0.20:12345替換為10.0.0.2:5060,最終將該INVITE請求消息發送到UA3。
S403~S404,UA3返回100Trying或180Ringing響應消息,表示請求已收到正在處理。
S405~S408,UA3返回200OK的應答消息,該消息的關鍵內容請參考圖5,其中SDP部分包括有協商確定的編解碼協議G.729和UA3監聽媒體報文的地址與端口號10.0.0.2:16384等內容。經過注冊和代理服務器的轉發,該200OK應答消息最終到達軟電話;軟電話向注冊和代理服務器返回ACK消息,注冊和代理服務器將該ACK消息轉發給UA3。UA3在接收到該ACK消息后,軟電話和UA3之間的能力協商完成,會話建立成功。媒體報文交互地址及端口為192.168.1.3:16844<->10.0.0.2:16384。
下面以軟電話為例,介紹媒體報文的STREAM封裝(UA3采用相同的封裝過程)。
在會話建立成功之后,軟電話按照正常流程生成媒體報文,并將媒體報文封裝到IP報文中,于是,該媒體報文的IP報頭和UDP報頭中的目的IP地址/目的端口號為UA3監聽媒體報文的地址/端口號10.0.0.2:16384,源IP地址/源端口號為軟電話監聽媒體報文的地址/端口號192.168.1.3:16844。表11示出了媒體報文(RTP報文)的封裝結構,RTP報文包括RTP頭和語音載荷。
表11 然后,將表11所示的媒體報文作為SIP STREAM消息的消息體,封裝在SIP STREAM消息中,然后再對STREAM消息進行IP封裝,封裝后的STREAM消息的結構如表12所示 表12 表12中的IP報頭和UDP報頭的結構如表13所示,表12中的SIP消息的格式如表14所示
表13
表14 其中,表14中SIP消息的Via和Contact頭域均按照先前建立的對應關系表,將原來的私網IP地址/端口號替換為公網IP地址/端口號,即,將Via和Contact頭域中的192.168.1.3:5061替換為2.2.2.30:12288。
軟電話和UA3之間的媒體報文通過STREAM消息進行傳遞,具體流程請參考圖6所示 S501~S502,軟電話根據與UA3之間的媒體報文交互地址及端口號,按照正常流程生成媒體報文,該媒體報文的IP報頭和UDP報頭中的源IP地址/源端口號為軟電話監聽媒體報文的IP地址/端口號192.168.1.3:16844,目的IP地址/目的端口號為UA3監聽媒體報文的地址/端口號10.0.0.2:16384;然后,將該媒體報文作為SIP消息體封裝在STREAM消息中,并按照預先建立的對應關系替換STREAM消息頭域部分的私網IP地址/端口號為公網IP地址/端口號;然后,將該STREAM消息發送至注冊和代理服務器;該STREAM消息中包括有會話對端UA3的號碼,從而注冊和代理服務器可以根據UA3的號碼查找到UA3的注冊信息,將該STREAM消息發送至UA3。可以看出,STERAM消息的轉發方式同INVITE消息類似,轉發過程中的NAT處理此處不再贅述。UA3在接收到該STREAM消息后,對其進行解封裝,獲取其中的SIP消息體,解封裝后得到的媒體報文的目的IP地址/目的端口號是UA3監聽媒體報文的私網IP地址和端口號10.0.0.2:16384,因此UA3可以按照現有的正常處理流程對媒體報文進行相應處理,獲取其中的語音信息。
S503~S508,UA3向注冊和代理服務器返回200OK應答消息;以及后續UA3可以采用類似S501~S502中的處理流程,利用STREAM消息發送媒體報文,從而實現了軟電話和UA3之間雙向的語音交互。RTCP報文的傳輸與RTP報文相類似,不再贅述。
上述利用SIP STREAM消息傳遞媒體報文的原理是利用已經不受NAT影響的SIP消息這個“隧道”,將后續需要交互的媒體報文(RTP和RTCP報文)作為SIP消息體,封裝到指定類型的SIP消息中去,這樣在會話對端收到指定類型的SIP消息后,進行解封裝,即可提取出SIP消息體中的內容,然后就可以按照現有的正常處理流程進行處理。
以上實施例中定義了兩種新的SIP請求消息PROBE和STREAM消息。私網中的UA首先向注冊和代理服務器發送SIP PROBE消息,注冊和代理服務器則在對PROBE消息響應時,返回該PROBE消息經NAT網關NAT處理后得到的公網IP地址/端口號,于是UA得以建立并維護所述對應關系,并根據所述對應關系,將后續發送的SIP消息中頭域部分的私網IP地址/端口號替換為公網IP地址/端口號,以實現SIP消息的NAT穿越。并且,上述實施例中,UA還將會話過程中生成的媒體報文封裝在STREAM消息中進行發送,會話對端接收到STREAM消息后解封裝后即可得到媒體報文,并按照正常的處理流程對媒體報文進行處理。
本實施例中的NAT網關只是完成內部的私網地址/端口號到外部的公網地址/端口號的一個NAT轉換功能,因此本實施例中不需要對現有的NAT網關進行改進,采用現有的NAT網關即可實現本實施例。
與現有的SIP協議相比,本實施例中對SIP消息的處理有兩點不同1)UA在建立所述對應關系后,在發送SIP消息之前,會根據所述對應關系替換SIP消息中Via和Contact頭域的私網IP地址/端口號;2)UA在收到的SIP請求消息的源IP地址與Via頭域的IP地址不同時,在對該SIP請求消息進行響應時還會返回一個用于標識發出該SIP請求消息的端口號。除了這兩點,本實施例對SIP消息的處理方式與現有技術相一致,與現有SIP協議有很好的兼容性。
上述實施例中,UA建立和維護所述對應關系還可以采用其它方式例如,可以采用手工配置的方式,首先確定UA上SIP所使用的私網IP地址/端口號、以及NAT網關對第一類消息中的源IP地址/源端口號進行NAT處理后得到的公網IP地址/端口號,所述第一類消息的目的IP地址/目的端口號為設置在公網中的注冊和代理服務器的IP地址/端口號、源IP地址/源端口號為所述第一IP地址/端口號;然后,再在UA上配置該對應關系;再例如,還可以是UA通過與NAT網關進行交互,獲取NAT網關對所述第一類消息中的源IP地址/源端口號進行NAT處理后得到的第二IP地址/端口號,然后UA根據獲取的所述第二IP地址/端口號,建立并維護所述對應關系。
從以上所述可以看出,本實施例從SIP協議本身著手,在不改變現有網元結構的情況下,可以實現SIP消息的NAT穿越,并實現私網中的SIP終端與公網中的SIP終端、私網中的SIP終端與其它私網中的SIP終端之間的媒體通信;本實施例可以適合目前大部分的組網應用,無需NAT網關支持ALG功能或STUN功能,也無需新增任何服務器或者虛擬專用網(VPN)相關網元,即可實現媒體報文SIP的NAT穿越,極大的簡化了組網;并且,本實施例能夠很好的兼容現有的SIP協議。
基于上述的SIP會話方法,本實施例還提供了一種用戶代理UA。通過NAT網關連接到公網,如圖7所示,該UA包括 對應關系建立單元,用于建立第一IP地址/端口號和第二IP地址/端口號之間的對應關系,所述第一IP地址/端口號是UA上會話初始協議SIP所使用的私網IP地址/端口號,所述第二IP地址/端口號是NAT網關為所述第一IP地址/端口號所映射的公網IP地址/端口號; SIP會話單元,用于利用SIP消息向注冊和代理服務器進行注冊并協商建立與會話對端之間的會話,并將會話過程中生成的媒體報文作為SIP消息體封裝在指定類型的SIP消息中發送給會話對端,所述指定類型的SIP消息用于供會話對端解析以得到其中攜帶的媒體報文;其中,在所述對應關系建立后,在發送任何SIP消息時,先根據所述對應關系將該SIP消息頭域部分中的第一IP地址/端口號替換為第二IP地址/端口號,然后再將該SIP消息發送出去。
優選地,上述對應關系建立單元可以包括 發送子單元,用于向注冊和代理服務器發送源IP地址/源端口號為所述第一IP地址/端口號的第一SIP請求消息,所述第一SIP請求消息的源IP地址/源端口號在所述NAT網關處被轉換為所述第二IP地址/端口號; 接收子單元,用于接收所述注冊和代理服務器針對所述第一SIP請求消息返回的第一SIP應答消息,所述第一SIP應答消息攜帶有所述第二IP地址/端口號; 維護子單元,用于從所述第一SIP應答消息中提取所述第二IP地址/端口號,并建立所述第一IP地址/端口號和所述第二IP地址/端口號之間的對應關系。
優選地,上述對應關系建立單元可以包括 獲取單元,用于通過與所述NAT網關進行交互,獲取所述NAT網關為所述第一IP地址/端口號所映射的第二IP地址/端口號; 維護子單元,用于根據獲取的第二公網IP地址/端口號,建立所述第一IP地址/端口號和所述第二IP地址/端口號之間的對應關系。
優選地,所述SIP會話單元,還可以進一步用于在發送任何SIP消息時,根據所述對應關系,將該SIP消息中Via頭域和Contact頭域中的第一IP地址/端口號替換為第二IP地址/端口號。
優選地,所述媒體報文的源IP地址/源端口號是UA監聽媒體報文的IP地址/端口號,所述媒體報文的目的IP地址/目的端口號是所述會話對端監聽媒體報文的IP地址/端口號。所述媒體報文包括實時傳輸協議報文和實時傳輸控制協議報文。
綜上所述,本發明實施例通過對擴展現有的SIP協議,實現了SIP消息及媒體報文的NAT穿越。
以上所述僅是本發明的實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應視為本發明的保護范圍。
權利要求
1.一種基于會話初始協議SIP的會話方法,私網中的用戶代理UA通過網絡地址轉換NAT網關連接到公網,其特征在于,所述會話方法包括
UA建立第一IP地址/端口號和第二IP地址/端口號之間的對應關系,所述第一IP地址/端口號是UA發出的SIP消息所使用的源IP地址/源端口號,所述第二IP地址/端口號是NAT網關對第一類消息中的源IP地址/源端口號進行NAT處理后得到的公網IP地址/端口號,所述第一類消息的目的IP地址/目的端口號為設置在公網中的注冊和代理服務器的IP地址/端口號、源IP地址/源端口號為所述第一IP地址/端口號;
UA利用SIP消息向所述注冊和代理服務器進行注冊并協商建立與會話對端之間的會話,并將會話過程中生成的媒體報文作為SIP消息體封裝在指定類型的SIP消息,并通過所述注冊和服務器將所述指定類型的SIP消息轉發給所述會話對端,所述指定類型的SIP消息用于供會話對端解析以得到其中攜帶的媒體報文;其中,在所述對應關系建立后,UA在發送任何SIP消息時,先根據所述對應關系,將該SIP消息頭域部分中的第一IP地址/端口號替換為第二IP地址/端口號,然后再將該SIP消息發送出去。
2.如權利要求1所述的會話方法,其特征在于,建立所述對應關系包括
UA向注冊和代理服務器發送源IP地址/源端口號為所述第一IP地址/端口號、目的IP地址/目的端口號為所述注冊和代理服務器的IP地址/端口號的第一SIP請求消息,所述第一SIP請求消息的源IP地址/源端口號在所述NAT網關處被轉換為所述第二IP地址/端口號;
UA接收所述注冊和代理服務器針對所述第一SIP請求消息返回的第一SIP應答消息,所述第一SIP應答消息攜帶有所述第二IP地址/端口號;
UA從所述第一SIP應答消息中提取所述第二IP地址/端口號,建立所述第一IP地址/端口號和所述第二IP地址/端口號之間的對應關系。
3.如權利要求1所述的會話方法,其特征在于,建立所述對應關系包括
UA通過與所述NAT網關進行交互,獲取所述NAT網關對所述第一類消息中的源IP地址/源端口號進行NAT處理后得到的第二IP地址/端口號;
UA根據獲取的所述第二IP地址/端口號,建立所述第一IP地址/端口號和所述第二IP地址/端口號之間的對應關系。
4.如權利要求2或3所述的會話方法,其特征在于,所述媒體報文的源IP地址/源端口號是UA監聽媒體報文的IP地址/端口號,所述媒體報文的目的IP地址/目的端口號是所述會話對端監聽媒體報文的IP地址/端口號。
5.如權利要求4所述的會話方法,其特征在于,所述媒體報文包括實時傳輸協議報文和實時傳輸控制協議報文。
6.一種用戶代理UA,通過網絡地址轉換NAT網關連接到公網,其特征在于,所述UA包括
對應關系建立單元,用于建立第一IP地址/端口號和第二IP地址/端口號之間的對應關系,所述第一IP地址/端口號是UA發出的SIP消息所使用的源IP地址/源端口號,所述第二IP地址/端口號是NAT網關對第一類消息中的源IP地址/源端口號進行NAT處理后得到的公網IP地址/端口號,所述第一類消息的目的IP地址/目的端口號為設置在公網中的注冊和代理服務器的IP地址/端口號、源IP地址/源端口號為所述第一IP地址/端口號;
SIP會話單元,用于利用SIP消息向所述注冊和代理服務器進行注冊并協商建立與會話對端之間的會話,并將會話過程中生成的媒體報文作為SIP消息體封裝在指定類型的SIP消息,并通過所述注冊和服務器將所述指定類型的SIP消息轉發給所述會話對端,所述指定類型的SIP消息用于供會話對端解析以得到其中攜帶的媒體報文;其中,在所述對應關系建立后,在發送任何SIP消息時,先根據所述對應關系將該SIP消息頭域部分中的第一IP地址/端口號替換為第二IP地址/端口號,然后再將該SIP消息發送出去。
7.如權利要求6所述的UA,其特征在于,所述對應關系建立單元包括
發送子單元,用于向注冊和代理服務器發送源IP地址/源端口號為所述第一IP地址/端口號、目的IP地址/目的端口號為所述注冊和代理服務器的IP地址/端口號的第一SIP請求消息,所述第一SIP請求消息的源IP地址/源端口號在所述NAT網關處被轉換為所述第二IP地址/端口號;
接收子單元,用于接收所述注冊和代理服務器針對所述第一SIP請求消息返回的第一SIP應答消息,所述第一SIP應答消息攜帶有所述第二IP地址/端口號;
維護子單元,用于從所述第一SIP應答消息中提取所述第二IP地址/端口號,并建立所述第一IP地址/端口號和所述第二IP地址/端口號之間的對應關系。
8.如權利要求6所述的UA,其特征在于,所述對應關系建立單元包括
獲取單元,用于通過與所述NAT網關進行交互,獲取所述NAT網關對所述第一類消息中的源IP地址/源端口號進行NAT處理后得到的第二IP地址/端口號;
維護子單元,用于根據獲取的所述第二IP地址/端口號,建立所述第一IP地址/端口號和所述第二IP地址/端口號之間的對應關系。
9.如權利要求7或8所述的UA,其特征在于,所述媒體報文的源IP地址/源端口號是UA監聽媒體報文的IP地址/端口號,所述媒體報文的目的IP地址/目的端口號是所述會話對端監聽媒體報文的IP地址/端口號。
10.如權利要求9所述的UA,其特征在于,所述媒體報文包括實時傳輸協議報文和實時傳輸控制協議報文。
全文摘要
本發明提供了一種基于會話初始協議的會話方法及設備。所述會話方法通過建立會話兩端之間的SIP消息通道,并利用SIP消息承載并傳遞媒體報文。按照本發明,無需NAT網關支持ALG功能,也不需要設置額外的STUN服務器,即可實現SIP消息以及RTP/RTCP報文穿越NAT,從而實現私網中的用戶代理與其它用戶代理之間的會話。
文檔編號H04M7/00GK101552848SQ20091008412
公開日2009年10月7日 申請日期2009年5月20日 優先權日2009年5月20日
發明者巖 張 申請人:杭州華三通信技術有限公司