基于udp的可靠傳輸方法
【專利摘要】一種基于UDP的可靠傳輸方法,在UDP傳輸中借鑒了TCP的傳輸特點,通過3次握手建立連接,通過心跳維持連接,可以主動或者接收不到心跳后斷開連接從而為數(shù)據(jù)傳輸建立一個可靠的傳輸通道;在數(shù)據(jù)的傳輸時,通過滑動窗口以及重發(fā)機制最大效率地傳輸數(shù)據(jù)。本發(fā)明的數(shù)據(jù)傳輸更加靈活,可以動態(tài)地調(diào)整參數(shù),以適應(yīng)不用的網(wǎng)絡(luò)環(huán)境;并且適應(yīng)范圍更廣,可以使用于P2P網(wǎng)絡(luò)。本發(fā)明極大地改善了各種適用于UDP應(yīng)用場所的網(wǎng)絡(luò)環(huán)境,提升UDP傳輸?shù)男剩档土酥貍髀?,減少了數(shù)據(jù)的冗余。針對網(wǎng)絡(luò)異常情況,采取一系列措施,保證網(wǎng)絡(luò)傳輸?shù)馁|(zhì)量。
【專利說明】基于UDP的可靠傳輸方法
【技術(shù)領(lǐng)域】
[0001]本申請涉及一種網(wǎng)絡(luò)傳輸方法,具體地,涉及一種基于UDP,且結(jié)合了 TCP傳輸特點的可靠傳輸方法。
【背景技術(shù)】
[0002]目前,在設(shè)計網(wǎng)絡(luò)數(shù)據(jù)傳輸方案時,常用到的有TCP(傳輸控制協(xié)議)傳輸方式和UDP (用戶數(shù)據(jù)報文協(xié)議)傳輸方式。
[0003]TCP 傳輸
TCP是一種基于連接的協(xié)議,在數(shù)據(jù)通信之前需要通信雙方建立連接,事先為所發(fā)送的數(shù)據(jù)開辟好通道,然后,再進行數(shù)據(jù)發(fā)送。
[0004]TCP協(xié)議上規(guī)定類流控制,確保通信數(shù)據(jù)可靠、順序到達目的地,因此有一個三次握手的要求。按照協(xié)議規(guī)范的要求,實現(xiàn)的路由設(shè)備提供相應(yīng)的支持,并且盡量不丟棄TCP數(shù)據(jù),實現(xiàn)協(xié)議的系統(tǒng)驅(qū)動層進行重發(fā)和滑動窗口控制,并且通過增加重發(fā)時間減少可能帶來的網(wǎng)絡(luò)堵塞問題。系統(tǒng)提供的API應(yīng)用上,針對不同的鏈接分配獨立緩沖區(qū),進一步減少可能的丟包問題(由于緩沖區(qū)滿造成數(shù)據(jù)無法接受引起數(shù)據(jù)包丟失問題)。
[0005]TCP所支持的協(xié)議包括Telnet (遠程登錄)、FTP (文件傳輸協(xié)議)、SMTP (簡單郵件傳輸協(xié)議)等。
[0006]UDP 傳輸
UDP是面向非連接的(正式通信前不必與對方建立連接,不管對方狀態(tài)就直接發(fā)送),不能提供可靠性、流控、差錯恢復(fù)功能。UDP用于一次只傳送少量數(shù)據(jù),可靠性要求低、傳輸經(jīng)濟等應(yīng)用。
[0007]UDP沒有三次握手的需求,網(wǎng)絡(luò)設(shè)備在通信時,UDP數(shù)據(jù)擁有比TCP數(shù)據(jù)更高的優(yōu)先通信權(quán)利,這點使得UDP數(shù)據(jù)在通信上更加的快速,但是當(dāng)網(wǎng)絡(luò)擁堵時,通信設(shè)備同樣會優(yōu)先丟棄UDP數(shù)據(jù),這種設(shè)計方式會導(dǎo)致UDP數(shù)據(jù)出現(xiàn)丟失的問題,同時協(xié)議沒有規(guī)定相應(yīng)的流控制方式,自然也不會保證數(shù)據(jù)的順序到達。在沒有流控制的情況下,UDP數(shù)據(jù)可能出現(xiàn)丟失、亂序到達的問題,同樣由于沒有流控制,如果開發(fā)控制不當(dāng),可能導(dǎo)致數(shù)據(jù)風(fēng)暴問題。在系統(tǒng)驅(qū)動實現(xiàn)上,由于所有的UDP數(shù)據(jù)接收時,使用共享的數(shù)據(jù)緩沖區(qū),設(shè)置不當(dāng)大小的緩沖區(qū),可能會增加數(shù)據(jù)包的丟失問題,這個就是為什么UDP協(xié)議無法實現(xiàn)高并發(fā)的服務(wù)器原因所在。
[0008]UDP支持的應(yīng)用協(xié)議:NFS (網(wǎng)絡(luò)文件系統(tǒng))、SNMP (簡單網(wǎng)絡(luò)管理系統(tǒng))、DNS (主域名稱系統(tǒng))、TFTP (通用文件傳輸協(xié)議)等。
[0009]但現(xiàn)有技術(shù)中,上述兩種傳輸方法具有一定的缺陷,具體為:對于TCP傳輸,其速度慢、建立連接需要開銷較多(時間,系統(tǒng)資源)、實時性較差。對于UDP傳輸,傳輸不可靠、在網(wǎng)絡(luò)擁堵的情況下容易丟包、數(shù)據(jù)包無序、重傳率高。
[0010]特別是在P2P網(wǎng)絡(luò)中,由于TCP需要對方的IP和端口固定,且能直接訪問,而在P2P網(wǎng)絡(luò)中大部分情況都是,主機掛在交換機或路由器后面,映射出來的外網(wǎng)端口不是固定的,也不能被直接訪問,所以,P2P網(wǎng)絡(luò)大部分采用的都是UDP,而不是TCP。因此,如何能夠結(jié)合兩種網(wǎng)絡(luò)傳輸協(xié)議的優(yōu)點,形成一種新的網(wǎng)絡(luò)傳輸協(xié)議,特別的,能夠?qū)⑦@種網(wǎng)絡(luò)傳輸協(xié)議應(yīng)用在P2P等無法使用TCP網(wǎng)絡(luò)傳輸協(xié)議的網(wǎng)絡(luò)中,成為現(xiàn)有技術(shù)亟需解決的技術(shù)問題。
【發(fā)明內(nèi)容】
[0011]本發(fā)明的目的在于提出一種新的基于UDP的可靠傳輸方法,使得該方法能夠適用于P2P等UDP使用的網(wǎng)絡(luò),既保證傳輸?shù)男?,又降低了?shù)據(jù)的重傳率。
[0012]為達此目的,本發(fā)明采用以下技術(shù)方案:
一種基于UDP的可靠傳輸方法,其特征在于:在UDP傳輸中,模擬TCP的3次握手,建立連接,具體為:
O發(fā)送端向接收端發(fā)送SYN,告訴對方要和它建立連接,同時將自己的狀態(tài)置為SYN_SEND ;
2)當(dāng)接收方收到SYN消息后,給對方回應(yīng)ACK,同時在發(fā)一個SYN,并將自己的狀態(tài)置為SYN_RECEIVED ;
3)當(dāng)發(fā)送端收到對方的回應(yīng)ACK和SYN后,再給對方發(fā)送一個ACK,同時將自己的狀態(tài)置為 ESTABLISHED ;
4)當(dāng)接收端收到對方的回應(yīng)ACK后,更新自己的狀態(tài)為ESTABLISHED,至此雙方建立連接。
[0013]優(yōu)選地,在UDP數(shù)據(jù)傳輸時,采用如下步驟進行數(shù)據(jù)傳輸:
1)對于發(fā)送方和接收方,分別分配發(fā)送緩沖區(qū)和接收緩沖區(qū),用來保存發(fā)送和接收的數(shù)據(jù);
2)應(yīng)用層將要傳輸?shù)臄?shù)據(jù)放到發(fā)送緩沖區(qū)中,當(dāng)緩沖區(qū)滿了,則停止放入,直到有空閑的緩沖區(qū)再繼續(xù)放入;
3)網(wǎng)絡(luò)層將緩沖區(qū)中的數(shù)據(jù)組上包頭,按數(shù)據(jù)包序號逐個發(fā)出去,同時等待接收方回應(yīng) ack ;
4)接收方收到數(shù)據(jù)包,按照包的序號放到對應(yīng)的緩沖區(qū)位置,并需要根據(jù)當(dāng)前的緩沖區(qū)狀態(tài),計算出回應(yīng)的ack_no,即ack序號,給對方回復(fù)一個ack消息;
5)發(fā)送端收到ack后,根據(jù)回應(yīng)的ack_no判斷,發(fā)送緩沖區(qū)的滑動床后是否后移,當(dāng)滿足窗口后移條件后,可以把緩沖區(qū)前面的位置騰出來,并通知上傳繼續(xù)放數(shù)據(jù)。
[0014]優(yōu)選地,在采用UDP方式在傳輸數(shù)據(jù)時,當(dāng)產(chǎn)生丟包現(xiàn)象,通過數(shù)據(jù)重傳,將丟棄的數(shù)據(jù)包重新發(fā)送給接收端。
[0015]優(yōu)選地,接收端在接收的時候,要把接收到的數(shù)據(jù)包按次序放到緩沖隊列中,同時根據(jù)當(dāng)前緩沖區(qū)的情況計算出對應(yīng)的ACK序號,回復(fù)對方,發(fā)送端收到回復(fù)之后,根據(jù)對應(yīng)的ACK序號,判斷是繼續(xù)發(fā)送下一個數(shù)據(jù)包,還是重傳之前發(fā)過的數(shù)據(jù)包。
[0016]優(yōu)選地,接收端在接收的時候,要把接收到的數(shù)據(jù)包按次序放到緩沖隊列中,同時根據(jù)當(dāng)前緩沖區(qū)的情況計算出對應(yīng)的ACK序號和SACK序號。
[0017]優(yōu)選地,當(dāng)發(fā)送端發(fā)送的UDP數(shù)據(jù)塊過大,超過單個緩沖區(qū)的大小的時候,就需要把這塊數(shù)據(jù)拆成幾個小的數(shù)據(jù)包發(fā)送,拆包的時候,以緩沖區(qū)容量為限,將數(shù)據(jù)包從前往后依次放入到緩沖隊列中,若提示緩沖區(qū)滿,則需要將緩沖區(qū)鎖定,防止其他進程寫入,造成數(shù)據(jù)破壞,等有空閑緩沖區(qū)的時候,再將剩余的數(shù)據(jù)塊寫入。
[0018]優(yōu)選地,當(dāng)接收端收到數(shù)據(jù)后,分配一塊大的緩沖區(qū),將收到的包,按順序依次寫入緩沖區(qū),保證收到的順序和發(fā)送的順序是一致的,這樣組合出來的數(shù)據(jù)塊和發(fā)送的原數(shù)據(jù)塊就能保證是一致的。
[0019]優(yōu)選地,在UDP連接時,通過定時的向?qū)Ψ桨l(fā)送心跳包,告訴對方自己處于活躍狀態(tài),收到對方的心跳后更新一下狀態(tài)。
[0020]優(yōu)選地,在UDP斷開連接時,傳輸?shù)囊环侥軌蛑鲃訑嚅_連接或者是長時間等不到對方的心跳,將連接斷開。
[0021 ] 優(yōu)選地,對UDP數(shù)據(jù)傳輸進行數(shù)據(jù)校驗。
[0022]—種基于UDP的可靠傳輸方法,在UDP傳輸中借鑒了 TCP的傳輸特點,通過3次握手建立連接,通過心跳維持連接,可以主動或者接收不到心跳后斷開連接從而為數(shù)據(jù)傳輸建立一個可靠的傳輸通道;在數(shù)據(jù)的傳輸時,通過滑動窗口以及重發(fā)機制最大效率地傳輸數(shù)據(jù)。本發(fā)明的數(shù)據(jù)傳輸更加靈活,可以動態(tài)地調(diào)整參數(shù),以適應(yīng)不用的網(wǎng)絡(luò)環(huán)境;并且適應(yīng)范圍更廣,可以使用于P2P網(wǎng)絡(luò)。本發(fā)明極大地改善了各種適用于UDP應(yīng)用場所的網(wǎng)絡(luò)環(huán)境,提升UDP傳輸?shù)男?,降低了重傳率,減少了數(shù)據(jù)的冗余。針對網(wǎng)絡(luò)異常情況,采取一系列措施,保證網(wǎng)絡(luò)傳輸?shù)馁|(zhì)量。
【專利附圖】
【附圖說明】
[0023]圖1是根據(jù)本發(fā)明具體實施例的基于UDP的可靠傳輸方法的建立連接時序圖;
圖2是根據(jù)本發(fā)明具體實施例的基于UDP的可靠傳輸方法的數(shù)據(jù)傳輸?shù)臅r序圖;
圖3是根據(jù)本發(fā)明具體實施例的基于UDP的可靠傳輸方法的數(shù)據(jù)丟包重發(fā)的時序圖; 圖4是根據(jù)本發(fā)明具體實施例的基于UDP的可靠傳輸方法的數(shù)據(jù)包無序傳輸?shù)臅r序圖。
【具體實施方式】
[0024]下面結(jié)合附圖和實施例對本發(fā)明作進一步的詳細說明。可以理解的是,此處所描述的具體實施例僅僅用于解釋本發(fā)明,而非對本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部結(jié)構(gòu)。
[0025]本發(fā)明的原理在于:針對目前TCP和UDP的缺點,設(shè)計一個底層采用UDP傳輸,同時有兼具TCP傳輸特性的技術(shù)方案——UTCP。技術(shù)方案主要從兩個方面考慮,一個連接的建立,維持和斷開,即如何為數(shù)據(jù)傳輸建立一個可靠的傳輸通道;另一個是數(shù)據(jù)的傳輸,即如何最大效率地傳輸數(shù)據(jù),同時又降低數(shù)據(jù)的重傳率。應(yīng)當(dāng)注意,本發(fā)明中底層傳輸均采用UDP傳輸完成。
[0026]實施例1:
建立連接:原本基于UDP的傳輸是不需要建立連接的,為了建立一個可靠的傳輸通道,傳輸雙發(fā)可以模擬TCP的3次握手,建立連接。
[0027]維持連接:通過定時的向?qū)Ψ桨l(fā)送心跳包,告訴對方自己處于活躍狀態(tài)。
[0028]斷開連接:斷開連接包括兩種情況,一種是傳輸?shù)囊环街鲃訑嚅_連接;另一種是長時間等不到對方的心跳,將連接斷開。
[0029]具體而言,包括如下方面。
[0030]建立連接:傳統(tǒng)的UDP傳輸方式是不需要建立連接的,為了傳輸雙方建立可靠的連接,模擬TCP傳輸?shù)?次握手。參見圖1,示出了根據(jù)本發(fā)明具體實施例的基于UDP的可靠傳輸方法的建立連接時序圖,實現(xiàn)過程如下:
O發(fā)送端向接收端發(fā)送SYN,告訴對方要和它建立連接,同時將自己的狀態(tài)置為SYN_SEND ;
2)當(dāng)接收方收到SYN消息后,給對方回應(yīng)ACK,同時在發(fā)一個SYN,并將自己的狀態(tài)置為SYN_RECEIVED ;
3)當(dāng)發(fā)送端收到對方的回應(yīng)ACK和SYN后,再給對方發(fā)送一個ACK,同時將自己的狀態(tài)置為 ESTABLISHED ;
4)當(dāng)接收端收到對方的回應(yīng)ACK后,更新自己的狀態(tài)為ESTABLISHED,至此雙方建立連接。
[0031]維持連接:通過定時器,每隔一定時間向?qū)Ψ桨l(fā)送心跳,收到對方的心跳后更新一下狀態(tài),若連續(xù)幾個心跳驟起都收不到對方心跳,則認為對方已經(jīng)下線,斷開連接。
[0032]斷開連接:分兩種情況:1) 一方主動斷開,斷開前向?qū)Ψ桨l(fā)送一個FIN包,告知對方不用再發(fā)送(或接收)數(shù)據(jù),將自己的狀態(tài)置為CLOSING,對方收到后停止發(fā)送(或接收),同時回復(fù)一個FIN包,收到FIN包將狀態(tài)置置為CLOSED,正式斷開連接;2)超時收不到心跳,認為對方下線,更新狀態(tài)為CLOSED,斷開連接,釋放資源。
[0033]實施例2:
數(shù)據(jù)傳輸:每個客戶端都即可能是發(fā)送端,也可能是接收端,所以在數(shù)據(jù)傳輸?shù)臅r候,需要分配發(fā)送緩沖區(qū)和接收緩沖區(qū),分別用來保存發(fā)送和接收的數(shù)據(jù)。應(yīng)用層過來的數(shù)據(jù),先放到發(fā)送緩沖區(qū)中,通過調(diào)度逐個將緩沖區(qū)的數(shù)據(jù)發(fā)送出去,接收端收到以后再回復(fù)對應(yīng)的ack包,表明這包數(shù)據(jù)已經(jīng)接收,可以發(fā)送下一個數(shù)據(jù)包,發(fā)送端收到ack后,就可發(fā)送下一個數(shù)據(jù)包,同時把舊的緩沖區(qū)騰出來給新的數(shù)據(jù),以此類推雙方實現(xiàn)通信。當(dāng)出現(xiàn)丟包的情況下,通過定時器判斷長時間沒有收到ack的數(shù)據(jù)包進行重發(fā)。具體實現(xiàn)過程(以4個窗口為例),參見圖2示出了根據(jù)本發(fā)明具體實施例的基于UDP的可靠傳輸方法的數(shù)據(jù)傳輸?shù)臅r序圖,如下:
I)應(yīng)用層將要傳輸?shù)臄?shù)據(jù)放到發(fā)送緩沖區(qū)中,當(dāng)緩沖區(qū)滿了,則停止放入,直到有空閑的緩沖區(qū)再繼續(xù)放入。
[0034]2)網(wǎng)絡(luò)層將緩沖區(qū)中的數(shù)據(jù)組上包頭,按數(shù)據(jù)包序號逐個發(fā)出去,同時等待接收方回應(yīng)ack。
[0035]3)接收方收到數(shù)據(jù)包,按照包的序號放到對應(yīng)的緩沖區(qū)位置。由于,Udp數(shù)據(jù)傳輸方式傳輸?shù)臄?shù)據(jù)是無序的,后發(fā)的包可能會先到,所以,需要根據(jù)當(dāng)前的緩沖區(qū)狀態(tài),計算出回應(yīng)的ack_no (即ack序號),給對方回復(fù)一個ack消息。
[0036]4)發(fā)送端收到ack后,根據(jù)回應(yīng)的ack_no判斷,發(fā)送緩沖區(qū)的滑動床后是否后移,當(dāng)滿足窗口后移條件后,可以把緩沖區(qū)前面的位置騰出來,并通知上傳繼續(xù)放數(shù)據(jù)。
[0037]其中,所述ack_no,即ack序號,表明需要傳輸?shù)陌男蛱?。例如,ack2表不已經(jīng)收到了數(shù)據(jù)包I,需要接收數(shù)據(jù)包2。
[0038]實施例3:
數(shù)據(jù)丟包:由于采用UDP方式在傳輸數(shù)據(jù)時,可能產(chǎn)生丟包現(xiàn)象,所以,當(dāng)出現(xiàn)這種情況時,需要能通過數(shù)據(jù)重傳,將丟棄的數(shù)據(jù)包重新發(fā)送給接收端。
[0039]參見圖3,示出了根據(jù)本發(fā)明具體實施例的基于UDP的可靠傳輸方法的數(shù)據(jù)丟包重發(fā)的一個示例性的時序圖。其中ack2,表示已經(jīng)收到了數(shù)據(jù)包1,需要接收數(shù)據(jù)包2。Ack2, sack3表示,表示已經(jīng)收到了后面的數(shù)據(jù)包3,需要接收數(shù)據(jù)包2,即ack表示接收到了時序前面的數(shù)據(jù)包,需要后面的數(shù)據(jù)包,sack表示已經(jīng)接收到了位于時序后面的數(shù)據(jù)包。通過ack和sack的組合,使得在利用UDP網(wǎng)絡(luò)傳輸?shù)臅r候,能夠清楚地知道丟失了什么數(shù)據(jù)包,從而通過計時器判斷超時時,啟動重傳機制。
[0040]數(shù)據(jù)包無序:由于,采用UDP方式傳輸?shù)臄?shù)據(jù)包,對方收到的包可能是無序的,而在視頻文件傳輸?shù)臅r候,對數(shù)據(jù)包的次序要求非常嚴格,必須是有序的。針對這種情況,接收端在接收的時候,要把接收到的數(shù)據(jù)包按次序放到緩沖隊列中,同時根據(jù)當(dāng)前緩沖區(qū)的情況計算出對應(yīng)的ACK (有時,還具有SACK序號)序號,回復(fù)對方。發(fā)送端收到回復(fù)之后,根據(jù)對應(yīng)的ACK值,判斷是繼續(xù)發(fā)送下一個數(shù)據(jù)包,還是重傳之前發(fā)過的數(shù)據(jù)包。
[0041]參見圖4,示出了根據(jù)本發(fā)明具體實施例的基于UDP的可靠傳輸方法的數(shù)據(jù)包無序傳輸?shù)臅r序圖。
[0042]實施例4:
數(shù)據(jù)拆包:當(dāng)發(fā)送端發(fā)送的UDP數(shù)據(jù)塊過大,超過單個緩沖區(qū)的大小的時候,就需要把這塊數(shù)據(jù)拆成幾個小的數(shù)據(jù)包發(fā)送。拆包的時候,以緩沖區(qū)容量為限,將數(shù)據(jù)包從前往后依次放入到緩沖隊列中,若提示緩沖區(qū)滿,則需要將緩沖區(qū)鎖定,防止其他進程寫入,造成數(shù)據(jù)破壞,等有空閑緩沖區(qū)的時候,再將剩余的數(shù)據(jù)塊寫入,這樣就可以保證同一個數(shù)據(jù)塊的幾個小數(shù)據(jù)包是連續(xù)的。
[0043]數(shù)據(jù)組包:當(dāng)接收端收到數(shù)據(jù)后,考慮到發(fā)送端有可能拆包,所以分配一塊大的緩沖區(qū),將收到的包,按順序依次寫入緩沖區(qū),保證收到的順序和發(fā)送的順序是一致的,這樣組合出來的數(shù)據(jù)塊和發(fā)送的原數(shù)據(jù)塊就能保證是一致的。
[0044]為了保證拆包后的數(shù)據(jù)的連續(xù)性,必須遵循兩條規(guī)則:1)拆包之后的小包,包序號必須是連續(xù)的;2)接收端收到小包后,必須按照包序號,有序地重組數(shù)據(jù)。
[0045]數(shù)據(jù)校驗:在數(shù)據(jù)傳輸?shù)臅r候,從應(yīng)用層到傳輸層,到網(wǎng)絡(luò)層,到物理層等各個環(huán)節(jié),可能對數(shù)據(jù)造成破壞,影響數(shù)據(jù)的一致性,所以,加入數(shù)據(jù)校驗,保證收發(fā)數(shù)據(jù)的一致。校驗分兩種校驗,一種是網(wǎng)絡(luò)層數(shù)據(jù)校驗,通過CRC校驗碼實現(xiàn);另一種是應(yīng)用層的校驗,通過MD5算法實現(xiàn),實現(xiàn)原理是,發(fā)送前根據(jù)數(shù)據(jù)報文計算出一個MD5值,連同數(shù)據(jù)包一起發(fā)送,接收到收到后,也計算出一個MD5值,并和發(fā)送端的MD5值進行比較,若一致則說明刷雙方的數(shù)據(jù)是一致的。
[0046]綜上,本發(fā)明在底層采用UDP進行傳輸,在傳輸規(guī)則中借鑒了 TCP傳輸?shù)囊?guī)則。因此,相對于TCP,UTCP傳輸規(guī)則具有兩個方面的優(yōu)勢:1)更加靈活,可以動態(tài)地調(diào)整參數(shù),以適應(yīng)不用的網(wǎng)絡(luò)環(huán)境;2 )適應(yīng)范圍更廣,TCP不適用于P2P網(wǎng)絡(luò),而UTCP可以(因為UTCP底層使用UDP實現(xiàn)的)。
[0047]本發(fā)明針對當(dāng)前互聯(lián)網(wǎng)環(huán)境中,傳輸數(shù)據(jù)量大,并發(fā)度高的情況,設(shè)計一個基于UDP的可靠的傳輸方案,極大地改善了各種適用于UDP應(yīng)用場所的網(wǎng)絡(luò)環(huán)境,提升UDP傳輸?shù)男剩瑫r也降低了重傳率,減少了數(shù)據(jù)的冗余。針對網(wǎng)絡(luò)異常情況,如網(wǎng)絡(luò)擁堵,網(wǎng)絡(luò)丟包,數(shù)據(jù)包無序,臟數(shù)據(jù)等多種情況,采取一系列措施,保證網(wǎng)絡(luò)傳輸?shù)馁|(zhì)量。
[0048]以上內(nèi)容是結(jié)合具體的優(yōu)選實施方式對本發(fā)明所作的進一步詳細說明,不能認定本發(fā)明的【具體實施方式】僅限于此,對于本發(fā)明所屬【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡單的推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明由所提交的權(quán)利要求書確定保護范圍。
【權(quán)利要求】
1.一種基于UDP的可靠傳輸方法,其特征在于:在UDP傳輸中,模擬TCP的3次握手,建立連接,具體為: O發(fā)送端向接收端發(fā)送SYN,告訴對方要和它建立連接,同時將自己的狀態(tài)置為SYN_SEND ; 2)當(dāng)接收方收到SYN消息后,給對方回應(yīng)ACK,同時在發(fā)一個SYN,并將自己的狀態(tài)置為SYN_RECEIVED ; 3)當(dāng)發(fā)送端收到對方的回應(yīng)ACK和SYN后,再給對方發(fā)送一個ACK,同時將自己的狀態(tài)置為 ESTABLISHED ; 4)當(dāng)接收端收到對方的回應(yīng)ACK后,更新自己的狀態(tài)為ESTABLISHED,至此雙方建立連接。
2.根據(jù)權(quán)利要求1所述的基于UDP的可靠傳輸方法,其特征在于: 在UDP數(shù)據(jù)傳輸時,采用如下步驟進行數(shù)據(jù)傳輸: 1)對于發(fā)送方和接收方,分別分配發(fā)送緩沖區(qū)和接收緩沖區(qū),用來保存發(fā)送和接收的數(shù)據(jù); 2)應(yīng)用層將要傳輸?shù)臄?shù)據(jù)放到發(fā)送緩沖區(qū)中,當(dāng)緩沖區(qū)滿了,則停止放入,直到有空閑的緩沖區(qū)再繼續(xù)放入; 3)網(wǎng)絡(luò)層將緩沖區(qū)中的數(shù)據(jù)組上包頭,按數(shù)據(jù)包序號逐個發(fā)出去,同時等待接收方回應(yīng) ack ; 4)接收方收到數(shù)據(jù)包,按照包的序號放到對應(yīng)的緩沖區(qū)位置,并需要根據(jù)當(dāng)前的緩沖區(qū)狀態(tài),計算出回應(yīng)的ack_no,即ack序號,給對方回復(fù)一個ack消息; 5)發(fā)送端收到ack后,根據(jù)回應(yīng)的ack_no判斷,發(fā)送緩沖區(qū)的滑動床后是否后移,當(dāng)滿足窗口后移條件后,可以把緩沖區(qū)前面的位置騰出來,并通知上傳繼續(xù)放數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述的基于UDP的可靠傳輸方法,其特征在于: 在采用UDP方式在傳輸數(shù)據(jù)時,當(dāng)產(chǎn)生丟包現(xiàn)象,通過數(shù)據(jù)重傳,將丟棄的數(shù)據(jù)包重新發(fā)送給接收端。
4.根據(jù)權(quán)利要求3所述的基于UDP的可靠傳輸方法,其特征在于: 接收端在接收的時候,要把接收到的數(shù)據(jù)包按次序放到緩沖隊列中,同時根據(jù)當(dāng)前緩沖區(qū)的情況計算出對應(yīng)的ACK序號,回復(fù)對方,發(fā)送端收到回復(fù)之后,根據(jù)對應(yīng)的ACK序號,判斷是繼續(xù)發(fā)送下一個數(shù)據(jù)包,還是重傳之前發(fā)過的數(shù)據(jù)包。
5.根據(jù)權(quán)利要求4所述的基于UDP的可靠傳輸方法,其特征在于: 接收端在接收的時候,要把接收到的數(shù)據(jù)包按次序放到緩沖隊列中,同時根據(jù)當(dāng)前緩沖區(qū)的情況計算出對應(yīng)的ACK序號和SACK序號。
6.根據(jù)權(quán)利要求2所述的基于UDP的可靠傳輸方法,其特征在于: 當(dāng)發(fā)送端發(fā)送的UDP數(shù)據(jù)塊過大,超過單個緩沖區(qū)的大小的時候,就需要把這塊數(shù)據(jù)拆成幾個小的數(shù)據(jù)包發(fā)送,拆包的時候,以緩沖區(qū)容量為限,將數(shù)據(jù)包從前往后依次放入到緩沖隊列中,若提示緩沖區(qū)滿,則需要將緩沖區(qū)鎖定,防止其他進程寫入,造成數(shù)據(jù)破壞,等有空閑緩沖區(qū)的時候,再將剩余的數(shù)據(jù)塊寫入。
7.根據(jù)權(quán)利要求6所述的基于UDP的可靠傳輸方法,其特征在于: 當(dāng)接收端收到數(shù)據(jù)后,分配一塊大的緩沖區(qū),將收到的包,按順序依次寫入緩沖區(qū),保證收到的順序和發(fā)送的順序是一致的,這樣組合出來的數(shù)據(jù)塊和發(fā)送的原數(shù)據(jù)塊就能保證是一致的。
8.根據(jù)權(quán)利要求1-7中任意一項所述的基于UDP的可靠傳輸方法,其特征在于: 在UDP連接時,通過定時的向?qū)Ψ桨l(fā)送心跳包,告訴對方自己處于活躍狀態(tài),收到對方的心跳后更新一下狀態(tài)。
9.根據(jù)權(quán)利要求8所述的基于UDP的可靠傳輸方法,其特征在于: 在UDP斷開連接時,傳輸?shù)囊环侥軌蛑鲃訑嚅_連接或者是長時間等不到對方的心跳,將連接斷開。
10.根據(jù)權(quán)利要求8所述的基于UDP的可靠傳輸方法,其特征在于: 對UDP數(shù)據(jù)傳輸進行數(shù)據(jù)校驗。
【文檔編號】H04L29/08GK104202414SQ201410471513
【公開日】2014年12月10日 申請日期:2014年9月17日 優(yōu)先權(quán)日:2014年9月17日
【發(fā)明者】石杰, 張士波, 楊敬宇, 姚鍵, 潘柏宇, 盧述奇 申請人:合一網(wǎng)絡(luò)技術(shù)(北京)有限公司