欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種融合UPNP及STUN的P2P穿越方法及其系統(tǒng)與流程

文檔序號(hào):11960447閱讀:685來源:國(guó)知局
一種融合UPNP及STUN的P2P穿越方法及其系統(tǒng)與流程

本發(fā)明涉及P2P通信的技術(shù)領(lǐng)域,更具體地說是指一種融合UPNP及STUN的P2P穿越方法及融合UPNP及STUN的P2P穿越的系統(tǒng)。



背景技術(shù):

NAT:網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation),也叫做網(wǎng)絡(luò)掩蔽或者IP掩蔽(IP masquerading),是一種在IP封包通過路由器或防火墻時(shí)重寫源IP地址或目的IP地址的技術(shù),這種技術(shù)被普遍使用在有多臺(tái)主機(jī)但只通過一個(gè)公有IP地址訪問因特網(wǎng)的私有網(wǎng)絡(luò)中。

P2P即點(diǎn)對(duì)點(diǎn)通信,或稱為對(duì)等聯(lián)網(wǎng),與傳統(tǒng)的服務(wù)器客戶端模式有著明顯的區(qū)別。在P2P網(wǎng)絡(luò)中,所有通信節(jié)點(diǎn)的地位都是對(duì)等的,每個(gè)節(jié)點(diǎn)都扮演著客戶機(jī)和服務(wù)器雙重角色,節(jié)點(diǎn)之間通過直接通信實(shí)現(xiàn)各種功能應(yīng)用。

現(xiàn)實(shí)中,客戶端主機(jī)通常位于NAT網(wǎng)關(guān)后面,NAT技術(shù)雖然在一定程度上解決了IPv4地址短缺的問題,在構(gòu)建防火墻、保證網(wǎng)絡(luò)安全方面都發(fā)揮了一定的作用,卻破壞了端到端的網(wǎng)絡(luò)通信。NAT阻礙主機(jī)進(jìn)行P2P通信的原因是NAT不允許外網(wǎng)主機(jī)主動(dòng)訪問內(nèi)網(wǎng)主機(jī),但是P2P技術(shù)卻要求通信雙方都能主動(dòng)發(fā)起訪問,所以要在NAT網(wǎng)絡(luò)環(huán)境中進(jìn)行有效的P2P通信,就必須穿越NAT,采用的解決方案通常基于UPNP、STUN、TURN等協(xié)議。

通用即插即用(UPNP)是一種用于PC機(jī)和智能設(shè)備(或儀器)的常見對(duì)等網(wǎng)絡(luò)連接的體系結(jié)構(gòu);STUN(Simple Traversal of UDP over NATs,NAT的UDP簡(jiǎn)單穿越)是一種網(wǎng)絡(luò)協(xié)議,它允許位于NAT(或多重NAT)后的客戶端找出自己的公網(wǎng)地址,查出自己位于哪種類型的NAT之后以及NAT為某一個(gè)本地端口所綁定的Internet端端口;TURN(全名Traversal Using Relay NAT),是一種資料傳輸協(xié)議(data-transfer protocol),允許在TCP或UDP的連線上跨越NAT或防火墻。

但是,UPNP端口映射成功與否,依賴于不受控制的路由器型號(hào)是否支持UPNP的功能,以及是否將此功能打開,如果P2P主機(jī)相對(duì)于公有網(wǎng)絡(luò)位于多層路由器下,則UPNP無法支持跨公網(wǎng)的P2P主機(jī)通信,而STUN有無法穿透對(duì)稱NAT(SymmetricNAT)以及類似的Firewall設(shè)備的缺陷。TURN的局限性在于所有報(bào)文都必須經(jīng)過TURNServer轉(zhuǎn)發(fā),增大了包的延遲和丟包的可能性,且TURN服務(wù)器的網(wǎng)絡(luò)費(fèi)用高昂。

