專利名稱:基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)領(lǐng)域,它涉及基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法。
背景技術(shù):
一個(gè)會(huì)話(Session)是指用戶間的數(shù)據(jù)交換過程,互聯(lián)網(wǎng)上大量的應(yīng)用都需要使用會(huì)話的創(chuàng)建與管理功能,這也是IETF提出會(huì)話初始化協(xié)議(Session Initiation Protocol,簡(jiǎn)稱會(huì)話初始化協(xié)議)的初衷。在IETF定義的網(wǎng)絡(luò)協(xié)議體系結(jié)構(gòu)中,會(huì)話初始化協(xié)議協(xié)議是位于傳輸層之上的應(yīng)用層協(xié)議,通過攜帶可選的SDP(Session DescriptionProtocol)載荷,會(huì)話初始化協(xié)議協(xié)議可以輕松地開啟/關(guān)閉會(huì)話、協(xié)商會(huì)話參數(shù)、建立數(shù)據(jù)交換流以及管理會(huì)話。
在會(huì)話初始化協(xié)議協(xié)議中定義了四種網(wǎng)絡(luò)元素1.用戶代理(User Agent,簡(jiǎn)稱UA)負(fù)責(zé)發(fā)送請(qǐng)求與接受響應(yīng);2.代理服務(wù)器(Proxy)專門用于轉(zhuǎn)發(fā)會(huì)話初始化協(xié)議消息,進(jìn)行會(huì)話初始化協(xié)議路由;3.注冊(cè)服務(wù)器(Registrar)則用于登記用戶的登陸位置;4.重定向服務(wù)器(Redirect Server)管理并通知用戶的當(dāng)前登錄位置。
因此可以將會(huì)話初始化協(xié)議網(wǎng)絡(luò)元素劃分為客戶端與服務(wù)端,在當(dāng)前大多數(shù)的會(huì)話初始化協(xié)議實(shí)現(xiàn)中,也往往把用戶代理放在個(gè)人主機(jī)上,譬如KPhone,把代理服務(wù)器、注冊(cè)服務(wù)器與重定向服務(wù)器作為一個(gè)整體服務(wù)器實(shí)現(xiàn),如SER。對(duì)于后三者,會(huì)話初始化協(xié)議協(xié)議并沒有規(guī)定如何實(shí)現(xiàn),以及它們之間使用的通信協(xié)議,我們將統(tǒng)一用代理服務(wù)器代表代理服務(wù)器、注冊(cè)服務(wù)器、重定向服務(wù)器的統(tǒng)一體。
IETF在設(shè)計(jì)會(huì)話初始化協(xié)議協(xié)議時(shí)廣泛借鑒了已有的互聯(lián)網(wǎng)協(xié)議,譬如HTTP、SMTP等,采用了基于文本的編碼方式,這是會(huì)話初始化協(xié)議協(xié)議的最大特點(diǎn)之一。會(huì)話初始化協(xié)議的標(biāo)準(zhǔn)(RFC 3261)主要介紹了會(huì)話初始化協(xié)議的消息格式、如何進(jìn)行通信以及消息的轉(zhuǎn)發(fā)機(jī)制,會(huì)話初始化協(xié)議最大的特點(diǎn)就是提供在應(yīng)用層定位通信對(duì)方的能力以及消息在應(yīng)用層的路由機(jī)制,這是會(huì)話初始化協(xié)議靈活性的重要體現(xiàn),然而在應(yīng)用層數(shù)據(jù)中包含大量的地址信息,也是造成會(huì)話初始化協(xié)議穿越網(wǎng)絡(luò)地址轉(zhuǎn)換困難的根本原因。網(wǎng)絡(luò)地址轉(zhuǎn)換技術(shù)就是解決互聯(lián)網(wǎng)地址匱乏與主機(jī)訪問互聯(lián)網(wǎng)需求之間矛盾的方式之一,它通過把內(nèi)部地址映射成合法的外部地址或者端口,來實(shí)現(xiàn)內(nèi)外的連接。傳統(tǒng)的網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備至多包含傳輸層以下的轉(zhuǎn)換,即僅轉(zhuǎn)換數(shù)據(jù)包中IP頭的地址信息或者包括TCP/UDP頭的端口信息,以此實(shí)現(xiàn)內(nèi)外網(wǎng)絡(luò)通信的方法。然而在會(huì)話初始化協(xié)議消息中包含了大量而必要的地址信息,這些信息可以用于在會(huì)話初始化協(xié)議網(wǎng)絡(luò)元素中進(jìn)行應(yīng)用層路由,同時(shí)會(huì)話初始化協(xié)議消息作為應(yīng)用層的協(xié)議,是攜帶在TCP包或者UDP包中的。因此很明顯,網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備對(duì)于轉(zhuǎn)發(fā)類似于會(huì)話初始化協(xié)議的應(yīng)用層消息,特別是在消息中攜帶了地址信息,并且用于消息路由的報(bào)文,是無能為力的,會(huì)話初始化協(xié)議消息只能在內(nèi)部或者只能在外部互聯(lián)網(wǎng)上傳輸,一旦跨越網(wǎng)絡(luò)地址轉(zhuǎn)換,則該消息就將無法使用,因?yàn)閮?nèi)部網(wǎng)絡(luò)的地址是無法被外部網(wǎng)絡(luò)所識(shí)別,并正確轉(zhuǎn)發(fā)的。
從會(huì)話初始化協(xié)議協(xié)議的提出開始,研究人員就開始關(guān)注會(huì)話初始化協(xié)議穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的問題。由于其中轉(zhuǎn)換涉及大量的會(huì)話初始化協(xié)議語義分析,其所攜帶的會(huì)話描述協(xié)議(SDP)載荷往往用于開啟之后的數(shù)據(jù)流,在網(wǎng)絡(luò)地址轉(zhuǎn)換上需要?jiǎng)?chuàng)建至少兩條以上的地址映射,分別用于會(huì)話初始化協(xié)議會(huì)話與RTP通信,因此會(huì)話初始化協(xié)議網(wǎng)絡(luò)地址轉(zhuǎn)換的穿越方案中考慮最多的是效率問題。目前,會(huì)話初始化協(xié)議穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的實(shí)現(xiàn)方法各異有的直接在網(wǎng)絡(luò)地址轉(zhuǎn)換上實(shí)現(xiàn)會(huì)話初始化協(xié)議應(yīng)用層網(wǎng)關(guān),有的通過擴(kuò)展會(huì)話初始化協(xié)議協(xié)議,還有的則使用網(wǎng)絡(luò)地址轉(zhuǎn)換穿越協(xié)議,譬如STUN、MidCom、ICE等。然而這些方法實(shí)際上都對(duì)網(wǎng)絡(luò)地址轉(zhuǎn)換網(wǎng)絡(luò)的拓?fù)溥M(jìn)行了假設(shè)在內(nèi)網(wǎng)至少有一個(gè)服務(wù)器代理與外部的通信,這個(gè)服務(wù)器可能是代理服務(wù)器,也有可能是STUN、ICE客戶端等等,即使使用擴(kuò)展會(huì)話初始化協(xié)議的方案也需要會(huì)話初始化協(xié)議客戶端軟件的支持。這極大限制了會(huì)話初始化協(xié)議網(wǎng)絡(luò)實(shí)施的靈活性與擴(kuò)展性,也限制了會(huì)話初始化協(xié)議應(yīng)用的推廣。
發(fā)明內(nèi)容
本發(fā)明的目的是解決使用傳統(tǒng)方案進(jìn)行會(huì)話初始化協(xié)議穿越網(wǎng)絡(luò)地址轉(zhuǎn)換時(shí),對(duì)網(wǎng)絡(luò)拓?fù)湟约皯?yīng)用系統(tǒng)的諸多限制,同時(shí)也有助于解決網(wǎng)關(guān)設(shè)備存儲(chǔ)利用率與分析處理效率低的問題,為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種高效而且透明的基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法。
本發(fā)明基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法,包括步驟相關(guān)頭域字段解析步驟網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)設(shè)備對(duì)接收到的會(huì)話初始化協(xié)議(SIP)報(bào)文中網(wǎng)絡(luò)地址轉(zhuǎn)換路由相關(guān)頭域字段進(jìn)行解析;堆棧組成步驟將各類路由相關(guān)的頭域字段按頭域類型的不同組成不同的堆棧;堆棧存放步驟將會(huì)話初始化協(xié)議報(bào)文利用路由相關(guān)的類頭域字段路由所經(jīng)過的各個(gè)會(huì)話初始化協(xié)議節(jié)點(diǎn)的IP地址存放在堆棧中;會(huì)話初始化協(xié)議節(jié)點(diǎn)定位步驟在堆棧中,將網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備前后相鄰的會(huì)話初始化協(xié)議節(jié)點(diǎn)定位;建立映射條目結(jié)合步驟會(huì)話初始化協(xié)議消息中的頭域字段中的地址信息,頭域在會(huì)話初始化協(xié)議路由中的作用以及會(huì)話初始化協(xié)議報(bào)文是否首次到達(dá),決定是否為會(huì)話初始化協(xié)議類節(jié)點(diǎn)在網(wǎng)絡(luò)地址轉(zhuǎn)換表中建立映射條目;建立會(huì)話初始化協(xié)議會(huì)話步驟當(dāng)與上述會(huì)話初始化協(xié)議消息屬于同一會(huì)話的會(huì)話初始化協(xié)議報(bào)文到達(dá)網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備時(shí),依據(jù)已建立的網(wǎng)絡(luò)地址轉(zhuǎn)換映射條目進(jìn)行相同的分析,替換頭域字段批中的內(nèi)網(wǎng)/外網(wǎng)IP地址,從而完成會(huì)話初始化協(xié)議會(huì)話的成功建立。
本發(fā)明的優(yōu)點(diǎn)在于1、本發(fā)明的方法解決了傳統(tǒng)會(huì)話初始化協(xié)議報(bào)文在網(wǎng)絡(luò)地址轉(zhuǎn)換穿越時(shí),對(duì)網(wǎng)絡(luò)地址轉(zhuǎn)換網(wǎng)絡(luò)拓?fù)湟约皶?huì)話初始化協(xié)議應(yīng)用系統(tǒng)的諸多限制,本發(fā)明將所有系統(tǒng)的變化集中在網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備的包處理邏輯中,從而保持了會(huì)話初始化協(xié)議在網(wǎng)絡(luò)地址轉(zhuǎn)換環(huán)境中擴(kuò)展性與靈活性。
2、本發(fā)明的方法對(duì)一個(gè)會(huì)話初始化協(xié)議會(huì)話最多生成兩條網(wǎng)絡(luò)地址轉(zhuǎn)換映射條目(分別用于會(huì)話初始化協(xié)議、RTP),會(huì)話初始化協(xié)議消息中所有類型的,需要進(jìn)行內(nèi)網(wǎng)/外網(wǎng)地址映射的頭域字段的IP地址,或者需要為其創(chuàng)建新的映射條目,或者源于現(xiàn)存網(wǎng)絡(luò)地址轉(zhuǎn)換映射條目,本發(fā)明避免了一些傳統(tǒng)會(huì)話初始化協(xié)議穿越網(wǎng)絡(luò)地址轉(zhuǎn)換方案需要為每類頭域都耗費(fèi)網(wǎng)絡(luò)地址轉(zhuǎn)換存儲(chǔ)空間的缺陷。
3、本發(fā)明的方法運(yùn)用構(gòu)造路由堆棧,然后查找堆棧的辦法,將會(huì)話初始化協(xié)議的網(wǎng)絡(luò)地址轉(zhuǎn)換穿越問題轉(zhuǎn)化為對(duì)堆棧中特定元素定位的問題,有助于提高網(wǎng)關(guān)設(shè)備的計(jì)算效率。
通過以下結(jié)合附圖的詳細(xì)描述,本發(fā)明的上述和其它方面、特征和優(yōu)點(diǎn)將變得更加顯而易見。附圖中圖1是本發(fā)明使用Record-Route棧設(shè)計(jì)分析替換算法圖示圖2是本發(fā)明使用Record-Route頭域分析算法流程3是本發(fā)明會(huì)話初始化協(xié)議穿越網(wǎng)絡(luò)地址轉(zhuǎn)換五類網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)示意4是本發(fā)明會(huì)話初始化協(xié)議穿越網(wǎng)絡(luò)地址轉(zhuǎn)換五類網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)示意5是本發(fā)明會(huì)話初始化協(xié)議穿越網(wǎng)絡(luò)地址轉(zhuǎn)換五類網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)示意圖具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明作具體說明。應(yīng)該指出,所描述的施例僅僅視為說明的目的,而不是對(duì)本發(fā)明的限制。
圖1是本發(fā)明基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法使用Record-Route棧設(shè)計(jì)分析替換算法圖示,以Record-Route頭域分析為例,介紹“棧模式”的分析過程;圖2是本發(fā)明基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法Record-Route頭域分析算法流程圖,則是經(jīng)過總結(jié)后的Record-Route頭域的處理流程;頭域字段是分析的基本單位,在互聯(lián)網(wǎng)工程任務(wù)組(IETF)提出的RFC 3261(會(huì)話初始化協(xié)議Session Initiation Protocol)中明確指出會(huì)話初始化協(xié)議消息的最基本單位是消息頭域(會(huì)話初始化協(xié)議Header),每個(gè)消息頭域有自己的名稱,通常在一行文本中表示成namevalue的形式,并且使用與HTTP類似的語法。會(huì)話初始化協(xié)議消息以開始行(start-line)開始,請(qǐng)求消息的開始行為請(qǐng)求行(request-line),而響應(yīng)消息的開始行為狀態(tài)行(status-line)。最后會(huì)話初始化協(xié)議消息可以攜帶會(huì)話描述協(xié)議(SDP)載荷,以此協(xié)商RTP參數(shù)。
根據(jù)本發(fā)明技術(shù)方案,所述的網(wǎng)絡(luò)地址轉(zhuǎn)換相關(guān)的頭域字段步驟包括Contact、Content-Length、Content-Type、From、Record-Route、Route、To、Via、CSeq、Expires共10個(gè)頭域字段,其中Content-Length與Content-Type是與SDP消息解析相關(guān)聯(lián)的頭域字段,Cseq僅在響應(yīng)中判斷該響應(yīng)消息所對(duì)應(yīng)的請(qǐng)求類型,本身不做任何修改,Expires表示通信地址的時(shí)效,只是用于提供網(wǎng)絡(luò)地址轉(zhuǎn)換為會(huì)話初始化協(xié)議消息建立映射條目的超時(shí)信息,也無須修改。此外請(qǐng)求消息的請(qǐng)求行也攜帶著通信對(duì)方的請(qǐng)求統(tǒng)一資源定位符(Request URI),作為唯一標(biāo)識(shí)通信主體的記號(hào),可能包含主機(jī)的地址信息,也需要轉(zhuǎn)換。對(duì)于會(huì)話初始化協(xié)議消息的消息體部分——會(huì)話描述協(xié)議SDP)載荷的分析涉及RTP地址的轉(zhuǎn)換,在實(shí)現(xiàn)中對(duì)它單獨(dú)設(shè)計(jì),不屬于本發(fā)明的內(nèi)容。對(duì)于不屬于網(wǎng)絡(luò)地址轉(zhuǎn)換分析范圍的頭域,一律予以跳過,以提高效率,這樣分析的范圍就限制在Contact、Record-Route、Route、From、To、Via、RequestURI這7個(gè)字段中。
根據(jù)本發(fā)明技術(shù)方案,在所述的堆棧組成步驟中,將與路由相關(guān)的頭域字段按類型的不同組成不同堆棧的實(shí)現(xiàn)過程包括堆棧步驟將網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備接收到的會(huì)話初始化協(xié)議消息中的路由相關(guān)的頭域字段(Via、Record-Route、Route),按照在會(huì)話初始化協(xié)議消息中出現(xiàn)的先后順序排列成一個(gè)堆棧,位置靠前的為棧頂,表示最后經(jīng)過的會(huì)話初始化協(xié)議節(jié)點(diǎn);位置靠后的為棧底,表示最早經(jīng)過的會(huì)話初始化協(xié)議節(jié)點(diǎn),先進(jìn)先出。
分析步驟將該棧放入網(wǎng)絡(luò)地址轉(zhuǎn)換環(huán)境中分析,分析內(nèi)容包括分析當(dāng)前堆棧的特征與形式,定位網(wǎng)絡(luò)地址轉(zhuǎn)換所分隔的內(nèi)外網(wǎng)分界線位置;棧中表示與網(wǎng)絡(luò)地址轉(zhuǎn)換相鄰節(jié)點(diǎn)在會(huì)話初始化協(xié)議消息路由的具體作用;這些節(jié)點(diǎn)應(yīng)該做怎樣的內(nèi)外地址轉(zhuǎn)換才能保證本次消息、以及后繼消息都可以順利通過網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備;根據(jù)本發(fā)明技術(shù)方案,在所述的堆棧步驟中,Via、Record-Route、Route頭域字段在會(huì)話初始化協(xié)議路由機(jī)制中的行為非常類似,具體為在首次路由發(fā)現(xiàn)過程中,會(huì)話初始化協(xié)議協(xié)議將所經(jīng)過的每個(gè)中間元素(代理服務(wù)器或者提供轉(zhuǎn)發(fā)功能的用戶代理)地址依次記錄到某類頭域字段中,添加到會(huì)話初始化協(xié)議消息中,此后的實(shí)際路由中,中間元素每收到一條會(huì)話初始化協(xié)議消息,檢查當(dāng)前會(huì)話初始化協(xié)議消息頭域字段中的第一個(gè)地址是否指向自身,若是則從會(huì)話初始化協(xié)議消息中刪除指向自身的地址記錄,把新消息轉(zhuǎn)發(fā)給當(dāng)前會(huì)話初始化協(xié)議消息頭域字段中第一個(gè)元素所指向的主機(jī)。
根據(jù)本發(fā)明技術(shù)方案,在所述會(huì)話初始化協(xié)議節(jié)點(diǎn)定位步驟中在堆棧中定位及為會(huì)話初始化協(xié)議類節(jié)點(diǎn)在網(wǎng)絡(luò)地址轉(zhuǎn)換表中建立映射條目的實(shí)現(xiàn)過程如下堆棧查找步驟在堆棧中查找連續(xù)的兩個(gè)元素,其中一個(gè)元素記錄的IP地址信息屬于外網(wǎng),另一個(gè)元素記錄的IP地址信息則屬于內(nèi)網(wǎng),出現(xiàn)這樣特征的堆棧表示這兩個(gè)元素位于網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備附近;分析節(jié)點(diǎn)步驟根據(jù)會(huì)話初始化協(xié)議消息的類型、頭域字段的類型,分析這兩個(gè)元素是位于網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備兩側(cè)的節(jié)點(diǎn),還是位于同一網(wǎng)絡(luò),最接近網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備的兩個(gè)節(jié)點(diǎn),以及位于哪個(gè)網(wǎng)絡(luò);確定位置步驟根據(jù)分析節(jié)點(diǎn)步驟分析得出在該會(huì)話初始化協(xié)議報(bào)文的路由線路上,與網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備最接近、份處于內(nèi)網(wǎng)與外網(wǎng)的兩個(gè)節(jié)點(diǎn),從而獲得堆棧中表示內(nèi)網(wǎng)與外網(wǎng)的分界線位置;地址替換步驟根據(jù)會(huì)話初始化協(xié)議后繼消息使用頭域路由的方式不同,確定這兩個(gè)節(jié)點(diǎn)中誰需要進(jìn)行內(nèi)網(wǎng)/外網(wǎng)地址替換,用需要替換的節(jié)點(diǎn)網(wǎng)絡(luò)地址查詢網(wǎng)絡(luò)地址轉(zhuǎn)換的內(nèi)網(wǎng)/外網(wǎng)地址映射表,若表中不存在相應(yīng)記錄,則需要為其創(chuàng)建一條新的映射條目,用該映射地址替換對(duì)應(yīng)會(huì)話初始化協(xié)議消息報(bào)文中的頭域字段;轉(zhuǎn)發(fā)步驟對(duì)在所有類型頭域分析、修改,將新的會(huì)話初始化協(xié)議報(bào)文轉(zhuǎn)發(fā)給目的地址。
根據(jù)本發(fā)明技術(shù)方案,在所述的建立映射條目結(jié)合步驟中依據(jù)已建立的網(wǎng)絡(luò)地址轉(zhuǎn)換映射條目,進(jìn)行內(nèi)網(wǎng)/外網(wǎng)IP地址替換的實(shí)現(xiàn)過程如執(zhí)行會(huì)話初始化協(xié)議節(jié)點(diǎn)定位步驟,差別在于執(zhí)行地址替換步驟中不再需要?jiǎng)?chuàng)建新的映射條目,直接查找網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備中的內(nèi)網(wǎng)/外網(wǎng)地址映射表,用表中的映射地址替換對(duì)應(yīng)會(huì)話初始化協(xié)議消息報(bào)文中的頭域字段。
根據(jù)本發(fā)明,堆棧組成、分析步驟,具體地,針對(duì)本發(fā)明的附圖1,對(duì)“棧模式”分析Record-Route頭域過程在一次網(wǎng)絡(luò)雙方通訊中,Record-Route頭域在會(huì)話初始化協(xié)議消息的路由過程中發(fā)揮的作用就是用于構(gòu)造通信雙方的Route路徑呼叫方首先發(fā)出INVITE請(qǐng)求消息,請(qǐng)求消息在到達(dá)對(duì)方前,沿途愿意轉(zhuǎn)發(fā)會(huì)話初始化協(xié)議請(qǐng)求消息的代理服務(wù)器,在收到請(qǐng)求消息后用本機(jī)的接收地址、端口構(gòu)造一條新的Record-Route記錄,并插入到會(huì)話初始化協(xié)議消息中所有Record-Route頭域前,從而形成一個(gè)有序的地址列表。將請(qǐng)求消息中所有Record-Route頭域按在會(huì)話初始化協(xié)議消息中的順序設(shè)想為“Record-Route?!?。被呼叫方根據(jù)收到的會(huì)話初始化協(xié)議請(qǐng)求消息相應(yīng)地發(fā)出會(huì)話初始化協(xié)議響應(yīng)消息,Record-Route棧被原封不動(dòng)地拷貝至響應(yīng)消息;同時(shí)將其倒置作為本次會(huì)話被呼叫方與呼叫方通信的Route棧。當(dāng)響應(yīng)消息沿原路返回時(shí),呼叫方直接把響應(yīng)中的Record-Route棧作為Route棧。通信雙方就同時(shí)擁有一條中間節(jié)點(diǎn)相同,但是順序相反的路徑,此后二者用各自的Route棧路由會(huì)話初始化協(xié)議請(qǐng)求,也就是說呼叫方與被呼叫方后繼發(fā)出的會(huì)話初始化協(xié)議請(qǐng)求消息將沿著方向相反的同一條路由線路進(jìn)行轉(zhuǎn)發(fā)。
圖1中假設(shè)四個(gè)代理服務(wù)器愿提供轉(zhuǎn)發(fā)服務(wù),分別為RR0、RR1、RR2、RR3,數(shù)字表示其先后順序。虛線為網(wǎng)絡(luò)地址轉(zhuǎn)換定義的網(wǎng)域界限,由于呼叫未必始于內(nèi)網(wǎng),所以用網(wǎng)域1、網(wǎng)域2分別指代兩個(gè)獨(dú)立網(wǎng)絡(luò)。因?yàn)橐淮螘?huì)話初始化協(xié)議會(huì)話,包括發(fā)出的請(qǐng)求消息和返回的響應(yīng),它們都攜帶著Record-Route記錄,可視作同一個(gè)Record-Route棧在整個(gè)會(huì)話過程中需要進(jìn)行的兩次內(nèi)網(wǎng)/外網(wǎng)地址轉(zhuǎn)換,第一次轉(zhuǎn)換表示對(duì)請(qǐng)求消息中的Record-Route進(jìn)行轉(zhuǎn)換,第二次則表示對(duì)響應(yīng)消息進(jìn)行轉(zhuǎn)換,所以下面對(duì)應(yīng)這兩次轉(zhuǎn)換將網(wǎng)絡(luò)地址轉(zhuǎn)換接受的會(huì)話初始化協(xié)議消息按照是其類型是請(qǐng)求還是響應(yīng)分別進(jìn)行分析。
對(duì)于網(wǎng)絡(luò)地址轉(zhuǎn)換接受的請(qǐng)求當(dāng)呼叫請(qǐng)求消息首次過網(wǎng)絡(luò)地址轉(zhuǎn)換時(shí),Record-Route棧已按序記錄RR0與RR1,此時(shí)若不對(duì)請(qǐng)求消息轉(zhuǎn)換,則根據(jù)Record-Route的語義,被呼叫方構(gòu)造的Route棧將依次為RR3-RR0,當(dāng)被呼叫方發(fā)出請(qǐng)求消息時(shí),請(qǐng)求消息到達(dá)節(jié)點(diǎn)RR2就會(huì)結(jié)束,因?yàn)镽R2可能不識(shí)別網(wǎng)域2的節(jié)點(diǎn)地址RR1。由于這種情況僅出現(xiàn)在網(wǎng)域2為內(nèi)網(wǎng)時(shí)(內(nèi)網(wǎng)能識(shí)別互聯(lián)網(wǎng)地址),所以網(wǎng)絡(luò)地址轉(zhuǎn)換接收到INVITE消息時(shí),檢查Record-Route棧頂?shù)刂肥欠駚碜詢?nèi)網(wǎng),若是則創(chuàng)建網(wǎng)絡(luò)地址轉(zhuǎn)換映射條目RR1→RR1’,并替換棧頂?shù)刂?,來自外網(wǎng)則直接轉(zhuǎn)發(fā)。
對(duì)于網(wǎng)絡(luò)地址轉(zhuǎn)換接受的響應(yīng)被呼叫方發(fā)出響應(yīng),將Record-Route棧拷貝到響應(yīng)沿原路返回。若呼叫始于內(nèi)網(wǎng),則當(dāng)響應(yīng)經(jīng)RR2轉(zhuǎn)發(fā)給網(wǎng)絡(luò)地址轉(zhuǎn)換時(shí),要對(duì)之前已替換的地址反向替換,否則呼叫方發(fā)出的請(qǐng)求將在節(jié)點(diǎn)RR0轉(zhuǎn)發(fā)給外網(wǎng)RR1’時(shí)錯(cuò)誤;若呼叫始于外網(wǎng),那么網(wǎng)絡(luò)地址轉(zhuǎn)換在收到響應(yīng)時(shí)應(yīng)對(duì)棧中位于網(wǎng)域邊緣的RR2構(gòu)造映射RR2→RR2’,否則呼叫方依據(jù)響應(yīng)建立的Route棧將無法穿越網(wǎng)絡(luò)地址轉(zhuǎn)換。通過簡(jiǎn)單的內(nèi)外地址辨別可得RR1與RR2位置——兩條連續(xù)RR記錄分屬不同域。
此外還應(yīng)考慮特例分界點(diǎn)前后僅有一個(gè)或無代理服務(wù)器的情況。請(qǐng)求依然替換棧頂,對(duì)響應(yīng)處理時(shí)分界點(diǎn)的判斷則需調(diào)整。從呼叫方看,網(wǎng)絡(luò)地址轉(zhuǎn)換之前若僅一個(gè)代理服務(wù)器(RR0不存在),若呼叫始于內(nèi)網(wǎng),響應(yīng)Record-Route棧中將無法發(fā)現(xiàn)分界點(diǎn),但棧底地址為網(wǎng)絡(luò)地址轉(zhuǎn)換分配地址,那么可確定分界點(diǎn)在棧底R(shí)R1與之后的RR2之間;若呼叫始于外網(wǎng)判斷法不變。若網(wǎng)絡(luò)地址轉(zhuǎn)換之前未架設(shè)代理服務(wù)器(無RR0、RR1),呼叫來自內(nèi)網(wǎng),檢查響應(yīng)的Record-Route棧未發(fā)現(xiàn)內(nèi)網(wǎng)地址或網(wǎng)絡(luò)地址轉(zhuǎn)換分配地址,那么棧底必為內(nèi)網(wǎng)地址,必須為其構(gòu)造映射條目并替換;分界點(diǎn)在網(wǎng)絡(luò)地址轉(zhuǎn)換之后的情況同理分析。每次至多處理一條Record-Route記錄,剩下的Record-Route字段直接略過,以提高效率。
根據(jù)本發(fā)明,具體地,路由相關(guān)頭域字段解析步驟如圖2所示,Record-Route頭域的具體處理流程如下步驟S1網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備接收到會(huì)話初始化協(xié)議消息,搜索會(huì)話初始化協(xié)議消息獲得一條Record-Route頭域字段記錄。
步驟S2網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備根據(jù)先前分析開始行(start-line),獲得的會(huì)話初始化協(xié)議消息的類型是請(qǐng)求還是響應(yīng)分別處理,請(qǐng)求轉(zhuǎn)入步驟S3,響應(yīng)轉(zhuǎn)入步驟S4。
步驟S3根據(jù)分析開始行(start-line)可判斷會(huì)話初始化協(xié)議消息始于內(nèi)網(wǎng)/外網(wǎng),始于內(nèi)網(wǎng)轉(zhuǎn)入步驟S5,否則轉(zhuǎn)入步驟S14。
步驟S4保存當(dāng)前Record-Route頭域字段記錄,轉(zhuǎn)入步驟S7。
步驟S5若當(dāng)前獲得的Record-Route就是棧頂元素,也就是第一條Record-Route記錄那么轉(zhuǎn)入步驟S6,否則轉(zhuǎn)入步驟S14。
步驟S6用Record-Route的IP地址搜索網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備中的內(nèi)網(wǎng)/外網(wǎng)地址映射表,若不存在相應(yīng)映射條目,則創(chuàng)建新的映射條目,并替換對(duì)應(yīng)Record-Route頭域字段中的IP地址信息,否則直接用已有的映射條目替換,轉(zhuǎn)入步驟S14。
步驟S7若當(dāng)前記錄的Record-Route中IP地址與本次消息的目的地址屬于同一網(wǎng)絡(luò),則轉(zhuǎn)入步驟S9,否則轉(zhuǎn)入步驟S8。
步驟S8若在會(huì)話初始化協(xié)議消息中,當(dāng)前Record-Route頭域字段之后還有Record-Route尚未分析,則轉(zhuǎn)入步驟S1,繼續(xù)獲得下一條Record-Route記錄。
步驟S9若本次響應(yīng)對(duì)應(yīng)的呼叫始于內(nèi)網(wǎng),那么轉(zhuǎn)入步驟S10分析,否則轉(zhuǎn)入步驟S11。
步驟S10若當(dāng)前記錄的Record-Route的IP地址屬于內(nèi)網(wǎng),而且會(huì)話初始化協(xié)議消息中前一個(gè)Record-Route記錄屬于外網(wǎng)地址,那么轉(zhuǎn)入步驟S12,否則轉(zhuǎn)入步驟S13。
步驟S11若當(dāng)前記錄的Record-Route的IP地址屬于外網(wǎng),而且會(huì)話初始化協(xié)議消息中前一個(gè)Record-Route記錄屬于內(nèi)網(wǎng)地址,那么轉(zhuǎn)入步驟S12,否則轉(zhuǎn)入步驟S13。
步驟S12需要替換前一個(gè)Record-Route記錄中的IP地址,首先查詢網(wǎng)絡(luò)地址轉(zhuǎn)換中的內(nèi)網(wǎng)/外網(wǎng)映射表,若不存在映射條目,則創(chuàng)建新的映射條目,并替換對(duì)應(yīng)Record-Route頭域字段中的IP地址信息,否則直接用已有的映射條目替換,轉(zhuǎn)入步驟S13。
步驟S13需要替換的是當(dāng)前的Record-Route記錄的IP地址,執(zhí)行替換操作同步驟S13,轉(zhuǎn)入步驟S14。
步驟S14已經(jīng)完成會(huì)話初始化協(xié)議消息中IP地址的網(wǎng)絡(luò)地址轉(zhuǎn)換映射與替換,跳過剩余上未分析的Record-Route記錄,結(jié)束對(duì)Record-Route頭域的分析。
為了檢驗(yàn)方案的透明性(也稱完備性),必須驗(yàn)證其對(duì)于任何會(huì)話初始化協(xié)議拓?fù)?,都無需會(huì)話初始化協(xié)議軟件做任何修改、配置,就能正常通信。因此首先需要找出所有可能的會(huì)話初始化協(xié)議網(wǎng)絡(luò)地址轉(zhuǎn)換拓?fù)洵h(huán)境。在RFC 3261并未對(duì)會(huì)話初始化協(xié)議的拓?fù)渥龀鋈魏我?guī)定,用戶可以采用任意的方式實(shí)現(xiàn)會(huì)話初始化協(xié)議通信,即對(duì)會(huì)話初始化協(xié)議路由的中間節(jié)點(diǎn)如何部署不做規(guī)定,那么放入網(wǎng)絡(luò)地址轉(zhuǎn)換環(huán)境,將產(chǎn)生大量可能的拓?fù)?,不利于完備性?yàn)證。因此我們采用約減法對(duì)所有拓?fù)淠J竭M(jìn)行歸納兩臺(tái)UA進(jìn)行通信時(shí),若某個(gè)中間節(jié)點(diǎn)所扮演的角色僅僅是在同一網(wǎng)域內(nèi)的會(huì)話初始化協(xié)議消息路由,轉(zhuǎn)發(fā)的會(huì)話初始化協(xié)議消息并不經(jīng)過網(wǎng)絡(luò)地址轉(zhuǎn)換,那么這些位于同一網(wǎng)域的代理服務(wù)器就可看作是一個(gè)代理服務(wù)器節(jié)點(diǎn)。
根據(jù)本發(fā)明所述,可以得到以下五類簡(jiǎn)化拓?fù)洌鐖D3、圖4、圖5所示附圖3采用拓?fù)淠J綖棰俸廷?,圖3中有三個(gè)用戶代理為用戶代理1、用戶代理2、用戶代理3、內(nèi)網(wǎng)、外網(wǎng)、代理服務(wù)器、網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備網(wǎng)絡(luò)地址轉(zhuǎn)換;附圖4拓?fù)淠J綖棰酆廷?,其它部分表示相同;附圖5拓?fù)淠J綖棰荩渌糠直硎鞠嗤?br>
在圖中虛線表示實(shí)際通信的雙方用戶代理,虛線上方用帶圈數(shù)字表示不同的數(shù)據(jù)流①表示網(wǎng)絡(luò)拓?fù)渲形ㄒ坏拇矸?wù)器位于內(nèi)網(wǎng),分處于內(nèi)外網(wǎng)絡(luò)中的用戶代理1與用戶代理2通過代理服務(wù)器通話,對(duì)應(yīng)附圖3,帶圈數(shù)字①所表示的數(shù)據(jù)流;②表示用戶代理2與用戶代理3均處于外網(wǎng),但依靠?jī)?nèi)網(wǎng)代理服務(wù)器通話,對(duì)應(yīng)附圖3帶圈數(shù)字②所表示的數(shù)據(jù)流;③表示代理服務(wù)器位于外網(wǎng),內(nèi)網(wǎng)的用戶代理1與外網(wǎng)的用戶代理3通過代理服務(wù)器通話,對(duì)應(yīng)附圖4帶圈數(shù)字③所表示的數(shù)據(jù)流;④表示兩臺(tái)處于內(nèi)網(wǎng)的用戶代理1和用戶代理2同時(shí)使用外網(wǎng)代理服務(wù)器聯(lián)絡(luò),對(duì)應(yīng)附圖4帶圈數(shù)字④所表示的數(shù)據(jù)流;⑤表示用戶代理1和用戶代理2分別位于內(nèi)、外網(wǎng)絡(luò),通過各自域內(nèi)的代理服務(wù)器為它們轉(zhuǎn)發(fā)消息,對(duì)應(yīng)附圖5帶圈數(shù)字⑤所表示的數(shù)據(jù)流;上面描述是用于實(shí)現(xiàn)本發(fā)明及其實(shí)施例,上述各個(gè)步驟均為示例,本發(fā)明的范圍不應(yīng)由實(shí)施例的描述來限定,本領(lǐng)域普通技術(shù)人員可以根據(jù)實(shí)際情況確定要使用的實(shí)際步驟,而且各個(gè)步驟的有多種實(shí)現(xiàn)方法,這些均應(yīng)屬于本發(fā)明的范圍。本領(lǐng)域的技術(shù)人員應(yīng)該理解,在不脫離本發(fā)明的范圍的任何修改或局部替換,均屬于本發(fā)明權(quán)利要求來限定的范圍。
權(quán)利要求
1.一種基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法,其特征在于,其實(shí)現(xiàn)方法步驟包括將會(huì)話初始化協(xié)議路由機(jī)制和具有網(wǎng)絡(luò)地址轉(zhuǎn)換的網(wǎng)絡(luò)拓?fù)洵h(huán)境結(jié)合起來;相關(guān)頭域字段解析步驟利用網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備對(duì)接收到的會(huì)話初始化協(xié)議報(bào)文中網(wǎng)絡(luò)地址轉(zhuǎn)換路由相關(guān)頭域字段進(jìn)行解析;堆棧組成步驟將各類路由相關(guān)的頭域字段按頭域類型的不同組成不同的堆棧;堆棧存放步驟將會(huì)話初始化協(xié)議報(bào)文利用路由相關(guān)的類頭域字段路由所經(jīng)過的各個(gè)會(huì)話初始化協(xié)議節(jié)點(diǎn)的IP地址存放在堆棧中;會(huì)話初始化協(xié)議節(jié)點(diǎn)定位步驟在堆棧中,將網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備前后相鄰的會(huì)話初始化協(xié)議節(jié)點(diǎn)定位;建立映射條目結(jié)合步驟會(huì)話初始化協(xié)議消息中的頭域字段中的地址信息,頭域在會(huì)話初始化協(xié)議路由中的作用以及會(huì)話初始化協(xié)議報(bào)文是否首次到達(dá),決定是否為會(huì)話初始化協(xié)議節(jié)點(diǎn)在網(wǎng)絡(luò)地址轉(zhuǎn)換表中建立映射條目;建立會(huì)話初始化協(xié)議會(huì)話步驟當(dāng)與上述會(huì)話初始化協(xié)議消息屬于同一會(huì)話的會(huì)話初始化協(xié)議報(bào)文到達(dá)網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備時(shí),依據(jù)已建立的網(wǎng)絡(luò)地址轉(zhuǎn)換映射條目進(jìn)行相同的分析,替換頭域字段批中的內(nèi)網(wǎng)/外網(wǎng)IP地址,從而完成會(huì)話初始化協(xié)議會(huì)話的成功建立。
2.根據(jù)權(quán)利要求1所述的基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法,其特征在于,所述的網(wǎng)絡(luò)地址轉(zhuǎn)換相關(guān)的頭域字段步驟包括Contact、Content-Length、Content-Type、From、Record-Route、Route、To、Via、CSeq、Expires,其中Content-Length與Content-Type是與會(huì)話描述協(xié)議消息解析相關(guān)聯(lián)的頭域字段;Cseq僅在響應(yīng)中判斷響應(yīng)消息所對(duì)應(yīng)的請(qǐng)求類型本身不做任何修改;Expires表示通信地址的時(shí)效,是用于提供網(wǎng)絡(luò)地址轉(zhuǎn)換為會(huì)話初始化協(xié)議消息建立映射條目的超時(shí)信息,請(qǐng)求消息的請(qǐng)求行攜帶著通信對(duì)方的請(qǐng)求同一資源定位符,作為唯一標(biāo)識(shí)通信主體的記號(hào),可能包含主機(jī)的地址信息,也需要轉(zhuǎn)換;對(duì)于會(huì)話初始化協(xié)議消息的消息體部分會(huì)話描述協(xié)議載荷的分析涉及RTP地址的轉(zhuǎn)換;對(duì)于不屬于網(wǎng)絡(luò)地址轉(zhuǎn)換分析范圍的頭域,一律予以跳過,分析的字段范圍為Contact、Record-Route、Route、From、To、Via、Request URI。
3.根據(jù)權(quán)利要求1所述的基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法,其特征在于,所述的堆棧組成步驟,將與路由相關(guān)的頭域字段按類型的不同組成不同堆棧包括堆棧步驟將網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備接收到的會(huì)話初始化協(xié)議消息中的路由相關(guān)的頭域字段Via、Record-Route、Route,按照在會(huì)話初始化協(xié)議消息中出現(xiàn)的先后順序排列成一個(gè)堆棧,位置靠前的為棧頂,表示最后經(jīng)過的會(huì)話初始化協(xié)議節(jié)點(diǎn);位置靠后的為棧底,表示最早經(jīng)過的會(huì)話初始化協(xié)議節(jié)點(diǎn),先進(jìn)先出;分析步驟將所述的堆棧放入網(wǎng)絡(luò)地址轉(zhuǎn)換環(huán)境中分析,分析內(nèi)容包括分析當(dāng)前堆棧的特征與形式,定位網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備所分隔的內(nèi)外網(wǎng)分界線位置;堆棧中表示與網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備相鄰節(jié)點(diǎn)在會(huì)話初始化協(xié)議消息路由的具體作用;這些節(jié)點(diǎn)應(yīng)該做怎樣的內(nèi)外地址轉(zhuǎn)換才能保證本次消息、以及后繼消息都可以順利通過網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備。
4.根據(jù)權(quán)利要求3所述的基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法,其特征在于,在所述的堆棧步驟中,Via、Record-Route、Route頭域字段與在會(huì)話初始化協(xié)議路由機(jī)制中的行為類似,具體為在首次路由發(fā)現(xiàn)過程中,會(huì)話初始化協(xié)議協(xié)議將所經(jīng)過的每個(gè)中間元素地址依次記錄到某類頭域字段中,添加到會(huì)話初始化協(xié)議消息中,此后的實(shí)際路由中,中間元素每收到一條會(huì)話初始化協(xié)議消息,檢查當(dāng)前會(huì)話初始化協(xié)議消息頭域字段中的第一個(gè)地址是否指向自身,若是則從會(huì)話初始化協(xié)議消息中刪除指向自身的地址記錄;把新消息轉(zhuǎn)發(fā)給當(dāng)前會(huì)話初始化協(xié)議消息頭域字段中第一個(gè)元素所指向的主機(jī)。
5.根據(jù)權(quán)利要求1所述的基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法,其特征在于,在所述的會(huì)話初始化協(xié)議節(jié)點(diǎn)定位步驟中,在堆棧中定位及為類節(jié)點(diǎn)在網(wǎng)絡(luò)地址轉(zhuǎn)換表中建立映射條目的實(shí)現(xiàn)過程如下堆棧查找步驟在堆棧中查找連續(xù)的兩個(gè)元素,其中一個(gè)元素記錄的IP地址信息屬于外網(wǎng),另一個(gè)元素記錄的IP地址信息則屬于內(nèi)網(wǎng),出現(xiàn)這樣特征的堆棧表示這兩個(gè)元素位于網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備附近;分析節(jié)點(diǎn)步驟根據(jù)會(huì)話初始化協(xié)議消息的類型、頭域字段的類型,分析這兩個(gè)元素是位于網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備兩側(cè)的節(jié)點(diǎn),還是位于同一網(wǎng)絡(luò),最接近網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備的兩個(gè)節(jié)點(diǎn),以及位于哪個(gè)網(wǎng)絡(luò);確定位置步驟根據(jù)分析節(jié)點(diǎn)步驟得出在該會(huì)話初始化協(xié)議報(bào)文的路由線路上,與網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備最接近、處于內(nèi)網(wǎng)與外網(wǎng)的兩個(gè)節(jié)點(diǎn),從而獲得堆棧中表示內(nèi)網(wǎng)與外網(wǎng)的分界線位置;地址替換步驟根據(jù)會(huì)話初始化協(xié)議后繼消息使用頭域路由的方式不同,確定這兩個(gè)節(jié)點(diǎn)中誰需要進(jìn)行內(nèi)網(wǎng)/外網(wǎng)地址替換,用需要替換的節(jié)點(diǎn)網(wǎng)絡(luò)地址查詢網(wǎng)絡(luò)地址轉(zhuǎn)換的內(nèi)網(wǎng)/外網(wǎng)地址映射表,若表中不存在相應(yīng)記錄,則需要為其創(chuàng)建一條新的映射條目,用該映射地址替換對(duì)應(yīng)會(huì)話初始化協(xié)議消息報(bào)文中的頭域字段;轉(zhuǎn)發(fā)步驟對(duì)所有類型頭域分析、修改,將新的會(huì)話初始化協(xié)議報(bào)文轉(zhuǎn)發(fā)給目的地址。
6.根據(jù)權(quán)利要求1所述的基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法,其特征在于在所述的建立映射條目結(jié)合步驟依據(jù)已建立的網(wǎng)絡(luò)地址轉(zhuǎn)換映射條目,執(zhí)行會(huì)話初始化協(xié)議節(jié)點(diǎn)定位步驟進(jìn)行內(nèi)網(wǎng)/外網(wǎng)IP地址替換,執(zhí)行地址替換步驟不再需要?jiǎng)?chuàng)建新的映射條目,直接查找網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備中的內(nèi)網(wǎng)/外網(wǎng)地址映射表,用表中的映射地址替換對(duì)應(yīng)會(huì)話初始化協(xié)議消息報(bào)文中的頭域字段。
7.根據(jù)權(quán)利要求2所述的基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法,其特征在于路由相關(guān)頭域字段解析步驟,Record-Route頭域的具體處理流程如下步驟S1網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備接收到會(huì)話初始化協(xié)議消息,搜索會(huì)話初始化協(xié)議消息獲得一條Record-Route頭域字段記錄;步驟S2網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備根據(jù)先前分析開始行(start-line),獲得的會(huì)話初始化協(xié)議消息的類型是請(qǐng)求還是響應(yīng)分別處理,請(qǐng)求轉(zhuǎn)入步驟S3,響應(yīng)轉(zhuǎn)入步驟S4;步驟S3根據(jù)分析開始行(start-line)可判斷會(huì)話初始化協(xié)議消息始于內(nèi)網(wǎng)/外網(wǎng),始于內(nèi)網(wǎng)轉(zhuǎn)入步驟S5,否則轉(zhuǎn)入步驟S14;步驟S4保存當(dāng)前Record-Route頭域字段記錄,轉(zhuǎn)入步驟S7。步驟S5若當(dāng)前獲得的Record-Route就是棧頂元素,也就是第一條Record-Route記錄,轉(zhuǎn)入步驟S6,否則轉(zhuǎn)入步驟S14;步驟S6用Record-Route的IP地址搜索網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備中的內(nèi)網(wǎng)/外網(wǎng)地址映射表,若不存在相應(yīng)映射條目,則創(chuàng)建新的映射條目,并替換對(duì)應(yīng)Record-Route頭域字段中的IP地址信息,否則直接用已有的映射條目替換,轉(zhuǎn)入步驟S14;步驟S7若當(dāng)前記錄的Record-Route中IP地址與本次消息的目的地址屬于同一網(wǎng)絡(luò),則轉(zhuǎn)入步驟S9,否則轉(zhuǎn)入步驟S8;步驟S8若在會(huì)話初始化協(xié)議消息中,當(dāng)前Record-Route頭域字段之后還有Record-Route尚未分析,則轉(zhuǎn)入步驟S1,繼續(xù)獲得下一條Record-Route記錄;步驟S9若本次響應(yīng)對(duì)應(yīng)的呼叫始于內(nèi)網(wǎng),轉(zhuǎn)入步驟S10分析,否則轉(zhuǎn)入步驟S11;步驟S10若當(dāng)前記錄的Record-Route的IP地址屬于內(nèi)網(wǎng),而且會(huì)話初始化協(xié)議消息中前一個(gè)Record-Route記錄屬于外網(wǎng)地址,轉(zhuǎn)入步驟S12,否則轉(zhuǎn)入步驟S13;步驟S11若當(dāng)前記錄的Record-Route的IP地址屬于外網(wǎng),而且會(huì)話初始化協(xié)議消息中前一個(gè)Record-Route記錄屬于內(nèi)網(wǎng)地址,轉(zhuǎn)入步驟S12,否則轉(zhuǎn)入步驟S13;步驟S12需要替換前一個(gè)Record-Route記錄中的IP地址,首先查詢網(wǎng)絡(luò)地址轉(zhuǎn)換中的內(nèi)網(wǎng)/外網(wǎng)映射表,若不存在映射條目,則創(chuàng)建新的映射條目,并替換對(duì)應(yīng)Record-Route頭域字段中的IP地址信息,否則直接用已有的映射條目替換,轉(zhuǎn)入步驟S13;步驟S13需要替換的是當(dāng)前的Record-Route記錄的IP地址,執(zhí)行替換操作同步驟S13,轉(zhuǎn)入步驟S14;步驟S14已經(jīng)完成會(huì)話初始化協(xié)議消息中IP地址的網(wǎng)絡(luò)地址轉(zhuǎn)換映射與替換,跳過剩余上未分析的Record-Route記錄,結(jié)束對(duì)Record-Route頭域的分析。
全文摘要
本發(fā)明公開一種基于路由的會(huì)話初始化協(xié)議透明穿越網(wǎng)絡(luò)地址轉(zhuǎn)換的方法。該方法將會(huì)話初始化協(xié)議(SIP)由機(jī)制和具有NAT的網(wǎng)絡(luò)拓?fù)洵h(huán)境結(jié)合,對(duì)接收SIP報(bào)文解析并與路由相關(guān)的頭域字段以堆棧方式構(gòu)建,該堆棧中存放SIP報(bào)文路由所經(jīng)過各個(gè)節(jié)點(diǎn)的IP地址;在堆棧中定位與網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)設(shè)備前后相鄰的SIP節(jié)點(diǎn),為首次出現(xiàn)的節(jié)點(diǎn)在NAT表中建立映射條目;當(dāng)屬于同一會(huì)話的SIP報(bào)文到達(dá)NAT設(shè)備時(shí),依據(jù)已建立的NAT映射條目對(duì)內(nèi)網(wǎng)/外網(wǎng)IP地址替換,完成SIP會(huì)話的成功建立。本發(fā)明使SIP應(yīng)用與服務(wù)程序無需任何修改即可應(yīng)用于各種NAT網(wǎng)絡(luò)拓?fù)?,同時(shí)可以有效提高NAT設(shè)備存儲(chǔ)利用率與分析處理效率。
文檔編號(hào)H04L12/56GK101060472SQ20061007564
公開日2007年10月24日 申請(qǐng)日期2006年4月17日 優(yōu)先權(quán)日2006年4月17日
發(fā)明者陳沫, 蔡嘉勇, 李丹 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所