專利名稱:一種對等網(wǎng)絡(luò)中充分利用帶寬資源的數(shù)據(jù)傳輸方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)傳輸技術(shù),特別是涉及一種對等網(wǎng)絡(luò)中充分利用帶寬資源的數(shù)據(jù)傳輸方法及裝置。
背景技術(shù):
在目前的各種網(wǎng)絡(luò)應(yīng)用中,許多網(wǎng)絡(luò)服務(wù)需要使用點(diǎn)對點(diǎn)技術(shù)(peer-to-peer,簡稱P2P)。P2P又稱為對等互聯(lián)網(wǎng)絡(luò)技術(shù),是一種用于不同PC(Personal Computer的縮寫,也就是個人計算機(jī))用戶之間,不經(jīng)過中繼設(shè)備直接交換數(shù)據(jù)或服務(wù)的技術(shù)。
在互聯(lián)網(wǎng)上提供在線實(shí)時流媒體直播服務(wù)時,需要使用P2P技術(shù),在服務(wù)器端將實(shí)時流媒體數(shù)據(jù)封裝成多個數(shù)據(jù)塊,并通過一個數(shù)據(jù)驅(qū)動的P2P網(wǎng)絡(luò)將這些數(shù)據(jù)塊傳輸給每一個在線客戶端。所述數(shù)據(jù)驅(qū)動的P2P網(wǎng)絡(luò)具有以下特點(diǎn)(1)網(wǎng)絡(luò)由許多P2P節(jié)點(diǎn)構(gòu)成,這些節(jié)點(diǎn)包括在線用戶(即客戶端)和服務(wù)器,其中每個節(jié)點(diǎn)都和一部分其他節(jié)點(diǎn)相連接,這些節(jié)點(diǎn)稱為該節(jié)點(diǎn)的鄰居;(2)每一個P2P節(jié)點(diǎn)周期性地與它的鄰居交換數(shù)據(jù)塊可用性信息;(3)每一個P2P節(jié)點(diǎn)從它的鄰居節(jié)點(diǎn)索取和接收自己所沒有的數(shù)據(jù)塊,并將自己所擁有的數(shù)據(jù)塊發(fā)送給向自己索取的鄰居,即主要由數(shù)據(jù)塊的接收方?jīng)Q定數(shù)據(jù)塊的傳播路徑,且每一個數(shù)據(jù)塊的傳播路徑可能不同。
對于一個基于P2P技術(shù)的實(shí)時流媒體傳輸網(wǎng)絡(luò),存在以下等式服務(wù)器有效輸出流量+所有客戶端有效上傳流量總和=所有客戶端下載流量總和;其中,有效流量是指排除丟包等情況后的實(shí)際流量。
根據(jù)上述等式來衡量一個指標(biāo)“所有客戶端最大上傳流量總和”,當(dāng)這個值小于“所有客戶端下載流量總和”的值時,“服務(wù)器有效輸出流量”的值將大于零,即客戶端下載流量中的一部分需要從服務(wù)器輸出,這樣使得P2P帶寬增益存在一個理論上限(通常很低),這種情況稱為P2P不可行。其中,所述帶寬增益表示為所有客戶端節(jié)點(diǎn)的實(shí)際使用的上傳帶寬之和與服務(wù)器端提供的上傳帶寬之比,這個值越高說明P2P起的作用越大。
如果“所有客戶端最大上傳流量總和”的值大于“所有客戶端下載流量總和”的值,從理論上,服務(wù)器端只需要把原始流媒體數(shù)據(jù)塊傳輸一份給一部分客戶端,然后通過客戶端之間的P2P傳輸,就可以將數(shù)據(jù)塊最終傳輸?shù)矫恳粋€客戶端。這樣,當(dāng)直播在線人數(shù)足夠多時,帶寬增益將不再存在理論上限,這種情況稱為P2P可行。
在目前的P2P網(wǎng)絡(luò)中,通常使用TCP協(xié)議(Transmission ControlProtoeol,傳輸控制協(xié)議)進(jìn)行P2P節(jié)點(diǎn)之間的數(shù)據(jù)傳輸。TCP協(xié)議是最為流行的傳輸層協(xié)議,它完美解決了網(wǎng)絡(luò)層存在的數(shù)據(jù)包丟包、亂序等問題,實(shí)現(xiàn)了不可靠網(wǎng)絡(luò)上的可靠傳輸,是CS(Client-Server,客戶端-服務(wù)器)模式下視頻應(yīng)用的主要傳輸協(xié)議。
但是,對于采用NAT(Network Address Translator,網(wǎng)絡(luò)地址轉(zhuǎn)換)協(xié)議的網(wǎng)絡(luò)(以下簡稱NAT網(wǎng)絡(luò)),這種傳輸無法實(shí)現(xiàn)處于不同NAT網(wǎng)絡(luò)的兩個節(jié)點(diǎn)之間的通信。所述NAT網(wǎng)絡(luò)結(jié)構(gòu)呈現(xiàn)為一種類似防火墻的私有網(wǎng)結(jié)構(gòu),NAT網(wǎng)絡(luò)外部的Internet網(wǎng)稱為公網(wǎng),NAT網(wǎng)絡(luò)稱為內(nèi)網(wǎng)。內(nèi)網(wǎng)節(jié)點(diǎn)與公網(wǎng)節(jié)點(diǎn)之間無法直接通信,需要通過NAT協(xié)議把內(nèi)網(wǎng)地址轉(zhuǎn)換為公網(wǎng)地址,實(shí)現(xiàn)內(nèi)網(wǎng)節(jié)點(diǎn)與公網(wǎng)節(jié)點(diǎn)的連通。但是由于TCP協(xié)議的傳輸特性,不同內(nèi)網(wǎng)的節(jié)點(diǎn)之間無法實(shí)現(xiàn)連通。
將處于NAT內(nèi)部的節(jié)點(diǎn)稱為NAT節(jié)點(diǎn),處于NAT外部的節(jié)點(diǎn)稱為非NAT節(jié)點(diǎn)。在采用TCP傳輸?shù)腜2P網(wǎng)絡(luò)中,由于不同內(nèi)網(wǎng)的NAT節(jié)點(diǎn)之間無法通信,使得大量NAT節(jié)點(diǎn)的上傳帶寬只能被少數(shù)非NAT節(jié)點(diǎn)利用(因?yàn)镹AT節(jié)點(diǎn)能夠與非NAT節(jié)點(diǎn)連接,但無法與其他不同NAT內(nèi)部的節(jié)點(diǎn)連接),而非NAT節(jié)點(diǎn)的上傳帶寬雖然可以被所有節(jié)點(diǎn)利用(因?yàn)榉荖AT節(jié)點(diǎn)可以與所有NAT內(nèi)部的節(jié)點(diǎn)連接),但在實(shí)際網(wǎng)絡(luò)條件下,非NAT節(jié)點(diǎn)多是一些ADSL(AsymmetricDigital Subscriber Loop,非對稱數(shù)字用戶環(huán)路)節(jié)點(diǎn),其上傳帶寬有限。所以當(dāng)NAT節(jié)點(diǎn)在整個P2P網(wǎng)絡(luò)中所占比例達(dá)到一定程度時,“所有客戶端最大上傳流量總和”將小于“所有客戶端下載流量總和”,使得P2P不可行。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種對等網(wǎng)絡(luò)中充分利用帶寬資源的數(shù)據(jù)傳輸方法及裝置,以解決網(wǎng)絡(luò)中的NAT節(jié)點(diǎn)數(shù)量達(dá)到一定程度時,造成P2P不可行的問題。
為解決上述技術(shù)問題,根據(jù)本發(fā)明提供的具體實(shí)施例,本發(fā)明公開了以下技術(shù)方案一種對等網(wǎng)絡(luò)中的數(shù)據(jù)傳輸方法,所述對等網(wǎng)絡(luò)包括內(nèi)網(wǎng)節(jié)點(diǎn)和公網(wǎng)節(jié)點(diǎn),包括內(nèi)網(wǎng)節(jié)點(diǎn)向公網(wǎng)節(jié)點(diǎn)發(fā)送請求,請求中包含該節(jié)點(diǎn)的相關(guān)信息;所述公網(wǎng)節(jié)點(diǎn)將與自己相連的其他內(nèi)網(wǎng)的節(jié)點(diǎn)信息發(fā)送給該內(nèi)網(wǎng)節(jié)點(diǎn);所述公網(wǎng)節(jié)點(diǎn)將該內(nèi)網(wǎng)節(jié)點(diǎn)的相關(guān)信息發(fā)送給所述與自己相連的其他內(nèi)網(wǎng)的節(jié)點(diǎn);該內(nèi)網(wǎng)節(jié)點(diǎn)根據(jù)接收到的其他內(nèi)網(wǎng)的節(jié)點(diǎn)信息,與其他內(nèi)網(wǎng)的節(jié)點(diǎn)建立連通,進(jìn)行數(shù)據(jù)傳輸。
所述方法還包括其他內(nèi)網(wǎng)的節(jié)點(diǎn)根據(jù)接收到的所述內(nèi)網(wǎng)節(jié)點(diǎn)的相關(guān)信息,與該內(nèi)網(wǎng)節(jié)點(diǎn)建立連通。
其中,所述節(jié)點(diǎn)信息包括節(jié)點(diǎn)的外部IP地址和端口號,其中所述外部IP地址為經(jīng)地址轉(zhuǎn)換后的公網(wǎng)地址。
其中,采用UDP協(xié)議進(jìn)行節(jié)點(diǎn)間的數(shù)據(jù)傳輸。
所述方法還包括在內(nèi)網(wǎng)節(jié)點(diǎn)與公網(wǎng)節(jié)點(diǎn)之間、公網(wǎng)節(jié)點(diǎn)之間以及同一內(nèi)網(wǎng)的節(jié)點(diǎn)之間,也采用UDP協(xié)議進(jìn)行數(shù)據(jù)傳輸。
優(yōu)選的,在數(shù)據(jù)傳輸過程中加入錯誤恢復(fù)數(shù)據(jù)包,用于采用前向糾錯方法恢復(fù)丟失的數(shù)據(jù)包。
一種對等網(wǎng)絡(luò)中的數(shù)據(jù)傳輸裝置,所述對等網(wǎng)絡(luò)包括內(nèi)網(wǎng)節(jié)點(diǎn)和公網(wǎng)節(jié)點(diǎn),包括運(yùn)行在公網(wǎng)節(jié)點(diǎn)的第一數(shù)據(jù)傳輸單元和運(yùn)行在內(nèi)網(wǎng)節(jié)點(diǎn)的第二數(shù)據(jù)傳輸單元,公網(wǎng)節(jié)點(diǎn)與內(nèi)網(wǎng)節(jié)點(diǎn)之間通過所述兩個數(shù)據(jù)傳輸單元進(jìn)行通信,其中,第一數(shù)據(jù)傳輸單元用于接收包括節(jié)點(diǎn)信息的內(nèi)網(wǎng)節(jié)點(diǎn)請求,將與自己相連的其他內(nèi)網(wǎng)的節(jié)點(diǎn)信息發(fā)送給該內(nèi)網(wǎng)節(jié)點(diǎn),并將該內(nèi)網(wǎng)節(jié)點(diǎn)的相關(guān)信息發(fā)送給與自己相連的其他內(nèi)網(wǎng)的節(jié)點(diǎn);第二數(shù)據(jù)傳輸單元用于向公網(wǎng)節(jié)點(diǎn)發(fā)送請求,請求中包含該節(jié)點(diǎn)的相關(guān)信息;接收公網(wǎng)節(jié)點(diǎn)發(fā)來的其他內(nèi)網(wǎng)的節(jié)點(diǎn)信息,并根據(jù)所述節(jié)點(diǎn)信息與其他內(nèi)網(wǎng)的節(jié)點(diǎn)建立連通,進(jìn)行數(shù)據(jù)傳輸。
其中,所述第一數(shù)據(jù)傳輸單元和第二數(shù)據(jù)傳輸單元之間的數(shù)據(jù)傳輸采用UDP協(xié)議;所述第一數(shù)據(jù)傳輸單元之間以及第二數(shù)據(jù)傳輸單元之間的數(shù)據(jù)傳輸也采用UDP協(xié)議。
優(yōu)選的,所述第一數(shù)據(jù)傳輸單元和第二數(shù)據(jù)傳輸單元在數(shù)據(jù)傳輸過程中加入錯誤恢復(fù)數(shù)據(jù)包,用于采用前向糾錯方法恢復(fù)丟失的數(shù)據(jù)包。
其中,所述節(jié)點(diǎn)信息包括節(jié)點(diǎn)的外部IP地址和端口號,其中所述外部IP地址為經(jīng)地址轉(zhuǎn)換后的公網(wǎng)地址。
根據(jù)本發(fā)明提供的具體實(shí)施例,本發(fā)明公開了以下技術(shù)效果首先,P2P直播網(wǎng)絡(luò)中的客戶端節(jié)點(diǎn)之間采用UDP協(xié)議進(jìn)行網(wǎng)絡(luò)傳輸,實(shí)現(xiàn)了處于不同NAT內(nèi)部的節(jié)點(diǎn)之間的通訊。對于一對處于不同內(nèi)網(wǎng)的NAT節(jié)點(diǎn),由公網(wǎng)節(jié)點(diǎn)將對方的外部IP地址和端口號發(fā)送給NAT節(jié)點(diǎn)雙方,然后利用UDP(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)協(xié)議的傳輸特性,兩個NAT節(jié)點(diǎn)就可以向?qū)Ψ降腎P地址和端口號發(fā)送數(shù)據(jù)而連通了。
由于處于不同NAT內(nèi)部的節(jié)點(diǎn)之間可以通信,使得NAT節(jié)點(diǎn)的上傳帶寬既可以被非NAT節(jié)點(diǎn)利用,也可以被其他內(nèi)網(wǎng)的NAT節(jié)點(diǎn)利用,這樣就增加了NAT節(jié)點(diǎn)的上傳流量。因此,在使用UDP協(xié)議進(jìn)行傳輸?shù)那闆r下,每個客戶端(無論是NAT節(jié)點(diǎn)還是非NAT節(jié)點(diǎn))的上傳帶寬都能夠得到充分利用,使得“所有客戶端最大上傳流量總和”總是大于“所有客戶端下載流量總和”,P2P的可行性得到了保證。
其次,針對數(shù)據(jù)傳輸過程中的丟包、亂序問題,使用前向糾錯(ForwardError Correction,簡稱FEC)技術(shù)來解決,即在數(shù)據(jù)包的傳輸過程中加入錯誤恢復(fù)數(shù)據(jù)包,在出現(xiàn)丟包時該數(shù)據(jù)包能夠重新恢復(fù)被丟包的數(shù)據(jù),對傳輸沒有任何影響。而且,在不丟包的情況下,UDP協(xié)議會逐步上調(diào)發(fā)送速度,使得最終傳輸帶寬穩(wěn)定在接近真實(shí)帶寬的水平。
圖1是本發(fā)明實(shí)施例中包含NAT節(jié)點(diǎn)的網(wǎng)絡(luò)結(jié)構(gòu)示意圖;圖2是本發(fā)明實(shí)施例所述連通不同NAT節(jié)點(diǎn)的方法流程圖;
圖3是本發(fā)明優(yōu)選實(shí)施例中采用前向糾錯技術(shù)傳輸數(shù)據(jù)的步驟流程圖;圖4是本發(fā)明實(shí)施例所述一種P2P網(wǎng)絡(luò)中的數(shù)據(jù)傳輸裝置結(jié)構(gòu)圖。
具體實(shí)施例方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對本發(fā)明作進(jìn)一步詳細(xì)的說明。
本發(fā)明實(shí)施例提供了一種P2P網(wǎng)絡(luò)中的數(shù)據(jù)傳輸方法,采用UDP協(xié)議進(jìn)行數(shù)據(jù)傳輸,并利用UDP協(xié)議的傳輸特性,將處于不同NAT內(nèi)部的節(jié)點(diǎn)連通,使得不同的NAT節(jié)點(diǎn)之間可以通信,達(dá)到充分利用客戶端上傳帶寬的目的。同時,采用前向糾錯技術(shù)解決數(shù)據(jù)傳輸過程中的丟包、亂序問題,使得視頻傳輸時的帶寬盡量接近真實(shí)帶寬。
下面詳細(xì)說明如何實(shí)現(xiàn)不同NAT內(nèi)部的節(jié)點(diǎn)通信。
在提供直播服務(wù)的P2P網(wǎng)絡(luò)中,服務(wù)器節(jié)點(diǎn)和客戶端節(jié)點(diǎn)之間采用TCP協(xié)議進(jìn)行傳輸,而客戶端節(jié)點(diǎn)之間的傳輸則采用UDP協(xié)議,每一個客戶端都和一部分其他客戶端(即鄰居節(jié)點(diǎn))保持一條UDP的通訊信道。其中,所述客戶端包括NAT節(jié)點(diǎn)和非NAT節(jié)點(diǎn)。
參照圖1,是包含NAT節(jié)點(diǎn)的網(wǎng)絡(luò)結(jié)構(gòu)示意圖。圖中,NAT1和NAT2是兩個采用不同NAT協(xié)議的內(nèi)網(wǎng),NAT1和NAT2外部的網(wǎng)絡(luò)為公網(wǎng)。NAT1和NAT2內(nèi)部的節(jié)點(diǎn)通過不同的NAT協(xié)議將內(nèi)網(wǎng)地址轉(zhuǎn)換為公網(wǎng)地址,實(shí)現(xiàn)與公網(wǎng)節(jié)點(diǎn)的連通。圖中,節(jié)點(diǎn)A、B、C都是客戶端節(jié)點(diǎn),其中,節(jié)點(diǎn)A處于內(nèi)網(wǎng)NAT1中,節(jié)點(diǎn)B處于內(nèi)網(wǎng)NAT2中,節(jié)點(diǎn)C處于公網(wǎng)中,即節(jié)點(diǎn)A和B是NAT節(jié)點(diǎn),而節(jié)點(diǎn)C是非NAT節(jié)點(diǎn)。節(jié)點(diǎn)A可以與節(jié)點(diǎn)C連接,并通過UDP協(xié)議進(jìn)行數(shù)據(jù)傳輸;節(jié)點(diǎn)B也可以與節(jié)點(diǎn)C連接,同樣采用UDP協(xié)議進(jìn)行數(shù)據(jù)傳輸。但是,節(jié)點(diǎn)A和節(jié)點(diǎn)B之間無法直接連通。
根據(jù)NAT的設(shè)計特性,一部分NAT節(jié)點(diǎn)是可以被UDP協(xié)議連通的。參照圖2,是所述連通不同NAT節(jié)點(diǎn)的方法流程圖。以圖1為例,為實(shí)現(xiàn)NAT節(jié)點(diǎn)A與NAT節(jié)點(diǎn)B之間的連通,采用如下過程步驟201,服務(wù)器節(jié)點(diǎn)首先引導(dǎo)NAT節(jié)點(diǎn)與非NAT節(jié)點(diǎn)建立通訊信道,節(jié)點(diǎn)A與節(jié)點(diǎn)C建立連接,節(jié)點(diǎn)B也與節(jié)點(diǎn)C建立連接。
步驟202,某個NAT節(jié)點(diǎn)在需要與其它NAT節(jié)點(diǎn)通訊時,會向與它已建立連接的某個非NAT節(jié)點(diǎn)發(fā)送一個請求。當(dāng)節(jié)點(diǎn)A需要與其他NAT節(jié)點(diǎn)通訊時,先向與A連接的非NAT節(jié)點(diǎn)C發(fā)送請求。
步驟203,當(dāng)非NAT節(jié)點(diǎn)收到某個NAT節(jié)點(diǎn)發(fā)送的請求時,將與自己有連接的其它所有NAT節(jié)點(diǎn)的相關(guān)信息發(fā)送給該NAT節(jié)點(diǎn),同時將該NAT節(jié)點(diǎn)的相關(guān)信息發(fā)送給所述其它所有NAT節(jié)點(diǎn)。其中,節(jié)點(diǎn)相關(guān)信息主要是外部IP地址和端口號,用于建立連接時標(biāo)識節(jié)點(diǎn)。所述外部IP地址是指內(nèi)網(wǎng)地址經(jīng)NAT轉(zhuǎn)換后的公網(wǎng)地址。例如,非NAT節(jié)點(diǎn)C將NAT節(jié)點(diǎn)B的外部IP地址和端口號發(fā)送給NAT節(jié)點(diǎn)A,并將節(jié)點(diǎn)A的外部IP地址和端口號發(fā)送給節(jié)點(diǎn)B。
步驟204,所述NAT節(jié)點(diǎn)在收到請求回應(yīng)后,開始向指定的外部IP地址和端口號發(fā)送消息,同時對方也開始向該NAT節(jié)點(diǎn)的外部IP地址和端口號發(fā)送消息,利用UDP協(xié)議的傳輸特性,不同的NAT節(jié)點(diǎn)就可以連通。這樣,處于不同NAT內(nèi)的節(jié)點(diǎn)A和節(jié)點(diǎn)B通過非NAT節(jié)點(diǎn)C,分別獲得了對方的外部IP地址和端口號后,然后通過UDP協(xié)議就可以實(shí)現(xiàn)通信。
上述UDP協(xié)議的特性支持兩個不同NAT節(jié)點(diǎn)連通的解釋如下由于節(jié)點(diǎn)A與節(jié)點(diǎn)B都獲知了對方的外部IP地址和端口號,節(jié)點(diǎn)A與節(jié)點(diǎn)B可以同時向?qū)Ψ桨l(fā)送數(shù)據(jù)包,但還是有前后次序,假設(shè)A比B先發(fā)包,而且不出現(xiàn)丟包,則會出現(xiàn)以下的次序(1)A向B發(fā)包,B的網(wǎng)關(guān)收到來自A的包,但之前B未同A通信,B的網(wǎng)關(guān)會認(rèn)為這個包來自未知地址,一般的NAT網(wǎng)關(guān)會將這個包丟掉;(2)B向A發(fā)包,A的網(wǎng)關(guān)收到來自B的包,但之前A曾經(jīng)向B發(fā)送過數(shù)據(jù)包,A的網(wǎng)關(guān)認(rèn)為收到的這個包是之前發(fā)出包的回應(yīng),于是將這個包轉(zhuǎn)發(fā)給A,于是A能收到B的包;(3)之后A再向B發(fā)包時,B網(wǎng)關(guān)的行為將同(2)中描述的A網(wǎng)關(guān)一致,B能接收到A的包;(4)由于A、B能互相發(fā)包并收到對方的包,NAT成功連通。
對于其他內(nèi)網(wǎng)的NAT節(jié)點(diǎn),在收到該NAT節(jié)點(diǎn)的外部IP地址和端口號后,根據(jù)需要也可以先向該NAT節(jié)點(diǎn)的外部IP地址和端口號發(fā)送消息,并建立連通。
在使用UDP協(xié)議進(jìn)行網(wǎng)絡(luò)傳輸?shù)腜2P直播網(wǎng)絡(luò)中,由于處于不同NAT內(nèi)部的節(jié)點(diǎn)之間可以通信,使得NAT節(jié)點(diǎn)的上傳帶寬既可以被非NAT節(jié)點(diǎn)利用,也可以被其他內(nèi)網(wǎng)的NAT節(jié)點(diǎn)利用,這樣就增加了NAT節(jié)點(diǎn)的上傳流量。因此,在使用UDP協(xié)議進(jìn)行傳輸?shù)那闆r下,每個客戶端(無論是NAT節(jié)點(diǎn)還是非NAT節(jié)點(diǎn))的上傳帶寬都能夠得到充分利用,使得“所有客戶端最大上傳流量總和”總是大于“所有客戶端下載流量總和”,P2P的可行性得到了保證。
由上可知,采用UDP協(xié)議并結(jié)合上述傳輸方法,解決了傳統(tǒng)TCP傳輸無法解決的問題,在實(shí)際應(yīng)用中帶來了更好的傳輸效果。但是,在采用UDP協(xié)議進(jìn)行傳輸?shù)木W(wǎng)絡(luò)中,由于UDP協(xié)議和TCP協(xié)議都是傳輸層協(xié)議,其底層協(xié)議都是網(wǎng)絡(luò)層的IP協(xié)議,而IP協(xié)議存在丟包問題,所以在采用UDP協(xié)議實(shí)現(xiàn)上述傳輸?shù)耐瑫r還需要解決網(wǎng)絡(luò)丟包問題。數(shù)據(jù)包丟失是網(wǎng)絡(luò)傳輸固有的問題,本發(fā)明實(shí)施例采用傳統(tǒng)的“回應(yīng)+重傳”的解決辦法。在發(fā)送端向接收端發(fā)送數(shù)據(jù)包的過程中,當(dāng)接收端發(fā)現(xiàn)丟包后,在回應(yīng)發(fā)送端的消息中通知對方數(shù)據(jù)包已丟失,發(fā)送端收到所述回應(yīng)消息后重新向接收端傳輸丟失的數(shù)據(jù)包。通過所述“回應(yīng)+重傳”方法,保證了UDP傳輸?shù)目煽啃浴?br>
但是,由于上述實(shí)施例中的“回應(yīng)+重傳”方法需要在發(fā)送端和接收端之間進(jìn)行多次請求和響應(yīng),而每一次通訊都需要花費(fèi)時間,因此影響了傳輸效率。為提高UDP傳輸效率,本發(fā)明提供了另一優(yōu)選實(shí)施例,在采用UDP協(xié)議取代TCP進(jìn)行網(wǎng)絡(luò)傳輸?shù)耐瑫r,使用前向糾錯技術(shù)來解決網(wǎng)絡(luò)層存在的數(shù)據(jù)包丟包、亂序等問題,不僅保證了傳輸?shù)目煽啃裕€提高了網(wǎng)絡(luò)傳輸效率。
所述優(yōu)選實(shí)施例在進(jìn)行UDP傳輸時,仍采用圖1所示的方法步驟來連通不同內(nèi)網(wǎng)的NAT節(jié)點(diǎn),使每個客戶端(無論是NAT節(jié)點(diǎn)還是非NAT節(jié)點(diǎn))的上傳帶寬都能夠得到充分利用,保證P2P的可行性。同時,采用前向糾錯技術(shù)來優(yōu)化UDP傳輸?shù)目煽啃?,具體說明如下。
前向糾錯技術(shù)通過在傳輸列中加入冗余碼進(jìn)行糾錯,在發(fā)送端由發(fā)送設(shè)備按一定算法生成錯誤恢復(fù)碼插入到要傳輸?shù)臄?shù)據(jù)流中,接收端按同樣算法對接收到的數(shù)據(jù)流進(jìn)行解碼,根據(jù)接收到的碼流確定誤碼的位置并進(jìn)行糾錯。前向糾錯技術(shù)通過在發(fā)送每N個數(shù)據(jù)包后添加一個錯誤恢復(fù)包來糾正錯誤,所述錯誤恢復(fù)包內(nèi)含可被用來構(gòu)建由N個數(shù)據(jù)包組成的分組內(nèi)的任意一個數(shù)據(jù)包的信息。如果這N個數(shù)據(jù)包中的一個包恰巧在傳輸過程中丟失,錯誤恢復(fù)包用于在傳輸鏈路的遠(yuǎn)端上重建丟失的數(shù)據(jù)包。前向糾錯技術(shù)消除了重新在傳輸鏈路上傳輸丟失數(shù)據(jù)包的需要,從而大大減少應(yīng)用響應(yīng)時間,提高了傳輸?shù)男省?br>
參照圖3,是采用前向糾錯技術(shù)傳輸數(shù)據(jù)的步驟流程圖。當(dāng)一個發(fā)送端需要把一個數(shù)據(jù)塊傳輸給另一個接收端時,實(shí)現(xiàn)方式如下步驟301,發(fā)送端將該數(shù)據(jù)塊拆分成n個數(shù)據(jù)包;步驟302,發(fā)送端使用FEC算法,由n個數(shù)據(jù)包生成m個FEC包(其中,m>=n),使得m個FEC包中的任意n個FEC包都可以運(yùn)算得到步驟301生成的n個數(shù)據(jù)包;步驟303,將每一個FEC包作為一個UDP包發(fā)送;步驟304,接收端收到n個FEC包后,采用相同的FEC算法運(yùn)算得到n個數(shù)據(jù)包,從而得到原始的數(shù)據(jù)塊;步驟305,若接收端在一定時間內(nèi)收到的FEC包總數(shù)小于n,則說明網(wǎng)絡(luò)丟包過多,傳輸失敗,需要重新傳輸。
在上述過程中,F(xiàn)EC算法有很多種,可以采用本領(lǐng)域技術(shù)人員所熟知的一種來進(jìn)行計算,在此不作限定。
在P2P的實(shí)際運(yùn)用中,假設(shè)一個數(shù)據(jù)塊的大小為1秒(指客戶端連續(xù)播放1秒的流媒體數(shù)據(jù)所需要傳輸?shù)臄?shù)據(jù)塊大小),設(shè)n取值為56,m取值為64,即允許有12.5%(1/8)的UDP包在網(wǎng)絡(luò)上被丟棄。
在采用TCP傳輸?shù)姆椒ㄖ?,視頻傳輸時能夠達(dá)到的帶寬通常小于真實(shí)帶寬。因?yàn)楫?dāng)出現(xiàn)丟包的時候,TCP協(xié)議的實(shí)現(xiàn)會降低數(shù)據(jù)發(fā)送速率,例如在出現(xiàn)第一次丟包之前,TCP協(xié)議的發(fā)包速度一直隨時間呈指數(shù)級上升;出現(xiàn)一次丟包時,TCP協(xié)議將會把發(fā)送速度直接降低到當(dāng)前速率的一半,之后如果穩(wěn)定不丟包,TCP協(xié)議的發(fā)送速度也只會隨時間線性上升。所以當(dāng)網(wǎng)絡(luò)不太穩(wěn)定、經(jīng)常出現(xiàn)丟包的時候,TCP協(xié)議的發(fā)送速度降低得十分快而恢復(fù)得慢,帶寬利用率很低,且十分不穩(wěn)定,非常不適合視頻應(yīng)用。
與TCP傳輸形成對比的是,使用UDP協(xié)議和FEC算法實(shí)現(xiàn)網(wǎng)絡(luò)傳輸,在出現(xiàn)丟包時,只要丟包率低于12.5%,F(xiàn)EC算法能夠恢復(fù)被丟包的數(shù)據(jù),對傳輸沒有任何影響,故只要網(wǎng)絡(luò)丟包不過分嚴(yán)重,UDP協(xié)議和FEC算法的組合將一直能保證數(shù)據(jù)傳輸以穩(wěn)定的速度進(jìn)行,且在不丟包的情況下,還會逐步上調(diào)發(fā)送速度,最終傳輸帶寬將穩(wěn)定在接近真實(shí)帶寬的水平。
舉例說明,P2P網(wǎng)絡(luò)中采用UDP協(xié)議傳輸?shù)膬蓚€節(jié)點(diǎn),分別是節(jié)點(diǎn)E和節(jié)點(diǎn)F,其中節(jié)點(diǎn)E向節(jié)點(diǎn)F發(fā)送數(shù)據(jù),數(shù)據(jù)傳輸流程如下(1)節(jié)點(diǎn)F向節(jié)點(diǎn)E請求獲取數(shù)據(jù)塊m;(2)節(jié)點(diǎn)E采用FEC算法把數(shù)據(jù)塊m拆分成64個UDP包,按一定速度發(fā)送給節(jié)點(diǎn)F;(3)節(jié)點(diǎn)F接收所述64個UDP包,在一定時間內(nèi),只要接收到56個包,就可以使用同樣的FEC算法完整地生成所有64個UDP包;(4)如果節(jié)點(diǎn)F沒有接收到56個包,它可以向節(jié)點(diǎn)E發(fā)送消息,在下次發(fā)送數(shù)據(jù)塊的時候,降低節(jié)點(diǎn)E到節(jié)點(diǎn)F的發(fā)送數(shù)據(jù)速度,以降低丟包率;(5)如果節(jié)點(diǎn)F接收到的包超過60個,它可以向節(jié)點(diǎn)E發(fā)送消息,在下次發(fā)送數(shù)據(jù)塊的時候,提高節(jié)點(diǎn)E到節(jié)點(diǎn)F的發(fā)送數(shù)據(jù)速度,以追求更高的帶寬。
如果節(jié)點(diǎn)F一直向節(jié)點(diǎn)E獲取數(shù)據(jù),那么節(jié)點(diǎn)E向節(jié)點(diǎn)F的發(fā)送速度趨近于12.5%的丟包率,即正好能使用FEC算法解出全部數(shù)據(jù)。在這種情況下,將能把傳輸帶寬很好地維持在接近真實(shí)帶寬的水平。
需要說明的是,上述內(nèi)容雖然涉及的是NAT節(jié)點(diǎn)的傳輸情況,包括不同內(nèi)網(wǎng)的NAT節(jié)點(diǎn)之間的傳輸;但對于內(nèi)網(wǎng)的NAT節(jié)點(diǎn)與公網(wǎng)的非NAT節(jié)點(diǎn)之間、公網(wǎng)節(jié)點(diǎn)之間以及同一內(nèi)網(wǎng)節(jié)點(diǎn)之間的傳輸,上述采用UDP協(xié)議和前向糾錯技術(shù)結(jié)合的方法仍然適用。即在P2P網(wǎng)絡(luò)中,客戶端節(jié)點(diǎn)(無論是NAT節(jié)點(diǎn)還是非NAT節(jié)點(diǎn))之間均采用“UDP+FEC”的方式實(shí)現(xiàn)傳輸。
綜上所述,在P2P直播網(wǎng)絡(luò)中采用UDP協(xié)議進(jìn)行網(wǎng)絡(luò)傳輸,實(shí)現(xiàn)處于不同NAT內(nèi)的節(jié)點(diǎn)之間的通訊,使得每個客戶端的上傳帶寬都能夠得到充分利用;并結(jié)合前向糾錯技術(shù)解決丟包、亂序問題,提高了傳輸效率,還使得視頻傳輸時能夠達(dá)到的帶寬盡量接近真實(shí)帶寬。UDP協(xié)議和前向糾錯技術(shù)的結(jié)合,設(shè)計出一種能適應(yīng)視頻應(yīng)用、更適合視頻直播的傳輸方法。
針對上述P2P網(wǎng)絡(luò)的數(shù)據(jù)傳輸方法,本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)傳輸裝置。參照圖4,是所述傳輸裝置的結(jié)構(gòu)圖,包括第一數(shù)據(jù)傳輸單元401和第二數(shù)據(jù)傳輸單元402。其中,第一數(shù)據(jù)傳輸單元401設(shè)置在非NAT節(jié)點(diǎn)(公網(wǎng)節(jié)點(diǎn)),第二數(shù)據(jù)傳輸單元402設(shè)置在NAT節(jié)點(diǎn)(內(nèi)網(wǎng)節(jié)點(diǎn)),整個網(wǎng)絡(luò)中的客戶端節(jié)點(diǎn)之間通過所述兩種單元來實(shí)現(xiàn)數(shù)據(jù)的傳輸。
第一數(shù)據(jù)傳輸單元401,用于接收NAT節(jié)點(diǎn)的第二數(shù)據(jù)傳輸單元402發(fā)來的請求,將與自己有連接的其他NAT節(jié)點(diǎn)的信息發(fā)送給該節(jié)點(diǎn),同時將該NAT節(jié)點(diǎn)的信息發(fā)送給所述與自己有連接的其他NAT節(jié)點(diǎn)的第二數(shù)據(jù)傳輸單元402。其中,所述節(jié)點(diǎn)信息主要包括外部IP地址和端口號,用來標(biāo)識網(wǎng)絡(luò)中的節(jié)點(diǎn)。不同內(nèi)網(wǎng)的NAT節(jié)點(diǎn)之間無法直接連通,需要通過所述第一數(shù)據(jù)傳輸單元401來獲取對方的外部IP地址和端口號,從而實(shí)現(xiàn)不同NAT節(jié)點(diǎn)的連通。
第二數(shù)據(jù)傳輸單元402,用于向非NAT節(jié)點(diǎn)發(fā)送請求,并接收非NAT節(jié)點(diǎn)發(fā)來的其他NAT節(jié)點(diǎn)的信息,然后根據(jù)所述節(jié)點(diǎn)信息,與其中的NAT節(jié)點(diǎn)建立連通。
第一數(shù)據(jù)傳輸單元401和第二數(shù)據(jù)傳輸單元402之間的數(shù)據(jù)傳輸采用UDP協(xié)議,由于UDP協(xié)議的傳輸特性,通過圖2所示的方法流程,處于不同NAT內(nèi)部的節(jié)點(diǎn)之間可以通信,使得NAT節(jié)點(diǎn)的上傳帶寬得到充分利用,P2P的可行性得到保證。此外,第一數(shù)據(jù)傳輸單元401之間以及第二數(shù)據(jù)傳輸單元402之間的傳輸均采用UDP協(xié)議,即P2P網(wǎng)絡(luò)中的客戶端節(jié)點(diǎn)(無論是NAT節(jié)點(diǎn)還是非NAT節(jié)點(diǎn))之間進(jìn)行UDP傳輸。
優(yōu)選的,為解決網(wǎng)絡(luò)傳輸固有的丟包、亂序問題,在UDP傳輸過程中,將前向糾錯技術(shù)與UDP傳輸協(xié)議結(jié)合使用,使得視頻傳輸時能夠達(dá)到的帶寬盡量接近真實(shí)帶寬,能夠?yàn)镻2P直播網(wǎng)絡(luò)帶來更好的視頻直播效果。前向糾錯技術(shù)的說明如前所述,在此不再詳述。
圖4所示裝置中未詳述的部分可以參見圖1、圖2和圖3所示方法的相關(guān)部分,為了篇幅考慮,在此不再詳述。
以上對本發(fā)明所提供的一種對等網(wǎng)絡(luò)中充分利用帶寬資源的數(shù)據(jù)傳輸方法及裝置,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個例對本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會有改變之處。綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
權(quán)利要求
1.一種對等網(wǎng)絡(luò)中的數(shù)據(jù)傳輸方法,所述對等網(wǎng)絡(luò)包括內(nèi)網(wǎng)節(jié)點(diǎn)和公網(wǎng)節(jié)點(diǎn),其特征在于,包括內(nèi)網(wǎng)節(jié)點(diǎn)向公網(wǎng)節(jié)點(diǎn)發(fā)送請求,請求中包含該節(jié)點(diǎn)的相關(guān)信息;所述公網(wǎng)節(jié)點(diǎn)將與自己相連的其他內(nèi)網(wǎng)的節(jié)點(diǎn)信息發(fā)送給該內(nèi)網(wǎng)節(jié)點(diǎn);所述公網(wǎng)節(jié)點(diǎn)將該內(nèi)網(wǎng)節(jié)點(diǎn)的相關(guān)信息發(fā)送給所述與自己相連的其他內(nèi)網(wǎng)的節(jié)點(diǎn);該內(nèi)網(wǎng)節(jié)點(diǎn)根據(jù)接收到的其他內(nèi)網(wǎng)的節(jié)點(diǎn)信息,與其他內(nèi)網(wǎng)的節(jié)點(diǎn)建立連通,進(jìn)行數(shù)據(jù)傳輸。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括其他內(nèi)網(wǎng)的節(jié)點(diǎn)根據(jù)接收到的所述內(nèi)網(wǎng)節(jié)點(diǎn)的相關(guān)信息,與該內(nèi)網(wǎng)節(jié)點(diǎn)建立連通。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于所述節(jié)點(diǎn)信息包括節(jié)點(diǎn)的外部IP地址和端口號,其中所述外部IP地址為經(jīng)地址轉(zhuǎn)換后的公網(wǎng)地址。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于采用UDP協(xié)議進(jìn)行節(jié)點(diǎn)間的數(shù)據(jù)傳輸。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,還包括在內(nèi)網(wǎng)節(jié)點(diǎn)與公網(wǎng)節(jié)點(diǎn)之間、公網(wǎng)節(jié)點(diǎn)之間以及同一內(nèi)網(wǎng)的節(jié)點(diǎn)之間,也采用UDP協(xié)議進(jìn)行數(shù)據(jù)傳輸。
6.根據(jù)權(quán)利要求4或5所述的方法,其特征在于在數(shù)據(jù)傳輸過程中加入錯誤恢復(fù)數(shù)據(jù)包,用于采用前向糾錯方法恢復(fù)丟失的數(shù)據(jù)包。
7.一種對等網(wǎng)絡(luò)中的數(shù)據(jù)傳輸裝置,所述對等網(wǎng)絡(luò)包括內(nèi)網(wǎng)節(jié)點(diǎn)和公網(wǎng)節(jié)點(diǎn),其特征在于,包括運(yùn)行在公網(wǎng)節(jié)點(diǎn)的第一數(shù)據(jù)傳輸單元和運(yùn)行在內(nèi)網(wǎng)節(jié)點(diǎn)的第二數(shù)據(jù)傳輸單元,公網(wǎng)節(jié)點(diǎn)與內(nèi)網(wǎng)節(jié)點(diǎn)之間通過所述兩個數(shù)據(jù)傳輸單元進(jìn)行通信,其中,第一數(shù)據(jù)傳輸單元用于接收包括節(jié)點(diǎn)信息的內(nèi)網(wǎng)節(jié)點(diǎn)請求,將與自己相連的其他內(nèi)網(wǎng)的節(jié)點(diǎn)信息發(fā)送給該內(nèi)網(wǎng)節(jié)點(diǎn),并將該內(nèi)網(wǎng)節(jié)點(diǎn)的相關(guān)信息發(fā)送給與自己相連的其他內(nèi)網(wǎng)的節(jié)點(diǎn);第二數(shù)據(jù)傳輸單元用于向公網(wǎng)節(jié)點(diǎn)發(fā)送請求,請求中包含該節(jié)點(diǎn)的相關(guān)信息;接收公網(wǎng)節(jié)點(diǎn)發(fā)來的其他內(nèi)網(wǎng)的節(jié)點(diǎn)信息,并根據(jù)所述節(jié)點(diǎn)信息與其他內(nèi)網(wǎng)的節(jié)點(diǎn)建立連通,進(jìn)行數(shù)據(jù)傳輸。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于所述第一數(shù)據(jù)傳輸單元和第二數(shù)據(jù)傳輸單元之間的數(shù)據(jù)傳輸采用UDP協(xié)議。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于所述第一數(shù)據(jù)傳輸單元之間以及第二數(shù)據(jù)傳輸單元之間的數(shù)據(jù)傳輸也采用UDP協(xié)議。
10.根據(jù)權(quán)利要求8或9所述的裝置,其特征在于所述第一數(shù)據(jù)傳輸單元和第二數(shù)據(jù)傳輸單元在數(shù)據(jù)傳輸過程中加入錯誤恢復(fù)數(shù)據(jù)包,用于采用前向糾錯方法恢復(fù)丟失的數(shù)據(jù)包。
11.根據(jù)權(quán)利要求7所述的裝置,其特征在于所述節(jié)點(diǎn)信息包括節(jié)點(diǎn)的外部IP地址和端口號,其中所述外部IP地址為經(jīng)地址轉(zhuǎn)換后的公網(wǎng)地址。
全文摘要
本發(fā)明公開了一種對等網(wǎng)絡(luò)中充分利用帶寬資源的數(shù)據(jù)傳輸方法及裝置,以解決網(wǎng)絡(luò)中的NAT節(jié)點(diǎn)數(shù)量達(dá)到一定程度時,造成P2P不可行的問題。所述方法包括內(nèi)網(wǎng)節(jié)點(diǎn)向公網(wǎng)節(jié)點(diǎn)發(fā)送請求,請求中包含該節(jié)點(diǎn)的相關(guān)信息;所述公網(wǎng)節(jié)點(diǎn)將與自己相連的其他內(nèi)網(wǎng)的節(jié)點(diǎn)信息發(fā)送給該內(nèi)網(wǎng)節(jié)點(diǎn);所述公網(wǎng)節(jié)點(diǎn)將該內(nèi)網(wǎng)節(jié)點(diǎn)的相關(guān)信息發(fā)送給所述與自己相連的其他內(nèi)網(wǎng)的節(jié)點(diǎn);該內(nèi)網(wǎng)節(jié)點(diǎn)根據(jù)接收到的其他內(nèi)網(wǎng)的節(jié)點(diǎn)信息,與其他內(nèi)網(wǎng)的節(jié)點(diǎn)建立連通,進(jìn)行數(shù)據(jù)傳輸。在使用UDP協(xié)議進(jìn)行傳輸?shù)那闆r下,每個客戶端(無論是NAT節(jié)點(diǎn)還是非NAT節(jié)點(diǎn))的上傳帶寬都能夠得到充分利用,使得P2P可行。同時,采用前向糾錯技術(shù)解決了丟包、亂序問題,并使最終傳輸帶寬穩(wěn)定在接近真實(shí)帶寬的水平。
文檔編號H04L12/46GK101087239SQ20071011917
公開日2007年12月12日 申請日期2007年7月17日 優(yōu)先權(quán)日2007年7月17日
發(fā)明者蔣又新, 張虎 申請人:北京搜狗科技發(fā)展有限公司