專利名稱:用于多重同時(shí)連接的對(duì)稱網(wǎng)絡(luò)地址轉(zhuǎn)換器的穿越的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的實(shí)施例涉及計(jì)算機(jī)網(wǎng)絡(luò),以及更具體涉及在計(jì)算機(jī)網(wǎng)絡(luò)上跨對(duì)稱網(wǎng)絡(luò)地址轉(zhuǎn)換器的端到端通信。
背景技術(shù):
帶有NAT (網(wǎng)絡(luò)地址轉(zhuǎn)換,Network Address Translation)特征的路由器的使用能夠干擾從外部網(wǎng)絡(luò)接入內(nèi)部網(wǎng)絡(luò)。這對(duì)于諸如在因特網(wǎng)上的語音通信(稱為VoIP)和/或在線游戲等等之類的端到端應(yīng)用而言,是個(gè)特別問題。NAT是因特網(wǎng)標(biāo)準(zhǔn),其使得局域網(wǎng)(LAN)對(duì)內(nèi)部流量使用一組私有IP地址而對(duì)外部流量使用第二組全局IP地址。具有NAT能力的節(jié)點(diǎn)常常被稱為“NAT盒”。NAT (字面上)在這兩個(gè)網(wǎng)絡(luò)之間轉(zhuǎn)換網(wǎng)絡(luò)(IP)地址。網(wǎng)絡(luò)地址端口轉(zhuǎn)換(NetworkAddress Port Translation, NAPT)不僅轉(zhuǎn)換IP地址而且還轉(zhuǎn)換傳輸層協(xié)議的端口號(hào)。雖然NAT/NAPT具有其良好屬性,但也存在顯著的副作用。如果轉(zhuǎn)換是動(dòng)態(tài)執(zhí)行的,那么外部網(wǎng)絡(luò)中的節(jié)點(diǎn)就沒有辦法提前知道NAT上的IP地址(和端口號(hào))以到達(dá)內(nèi)部網(wǎng)絡(luò)中的節(jié)點(diǎn)。不幸的是,這是目前市場(chǎng)上所配置的住宅路由器和S0H0路由器中的NAT的最普遍的行為。NAT一般可以分類為完全錐形(Full Cone),受限錐形(Restricted Cone),端口受限錐形(Port Restricted Cone)或?qū)ΨQ。完全錐形NAT將來自相同的內(nèi)部IP地址和端口的所有請(qǐng)求都映射到相同的外部IP地址和端口。此外,任何外部主機(jī)可以通過把分組發(fā)送到所映射的外部地址,來把分組通過完全錐形NAT發(fā)送到內(nèi)部主機(jī)。在受限錐形NAT中,所有來自相同的內(nèi)部IP地址和端口的請(qǐng)求被映射到相同的外部IP地址和端口。不像完全錐形NAT,具有IP地址X的外部主機(jī)只有當(dāng)內(nèi)部主機(jī)先前已經(jīng)向IP地址X發(fā)送了分組時(shí)才能夠向該內(nèi)部主機(jī)發(fā)送分組。端口受限錐形NAT類似于受限錐形NAT,但是該限制還包括端口號(hào)。具體地,外部主機(jī)只有當(dāng)內(nèi)部主機(jī)先前已經(jīng)向IP地址X和端口 P發(fā)送了分組時(shí)才能夠向該內(nèi)部主機(jī)發(fā)送具有源IP地址X和源端口 P的分組。在對(duì)稱NAT中來自相同的內(nèi)部IP地址和端口,到特定目的地IP地址和端口的所有請(qǐng)求被映射到相同的外部IP地址和端口。如果該相同的主機(jī)發(fā)送帶有相同源地址和端口的分組但是到不同的目的地,則使用不同的映射。此外,僅有接收分組的外部主機(jī)才能夠向回發(fā)送UDP分組到該內(nèi)部主機(jī)。對(duì)稱NAT往往是要穿越的最難以解決的NAT類型。一種用于對(duì)稱NAT穿越的技術(shù)被稱作“端口預(yù)測(cè)”,其在美國(guó)專利申請(qǐng)公開20070076729A1中予以詳細(xì)描述,在此將其引入以供參考。在此對(duì)稱NAT穿越類型中,第一節(jié)點(diǎn)位于對(duì)稱的第一NAT的后面和第二節(jié)點(diǎn)位于第二 NAT的后面。第一節(jié)點(diǎn)在第一 NAT上構(gòu)建預(yù)測(cè)的傳輸?shù)刂妨斜聿寻擃A(yù)測(cè)的傳輸?shù)刂妨斜淼南l(fā)送給第二節(jié)點(diǎn)。利用第二節(jié)點(diǎn)使用該預(yù)測(cè)的傳輸?shù)刂穲?zhí)行連接性檢查。經(jīng)估計(jì),18%的NAT是對(duì)稱的,而且在不進(jìn)行端口預(yù)測(cè)的情況下預(yù)計(jì)有10%以上的連接失敗率。一些涉及NAT穿越的應(yīng)用可能需要高達(dá)64個(gè)同時(shí)連接。對(duì)于這樣的應(yīng)用而言,不清楚端口預(yù)測(cè)是否能夠可靠地工作。它處于本發(fā)明的實(shí)施例所出現(xiàn)的上下文之內(nèi)。
通過考慮結(jié)合附圖的下面詳細(xì)描述,會(huì)很容易理解本發(fā)明的教導(dǎo),其中 圖1A-1B是圖不使用端口預(yù)測(cè)的NAT穿越的消息序列圖。圖2是圖示依據(jù)本發(fā)明的實(shí)施例的修改的端口預(yù)測(cè)的時(shí)序圖。圖3是圖示依據(jù)本發(fā)明的實(shí)施例的用于在兩個(gè)節(jié)點(diǎn)之間的NAT穿越的系統(tǒng)的示意圖。圖4是圖示依據(jù)本發(fā)明的實(shí)施例的在兩個(gè)節(jié)點(diǎn)之間的NAT穿越的方法的流程圖。圖5是三個(gè)節(jié)點(diǎn)在網(wǎng)絡(luò)上通信的示意圖,圖示了同時(shí)預(yù)測(cè)的問題。圖6是依據(jù)本發(fā)明的實(shí)施例的被配置成執(zhí)行端口預(yù)測(cè)的節(jié)點(diǎn)的示意圖。
具體實(shí)施例方式雖然為了舉例說明的目的,接下來的詳細(xì)描述包括許多具體細(xì)節(jié),但是任何本領(lǐng)域技術(shù)人員將理解對(duì)下述細(xì)節(jié)的許多改進(jìn)和變化都處于本發(fā)明的范圍之內(nèi)。因此,在不對(duì)所要求保護(hù)的發(fā)明的普遍性有任何損失的情況下以及在不對(duì)所要求保護(hù)的發(fā)明施加限制的情況下,闡述下面描述的本發(fā)明的實(shí)施例的示例。II .概要
端口預(yù)測(cè)技術(shù)用于穿越對(duì)稱NAT (網(wǎng)絡(luò)地址轉(zhuǎn)換器)。如果對(duì)稱NAT后面的節(jié)點(diǎn)每次正試著連接一些遠(yuǎn)程節(jié)點(diǎn),則預(yù)測(cè)可能失敗的概率較高。本發(fā)明的實(shí)施例通過使新的請(qǐng)求掛起直到先前的請(qǐng)求已經(jīng)到達(dá)連接性檢查階段來避免由同時(shí)端口預(yù)測(cè)的情況所引起的連接失敗。這允許節(jié)點(diǎn)通過對(duì)稱NAT的多重同時(shí)連接而不導(dǎo)致關(guān)于端口預(yù)測(cè)的問題。III.術(shù)語
如這里所使用的,下面術(shù)語具有在下表I中所示出的含義。表I
Natted (NAT后面)節(jié)點(diǎn)位于NAT后面的節(jié)點(diǎn)。
客戶端-服務(wù)器所有客戶端連接到
中央服務(wù)器的網(wǎng)絡(luò)架構(gòu)模型。(例如,Web (HTTP)服務(wù)等)
端到端不依靠中央服
務(wù)器的網(wǎng)絡(luò)架構(gòu)。每個(gè)客戶端(端點(diǎn))直接連接到其它端點(diǎn)。(例如,DHT、VoIP、文件共享系統(tǒng)等)
傳輸?shù)刂芬唤MIP地址和端口號(hào)。
網(wǎng)絡(luò)語音電話業(yè)務(wù)(VoIP)使得在因特網(wǎng)或任何其它IP
網(wǎng)絡(luò)上會(huì)話能夠路由的技術(shù)。首字母縮略詞
如這里所使用的,下面首字母縮略詞具有在下表II中所示出的含義。表II
DHT 分布式哈希表(例如,Chord)
HTTP 超文本傳輸協(xié)議 IETF 因特網(wǎng)工程任務(wù)組 LAN 局域網(wǎng)
NAT網(wǎng)絡(luò)地址轉(zhuǎn)換器(RFC 3022)
NAPT 網(wǎng)絡(luò)地址端口轉(zhuǎn)換(RFC 3022)
SIP會(huì)話發(fā)起協(xié)議(RFC 3261)
SSP會(huì)話建立協(xié)議
SOHO 小型辦公室和家庭辦公室
STUN 用于NAT的會(huì)話穿越的公用程序(先前被稱為“M)P通過NAT的簡(jiǎn)單穿越”) TURN 使用中繼NAT的穿越 VoIP網(wǎng)絡(luò)語音電話業(yè)務(wù)。IV.問題分析
端口預(yù)測(cè)失敗的基本問題可以關(guān)于圖IA和圖IB來理解。圖IA圖示了當(dāng)?shù)谝还?jié)點(diǎn)2位于對(duì)稱NAT (未示出)后面時(shí)的NAT穿越的基本流。為了發(fā)起與第二節(jié)點(diǎn)4的通信,第一節(jié)點(diǎn)2發(fā)送綁定請(qǐng)求10到STUN服務(wù)器6。在響應(yīng)中,STUN服務(wù)器6向回發(fā)送來自對(duì)稱NAT的地址信息12。使用地址信息12和端口預(yù)測(cè),第一節(jié)點(diǎn)2能夠構(gòu)建包括端口號(hào)的候選地址列表。第一節(jié)點(diǎn)2經(jīng)由信令服務(wù)器8發(fā)送帶有該列表的連接請(qǐng)求14給節(jié)點(diǎn)4。第二節(jié)點(diǎn)4也可以發(fā)送綁定請(qǐng)求16到STUN服務(wù)器6以及在響應(yīng)中接收地址信息18。使用地址信息18,第二節(jié)點(diǎn)4可以生成其自己的候選列表和在臨時(shí)響應(yīng)20中發(fā)送該列表給第一節(jié)點(diǎn)2。第一和第二節(jié)點(diǎn)于是可以通過發(fā)送檢查分組22、24來執(zhí)行連接性檢查。注意,對(duì)于第一節(jié)點(diǎn)2而言,臨界時(shí)間窗
A1存在于綁定請(qǐng)求10的發(fā)送和檢查分組中的第一個(gè)檢查分組22的發(fā)送之間。在此時(shí)間期間由第一節(jié)點(diǎn)2執(zhí)行的端口預(yù)測(cè)是基于由STUN服務(wù)器4響應(yīng)于綁定請(qǐng)求10而發(fā)送的地址信息12。如果該地址信息在此臨界時(shí)間期間改變,則端口預(yù)測(cè)可能就失敗了。如果第一節(jié)點(diǎn)2發(fā)起另一個(gè)與第三節(jié)點(diǎn)(未示出)通信的綁定請(qǐng)求,那么該地址信息可能改變。對(duì)于
第二節(jié)點(diǎn)4而言,類似的臨界時(shí)間窗存在于來自第一節(jié)點(diǎn)2的連接請(qǐng)求14的接收和第一檢查分組24的發(fā)送之間存在??偟膩碚f,當(dāng)發(fā)送了第一組連接性檢查分組時(shí),對(duì)于NAT穿越的臨界時(shí)間窗終止。參照附圖1A,當(dāng)發(fā)送了第一組檢查分組22時(shí),對(duì)于第一節(jié)點(diǎn)2的臨界時(shí)間窗Tci終止。當(dāng)發(fā)
送了第一組檢查分組24時(shí),對(duì)于第二節(jié)點(diǎn)4的臨界時(shí)間窗A2終止。關(guān)于圖IA所描述的對(duì)稱NAT穿越對(duì)于在一個(gè)節(jié)點(diǎn)和另一個(gè)節(jié)點(diǎn)之間的通信通常具有良好效果。如果節(jié)點(diǎn)試圖與不同的節(jié)點(diǎn)進(jìn)行多重同時(shí)連接,則可能會(huì)出現(xiàn)意料之外的問題。例如,在多用戶在線游戲中,這樣的情況可能出現(xiàn)。圖IB圖示了運(yùn)行在對(duì)稱NAT后面的節(jié)點(diǎn)上的單個(gè)應(yīng)用30的多重通信會(huì)話的問題。作為示例,應(yīng)用30可以發(fā)起試圖與節(jié)點(diǎn)A連接的第一會(huì)話32。第一會(huì)話32協(xié)商由綁定請(qǐng)求開始的連接和接下來的臨時(shí)響應(yīng)的
接收開始連接性檢查。然而,假設(shè)在臨界時(shí)間窗盡期間應(yīng)用30發(fā)起了試圖與節(jié)點(diǎn)B通信的
第二會(huì)話34。作為對(duì)于第二會(huì)話34的協(xié)商的一部分,新的NAT綁定請(qǐng)求將被發(fā)送到STUN服務(wù)器。這改變了 NAT上的端口分配。不幸的是,第一會(huì)話32依賴于針對(duì)其與節(jié)點(diǎn)A通信的端口預(yù)測(cè)的先前端口分配。結(jié)果,對(duì)于第一會(huì)話32的端口預(yù)測(cè)可能失敗以及在某預(yù)定的超時(shí)時(shí)間段已經(jīng)過去了之后第一會(huì)話將超時(shí)。雖然現(xiàn)有的端口預(yù)測(cè)模式易于受到顯而易見的端口預(yù)測(cè)失敗,但是如上描述的該問題的特定本質(zhì),通常未被識(shí)別出來。IV.解決方案
本發(fā)明的實(shí)施例在每次建立多個(gè)連接時(shí)通過在NAT穿越的協(xié)商階段期間使“臨界窗”串行化,來克服多重端口預(yù)測(cè)的問題。注意,諸如多用戶在線游戲應(yīng)用之類的某些應(yīng)用能夠支持多個(gè)端到端連接的建立。依據(jù)本發(fā)明的實(shí)施例,臨界時(shí)間窗的串行化可以被實(shí)現(xiàn)在試圖在網(wǎng)絡(luò)上發(fā)起與兩個(gè)或更多其它節(jié)點(diǎn)的端到端連接的、對(duì)稱NAT后面的節(jié)點(diǎn)上。特別地,第一節(jié)點(diǎn)可以執(zhí)行針對(duì)由第一節(jié)點(diǎn)發(fā)起的與第二節(jié)點(diǎn)的通信會(huì)話的端口預(yù)測(cè),和在對(duì)稱NAT上構(gòu)建預(yù)測(cè)的傳輸?shù)刂妨斜?,以及接著發(fā)送包含該預(yù)測(cè)的傳輸?shù)刂妨斜淼腃ONNECTION REQUEST (連接請(qǐng)求)消息給第二節(jié)點(diǎn)。在接收到對(duì)該CONNECTION REQUEST消息的臨時(shí)響應(yīng)時(shí),第一節(jié)點(diǎn)就可以使用該預(yù)測(cè)的傳輸?shù)刂罚缤ㄟ^發(fā)送測(cè)試分組來執(zhí)行第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的連接性的檢查。,第一節(jié)點(diǎn)可以通過延遲針對(duì)第一節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的通信的端口預(yù)測(cè)直到該連接性檢查已經(jīng)開始之后來使臨界時(shí)間窗串行化。在類似的方式中,臨界時(shí)間窗的串行化可以被實(shí)現(xiàn)在對(duì)稱NAT后面的節(jié)點(diǎn)上,其在與一個(gè)或更多其它節(jié)點(diǎn)協(xié)商N(yùn)AT穿越時(shí)接收CONNECTION REQUEST以在網(wǎng)絡(luò)上發(fā)起端到端連接。當(dāng)這樣的節(jié)點(diǎn)從另一節(jié)點(diǎn)接收CONNECTION REQUEST消息時(shí),它可以執(zhí)行端口預(yù)測(cè)并針對(duì)該CONNECTION REQUEST消息發(fā)送帶有預(yù)測(cè)的地址列表的臨時(shí)響應(yīng)以及執(zhí)行連接性的檢查。對(duì)于與另外節(jié)點(diǎn)的通信的端口預(yù)測(cè)可以被延遲直到該連接性檢查已經(jīng)開始之后。具體地,如圖2的時(shí)序圖所示,第一節(jié)點(diǎn)2可以同時(shí)發(fā)起或接收N個(gè)連接請(qǐng)求巧
,Ri ,…Rn。可以如關(guān)于圖IA所描述的那樣處理第一請(qǐng)求馬。然而后續(xù)請(qǐng)求^ ,…Rn以它們被生成或接收的次序的串行方式來排隊(duì)。具體地,后續(xù)請(qǐng)求中的每一個(gè)在開始端口預(yù)測(cè)之前等待,直到針對(duì)每個(gè)先前請(qǐng)求的臨界時(shí)間窗A已經(jīng)過去。如上所論述的,如果連接不能在超時(shí)時(shí)間段%之內(nèi)建立,則該連接可能失敗。因此,最好超時(shí)時(shí)間段?足夠長(zhǎng)以使所有N個(gè)連接都能夠被建立。作為示例,假設(shè)對(duì)于每個(gè)連接的所有臨界時(shí)間窗A是一些低于連接的某最大數(shù)的,超時(shí)時(shí)間段巧應(yīng)該低于
NltuJe + Ttfiwn ,其中Tconn是用于連接性檢查的時(shí)間和IVmm是可能同時(shí)連接的某最大數(shù)。如圖3所示,第一節(jié)點(diǎn)102駐留于經(jīng)由第一 NAT 103在物理上與公共網(wǎng)絡(luò)PNW(例如,因特網(wǎng))連接的第一私有網(wǎng)絡(luò)NWl中。類似地,第二節(jié)點(diǎn)104駐留于第二私有網(wǎng)絡(luò)NW2中且能夠經(jīng)由第二 NAT 105接入相同的公共網(wǎng)絡(luò)。私有網(wǎng)絡(luò)NWl和NW2均可以包括除了第一和第二節(jié)點(diǎn)102、104以及第一和第二 NAT 103、105之外的其它節(jié)點(diǎn)和其它NAT。其它私有網(wǎng)絡(luò)也可以被連接到公共網(wǎng)絡(luò)PNW。公共網(wǎng)絡(luò)PNW包括SIP代理服務(wù)器100,和STUN服務(wù)器101。第一節(jié)點(diǎn)102具有僅在第一 NAT 103后面的第一私有網(wǎng)絡(luò)NWl中有效的私有IP地址。第一節(jié)點(diǎn)102具有全局唯一且可路由的IP地址,以及第一 NAT 103在公共網(wǎng)絡(luò)和私有網(wǎng)絡(luò)之間執(zhí)行IP地址和端口轉(zhuǎn)換。類似地,第二節(jié)點(diǎn)104具有僅在第二 NAT 105后面的第二私有網(wǎng)絡(luò)NW2中有效的私有IP地址。第二節(jié)點(diǎn)104具有全局唯一且可路由的IP地址,以及第二 NAT 105在公共網(wǎng)絡(luò)和私有網(wǎng)絡(luò)之間執(zhí)行IP地址和端口轉(zhuǎn)換。節(jié)點(diǎn)102、104例如可以是服務(wù)器主機(jī),諸如音頻/視頻(A/V)聊天,多媒體流設(shè)備,文件共享節(jié)點(diǎn),在線游戲模塊等等。每個(gè)節(jié)點(diǎn)102、104可以是通用計(jì)算機(jī),當(dāng)運(yùn)行諸如用于實(shí)現(xiàn)圖6的方法步驟的指令之類的指令時(shí)變成特殊用途的計(jì)算機(jī)。作為示例,節(jié)點(diǎn)102和104可以是SIP用戶代理并能夠通過SIP代理服務(wù)器100彼此發(fā)送和接收消息。節(jié)點(diǎn)102和104也可以是STUN客戶端。因此,第一節(jié)點(diǎn)102能夠通過使用STUN協(xié)議與STUN服務(wù)器101通信,來發(fā)現(xiàn)在第一節(jié)點(diǎn)102和STUN服務(wù)器101之間的路徑中的NAT的存在及類型。 第二節(jié)點(diǎn)104類似地能夠發(fā)現(xiàn)第二節(jié)點(diǎn)104和STUN服務(wù)器101之間的NAT的存在及類型。通過同時(shí)參照?qǐng)D3的框圖和圖4的流程圖,可以理解依據(jù)本發(fā)明的實(shí)施例的NAT穿越的方法。首先,每個(gè)節(jié)點(diǎn)102、104可以使用STUN協(xié)議執(zhí)行NAT發(fā)現(xiàn),如在圖4的202、204處所指示的。在所圖示的示例中,第一節(jié)點(diǎn)102發(fā)現(xiàn)它在第一 NAT 103后面且第一 NAT103的類型是對(duì)稱的。第二節(jié)點(diǎn)104發(fā)現(xiàn)它還在第二 NAT 105后面而且第二 NAT 105的類型例如是端口受限錐形。于是,兩個(gè)節(jié)點(diǎn)102、104可以把它們自己登記到SIP代理服務(wù)器100中以加入網(wǎng)絡(luò),如在206、208處所指示的。這建立了到SIP代理服務(wù)器100的第一和第二信令路徑116、117。一旦建立,SIP代理服務(wù)器100就能夠分別通過第一和第二信令路徑116,117轉(zhuǎn)發(fā)消息到第一和第二節(jié)點(diǎn)102、104。作為示例,第一節(jié)點(diǎn)102可能希望建立到第二節(jié)點(diǎn)104的端到端連接。第一節(jié)點(diǎn)102為新的端到端會(huì)話分配本地端口 107。然后第一節(jié)點(diǎn)102通過從本地端口 107發(fā)送綁定請(qǐng)求118到STUN服務(wù)器101來獲得外部端口 112。綁定請(qǐng)求的發(fā)送開始了對(duì)于第一節(jié)點(diǎn)102的臨界時(shí)間窗。由于第一節(jié)點(diǎn)102知道第一 NAT 103是存在的且是對(duì)稱類型的,它可以執(zhí)行如在210處所指示的端口預(yù)測(cè)和構(gòu)建傳輸?shù)刂?07、112、113和114的列表。該列表可以被放于新的CONNECT REQUEST消息中。在優(yōu)選實(shí)施例中,第一節(jié)點(diǎn)102可以不發(fā)送關(guān)于第一 NAT 103的信息。此外,第一節(jié)點(diǎn)102,而不是第二節(jié)點(diǎn)104,可以執(zhí)行端口預(yù)測(cè)。另外,發(fā)送包含傳輸?shù)刂返腃ONNECT REQUEST消息與現(xiàn)有的ICE方法很好的兼容。為了防止后續(xù)的與另一節(jié)點(diǎn)連接的綁定請(qǐng)求干擾端口預(yù)測(cè),第一節(jié)點(diǎn)102在發(fā)送該綁定請(qǐng)求118時(shí)可以開始等待時(shí)間段,如在209處所指示的。在等待時(shí)間段期間,用于與其它節(jié)點(diǎn)通信的新的綁定請(qǐng)求可以被臨時(shí)掛起并以它們?cè)雌鸬拇涡蚺抨?duì)。在步驟212中,第一節(jié)點(diǎn)102通過本地端口 106和已經(jīng)建立的路徑116發(fā)送帶有該傳輸?shù)刂妨斜淼腃ONNECT REQUEST消息給SIP代理服務(wù)器100。SIP代理服務(wù)器100在消息中發(fā)現(xiàn)最終目的地是第二節(jié)點(diǎn)104,并通過已經(jīng)建立的路徑117和端口 111轉(zhuǎn)發(fā)該CONNECTREQUEST消息,以及最后該消息到達(dá)本地端口 108上的第二節(jié)點(diǎn)104。在接收到該CONNECTREQUEST時(shí),第二節(jié)點(diǎn)104可以為未來的端到端會(huì)話分配本地端口 109,以及然后第二節(jié)點(diǎn)104通過從本地端口 109發(fā)送綁定消息119到STUN服務(wù)器101可以獲得外部端口 115。為了防止后續(xù)的與另一節(jié)點(diǎn)連接的綁定請(qǐng)求干擾端口預(yù)測(cè),第二節(jié)點(diǎn)104在接收該CONNECTREQUEST消息時(shí)可以開始等待時(shí)間段,如在211處所指示的。在等待時(shí)間段期間,第二節(jié)點(diǎn)104可以把用于與其它節(jié)點(diǎn)通信的新的綁定請(qǐng)求臨時(shí)掛起并以它們?cè)雌鸬拇涡驅(qū)λ鼈冞M(jìn)行排隊(duì)。具體地,節(jié)點(diǎn)I 102可以把來自節(jié)點(diǎn)X 125的請(qǐng)求217以接收該請(qǐng)求的次序放到隊(duì)列中。節(jié)點(diǎn)2 104可以類似地對(duì)來自節(jié)點(diǎn)Y 127的請(qǐng)求219進(jìn)行排隊(duì)。由于第二節(jié)點(diǎn)104知道第二 NAT 105不是對(duì)稱的,在214,它把本地端口 109和外部端口 115放到新的臨時(shí)響應(yīng)消息中并經(jīng)由SIP代理服務(wù)器100和第一和第二信令路徑117、116把它向回發(fā)送給第一節(jié)點(diǎn)102。該臨時(shí)響應(yīng)的傳輸終止了傳輸交換階段并開始了連接性檢查階段。在這個(gè)階段,第一和第二節(jié)點(diǎn)102、104可以安全發(fā)起用于與其它節(jié)點(diǎn)通信的新的綁定請(qǐng)求。因此,針對(duì)第一和第二節(jié)點(diǎn)102、104的等待時(shí)間段可以結(jié)束,如分別在213,215處所指示。
為了檢查連接性,在步驟216、218,節(jié)點(diǎn)102和104 二者可以開始從它們的本地端口 107、109發(fā)送STUN分組到從其它節(jié)點(diǎn)獲得的傳輸?shù)刂芬詸z查連接性。當(dāng)?shù)谝还?jié)點(diǎn)102發(fā)送STUN分組120時(shí),第一 NAT 103分配新的外部端口 113,以及然后分組120到達(dá)第二NAT 105上的外部端口 115。第一少數(shù)分組可能在外部端口 115處被丟棄,這是因?yàn)榈诙﨨AT 105是端口受限錐形NAT和第二節(jié)點(diǎn)104可能還尚未從本地端口 109發(fā)送分組到第一NAT 103上的本地端口 113。第二節(jié)點(diǎn)104也發(fā)送STUN分組121、122、123到所獲得的傳輸?shù)刂?12、113和114。到達(dá)端口 112處的分組121被丟棄,這是因?yàn)榈谝?NAT 103是對(duì)稱NAT和端口 112被專門分配給到STUN服務(wù)器101的會(huì)話。到達(dá)114處的STUN分組123也被丟棄,這是因?yàn)椴淮嬖谟傻谝?NAT 103分配的這樣的外部端口。到達(dá)113處的STUN分組122被第一 NAT 103轉(zhuǎn)發(fā)到本地端口 107。第一節(jié)點(diǎn)102于是發(fā)送響應(yīng)到第二節(jié)點(diǎn)104以及第二節(jié)點(diǎn)104在接收到響應(yīng)時(shí)發(fā)現(xiàn)它具有到端口 113的連接性。從第一節(jié)點(diǎn)102上的本地端口 107發(fā)送到第二 NAT 105上的外部端口 115的STUN分組最終在第二節(jié)點(diǎn)104的本地端口 109處被接收。第二節(jié)點(diǎn)104于是向回發(fā)送響應(yīng)到第一節(jié)點(diǎn)102。在接收到響應(yīng)消息時(shí),在步驟220,第一節(jié)點(diǎn)102經(jīng)由SIP代理服務(wù)器100發(fā)送UPDATE (更新)消息給第二節(jié)點(diǎn)104以告訴第二節(jié)點(diǎn)104 :第一節(jié)點(diǎn)102找到了到外部端口115的連接性。這觸發(fā)了第二節(jié)點(diǎn)104在步驟222發(fā)送最后的響應(yīng)消息給第一節(jié)點(diǎn)102來完成連接建立過程。代替將NAT類型放在消息中以及使用第二節(jié)點(diǎn)104進(jìn)行預(yù)測(cè)的是,由第一節(jié)點(diǎn)102進(jìn)行預(yù)測(cè)和把預(yù)測(cè)的外部端口 113、114連同從STUN服務(wù)器101獲取的外部端口 112 —起放到新的CONNECT REQUEST消息中。因此,第一節(jié)點(diǎn)102不把關(guān)于第一 NAT 103的信息提供給第二節(jié)點(diǎn)104。這樣的ICE方法的使用完全消除了現(xiàn)有技術(shù)(US2004/0139228)中所進(jìn)行的“突發(fā)(break-out) ”分組的復(fù)雜的NAT組合邏輯。相反,本發(fā)明的實(shí)施例能夠通過執(zhí)行基本上等價(jià)于“突發(fā)分組”的連接性檢查來達(dá)到相同結(jié)果。因此,本發(fā)明的實(shí)施例允許已經(jīng)使用ICE方法的系統(tǒng)通過簡(jiǎn)單的把預(yù)測(cè)的傳輸?shù)刂芳拥竭B接性檢查列表來增加對(duì)稱NAT穿越能力。如上所描述的,第一節(jié)點(diǎn)102,S卩,試圖發(fā)起與第二節(jié)點(diǎn)104通信的節(jié)點(diǎn),執(zhí)行端口預(yù)測(cè)和把預(yù)測(cè)的端口放在CONNECT REQUEST消息中。存在許多執(zhí)行端口預(yù)測(cè)的技術(shù)。例如,運(yùn)用下面的測(cè)試?yán)枚丝诜峙湟?guī)則發(fā)現(xiàn)過程可以實(shí)現(xiàn)端口預(yù)測(cè)。第一節(jié)點(diǎn)102在不在CHANGE-REQUEST (改變一請(qǐng)求)屬性中設(shè)置任何標(biāo)志的情況下以及在沒有RESPONSE-ADDRESS (響應(yīng)一地址)屬性的情況下,發(fā)送STUN綁定請(qǐng)求給STUN服務(wù)器101。這促使STUN服務(wù)器101把響應(yīng)發(fā)回該請(qǐng)求所來自的地址和端口。這個(gè)測(cè)試被應(yīng)用于IP地址和端口的不同結(jié)合以便領(lǐng)會(huì)NAT 103的端口分配特性。STUN服務(wù)器101使用在下表III
中所示出的兩個(gè)不同的IP地址,Ca和Da以及兩個(gè)不同的端口 Cf和D$。表III
權(quán)利要求
1.一種用于網(wǎng)絡(luò)上位于第一對(duì)稱網(wǎng)絡(luò)地址轉(zhuǎn)換器(NAT)后面的第一節(jié)點(diǎn)和兩個(gè)或更多其它節(jié)點(diǎn)之間的端到端連接的方法,所述方法包括 a)從第一節(jié)點(diǎn)向第二節(jié)點(diǎn)發(fā)送包含預(yù)測(cè)的傳輸?shù)刂返牧斜淼倪B接請(qǐng)求消息; b)在第一節(jié)點(diǎn)處接收對(duì)所述連接請(qǐng)求消息的臨時(shí)響應(yīng); c)使用預(yù)測(cè)的傳輸?shù)刂穪韴?zhí)行第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的連接性的檢查;以及 d)延遲用于第一節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的通信的端口預(yù)測(cè),直到c)已經(jīng)開始之后。
2.如權(quán)利要求I所述的方法,還包括 e)在d)之后,執(zhí)行用于第一節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的通信的端口預(yù)測(cè),其中所述第一節(jié)點(diǎn)構(gòu)建在所述第一 NAT上的預(yù)測(cè)的傳輸?shù)刂返牧斜恚? f)從所述第一節(jié)點(diǎn)向第三節(jié)點(diǎn)發(fā)送包含預(yù)測(cè)的傳輸?shù)刂返乃隽斜淼倪B接請(qǐng)求消息; g)使用所述預(yù)測(cè)的傳輸?shù)刂穲?zhí)行所述第一節(jié)點(diǎn)和所述第三節(jié)點(diǎn)之間的連接性的檢查。
3.如權(quán)利要求2所述的方法,還包括h)延遲用于所述第一節(jié)點(diǎn)和第四節(jié)點(diǎn)之間的通信的端口預(yù)測(cè),直到g)之后。
4.如權(quán)利要求I所述的方法,其中,執(zhí)行連接性檢查包括從所述第二節(jié)點(diǎn)發(fā)送用于NAT的會(huì)話穿越公用程序(STUN)分組到由所述第一節(jié)點(diǎn)在所述連接請(qǐng)求消息中提供的所述一個(gè)或多個(gè)傳輸?shù)刂贰?br>
5.如權(quán)利要求4所述的方法,其中,執(zhí)行所述連接性檢查還包括從所述第一節(jié)點(diǎn)向所述第二節(jié)點(diǎn)發(fā)送STUN分組響應(yīng),其中所述STUN分組響應(yīng)包括在所述第一 NAT上的外部端口的傳輸?shù)刂?,從所述第二?jié)點(diǎn)發(fā)送的STUN分組之一通過所述第一 NAT到達(dá)所述第一節(jié)點(diǎn)。
6.如權(quán)利要求I所述的方法,還包括響應(yīng)于來自第二節(jié)點(diǎn)的、指示第二節(jié)點(diǎn)針對(duì)連接到另一節(jié)點(diǎn)而在排隊(duì)等待的消息而在a)之后但在b)之前等待時(shí)間段Tw ; 取消第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的通信會(huì)話;以及 重復(fù) a)、b)、c)、d), 其中時(shí)間量Tw大于或等于零且小于第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的連接失敗的超時(shí)。
7.如權(quán)利要求I所述的方法,其中c)包括使用來自所述預(yù)測(cè)的傳輸?shù)刂返牧斜淼膫鬏數(shù)刂窂乃龅谝还?jié)點(diǎn)向所述第二節(jié)點(diǎn)發(fā)送一個(gè)或多個(gè)測(cè)試分組。
8.如權(quán)利要求7所述的方法,其中d)包括延遲用于所述第一節(jié)點(diǎn)和所述第三節(jié)點(diǎn)之間的通信的端口預(yù)測(cè),直到所述一個(gè)或多個(gè)測(cè)試分組中的第一個(gè)已經(jīng)被發(fā)送之后。
9.一種節(jié)點(diǎn),包括 處理器; 存儲(chǔ)器; 網(wǎng)絡(luò)接口 ;以及 包含在所述存儲(chǔ)器中的指令,所述指令被配置用于在所述處理器上執(zhí)行,所述指令包括在被執(zhí)行時(shí)使得所述節(jié)點(diǎn)執(zhí)行以下處理的一組指令 i)從所述節(jié)點(diǎn)向第二節(jié)點(diǎn)發(fā)送包含預(yù)測(cè)的傳輸?shù)刂返牧斜淼倪B接請(qǐng)求消息; ii)在所述節(jié)點(diǎn)處接收對(duì)所述連接請(qǐng)求消息的臨時(shí)響應(yīng); iii)使用所述預(yù)測(cè)的傳輸?shù)刂穪韴?zhí)行第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的連接性的檢查;以及iv)延遲用于所述節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的通信的端口預(yù)測(cè),直到iii)已經(jīng)開始之后。
10.一種用于在網(wǎng)絡(luò)上位于第一對(duì)稱網(wǎng)絡(luò)地址轉(zhuǎn)換器(NAT)后面的第一節(jié)點(diǎn)和兩個(gè)或更多其它節(jié)點(diǎn)之間的端到端連接的方法,該方法包括 a)在第一節(jié)點(diǎn)處接收對(duì)發(fā)送到第二節(jié)點(diǎn)的連接請(qǐng)求消息的臨時(shí)響應(yīng),其中,所述連接請(qǐng)求消息包含預(yù)測(cè)的傳輸?shù)刂返牧斜恚? b)使用所述預(yù)測(cè)的傳輸?shù)刂穲?zhí)行第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的連接性的檢查;以及 c)延遲用于第一節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的通信的端口預(yù)測(cè),直到第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的連接性的檢查已經(jīng)開始之后。
11.如權(quán)利要求10所述的方法,還包括 d)在c)之后,執(zhí)行用于第一節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的通信的端口預(yù)測(cè),其中第一節(jié)點(diǎn)構(gòu)建在第一對(duì)稱NAT上的預(yù)測(cè)的傳輸?shù)刂返牧斜恚? e)從第一節(jié)點(diǎn)向第三節(jié)點(diǎn)發(fā)送包含預(yù)測(cè)的傳輸?shù)刂返牧斜淼倪B接請(qǐng)求消息; f)使用所述預(yù)測(cè)的傳輸?shù)刂穲?zhí)行所述第一節(jié)點(diǎn)和所述第三節(jié)點(diǎn)之間的連接性的檢查。
12.如權(quán)利要求11所述的方法,還包括 g)延遲用于第一節(jié)點(diǎn)和第四節(jié)點(diǎn)之間的通信的端口預(yù)測(cè),直到第一節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的連接性的檢查之后。
13.如權(quán)利要求10所述的方法,其中執(zhí)行連接性的檢查包括從第二節(jié)點(diǎn)發(fā)送用于NAT的會(huì)話穿越公用程序(STUN)分組到所述連接請(qǐng)求消息中的所述預(yù)測(cè)的傳輸?shù)刂返牧斜碇械囊粋€(gè)或多個(gè)傳輸?shù)刂贰?br>
14.如權(quán)利要求13所述的方法,其中執(zhí)行連接性的檢查還包括從第一節(jié)點(diǎn)向第二節(jié)點(diǎn)發(fā)送STUN分組響應(yīng),其中所述STUN分組響應(yīng)包括所述第一對(duì)稱NAT上的外部端口的傳輸?shù)刂?,從所述第二?jié)點(diǎn)發(fā)送的STUN分組之一通過所述第一對(duì)稱NAT到達(dá)所述第一節(jié)點(diǎn)。
15.如權(quán)利要求10所述的方法,還包括 響應(yīng)于來自第二節(jié)點(diǎn)的、指示第二節(jié)點(diǎn)針對(duì)連接到另一節(jié)點(diǎn)而在排隊(duì)等待的消息而在a)之前等待時(shí)間段Tw; 取消第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的通信會(huì)話;以及 重復(fù)a)、b)和C),其中時(shí)間量Tw大于或等于零且小于第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的連接失敗的超時(shí)。
16.如權(quán)利要求10所述的方法,其中執(zhí)行第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的連接性的檢查包括使用來自預(yù)測(cè)的傳輸?shù)刂返乃隽斜淼膫鬏數(shù)刂窂牡谝还?jié)點(diǎn)向第二節(jié)點(diǎn)發(fā)送一個(gè)或多個(gè)測(cè)試分組。
17.如權(quán)利要求16所述的方法,其中延遲用于第一節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的通信的端口預(yù)測(cè)包括延遲用于第一節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的通信的端口預(yù)測(cè),直到所述一個(gè)或多個(gè)測(cè)試分組中的第一個(gè)已被發(fā)送之后。
18.—種節(jié)點(diǎn),包括 處理器; 存儲(chǔ)器; 網(wǎng)絡(luò)接口 ;以及 包含在所述存儲(chǔ)器中的指令,所述指令被配置用于在所述處理器上執(zhí)行,所述指令包括在被執(zhí)行時(shí)使得所述節(jié)點(diǎn)執(zhí)行以下處理的一組指令 i)接收對(duì)發(fā)送到第二節(jié)點(diǎn)的連接請(qǐng)求消息的臨時(shí)響應(yīng),其中所述連接請(qǐng)求消息包含預(yù)測(cè)的傳輸?shù)刂返牧斜恚? ii)利用所述預(yù)測(cè)的傳輸?shù)刂返牧斜韴?zhí)行第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的連接性的檢查;以及 iii)延遲用于所述節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的通信的端口預(yù)測(cè),直到第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的連接性的檢查已經(jīng)開始之后。
19.如權(quán)利要求18所述的節(jié)點(diǎn),其中所述指令還包括在被執(zhí)行時(shí)使得所述節(jié)點(diǎn)執(zhí)行以下處理的一組指令 iv)在iii)之后,執(zhí)行用于第一節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的通信的端口預(yù)測(cè),其中第一節(jié)點(diǎn)構(gòu)建在第一對(duì)稱NAT上的預(yù)測(cè)的傳輸?shù)刂返牧斜恚? v)從第一節(jié)點(diǎn)向第三節(jié)點(diǎn)發(fā)送包含預(yù)測(cè)的傳輸?shù)刂返牧斜淼倪B接請(qǐng)求消息; vi)使用所述預(yù)測(cè)的傳輸?shù)刂穲?zhí)行所述第一節(jié)點(diǎn)和所述第三節(jié)點(diǎn)之間的連接性的檢查。
20.如權(quán)利要求19所述的節(jié)點(diǎn),其中所述指令還包括在被執(zhí)行時(shí)使得所述節(jié)點(diǎn)執(zhí)行以下處理的一組指令 vii)延遲用于第一節(jié)點(diǎn)和第四節(jié)點(diǎn)之間的通信的端口預(yù)測(cè),直到第一節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的連接性的檢查之后。
21.如權(quán)利要求18所述的節(jié)點(diǎn),其中所述節(jié)點(diǎn)被配置為通過從第二節(jié)點(diǎn)發(fā)送用于NAT的會(huì)話穿越公共程序(STUN)分組到所述連接請(qǐng)求消息中的所述預(yù)測(cè)的傳輸?shù)刂返牧斜碇械囊粋€(gè)或多個(gè)傳輸?shù)刂?,來?zhí)行第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的連接性的檢查。
22.如權(quán)利要求21所述的節(jié)點(diǎn),其中所述節(jié)點(diǎn)被配置為通過從第一節(jié)點(diǎn)向第二節(jié)點(diǎn)發(fā)送STUN分組響應(yīng)來執(zhí)行連接性的檢查,其中所述STUN分組響應(yīng)包括所述第一對(duì)稱NAT上的外部端口的傳輸?shù)刂?,從第二?jié)點(diǎn)發(fā)送的所述STUN分組之一通過所述第一對(duì)稱NAT到達(dá)第一節(jié)點(diǎn)。
23.如權(quán)利要求18所述的節(jié)點(diǎn),其中所述指令還包括在被執(zhí)行時(shí)使得所述節(jié)點(diǎn)執(zhí)行以下處理的一組指令 響應(yīng)于來自第二節(jié)點(diǎn)的、指示第二節(jié)點(diǎn)針對(duì)連接到另一節(jié)點(diǎn)而在排隊(duì)等待的消息而在接收到所述臨時(shí)響應(yīng)之前等待時(shí)間段Tw ; 取消第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的通信會(huì)話;以及 重復(fù)i)、ii)和iii),其中時(shí)間量Tw大于或等于零且小于第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的連接失敗的超時(shí)。
24.如權(quán)利要求18所述的節(jié)點(diǎn),其中所述節(jié)點(diǎn)被配置為通過使用來自預(yù)測(cè)的傳輸?shù)刂返乃隽斜淼膫鬏數(shù)刂窂牡谝还?jié)點(diǎn)向第二節(jié)點(diǎn)發(fā)送一個(gè)或多個(gè)測(cè)試分組,來執(zhí)行第一節(jié)點(diǎn)和第二節(jié)點(diǎn)之間的連接性的檢查。
25.如權(quán)利要求24所述的節(jié)點(diǎn),其中所述節(jié)點(diǎn)被配置為通過延遲用于第一節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的通信的端口預(yù)測(cè)、直到所述一個(gè)或多個(gè)測(cè)試分組中的第一個(gè)已經(jīng)被發(fā)送之后,來延遲用于第一節(jié)點(diǎn)和第三節(jié)點(diǎn)之間的通信的端口預(yù)測(cè)。
全文摘要
公開了對(duì)于對(duì)稱NAT后面的節(jié)點(diǎn)在NAT穿越期間的多重連接的處理。通過在端口預(yù)測(cè)之后使臨界時(shí)間窗口串行化,對(duì)稱NAT穿越期間連接失敗的可能性可以得以減小。一旦已經(jīng)開始了對(duì)于第一連接的端口預(yù)測(cè),對(duì)于后續(xù)連接的端口預(yù)測(cè)可以被延遲直到對(duì)于第一連接的連接性檢測(cè)已經(jīng)開始。對(duì)于到不同節(jié)點(diǎn)的多重同時(shí)連接,可以重復(fù)此過程以處理NAT穿越。
文檔編號(hào)H04L29/12GK102984290SQ20121050260
公開日2013年3月20日 申請(qǐng)日期2009年2月23日 優(yōu)先權(quán)日2008年3月5日
發(fā)明者竹田豐 申請(qǐng)人:索尼電腦娛樂公司