程 翔,任 磊,張紹澤,李苑青
基于鏡像口抓包的數據采集記錄系統設計與實現
程 翔1,任 磊1,張紹澤1,李苑青2
(1 中國電子科技集團公司第二十研究所,西安 710068;2 西北工業大學航天學院,西安 710072)
在系統研制試驗過程中對數據進行采集記錄,不僅可以為系統功能性能評估提供數據源,也可以為重現戰場試驗態勢提供手段。本文針對此問題及工程中的實際需求設計了一種基于分布式時間機制、網絡監聽、數據抓包和多緩存記錄等關鍵技術的數據采集記錄系統,該系統設計包括系統組成與架構和關鍵技術的設計與實現。最后根據設計內容進行了仿真應用,針對系統研制試驗過程中的性能指標進行了測試和分析,結果表明該數據采集記錄系統不僅運行高效,且能夠很好地滿足系統研制試驗階段的要求。
鏡像口;抓包;數據采集;數據記錄
軍用分布式作戰系統是當下研究的熱點,鑒于其系統運行復雜和功能性能指標眾多的特點,在研制和試驗全過程中需要實時采集并記錄系統各個節點產生、交互和處理的所有數據,并在后期可將存儲的數據進行解析和集中處理,為事后的試驗數據分析和系統功能性能評估提供數據源,為試驗過程的事后重現回顧提供手段。
由于分布式作戰系統具有多個作戰平臺,每個平臺又由多型設備共同構成,在系統工作時,不僅各節點產生和處理的數據量非常巨大,而且數據交互的過程也錯綜復雜;同時,作戰系統的研制成本很高,組織大型試驗需要多家單位協調,試驗數據極為珍貴。因此要求數據采集記錄系統必須具有高記錄帶寬、高可靠性和實時監控等功能性能指標。
本文提出的數據采集記錄系統利用分布式時間機制、網絡監聽、數據抓包和多緩存記錄等技術,可以滿足當前系統研制試驗階段對數據采集記錄的功能性能需求,可服務用于系統研制和試驗過程中的戰場態勢回放以及分析性能指標、數據合理性和誤差精度等工作。
系統開發選用VS2015C#語言,它是微軟公司發布的一種面向對象的、運行于.NET Framework上的高級程序設計語言。C#簡單、高效,將數學運算、字符和數據庫等多種復雜操作集合為面向對象的類,大大減少了編成人員的工作量;不使用指針,并提供了一種內存分配、垃圾回收、版本控制和類型安全機制,保證了程序的正確性和穩定性[1]。
1.2.1 計算機
選用計算機配置建議:處理器主頻2.26 GHz×4以上,內存8 GB以上,硬盤512 GB以上,獨立顯卡顯存2 GB以上,操作系統為Windows7×64位。
1.2.2 時碼卡
計算機搭載時碼卡用來保證分布式系統內各試驗平臺的時間保持一致。本文選用的時碼卡采用標準的PCI總線接口為計算機提供高精度的時間數據,可以讀取的時間精度為0.1 ms,可產生1PPS/20PPS/50PPS/100PPS中斷信號,并可選擇使用GPS信號或B碼信號。
1.2.3 交換機
具有可配置鏡像口和劃分虛擬局域網(Virtual Local Area Network,VLAN)等功能。
數據采集記錄系統軟件設計采用模塊化和層次化編程思想。系統下按功能又劃分為數據通信、文件建立、數據捕獲、網絡協議解析、網絡數據存儲、文件記錄和界面顯示等模塊,各功能模塊又分解為子功能模塊。模塊之間相互獨立,按程序設定的通訊機制進行交互。主程序控制信息調用,與被調用模塊共同實現系統功能。具體的軟件功能組成如圖1所示。