中國(guó)專利201010231283.2公開了一種P2P網(wǎng)絡(luò)應(yīng)用系統(tǒng)中私網(wǎng)檢測(cè)與穿越的復(fù)合方法,包括以下步驟:步驟一,對(duì)UPNP、STUN、TURN三種方法設(shè)定不同的優(yōu)先級(jí),優(yōu)先級(jí)順序?yàn)椋篣PNP、STUN、TURN;然后對(duì)節(jié)點(diǎn)所處網(wǎng)絡(luò)進(jìn)行檢測(cè)并加以分類;步驟二,如果檢測(cè)結(jié)果顯示節(jié)點(diǎn)所處的網(wǎng)絡(luò)環(huán)境能夠通過UPNP技術(shù)實(shí)現(xiàn)對(duì)外部節(jié)點(diǎn)的開放,則利用UPNP技術(shù)實(shí)現(xiàn)所述網(wǎng)絡(luò)內(nèi)部節(jié)點(diǎn)的NAT穿越;否則執(zhí)行步驟三;步驟三,如果網(wǎng)絡(luò)環(huán)境支持STUN技術(shù),則利用STUN技術(shù)實(shí)現(xiàn)節(jié)點(diǎn)的私網(wǎng)穿越;否則執(zhí)行步驟四;步驟四,如果網(wǎng)絡(luò)環(huán)境支持TURN技術(shù),則采用TURN技術(shù)實(shí)現(xiàn)節(jié)點(diǎn)的私網(wǎng)穿越。中國(guó)專利201210011530.7公開一種通過UPnP改善STUN-P2P穿透率與穩(wěn)定性的方法,通過節(jié)點(diǎn)UPnP端口映射客戶端,向NAT發(fā)起端口映射請(qǐng)求;如果端口映射請(qǐng)求成功,反饋UPnP在NAT上成功建立端口映射給節(jié)點(diǎn);將已建立的端口映射傳給STUN客戶端,與STUN服務(wù)器建立心跳消息連接;如不能得到反饋數(shù)據(jù),則啟動(dòng)STUN客戶端與STUN服務(wù)器連接,取得端口;節(jié)點(diǎn)從STUN客戶端處獲取NAT的外部端口;通過XMPP或SIP協(xié)議,與它的對(duì)等節(jié)點(diǎn)交換其在NAT上建立的外部地址與端口。中國(guó)專利200810103849.6涉及一種基于UPNP和STUN技術(shù)相結(jié)合的NAT穿越方法,該方法將UPNP和STUN進(jìn)行有效結(jié)合,在UPNP穿越NAT失敗后再采用STUN方法對(duì)NAT進(jìn)行二次穿越,通過汲取兩種穿越方法各自的有點(diǎn)有效提高穿越成功率;對(duì)于對(duì)稱NAT的穿越,提出采用基于NAT添加端口映射的樣本值估計(jì)端口映射分布的方法進(jìn)行端口猜測(cè),以避免由于第三方代理轉(zhuǎn)發(fā)造成的缺陷和簡(jiǎn)單端口遞增猜測(cè)方法的盲目性;對(duì)于P2P流媒體系統(tǒng)中通信雙方都位于NAT后的情況,提出采用讓部分帶寬充裕位于外網(wǎng)的普通通信節(jié)點(diǎn)充電輔助中繼節(jié)點(diǎn)的方法來緩解中繼服務(wù)器的壓力,從而有效消除系統(tǒng)通信瓶頸。

上述的三個(gè)專利中,第一個(gè)專利利用的是UPNP、STUN、TURN依次判斷穿越,并非集合使用;第二個(gè)專利以及第三個(gè)專利并未提及如何對(duì)NAT或P2P進(jìn)行再次穿越。

因此,有必要設(shè)計(jì)一種融合UPNP及STUN的P2P穿越方法,實(shí)現(xiàn)結(jié)合UPNP在單層路由下P2P易成功且快速特點(diǎn)與增強(qiáng)STUN在對(duì)稱NAT打洞穿透能力,提高了在P2P的NAT穿越成功率,實(shí)現(xiàn)P2P通信。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的在于克服現(xiàn)有技術(shù)的缺陷,提供一種融合UPNP及STUN的P2P穿越方法及其系統(tǒng)。

為實(shí)現(xiàn)上述目的,本發(fā)明采用以下技術(shù)方案:一種融合UPNP及STUN的P2P穿越方法,包括以下具體步驟:

步驟一、NAT映射步驟,IPC對(duì)本地路由器進(jìn)行UPNP的NAT映射;

步驟二、UPNP注冊(cè)步驟,IPC向業(yè)務(wù)控制服務(wù)器進(jìn)行UPNP注冊(cè);

步驟三、P2P服務(wù)器注冊(cè)步驟,IPC向P2P服務(wù)器上報(bào)設(shè)備信息并保持心跳,完成P2P服務(wù)器注冊(cè);

步驟四、UPNP方式訪問啟動(dòng)步驟,APP向業(yè)務(wù)控制服務(wù)器獲取指定IPC的UPNP信息后,使用UPNP反饋的IP地址信息來訪問IPC,如果訪問成功,則進(jìn)行步驟七,如果訪問失敗則進(jìn)行步驟五;

步驟五、P2P服務(wù)器注冊(cè)步驟,APP與P2P服務(wù)器進(jìn)行注冊(cè)與交互;

步驟六、打洞步驟,APP與IPC同P2P服務(wù)器完成STUN的打洞流程,建立P2P通道,APP根據(jù)打通的通道訪問IPC;

步驟七、結(jié)束步驟,重復(fù)步驟一,直至接收關(guān)機(jī)信號(hào)。

其進(jìn)一步技術(shù)方案為:在所述步驟六中,進(jìn)行打洞流程時(shí),APP與IPC分別需要進(jìn)行NAT類型探測(cè),得到各自相對(duì)于公網(wǎng)的NAT類型,接著APP與IPC會(huì)通過服務(wù)器互相通告自己的NAT類型,客戶端并以此來協(xié)同并確定打洞策略。

其進(jìn)一步技術(shù)方案為:所述NAT類型探測(cè)的步驟如下:

步驟1、第一判斷步驟,客戶端發(fā)送不帶任何標(biāo)志和應(yīng)答地址屬性的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,若服務(wù)器沒有應(yīng)答,則客戶端為UDP完全阻塞,若服務(wù)器有應(yīng)答,則進(jìn)行下一步驟;

