本發(fā)明涉及計算機網(wǎng)絡技術領域和通信技術領域,尤其涉及一種數(shù)據(jù)傳輸方法。
背景技術:
近年來,互聯(lián)網(wǎng)技術得到快速發(fā)展,人們的通信需求也從主機互聯(lián)通信轉(zhuǎn)換為以內(nèi)容獲取為主的通信方式。然而,現(xiàn)在網(wǎng)絡的通信架構(gòu)是基于IP地址的以主機到主機的方式,這樣的通信模式已經(jīng)暴露出安全性差、信息分發(fā)效率低、移動性差、擴展性差等諸多問題。為了適應互聯(lián)網(wǎng)發(fā)展的需求,解決現(xiàn)有網(wǎng)絡存在的缺陷,因此,研究者提出了一系列以信息為中心的網(wǎng)絡體系結(jié)構(gòu)(ICN,Information-Centric Networking),如CCN(Content-Centric Networking),NDN(Named Data Networking)等。
與現(xiàn)有網(wǎng)絡架構(gòu)的不同在于,信息中心網(wǎng)絡是通過對網(wǎng)絡中存在的所有數(shù)據(jù)內(nèi)容進行命名,數(shù)據(jù)包根據(jù)內(nèi)容名進行路由。中間路由器節(jié)點包含內(nèi)容存儲器(CS,Content Store)可以緩存內(nèi)容,并且可以響應內(nèi)容的請求,直接將緩存內(nèi)容返回給用戶,加快內(nèi)容的分發(fā)速率,減少用戶獲取內(nèi)容的時延。因此,充分利用中間路由節(jié)點的本地緩存是提高網(wǎng)絡內(nèi)容分發(fā)能力的關鍵。
由于在ICN網(wǎng)絡中,中間路由節(jié)點也可以作為內(nèi)容請求的響應節(jié)點,因此傳統(tǒng)的基于端到端的傳輸以及可靠機制并不適用與ICN網(wǎng)絡,且現(xiàn)有的方案中每一跳都需要接收到完整的內(nèi)容后才能夠向上一跳發(fā)送確認消息,并將此完整內(nèi)容發(fā)送到下一跳節(jié)點,然而這并不能很好的同時滿足可靠性和低時延的要求,因此,同時實現(xiàn)可靠的網(wǎng)內(nèi)緩存和快速的數(shù)據(jù)傳輸是ICN網(wǎng)絡架構(gòu)中需要解決的一大難題。
技術實現(xiàn)要素:
(一)要解決的技術問題
本發(fā)明的目的在于,提供一種數(shù)據(jù)傳輸方法,實現(xiàn)可靠的網(wǎng)內(nèi)緩存和快速的數(shù)據(jù)傳輸。
(二)技術方案
本發(fā)明提供的數(shù)據(jù)傳輸方法,對于同一個節(jié)點,其并行地執(zhí)行從上一跳節(jié)點接收數(shù)據(jù)分片和向下一跳發(fā)送已接收的數(shù)據(jù)分片。在接收上一跳節(jié)點發(fā)送的數(shù)據(jù)分片時,通過與上一跳節(jié)點交互,以確認所有數(shù)據(jù)分片都已完整地接收,通過與下一跳節(jié)點交互,以確認所有數(shù)據(jù)分片都已完整地發(fā)送。另外,本發(fā)明提出了一種二進制數(shù)據(jù)結(jié)構(gòu),能輔助各個節(jié)點確認數(shù)據(jù)分片的接收和發(fā)送情況。
(三)有益效果
本發(fā)明能在同一節(jié)點上并行地進行數(shù)據(jù)分片的發(fā)送與接收,進而提高了數(shù)據(jù)傳輸速度。另外,采用本發(fā)明的二進制結(jié)構(gòu),輔助節(jié)點確認數(shù)據(jù)分片的發(fā)送和接收情況,提高了數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
附圖說明
圖1為本發(fā)明的網(wǎng)絡拓撲示意圖;
圖2為本發(fā)明中數(shù)據(jù)分片的頭部信息格式;
圖3為本發(fā)明中n比特長的BITMAP結(jié)構(gòu)的示例圖;
圖4為本發(fā)明內(nèi)容響應節(jié)點的處理流程圖;
圖5為本發(fā)明中間路由節(jié)點的并行數(shù)據(jù)發(fā)送和接收處理流程圖;
如圖6為本發(fā)明實施例中數(shù)據(jù)傳輸?shù)膱鼍皥D。
具體實施方式
本發(fā)明提供一種數(shù)據(jù)傳輸方法,首先第一節(jié)點將數(shù)據(jù)進行分片,得到多個數(shù)據(jù)分片;然后第一節(jié)點將每個數(shù)據(jù)分片分別發(fā)送至第一節(jié)點下一跳的第二節(jié)點,在發(fā)送完所有數(shù)據(jù)分片后,第一節(jié)點向第二節(jié)點發(fā)送結(jié)束消息;接著,第二節(jié)點收到結(jié)束消息后,向第一節(jié)點發(fā)送接收狀態(tài)消息;最后,第一節(jié)點根據(jù)第二節(jié)點發(fā)送的當前接收狀態(tài)信息,判斷第二節(jié)點是否接收到了所有數(shù)據(jù)分片,當判斷出一個或多個數(shù)據(jù)分片未被第二節(jié)點所接收到時,第一節(jié)點重新將一個或多個數(shù)據(jù)分片發(fā)送至第二節(jié)點。
圖1所示為本發(fā)明的網(wǎng)絡拓撲示意圖,如圖1所示,網(wǎng)絡中具有A~F共6個路由器,每個路由器可作為一個節(jié)點進行數(shù)據(jù)傳輸,其中,每個路由器具有數(shù)據(jù)存儲功能。例如,當用戶向內(nèi)容服務器發(fā)送一個內(nèi)容數(shù)據(jù)請求,該請求在網(wǎng)絡中沿著A-B-C路徑進行轉(zhuǎn)發(fā),當路由器C中具有該請求所請求的內(nèi)容數(shù)據(jù)時,該請求不再轉(zhuǎn)發(fā)至內(nèi)容服務器中,而是路由器C根據(jù)內(nèi)容數(shù)據(jù)生成一個響應數(shù)據(jù)包,沿原路返回至用戶,此路由器C也稱為內(nèi)容命中節(jié)點,在數(shù)據(jù)沿C-B-A路徑發(fā)送至用戶處的過程中,路由器B和路由器A也稱為中間路由節(jié)點。這種網(wǎng)內(nèi)緩存機制節(jié)省了數(shù)據(jù)傳輸路徑,加快了數(shù)據(jù)傳輸速度。本發(fā)明也是基于此技術而實現(xiàn)的。
需要說明的是,本發(fā)明所說的第一節(jié)點為發(fā)送節(jié)點,其可以是緩存有內(nèi)容數(shù)據(jù)的路由器,也可以直接是內(nèi)容服務器,第二節(jié)點是發(fā)送節(jié)點下一跳的接收節(jié)點,其可以是具有緩存功能的路由器,也可以直接是用戶所在的客戶端。如圖1所示,若數(shù)據(jù)是從C中發(fā)送,沿C-B-A路徑發(fā)送至用戶處,則在認為第一節(jié)點是路由器C,第二節(jié)點是路由器B。當路由器B接收到完整數(shù)據(jù)后,路由器B即為第一節(jié)點,路由器A即為第二節(jié)點。
進一步,步驟S2中,第一節(jié)點向第二節(jié)點發(fā)送結(jié)束消息后,還需要知道第二節(jié)點是否都已完整地接收到了所有數(shù)據(jù)分片,所以,第二節(jié)點會返回一個接收狀態(tài)消息,以表示第二節(jié)點是否都已接收所有數(shù)據(jù)分片。在第一時間閾值內(nèi)未收到第二節(jié)點發(fā)送的接收狀態(tài)消息,則重新發(fā)送結(jié)束消息至第二節(jié)點,以提示第二節(jié)點向第一節(jié)點返回接收狀態(tài)消息。具體地,第一節(jié)點發(fā)送完發(fā)送結(jié)束消息后,可設定一個發(fā)送超時定時器T1,T1所設定的時間即為該第一時間閾值,優(yōu)選地,第一時間閾值大于2個RTT。
第一節(jié)點多次發(fā)送結(jié)束消息至第二節(jié)點后,均未收到第二節(jié)點發(fā)送的接收狀態(tài)消息,則認為第一節(jié)點與第二節(jié)點間的鏈路斷開,此時,選擇其他節(jié)點作為第二節(jié)點,進行數(shù)據(jù)傳輸。如圖1所示,C-B之間的鏈路斷開后,將D作為第二節(jié)點。
進一步,由于第一、第二節(jié)點鏈路斷開,無法進行數(shù)據(jù)傳輸,步驟S2中,第二節(jié)點在接收多個數(shù)據(jù)分片時,若在接收到一個數(shù)據(jù)分片后的第二時間閾值內(nèi),未接收到下一個數(shù)據(jù)分片,則第二節(jié)點刪除本地已接收的數(shù)據(jù)分片,并結(jié)束接收流程。或者說,第二節(jié)點在接收到所有數(shù)據(jù)分片后,在第二時間閾值內(nèi)未接收到第一節(jié)點發(fā)送的結(jié)束消息,則第二節(jié)點刪除本地已接收的數(shù)據(jù)分片,并結(jié)束接收流程。本發(fā)明同樣可以采用一個接收超時定時器T2,用來確定一個第二時間閾值,第二時間閾值大于3倍的第一時間閾值,目的是為了當鏈路中斷時結(jié)束第二節(jié)點的接收等待,釋放緩存。
進一步,步驟S2還包括,在第二節(jié)點中生成一個長度為數(shù)據(jù)分片個數(shù)的二進制序列(BITMAP結(jié)構(gòu)),具體的,BITMAP結(jié)構(gòu)的每一位表示對應數(shù)據(jù)分片是否被第二節(jié)點接收,0表示相應的數(shù)據(jù)分片未被第二節(jié)點接收,1表示相應的數(shù)據(jù)分片已被第二節(jié)點接收。第二節(jié)點每接收到一個數(shù)據(jù)分片時,將二進制序列相應位置為1。例如,數(shù)據(jù)被分為共4個數(shù)據(jù)分片,其中,BITMAP結(jié)構(gòu)初始化為0000,在接收到第一個數(shù)據(jù)分片后,BITMAP結(jié)構(gòu)變?yōu)?001,在接收到第二個數(shù)據(jù)分片后,BITMAP結(jié)構(gòu)變?yōu)?011,直到接收到所有數(shù)據(jù)分片后,BITMAP結(jié)構(gòu)變?yōu)?111。第二節(jié)點在收到第一節(jié)點發(fā)送的結(jié)束消息后,判斷BITMAP結(jié)構(gòu)是否全為1,若是,則將接收到的所有數(shù)據(jù)分片聚合,到的完整的數(shù)據(jù)并存儲。另外,第二節(jié)點向第一節(jié)點發(fā)送的接收狀態(tài)消息中包含有BITMAP結(jié)構(gòu),第一節(jié)點根據(jù)所述二進制序列判斷是否相應的數(shù)據(jù)分布未被第二節(jié)點所接收。
進一步,第二節(jié)點還將本地已接收的數(shù)據(jù)分片發(fā)送至第二節(jié)點下一跳的第三節(jié)點,其中,第二節(jié)點并行地進行數(shù)據(jù)分片接收和數(shù)據(jù)分片發(fā)送采用這種同步機制,提高了數(shù)據(jù)傳輸速度。
下面將詳細描述本發(fā)明的數(shù)據(jù)傳輸?shù)闹饕襟E,主要可以分為節(jié)點的數(shù)據(jù)發(fā)送和接收處理流程,中間路由節(jié)點的接收和發(fā)送的并行處理流程。
如圖4所示,節(jié)點的數(shù)據(jù)發(fā)送和接收處理流程,包括:
步驟101,內(nèi)容命中節(jié)點(用戶發(fā)出的請求經(jīng)過的所有中間路由器都會檢查本地內(nèi)容存儲器中是否有用戶請求的內(nèi)容,若中間路由器本地存在內(nèi)容緩存,則該路由器節(jié)點被視為內(nèi)容命中節(jié)點,如果中間路由器都不存在指定的內(nèi)容,則請求到達內(nèi)容服務器,服務器視為內(nèi)容命中節(jié)點,內(nèi)容命中節(jié)點即為最開始的發(fā)送節(jié)點)從本地內(nèi)容存儲器中獲取原始內(nèi)容塊,并根據(jù)鏈路最大傳輸單元(MTU,Maximum Transmission Unit)的大小將原始內(nèi)容進行分片為多個數(shù)據(jù)包分片,每個數(shù)據(jù)分片的頭部信息都包含有內(nèi)容名、該內(nèi)容的總分片數(shù)目以及該數(shù)據(jù)包的序列號信息,如圖2所示;
發(fā)送節(jié)點將每一個數(shù)據(jù)分片發(fā)送到下一跳接收節(jié)點,并在發(fā)送最后一個數(shù)據(jù)分片后繼續(xù)發(fā)送一個結(jié)束消息表明數(shù)據(jù)分片發(fā)送的結(jié)束,并啟動發(fā)送超時定時器T1。發(fā)送超時定時器T1的初始時間與鏈路狀態(tài)有關,通常大于2個RTT,可根據(jù)實際情況來設定。
步驟102,發(fā)送節(jié)點判斷在發(fā)送超時定時器超時前是否接收到下一跳接收節(jié)點返回的消息。如果未接收到任何消息,則執(zhí)行步驟103;否則進一步判斷接收到返回消息的類型,執(zhí)行步驟104。
步驟103,發(fā)送節(jié)點重傳結(jié)束消息到下一跳接收節(jié)點。在此過程中,若發(fā)送超時定時器T1的超時次數(shù)達到給定的門限值,且沒有收到下一跳路由節(jié)點返回的任何消息,則可以判斷出現(xiàn)鏈路中斷,此時發(fā)送節(jié)點重新選擇下一跳路由節(jié)點,重新發(fā)送所有數(shù)據(jù)分片。
步驟104,發(fā)送節(jié)點在發(fā)送超時定時器T1超時前收到下一跳路由節(jié)點的返回狀態(tài)消息,則進一步判斷返回的消息類型,如果是對所有數(shù)據(jù)分片的正確接收消息,則發(fā)送節(jié)點結(jié)束發(fā)送流程;否則,執(zhí)行步驟105。
步驟105,發(fā)送節(jié)點檢查該BITMAP數(shù)據(jù)結(jié)構(gòu)中的0、1組成情況,重傳接收信息包含的BITMAP結(jié)構(gòu)中置0位對應的數(shù)據(jù)分片,對于BITMAP相應位為0,但本地內(nèi)容存儲器中不存在的數(shù)據(jù)分片,則發(fā)送節(jié)點等待正確接收到上一跳節(jié)點發(fā)送的該數(shù)據(jù)分片,再發(fā)送該數(shù)據(jù)分片給所述接收節(jié)點;
如圖3所示的BITMAP結(jié)構(gòu)由中間路由節(jié)點(發(fā)送時作為發(fā)送節(jié)點,接收時作為接收節(jié)點)進行維護,是標識內(nèi)容分片的接收狀態(tài)信息。由固定長度的0、1序列構(gòu)成,長度為內(nèi)容數(shù)據(jù)的總分片數(shù)。相應BITMAP結(jié)構(gòu)位置為1表示該位置對應的分片已被正確接收,而如果相應的BIT位置為0,則表示對應的分片尚未被正確接收。
如圖5所示,中間路由節(jié)點并行接收上一跳節(jié)點發(fā)送的數(shù)據(jù)分片和發(fā)送已經(jīng)接收到數(shù)據(jù)分片到下一跳節(jié)點,實現(xiàn)節(jié)點存儲與轉(zhuǎn)發(fā)的分離(存儲以完整數(shù)據(jù)為單位操作,轉(zhuǎn)發(fā)則以分片為單位操作),中間路由節(jié)點處理流程包括:
步驟201,中間路由節(jié)點每接收到一個數(shù)據(jù)分片,檢查數(shù)據(jù)分片的內(nèi)容標識、總分片數(shù)、該數(shù)據(jù)分片的序列號,對相應的BITMAP結(jié)構(gòu)中數(shù)據(jù)分片序列號位置1;
同時,每個中間路由節(jié)點在每次接收到一個數(shù)據(jù)分片時,重置相應的接收超時定時器T2,接收超時定時器的時間通常大于3倍的發(fā)送超時定時器T1的時間,目的是為了當鏈路中斷時結(jié)束接收節(jié)點的接收等待,釋放緩存。
步驟202,中間路由節(jié)點臨時存儲接收到的每個不重復的數(shù)據(jù)分片,同時將已經(jīng)接收到的數(shù)據(jù)分片直接發(fā)送到下一跳路由節(jié)點;
步驟203,當中間路由節(jié)點接收到上一跳路由節(jié)點發(fā)送的結(jié)束消息時,檢測本地BITMAP數(shù)據(jù)結(jié)構(gòu)中是否全部置1,如果為全1則表明已經(jīng)成功接收到該內(nèi)容的所有數(shù)據(jù)分片,執(zhí)行步驟204;否則,執(zhí)行步驟205。
步驟204,返回完整接收的接收狀態(tài)消息(包含全1的BITMAP結(jié)構(gòu))給上一跳路由節(jié)點,告知上一跳路由節(jié)點已經(jīng)接收到該內(nèi)容的所有分片。同時,聚合本地該內(nèi)容標識對應的臨時緩存中所有的數(shù)據(jù)分片,存儲為一個完整內(nèi)容到本地內(nèi)容存儲器。
步驟205,返回部分接收的接收狀態(tài)消息(包含BITMAP結(jié)構(gòu))給上一跳路由節(jié)點,目的在于告知上一跳路由節(jié)點請求重發(fā)BITMAP數(shù)據(jù)結(jié)構(gòu)中置0位對應的數(shù)據(jù)分片。
步驟206,若接收節(jié)點的接收超時定時器T2超時,但還未收到上一跳發(fā)送節(jié)點重發(fā)的數(shù)據(jù)分片,則認為鏈路中斷,接收節(jié)點刪除包含該內(nèi)容標識的已經(jīng)接收到的不完整的數(shù)據(jù)分片臨時緩存,結(jié)束接收流程。
為了便于理解,下面結(jié)合具體示例對本發(fā)明做進一步說明。
如圖6為本發(fā)明實施例中數(shù)據(jù)傳輸?shù)膱鼍皥D。在本實施例中,C節(jié)點被視為內(nèi)容響應節(jié)點,A、B為其中間路由節(jié)點。
步驟301,內(nèi)容響應節(jié)點C由于鏈路最大傳輸單元的限制,需要將響應的原始內(nèi)容塊進行分片,分片序號為1~n,針對每一個數(shù)據(jù)分片,構(gòu)造響應數(shù)據(jù)包發(fā)送到下一跳路由節(jié)點B,在發(fā)送序列號為n的響應數(shù)據(jù)分片后,節(jié)點C發(fā)送結(jié)束信息到節(jié)點B并設置發(fā)送超時定時器T1。
步驟302,路由節(jié)點B每接收到一個數(shù)據(jù)包分片后,根據(jù)數(shù)據(jù)分片頭部包含的內(nèi)容標識、該內(nèi)容的總分片數(shù)n和該數(shù)據(jù)分片的序列號,對本地維護的相應的BITMAP結(jié)構(gòu)的相應位做置1操作,節(jié)點B重置接收超時定時器T2,同時將從節(jié)點C接收到的該數(shù)據(jù)分片發(fā)送給下一跳路由節(jié)點A,節(jié)點B設置相應的發(fā)送超時定時器T3。
步驟303,如果節(jié)點B在接收超時定時器T2超時后還未收到C發(fā)送的結(jié)束消息,則B節(jié)點刪除所有已經(jīng)收到的不完整的所有數(shù)據(jù)分片。否則,節(jié)點B將此結(jié)束消息轉(zhuǎn)發(fā)到路由節(jié)點A,并檢查本地的BITMAP結(jié)構(gòu)是否為全1,如果為全1,則返回針對所有數(shù)據(jù)分片的狀態(tài)信息(含全1的BITMAP結(jié)構(gòu))到節(jié)點C,并按照序列號聚合數(shù)據(jù)分片為完整內(nèi)容,存儲到本地。否則返回包含BITMAP數(shù)據(jù)結(jié)構(gòu)的針對部分數(shù)據(jù)分片的確認消息(包含非全1的BITMAP結(jié)構(gòu))到節(jié)點C。
步驟304,如果節(jié)點C在發(fā)送超時定時器T1超時之前收到節(jié)點B返回的包含BITMAP數(shù)據(jù)結(jié)構(gòu)的部分數(shù)據(jù)分片確認消息,則節(jié)點C重傳BITMAP結(jié)構(gòu)中置0位的數(shù)據(jù)分片;如果收到針對所有數(shù)據(jù)分片的確認消息,則節(jié)點C結(jié)束發(fā)送流程;如果節(jié)點C在發(fā)送超時定時器T1超時時還未收到節(jié)點B返回的任意類型消息(部分數(shù)據(jù)分片確認消息或所有數(shù)據(jù)分片的確認消息),則節(jié)點C重傳結(jié)束消息到節(jié)點B,并重置發(fā)送超時定時器T1;
步驟305,當節(jié)點B收到A返回的部分確認消息后,如果節(jié)點B本地中不存在BITMAP中置0位的數(shù)據(jù)分片,則B此時等待從節(jié)點C接收到缺失的數(shù)據(jù)分片,然后將此數(shù)據(jù)分片發(fā)送到節(jié)點A。
需要注意的是,在步驟304中,節(jié)點C需重傳結(jié)束消息到B節(jié)點時,如果節(jié)點C和節(jié)點B之間鏈路出現(xiàn)問題,導致C節(jié)點重傳次數(shù)到達上限,則節(jié)點C重新選擇路由的下一跳節(jié)點E,并發(fā)送所有數(shù)據(jù)分片。
綜上所述,可見本發(fā)明實現(xiàn)了可靠存儲和轉(zhuǎn)發(fā)分離的機制。中間路由器可以并行接收上一跳節(jié)點發(fā)送的數(shù)據(jù)分片和發(fā)送本地已經(jīng)接收到數(shù)據(jù)分片到下一跳節(jié)點的過程,而不需要等待接收到一個完整的內(nèi)容才向下一跳轉(zhuǎn)發(fā),通過本發(fā)明,用戶可以快速的從網(wǎng)絡中路由器節(jié)點獲取內(nèi)容,提高了用戶獲取文件的速度,但同時提供可靠性保證。
本領域的技術人員應該進一步意識到,上述實施方式中各種方法的全部或者部分步驟可以通過軟件、硬件或者兩者結(jié)合的方式實現(xiàn)。該程序內(nèi)容可以存儲在計算機可讀存儲介質(zhì)中,存儲介質(zhì)可以包含:只讀存儲器,隨機存儲器或技術領域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
以上所述的具體實施例,對本發(fā)明的目的、技術方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發(fā)明的具體實施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。