圖1 系統功能模塊結構圖
為保證各分布式平臺對時間記錄的一致性,各平臺數據采集記錄軟件所搭載的計算機需統一安裝時碼卡設備,在數據記錄的時刻使用時碼卡時間在記錄報文內打上時戳。但由于每次獲取時碼卡時間都需要有一定的操作時間,雖然時間很短,但對于大數據量的記錄,便會極大地影響記錄效率,造成軟件卡頓,甚至造成記錄時刻有時延以及記錄丟包等現象。
在本文中,軟件直接獲取時碼卡的秒中斷,在獲取時刻對計算機板卡時間和時碼卡時間進行比對,獲得兩者的時差,這樣,在每次記錄數據時,只需在數據獲取時刻的計算機時間上補上時差,便可得到準確的時碼卡時間,從而在高效的記錄條件下保證了各分布式平臺對時間記錄的一致性。
在本文中,單平臺各設備間網絡通訊均采用用戶數據報協議(User Datagram Protocol,UDP),故各平臺的數據均需通過網絡交換機進行交互,由于以太網數據不能通過第三端直接引線實現數據記錄,因此采取鏡像口網絡監聽的方式進行數據采集。
網絡監聽是一種簡單、有效獲取被測網絡數據的方法。由于網絡監聽方式的數據采集主機只是被動接收在局域網上傳輸的信息,它不主動與其他主機交換信息,也不修改在網絡上傳輸的數據,故該方式不影響網絡系統的工作[2]。
要實現鏡像口網絡監聽,需對系統交換機進行相關配置。
2.2.1 配置網口
將交換機的某一個網口設置為監聽網口,另外某幾個網口設置為鏡像網口,其余預留一些網口不進行設置,為普通網口。其中鏡像網口可配置為進/出單向數據鏡像或雙向數據鏡像。為避免設備間數據傳輸導致的數據被重復記錄,一般將鏡像網口統一配置為進向數據鏡像,即鏡像從設備傳入交換機的所有數據。鏡像后的數據均會復制一份送到監聽網口,而不會影響原有數據的傳輸。
2.2.2 劃分VLAN
由于通過鏡像口的方式,監聽網口已經獲取了需要記錄的數據內容,但網絡中的廣播信息和匹配的組播信息本身就可以被監聽網口獲取到,這會造成數據的重復記錄,不僅影響記錄效率,而且還給事后的數據分析造成影響,因此需要劃分VLAN,將監聽網口與其他網口進行邏輯隔離,這樣監聽網口除了可以接收到鏡像數據外,不會再接收到其他的交換數據。
2.2.3 按需求連線
配置好網口后,即可按需求進行連線,將數據記錄設備連接到監聽網口,需記錄數據的設備連接到鏡像網口,無需記錄數據的設備連接到普通網口。這樣不影響系統內本身的數據交換,卻可以采集記錄到系統內需要的數據內容。
SharpPcap的全稱是Sharp Packet Capture,是一種基于WinPcap驅動,用于.NET平臺,具備網絡流量捕獲、發送和分析的開發框架。SharpPcap包括兩個動態鏈接庫:SharpPcap.dll及PacketDotNet.dll,前者主要處理網絡部分,后者主要處理數據報文的解析與構造[3]。
本文基于SharpPcap的抓包步驟如圖2所示。獲取網卡設備列表并打開需要抓包的對應網卡;同時設置好過濾器、緩存區大小和線程優先級等其他參數;把網卡上的數據包復制到內核緩沖區中;通過上層的調用,把內核緩沖區中的數據包拷貝到用戶緩沖區中。經過一定的處理,再把數據包存放到硬盤上[4]。

圖2 數據抓包流程
其中,為了避免記錄重復的數據包,造成存儲過多的無用信息,對事后分析造成影響;或因記錄過多的無用數據致使單位時間內采集的數據量過大而導致關鍵數據的錯記或漏記,需在數據采集過程中就對數據信息進行過濾處理。由于SharpPcap自帶過濾功能,因此可通過SharpPcap過濾器進行采集階段的邏輯隔離,可以限定接收數據包的協議類型、網絡IP以及端口號等,例如:CapDev.CapDevice.Filter = "udp and (dst port 2000 or dst port 3000)",表示只接受UDP協議,并且只捕獲目的端口號是2000和3000的數據包,其余數據一概過濾,不進行捕獲。
由于采集記錄數據的過程需要中央處理器(Central Processing Unit,CPU)處理時間,當新數據包到來時,若系統底層分接器還在處理前一個數據包,新數據包就會被丟棄。另外,若內核緩沖區沒有足夠的空間來容納從網卡上復制過來的新數據包,或者內核緩沖區滿了,新數據包也會被丟棄。除此之外,若數據來源方式不同,就需要開多個線程來采集數據,在記錄數據的時候需要保證不同線程下數據的時序問題。
綜合考慮以上問題,需要設計一個緩存處理機制,保證采集到的數據即使無法立刻處理也不會被丟棄,而且可以按照采集到的順序按序記錄。
首先,定義一個隊列:
ConcurrentQueue
然后,將需進行緩存處理的事件添加到隊列中:
Action act = newAction(delegate
{
……//數據存儲事件
});
ExecuteQueue.Enqueue(act);
最后,單獨開辟一個線程,只要隊列中有內容,便按順序執行隊列中的事件:
publicvoidThread()
{
while(true)
{
//運行執行隊列
ExecuteQueue.TryDequeue(outAction action);
if (action != null)
action();
}
}
數據記錄模塊主要是將采集到的數據內容寫進文件內,形成統一的記錄文件。
首先,為更好地區分不同的記錄文件,文件名以“SSS_YYYYMMDDhhmmss_AA.n5r”的形式統一進行命名。其中“SSS”表示數據類型,例如當其為“System”時表示記錄的是系統網的數據,“Story”時表示記錄的是劇情網的數據;“YYYYMMDDhhmmss”表示記錄時刻的年月日時分秒;“AA”表示記錄數據的站點號;“*.n5r”為本文自定義儲存二進制數據的文件類型。文件記錄采取多數據塊緩存模式進行文件的記錄工作,記錄流程如圖3所示。其次開辟出多個數據存儲空間,并分配好每個存儲空間的最大存儲容量(暫設定為5個數據存儲空間,每個存儲空間的容量為10 M,可根據實際性能進行變動)。在文件記錄開始后,選擇一個存儲空間進行數據的記錄,文件記錄的格式如表1所示。當某一個存儲空間在記錄某一條報文后剛好超出了最大存儲容量,則立刻選擇一個空的存儲空間,將這條報文移至空間的起始位置開始新的存儲空間的存儲,而之前存儲空間的剩余部分用“0”填滿,進行寫文件的操作,在文件寫好后再將此存儲空間清空,進行存儲的備用。