步驟2、第二判斷步驟,判斷服務(wù)器收到的外網(wǎng)IP和本地IP是否一致,并且客戶端發(fā)送帶“更改IP”和“更改端口”標(biāo)志的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,若外網(wǎng)IP和本地IP一致,同時(shí)IP不同且端口不同的服務(wù)器無應(yīng)答,則客戶端是對(duì)稱防火墻,若外網(wǎng)IP和本地IP一致,同時(shí)IP不同且端口不同的服務(wù)器有應(yīng)答,則客戶端是無NAT公網(wǎng),若外網(wǎng)IP和本地IP不一致,同時(shí)IP不同且端口不同的服務(wù)器有應(yīng)答時(shí),則NAT的類型為完全型NAT,若外網(wǎng)IP和本地IP不一致,同時(shí)IP不同且端口不同的服務(wù)器無應(yīng)答時(shí),進(jìn)行下一步驟;

步驟3、第三判斷步驟,客戶端繼續(xù)發(fā)送不帶任何標(biāo)志和應(yīng)答地址屬性的STUN綁定請(qǐng)求報(bào)文給IP不同的服務(wù)器,并且判斷收到的外網(wǎng)[IP:Port]和第一判斷步驟返回是否相同,如果返回的結(jié)果相同,則進(jìn)行下一步驟,如果返回的結(jié)果不同,則NAT的類型為對(duì)稱型NAT;

步驟4、第四判斷步驟,客戶端發(fā)送只帶“更改端口”標(biāo)志的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,若端口不同的服務(wù)器有應(yīng)答,則NAT的類型為限制型NAT,若端口不同的服務(wù)器無應(yīng)答,則NAT的類型為端口限制型NAT。

其進(jìn)一步技術(shù)方案為:所述步驟六中的打洞策略是客戶端基于己方NAT與對(duì)方NAT類型做出的,并不區(qū)分己方是APP還是IPC。

其進(jìn)一步技術(shù)方案為:所述步驟六中的打洞策略的具體策略如下:

步驟1、第一打洞策略,當(dāng)己方的RemotePort和對(duì)方的RemotePort相同時(shí),客戶端向?qū)Ψ絣ocalIP的localPort發(fā)送消息;

步驟2、第二打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是非對(duì)稱型NAT&&己方是非對(duì)稱型NAT)||(對(duì)方是完全型NAT&&己方是對(duì)稱型NAT)||(對(duì)方是地址限制型NAT&&己方是對(duì)稱型NAT)時(shí),客戶端向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息;

步驟3、第三打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是端口限制型NAT&&己方是固定步長(zhǎng)對(duì)稱型NAT)時(shí),客戶端向?qū)Ψ絉emoteIP的RemotePort-a至RemotePort+a端口和RemotePort加1個(gè)步長(zhǎng)到加b個(gè)步長(zhǎng)的共b個(gè)端口發(fā)送消息,a取值在50-200之間,b取值在1-64之間;

步驟4、第四打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是端口限制型NAT&&己方是隨機(jī)步長(zhǎng)對(duì)稱型NAT),客戶端通過localPort-c至localPort+c端口向?qū)Ψ降腞emoteIP的RemotePort發(fā)送消息,c取值在50-200之間;

步驟5、第五打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是對(duì)稱型NAT&&己方是完全型NAT)||(對(duì)方是對(duì)稱型NAT&&己方是地址限制型NAT),客戶端向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息;

步驟6、第六打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是固定步長(zhǎng)對(duì)稱型NAT&&己方是端口限制型NAT),客戶端通過本地localPort-d至localPort+d端口向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息,d取值在50-200之間;

步驟7、第七打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是隨機(jī)步長(zhǎng)對(duì)稱型NAT&&己方是端口限制型NAT)時(shí),客戶端通過本地localPort隨機(jī)e個(gè)端口,e取值在500-2000之間,向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息;

步驟8、第八打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是對(duì)稱型NAT&&己方是對(duì)稱型NAT)時(shí),客戶端向?qū)Ψ絉emoteIP的RemotePort加1個(gè)步長(zhǎng)到加f個(gè)步長(zhǎng)的共f個(gè)端口發(fā)送消息,f取值在1-64之間。

其進(jìn)一步技術(shù)方案為:所述消息為UDP通路探測(cè)包,所述步長(zhǎng)為對(duì)稱型NAT連續(xù)兩個(gè)映射時(shí)的端口變化值。

本發(fā)明還提供了一種融合UPNP及STUN的P2P穿越系統(tǒng),包括NAT映射模塊、UPNP注冊(cè)模塊、P2P服務(wù)器注冊(cè)模塊、UPNP方式訪問模塊、NAT類型探測(cè)模塊以及打洞模塊;

所述NAT映射模塊,用于IPC對(duì)本地路由器建立UPNP的NAT映射;

所述UPNP注冊(cè)模塊,用于所述NAT映射模塊映射完成后,實(shí)現(xiàn)IPC向業(yè)務(wù)控制服務(wù)器進(jìn)行的UPNP注冊(cè),接收來自所述NAT映射模塊的映射信息;

