曹雪君,童 心
北京航天自動控制研究所,北京 100854
隨著航天領域業務的發展,戰術及運載領域對試驗數據的實時處理效率不斷地提出新的要求。由于試驗數據的種類和數量越來越多,多屏顯示的需求日益增加。數據既需要在多個終端之間實現可靠傳輸,又需要保證傳輸的效率。利用TCP通信技術,發送方與多個終端同時建立多條TCP傳輸通路可以保證傳輸的可靠性,但TCP的三次握手及確認機制,使網絡傳輸的壓力較大,由此產生的延遲無法滿足航天領域對數據處理實時性的要求;基于UDP的組播傳輸能夠解決傳輸效率問題,但由于航天型號試驗中時序數據的重要性較高,必須保證傳輸的可靠性,因此組播的不可靠傳輸又無法滿足此要求。另外,航天領域的特殊性質使得設備的國產化要求日益激增,雖然目前已有一些針對國產化數據處理技術的優化方法[1-2],但對于數據傳輸的優化研究卻較少。因此,航天領域的數據處理對數據傳輸提出了更高的要求。
本文提出了一種應用層可靠組播傳輸控制方法,該方法在發送數據時添加額外的序號信息、并定時發送心跳信息,接收方反饋對數據的接收情況,通過收發雙方不斷地進行信息交互,實現組播傳輸的可靠性。
目前對應用層組播的研究成果方面,文獻[3-6]主要對應用層組播算法進行了研究和優化,提高了組播傳輸的效率、穩定性等,但并不能保證數據傳輸的可靠性。在提升可靠性方面,目前有M-THROM[7]模型,該模型適用于低時延的情況,但由于模型實現的底層依賴TCP協議,因此開銷過大;主動隨時較發[8]通過環結構提高數據傳輸的可靠性,但該方法依賴概率論,并不保證絕對可靠;此外,基于心跳機制的差錯控制模型[9]采用了心跳與序列號控制的方法,該方法仍只提供合理保證。本文在該方法的基礎上進行擴展,進一步保證應用層組播傳輸的可靠性。
基于UDP的組播發送方只負責發送數據,不考慮接收方對數據的接收情況,若要實現可靠傳輸,需要收發雙方進行額外的信息交互,互相反饋各自收發情況。
對于發送方,需要定期向接收方反饋已發送的數據報文信息。對于接收方,需要判斷是否存在丟失的數據報文,當存在丟失的數據時,將丟包信息反饋給發送方進行重新發送。發送方每發送一包數據報文時,需要先緩存該數據報文,以便丟包時重發。但緩存數據又不宜過多,必須定期清除緩存中所有接收方均已收到的數據報文。因此,接收方還需要向發送方反饋已收到的報文信息。基于上述機理,將可靠組播傳輸思想闡述如下:
發送方在發送數據時,對數據報文進行連續按序遞增編號,即數據報文中攜帶報文序號。發送方定期廣播心跳報文,心跳報文攜帶已發送的最大報文序號。接收方接收到心跳報文后,根據心跳報文中攜帶的序號,判斷是否存在丟包。如若丟包,則向發送方反饋丟包的數據報文序號,以便發送方在收到丟包信息時重新發送該序號的數據。
發送方在發送數據后將數據在本地進行緩存。接收方定期向發送方反饋已連續按序收到的最大報文序號。發送方根據所有接收方反饋的序號判斷可以清除的緩存數據。
接收方接收到的數據可能存在丟包和亂序,為了提高處理效率,接收方也采用了緩存機制,將非按序接收到的報文數據內容進行緩存。直到接收到的數據包使緩存中的數據連續,則從緩存中取數據進行處理并將該數據從緩存清除。
傳統的組播傳播方式中,發送方直接將數據內容發送即可,不考慮接收方丟包及亂序的情況。為了實現組播傳輸的可靠性,首先對應用層的傳輸報文進行擴展。在本文提出的可靠組播傳輸模型中,發送方的報文分為2類:數據報文和心跳報文。接收方為了反饋接收到的數據情況,向發送方反饋的報文也分為2類:NAK重發報文和ACK確認報文。
2.1.1 發送方報文
數據報文:發送方的數據報文攜帶數據內容和報文序號,其中報文序號從1開始遞增,用來控制組播傳輸數據的可靠性與有序性。
心跳報文:發送方定時發送心跳報文,用于通知接收方目前已發送的最大數據報文序號。
發送方報文的具體格式見表1。

表1 發送方報文格式
2.1.2 接收方報文
NAK重發報文:接收方反饋的NAK重發報文攜帶丟失的報文序號,用于通知發送方重新發送該序號的數據報文,以實現丟包重傳機制。
ACK確認報文:接收方反饋的ACK確認報文攜帶已按序且連續收到的最大報文序號,用于發送方清除緩存中的數據報文。
接收方報文的具體格式見表2。