圖3 數據記錄多緩存儲存機制

表1 信息數據文件記錄格式
而下一個存儲空間存滿后,采取同樣的操作——新選擇一個空的存儲空間進行存儲,同時將這個存儲空間的剩余部分用“0”填滿,然后將此空間的內容續寫在之前的文件后面。在數據記錄結束時,不管一個存儲空間是否存滿,都直接將已記錄的內容進行寫文件的操作,最終形成一個完整的記錄文件。文件的組成如圖4所示。

圖4 記錄文件組成示意圖
性能測試連接方式如圖5所示,一臺主機通過鏡像口給另一臺主機發送測試數據包,數據采集記錄設備在監聽口進行數據捕獲。

圖5 性能測試連接示意圖
為了驗證系統的數據采集記錄性能,在不同數據速率、不同數據發送長度和不同數據發送頻率下對其數據丟包率進行了測試,測試結果如表2所示。

表2 數據采集記錄性能測試
通過測試記錄可以看出,通過本文捕獲監聽的方式進行數據采集記錄,其丟包率非常低,在不同數據包長度和不同發送頻率下,均表現良好,只有數據包發送頻率過快時,丟包率才逐漸上升,而且通過本文捕獲數據包的方式也明顯優于通過UDP協議接收數據包方式的效率。
因此可以認為本文的數據采集記錄系統在較大帶寬的情況下依舊具有良好的可靠性,滿足設計要求。
本文提出了一種基于鏡像口抓包的數據采集記錄系統,該系統通過網絡監聽的方式,實時抓取網絡系統內的有用數據,而對本身的網絡系統不產生任何影響,并且可通過交換機編程及軟件配置靈活過濾數據內容,通過動態內存池及多線程技術提高了網絡數據記錄速度。經過仿真驗證及性能測試,證明此系統具有較高的記錄帶寬和可靠性,且能夠實時監控記錄全過程,可有效應用于各類分布式或集中式系統的網絡數據采集記錄。
[1] 李斌,任磊,王梟雄,等. 一種遠程分布式雷達組網數據回灌方法的設計與實現[J]. 現代導航,2019(4):304-307.
[2] 魏凱強,趙光磊. 機載以太網數據記錄系統設計與實現[J]. 電腦與信息技術,2018,26(3):64-67.
[3] 劉業,田琨瑋,劉林峰. 基于SharpPcap的網絡流量監控系統[J]. 計算機工程與設計,2013,34(7):2328-2332.
[4] 肖丹. 基于WinPcap的網絡封包數據實時采集技術[J]. 科技資訊,2011(6):20-21.
Design and Implementation of Data Acquisition and Recording System Based on Capturing Packet Through Port-Mirroring
CHENG Xiang, REN Lei, ZHANG Shaoze, LI Yuanqing
Collecting and recording data during system development and testing can not only provide data sources for the performance evaluation of system function, but also provide a means for reproducing the battlefield experimental situation. In the paper, based on distributed time mechanism, network monitoring, data capture, and multi-cache recording, a data acquisition and recording system are designed for the actual needs in projects. The system design includes the system composition and architecture, and the design and implementation of key technologies. Simulation application was carried out according to the design content, and the performance indicators during the system development test were tested and analyzed. Experimental results show that this data acquisition and recording system not only runs efficiently, but also satisfies the requirements during the system development test stage.
Port-Mirroring; Capturing Packet; Data Acquisition; Data Recording
TP393.11
A
1674-7976-(2021)-03-205-05
2021-01-13。程翔(1989.09-),陜西西安人,碩士,工程師,主要研究方向為系統仿真與建模、火力與指揮控制。