所述P2P服務(wù)器注冊(cè)模塊,用于IPC在所述UPNP注冊(cè)模塊注冊(cè)完成后,實(shí)現(xiàn)IPC向P2P服務(wù)器上報(bào)設(shè)備信息并驅(qū)動(dòng)IPC與P2P服務(wù)器保持心跳,用于APP根據(jù)所述UPNP方式訪問模塊失敗時(shí),由APP與P2P服務(wù)器進(jìn)行注冊(cè)與交互,IPC在所述UPNP注冊(cè)模塊完成之后執(zhí)行,APP在所述UPNP方式訪問模塊失敗之后執(zhí)行;

所述UPNP方式訪問模塊,用于在所述P2P服務(wù)器注冊(cè)模塊驅(qū)動(dòng)IPC與P2P服務(wù)器保持心跳后,由APP向業(yè)務(wù)控制服務(wù)器獲取指定IPC的UPNP信息后,使用UPNP反饋的IP地址信息來訪問IPC,在所述UPNP注冊(cè)模塊完成之后可執(zhí)行;

所述NAT類型探測(cè)模塊,用于所述UPNP方式訪問模塊啟動(dòng)訪問后,打洞模塊進(jìn)行打洞流程時(shí),APP與IPC分別需要進(jìn)行NAT類型探測(cè),得到各自相對(duì)于公網(wǎng)的NAT類型,接著APP與IPC會(huì)通過服務(wù)器互相通告自己的NAT類型,客戶端并以此來協(xié)同并確定打洞策略,以供打洞模塊選擇打洞策略,完成打洞流程,在所述打洞模塊執(zhí)行之前完成;

所述打洞模塊,用于根據(jù)所述NAT類型探測(cè)模塊探測(cè)NAT類型后,APP與IPC同P2P服務(wù)器完成打洞流程,建立P2P通道,APP根據(jù)打通的P2P通道訪問IPC。

其進(jìn)一步技術(shù)方案為:所述NAT類型探測(cè)模塊包括第一判斷子模塊、第二判斷子模塊、第三判斷子模塊以及第四判斷子模塊;

所述第一判斷子模塊,用于在所述打洞模塊執(zhí)行之前完成,根據(jù)客戶端發(fā)送不帶任何標(biāo)志和應(yīng)答地址屬性的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,判斷服務(wù)器有無應(yīng)答,服務(wù)器無應(yīng)答時(shí)客戶端為UDP完全阻塞,在所述打洞模塊執(zhí)行之前完成;

所述第二判斷子模塊,用于根據(jù)所述第一判斷子模塊得出的服務(wù)器有應(yīng)答的判斷結(jié)果,進(jìn)一步判斷服務(wù)器收到的外網(wǎng)IP和本地IP是否一致,并且客戶端發(fā)送帶“更改IP”和“更改端口”標(biāo)志的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,判斷IP不同且端口不同的服務(wù)器有無應(yīng)答,以確定客戶端是否為對(duì)稱防火墻、無NAT公網(wǎng)以及完全型NAT,在所述第一判斷子模塊完成后以及所述打洞模塊之前執(zhí)行;

所述第三判斷子模塊,用于根據(jù)所述第二判斷子模塊判斷的結(jié)果,客戶端繼續(xù)發(fā)送不帶任何標(biāo)志和應(yīng)答地址屬性的STUN綁定請(qǐng)求報(bào)文給IP不同服務(wù)器,判斷收到的外網(wǎng)[IP:Port]和所述第一判斷子模塊返回是否相同,以確定客戶端是否為對(duì)稱型NAT,在所述第二判斷子模塊完成后以及所述打洞模塊之前執(zhí)行;

所述第四判斷子模塊,用于根據(jù)所述第三判斷子模塊的判斷結(jié)果,客戶端發(fā)送只帶“更改端口”標(biāo)志的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,判斷端口不同的服務(wù)器有無應(yīng)答,以確定客戶端是否為限制型NAT以及端口限制型NAT,在所述第三判斷子模塊完成以及所述打洞模塊之前執(zhí)行。

其進(jìn)一步技術(shù)方案為:所述打洞模塊包括在所述第四判斷子模塊完成之后的打洞主控子模塊、第一打洞子模塊、第二打洞子模塊、第三打洞子模塊、第四打洞子模塊、第五打洞子模塊、第六打洞子模塊、第七打洞子模塊以及第八打洞子模塊;

所述第一打洞子模塊,用于當(dāng)己方的RemotePort和對(duì)方的RemotePort相同時(shí),所述打洞主控子模塊驅(qū)動(dòng)客戶端向?qū)Ψ降膌ocalIP的localPort發(fā)送消息,受控于所述打洞主控子模塊;

所述第二打洞子模塊,用于當(dāng)客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是非對(duì)稱型NAT&&己方是非對(duì)稱型NAT)||(對(duì)方是完全型NAT&&己方是對(duì)稱型NAT)||(對(duì)方是地址限制型NAT&&己方是對(duì)稱型NAT)時(shí),所述打洞主控子模塊驅(qū)動(dòng)客戶端向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息,受控于所述打洞主控子模塊;

所述第三打洞子模塊,用于客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是端口限制型NAT&&己方是固定步長(zhǎng)對(duì)稱型NAT)時(shí),所述打洞主控子模塊驅(qū)動(dòng)客戶端向?qū)Ψ絉emoteIP的RemotePort-a至RemotePort+a端口和RemotePort加1個(gè)步長(zhǎng)到加b個(gè)步長(zhǎng)的共b個(gè)端口發(fā)送消息,a取值在50-200之間,b取值在1-64之間,受控于所述打洞主控子模塊;