表2 接收方報文格式
1)發送數據報文的處理邏輯
發送方每發送一包數據報文,首先更新當前已經發送的最大報文序號,用于后續發送心跳報文時使用;其次緩存該數據報文內容,以便在接收方丟包時重發。
2)發送心跳報文的處理邏輯
發送方定時發送心跳報文,心跳報文攜帶發送方已經發送的最大報文序號。
3)接收NAK重發報文的處理邏輯
每當發送方收到一條NAK重發報文,根據NAK重發報文中的序號,在緩存中查找該序號對應的數據內容,將該數據內容重新進行廣播發送。
4)接收ACK確認報文的處理邏輯
ACK確認報文攜帶該接收方已按序收到的最大報文序號,用于發送方刪除數據報文緩存。由于組播存在多個接收方,每個接收方收到的最大報文序號可能不同,因此需要分別記錄。
每當發送方收到一條ACK確認報文,記錄該報文發送者的IP地址、發送時間、以及攜帶的最大報文序號。由于接收方可能中途退出或掉線,當發送方清除數據報文緩存時,首先需要判斷當前在線的接收方。判斷某個接收方是否在線時,根據當前時間以及最后收到該接收方ACK確認報文的時間,當兩者之間的時間差超過一定域值時,認為該接收方已經退出。其次,比較所有在線接收方的最大報文序號,取最小值作為發送方可以刪除的最大報文序號,這樣可保證所有當前在線的接收方均已收到該序號前的所有數據報文。發送方清除該序號前的所有緩存報文。
2.3.1 接收數據報文處理邏輯
應用層可靠組播傳輸的核心在于接收方對數據報文的處理。當收到亂序甚至丟包的數據報文時,如何對報文進行緩存、重排處理,是整個可靠組播技術的關鍵所在。
接收方收到數據報文后,根據該數據報文的序號,有如下幾種操作方式:丟棄處理、緩存處理、正常處理該報文、處理該報文及緩存報文。
1)丟棄處理:由于存在多個接收方,某一接收方丟失數據并要求發送方重發數據報文時,其他接收方可能會收到重復的數據報文,對于收到的重復報文,直接丟棄即可。
2)緩存處理:當收到一條未收到過的非按序的數據報文時,將該報文內容進行緩存,待接收到全部連續按序報文時再進行處理。例如,已收到序號為4~6的數據報文,然后收到了序號為8的數據報文,則將該報文內容緩存,待收到序號為7的數據報文后再進行處理,以防止亂序。
3)正常處理該報文:當已收到的所有報文序號均連續,且下一條收到的數據報文序號也是按序的,則正常處理該報文即可。例如已收到序號為1~5的報文,接下來收到序號為6的數據報文。
4)處理該報文及緩存報文。針對上述2)中緩存數據報文的情形,當收到的報文使緩存報文按序且連續時,屬于該情形。如2)中的示例,已收到序號為4、5、6和8的數據報文(序號為8的報文已緩存),當收到序號為7的數據報文時,依次處理序號為7和8的數據報文,即處理序號為7的該報文以及序號為8的緩存報文。
2.3.2 接收心跳報文處理邏輯
接收方收到心跳報文后,根據心跳報文中的序號,判斷該序號前的數據報文是否有未收到的情形,若存在未收到的數據報文,則向發送方發送攜帶丟失數據報文序號的NAK重發報文。
2.4.1 發送方流程
發送方的處理包括以下幾個流程:
1)發送數據:發送數據報文并緩存,其中報文序號從1開始按序遞增。
2)發送心跳:定時廣播當前已發送最大數據報文序號的心跳報文。
3)監聽反饋報文:若收到NAK重發報文,優先發送丟失的數據報文;若收到ACK確認報文,記錄該接收方已按序收到的最大報文序號。
4)清除緩存:根據接收方反饋的ACK確認報文序號,定時清除緩存中所有當前在線接收方均已收到的數據報文。
發送方的具體處理流程如圖1所示。

圖1 發送方處理流程
2.4.2 接收方流程
接收方的處理包括以下幾個流程:
1)監聽報文:根據接收到的報文類型,判斷該報文的處理邏輯。
2)處理數據報文:根據報文序號進行相應的處理(包括丟棄、正常處理、緩存等)。
3)處理心跳報文:首先根據心跳報文中的報文序號和目前已經接收到的數據報文序號,判斷是否丟失數據,在丟失數據時發送NAK重發報文。其次根據已按序收到的最大報文序號發送ACK確認報文。
接收方的具體處理流程如圖2所示。

圖2 接收方處理流程
實驗部分,通過不同的實驗組合驗證組播傳輸的可靠性。分別在1~3個接收端的情況下,發送方連續發送700萬條組播數據,數據載荷長度不等,分為長、中、短3個級別。短級別載荷長度包括幾個字節數據,中級別載荷長度包括幾十個字節數據,長級別載荷長度包括幾百個字節數據。
實驗中,人為地模擬丟包情形。在發送方模擬丟包場景,丟包率分別為2%、1%和0.5%。為了更有效地接近真實的丟包場景,實驗中不僅在發送原始數據包時模擬丟包,在發送重發數據包時也模擬丟包情形。
為了直觀地看到接收方是否完整且有序地收到數據包,某次實驗中,令發送方按序發送從1開始遞增的數字,使發送報文編號與數據內容一致,便 于記錄每包數據對應的報文序號。觀察發送方的重發數據包與接收方收到的數據內容。
實驗中,發送方模擬丟包并重發了部分數據報文,如編號為562、567和573的報文;觀察接收方收到的數據,接收方能夠按序且完整地收到發送方重發的所有數據報文。
此外,對3.1節不同實驗參數下,分別進行了各組實驗。當數據載荷長度分別為幾字節、幾十字節和幾百字節時,發送方連續發送700萬條組播數據,在不同丟包率情形下,所有接收方均能收到完整有序的數據。因此,實驗驗證了本文提出的應用層可靠組播傳輸方法的有效性。
目前組播主要應用于航天型號的運載和戰術領域的數據處理。型號在試驗過程中,同時存在多個終端顯示不同的試驗數據。發送方通過組播發送數據,多個客戶端同時接收數據,并對本客戶端所需展示的數據進行篩選、處理、顯示等操作。
基于重傳與確認機制的應用層可靠組播傳輸方法結合了TCP和UDP傳輸的優點,實現了可靠、按序、快速的數據傳輸。該方法在較低的網絡開銷下,有效地滿足了航天運載和戰術領域多個客戶端同時、可靠、高效地顯示不同數據的需求。