袁和+張光鋒
摘 要
為解決分布式鏈路聚合對網(wǎng)絡數(shù)據(jù)傳輸快速性和可靠性的需求,提出RUDP(Reliable UDP)模型。該模型通過增加報文保序機制、報文確認和快速重傳機制、報文分片重組機制,實現(xiàn)一種基于UDP的可靠傳輸協(xié)議。實驗數(shù)據(jù)表明,該模型提高了數(shù)據(jù)傳輸?shù)目煽啃院托省?/p>
【關鍵詞】分布式鏈路 聚合 可靠傳輸 UDP協(xié)議 快速重傳
1 引言
當前,分布式鏈路聚合技術在網(wǎng)絡數(shù)據(jù)備份鏈路中應用十分廣泛。為了保證分布式聚合口上的各協(xié)議計算正確,設備間需要實時同步大量的配置和運行數(shù)據(jù),要求網(wǎng)絡數(shù)據(jù)傳輸高效可靠。目前網(wǎng)絡數(shù)據(jù)傳輸協(xié)議主要是TCP,SCTP和UDP[1]。TCP和SCTP協(xié)議是面向連接的可靠傳輸層協(xié)議,保證數(shù)據(jù)傳輸?shù)母呖煽啃?。但其控制機制復雜,效率低下。UDP協(xié)議是無連接的傳輸層協(xié)議,數(shù)據(jù)傳輸效率高,但數(shù)據(jù)傳輸可靠性差。
根據(jù)標準協(xié)議的不足,本文在UDP傳輸協(xié)議的基礎上提出RUDP(Reliable UDP)模型。該模型在網(wǎng)絡通信的傳輸層和應用層之間新增一個RUDP層,通過封裝可靠傳輸?shù)膮f(xié)議頭,建立可靠傳輸控制機制來實現(xiàn)實時數(shù)據(jù)的高效可靠傳輸。本文論述了RUDP模型原理及實現(xiàn)機制,并實驗驗證其可行性。
2 RUDP模型
UDP是基于消息和非面向連接的傳輸協(xié)議,可以應用在基于消息的通信傳輸中,但是由于它是無連接的傳輸協(xié)議,缺少復雜的數(shù)據(jù)傳輸控制機制,所以不能保證數(shù)據(jù)的可靠傳輸。
根據(jù)TCP/IP網(wǎng)絡架構體系結構,RUDP模型是在傳輸層和應用層之間增加可靠傳輸控制層,將傳統(tǒng)模式設計成五層網(wǎng)絡架構??煽總鬏斂刂茖泳哂袌笪谋P?、報文確認、報文超時重傳、報文分片與重組等功能。RUDP具有與TCP類似的工作機制,為保證數(shù)據(jù)可靠傳輸,在建立連接時也需要進行三次握手,但RUDP沒有使用窗口機制,其保證可靠傳輸?shù)目刂撇呗员萒CP控制策略簡單。由于網(wǎng)絡層使用的是UDP協(xié)議進行數(shù)據(jù)傳輸,本模型繼承了UDP通信高效性的特點。
3 RUDP實現(xiàn)機制
RUDP模型使用多種機制來保證數(shù)據(jù)傳輸?shù)目煽啃浴O旅鎸⑾到y(tǒng)闡述RDUP協(xié)議層模型中報文屬性定義,報文保序機制、報文確認和快速重傳機制、報文分片重組機制,證明本文方法的可行性和有效性
3.1 報文屬性定義
為滿足報文可靠傳輸,在發(fā)送報文發(fā)送之前給每個報文封裝一個報文頭,報文主要字段如表1所示。
3.2 報文保序
初始情況下兩端是無法感知對端序號的,所以在建立連接時采用三次握手過程進行序號交換。發(fā)送方發(fā)送第一個報文在報文中設置一個初始標記(INIT),并進入INIT_SEND狀態(tài),等待接收方確認。當接收方收到初始標記(INIT)報文之后,記錄下發(fā)送方的初始序號,回應一個ACK,ACK序列號為發(fā)送方初始序列號加1,同時發(fā)送一個帶初始標記(INIT)報文,報文中攜帶本端初始序列號,接收方進入INIT_RCVD狀態(tài)。發(fā)送方收到接收方發(fā)送的帶初始標記(INIT)報文和ACK后,記錄發(fā)送方攜帶的初始序列號,進入ESTABLISHED狀態(tài),并發(fā)送一個ACK,ACK序列號為接收方初始序列號加1。接收方收到發(fā)送方的ACK后,進入ESTABLISHED狀態(tài)。此時,兩端設備就可以開始雙向傳遞數(shù)據(jù)了。
為了保證報文的按序處理,每次發(fā)送報文時需要為報文分配一個序列號。本文中采用類似TCP實現(xiàn)方式,將接收端回應給發(fā)送端的ACK報文序號作為發(fā)送端的下一個報文的序號。當接收端報文接收緩沖區(qū)出現(xiàn)報文亂序時需要將亂序報文暫時緩存,待此序號之前的報文收集完整后再上送應用模塊處理。
3.3 報文確認和超時重傳
為了保證報文的可靠性傳輸,需要實現(xiàn)對報文的確認和超時重傳,接收端對每個接收到數(shù)據(jù)報文(純ACK報文不需要確認)都需要確認,發(fā)送端只有當收到ACK確認消息之后才能夠?qū)笪膹陌l(fā)送緩沖區(qū)中釋放。當前TCP協(xié)議棧對報文的確認有如下幾種方式:
(1)收到報文之后立即進行確認;
(2)當有數(shù)據(jù)發(fā)送時在發(fā)送數(shù)據(jù)時順便攜帶ACK;
(3)支持經(jīng)受延遲ACK,收到報文時不立即進行ACK的確認,當定時器超時之后再進行ACK的確認。為簡化處理使用方式1進行報文確認。
發(fā)送方在一定時間內(nèi)未收到ACK報文需要進行報文重傳,在TCP協(xié)議棧中TCP超時定時器采用的是指數(shù)退避的方式,本模型直接采用固定超時的方式進行超時重傳,發(fā)送方在發(fā)送報文成功后立即啟動重傳定時器(對于已經(jīng)啟動的不需要再啟動),當重傳定時器超時之前收到了ACK報文并且報文緩沖區(qū)中不存在未被確認報文時停止定時器,如果存在尚未確認的報文重新啟動定時器,當重傳定時器超時之后尚未收到ACK可以將緩沖區(qū)中序號最小的報文進行重傳。為了加速報文的重傳,采用快速重傳機制,在收到到3個重復ACK時可以認為報文已經(jīng)丟失,不需要等待重傳定時器超時,直接將報文進行重傳。如圖1所示,對于報文發(fā)送端在收到接收端對報文1的3個重復ACK后,就可認為報文2已經(jīng)丟棄不需要等待定時超時,直接重發(fā)報文2。
3.4 報文分片重組
在網(wǎng)絡通信中,物理網(wǎng)絡層一般要限制每次發(fā)送數(shù)據(jù)幀的最大長度,這個最大長度稱為最大傳輸單元(MTU)。當負載數(shù)據(jù)和固定報文頭的總長度超過MTU時,需要對數(shù)據(jù)報進行分片處理。每個分片數(shù)據(jù)報需要封裝可靠傳輸協(xié)議頭,報文頭中標識字段值被復制到所有分片的標識字段中,其中DF位置0,MF位置1(最后一個分片數(shù)據(jù)報不需要將MF置1),并計算出每個數(shù)據(jù)報對應的數(shù)據(jù)偏移值。
接收端需要創(chuàng)建分片重組隊列,當收到的報文總長度大于MTU時,需要將分片報文放入隊列緩存起來,等待所有的分片報文收集完全之后按分片報文序列號進行重組之后再入socket接收緩沖區(qū)。對于分片報文需要等到所有分片收集完整之后再進行ACK確認。為了防止分片導致分片緩沖區(qū)堆積大量分片,需要對分片隊列進行定時老化,當定時器超時后分片沒有收集完整,需要刪除緩存區(qū)中所有分片,并等待發(fā)送方進行報文重傳。
4 實驗論證
本實驗使用點對點通信模型,將兩臺CPU為2GHz,內(nèi)存4G的計算機對連,在10Mbps的網(wǎng)絡傳輸環(huán)境中,分別測試RUDP和TCP協(xié)議的傳輸速率,RUDP測試結果如圖2所示,穩(wěn)定傳輸速率約為0.873MB/s,TCP測試結果如圖3所示,穩(wěn)定傳輸速率約為0.756MB/s。經(jīng)計算可知,RUDP傳輸效率較TCP提高了15.48%。
5 結束語
本文闡述了一種基于UDP的可靠傳輸協(xié)議實現(xiàn)方法,采用報文保序機制、報文確認和快速重傳機制、報文分片重組機制來保證數(shù)據(jù)傳輸?shù)目煽啃院透咝浴T囼灡砻?,RUDP模型提高了數(shù)據(jù)傳輸?shù)目煽啃院托省?/p>
參考文獻
[1]X.Hei,J.Chen,H.Lu,G.Xie and H.Meng, "A UDP-based way to improve data transmission reliability," 2017 29th Chinese Control And Decision Conference (CCDC),Chongqing,2017,pp.2612-2617.
[2]王斌,陳元琰,胡愚,馮偉.TCP Vegas擁塞避免機制的改進算法[J].計算機應用,2010,30(09):2485-2487+2500.
[3]劉喜作,周晶,梁德清.基于UDP的大數(shù)據(jù)包可靠傳輸[J].電訊技術,2012,52(01):96-100.
作者簡介
袁和(1993-),男,湖北省宜昌市人?,F(xiàn)為南京理工大學學生。研究方向電子與通信工程。
作者單位
南京理工大學電子工程與光電技術學院 江蘇省南京市 210094endprint