所述第四打洞子模塊,用于客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是端口限制型NAT&&己方是隨機(jī)步長(zhǎng)對(duì)稱型NAT)時(shí),所述打洞主控子模塊驅(qū)動(dòng)客戶端通過localPort-c至localPort+c端口向?qū)Ψ降腞emoteIP的RemotePort發(fā)送消息,c取值在50-200之間,受控于所述打洞主控子模塊;

所述第五打洞子模塊,用于客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是對(duì)稱型NAT&&己方是完全型NAT)||(對(duì)方是對(duì)稱型NAT&&己方是地址限制型NAT),所述打洞主控子模塊驅(qū)動(dòng)客戶端向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息,受控于所述打洞主控子模塊;

所述第六打洞子模塊,用于當(dāng)客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是固定步長(zhǎng)對(duì)稱型NAT&&己方是端口限制型NAT)時(shí),所述打洞主控子模塊驅(qū)動(dòng)客戶端通過本地localPort-d至localPort+d端口向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息,d取值在50-200之間,受控于所述打洞主控子模塊;

所述第七打洞子模塊,用于當(dāng)客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是隨機(jī)步長(zhǎng)對(duì)稱型NAT&&己方是端口限制型NAT)時(shí),所述打洞主控子模塊驅(qū)動(dòng)客戶端通過本地localPort隨機(jī)e個(gè)端口,e取值在500-2000之間,向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息,受控于所述打洞主控子模塊;

所述第八打洞子模塊,用于當(dāng)客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是對(duì)稱型NAT&&己方是對(duì)稱型NAT)時(shí),所述打洞主控子模塊驅(qū)動(dòng)客戶端向?qū)Ψ絉emoteIP的RemotePort加1個(gè)步長(zhǎng)到加f個(gè)步長(zhǎng)的共f個(gè)端口發(fā)送消息,f取值在1-64之間,受控于所述打洞主控子模塊。

本發(fā)明與現(xiàn)有技術(shù)相比的有益效果是:本發(fā)明的一種融合UPNP及STUN的P2P穿越的方法,通過在通信時(shí),先進(jìn)行UPNP的通信訪問,當(dāng)訪問失敗時(shí),進(jìn)行STUN的訪問,結(jié)合UPNP在單層路由下P2P易成功且快速特點(diǎn)與增強(qiáng)STUN在對(duì)稱NAT打洞穿透能力,提高了在P2P的NAT穿越成功率,實(shí)現(xiàn)P2P通信。

下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步描述。

附圖說明

圖1為本發(fā)明具體實(shí)施例提供的一種融合UPNP及STUN的P2P穿越方法的流程圖;

圖2為本發(fā)明具體實(shí)施例提供的NAT類型探測(cè)步驟的流程圖;

圖3為本發(fā)明具體實(shí)施例提供的打洞策略流程圖;

圖4為本發(fā)明具體實(shí)施例提供的一種融合UPNP及STUN的P2P穿越系統(tǒng)的結(jié)構(gòu)框圖。

附圖標(biāo)記

10 NAT映射模塊 20 UPNP注冊(cè)模塊

30 P2P服務(wù)器注冊(cè)模塊 40 UPNP方式訪問模塊

50 NAT類型探測(cè)模塊 51 第一判斷子模塊

52 第二判斷子模塊 53 第三判斷子模塊

54 第四判斷子模塊 60 打洞模塊

61 打洞主控子模塊 62 第一打洞子模塊

63 第二打洞子模塊 64 第三打洞子模塊

65 第四打洞子模塊 66 第五打洞子模塊

67 第六打洞子模塊 68 第七打洞模塊

69 第八打洞子模塊

具體實(shí)施方式

為了更充分理解本發(fā)明的技術(shù)內(nèi)容,下面結(jié)合具體實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)一步介紹和說明,但不局限于此。

如圖1~4所示的具體實(shí)施例,本實(shí)施例提供的一種融合UPNP及STUN的P2P穿越方法,可以運(yùn)用在通信的過程中,實(shí)現(xiàn)結(jié)合UPNP在單層路由下P2P易成功且快速特點(diǎn)與增強(qiáng)STUN在對(duì)稱NAT打洞穿透能力,提高了在P2P的NAT穿越成功率。

一種融合UPNP及STUN的P2P穿越方法,包括以下具體步驟:

步驟一、NAT映射步驟,IPC對(duì)本地路由器進(jìn)行UPNP的NAT映射;

步驟二、UPNP注冊(cè)步驟,IPC向業(yè)務(wù)控制服務(wù)器進(jìn)行UPNP注冊(cè);

步驟三、P2P服務(wù)器注冊(cè)步驟,IPC向P2P服務(wù)器上報(bào)設(shè)備信息并保持心跳,完成P2P服務(wù)器注冊(cè);

步驟四、UPNP方式訪問啟動(dòng)步驟,APP向業(yè)務(wù)控制服務(wù)器獲取指定IPC的UPNP信息后,使用UPNP反饋的IP地址信息來訪問IPC,如果訪問成功,則進(jìn)行步驟七,如果反問失敗則進(jìn)行步驟五;

