專利名稱:基于udp協(xié)議的數(shù)據(jù)傳輸方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種互聯(lián)網(wǎng)中數(shù)據(jù)傳輸?shù)姆椒ǎ唧w地說,涉及一種基于UDP協(xié)議 的數(shù)據(jù)傳輸方法。
背景技術(shù):
TCP (Transmission Control Protocol),傳輸控制協(xié)議,主要用于在主機間建立
一個虛擬連接,以實現(xiàn)高可靠性的數(shù)據(jù)包交換。IP協(xié)議可以進行IP數(shù)據(jù)包的分割和組裝,
但是通過IP協(xié)議并不能清楚地了解到數(shù)據(jù)包是否順利地發(fā)送給目標(biāo)計算機。而使用TCP
協(xié)議就不同了 ,在該協(xié)議傳輸模式中在將數(shù)據(jù)包成功發(fā)送給目標(biāo)計算機后,TCP會要求發(fā)送
一個確認(rèn);如果在某個時限內(nèi)沒有收到確認(rèn),那么TCP將重新發(fā)送數(shù)據(jù)包。另外,在傳輸?shù)?br>
過程中,如果接收到無序、丟失以及被破壞的數(shù)據(jù)包,TCP還可以負(fù)責(zé)恢復(fù)。 TCP是一種面向連接的、可靠的、基于字節(jié)流的運輸層通信協(xié)議,通常由IETF的
RFC 793說明。在簡化的計算機網(wǎng)絡(luò)OSI模型中,它完成運輸層所指定的功能。 UDP (User Datagram Protocol),用戶數(shù)據(jù)報協(xié)議,是0SI參考模型中一種無連接
的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。UDP協(xié)議基本上是IP協(xié)議與上
層協(xié)議的接口。 UDP協(xié)議適用端口分別運行在同一臺設(shè)備上的多個應(yīng)用程序。 由于大多數(shù)網(wǎng)絡(luò)應(yīng)用程序都在同一臺機器上運行,計算機上必須能夠確保目的地
機器上的軟件程序能從源地址機器處獲得數(shù)據(jù)包,以及源計算機能收到正確的回復(fù)。這是
通過使用UDP的"端口號"完成的。例如,如果一個工作站希望在工作站128. 1. 123. 1上使
用域名服務(wù)系統(tǒng),它就會給數(shù)據(jù)包一個目的地址128. 1. 123. l,并在UDP頭插入目標(biāo)端口號
53。源端口號標(biāo)識了請求域名服務(wù)的本地機的應(yīng)用程序,同時需要將所有由目的站生成的
響應(yīng)包都指定到源主機的這個端口上。UDP端口的詳細(xì)介紹可以參照相關(guān)文章。 UDP協(xié)議使用IP層提供的服務(wù)把從應(yīng)用層得到的數(shù)據(jù)從一臺主機的某個應(yīng)用程
序傳給網(wǎng)絡(luò)上另一臺主機上的某一個應(yīng)用程序。其特點如下 1、 UDP傳送數(shù)據(jù)前并不與對方建立連接,即UDP是無連接的,在傳輸數(shù)據(jù)前,發(fā)送 方和接收方相互交換信息使雙方同步。 2、 UDP不對收到的數(shù)據(jù)進行排序,在UDP報文的首部中并沒有關(guān)于數(shù)據(jù)順序的信 息(如TCP所采用的序號),而且報文不一定按順序到達的,所以接收端無從排起。
3、UDP對接收到的數(shù)據(jù)報不發(fā)送確認(rèn)信號,發(fā)送端不知道數(shù)據(jù)是否被正確接收,也 不會重發(fā)數(shù)據(jù)。 4、 UDP傳送數(shù)據(jù)較TCP快速,系統(tǒng)開銷也少。 從以上特點可知,UDP提供的是無連接的、不可靠的數(shù)據(jù)傳送方式,是一種盡力而 為的數(shù)據(jù)交付服務(wù)。問題在于,TCP協(xié)議在網(wǎng)絡(luò)發(fā)展的前期,適用于所有的用戶。在前期使 用網(wǎng)絡(luò)的用戶,每個人都擁有一個公共的固定的ip地址,隨著用戶的增多,ip地址資源開 始變得匱乏。為了解決ip資源匱乏的問題,nat(網(wǎng)絡(luò)地址轉(zhuǎn)換器)設(shè)備出現(xiàn)了,大的網(wǎng)絡(luò) 用戶集群使用局域網(wǎng)地址,訪問公共網(wǎng)絡(luò)時分配臨時的公網(wǎng)地址的方式,解決了 ip匱乏問題。但是也直接導(dǎo)致了網(wǎng)絡(luò)狀態(tài)的復(fù)雜化,并直接影響了TCP協(xié)議的適用范圍。用戶與用 戶之間使用TCP協(xié)議共享資源時,絕大多數(shù)情況都無法進行。UDP協(xié)議可以穿越絕大多數(shù)的 nat設(shè)備共享用戶資源,但是UDP協(xié)議的無連接以及不可靠傳輸?shù)奶攸c,使得共享資源的過 程變得異常艱難。
發(fā)明內(nèi)容
本發(fā)明提供一種基于UDP協(xié)議實現(xiàn)互聯(lián)網(wǎng)中兩個客戶終端之間數(shù)據(jù)的可靠傳輸 方法,旨在彌補TCP協(xié)議下對傳輸數(shù)據(jù)因IP地址數(shù)量有限而受到的限制問題。
本發(fā)明一種基于UDP協(xié)議的數(shù)據(jù)傳輸方法,包括如下步驟 (SI)發(fā)送終端將待發(fā)送的文件分成數(shù)據(jù)包,為數(shù)據(jù)包設(shè)置序號,以便接收終端將 各個數(shù)據(jù)包重新恢復(fù)為發(fā)送的文件; (S2)發(fā)送終端設(shè)置三個隊列,包括等待發(fā)送數(shù)據(jù)隊列、等待應(yīng)答數(shù)據(jù)隊列和補發(fā) 數(shù)據(jù)隊列。其中,等待發(fā)送數(shù)據(jù)隊列,將數(shù)據(jù)包信息以先進先出的方式按序排列,并且基于 UDP協(xié)議建立傳輸鏈路實現(xiàn)數(shù)據(jù)包的傳輸; (S3)當(dāng)?shù)却l(fā)送數(shù)據(jù)隊列中的一個數(shù)據(jù)包數(shù)據(jù)全部發(fā)出后,將該數(shù)據(jù)包信息從等 待發(fā)送數(shù)據(jù)隊列放入所述等待應(yīng)答數(shù)據(jù)隊列,等待所述接收終端應(yīng)答;當(dāng)接收終端應(yīng)答接 收成功時,等待應(yīng)答數(shù)據(jù)隊列刪除成功傳輸?shù)臄?shù)據(jù)包信息; (S4)當(dāng)接收終端對所述等待應(yīng)答數(shù)據(jù)隊列中的數(shù)據(jù)包超時或未應(yīng)答,則將該數(shù)據(jù) 包放入補發(fā)數(shù)據(jù)隊列,用于等待重新放入等待發(fā)送數(shù)據(jù)隊列進行發(fā)送。 本發(fā)明基于UDP協(xié)議的數(shù)據(jù)傳輸方法,其改進在于,上述步驟(S2)中,等待發(fā)送數(shù) 據(jù)隊列根據(jù)數(shù)據(jù)包的編號按序排列。此外優(yōu)選方式下,在同一時刻,發(fā)送終端和接收終端之 間可以建立多個傳輸鏈路。 本發(fā)明基于UDP協(xié)議的數(shù)據(jù)傳輸方法,針對置于nat設(shè)備之后無法使用TCP可靠 傳輸機制的用戶,使用UDP協(xié)議進行用戶間的資源共享。根據(jù)UDP協(xié)議的特點,對UDP協(xié)議 進行封裝,使UDP協(xié)議在共享資源時與TCP協(xié)議效果相同,簡化數(shù)據(jù)共享的過程;從而極大 的拓寬了網(wǎng)絡(luò)間用戶互相連接的范圍,使更多的用戶可以采用互相連接的方式進行資源共 享;并因此大幅度地提高了網(wǎng)絡(luò)的傳輸效率。尤其針對于用戶機而言,UDP協(xié)議采用端口一 對多的連接,TCP采用端口一對一的連接,UDP協(xié)議較TCP協(xié)議更加節(jié)省本地資源;擺脫了 IP地址數(shù)量的限制,從而可以廣泛地應(yīng)用于互聯(lián)網(wǎng)技術(shù)下的數(shù)據(jù)傳輸,而且能夠提高數(shù)據(jù) 傳輸?shù)目煽啃浴?br>
圖1是本發(fā)明基于UDP協(xié)議的數(shù)據(jù)傳輸方法兩終端間的流程情況示意圖。
具體實施例方式
如圖l所示本發(fā)明基于UDP協(xié)議的數(shù)據(jù)傳輸方法的流程圖,左側(cè)為發(fā)送終端的流 程情況,右側(cè)為接收終端的流程情況,二者之間通過互聯(lián)網(wǎng)網(wǎng)絡(luò)交互信息。
圖中,邏輯控制層,用于處理邏輯流程,建立在網(wǎng)絡(luò)傳輸層之上,主要負(fù)責(zé)處理邏 輯問題,需要進行網(wǎng)絡(luò)讀寫時,通過網(wǎng)絡(luò)傳輸層完成。網(wǎng)絡(luò)鏈路控制器,用于綁定一個本地
4端口或者稱為網(wǎng)絡(luò)地址(socketaddress),負(fù)責(zé)所有使用綁定端口發(fā)送的數(shù)據(jù);由于目的 地址不同,每個目的地址與本地端口地址建立一條傳輸鏈路,每個網(wǎng)絡(luò)鏈路控制器可以擁 有多條傳輸鏈路。傳輸鏈路,其鏈路由本地地址與目的地址作為鏈路的唯一標(biāo)識。而數(shù)據(jù)處 理器,在發(fā)送數(shù)據(jù)時,對需要發(fā)送的數(shù)據(jù)按傳遞順序進行編號;接收數(shù)據(jù)時,按照數(shù)據(jù)編號 進行數(shù)據(jù)整合,完成整合的數(shù)據(jù)按照順序向上傳遞到邏輯處理層進行處理。此外,網(wǎng)絡(luò)傳輸 端口 或者稱為SocketAddress,網(wǎng)絡(luò)傳輸?shù)刂罚蒊P+port組成,如202. 96. 69. 38 :4578 ; 網(wǎng)絡(luò)傳輸?shù)刂吩诰W(wǎng)絡(luò)中是唯一 的存在,標(biāo)識本機的通信地址。
本發(fā)明基于UDP協(xié)議的數(shù)據(jù)傳輸方法,具體包括如下步驟 (1)發(fā)送終端將待發(fā)送的文件分成數(shù)據(jù)包,為數(shù)據(jù)包設(shè)置序號,以便接收終端將各 個數(shù)據(jù)包重新恢復(fù)為發(fā)送的文件; (2)發(fā)送終端在每個鏈路內(nèi)擁有三個數(shù)據(jù)存儲隊列,分別是等待發(fā)送數(shù)據(jù)隊列、
等待應(yīng)答數(shù)據(jù)隊列和補發(fā)數(shù)據(jù)隊列。其中,等待發(fā)送數(shù)據(jù)隊列,在隊列內(nèi)存儲等待發(fā)送的數(shù)
據(jù),使用可靠傳輸,要求接收方接到數(shù)據(jù)后給予發(fā)送方應(yīng)答(通知已收到)。等待發(fā)送數(shù)據(jù)
隊列等待應(yīng)答數(shù)據(jù)隊列,隊列內(nèi)的數(shù)據(jù)已經(jīng)發(fā)送過,等待對方收到后的響應(yīng),確認(rèn)對方收
到。補發(fā)數(shù)據(jù)隊列,當(dāng)一定時間內(nèi)未收到對方的響應(yīng)信息,對可能丟失的數(shù)據(jù)進行補發(fā)。傳
輸鏈路中存儲了所有的關(guān)于此鏈路的數(shù)據(jù),數(shù)據(jù)傳遞給鏈路后直接添加到"等待發(fā)送數(shù)據(jù)
隊列",由發(fā)送線程將數(shù)據(jù)從"等待發(fā)送數(shù)據(jù)隊列"中取出,寫入網(wǎng)絡(luò)端口 ;然后將數(shù)據(jù)加入
"等待應(yīng)答數(shù)據(jù)隊列",并定時檢查響應(yīng),一定時間內(nèi)沒有受到應(yīng)答,將會操作"補發(fā)數(shù)據(jù)隊
列"進行補發(fā)。
具體方式為 a)等待發(fā)送數(shù)據(jù)隊列將數(shù)據(jù)包信息以先進先出的方式按序排列,并且基于UDP協(xié) 議建立傳輸鏈路實現(xiàn)數(shù)據(jù)包的傳輸。 b)當(dāng)?shù)却l(fā)送數(shù)據(jù)隊列中的一個數(shù)據(jù)包數(shù)據(jù)全部發(fā)出后,將該數(shù)據(jù)包信息從等待 發(fā)送數(shù)據(jù)隊列放入所述等待應(yīng)答數(shù)據(jù)隊列,等待接收終端應(yīng)答;當(dāng)接收終端應(yīng)答接收成功 時,等待應(yīng)答數(shù)據(jù)隊列刪除成功傳輸?shù)臄?shù)據(jù)包信息。 c)當(dāng)接收終端對所述等待應(yīng)答數(shù)據(jù)隊列中的數(shù)據(jù)包超時或未應(yīng)答,則將該數(shù)據(jù)包 放入補發(fā)數(shù)據(jù)隊列,用于等待重新放入等待發(fā)送數(shù)據(jù)隊列進行發(fā)送。 此處,"超時"概念如下通常這個時間根據(jù)RTT值來計算,RTT值在網(wǎng)絡(luò)中稱為 回路時間,也就是一個數(shù)據(jù)包從發(fā)送時間開始計算,到接受到響應(yīng)包結(jié)束,其間所耗用的時 間。超時是以RTT值為基準(zhǔn),本發(fā)明優(yōu)選方式下,第一次計時以2個RTT值時間為開始補發(fā) 的計時基礎(chǔ),第二次是4個RTT值,依此類推,2倍數(shù)的遞增方式。當(dāng)數(shù)據(jù)包的總發(fā)送時間超 過5秒,認(rèn)為鏈路存在故障,并放棄發(fā)送。對于首次發(fā)送的數(shù)據(jù)包,RTT值默認(rèn)為50毫秒到 300毫秒中的一個優(yōu)選數(shù)值;而對于多個反饋的數(shù)據(jù)包,RTT值可取平均或加權(quán)平均計算獲 得。通常情況下,未應(yīng)答的狀態(tài)也以超時為判斷前提,也就是說,在一定時間后無法接受到 響應(yīng),即可直接判定為未作應(yīng)答;因此此處"超時"、"未作應(yīng)答"的概念等同。
根據(jù)附圖l,分別說明發(fā)送終端和接收終端的實現(xiàn)過程。 發(fā)送終端首先由邏輯控制層產(chǎn)生數(shù)據(jù),數(shù)據(jù)經(jīng)程序內(nèi)部傳遞,傳遞到網(wǎng)絡(luò)層,網(wǎng)絡(luò) 層根據(jù)數(shù)據(jù)綁定的本地地址,關(guān)聯(lián)網(wǎng)絡(luò)鏈路控制器,再根據(jù)目的地址綁定具體的傳輸鏈路, 找到具體的鏈路后,將數(shù)據(jù)傳遞給數(shù)據(jù)處理器,對數(shù)據(jù)進行傳輸編號,以防止傳輸順序錯亂,并將數(shù)據(jù)封裝在可執(zhí)行接口內(nèi)部;封裝完畢后,將對應(yīng)的網(wǎng)絡(luò)鏈路控制器添加到執(zhí)行隊 列,等待獨立執(zhí)行線程訪問。獨立執(zhí)行線程遍歷執(zhí)行隊列,按照隊列內(nèi)的排放順序,將網(wǎng)絡(luò) 鏈路控制器逐個取出,檢索傳輸鏈路,將需要發(fā)送的數(shù)據(jù)發(fā)送,通過網(wǎng)絡(luò)端口 ,發(fā)送向目的 地。 而接收終端由獨立線程定時遍歷本地所有的網(wǎng)絡(luò)鏈路控制器,讀取接收到的存在 于所有鏈路的數(shù)據(jù),每接收到一個數(shù)據(jù)對發(fā)送方做接收數(shù)據(jù)應(yīng)答,將接收完整的數(shù)據(jù)傳遞 給數(shù)據(jù)處理器,由數(shù)據(jù)處理器對接收到的數(shù)據(jù)作整理,通過排序整合,將接續(xù)的數(shù)據(jù)向上傳 遞,交給邏輯處理層作處理,非連續(xù)的數(shù)據(jù)等待數(shù)據(jù)接續(xù)后再上傳。 本發(fā)明基于UDP協(xié)議的數(shù)據(jù)傳輸方法,通過發(fā)送數(shù)據(jù)后,返回接收數(shù)據(jù)響應(yīng)的方 式,對發(fā)送的每一個數(shù)據(jù)進行確認(rèn),達到數(shù)據(jù)可靠傳輸?shù)哪康模總€數(shù)據(jù)都需要應(yīng)答時,發(fā) 送數(shù)據(jù)的速度就相應(yīng)的降低了,針對于這種情況,采取同時傳輸多個數(shù)據(jù)來提高速度,即允 許同時存在多個未收到"接收數(shù)據(jù)響應(yīng)"的數(shù)據(jù)在網(wǎng)絡(luò)中傳輸,這樣在網(wǎng)絡(luò)層傳輸?shù)乃俣染?大大的提高了 ;在網(wǎng)絡(luò)傳輸?shù)倪^程中每個數(shù)據(jù)所走的路徑都可能不同,相應(yīng)的達到目的地 的速度也不同,在網(wǎng)絡(luò)傳輸中由于應(yīng)用的不同,對于數(shù)據(jù)的傳送速度要求也不同,有很多應(yīng) 用需要保證數(shù)據(jù)的收發(fā)順序,目前多個包在網(wǎng)絡(luò)中傳輸,傳輸速度是無法保證,我們只能通 過程序內(nèi)部來保障順序,在數(shù)據(jù)發(fā)送前,對數(shù)據(jù)進行編號,接收數(shù)據(jù)時,按照編號重新排序, 為防止過多的無序數(shù)據(jù)對網(wǎng)絡(luò)層造成太大的壓力,程序內(nèi)部會將數(shù)據(jù)的數(shù)量控制在一定的 范圍之內(nèi),通過以上的手段結(jié)合應(yīng)用,來實現(xiàn)UDP的可靠傳輸。 以上所述,僅為本發(fā)明較佳的具體實施方式
,但本發(fā)明的保護范圍并不局限于此, 任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明披露的技術(shù)范圍內(nèi),根據(jù)本發(fā)明的技術(shù)方案及其 發(fā)明構(gòu)思加以等同替換或改變,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
一種基于UDP協(xié)議的數(shù)據(jù)傳輸方法,包括在發(fā)送終端和接收終端之間建立傳輸鏈路的步驟,以及依靠所述傳輸鏈路傳輸數(shù)據(jù)的步驟;其特征在于,具體包括如下步驟(S1)所述發(fā)送終端將待發(fā)送的文件分成數(shù)據(jù)包,為數(shù)據(jù)包設(shè)置序號,以便所述接收終端將各個數(shù)據(jù)包重新恢復(fù)為發(fā)送的文件;(S2)所述發(fā)送終端設(shè)置三個隊列,包括等待發(fā)送數(shù)據(jù)隊列、等待應(yīng)答數(shù)據(jù)隊列和補發(fā)數(shù)據(jù)隊列;所述等待發(fā)送數(shù)據(jù)隊列,將數(shù)據(jù)包信息以先進先出的方式按序排列,并且基于UDP協(xié)議建立傳輸鏈路實現(xiàn)數(shù)據(jù)包的傳輸;(S3)當(dāng)所述等待發(fā)送數(shù)據(jù)隊列中的一個數(shù)據(jù)包數(shù)據(jù)全部發(fā)出后,將該數(shù)據(jù)包信息從所述等待發(fā)送數(shù)據(jù)隊列放入所述等待應(yīng)答數(shù)據(jù)隊列,等待所述接收終端應(yīng)答;當(dāng)所述接收終端應(yīng)答接收成功時,所述等待應(yīng)答數(shù)據(jù)隊列刪除成功傳輸?shù)臄?shù)據(jù)包信息;(S4)當(dāng)所述接收終端對所述等待應(yīng)答數(shù)據(jù)隊列中的數(shù)據(jù)包未做應(yīng)答時,則將該數(shù)據(jù)包放入所述補發(fā)數(shù)據(jù)隊列,用于等待重新放入所述等待發(fā)送數(shù)據(jù)隊列進行發(fā)送。
2. 根據(jù)權(quán)利要求1所述基于UDP協(xié)議的數(shù)據(jù)傳輸方法,其特征在于,步驟(S2)中,所述 等待發(fā)送數(shù)據(jù)隊列根據(jù)數(shù)據(jù)包的編號按序排列。
3. 根據(jù)權(quán)利要求2所述基于UDP協(xié)議的數(shù)據(jù)傳輸方法,其特征在于,同一時刻,所述發(fā) 送終端和接收終端之間建立多個傳輸鏈路。
全文摘要
本發(fā)明公開了一種基于UDP協(xié)議的數(shù)據(jù)傳輸方法,具體步驟如下(S1)發(fā)送終端將待發(fā)送的文件分成數(shù)據(jù)包,為數(shù)據(jù)包設(shè)置序號,以便接收終端將各個數(shù)據(jù)包重新恢復(fù)為發(fā)送的文件;(S2)發(fā)送終端設(shè)置三個隊列,當(dāng)?shù)却l(fā)送數(shù)據(jù)隊列中的一個數(shù)據(jù)包數(shù)據(jù)全部發(fā)出后,等待接收終端應(yīng)答;當(dāng)接收終端應(yīng)答接收成功時,等待應(yīng)答數(shù)據(jù)隊列刪除成功傳輸?shù)臄?shù)據(jù)包信息。當(dāng)接收終端對所述等待應(yīng)答數(shù)據(jù)隊列中的數(shù)據(jù)包超時未應(yīng)答,則將該數(shù)據(jù)包放入補發(fā)數(shù)據(jù)隊列,用于等待重新放入所述等待發(fā)送數(shù)據(jù)隊列進行發(fā)送。本發(fā)明拓寬了網(wǎng)絡(luò)間用戶互相連接的范圍,大幅提高了網(wǎng)絡(luò)的傳輸效率,可以廣泛地應(yīng)用于互聯(lián)網(wǎng)技術(shù)下的數(shù)據(jù)傳輸,并且能夠保證數(shù)據(jù)傳輸?shù)目煽啃浴?br>
文檔編號H04L12/56GK101778093SQ20091001007
公開日2010年7月14日 申請日期2009年1月13日 優(yōu)先權(quán)日2009年1月13日
發(fā)明者李德寶, 蔣一 申請人:蔣一