1 高效捕包技術的重要性
高性能系統需要在很短的時間內,成功的收集和處理大量的數據,目標系統的實時數據需要被收集,管里和控制。
2 傳統的數據包捕獲機制
Inter指出,影響數據包捕獲性能主要原因是系統開銷,內存訪問和tcp/ip協議棧三個方面,另外系統開銷也是非常大的影響因素。另外出現大量的丟包現像的主要原因還有頻繁的網絡中斷,系統調用和多次內存的拷貝。
(1)BPF數據包捕獲機制
A:數據鏈路層的一種原始接口,提供原始鏈路層封包的過濾和轉發。
B:它的實現分為兩部分。
一部分是數據包的過濾,
根據過濾規則決定數據包的接受和丟棄。通過內核的NetFilter模塊實現,通過用戶空間的itables控制。
另一部分是數據包的轉發
在鏈路層捕獲數據包,然后發給數據包過濾部分
缺陷:
雖然過濾一部分數據包在一定的程度上降低了系統的開銷,提高了效率。但它的捕獲和過濾都是在linux內核中完成。這樣一來只要linux內核一更新,它也需要更新,降低了它的可移植性和通用性。
(2) libpcap數據包捕獲機制
先看看哪些應用是通過這個庫寫出來的吧,snort,tcpdump。wireshark用的winpcap。可見還是非常的強大的,它同樣支持BPF信息過濾機制
libpcap工作機制:
A:本地網卡設置為混雜模式(這種模式能夠接受所有流經本機所在網絡得數據包)
B:數據包經過BPF過濾
C:交給linux內核層數據包緩沖區,用戶層應用程序通過系統調用將數據包從內核緩沖區取出並放入用戶空間內存區
缺陷:
數據包經過了linux得內核網絡協議棧,從網卡到用戶空間的傳遞過程,存在多次的拷貝和中斷相應,消耗大量得cpu時間片,降低系統整體的數據分析能力。
(3)pf_ring數據包捕獲機制
在linux內核層添加了一種新的帶緩存得協議族,結合網卡得內存訪問模式DMA以及中斷模式NAPI技術,減少cpu得中斷次數。位於用戶層得應用程序通過mmap技術直接訪問linux內核層得網絡數據包,減少數據拷貝。它是一種獨立模塊的形式,能夠進行模塊的卸載和加載。
缺陷:
數據從網卡內存緩存區到內核sk_buf數據存儲,進行一次拷貝,並沒有實現真正意義得零拷貝。f另外它得預處理和數據包的捕獲仍然在內核層完成。
3 DPDK
(1)dpdk的四個技術點
A:hugetlbpage:通過大內存提高內存使用效率
B:UIO:驅動的很少一部分在內核中完成,在用戶空間完成大部分功能。
C:cpu affinity:將控制面線程以及各個數據面線程綁定在不同的cpu核
D:zero copy:
(2) 數據包捕獲基本流程
rte_eal_init對dpdk參數的處理,初始化EAL環境
inti_mbuf_pools:初始化mbuf和pool隊列
init_port:初始化端口配置
ret_burst_rx_burst:從端口接收數據包,如果是多端口可以for循環抓包
通過自定義的函數對每個數據包的初步處理並進行隊列的分發
內容出自論文基於dpdk的高效數據不獲技術分析與應用 計算機工程與科學 第38卷第11期