步驟五、P2P服務(wù)器注冊(cè)步驟,APP與P2P服務(wù)器進(jìn)行注冊(cè)與交互;

步驟六、打洞步驟,APP與IPC同P2P服務(wù)器完成STUN的打洞流程,建立P2P通道,APP根據(jù)打通的通道訪問IPC;

步驟七、結(jié)束步驟,重復(fù)步驟一,直至接收關(guān)機(jī)信號(hào)。

上述的一種融合UPNP及STUN的P2P穿越方法,通過在通信時(shí),先進(jìn)行UPNP的通信訪問,當(dāng)訪問失敗時(shí),進(jìn)行STUN的訪問,結(jié)合UPNP在單層路由下P2P易成功且快速特點(diǎn)與增強(qiáng)STUN在對(duì)稱NAT打洞穿透能力,提高了在P2P的NAT穿越成功率,實(shí)現(xiàn)P2P通信。

具體的,在所述步驟六中,進(jìn)行打洞流程時(shí),APP與IPC分別需要進(jìn)行NAT類型探測(cè),得到各自相對(duì)于公網(wǎng)的NAT類型,接著APP與IPC會(huì)通過服務(wù)器互相通告自己的NAT類型,客戶端并以此來協(xié)同并確定打洞策略。

更進(jìn)一步的,上述的NAT類型探測(cè)的具體步驟如下:

步驟1、第一判斷步驟,客戶端發(fā)送不帶任何標(biāo)志和應(yīng)答地址屬性的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,若服務(wù)器沒有應(yīng)答,則客戶端為UDP完全阻塞,若服務(wù)器有應(yīng)答,則進(jìn)行下一步驟;

步驟2、第二判斷步驟,判斷服務(wù)器收到的外網(wǎng)IP和本地IP是否一致,并且客戶端發(fā)送帶“更改IP”和“更改端口”標(biāo)志的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,若外網(wǎng)IP和本地IP一致,同時(shí)IP不同且端口不同的服務(wù)器無應(yīng)答,則客戶端是對(duì)稱防火墻,若外網(wǎng)IP和本地IP一致,同時(shí)IP不同且端口不同的服務(wù)器有應(yīng)答,則客戶端是無NAT公網(wǎng),若外網(wǎng)IP和本地IP不一致,同時(shí)IP不同且端口不同的服務(wù)器有應(yīng)答時(shí),則NAT的類型為完全型NAT,若外網(wǎng)IP和本地IP不一致,同時(shí)IP不同且端口不同的服務(wù)器無應(yīng)答時(shí),進(jìn)行下一步驟;

步驟3、第三判斷步驟,客戶端繼續(xù)發(fā)送不帶任何標(biāo)志和應(yīng)答地址屬性的STUN綁定請(qǐng)求報(bào)文給IP不同的服務(wù)器,并且判斷收到的外網(wǎng)[IP:Port]和第一判斷步驟返回是否相同,如果返回的結(jié)果相同,則進(jìn)行下一步驟,如果返回的結(jié)果不同,則NAT的類型為對(duì)稱型NAT;

步驟4、第四判斷步驟,客戶端發(fā)送只帶“更改端口”標(biāo)志的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,若端口不同的服務(wù)器有應(yīng)答,則NAT的類型為限制型NAT,若端口不同的服務(wù)器無應(yīng)答,則NAT的類型為端口限制型NAT。

另外,在所述步驟六中,所述步驟六中的打洞策略是客戶端基于己方NAT與對(duì)方NAT類型做出的,并不區(qū)分己方是APP還是IPC。具體策略如下:

步驟1、第一打洞策略,當(dāng)己方的RemotePort和對(duì)方的RemotePort相同時(shí),客戶端向?qū)Ψ降膌ocalIP的localPort發(fā)送消息;

步驟2、第二打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是非對(duì)稱型NAT&&己方是非對(duì)稱型NAT)||(對(duì)方是完全型NAT&&己方是對(duì)稱型NAT)||(對(duì)方是地址限制型NAT&&己方是對(duì)稱型NAT)時(shí),客戶端向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息;

步驟3、第三打洞策略,,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是端口限制型NAT&&己方是固定步長(zhǎng)對(duì)稱型NAT)時(shí),客戶端向?qū)Ψ絉emoteIP的RemotePort-a至RemotePort+a端口和RemotePort加1個(gè)步長(zhǎng)到加b個(gè)步長(zhǎng)的共b個(gè)端口發(fā)送消息,a取值在50-200之間,b取值在1-64之間;

步驟4、第四打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是端口限制型NAT&&己方是隨機(jī)步長(zhǎng)對(duì)稱型NAT),客戶端通過localPort-c至localPort+c端口向?qū)Ψ降腞emoteIP的RemotePort發(fā)送消息,c取值在50-200之間;

步驟5、第五打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是對(duì)稱型NAT&&己方是完全型NAT)||(對(duì)方是對(duì)稱型NAT&&己方是地址限制型NAT),客戶端向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息;

步驟6、第六打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是固定步長(zhǎng)對(duì)稱型NAT&&己方是端口限制型NAT),客戶端通過本地localPort-d至localPort+d端口向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息,d取值在50-200之間;

