1.一種基于擁塞控制的非面向連接可靠冗余網(wǎng)絡傳輸方法,其特征在于,該方法將網(wǎng)絡通信模塊抽象為三層:RUDP層、RMP層、UDP層,該方法包括以下步驟:
RUDP層負責實現(xiàn)消息的可靠傳輸,增加RUDP層消息頭,通過滑動窗口SWS發(fā)送,并校驗接收包,回復確認序列,實現(xiàn)超時重發(fā)機制;
RMP層負責接收RUDP層傳來的消息,并增加冗余層消息頭,實現(xiàn)了冗余層的管理協(xié)議,接收時負責過濾冗余消息;
UDP層配置紅藍兩個網(wǎng)絡,將每一包RMP消息分別通過紅藍網(wǎng)發(fā)送出去,并負責將收到的消息傳給RMP層。
2.根據(jù)權(quán)利要求1所述的一種基于擁塞控制的非面向連接可靠冗余網(wǎng)絡傳輸方法,其特征在于,所述的RUDP層的任務包括鏈接維護任務、發(fā)送任務和接收任務。
3.根據(jù)權(quán)利要求2所述的一種基于擁塞控制的非面向連接可靠冗余網(wǎng)絡傳輸方法,其特征在于,所述的鏈接維護任務具體為:
鏈接維護任務周期性判斷各鏈接的狀態(tài),如果狀態(tài)為斷開則發(fā)送建立鏈接請求包,接收方收到后回復鏈接響應包,發(fā)送方回復確認包,通過三次握手建立通信鏈接;建立鏈接后定時發(fā)送心跳包消息維護鏈接,若不能收到對方的心跳回復包則斷開鏈接。
4.根據(jù)權(quán)利要求2所述的一種基于擁塞控制的非面向連接可靠冗余網(wǎng)絡傳輸方法,其特征在于,所述的發(fā)送任務具體為:
a1)遍歷所有鏈接狀態(tài)為良好的通道,看是否有消息等待發(fā)送,如果有則執(zhí)行步驟b1),如果沒有則延時繼續(xù)執(zhí)行a1);
b1)判斷是否已收到對方回復的ReplySN,如果沒有則執(zhí)行c1),已收到則執(zhí)行d1);
c1)判斷該通道等待時間是否已超時,如果已超時則判斷重發(fā)次數(shù)是否超過閾值,超過則斷開鏈接,如果未超過閾值則重發(fā)該分組消息;如果未超時,則繼續(xù)等待,并返回步驟a1);
d1)根據(jù)回復的ReplySN更新發(fā)送隊列,執(zhí)行擁塞控制算法,更新發(fā)送窗口SWS;
e1)從發(fā)送隊列中讀取SWS包消息發(fā)送;
f1)等待信號量Cond_Send,該信號量由接收任務收到ReplySN時釋放。
5.根據(jù)權(quán)利要求4所述的一種基于擁塞控制的非面向連接可靠冗余網(wǎng)絡傳輸方法,其特征在于,所述的接收任務具體為:
a2)接收消息,判斷當前收到消息對應鏈接狀態(tài)是否為良好,若為是則執(zhí)行步驟b2),否則丟棄該消息;
b2)判斷該消息是否為回復序列包,若為是則更新ReplySN=SN,釋放信號量Cond_Send給發(fā)送任務,執(zhí)行步驟a2);如果不是則執(zhí)行步驟c2);
c2)判斷該消息SN是否大于已接收成功ReceivedSN,如果否則丟棄該消息,執(zhí)行步驟a2);如果大于,則執(zhí)行步驟d2);
d2)判斷臨時接收隊列是否已滿,若為是則執(zhí)行e2),未滿則執(zhí)行a2);
e2)處理臨時接收隊列,校驗有序包,將接收成功的消息傳給應用層;
f2)更新接收成功的ReceivedSN,并回復給發(fā)送方,清空臨時接收隊列,執(zhí)行a2)。
6.根據(jù)權(quán)利要求4所述的一種基于擁塞控制的非面向連接可靠冗余網(wǎng)絡傳輸方法,其特征在于,所述的擁塞控制算法具體為:
a3)初始化發(fā)送滑動窗口SWS為設定值SWSinit,SWStotal=0,count=0;
b3)更新SWStotal,count,計算平均SWSaver;
c3)判斷當前回復序列號ReplySN是否大于已發(fā)送的序列號SendedSN,若為是則執(zhí)行e3),否則執(zhí)行d3);
d3)更新SWS=SWS/2,若SWS<1,則SWS=1,執(zhí)行步驟b3);
e3)判斷若ReplySN>SendedSN+SWS,則重置SWS,執(zhí)行步驟a3),否則執(zhí)行步驟f3);
f3)判斷若ReplySN=SendedSN+SWS,執(zhí)行步驟g3),否則更新SWS=ReplySN-SendedSN,執(zhí)行步驟b3);
g3)判斷若SWS>SWSaver,SWS=SWS+1;否則SWS=SWSaver,執(zhí)行步驟b3)。
7.根據(jù)權(quán)利要求1所述的一種基于擁塞控制的非面向連接可靠冗余網(wǎng)絡傳輸方法,其特征在于,所述的RMP層處理消息的具體過程如下:
1)初始化;
2)等待調(diào)用接口,判斷是發(fā)送消息還是接收消息,若為發(fā)送消息,執(zhí)行步驟3),若為接收消息,執(zhí)行步驟4);
3)接收應用層消息組包成RMP消息,并復制為紅藍網(wǎng)兩包消息,兩包消息包含的應用數(shù)據(jù)、序列號SeqID完全一致,更新序列號SeqID=SeqID+1,調(diào)用發(fā)送回調(diào)函數(shù)傳給RUDP層;
4)解包RMP消息,并判斷是否為重復的消息,若是則丟棄,若不是則將該消息SeqID寫入接收記錄表,并調(diào)用接收回調(diào)函數(shù)傳給應用。
8.根據(jù)權(quán)利要求1所述的一種基于擁塞控制的非面向連接可靠冗余網(wǎng)絡傳輸方法,其特征在于,所述的UDP層負責將消息發(fā)送到遠端節(jié)點和接收遠端發(fā)來的消息,包括發(fā)送接口和接收任務:
1)發(fā)送消息時根據(jù)消息的冗余層消息頭判斷屬于紅網(wǎng)還是藍網(wǎng),然后通過對應的發(fā)送接口將其發(fā)送到遠端節(jié)點;
2)接收任務循環(huán)偵聽是否有消息到來,收到消息后調(diào)用接收回調(diào)函數(shù),將該消息傳給RUDP層。