1.一種融合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方式訪問(wèn)啟動(dòng)步驟,APP向業(yè)務(wù)控制服務(wù)器獲取指定IPC的UPNP信息后,使用UPNP反饋的IP地址信息來(lái)訪問(wèn)IPC,如果訪問(wèn)成功,則進(jìn)行步驟七,如果訪問(wèn)失敗則進(jìn)行步驟五;
步驟五、P2P服務(wù)器注冊(cè)步驟,APP與P2P服務(wù)器進(jìn)行注冊(cè)與交互;
步驟六、打洞步驟,APP與IPC同P2P服務(wù)器完成STUN的打洞流程,建立P2P通道,APP根據(jù)打通的通道訪問(wèn)IPC;
步驟七、結(jié)束步驟,重復(fù)步驟一,直至接收關(guān)機(jī)信號(hào)。
2.根據(jù)權(quán)利要求1所述的一種融合UPNP及STUN的P2P穿越方法,其特征在于,在所述步驟六中,進(jìn)行打洞流程時(shí),APP與IPC分別需要進(jìn)行NAT類型探測(cè),得到各自相對(duì)于公網(wǎng)的NAT類型,接著APP與IPC會(huì)通過(guò)服務(wù)器互相通告自己的NAT類型,客戶端并以此來(lái)協(xié)同并確定打洞策略。
3.根據(jù)權(quán)利要求2所述的一種融合UPNP及STUN的P2P穿越方法,其特征在于,所述NAT類型探測(cè)的步驟如下:
步驟1、第一判斷步驟,客戶端發(fā)送不帶任何標(biāo)志和應(yīng)答地址屬性的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,若服務(wù)器沒(méi)有應(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ù)器無(wú)應(yīng)答,則客戶端是對(duì)稱防火墻,若外網(wǎng)IP和本地IP一致,同時(shí)IP不同且端口不同的服務(wù)器有應(yīng)答,則客戶端是無(wú)NAT公網(wǎng),若外網(wǎng)IP和本地IP不一致,同時(shí)IP不同且端口不同的服務(wù)器有應(yīng)答時(shí),則NAT的類型為完全型NAT,若外網(wǎng)IP和本地IP不一致,同時(shí)IP不同且端口不同的服務(wù)器無(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ù)器無(wú)應(yīng)答,則NAT的類型為端口限制型NAT。
4.根據(jù)權(quán)利要求1所述的一種融合UPNP及STUN的P2P穿越方法,其特征在于,所述步驟六中的打洞策略是客戶端基于己方NAT與對(duì)方NAT類型做出的,并不區(qū)分己方是APP還是IPC。
5.根據(jù)權(quán)利要求4所述的一種融合UPNP及STUN的P2P穿越方法,其特征在于,所述步驟六中的打洞策略的具體策略如下:
步驟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),客戶端通過(guò)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),客戶端通過(guò)本地localPort-d至localPort+d端口向?qū)Ψ絉emoteIP的RemotePort發(fā)送消息,d取值在50-200之間;
步驟7、第七打洞策略,客戶端的NAT類型與對(duì)方的NAT類型滿足(對(duì)方是隨機(jī)步長(zhǎng)對(duì)稱型NAT&&己方是端口限制型NAT)時(shí),客戶端通過(guò)本地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之間。
6.根據(jù)權(quán)利要求5所述的一種融合UPNP及STUN的P2P穿越方法,其特征在于,所述消息為UDP通路探測(cè)包,所述步長(zhǎng)為對(duì)稱型NAT連續(xù)兩個(gè)映射時(shí)的端口變化值。
7.一種融合UPNP及STUN的P2P穿越系統(tǒng),其特征在于,包括NAT映射模塊、UPNP注冊(cè)模塊、P2P服務(wù)器注冊(cè)模塊、UPNP方式訪問(wèn)模塊、NAT類型探測(cè)模塊以及打洞模塊;
所述NAT映射模塊,用于IPC對(duì)本地路由器建立UPNP的NAT映射;
所述UPNP注冊(cè)模塊,用于所述NAT映射模塊映射完成后,實(shí)現(xiàn)IPC向業(yè)務(wù)控制服務(wù)器進(jìn)行的UPNP注冊(cè),接收來(lái)自所述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方式訪問(wèn)模塊失敗時(shí),由APP與P2P服務(wù)器進(jìn)行注冊(cè)與交互,IPC在所述UPNP注冊(cè)模塊完成之后執(zhí)行,APP在所述UPNP方式訪問(wèn)模塊失敗之后執(zhí)行;
所述UPNP方式訪問(wèn)模塊,用于在所述P2P服務(wù)器注冊(cè)模塊驅(qū)動(dòng)IPC與P2P服務(wù)器保持心跳后,由APP向業(yè)務(wù)控制服務(wù)器獲取指定IPC的UPNP信息后,使用UPNP反饋的IP地址信息來(lái)訪問(wèn)IPC,在所述UPNP注冊(cè)模塊完成之后可執(zhí)行;
所述NAT類型探測(cè)模塊,用于所述UPNP方式訪問(wèn)模塊啟動(dòng)訪問(wèn)后,打洞模塊進(jìn)行打洞流程時(shí),APP與IPC分別需要進(jìn)行NAT類型探測(cè),得到各自相對(duì)于公網(wǎng)的NAT類型,接著APP與IPC會(huì)通過(guò)服務(wù)器互相通告自己的NAT類型,客戶端并以此來(lái)協(xié)同并確定打洞策略,以供打洞模塊選擇打洞策略,完成打洞流程,在所述打洞模塊執(zhí)行之前完成;
所述打洞模塊,用于根據(jù)所述NAT類型探測(cè)模塊探測(cè)NAT類型后,APP與IPC同P2P服務(wù)器完成打洞流程,建立P2P通道,APP根據(jù)打通的P2P通道訪問(wèn)IPC。
8.根據(jù)權(quán)利要求7所述的一種融合UPNP及STUN的P2P穿越系統(tǒng),其特征在于,所述NAT類型探測(cè)模塊包括第一判斷子模塊、第二判斷子模塊、第三判斷子模塊以及第四判斷子模塊;
所述第一判斷子模塊,用于在所述打洞模塊執(zhí)行之前完成,根據(jù)客戶端發(fā)送不帶任何標(biāo)志和應(yīng)答地址屬性的STUN綁定請(qǐng)求報(bào)文給服務(wù)器,判斷服務(wù)器有無(wú)應(yīng)答,服務(wù)器無(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ù)器有無(wú)應(yīng)答,以確定客戶端是否為對(duì)稱防火墻、無(wú)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ù)器有無(wú)應(yīng)答,以確定客戶端是否為限制型NAT以及端口限制型NAT,在所述第三判斷子模塊完成以及所述打洞模塊之前執(zhí)行。
9.根據(jù)權(quán)利要求7所述的一種融合UPNP及STUN的P2P穿越系統(tǒng),其特征在于,所述打洞模塊包括在所述第四判斷子模塊完成之后的打洞主控子模塊、第一打洞子模塊、第二打洞子模塊、第三打洞子模塊、第四打洞子模塊、第五打洞子模塊、第六打洞子模塊、第七打洞子模塊以及第八打洞子模塊;
所述第一打洞子模塊,用于當(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)客戶端通過(guò)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)客戶端通過(guò)本地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)客戶端通過(guò)本地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之間,受控于所述打洞主控子模塊。