步驟7、第七打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是隨機(jī)步長(zhǎng)對(duì)稱型NAT&&己方是端口限制型NAT)時(shí),客戶端通過本地localPort隨機(jī)e個(gè)端口,e取值在500-2000之間,向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息;

步驟8、第八打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是對(duì)稱型NAT&&己方是對(duì)稱型NAT)時(shí),客戶端向?qū)Ψ絉emoteIP的RemotePort加1個(gè)步長(zhǎng)到加f個(gè)步長(zhǎng)的共f個(gè)端口發(fā)送消息,f取值在1-64之間。

在本實(shí)施例中,上述的消息為UDP通路探測(cè)包。

另外,所述步長(zhǎng)為對(duì)稱型NAT連續(xù)兩個(gè)映射時(shí)的端口變化值。

STUN打通的通道意味著APP與IPC都收到對(duì)方的UDP通路探測(cè)包,收到的同時(shí)也意味著APP與IPC之間的網(wǎng)絡(luò)已經(jīng)有了必要的UDP連接映射,可以互通的網(wǎng)路。

本發(fā)明還提供了一種融合UPNP及STUN的P2P穿越系統(tǒng),包括NAT映射模塊10、UPNP注冊(cè)模塊20、P2P服務(wù)器注冊(cè)模塊30、UPNP方式訪問模塊40、NAT類型探測(cè)模塊50以及打洞模塊60,其中,NAT映射模塊10,用于IPC對(duì)本地路由器建立UPNP的NAT映射;UPNP注冊(cè)模塊20,用于NAT映射模塊10映射完成后,實(shí)現(xiàn)IPC向業(yè)務(wù)控制服務(wù)器進(jìn)行的UPNP注冊(cè),接收來自所述NAT映射模塊10的映射信息;P2P服務(wù)器注冊(cè)模塊30,用于IPC在UPNP注冊(cè)模塊20注冊(cè)完成后,實(shí)現(xiàn)IPC向P2P服務(wù)器上報(bào)設(shè)備信息并驅(qū)動(dòng)IPC與P2P服務(wù)器保持心跳,用于APP根據(jù)所述UPNP方式訪問模塊失敗時(shí),由APP與P2P服務(wù)器進(jìn)行注冊(cè)與交互,IPC在所述UPNP注冊(cè)模塊完成之后執(zhí)行,APP在所述UPNP方式訪問模塊失敗之后執(zhí)行;UPNP方式訪問模塊40,用于在P2P服務(wù)器注冊(cè)模塊30驅(qū)動(dòng)IPC與P2P服務(wù)器保持心跳后,由APP向業(yè)務(wù)控制服務(wù)器獲取指定IPC的UPNP信息后,使用UPNP反饋的IP地址信息來訪問IPC,在所述UPNP注冊(cè)模塊20完成之后可執(zhí)行;NAT類型探測(cè)模塊50,用于UPNP方式訪問模塊40啟動(dòng)訪問后,打洞模塊60進(jìn)行打洞流程時(shí),APP與IPC分別需要進(jìn)行NAT類型探測(cè),得到各自相對(duì)于公網(wǎng)的NAT類型,接著APP與IPC會(huì)通過服務(wù)器互相通告自己的NAT類型,客戶端并以此來協(xié)同并確定打洞策略,以供打洞模塊60選擇打洞策略,完成打洞流程,在所述打洞模塊60執(zhí)行之前完成;打洞模塊60,用于根據(jù)所述NAT類型探測(cè)模塊50探測(cè)NAT類型后,APP與IPC同P2P服務(wù)器完成打洞流程,建立P2P通道,APP根據(jù)打通的P2P通道,訪問IPC。

具體的,上述的NAT類型探測(cè)模塊50包括第一判斷子模塊51、第二判斷子模塊52、第三判斷子模塊53以及第四判斷子模塊54,其中,第一判斷子模塊51,用于所述打洞模塊60執(zhí)行之前完成,根據(jù)客戶端發(fā)送不帶任何標(biāo)志和應(yīng)答地址屬性的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,判斷服務(wù)器有無應(yīng)答,服務(wù)器無應(yīng)答時(shí)客戶端為UDP完全阻塞,在所述打洞模塊60執(zhí)行之前完成;第二判斷子模塊52,用于根據(jù)第一判斷子模塊51得出的服務(wù)器有應(yīng)答的判斷結(jié)果,進(jìn)一步判斷服務(wù)器收到的外網(wǎng)IP和本地IP是否一致,并且且客戶端發(fā)送帶“更改IP”和“更改端口”標(biāo)志的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,判斷IP不同且端口不同的服務(wù)器有無應(yīng)答,以確定客戶端是否為對(duì)稱防火墻、無NAT公網(wǎng)以及完全型NAT,在所述第一判斷子模塊51完成后以及所述打洞模塊60之前執(zhí)行;第三判斷子模塊53,用于根據(jù)第二判斷子模塊52判斷的結(jié)果,客戶端繼續(xù)發(fā)送不帶任何標(biāo)志和應(yīng)答地址屬性的STUN綁定請(qǐng)求報(bào)文給IP不同服務(wù)器,判斷收到的外網(wǎng)[IP:Port]和第一判斷子模塊51返回是否相同,以確定客戶端是否為對(duì)稱型NAT,在所述第二判斷子模塊52完成后以及所述打洞模塊60之前執(zhí)行;第四判斷子模塊54,用于根據(jù)第三判斷子模塊53的判斷結(jié)果,客戶端發(fā)送只帶“更改端口”標(biāo)志的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,判斷端口不同的服務(wù)器有無應(yīng)答,以確定客戶端是否為限制型NAT以及端口限制型NAT,在所述第三判斷子模塊53完成以及所述打洞模塊60之前執(zhí)行。

