本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體的說是一種數(shù)據(jù)高帶寬高可靠性傳輸方法。
背景技術(shù):
傳統(tǒng)的數(shù)據(jù)傳輸中主要由采用以下兩種協(xié)議:
udp(userdatagramprotocol,用戶數(shù)據(jù)報(bào)協(xié)議):是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議。udp不提供可靠性,它只是把應(yīng)用程序傳給ip層的數(shù)據(jù)報(bào)發(fā)送出去,但是并不能保證它們能到達(dá)目的地。由于udp在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,且沒有超時(shí)重發(fā)等機(jī)制,故而傳輸速度很快,但是存在以下不足:不可靠,數(shù)據(jù)發(fā)送端不保證接收端能完整接收數(shù)據(jù),適用于對(duì)數(shù)據(jù)可靠性要求不高,但是帶寬要求高的場(chǎng)景,比如遠(yuǎn)程視頻會(huì)議等。
tcp(transmissioncontrolprotocol,傳輸控制協(xié)議):提供的是面向連接、可靠的字節(jié)流服務(wù)。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個(gè)tcp連接,之后才能傳輸數(shù)據(jù)。tcp提供超時(shí)重發(fā),丟棄重復(fù)數(shù)據(jù),檢驗(yàn)數(shù)據(jù),流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端。雖然可靠,但是數(shù)據(jù)發(fā)送前需要收發(fā)兩端建立連接,每個(gè)tcp包都需要接收端確認(rèn),存在效率低的不足。適用于對(duì)數(shù)據(jù)可靠性要求高,帶寬要求相對(duì)低的場(chǎng)景,比如我們常用的聊天軟件,電子郵件等。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)上述現(xiàn)有技術(shù)不足,本發(fā)明提供一種數(shù)據(jù)高帶寬高可靠性傳輸方法。
本發(fā)明提供的一種數(shù)據(jù)高帶寬高可靠性傳輸方法是通過以下技術(shù)方案實(shí)現(xiàn)的:
一種數(shù)據(jù)高帶寬高可靠性傳輸方法,包括osi(開放式系統(tǒng)互聯(lián))網(wǎng)絡(luò)傳輸模型分層,所述osi網(wǎng)絡(luò)傳輸模型分層由上到下依次為應(yīng)用層、表示層、會(huì)話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層,其特征在于,在傳輸層設(shè)udp包和tcp包,在網(wǎng)絡(luò)層設(shè)ip(網(wǎng)絡(luò)之間互連的協(xié))報(bào)文,在數(shù)據(jù)鏈路層設(shè)mac(硬件地址)幀,所述udp包使用標(biāo)準(zhǔn)協(xié)議,在udp之上再封裝一層用戶協(xié)議層,在這一層上做數(shù)據(jù)重傳機(jī)制,確保接收端數(shù)據(jù)可靠,重傳機(jī)制不使用類tcp的確認(rèn)流程,使用按需發(fā)送的機(jī)制,即發(fā)現(xiàn)錯(cuò)了再重傳,其中:
每一個(gè)mac幀都帶著mac頭,mac頭之后是ip數(shù)據(jù)報(bào)頭,第一個(gè)ip分片的ip頭之后是udp頭,udp頭之后是udp的凈荷,定義一層用戶層,將用戶層分成多個(gè)udp包,每個(gè)用戶層數(shù)據(jù)塊帶一個(gè)用戶層頭文件,用戶數(shù)據(jù)塊被分片后,每個(gè)分片都攜帶著一個(gè)用戶層頭文件,接收端根據(jù)這些用戶層頭文件完成對(duì)整個(gè)用戶數(shù)據(jù)塊數(shù)據(jù)的重組;
當(dāng)接收端發(fā)現(xiàn)不能對(duì)用戶數(shù)據(jù)塊進(jìn)行正確重組,就必須通知發(fā)送端重新發(fā)送整個(gè)數(shù)據(jù)塊的數(shù)據(jù);由此定義數(shù)據(jù)接收端在重組異常時(shí)發(fā)送cmp(控制報(bào)文協(xié)議)包,所述cmp包的封裝格式和用戶數(shù)據(jù)塊一致,通過控制字段和普通用戶數(shù)據(jù)塊區(qū)分,并通過攜帶不同的錯(cuò)誤編碼信息,數(shù)據(jù)接收端告知數(shù)據(jù)發(fā)送端本端發(fā)生的錯(cuò)誤類型,當(dāng)數(shù)據(jù)發(fā)送端發(fā)現(xiàn)錯(cuò)誤類型是重組異常時(shí),則把相應(yīng)的用戶數(shù)據(jù)塊重新發(fā)送。
所述用戶層頭文件含有多種控制信息,包括但不限于:塊序列號(hào)、長(zhǎng)度、分片偏移量、總和檢驗(yàn)碼校驗(yàn)。
所述接收端通過偏移量、校驗(yàn)信息感知是否正確重組。
所述cmp報(bào)文中的type(類型)為6、code(編碼)為0,block_id(塊編號(hào))為接收端要求重發(fā)的數(shù)據(jù)block_id。
本發(fā)明的有益效果是:數(shù)據(jù)可靠性高,傳輸效率高,適用于對(duì)帶寬要求高,同時(shí)對(duì)數(shù)據(jù)可靠性也有較高要求的場(chǎng)景。
附圖說明
圖1是本發(fā)明osi網(wǎng)絡(luò)傳輸模型分層示意圖;
圖2是本發(fā)明數(shù)據(jù)封裝格式示意圖;
圖3是本發(fā)明cmp包的封裝格式示意圖。
具體實(shí)施方式
下面將通過實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
實(shí)施例1:如圖1所示的一種數(shù)據(jù)高帶寬高可靠性傳輸方法,包括osi(開放式系統(tǒng)互聯(lián))網(wǎng)絡(luò)傳輸模型分層,所述osi網(wǎng)絡(luò)傳輸模型分層由上到下依次為應(yīng)用層、表示層、會(huì)話層傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層,在傳輸層設(shè)udp包和tcp包,在網(wǎng)絡(luò)層設(shè)ip(網(wǎng)絡(luò)之間互連的協(xié))報(bào)文,在數(shù)據(jù)鏈路層設(shè)mac(硬件地址)幀,所述udp包使用標(biāo)準(zhǔn)協(xié)議,在udp之上再封裝一層用戶協(xié)議層,在這一層上做數(shù)據(jù)重傳機(jī)制,確保接收端數(shù)據(jù)可靠,重傳機(jī)制不使用類tcp的確認(rèn)流程,使用按需發(fā)送的機(jī)制,即發(fā)現(xiàn)錯(cuò)了再重傳,其中:
如圖2所示,每一個(gè)mac幀都帶著mac頭,mac頭之后是ip數(shù)據(jù)報(bào)頭,第一個(gè)ip分片的ip頭之后是udp頭,udp頭之后是udp的凈荷,定義一層用戶層,將用戶層分成多個(gè)udp包,每個(gè)用戶層數(shù)據(jù)塊帶一個(gè)用戶層頭文件,用戶數(shù)據(jù)塊被分片后,每個(gè)分片都攜帶著一個(gè)用戶層頭文件,接收端根據(jù)這些用戶層頭文件完成對(duì)整個(gè)用戶數(shù)據(jù)塊數(shù)據(jù)的重組;
如圖3所示,當(dāng)接收端發(fā)現(xiàn)不能對(duì)用戶數(shù)據(jù)塊進(jìn)行正確重組,就必須通知發(fā)送端重新發(fā)送整個(gè)數(shù)據(jù)塊的數(shù)據(jù);由此定義數(shù)據(jù)接收端在重組異常時(shí)發(fā)送cmp(控制報(bào)文協(xié)議)包,所述cmp包的封裝格式和用戶數(shù)據(jù)塊一致,通過ctl(控制)字段和普通用戶數(shù)據(jù)塊區(qū)分(此處定義cmp包的ctl字段為4’b1100),并通過攜帶不同的錯(cuò)誤編碼信息,數(shù)據(jù)接收端告知數(shù)據(jù)發(fā)送端本端發(fā)生的錯(cuò)誤類型,當(dāng)數(shù)據(jù)發(fā)送端發(fā)現(xiàn)錯(cuò)誤類型是重組異常時(shí),則把相應(yīng)的用戶數(shù)據(jù)塊重新發(fā)送。所述cmp報(bào)文中的type(類型)為6、code(代碼)為0,block_id(塊編號(hào))為接收端要求重發(fā)的數(shù)據(jù)block_id,type指定cmp包的類型,code指定cmp包特定類型下的代碼,checksum(校驗(yàn)總和)對(duì)整個(gè)cmp包進(jìn)行檢驗(yàn)和計(jì)算,方法同udp。
進(jìn)一步的,所述用戶層頭文件含有多種控制信息,包括但不限于:塊序列號(hào)、長(zhǎng)度、分片偏移量、總和檢驗(yàn)碼校驗(yàn)。
進(jìn)一步的,所述接收端通過偏移量、校驗(yàn)信息感知是否正確重組。
進(jìn)一步的,所述cmp報(bào)文中的type(類型)為6、code(編碼)為0,block_id(塊編號(hào))為接收端要求重發(fā)的數(shù)據(jù)block_id。
實(shí)施例2
數(shù)據(jù)在鏈路上傳輸?shù)姆庋b過程是這樣的:
(1)假設(shè)我們有16mb的數(shù)據(jù),這16mb我們稱之為用戶層數(shù)據(jù)塊的凈荷,這個(gè)數(shù)據(jù)塊還會(huì)帶一個(gè)user_header,所以這個(gè)用戶數(shù)據(jù)塊的長(zhǎng)度是:16mb+16b。
(2)udp包的最大長(zhǎng)度是65535b,所以這個(gè)16mb+16b的用戶數(shù)據(jù)塊會(huì)被拆分成很多個(gè)udp包(分片成dup適應(yīng)的大?。?。
(3)ip數(shù)據(jù)報(bào)最大長(zhǎng)度也是65535b(所以如果ip數(shù)據(jù)包里面帶的是udp,那么udp包最大長(zhǎng)度不能到65535b,而必須比65535b略?。琲p也必須切片,切片大小根據(jù)mac層的包長(zhǎng)來決定,所以65535b的ip又會(huì)被拆分成很多個(gè)ip分片(分片成mac幀適應(yīng)的大?。?。
(4)通常mac層的最大包長(zhǎng)是1518b,攜帶一個(gè)ip分片。
以上所述實(shí)施例僅表示本發(fā)明的實(shí)施方式,其描述較為具體和詳細(xì),但并不能理解為對(duì)本發(fā)明范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明保護(hù)范圍。