DPDK 資料報捕獲基本流程(十六)

2021-10-06 15:31:53 字數 1226 閱讀 7012

核心元件架構

啟動抓包程式之前,首先要利用dpdk sdk中dpdk埠檢視和繫結工具pci_unbind進行抓包埠繫結。然後,申請huge頁並掛載huge分割槽。應用dpdk進行資料報捕獲時,主要利用rte_eal_init()init_port()init_mbuf_pools()進行引數、埠及記憶體緩衝區初始化,利用do_packet_forwarding_bypass()函式中的乙個for迴圈不斷查詢各埠,在埠上接收資料報。然後採用自定義的包處理函式,對每個到達的資料報進行相應的處理。此外,可以設定訊號對各物理埠加以控制以及用於輸出資料報捕獲的狀態。

資料報捕獲的整體流程圖如圖所示。

資料報捕獲基本流程:

1、初始化eal環境,函式rte_eal_init(dpdk_argc,dpdk_ar**)是對dpdk引數的處理,初始化eal,初始化失敗則退出程式。

2、初始化記憶體池等,利用函式init_mbuf_pools()初始化dpdk的mbuf與pool佇列。

3、初始化介面,函式init_port(ports->id[i])用來初始化埠配置、檢視埠狀態。主要有三部分工作:

4、函式rte_eth_rx_burst(port_num,0,buf,packet_read_size)用來從埠接收資料報。若是多埠收包,可以用乙個for迴圈對抓包埠的狀態監控,來迴圈接收資料報。

5、自定義函式process_packets()完成對每乙個資料報的初步處理,用來分析資料報所屬協議型別和埠,並進行佇列分發。

6、啟動所有核上的執行緒rte_eal_mp_remote_launch()

至此,包處理函式已完成對資料報的物理層、鏈路層、網路層資訊的初步解析,即能夠區分出資料報的mac位址、目的或源ip、埠號、tcp/udp型別等資訊。為了提高資料報應用層資料解析速率,在每個資料報佇列分發前需要採用五元組做雜湊進行佇列區分,這樣做達到了資料報並行解析的目的,增加了單位時間內資料報處理個數,提公升了系統整體效率。

ICMP協議資料報捕獲

今天使用wireshark除錯乙個ping功能,使用icmp過濾串,發現ping本地子網乙個不存在的ip位址,wireshark沒有捕獲到任何的icmp資料報。而當ping另外乙個子網不存在的ip位址,wireshark捕獲到了icmp資料。分析如下 一.ping本地子網的ip位址 1.獲取目標ip...

使用Jcap捕獲資料報

使用jpcap可以發包,使用jnetpcap可以接收和過濾包。現在專案中遇到的問題總結如下。如果是在window下則必須在path路徑下存在jnetpcap.dll和jpcap.dll檔案,如果是在linux環境下,可以將jnetpcap.so和jnetpcap.so存放到 usr lib目錄下即可...

網路層資料報處理流程

網路位址為a,實體地址為10的計算機需要向網路位址為p,實體地址為95的計算機傳送乙個分組。這裡我們用字母表示邏輯位址,用數字表示實體地址。傳送方在網路層將資料封裝在乙個分組中,並加入兩個邏輯位址 a和p 注意在大多數協議中,邏輯源位址是出現在邏輯目的位址之前的 與實體地址的順序正好相反 網路層必須...