在本實(shí)施例中,打洞模塊60包括在第四判斷子模塊54完成之后的打洞主控子模塊61、第一打洞策略子模塊62、第二打洞策略子模塊63、第三打洞策略子模塊64、第四打洞策略子模塊65、第五打洞策略子模塊66、第六打洞策略子模塊67、第七打洞子模塊68以及第八打洞子模塊69,其中,第一打洞策略子模塊62,用于當(dāng)己方的RemotePort和對(duì)方的RemotePort相同時(shí),所述打洞主控子模塊61驅(qū)動(dòng)客戶端向?qū)Ψ降膌ocalIP的localPort發(fā)送消息,受控于所述打洞主控子模塊61;第二打洞策略子模塊63,用于當(dāng)客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是非對(duì)稱型NAT&&己方是非對(duì)稱型NAT)||(對(duì)方是完全型NAT&&己方是對(duì)稱型NAT)||(對(duì)方是地址限制型NAT&&己方是對(duì)稱型NAT)時(shí),所述打洞主控子模塊61驅(qū)動(dòng)客戶端向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息,受控于打洞主控子模塊61;第三打洞策略子模塊64,用于客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是端口限制型NAT&&己方是固定步長(zhǎng)對(duì)稱型NAT)時(shí),所述打洞主控子模塊61驅(qū)動(dòng)客戶端向?qū)Ψ絉emoteIP的RemotePort-a至RemotePort+a端口和RemotePort加1個(gè)步長(zhǎng)到加b個(gè)步長(zhǎng)的共b個(gè)端口發(fā)送消息,a取值在50-200之間,b取值在1-64之間,受控于所述打洞主控子模塊61;第四打洞策略子模塊65,用于客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是端口限制型NAT&&己方是隨機(jī)步長(zhǎng)對(duì)稱型NAT)時(shí),所述打洞主控子模塊61驅(qū)動(dòng)客戶端通過localPort-c至localPort+c端口向?qū)Ψ降腞emoteIP的RemotePort發(fā)送消息,c取值在50-200之間,受控于所述打洞主控子模塊61;第五打洞策略子模塊66,用于客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是對(duì)稱型NAT&&己方是完全型NAT)||(對(duì)方是對(duì)稱型NAT&&己方是地址限制型NAT),所述打洞主控子模塊61驅(qū)動(dòng)客戶端向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息,受控于所述打洞主控子模塊61;第六打洞策略子模塊67,用于當(dāng)客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是固定步長(zhǎng)對(duì)稱型NAT&&己方是端口限制型NAT)時(shí),所述打洞主控子模塊61驅(qū)動(dòng)客戶端通過本地localPort-d至localPort+d端口向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息,d取值在50-200之間,受控于所述打洞主控子模塊61;所述第七打洞子模塊68,用于當(dāng)客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是隨機(jī)步長(zhǎng)對(duì)稱型NAT&&己方是端口限制型NAT)時(shí),所述打洞主控子模塊61驅(qū)動(dòng)客戶端通過本地localPort隨機(jī)e個(gè)端口,e取值在500-2000之間,向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息,受控于所述打洞主控子模塊61;所述第八打洞子模塊69,用于當(dāng)客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是對(duì)稱型NAT&&己方是對(duì)稱型NAT)時(shí),所述打洞主控子模塊61驅(qū)動(dòng)客戶端向?qū)Ψ絉emoteIP的RemotePort加1個(gè)步長(zhǎng)到加f個(gè)步長(zhǎng)的共f個(gè)端口發(fā)送消息,f取值在1-64之間,受控于所述打洞主控子模塊61。

上述僅以實(shí)施例來進(jìn)一步說明本發(fā)明的技術(shù)內(nèi)容,以便于讀者更容易理解,但不代表本發(fā)明的實(shí)施方式僅限于此,任何依本發(fā)明所做的技術(shù)延伸或再創(chuàng)造,均受本發(fā)明的保護(hù)。本發(fā)明的保護(hù)范圍以權(quán)利要求書為準(zhǔn)。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
苏尼特右旗| 乌拉特后旗| 清徐县| 丰原市| 瓦房店市| 屏南县| 正定县| 集贤县| 鹤庆县| 晋中市| 安图县| 封丘县| 闵行区| 微博| 开平市| 石首市| 漠河县| 武隆县| 东台市| 衡阳市| 新沂市| 阜阳市| 长顺县| 托克逊县| 富裕县| 三都| 广州市| 连南| 开平市| 江华| 洮南市| 昌吉市| 大邑县| 孝义市| 高尔夫| 襄汾县| 东兰县| 安顺市| 牟定县| 体育| 仁怀市|