多媒介通信系統鏈路管理的設計和實現
所面臨的難點之一在于協議組件和通信媒介組件可以有相同的數據接口,但是這些組件的特性千差萬別,在設置參數和獲得當前狀態方面無法做到大致統一的接口,可以通過組件自解析的方式解決。鏈路管理模塊和這些組件之間的參數用字符串或數組的方式傳遞,各組件在得到這些字符串后根據本身的情況進行解析,得到特定的參數。 難點之二,如前文所述,通信媒介組件與物理層密切相關,很難做到支持并行化的輸入。在多條獨立鏈路不同的線程中同時使用同一通信媒介時,各鏈路對物理層的操作將產生沖突,必須對通信媒介組件的數據輸入進行串行化處理(排隊),使同一時刻,只處理一個輸入。在COM組件的多線程模型中,單線程套間(STA)模型有如下特點:如果某COM組件的對象生成在單線程套間中,則只有與同在一個套間特定的線程可以訪問該對象不在同一套間的其他線程必須通過列集(marshal)技術才能訪問該對象。這種技術基于COM ORPC協議和消息階列機制,自動把對該對象的訪問串行化了。所以如果每個通信媒介組件都只有一個對象且生存在STA中,則通過列集技術它的訪問自動被串行化。 1.4 媒介模塊和協議模塊的設計 媒介組件封裝了與網絡平有關的操作,向上提供了建鏈、斷鏈、發送數據、接收數據(回調)、參數設置、狀態改變報告(回調)、參數查詢、狀態查詢等接口。 例如在高速公路網絡中,專線網絡和撥號線后備鏈路都基于IP網絡,Windows套接字接口(Winsock)提供了一個基本與協議無關的傳送接口從而封裝了基本操作。但是對于不同協議,具體操作仍稍有不同,如面連接的TCP和面向無連接的UDP向上層暴露的SOCKET連接過程就很不相同,同時對不同協議參數信息的查詢和設置接口差別也很大;而撥號線后備鏈路在SOCKET連接之外還有撥號、掛斷等操作。媒介組件在Winsock基礎上又給出了一層封裝,把建立鏈路、撤銷鏈路、等差別較大的操作在此層完成,向上層暴露統一的建鏈方法。對于參數的設置和信息查詢,媒介組件同外界通過不定長度的數組或字符串交換,這樣就形式了掩蓋了差異,保持了接口的統一性。 對于特殊的后備媒介,如無線MODEM-無線電臺方式,媒介組件必須提供與IP網絡相一致的接口,而對設備的操作(串口、MODEM、電臺)進行封裝。節點ID系統(與IP系統類似)也在此組件中進行管理。 在媒介模塊之上完成的協議控制以獨立的COM組件方式存在。這是考慮到媒介類型與協議并非一一對應,一種協議可能適用于多種媒介,一種媒介亦可能使用多種協議。 2 鏈路的管理、維護和調度 鏈路的管理、維護和調度是本設計的重點內容之一,可從運行角度和維護測試角度分別考慮。在運行中,系統的每個節點都可能通過多條鏈路與多個節點通信,每條鏈路所使用的通信媒介和協議又不盡相同。與同一節點通信的過程中,有可能在不同的通信媒介和協議間切換。同時,鏈路管理層必須實時獲得各條鏈路的運行狀態和當前參數,如通斷情況、吞吐量等,以作出正確的調度決策。從維護測試角度,需要設置各條鏈路所涉及的協議參數和涉及通信媒介的參數;新節點必須能夠自動加入,成為任一節點的客戶端。 2.1 多鏈路管理 鏈路管理層必須維護一張鏈路表,以記錄各條鏈路的情況(如表1)。表1 鏈路管理表結構 目的ID通信媒介鏈路標識對應目的地址優先紡鏈路狀態000001"U"0001192.169.0.11NO目的ID是節點的全網唯一標總值,通信媒介用字符標識,鏈路標識是鏈路的唯一標識。對應目的地址為下一層(特定通信媒介)的地址:若基于UDP/IP或TCP/IP,則為IP地址;若基于短波或者別的通信媒介,則為在下一層約定的地址。優先級表示與同一目的ID通信時優先采用哪條鏈路。與同一節點間的鏈路可能有數條,它們互相獨立且對等,只是優先級不相同。鏈路狀態包括中止和激活兩種。中止狀態指鏈路保持在偵聽態,能接收數據幀關上報鏈路管理組件,而發送線程中止運行;激活狀態指兩節點在此鏈路上進行通信。鏈路由中止狀態到激活狀態轉換的過程稱為激活,包括啟動發送線程,通過發送握手幀和接收握手成功幀與目的ID進行握手等過程。 鏈路表包括了所有可能使用的鏈路,在本節點啟動時,只激活優先級最高的鏈路。若優先級最高鏈路無法激活,則激活次高的鏈路,以此類推,直到連接上。若激活了非最高優先級鏈路,則保持高優先級鏈路的“試圖連接狀態”。若均無法激活,則停止主動激活,等待被動激活。在所有激活的鏈路上,服務器主動發出“心跳信號”,偵測鏈路狀態,包括鏈路是否中斷、心跳信號回應時間等,并實時反映到鏈路表上。圖3 鏈路切換(自動切換、非自動切換)流程圖本節點與主服務器(即主父節點)和備份服務器(如有)之間的鏈路必須在本節點運行之前配置,與各客戶端(子節點)之間的鏈路可在運行中動態配置,由客戶端主動發起,申請加入。 2.2 鏈路間切換 在與一個節點通信的過程中,當主用鏈路(優先級高)斷鏈或擁塞時,必須自動切換到備用鏈路上進行數據通信,稱為自適應切換;亦可禁止自適應切換而由上層控制,稱為非自動切換。在許多網絡中,父節點備用鏈路通信是公用的,無法由某兩個節點永久占用,只能在需要時申請激活。 在自動切換模式下,切換原則是:盡量使用高優先級鏈路進行通信。分五種情況討論:(1)網絡層交給鏈路層一系列待發送消息,此消息結構中包含了目的ID。鏈路層通過鏈路列表打到此目的ID對應的已經激活的鏈路中優先級最高者進行通信。(2)當正在通信的鏈路中斷時,保持該鏈路的試圖連接狀態。激活優先級次之的鏈路,若無,則再次之(此鏈路應在切換鏈路集內)。如果沒有鏈路可以被激活,則認為通信中斷;若激活優先級鏈路,則從未被ACK的消息開始發送。(3)在通信中,高優先級的鏈路被激活時,中斷正在使用的鏈路,轉移到高優先級的鏈路上,從未被ACK的消息開始發送。(4)末在通信中的鏈路中斷時(由心跳信號偵測得知),保持該鏈路試圖連接狀態,激活優先級次之的鏈路,若無,則再次之(在切換鏈路信內)。如果沒有鏈路可以被激活,則認為通信中斷。(5)末在通信中,高優先級的鏈路被激活時,中斷低優先級鏈路。 非自動切換模式下的要點是保證在切換過程中數據的安全性,不丟失也不重復。向上層提供的非自動切換接口提供三個功能:a.激活某條鏈路;b.將當前通信切換至某條鏈路;c.中止(disable)某條鏈路。在產生通信動作前,上層可以指定目前激活的鏈路(同時中止其它鏈路,使激活鏈路保持在1);如果不能激活指定鏈路,則報告到上層,由上層繼續進行調度。激活鏈路只有一條,有通信動作產生時,鏈路層自然采用條鏈路進行通信。如果需要從鏈路A切換到鏈路B,上層必須先激活鏈路B,此時有A/B兩條鏈路激活。但是通信仍在鏈路A進行;然后上層將當前通信切換至鏈路B;鏈路管理層待上條消息發送成功或失敗后,再切換至鏈路B;最后上層disable鏈路A,使激活鏈路仍然只保持一條。在這種模式下,盡管是非自動切換,但是鏈路管理層仍然對其過程進行干預,保證了數據的安全性。鏈路切換流程如圖3。 2.3 節點動態加入 新的節點希望成為某節點的子節點時,配置與該節點(服務器)之間的鏈路,并向該節點發出加入申請幀,等待對應回傳,從回傳信息中判斷對方是否允許本節點加入。與服務器之間有可能多鏈路,申請幀中必須包含所有這些鏈路的信息。 本節點收到新的客戶端加入本網絡的申請幀時,由服務器操作員審核是否允許該客戶端加入。若允許,從申請幀中獲得與該節點間所有鏈路的信息寫入鏈路表,并把對方發送申請幀所使用的鏈路設為激活狀態,然后發送“成功”應答幀至該節點,至此,即加入了一個新的子節點。若未通過審核,則發送“失敗”應答幀至該節點。 本系統的優點在于:(1)基于超鏈思想,對點到點的多種類型鏈路、多條鏈路進行統一管理,使具體通信事務不必關心鏈路調度;對外接口簡單,易于二次開發;(2)基于COM技術和OPC規范設計思想,把協議、媒介驅動、鏈路管理作為獨立的組件,使系統的可擴展性大大增強,可以在基本不改變其他要素的情況下,獨立地升級或增加協議或媒介驅動協議,系統的靈活性和適用范圍大大增加。












評論