本發(fā)明涉及一種軌道交通信號(hào)系統(tǒng)的網(wǎng)絡(luò)傳輸技術(shù),尤其是涉及一種基于擁塞控制的非面向連接可靠冗余網(wǎng)絡(luò)傳輸方法。
背景技術(shù):
軌道交通信號(hào)系統(tǒng)對(duì)通信網(wǎng)絡(luò)要求具有高穩(wěn)定性和高可靠性,目前通常采用基于Socket底層API維護(hù)的通訊方式,傳輸層一般采用傳輸控制協(xié)議TCP或者UDP,底層采用雙網(wǎng)冷備的方式組成冗余通信網(wǎng),這些方法存在以下的不足:
1)雙網(wǎng)通訊采用冷備的方式,在網(wǎng)絡(luò)切換時(shí)會(huì)出現(xiàn)瞬間的閃斷和設(shè)備的重新初始化。
2)UDP是一種無連接的傳輸控制協(xié)議,無法保證數(shù)據(jù)的可靠傳輸。
3)TCP協(xié)議是面向連接的傳輸協(xié)議,實(shí)時(shí)性比較差、效率低、占用系統(tǒng)資源高。
4)當(dāng)通信過程中發(fā)生故障,無法快速定位故障的問題所在。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種安全、冗余、高效的基于擁塞控制的非面向連接可靠冗余網(wǎng)絡(luò)傳輸方法。
本發(fā)明的目的可以通過以下技術(shù)方案來實(shí)現(xiàn):
一種基于擁塞控制的非面向連接可靠冗余網(wǎng)絡(luò)傳輸方法,該方法將網(wǎng)絡(luò)通信模塊抽象為三層:RUDP層(可靠用戶數(shù)據(jù)報(bào)協(xié)議層)、RMP層(冗余層)、UDP層(用戶數(shù)據(jù)報(bào)協(xié)議層),該方法包括以下步驟:
RUDP層負(fù)責(zé)實(shí)現(xiàn)消息的可靠傳輸,增加RUDP層消息頭,通過滑動(dòng)窗口SWS發(fā)送,并校驗(yàn)接收包,回復(fù)確認(rèn)序列,實(shí)現(xiàn)超時(shí)重發(fā)機(jī)制;
RMP層負(fù)責(zé)接收RUDP層傳來的消息,并增加冗余層消息頭,實(shí)現(xiàn)了冗余層的管理協(xié)議,接收時(shí)負(fù)責(zé)過濾冗余消息;
UDP層配置紅藍(lán)兩個(gè)網(wǎng)絡(luò),將每一包RMP消息分別通過紅藍(lán)網(wǎng)發(fā)送出去,并負(fù)責(zé)將收到的消息傳給RMP層。
所述的RUDP層的任務(wù)包括鏈接維護(hù)任務(wù)、發(fā)送任務(wù)和接收任務(wù)。
所述的鏈接維護(hù)任務(wù)具體為:
鏈接維護(hù)任務(wù)周期性判斷各鏈接的狀態(tài),如果狀態(tài)為斷開則發(fā)送建立鏈接請(qǐng)求包,接收方收到后回復(fù)鏈接響應(yīng)包,發(fā)送方回復(fù)確認(rèn)包,通過三次握手建立通信鏈接;建立鏈接后定時(shí)發(fā)送心跳包消息維護(hù)鏈接,若不能收到對(duì)方的心跳回復(fù)包則斷開鏈接。
所述的發(fā)送任務(wù)具體為:
a1)遍歷所有鏈接狀態(tài)為良好的通道,看是否有消息等待發(fā)送,如果有則執(zhí)行步驟b1),如果沒有則延時(shí)繼續(xù)執(zhí)行a1);
b1)判斷是否已收到對(duì)方回復(fù)的ReplySN,如果沒有則執(zhí)行c1),已收到則執(zhí)行d1);
c1)判斷該通道等待時(shí)間是否已超時(shí),如果已超時(shí)則判斷重發(fā)次數(shù)是否超過閾值,超過則斷開鏈接,如果未超過閾值則重發(fā)該分組消息;如果未超時(shí),則繼續(xù)等待,并返回步驟a1);
d1)根據(jù)回復(fù)的ReplySN更新發(fā)送隊(duì)列,執(zhí)行擁塞控制算法,更新發(fā)送窗口SWS;
e1)從發(fā)送隊(duì)列中讀取SWS包消息發(fā)送;
f1)等待信號(hào)量Cond_Send,該信號(hào)量由接收任務(wù)收到ReplySN時(shí)釋放。
所述的接收任務(wù)具體為:
a2)接收消息,判斷當(dāng)前收到消息對(duì)應(yīng)鏈接狀態(tài)是否為良好,若為是則執(zhí)行步驟b2),否則丟棄該消息;
b2)判斷該消息是否為回復(fù)序列包,若為是則更新ReplySN=SN,釋放信號(hào)量Cond_Send給發(fā)送任務(wù),執(zhí)行步驟a2);如果不是則執(zhí)行步驟c2);
c2)判斷該消息SN是否大于已接收成功ReceivedSN,如果否則丟棄該消息,執(zhí)行步驟a2);如果大于,則執(zhí)行步驟d2);
d2)判斷臨時(shí)接收隊(duì)列是否已滿,若為是則執(zhí)行e2),未滿則執(zhí)行a2);
e2)處理臨時(shí)接收隊(duì)列,校驗(yàn)有序包,將接收成功的消息傳給應(yīng)用層;
f2)更新接收成功的ReceivedSN,并回復(fù)給發(fā)送方,清空臨時(shí)接收隊(duì)列,執(zhí)行a2)。
所述的擁塞控制算法具體為:
a3)初始化發(fā)送滑動(dòng)窗口SWS為設(shè)定值SWSinit,SWStotal=0,count=0;
b3)更新SWStotal,count,計(jì)算平均SWSaver;
c3)判斷當(dāng)前回復(fù)序列號(hào)ReplySN是否大于已發(fā)送的序列號(hào)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)。
所述的RMP層處理消息的具體過程如下:
1)初始化;
2)等待調(diào)用接口,判斷是發(fā)送消息還是接收消息,若為發(fā)送消息,執(zhí)行步驟3),若為接收消息,執(zhí)行步驟4);
3)接收應(yīng)用層消息組包成RMP消息,并復(fù)制為紅藍(lán)網(wǎng)兩包消息,兩包消息包含的應(yīng)用數(shù)據(jù)、序列號(hào)SeqID完全一致,更新序列號(hào)SeqID=SeqID+1,調(diào)用發(fā)送回調(diào)函數(shù)傳給RUDP層;
4)解包RMP消息,并判斷是否為重復(fù)的消息,若是則丟棄,若不是則將該消息SeqID寫入接收記錄表,并調(diào)用接收回調(diào)函數(shù)傳給應(yīng)用。
所述的UDP層負(fù)責(zé)將消息發(fā)送到遠(yuǎn)端節(jié)點(diǎn)和接收遠(yuǎn)端發(fā)來的消息,包括發(fā)送接口和接收任務(wù):
1)發(fā)送消息時(shí)根據(jù)消息的冗余層消息頭判斷屬于紅網(wǎng)還是藍(lán)網(wǎng),然后通過對(duì)應(yīng)的發(fā)送接口將其發(fā)送到遠(yuǎn)端節(jié)點(diǎn);
2)接收任務(wù)循環(huán)偵聽是否有消息到來,收到消息后調(diào)用接收回調(diào)函數(shù),將該消息傳給RUDP層。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):
1)本發(fā)明是一種安全、冗余、高效的通用網(wǎng)絡(luò)通信模塊,通過抽象分層實(shí)現(xiàn),降低了各層之間的耦合性,同時(shí)也提高了靈活性和實(shí)用性。
2)本發(fā)明的冗余層實(shí)現(xiàn)紅藍(lán)網(wǎng)熱備冗余,兩個(gè)網(wǎng)絡(luò)同時(shí)工作,當(dāng)出現(xiàn)單網(wǎng)故障不會(huì)對(duì)系統(tǒng)產(chǎn)生任何影響,提高了整個(gè)網(wǎng)絡(luò)系統(tǒng)的可靠性。
3)本發(fā)明的RUDP層通過引入三次握手建立鏈接,接收校驗(yàn)、超時(shí)重發(fā)、鏈接維護(hù)等機(jī)制,使面向無連接的UDP具有可靠數(shù)據(jù)傳輸,同時(shí)根據(jù)網(wǎng)絡(luò)狀態(tài)采用擁塞控制算法動(dòng)態(tài)調(diào)整滑動(dòng)窗口,能夠明顯提高通信的效率和速度。
4)本發(fā)明提供錯(cuò)誤日志追蹤功能,在初始化、發(fā)送、接收消息時(shí),若發(fā)生錯(cuò)誤,會(huì)產(chǎn)生錯(cuò)誤日志故障樹,同時(shí)清晰的層次結(jié)構(gòu)也有助于問題快速定位,使用本發(fā)明可以提高軟件調(diào)試的效率。
附圖說明
圖1為本發(fā)明的通信網(wǎng)絡(luò)層次結(jié)構(gòu)示意圖;
圖2為本發(fā)明RUDP三次握手建立鏈接示意圖;
圖3為本發(fā)明RUDP發(fā)送任務(wù)處理流程圖圖;
圖4為本發(fā)明RUDP接收任務(wù)處理流程圖;
圖5為本發(fā)明RUDP擁塞控制算法流程圖;
圖6為本發(fā)明RMP消息處理流程圖;
圖7為本發(fā)明UDP層消息處理流程圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明的一部分實(shí)施例,而不是全部實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都應(yīng)屬于本發(fā)明保護(hù)的范圍。
本發(fā)明的結(jié)構(gòu)如圖1所示,網(wǎng)絡(luò)通信模塊可以抽象為三層:RUDP層、冗余層(RMP)、UDP層。RUDP層負(fù)責(zé)實(shí)現(xiàn)消息的可靠傳輸,增加RUDP層消息頭,通過滑動(dòng)窗口(SWS)發(fā)送,并校驗(yàn)接收包,回復(fù)確認(rèn)序列,實(shí)現(xiàn)超時(shí)重發(fā)機(jī)制;RMP層負(fù)責(zé)接收RUDP層傳來的消息,并增加冗余層消息頭,實(shí)現(xiàn)了冗余層的管理協(xié)議,接收時(shí)負(fù)責(zé)過濾冗余消息;UDP層配置紅藍(lán)兩個(gè)網(wǎng)絡(luò),將每一包RMP消息分別通過紅藍(lán)網(wǎng)發(fā)送出去,并負(fù)責(zé)將收到的消息傳給RMP層。
一、RUDP層主要由鏈接維護(hù)任務(wù)、發(fā)送任務(wù)和接收任務(wù)組成,具體過程如下:
1)鏈接維護(hù)任務(wù)周期性判斷各鏈接的狀態(tài),如果狀態(tài)為斷開則發(fā)送建立鏈接請(qǐng)求包,接收方收到后回復(fù)鏈接響應(yīng)包,發(fā)送方回復(fù)確認(rèn)包,通過三次握手建立通信鏈接;建立鏈接后定時(shí)發(fā)送心跳包消息維護(hù)鏈接,若不能收到對(duì)方的心跳回復(fù)包則斷開鏈接。如圖2所示。
2)發(fā)送任務(wù)的處理流程如圖3所示:
a1)遍歷所有鏈接狀態(tài)為良好的通道,看是否有消息等待發(fā)送,如果有則執(zhí)行步驟b1),如果沒有則延時(shí)繼續(xù)執(zhí)行a1);
b1)判斷是否已收到對(duì)方回復(fù)的ReplySN,如果沒有則執(zhí)行c1),已收到則執(zhí)行d1);
c1)判斷該通道等待時(shí)間是否已超時(shí),如果已超時(shí)則判斷重發(fā)次數(shù)是否超過閾值,超過則斷開鏈接,如果未超過閾值則重發(fā)該分組消息;如果未超時(shí),則繼續(xù)等待,并返回步驟a1);
d1)根據(jù)回復(fù)的ReplySN更新發(fā)送隊(duì)列,執(zhí)行擁塞控制算法,更新發(fā)送窗口SWS;
e1)從發(fā)送隊(duì)列中讀取SWS包消息發(fā)送;
f1)等待信號(hào)量Cond_Send,該信號(hào)量由接收任務(wù)收到ReplySN時(shí)釋放。
3)接收任務(wù)的處理流程如圖4所示:
a2)接收消息,判斷當(dāng)前收到消息對(duì)應(yīng)鏈接狀態(tài)是否為良好,若為是則執(zhí)行步驟b2),否則丟棄該消息;
b2)判斷該消息是否為回復(fù)序列包,若為是則更新ReplySN=SN,釋放信號(hào)量Cond_Send給發(fā)送任務(wù),執(zhí)行步驟a2);如果不是則執(zhí)行步驟c2);
c2)判斷該消息SN是否大于已接收成功ReceivedSN,如果否則丟棄該消息,執(zhí)行步驟a2);如果大于,則執(zhí)行步驟d2);
d2)判斷臨時(shí)接收隊(duì)列是否已滿,若為是則執(zhí)行e2),未滿則執(zhí)行a2);
e2)處理臨時(shí)接收隊(duì)列,校驗(yàn)有序包,將接收成功的消息傳給應(yīng)用層;
f2)更新接收成功的ReceivedSN,并回復(fù)給發(fā)送方,清空臨時(shí)接收隊(duì)列,執(zhí)行a2)。
4)RUDP擁塞控制算法流程如圖5所示:
a3)初始化發(fā)送滑動(dòng)窗口SWS為設(shè)定值SWSinit,SWStotal=0,count=0;
b3)更新SWStotal,count,計(jì)算平均SWSaver;
c3)判斷當(dāng)前回復(fù)序列號(hào)ReplySN是否大于已發(fā)送的序列號(hào)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)。
二、RMP處理消息如圖6所示,具體過程如下:
1)初始化;
2)等待調(diào)用接口,判斷是發(fā)送消息還是接收消息,若為發(fā)送消息,執(zhí)行步驟3),若為接收消息,執(zhí)行步驟4);
3)接收應(yīng)用層消息組包成RMP消息,并復(fù)制為紅藍(lán)網(wǎng)兩包消息,兩包消息包含的應(yīng)用數(shù)據(jù)、序列號(hào)SeqID完全一致,更新序列號(hào)SeqID=SeqID+1,調(diào)用發(fā)送回調(diào)函數(shù)傳給RUDP層;
4)解包RMP消息,并判斷是否為重復(fù)的消息,若是則丟棄,若不是則將該消息SeqID寫入接收記錄表,并調(diào)用接收回調(diào)函數(shù)傳給應(yīng)用。
三、UDP層負(fù)責(zé)將消息發(fā)送到遠(yuǎn)端節(jié)點(diǎn)和接收遠(yuǎn)端發(fā)來的消息,如圖7所示,主要由發(fā)送接口和接收任務(wù)組成:
1)發(fā)送消息時(shí)根據(jù)消息的冗余層消息頭判斷屬于紅網(wǎng)還是藍(lán)網(wǎng),然后通過對(duì)應(yīng)的發(fā)送接口將其發(fā)送到遠(yuǎn)端節(jié)點(diǎn)。
2)接收任務(wù)循環(huán)偵聽是否有消息到來,收到消息后調(diào)用接收回調(diào)函數(shù),將該消息傳給RUDP層。
具體實(shí)施例
1)配置:本地節(jié)點(diǎn)A(RUDP層msgType=0x01,滑動(dòng)窗口SWSinit=5,RMP層msgType=0x01,紅網(wǎng)IP=192.168.1.11,PORT=20000,藍(lán)網(wǎng)IP=192.168.2.11,PORT=30000)。遠(yuǎn)程節(jié)點(diǎn)B(RUDP層msgType=0x01,滑動(dòng)窗口SWSinit=5,RMP層msgType=0x01,紅網(wǎng)IP=192.168.1.12,PORT=20001,藍(lán)網(wǎng)IP=192.168.2.12,PORT=30001)。
2)初始化:調(diào)用RUDP層、RMP層、UDP層初始化接口完成初始化,如果失敗則生成故障樹日志。
3)發(fā)送消息:
a)應(yīng)用A將msgType=0x01的10包消息寫入RUDP發(fā)送隊(duì)列。鏈接維護(hù)任務(wù)判斷msgType=0x01的鏈接狀態(tài)是否為良好,如果為斷開則發(fā)起三次握手建立鏈接。從發(fā)送隊(duì)列中取出SWSinit=5包消息,SN=1,2,3,4,5,傳給RMP層發(fā)送。若收到對(duì)方回復(fù)的ReplySN為5,則更新SWS=5,繼續(xù)發(fā)送SN=6,7,8,9,10。超時(shí)未收到回復(fù)繼續(xù)發(fā)送該分組消息。
b)RMP組包消息并將每包消息復(fù)制成2包(SeqID相同),共10包消息,調(diào)用發(fā)送回調(diào)函數(shù)將消息傳給UDP層。
c)UDP層首先判斷RMP消息所屬網(wǎng)絡(luò),再調(diào)用UDP發(fā)送函數(shù)將消息發(fā)出。
d)發(fā)送過程中若出現(xiàn)錯(cuò)誤,則生成故障樹日志,能很快定位問題。
4)接收消息:
a)應(yīng)用B的UDP層任務(wù)收到10包消息,將消息通過接收回調(diào)函數(shù)傳給RMP層。
b)RMP依次判斷這10包消息的SeqID號(hào),過濾冗余消息后將5包傳給RUDP層。
c)RUDP依次解析并處理5包消息。判斷msgType=0x01的鏈接狀態(tài)為正常,且該通道ReceivedSN=0,5包消息的SN=1,2,3,4,5均為有效消息,寫入臨時(shí)接收隊(duì)列并處理,將這5包消息送到應(yīng)用層?;貜?fù)ReplySN=5給A。
d)接收過程中若出現(xiàn)錯(cuò)誤,則生成故障樹日志,快速定位問題。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到各種等效的修改或替換,這些修改或替換都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。