張 遠 馮 楠
(中國人民解放軍92941部隊 葫蘆島 125001)
導彈艦面設備仿真在武器系統(tǒng)試驗和訓練等任務中廣泛應用,是提高試驗及訓練質(zhì)量、效益重要的技術(shù)手段。導彈艦面設備有多個分系統(tǒng),每個分系統(tǒng)內(nèi)部又含多個設備子節(jié)點,各分系統(tǒng)功能、性能、界面差異較大,因此各分系統(tǒng)需要進行獨立仿真。目前艦載導彈發(fā)射系統(tǒng)基本上都是多發(fā)射單元發(fā)射系統(tǒng)(以下簡稱發(fā)射系統(tǒng)),是艦面設備子節(jié)點最多的分系統(tǒng),這些單元節(jié)點功能、性能和數(shù)據(jù)交互基本相同,只是在裝載導彈資源配置方面根據(jù)任務需要配置不同?;赪indows 進行發(fā)射單元多節(jié)點1:1 獨立仿真實現(xiàn),存在仿真設備成本高、操作人員多和后續(xù)應用、維護、管理不便等問題,迫切需要以最少設備實現(xiàn)實際多節(jié)點裝備的仿真。
Windows 系統(tǒng)網(wǎng)絡交互集成了網(wǎng)絡通信路由,UDP 網(wǎng)絡通信接口及IP 接口由Windows 集成通信路由自主決定,基于Windows平臺的仿真軟件無法通過應用層軟件實現(xiàn)多IP 和網(wǎng)卡特殊處理,需要對多節(jié)點進行獨立仿真實現(xiàn)?;赪indows 平臺的Winpcap(Windows packet capture)網(wǎng)絡底層訪問組件易于部署,通過底層網(wǎng)絡控制技術(shù),能夠為系統(tǒng)應用提供數(shù)據(jù)包底層存取手段[1],通過單節(jié)點多IP與網(wǎng)卡關(guān)聯(lián)綁定,實現(xiàn)發(fā)射系統(tǒng)多發(fā)射單元仿真中單節(jié)點設備對多節(jié)點網(wǎng)絡通信仿真。
WinPcap 為Windows 平臺下網(wǎng)絡訪問組件,提供平臺外底層網(wǎng)絡訪問功能,獨立于主機協(xié)議(TCP/IP協(xié)議)以不阻塞、過濾和控制其它應用程序數(shù)據(jù)包發(fā)送和接收的方式,接收和發(fā)送原始網(wǎng)絡數(shù)據(jù)包[2]。WinPcap 含三個模塊:一是運行于操作系統(tǒng)內(nèi)核級的模塊,形式為以DDK 寫成的SYS 驅(qū)動文件,完成與NIC Driver 的交互,從網(wǎng)卡捕獲原始數(shù)據(jù)包或者向網(wǎng)卡發(fā)送數(shù)據(jù)包,含1 個網(wǎng)絡數(shù)據(jù)包過濾器NPF(Netgroup Packet Filter)[3],捕獲數(shù)據(jù)包首先送入Kernel Receiving Buffer,然后通過用戶對packet.dll 函數(shù)調(diào)用,送入User Buffer 處理;二是用戶級packet.dll 模塊,提供與運行于內(nèi)核級模塊packet.sys或者npf.sys的接口,屏蔽不同Windows平臺內(nèi)核級模塊的差異,給用戶級應用程序提供統(tǒng)一、能用來直接訪問BPF(Berkeley Packet Filter)驅(qū)動程序的API 訪問接口,執(zhí)行獲取適配器名稱、主機掩碼及動態(tài)驅(qū)動器加載等低級操作;三是用戶級高級Wpcap.dll模塊,對packet.dll進一步封裝,輸出與UNIX 或者Linux 平臺Libpcap 兼容的接口函數(shù),使用戶級應用程序可不依賴于特定的網(wǎng)絡硬件或者操作系統(tǒng),提供一種更簡單、直接、方便的方法來更好地利用編程環(huán)境,包括捕獲數(shù)據(jù)包、創(chuàng)建數(shù)據(jù)包過濾裝置或?qū)⒈O(jiān)聽到的數(shù)據(jù)包轉(zhuǎn)存到某個文件等,wpcap.dll提供更加安全的實現(xiàn)方法[4]。
發(fā)射系統(tǒng)仿真需要對多個發(fā)射單元節(jié)點的功能及性能進行仿真,配合艦面設備實裝或其它仿真系統(tǒng)實現(xiàn)不同型導彈作戰(zhàn)過程的網(wǎng)絡通信仿真。受Windows平臺集成以太網(wǎng)通信路由功能限制,基于Windows 仿真無法通過應用層軟件指定IP 和網(wǎng)卡綁定發(fā)送,實現(xiàn)一臺仿真計算機通過擴展多網(wǎng)絡接口,模擬多節(jié)點發(fā)射單元以太網(wǎng)通信仿真。單節(jié)點仿真設備為實現(xiàn)多個發(fā)射單元的作戰(zhàn)信息交互的模擬,需要在以太網(wǎng)上模擬多個以太網(wǎng)通信節(jié)點,同時仿真軟件識別并綁定特定IP 地址的多個以太網(wǎng)通信接口進行仿真通信,模擬多個通用發(fā)射單元與其它系統(tǒng)進行作戰(zhàn)信息交互。
采用WinPcap 通過綁定特定網(wǎng)卡進行以太網(wǎng)通信數(shù)據(jù)包捕獲、數(shù)據(jù)存儲和協(xié)議數(shù)據(jù)發(fā)送,直接控制以太網(wǎng)底層進行網(wǎng)絡通信,利用Wincap 提供的以太網(wǎng)通信開發(fā)工具包API函數(shù),可滿足基于單節(jié)點的發(fā)射系統(tǒng)多節(jié)點仿真需求。基于單節(jié)點的多節(jié)點以太網(wǎng)通信仿真通信架構(gòu)如圖1所示。
圖1 多節(jié)點以太網(wǎng)通信仿真通信架構(gòu)
單節(jié)點計算機中部署配置多個網(wǎng)絡適配器,實現(xiàn)與實裝物理接口的一一對應,通過對網(wǎng)絡設備資源進行打開識別、選擇和設置,發(fā)射系統(tǒng)仿真中指定端口進行數(shù)據(jù)包捕獲和發(fā)送。發(fā)射系統(tǒng)仿真程序首先獲取本地網(wǎng)絡驅(qū)動器的網(wǎng)卡列表,然后設定捕獲網(wǎng)絡數(shù)據(jù)的端口。基于WinPcap 的應用程序中設定捕獲端口時,一種方式為網(wǎng)絡端口被用戶通過編寫專門的程序段判斷命令行的參數(shù)進行命令行指定,另一方式為網(wǎng)絡端口被WinPcap引擎查詢并進行設定,即調(diào)用WinPcap 的API 函數(shù)pcap_findalldevs_ex()設定,發(fā)射系統(tǒng)仿真采用后者。該函數(shù)被調(diào)用后返回一個指向pcap_if 結(jié)構(gòu)的鏈表,其中的每一結(jié)點都包含著一個己經(jīng)綁定的網(wǎng)卡的全部信息,其中相應設備的名稱和描述被分別存放于name和description這兩個變量中[5]。
調(diào)用函數(shù)pcap_findalldevs()可獲取網(wǎng)絡驅(qū)動器靜態(tài)高級信息,函數(shù)返回的每個pcap_if()結(jié)構(gòu)體中包含pcap_addr結(jié)構(gòu)列表,包括一個地址列表、一個掩碼列表、一個廣播地址列表和一個目的地址列表。發(fā)射系統(tǒng)仿真網(wǎng)卡綁定模塊根據(jù)數(shù)據(jù)包捕獲需求,調(diào)用WinPcap的API函數(shù)pcap_open_live()綁定打開網(wǎng)卡,函數(shù)參數(shù)包括已綁定捕獲設備接口、設定能捕獲的網(wǎng)絡數(shù)據(jù)包的最大數(shù)目、指定device接口工作模式、指定數(shù)據(jù)時超時控制等參數(shù),其工作模式設置為promiseous mode混雜模式,捕獲滿足所設置條件的網(wǎng)絡數(shù)據(jù)[6]。
發(fā)射系統(tǒng)仿真中接入發(fā)射系統(tǒng)內(nèi)部以太網(wǎng)和艦面設備以太網(wǎng),網(wǎng)絡交互信息量大,而網(wǎng)絡數(shù)據(jù)包捕獲模塊只需監(jiān)控特定的通信端口。采用Win-Pcap 數(shù)據(jù)流過濾引擎,通過設置數(shù)據(jù)流過濾規(guī)則(Filter),實現(xiàn)對特定作戰(zhàn)交互信息的捕獲。數(shù)據(jù)包過濾規(guī)則的編譯和設置處理中,需將仿真軟件的過濾規(guī)則和捕獲機制相集成,調(diào)用pcap_setfilter()和pcap_compile()函數(shù),通過WinPcap 的數(shù)據(jù)流過濾引擎實現(xiàn)高效而實用的網(wǎng)絡數(shù)據(jù)流中特定數(shù)據(jù)包捕獲[7]。核心驅(qū)動的捕獲進程中調(diào)用函數(shù)pcap_setfilter()綁定一個過濾器,所設定的過濾器對網(wǎng)絡中傳輸?shù)乃袛?shù)據(jù)包進行過濾[8];仿真程序中調(diào)用函數(shù)pcap_compile()編譯一個過濾設備,使用高層布爾(boolean)型變量和字串進行過濾控制,產(chǎn)生能夠被底層驅(qū)動所解釋的一系列二進制編碼,符合條件數(shù)據(jù)包被發(fā)送給進行捕獲的應用程序加以應用。
發(fā)射系統(tǒng)多節(jié)點仿真中,仿真的每個節(jié)點都需要捕獲本節(jié)點需要的特定數(shù)據(jù)包,根據(jù)任務需要經(jīng)過仿真處理后,形成對應反饋數(shù)據(jù)包發(fā)送給相應其它節(jié)點,完成完整工作流程仿真。數(shù)據(jù)包捕獲實現(xiàn)中首先捕獲一個數(shù)據(jù)包,通過構(gòu)造重復捕獲一個數(shù)據(jù)包的循環(huán)過程,實現(xiàn)數(shù)據(jù)包循環(huán)捕獲。WinPcap進行數(shù)據(jù)包捕獲方式包括獲取返回式和回調(diào)式兩種,回調(diào)式方法需要回調(diào)函數(shù)與捕獲函數(shù)配合使用[8],發(fā)射系統(tǒng)仿真軟件采用前者。WinPcap 函數(shù)pcap_next()依賴pcap_dispatch(),效率相對較低;發(fā)射系統(tǒng)仿真中調(diào)用pcap_next_ex()函數(shù)接收數(shù)據(jù)包,數(shù)據(jù)包到達后返回指向pcap_if 結(jié)構(gòu)數(shù)據(jù)緩沖區(qū)信息,獲取包含剛捕獲的含數(shù)據(jù)鏈路層數(shù)據(jù)頭最原始數(shù)據(jù)包[9]。
通過WinPcap 獲取的原始數(shù)據(jù)為包括以太網(wǎng)數(shù)據(jù)幀、IP/ICMP 數(shù)據(jù)幀和UDP/TCP 等不同層幀格式的原始數(shù)據(jù)包,解析獲取應用層用戶數(shù)據(jù)必須正確逐層解析原始數(shù)據(jù)包格式[10],如TCP/IP 幀格式采用的IEEE802.3標準。通過WinPcap發(fā)送的是原始數(shù)據(jù)包,待發(fā)送的用戶應用層數(shù)據(jù)以原始格式進行封裝,首先封裝成UDP/TCP 數(shù)據(jù)幀,然后封裝成IP 數(shù)據(jù)幀,最后封裝成以太網(wǎng)數(shù)據(jù)幀,調(diào)用Pcap_sendpacket()函數(shù),通過設定數(shù)據(jù)包MAC 地址進行指定數(shù)據(jù)的可控網(wǎng)絡通信仿真[11]。
發(fā)射系統(tǒng)多發(fā)射單元的多節(jié)點網(wǎng)絡通信仿真實現(xiàn)中,單節(jié)點硬件設備進行了小型集成一體化設計,衛(wèi)星時統(tǒng)卡、獨立網(wǎng)卡等設備封裝在標準機箱中,采用接近實裝的計算機板卡提供仿真軟件運行所需近似實裝的硬件配置環(huán)境。仿真系統(tǒng)設備利用實裝環(huán)境中艦船時統(tǒng)信號或自身時統(tǒng)授時模塊的北斗衛(wèi)星授時信號,實現(xiàn)仿真設備與實裝設備的時間統(tǒng)一;配置多網(wǎng)卡,實現(xiàn)8 個發(fā)射單元網(wǎng)絡通信仿真;選配雙核CPU、大內(nèi)存,使主頻、內(nèi)存不對WinPcap 性能產(chǎn)生影響,充分保證底層數(shù)據(jù)處理運行效率[12]。
軟件開發(fā)環(huán)境采用WindowsXP+VisualStudio+WinPcap 平臺,基于WinPcap 進行底層網(wǎng)絡通信控制,支撐發(fā)射系統(tǒng)多節(jié)點仿真中高層以太網(wǎng)通信,實現(xiàn)在一臺仿真計算機平臺上對8 個發(fā)射單元的作戰(zhàn)信息交互仿真。發(fā)射系統(tǒng)多發(fā)射單元通信仿真中主要設計了四個主要線程,發(fā)射系統(tǒng)多發(fā)射單元的多節(jié)點以太網(wǎng)通信仿真主線程流程如圖2所示。
圖2 多節(jié)點以太網(wǎng)通信仿真主線程流程圖
發(fā)射系統(tǒng)仿真系統(tǒng)成功實現(xiàn)了基于單節(jié)點實現(xiàn)多發(fā)射單元節(jié)點網(wǎng)絡通信仿真,在艦船實裝環(huán)境下武器系統(tǒng)試驗、發(fā)射系統(tǒng)鑒定試驗及研練中進行了大量的實際應用,通過實現(xiàn)單節(jié)點對多個單元幾十枚各型導彈資源的連射、混射、故障處理等多種模式下作戰(zhàn)使用情況的仿真模擬,為相關(guān)武備功能性能鑒定、作戰(zhàn)使用訓練等任務提供了有效支撐手段,極大提高了試驗鑒定和訓練水平。
基于WinPcap 底層網(wǎng)絡通信控制技術(shù)應用于單節(jié)點實現(xiàn)多節(jié)點網(wǎng)絡通信仿真,具有應用程序界面友好、功能強大、維護及擴展性好、開發(fā)成本低、網(wǎng)絡開發(fā)技術(shù)成熟和仿真置信度高等優(yōu)點,采用該方法研制完成的仿真系統(tǒng)互聯(lián)方便、運行可靠和便于便攜使用,滿足發(fā)射系統(tǒng)多節(jié)點網(wǎng)絡通信仿真中對降低設備數(shù)量及確保仿真置信度的需求,解決原有多節(jié)點獨立仿真帶來的設備成本高、使用管理不便等問題。該方法同樣適用于其它基于以太網(wǎng)通信的多節(jié)點復雜系統(tǒng)網(wǎng)絡通信仿真,仿真系統(tǒng)擴展能力強,能有效減少硬件規(guī)模,降低研制升級成本,確保仿真置信度,具有積極推廣借鑒作用。