包盈盈 許超峰 謝亞林 中國船舶重工集團公司第七二二研究所
在網絡技術取得快速發展的過程中,網絡行為模式日漸復雜,對網絡通信傳輸的可靠性提出了更高要求。而在新型網絡服務中,UDP發展存在通信傳輸數據丟失問題,無法滿足網絡通信要求。因此,需要完成多端口自適應UDP通信協議的設計與實現研究,從而使UDP協議取得較好發展。
作為無連接協議的一種,UDP在通信過程中無需在計算機間建立連接,能夠同時作為應用的客戶或服務器方。建立UDP應用,需要將一個Winsock控制時設置為“監聽”狀態,其他則需要采用Connect實現初始連接。采用該協議進行數據發送,需要在連接兩端完成RemoteHost屬性的設置,作為計算機名稱,然后將其屬性當成是第二個Winsock控制的LocalPort屬性值,然后進行Bind方法申請。采用該方法將Winsock控制捆綁到本地端口,能夠利用該端口進行“監聽”,避免該端口被其他應用使用。在數據傳輸過程中,需要對計算機LocalPort屬性進行設置,服務器計算機需要進行RemoteHost屬性的設置,即采用計算機域名或IP地址,然后將其屬性當成是客戶計算機上的LocalPort屬性。通過申請sendData,能夠實現信息發送,在DataArrial事件中進行發送信息的獲取。從UDP通信協議應用情況來看,采用該協議由于無需進行前源端與終端的連接,所以開銷較小。但傳輸過程中容易出現擁塞,導致數據傳輸帶寬和速度受到限制。一旦數據包傳輸遭遇線路噪音或被第三方篡改,UDP盡管能夠對出錯數據進行檢測,但是會直接將損壞消息扔掉處理,導致通信可靠性較差。
針對UDP應用問題,設計多端口自適應UDP能夠在通信擁塞時采用自適應方式將數據遷移至新端口鏈路上,確保數據能夠得到實時傳輸,避免數據出現丟失問題。采用該協議進行通信傳輸,從格式上來看包含包頭、塊號、長度、數據內容和校驗和五個部分,分別占用3、1、2、n、2個字節。其中,包頭由head1-3組成,塊號范圍在0-255之間,0為第一次連接建立的塊號,長度用于對整個消息塊長進行記錄,數據內容最大500個字,校驗和可以采用累加和方式進行校驗位的計算。在通信過程中,服務端需要先完成N個端口分配,然后利用整型數組LinKStatus進行各端口鏈路通信狀態記錄,完成各端口UDP通信初始化,然后進行協議通信。
從協議通信流程來看,客戶端首先需要利用多個端口進行0塊通信包的發送,發出與服務器建立連接的請求。經過等待后,接收到回復的0塊通信包,客戶端會將LinkStatus[N]置1,說明端口已經建立通信鏈路。通過N1鏈路,客戶端能夠從1塊通信包開始協議通信。需要進行數據發送,需要在通信包內進行數據內容的添加。在通信過程中,需要監聽其他鏈路。在接收到回復通信包的塊號后,確定塊號與發送塊號相等,客戶端會認為數據包已經成功發送,然后進行下一個塊號的發送。在回復的通信包不正確或未得到回復的情況下,客戶端會重新進行通信包的發送,直至超過3次后,會將LinkStatus[N]置0,重新進行鏈路的建立。采用RMP算法,能夠使數據通信遷移至新端口鏈路上,然后按照上述流程進行通信。在其他端口鏈路Nk監聽發現通信包的情況下,說明服務端主動進行了鏈路遷移,客戶端需要被動進行通信遷移,完成鏈路重建。從服務端通信流程上來看,其多個端口將同時等待進行通信包的接收。在其中一個端口接收到戶,會進行通信包的回復,然后將LinkStatus[N]置1。在通信過程中,服務端會先用一個端口通信,并監聽其他端口。在接收的塊號與上次相同時,可以判定未實現正確通信包的接收。在回復客戶端時,需要進行相同通信包的發送。如果未能正常進行塊號數據接收,需要重新進行通信包的發送,超出3次需要進行鏈路遷移。服務端其他端口監聽到通信包,說明客戶端主動進行了鏈路遷移,服務端需要被動實現通信遷移。
為實現上述流程,需要采用RMP算法。在重建鏈路時,由于N個鏈路中存在部分重建鏈路,遍歷所有鏈路查找Nk將導致通信效率較低。在網絡環境不佳的情況下,容易導致實時傳輸的數據出現丟失問題。采用RMP算法,針對每個鏈路帶有的LinkStatus[N]狀態標志,能夠實現當前鏈路狀態的標記,如果通信正常標記為1,處于初始化或重建狀態標記為0。正常通信過程中,RMP算法能夠根據各鏈路狀態進行排序,然后進行結果存儲。鏈路遷移時,可以從存儲的隊列Quese中進行第一個元素的提取,從而確定Nk。在協議通信過程中,各鏈路狀態隨機,為0或1,能夠快速排序能夠盡快完成標記,通常只需完成一次排序。此外,為避免鏈路遷移和數據收發過程中出現數據丟失問題,需要進行環形緩沖區的設計,利用其附帶讀寫指針進行數據存儲。在初始狀態下,指針指向緩沖區起始地址,緩沖區內容為空。在發送數據時,可以移動指針進行數據寫入,使得讀指針與寫指針狀態不同。移動讀指針,可以進行數據讀取。在指針達到最大化狀態時,需要進行指針重置,以便實現循環讀寫。
在協議實現方面,需要采用Simulink進行建模仿真,完成客戶端和服務端模型的搭建,對協議通信狀態轉換和邏輯處理情況進行分析和判斷,確定協議能夠保證實時數據傳輸的完整性。從客戶端主動遷移情況來看,模型在遷移到新鏈路時將進入RMP_State狀態。采用RMP算法實現多端口處理,能夠將隊列中Queue[0]遷移至其他鏈路中。在模型操作中,需要對快速排序Quick-Sort函數進行調用,實現隊列操作。客戶端模型可以對鏈路回復數據進行監聽,實現被動遷移,進入Listen_State狀態。調用Listen_Link函數,能夠監聽iPort以外鏈路,將狀態標志iLStatus返回,實現iPort數值更新,實現新鏈路通信連接。
采用PC機進行仿真驗證,利用Matlab進行仿真,在[0-1000s]時間內兩臺計算機隨機產生400個字符,進行數據周期性發送。通過在UDP發送函數模型中進行脈沖中斷信號的添加,定期進行中斷信號的發送,能夠對鏈路擁塞進行模擬,導致通信數據發送失敗。從通信包在各鏈路分布情況來看,能夠發現采用多端口自適應UDP能夠使通信包在各鏈路連續分布,通過鏈路遷移實現數據包的傳輸,并且數據包并未出現數據丟失問題。在中斷發生后,協議丟包率依然為0。由此可見,采用設計的多端口自適應UDP協議,能夠保證協議通信的可靠性,因此能夠在復雜網絡中得到應用。
通過研究可以發現,在UDP協議通信流量不斷增加的情況下,容易發生網絡擁塞問題,導致協議在通信過程中出現數據丟失的問題,影響協議的推廣應用。針對這一問題,設計多端口自適應UDP協議,能夠在通信包無法正常傳輸時進行鏈路遷移,重新進行端口選擇和鏈路搭建,保證數據得到可靠傳輸,因此能夠滿足復雜網絡的通信需求。