本申請(qǐng)涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,特別涉及一種P2P連接建立的方法和裝置。
背景技術(shù):
P2P是指對(duì)等網(wǎng)絡(luò)中的設(shè)備之間可以互相通信和共享資源,網(wǎng)絡(luò)中大部分設(shè)備位于NAT后,若要成功建立P2P連接,都需要進(jìn)行NAT穿越。
在現(xiàn)有技術(shù)中,位于NAT后的客戶端需要與對(duì)端客戶端建立P2P連接時(shí),本端客戶端可以與服務(wù)端建立連接,然后通過(guò)服務(wù)端獲取本端的外網(wǎng)地址信息、服務(wù)端為本端分配的轉(zhuǎn)發(fā)地址信息,以及服務(wù)端轉(zhuǎn)發(fā)的對(duì)端客戶端的外網(wǎng)地址信息、內(nèi)網(wǎng)地址信息、服務(wù)端為對(duì)端分配的轉(zhuǎn)發(fā)地址信息。本端客戶端可以將本端的內(nèi)網(wǎng)地址信息作為源地址信息,將對(duì)端客戶端的內(nèi)網(wǎng)地址信息作為目的地址信息,與對(duì)端嘗試建立連接。當(dāng)嘗試建立連接的時(shí)間超過(guò)預(yù)設(shè)的時(shí)間后,本端客戶端可以將本端的外網(wǎng)地址信息作為源地址信息,將對(duì)端客戶端的外網(wǎng)地址信息作為目的地址信息,與對(duì)端客戶端嘗試建立連接。當(dāng)嘗試建立連接的時(shí)候再次超過(guò)預(yù)設(shè)的時(shí)間后,本端客戶端可以將服務(wù)端作為中繼服務(wù)端,基于所述服務(wù)端為本端和對(duì)端分配的轉(zhuǎn)發(fā)地址信息,由所述NAT服務(wù)端實(shí)現(xiàn)本端客戶端與對(duì)端客戶端間的間接連接。
由于本端客戶端與對(duì)端客戶端在建立連接時(shí)無(wú)法確定成功建立兩端間連接的連接方式,因此本端客戶端和對(duì)端客戶端需要嘗試性連接,從而導(dǎo)致本端客戶端與對(duì)端客戶端成功建立連接的響應(yīng)時(shí)長(zhǎng)太長(zhǎng)。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請(qǐng)?zhí)峁┮环NP2P連接建立的方法和裝置,應(yīng)用于NAT客戶端,采用本申請(qǐng)?zhí)岢龅募夹g(shù)方法,可以加快P2P連接的建立。
具體地,本申請(qǐng)是通過(guò)如下技術(shù)方案實(shí)現(xiàn)的:
一種P2P連接建立的方法,應(yīng)用于NAT客戶端,其中,NAT服務(wù)端具有檢測(cè)NAT類型的功能,所述客戶端加載了P2P連接算法,所述P2P連接算法為基于本端和對(duì)端客戶端的NAT類型確定兩端間的連接方式,包括:
獲取通過(guò)NAT服務(wù)端確定的本端的NAT類型;以及,獲取本端的外網(wǎng)地址信息和所述NAT服務(wù)端分配的轉(zhuǎn)發(fā)地址信息;
將本端NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息發(fā)送至NAT服務(wù)端,以由所述NAT服務(wù)端將本端NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息轉(zhuǎn)發(fā)至對(duì)端客戶端,并接收所述NAT服務(wù)端發(fā)送的對(duì)端客戶端的NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息;
基于本端NAT類型和對(duì)端客戶端的NAT類型,通過(guò)P2P連接算法確定本端與對(duì)端間的連接方式,并基于所述連接方式與對(duì)端建立P2P連接。
一種P2P連接建立的裝置,應(yīng)用于NAT客戶端,其中,NAT服務(wù)端具有檢測(cè)NAT類型的功能,所述客戶端加載了P2P連接算法,所述P2P連接算法為基于本端和對(duì)端客戶端的NAT類型確定兩端間的連接方式,包括:
獲取單元,用于獲取通過(guò)NAT服務(wù)端確定的本端的NAT類型;以及,獲取本端的外網(wǎng)地址信息和所述NAT服務(wù)端分配的轉(zhuǎn)發(fā)地址信息;
發(fā)接單元,用于將本端NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息發(fā)送至NAT服務(wù)端,以由所述NAT服務(wù)端將本端NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息轉(zhuǎn)發(fā)至對(duì)端客戶端,并接收所述NAT服務(wù)端發(fā)送的對(duì)端客戶端的NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息;
確定單元,用于基于本端NAT類型和對(duì)端客戶端的NAT類型,通過(guò)P2P連接算法確定本端與對(duì)端間的連接方式,并基于所述連接方式與對(duì)端建立P2P連接。
本申請(qǐng)?zhí)岢龅募夹g(shù)方法中,由于本端客戶端和對(duì)端客戶端可以通過(guò)NAT服務(wù)端的NAT類型檢測(cè)功能確定各端的NAT類型,并可以通過(guò)所述NAT服務(wù)端將本端的NAT類型轉(zhuǎn)發(fā)至對(duì)端客戶端,以及獲取到所述NAT服務(wù)端轉(zhuǎn)發(fā)至本端的對(duì)端的NAT類型。
其次,本端客戶端與對(duì)端客戶端分別向所述NAT服務(wù)端發(fā)送訪問(wèn)請(qǐng)求后,本端客戶端和對(duì)端客戶端在接收到所述NAT服務(wù)端返回的響應(yīng)消息中,可以獲取到各自的外網(wǎng)地址信息,以及服務(wù)端為各端分配的轉(zhuǎn)發(fā)地址信息。
此外,本端客戶端將本端的外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息,通過(guò)所述NAT服務(wù)端轉(zhuǎn)發(fā)至對(duì)端客戶端,以及接收所述NAT服務(wù)端轉(zhuǎn)發(fā)至本端的對(duì)端客戶端的外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息。
本端客戶端確定本端和對(duì)端的NAT類型后,可以基于預(yù)設(shè)的P2P連接算法計(jì)算確定出兩端間的連接方式,并根據(jù)本端的外網(wǎng)地址信息和轉(zhuǎn)發(fā)地址信息,對(duì)端客戶端的外網(wǎng)地址信息和轉(zhuǎn)發(fā)地址信息,按照計(jì)算確定出的兩端間的連接方式建立相應(yīng)的連接,因此可以節(jié)省兩端嘗試性連接時(shí)消耗的時(shí)間,從而可以縮短兩端成功建立連接時(shí)的響應(yīng)時(shí)長(zhǎng)。
附圖說(shuō)明
圖1為本申請(qǐng)實(shí)施例示出的一種P2P連接建立的網(wǎng)絡(luò)架構(gòu)示意圖;
圖2為本申請(qǐng)實(shí)施例示例性示出的一種P2P連接建立的方法流程圖;
圖3為本申請(qǐng)實(shí)施例示出的NAT客戶端獲取外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息的示意圖;
圖4為本申請(qǐng)一種P2P連接建立的裝置所在NAT客戶端的一種硬件結(jié)構(gòu)圖;
圖5為本申請(qǐng)實(shí)施例示例性示出的一種P2P連接建立的裝置。
具體實(shí)施方式
這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說(shuō)明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請(qǐng)相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請(qǐng)的一些方面相一致的裝置和方法的例子。
在本申請(qǐng)使用的術(shù)語(yǔ)是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請(qǐng)。在本申請(qǐng)和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語(yǔ)“和/或”是指并包含一個(gè)或多個(gè)相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請(qǐng)可能采用術(shù)語(yǔ)第一、第二、第三等來(lái)描述各種信息,但這些信息不應(yīng)限于這些術(shù)語(yǔ)。這些術(shù)語(yǔ)僅用來(lái)將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請(qǐng)范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語(yǔ)境,如在此所使用的詞語(yǔ)“如果”可以被解釋成為“在……時(shí)”或“當(dāng)……時(shí)”或“響應(yīng)于確定”。
在網(wǎng)絡(luò)中,分別位于不同的NAT后的兩個(gè)NAT客戶端需要建立P2P連接時(shí),各NAT客戶端均需要穿越對(duì)端的NAT后才能與對(duì)端客戶端成功建立P2P連接。
在現(xiàn)有技術(shù)中,當(dāng)本端客戶端需要與對(duì)端客戶端建立連接時(shí),其中,此時(shí)本端客戶端與對(duì)端客戶端均不確定是否分別位于不同的NAT后,本端客戶端可以與所述NAT服務(wù)端建立連接,然后向NAT服務(wù)端發(fā)送訪問(wèn)請(qǐng)求;其中所述訪問(wèn)請(qǐng)求中攜帶獲取本端客戶端的外網(wǎng)地址信息與為本端分配的轉(zhuǎn)發(fā)地址信息的命令。當(dāng)所述NAT服務(wù)端接收到所述訪問(wèn)請(qǐng)求后,向本端客戶端返回響應(yīng)消息;其中,所述響應(yīng)消息中攜帶本端客戶端的外網(wǎng)地址信息以及為本端分配的轉(zhuǎn)發(fā)地址信息。
當(dāng)本端客戶端接收到所述響應(yīng)消息時(shí),可以從所述響應(yīng)消息中獲取本端客戶端的外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息。本端客戶端可以將本端的內(nèi)網(wǎng)地址信息、外網(wǎng)地址信息,以及轉(zhuǎn)發(fā)地址信息,通過(guò)所述NAT服務(wù)端轉(zhuǎn)發(fā)至對(duì)端客戶端。同樣地,對(duì)端客戶端也會(huì)完成同樣的操作,將對(duì)端的內(nèi)網(wǎng)地址信息、外網(wǎng)地址信息,以及轉(zhuǎn)發(fā)地址信息,通過(guò)所述NAT服務(wù)端轉(zhuǎn)發(fā)至本端客戶端。
本端客戶端和對(duì)端客戶端在不確定是否分別位于不同的NAT后,以及是否在同一個(gè)局域網(wǎng)內(nèi)的情況下,本端客戶端可以基于本端的內(nèi)網(wǎng)地址信息、外網(wǎng)地址信息、轉(zhuǎn)發(fā)地址信息,以及對(duì)端的內(nèi)網(wǎng)地址信息、外網(wǎng)地址信息,轉(zhuǎn)發(fā)地址信息,與對(duì)端客戶端進(jìn)行嘗試性連接。
本端客戶端可以將本端的內(nèi)網(wǎng)地址信息作為源地址信息,將對(duì)端客戶端的內(nèi)網(wǎng)地址信息作為目的地址信息,與對(duì)端嘗試建立連接。當(dāng)嘗試建立連接的時(shí)間超過(guò)預(yù)設(shè)的時(shí)間后,本端客戶端可以將本端的外網(wǎng)地址信息作為源地址信息,將對(duì)端客戶端的外網(wǎng)地址信息作為目的地址信息,與對(duì)端客戶端嘗試建立連接。當(dāng)嘗試建立連接的時(shí)候再次超過(guò)預(yù)設(shè)的時(shí)間后,本端客戶端可以將服務(wù)端作為中繼服務(wù)端,基于所述服務(wù)端為本端和對(duì)端分配的轉(zhuǎn)發(fā)地址信息,由所述NAT服務(wù)端實(shí)現(xiàn)本端客戶端與對(duì)端客戶端間的間接連接。
其中,本端客戶端與對(duì)端客戶端嘗試性連接時(shí),本端客戶端會(huì)根據(jù)需要可以通過(guò)轉(zhuǎn)發(fā)地址信息優(yōu)先與對(duì)端客戶端嘗試間接連接,未成功后之后再進(jìn)行其它方式的連接。各客戶端與對(duì)端客戶端嘗試性連接時(shí),嘗試各連接方式的先后順序根據(jù)需要可以調(diào)整。
綜上所述,可以看出,由于本端客戶端與對(duì)端客戶端需要建立連接時(shí),進(jìn)行嘗試性連接,因此本端客戶端與對(duì)端客戶端成功建立連接的響應(yīng)時(shí)長(zhǎng)太長(zhǎng)。
為了解決現(xiàn)有技術(shù)中的問(wèn)題,本申請(qǐng)?zhí)峁┝艘环NP2P連接建立的方法,應(yīng)用于NAT客戶端,其中,NAT服務(wù)端具有檢測(cè)NAT類型的功能,所述客戶端加載了P2P連接算法,所述P2P連接算法為基于本端和對(duì)端客戶端的NAT類型確定兩端間的連接方式,所述方法包括:獲取通過(guò)NAT服務(wù)端確定的本端的NAT類型;以及,獲取本端的外網(wǎng)地址信息和所述NAT服務(wù)端分配的轉(zhuǎn)發(fā)地址信息;將本端NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息發(fā)送至NAT服務(wù)端,以由所述NAT服務(wù)端將本端NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息轉(zhuǎn)發(fā)至對(duì)端客戶端,并接收所述NAT服務(wù)端發(fā)送的對(duì)端客戶端的NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息;基于本端NAT類型和對(duì)端客戶端的NAT類型,通過(guò)P2P連接算法確定本端與對(duì)端間的連接方式,并基于所述連接方式與對(duì)端建立P2P連接。
本申請(qǐng)?zhí)岢龅募夹g(shù)方法中,由于本端客戶端和對(duì)端客戶端可以通過(guò)NAT服務(wù)端的NAT類型檢測(cè)功能確定各端的NAT類型,并可以通過(guò)所述NAT服務(wù)端將本端的NAT類型轉(zhuǎn)發(fā)至對(duì)端客戶端,以及獲取到所述NAT服務(wù)端轉(zhuǎn)發(fā)至本端的對(duì)端的NAT類型。
其次,本端客戶端與對(duì)端客戶端分別向所述NAT服務(wù)端發(fā)送訪問(wèn)請(qǐng)求后,本端客戶端和對(duì)端客戶端在接收到所述NAT服務(wù)端返回的響應(yīng)消息中,可以獲取到各自的外網(wǎng)地址信息,以及服務(wù)端為各端分配的轉(zhuǎn)發(fā)地址信息。
此外,本端客戶端將本端的外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息,通過(guò)所述NAT服務(wù)端轉(zhuǎn)發(fā)至對(duì)端客戶端,以及接收所述NAT服務(wù)端轉(zhuǎn)發(fā)至本端的對(duì)端客戶端的外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息。
本端客戶端確定本端和對(duì)端的NAT類型后,可以基于預(yù)設(shè)的P2P連接算法計(jì)算確定出兩端間的連接方式,并根據(jù)本端的外網(wǎng)地址信息和轉(zhuǎn)發(fā)地址信息,對(duì)端客戶端的外網(wǎng)地址信息和轉(zhuǎn)發(fā)地址信息,按照計(jì)算確定出的兩端間的連接方式建立相應(yīng)的連接,因此可以節(jié)省兩端嘗試性連接時(shí)消耗的時(shí)間,從而可以縮短兩端成功建立連接時(shí)的響應(yīng)時(shí)長(zhǎng)。
以下通過(guò)具體的實(shí)施例和示意圖對(duì)本申請(qǐng)?zhí)岢龅募夹g(shù)方法進(jìn)行描述。
請(qǐng)參見圖1,圖1為本申請(qǐng)實(shí)施例示出的一種P2P連接建立的網(wǎng)絡(luò)架構(gòu)示意圖。
其中,所述NAT網(wǎng)關(guān)用于隔離外網(wǎng)資源和內(nèi)網(wǎng)資源,防止外網(wǎng)用戶竊取內(nèi)網(wǎng)資源,從而保護(hù)內(nèi)網(wǎng)資源。當(dāng)內(nèi)網(wǎng)用戶訪問(wèn)外網(wǎng)資源時(shí),所述NAT網(wǎng)關(guān)可以將內(nèi)網(wǎng)用戶的內(nèi)網(wǎng)地址轉(zhuǎn)換成外網(wǎng)地址,從而為內(nèi)網(wǎng)用戶提供訪問(wèn)外網(wǎng)資源的途徑,同時(shí)所述NAT網(wǎng)關(guān)會(huì)保存該內(nèi)網(wǎng)地址與該外網(wǎng)地址的映射關(guān)系。
所述服務(wù)端為STUN服務(wù)器、TURN服務(wù)器、ICE服務(wù)器、NAT類型檢測(cè)服務(wù)器等服務(wù)器組成的服務(wù)器集群。其中所述ICE服務(wù)器具有所述STUN服務(wù)器和所述TURN服務(wù)器的功能,通常所述服務(wù)端會(huì)同時(shí)配置所述STUN服務(wù)器和所述TURN服務(wù)器,或者單獨(dú)配置ICE服務(wù)器。其中,上述STUN服務(wù)器用于接收和轉(zhuǎn)發(fā)各NAT客戶端的外網(wǎng)地址信息。上述TURN服務(wù)器作為中繼服務(wù)器,用于接收和轉(zhuǎn)發(fā)各NAT客戶端的外網(wǎng)地址信息和數(shù)據(jù)報(bào)文。
如果需要建立P2P連接的兩個(gè)NAT客戶端位于同一個(gè)局域網(wǎng),比如圖1中的NAT客戶端A和NAT客戶端B,在這樣的情況下,所述兩個(gè)NAT客戶端通過(guò)二層網(wǎng)絡(luò)就可以實(shí)現(xiàn)通信。
如果需要建立P2P連接的兩個(gè)NAT客戶端分別位于不同的局域網(wǎng),比如圖1中的NAT客戶端A和NAT客戶端B,在這樣的情況下,所述兩個(gè)NAT客戶端需要分別穿越對(duì)端的NAT后才能與對(duì)端建立連接。
其中,NAT包括非對(duì)稱型NAT和對(duì)稱型NAT。分別位于不同NAT后的兩個(gè)NAT客戶端建立連接時(shí),如果所述兩個(gè)NAT客戶端的NAT類型均為非對(duì)稱型,那么所述兩個(gè)NAT客戶端可以通過(guò)本端與對(duì)端的外網(wǎng)地址直接建立連接,也可以通過(guò)TURN服務(wù)器或者ICE服務(wù)器實(shí)現(xiàn)兩端間的間接連接。如果所述兩個(gè)NAT客戶端中任一端的NAT類型為對(duì)稱型,那么所述兩個(gè)NAT客戶端只能通過(guò)TURN服務(wù)器或者ICE服務(wù)器實(shí)現(xiàn)兩端間的間接連接
因此,所述兩個(gè)NAT客戶端建立連接時(shí),只有三種情況:1)、同一局域網(wǎng)內(nèi)的連接;2)、所述兩個(gè)NAT客戶端的NAT類型均為非對(duì)稱型時(shí)的連接;3)、所述兩個(gè)NAT客戶端中任一端的NAT類型為對(duì)稱型時(shí)的連接。
請(qǐng)參見圖2,圖2為本申請(qǐng)實(shí)施例示例性示出的一種P2P連接建立的方法流程圖,應(yīng)用于NAT客戶端,具體執(zhí)行以下步驟:
步驟201:獲取通過(guò)NAT服務(wù)端確定的本端的NAT類型;以及,獲取本端的外網(wǎng)地址信息和所述NAT服務(wù)端分配的轉(zhuǎn)發(fā)地址信息;
在本申請(qǐng)中,本端客戶端可以通過(guò)所述NAT服務(wù)端確定本端的NAT類型,并獲取本端的外網(wǎng)地址信息、轉(zhuǎn)發(fā)地址信息和內(nèi)網(wǎng)地址信息。本端客戶端將本端的NAT類型和這三個(gè)地址信息發(fā)送至所述NAT服務(wù)端,并由所述NAT服務(wù)端轉(zhuǎn)發(fā)至對(duì)端客戶端,同樣地,本端客戶端也會(huì)接收到所述NAT服務(wù)端轉(zhuǎn)發(fā)的對(duì)端客戶端的NAT類型和對(duì)端的三個(gè)地址信息。最后,根據(jù)預(yù)設(shè)的P2P連接算法對(duì)本端和對(duì)端的NAT類型進(jìn)行計(jì)算并確定出連接方式,基于所述連接方式實(shí)現(xiàn)兩端間的連接。
其中,上述NAT服務(wù)端具有檢測(cè)NAT類型的功能。NAT客戶端可以通過(guò)所述NAT服務(wù)端來(lái)確定本端的NAT類型。在實(shí)現(xiàn)時(shí),所述服務(wù)端的STUN服務(wù)器、TURN服務(wù)器、ICE服務(wù)器均具備檢測(cè)NAT類型的功能,然而這些服務(wù)器在檢測(cè)NAT類型時(shí)操作復(fù)雜,同時(shí)會(huì)增加這些服務(wù)器的負(fù)擔(dān)。因此,在本申請(qǐng)中,所述NAT服務(wù)端可以配置NAT類型檢測(cè)服務(wù)器,在所述NAT類型檢測(cè)服務(wù)器上加載NAT類型檢測(cè)程序。
在本申請(qǐng)中,當(dāng)本端客戶端需要檢測(cè)本端的NAT類型時(shí),可以向所述NAT類型檢測(cè)服務(wù)器發(fā)送NAT類型檢測(cè)請(qǐng)求。所述NAT類型檢測(cè)服務(wù)器接收到所述NAT類型檢測(cè)請(qǐng)求后,可以啟動(dòng)NAT類型檢測(cè)程序?qū)Ρ径说腘AT類型進(jìn)行檢測(cè),并將檢測(cè)結(jié)果返回至本端客戶端。本端客戶端可以將本端的NAT類型保存于本地。同樣地,對(duì)端客戶端也可以執(zhí)行同樣的操作,獲取到其本端的NAT類型。
請(qǐng)參見圖3,圖3為本申請(qǐng)實(shí)施例示出的NAT客戶端獲取外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息的示意圖。
本端客戶端不僅可以通過(guò)所述服務(wù)端確定本端的NAT類型,也可以向所述NAT服務(wù)端的STUN服務(wù)器或者ICE服務(wù)器發(fā)送訪問(wèn)請(qǐng)求。
如果本端客戶端向所述STUN服務(wù)器發(fā)送訪問(wèn)請(qǐng)求,所述STUN服務(wù)器可以獲取訪問(wèn)請(qǐng)求中的源地址信息(外網(wǎng)地址信息),并向TURN服務(wù)器發(fā)送獲取轉(zhuǎn)發(fā)地址信息的請(qǐng)求。所述TURN服務(wù)器接收到STUN服務(wù)器發(fā)送的請(qǐng)求后,可以為本端客戶端分配一個(gè)轉(zhuǎn)發(fā)地址信息,并將所述轉(zhuǎn)發(fā)地址信息返回至所述STUN服務(wù)器。所述STUN服務(wù)器可以將所述源地址信息與所述轉(zhuǎn)發(fā)地址信息攜帶于響應(yīng)消息中,并將所述響應(yīng)消息返回至本端客戶端。本端客戶端接收到所述響應(yīng)消息后,可以從所述響應(yīng)消息中獲取本端的外網(wǎng)地址信息以及所述服務(wù)端為本端客戶端分配的轉(zhuǎn)發(fā)地址信息。
如果本端客戶端向所述ICE服務(wù)器發(fā)送訪問(wèn)請(qǐng)求,所述ICE服務(wù)器可以獲取訪問(wèn)請(qǐng)求中的源地址信息(外網(wǎng)地址信息),并為本端客戶端分配一個(gè)轉(zhuǎn)發(fā)地址信息。然后,所述STUN服務(wù)器可以將所述源地址信息與所述轉(zhuǎn)發(fā)地址信息攜帶于響應(yīng)消息中,并將所述響應(yīng)消息返回至本端客戶端。本端客戶端接收到所述響應(yīng)消息后,可以從所述響應(yīng)消息中獲取本端的外網(wǎng)地址信息以及所述服務(wù)端為本端客戶端分配的轉(zhuǎn)發(fā)地址信息。
同樣地,對(duì)端客戶端也執(zhí)行相同的操作,在此不再贅述。
步驟202:將本端NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息發(fā)送至NAT服務(wù)端,以由所述NAT服務(wù)端將本端NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息轉(zhuǎn)發(fā)至對(duì)端客戶端,并接收所述NAT服務(wù)端發(fā)送的對(duì)端客戶端的NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息;
此時(shí),本端客戶端已經(jīng)確定了本端的NAT類型,并已經(jīng)獲取到了本端的外網(wǎng)地址信息和轉(zhuǎn)發(fā)地址信息,本端客戶端可以獲取本端的內(nèi)網(wǎng)地址信息。然后,本端客戶端可以將本端客戶端的NAT類型、內(nèi)網(wǎng)地址信息、外網(wǎng)地址信息、轉(zhuǎn)發(fā)地址信息發(fā)送至所述NAT服務(wù)端,并由所述NAT服務(wù)端將這些信息發(fā)送至對(duì)端客戶端。對(duì)端客戶端同樣也會(huì)執(zhí)行相同的操作,在此不再贅述。
其中,上述信息的接收和轉(zhuǎn)發(fā)可以由所述NAT服務(wù)端中的任一具備轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)文功能的服務(wù)器來(lái)完成,也可以由另外配置的專用服務(wù)器來(lái)轉(zhuǎn)發(fā)上述信息(比如企業(yè)專用服務(wù)器vane服務(wù)器)。
步驟203:基于本端NAT類型和對(duì)端客戶端的NAT類型,通過(guò)P2P連接算法確定本端與對(duì)端間的連接方式,并基于所述連接方式與對(duì)端建立P2P連接。
當(dāng)本端客戶端接收到所述服務(wù)端轉(zhuǎn)發(fā)的對(duì)端客戶端的NAT類型、內(nèi)網(wǎng)地址信息、外網(wǎng)地址信息、轉(zhuǎn)發(fā)地址信息發(fā)送至所述NAT服務(wù)端后,本端客戶端可以根據(jù)本端客戶端的內(nèi)網(wǎng)IP地址與對(duì)端客戶端的內(nèi)網(wǎng)IP地址,判斷本端客戶端和對(duì)端客戶端是否在同一個(gè)局域網(wǎng)。如果在同一個(gè)局域網(wǎng),那么本端客戶端與對(duì)端客戶端可以直接在局域網(wǎng)內(nèi)實(shí)現(xiàn)二層連接。
如果不在同一個(gè)局域網(wǎng)內(nèi),本端客戶端可以基于本端客戶端的NAT類型和對(duì)端客戶端的NAT類型,通過(guò)預(yù)設(shè)的P2P連接算法,進(jìn)一步確定兩端間的連接方式。
在實(shí)現(xiàn)時(shí),本端客戶端可以通過(guò)所述預(yù)設(shè)的P2P連接算法對(duì)本端客戶端的NAT類型和對(duì)端客戶端的NAT類型進(jìn)行計(jì)算,并根據(jù)計(jì)算結(jié)果確定兩端間的連接方式。
其中,如果本端客戶端的NAT類型和對(duì)端客戶端的NAT類型均為非對(duì)稱型,本端客戶端可以將對(duì)端客戶端的外網(wǎng)地址信息作為目的地址信息,向?qū)Χ丝蛻舳税l(fā)起連接請(qǐng)求,所述連接請(qǐng)求會(huì)經(jīng)過(guò)本端客戶端的NAT網(wǎng)關(guān)。本端客戶端的NAT網(wǎng)關(guān)可以將所述連接請(qǐng)求的內(nèi)網(wǎng)地址信息轉(zhuǎn)化成外網(wǎng)地址信息,然后再將所述連接請(qǐng)求發(fā)送至對(duì)端客戶端的NAT網(wǎng)關(guān),同時(shí)本端客戶端的NAT網(wǎng)關(guān)可以保存本端客戶端的外網(wǎng)地址信息與對(duì)端客戶端的外網(wǎng)地址信息的映射關(guān)系。
對(duì)端客戶端同時(shí)也和本端客戶端執(zhí)行著類似的操作,在此不再贅述。
本端客戶端的NAT網(wǎng)關(guān)接收到對(duì)端客戶端發(fā)送的連接請(qǐng)求后,由于本端客戶端的NAT網(wǎng)關(guān)上存在著對(duì)端客戶端的外網(wǎng)地址信息與本端客戶端的外網(wǎng)地址信息的映射關(guān)系,因此本端客戶端會(huì)接收所述連接請(qǐng)求,與對(duì)端客戶端成功建立連接,對(duì)端客戶端同樣如此。
如果本端客戶端和對(duì)端客戶端中任一端的NAT類型為對(duì)稱型,本端客戶端將本端客戶端的轉(zhuǎn)發(fā)地址信息作為目的地址信息,向所述服務(wù)端的TURN服務(wù)器或者ICE服務(wù)器發(fā)送連接請(qǐng)求;其中,所述連接請(qǐng)求中攜帶了將所述連接請(qǐng)求從對(duì)端客戶端的轉(zhuǎn)發(fā)地址信息中的端口轉(zhuǎn)發(fā)至對(duì)端客戶端的命令。然后,本端客戶端的NAT網(wǎng)關(guān)可以建立本端客戶端的外網(wǎng)地址信息與本端客戶端的轉(zhuǎn)發(fā)地址信息的映射關(guān)系。
需要說(shuō)明的是,本端客戶端的轉(zhuǎn)發(fā)地址信息和對(duì)端客戶端的轉(zhuǎn)發(fā)地址信息中的IP地址相同,均為TURN服務(wù)器或者ICE服務(wù)器的IP地址,但端口號(hào)不一樣。
對(duì)端客戶端與本端客戶端同時(shí)進(jìn)行著類似的操作,在此不再贅述。
本端客戶端的NAT網(wǎng)關(guān)接收到TURN服務(wù)器或者ICE服務(wù)器轉(zhuǎn)發(fā)的連接請(qǐng)求后,由于本端客戶端的NAT網(wǎng)關(guān)上存在著本端客戶端的轉(zhuǎn)發(fā)地址信息與本端客戶端的外網(wǎng)地址信息的映射關(guān)系,因此本端客戶端會(huì)接收所述連接請(qǐng)求,與對(duì)端客戶端間接地成功建立連接,對(duì)端客戶端同樣如此,后續(xù)本端客戶端與對(duì)端客戶端之間發(fā)送的數(shù)據(jù)報(bào)文均由所述TURN服務(wù)器或者ICE服務(wù)器進(jìn)行轉(zhuǎn)發(fā)。
需要說(shuō)明的是,如果本端客戶端和對(duì)端客戶端的NAT類型均為非對(duì)稱型,依然可以通過(guò)所述TURN服務(wù)器或者ICE服務(wù)器,實(shí)現(xiàn)兩端間的間接連接。然而,這樣會(huì)增大所述TURN服務(wù)器或者ICE服務(wù)器的數(shù)據(jù)報(bào)文的轉(zhuǎn)發(fā)量,導(dǎo)致所述TURN服務(wù)器或者所述ICE服務(wù)器的轉(zhuǎn)發(fā)效率下降,因此如果本端客戶端和對(duì)端客戶端的NAT類型均為非對(duì)稱型,通常將所述兩個(gè)客戶端直接建立連接。
根據(jù)上述本申請(qǐng)?zhí)岢龅募夹g(shù)方案可以看出,由于本端客戶端和對(duì)端客戶端可以通過(guò)NAT服務(wù)端的NAT類型檢測(cè)功能確定各端的NAT類型,并可以通過(guò)所述NAT服務(wù)端將本端的NAT類型轉(zhuǎn)發(fā)至對(duì)端客戶端,以及獲取到所述NAT服務(wù)端轉(zhuǎn)發(fā)至本端的對(duì)端的NAT類型。
其次,本端客戶端與對(duì)端客戶端分別向所述NAT服務(wù)端發(fā)送訪問(wèn)請(qǐng)求后,本端客戶端和對(duì)端客戶端在接收到所述NAT服務(wù)端返回的響應(yīng)消息中,可以獲取到各自的外網(wǎng)地址信息,以及服務(wù)端為各端分配的轉(zhuǎn)發(fā)地址信息。
此外,本端客戶端將本端的外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息,通過(guò)所述NAT服務(wù)端轉(zhuǎn)發(fā)至對(duì)端客戶端,以及接收所述NAT服務(wù)端轉(zhuǎn)發(fā)至本端的對(duì)端客戶端的外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息。
本端客戶端確定本端和對(duì)端的NAT類型后,可以基于預(yù)設(shè)的P2P連接算法計(jì)算確定出兩端間的連接方式,并根據(jù)本端的外網(wǎng)地址信息和轉(zhuǎn)發(fā)地址信息,對(duì)端客戶端的外網(wǎng)地址信息和轉(zhuǎn)發(fā)地址信息,按照計(jì)算確定出的兩端間的連接方式建立相應(yīng)的連接,因此可以節(jié)省兩端嘗試性連接時(shí)消耗的時(shí)間,從而可以縮短兩端成功建立連接時(shí)的響應(yīng)時(shí)長(zhǎng)。
與前述一種P2P連接建立的方法的實(shí)施例相對(duì)應(yīng),本申請(qǐng)還提供了一種P2P連接建立的裝置的實(shí)施例。
本申請(qǐng)一種P2P連接建立的裝置的實(shí)施例可以應(yīng)用在NAT客戶端上。裝置實(shí)施例可以通過(guò)軟件實(shí)現(xiàn),也可以通過(guò)硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,作為一個(gè)邏輯意義上的裝置,是通過(guò)其所在NAT客戶端的處理器將非易失性存儲(chǔ)器中對(duì)應(yīng)的計(jì)算機(jī)程序指令讀取到內(nèi)存中運(yùn)行形成的。從硬件層面而言,如圖4所示,為本申請(qǐng)一種P2P連接建立的裝置所在NAT客戶端的一種硬件結(jié)構(gòu)圖,除了圖4所示的處理器、內(nèi)存、網(wǎng)絡(luò)接口、以及非易失性存儲(chǔ)器之外,實(shí)施例中裝置所在的NAT客戶端通常根據(jù)該P(yáng)2P連接建立的實(shí)際功能,還可以包括其他硬件,對(duì)此不再贅述。
請(qǐng)參考圖5,圖5為本申請(qǐng)實(shí)施例示例性示出的一種P2P連接建立的裝置,應(yīng)用于NAT客戶端,其中,NAT服務(wù)端具有檢測(cè)NAT類型的功能,所述客戶端加載了P2P連接算法,所述P2P連接算法為基于本端和對(duì)端客戶端的NAT類型確定兩端間的連接方式,所述裝置包括:獲取單元510,發(fā)接單元520,確定單元530。
其中,所述獲取單元510,用于獲取通過(guò)NAT服務(wù)端確定的本端的NAT類型;以及,獲取本端的外網(wǎng)地址信息和所述NAT服務(wù)端分配的轉(zhuǎn)發(fā)地址信息;
所述發(fā)接單元520,用于將本端NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息發(fā)送至NAT服務(wù)端,以由所述NAT服務(wù)端將本端NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息轉(zhuǎn)發(fā)至對(duì)端客戶端,并接收所述NAT服務(wù)端發(fā)送的對(duì)端客戶端的NAT類型、外網(wǎng)地址信息以及轉(zhuǎn)發(fā)地址信息;
所述確定單元530,用于基于本端NAT類型和對(duì)端客戶端的NAT類型,通過(guò)P2P連接算法確定本端與對(duì)端間的連接方式,并基于所述連接方式與對(duì)端建立P2P連接。
在本申請(qǐng)中,所述P2P連接算法包括:
當(dāng)本端和對(duì)端客戶端的NAT類型均為非對(duì)稱型時(shí),將對(duì)端客戶端的外網(wǎng)地址信息作為目的地址信息,建立本端與對(duì)端間的連接;
當(dāng)本端和對(duì)端客戶端的NAT類型中任一端的NAT類型為對(duì)稱型時(shí),將所述NAT服務(wù)端作為中繼服務(wù)端,基于本端客戶端和對(duì)端客戶端的轉(zhuǎn)發(fā)地址信息,由所述NAT服務(wù)端實(shí)現(xiàn)本端與對(duì)端客戶端間的間接連接。
其中,在本申請(qǐng)的實(shí)施例中,所述NAT服務(wù)端配置了NAT類型檢測(cè)服務(wù)器;其中,所述NAT類型檢測(cè)服務(wù)器加載了NAT類型檢測(cè)程序;
所述獲取單元510具體用于:
向所述NAT服務(wù)端發(fā)送NAT類型檢測(cè)請(qǐng)求,以使所述NAT服務(wù)端接收到所述NAT類型檢測(cè)請(qǐng)求后,基于所述NAT類型檢測(cè)程序檢測(cè)本端的NAT類型,并將檢測(cè)結(jié)果返回至客戶端;
接收所述NAT服務(wù)端發(fā)送的檢測(cè)結(jié)果,并保存所述檢測(cè)結(jié)果。
另外,在本申請(qǐng)的實(shí)施例中,如果所述本端客戶端和對(duì)端客戶端在同一個(gè)局域網(wǎng)內(nèi),在這樣的情況下,為了使兩端建立連接,本申請(qǐng)的所述裝置中還包括:
第二發(fā)接單元,用于將本端的內(nèi)網(wǎng)地址信息發(fā)送至NAT服務(wù)端,以由所述NAT服務(wù)端將所述內(nèi)網(wǎng)地址信息轉(zhuǎn)發(fā)至對(duì)端客戶端,并接收所述NAT服務(wù)端發(fā)送的對(duì)端客戶端的內(nèi)網(wǎng)地址信息;
判斷單元,用于基于本端的內(nèi)網(wǎng)地址信息與對(duì)端客戶端的內(nèi)網(wǎng)地址信息,判斷本端客戶端與對(duì)端客戶端是否在同一個(gè)局域網(wǎng);
建立單元,用于如果本端客戶端與對(duì)端客戶端在同一個(gè)局域網(wǎng),通過(guò)本端的內(nèi)網(wǎng)地址信息與對(duì)端客戶端的內(nèi)網(wǎng)地址信息,建立本端與對(duì)端客戶端間的連接。
如果所述本端客戶端和對(duì)端客戶端不在同一個(gè)局域網(wǎng),通過(guò)本端和對(duì)端客戶端的NAT類型進(jìn)一步確定兩端的連接方式;
所述確定單元530具體用于:
通過(guò)所述P2P連接算法對(duì)本端的NAT類型和對(duì)端客戶端的NAT類型進(jìn)行計(jì)算;
根據(jù)計(jì)算結(jié)果,確定本端與對(duì)端客戶端間的連接方式。
上述裝置中各個(gè)單元的功能和作用的實(shí)現(xiàn)過(guò)程具體詳見上述方法中對(duì)應(yīng)步驟的實(shí)現(xiàn)過(guò)程,在此不再贅述。
對(duì)于裝置實(shí)施例而言,由于其基本對(duì)應(yīng)于方法實(shí)施例,所以相關(guān)之處參見方法實(shí)施例的部分說(shuō)明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本申請(qǐng)方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。
以上所述僅為本申請(qǐng)的較佳實(shí)施例而已,并不用以限制本申請(qǐng),凡在本申請(qǐng)的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)保護(hù)的范圍之內(nèi)。