1. 程式人生 > >Tcpreplay與DPDK的收發包測試實驗(草稿,未完整)

Tcpreplay與DPDK的收發包測試實驗(草稿,未完整)

主實驗文件

實驗環境:

  1. 伺服器裝置有網絡卡數張,其中網絡卡A連網,網絡卡B被DPDK繫結,網絡卡C與網絡卡B直連。
  2. 伺服器已經搭建好DPDK環境,已經裝好tcpreplay、tcpdump等相關工具
  3. 本人使用另一臺電腦訪問伺服器進行操作
    注:一般裝好tcpreplay之後,其他的套件也在tcpreplay安裝時安裝了。

網路拓撲大致如下:

我們的目的是使用tcpreplay工具從C網絡卡向B網絡卡發包,而利用DPDK的testpmd工具監測B網絡卡的資料流量,同時用dpdk-pdump工具捕獲B網絡卡收到的資料包。

pcap資料包準備

我們需要準備pcap網路包,我們捕獲自己訪問某個網站的資料包,其中我們聯網的A網絡卡是ens1f0,ip地址是172.17.16.50,
(這個根據裝置情況而定,可以通過ifconfig命令檢視,詳見文末的補充)訪問網站用的是http協議,因此只監聽該主機地址
和埠的資料包,下面的命令語法具體參看tcpdump的語法。

上面的命令只是抓包,但並沒有儲存下來,我們將上面的命令修改成下面的方式執行:

執行上面的命令後,會顯示正在監聽狀態,此時再開啟一個新的終端,訪問一個網站

等待幾秒後,利用ctrl+c或者ctrl+z等方式終止監聽,此時能看到捕獲的資料包數量,到儲存的路徑能看到捕獲下來的包
由於資料包的源mac和目的mac地址都不符合我們即將要實驗的環境,因此先使用tcprewrite工具修改捕獲到的pcap檔案

本來目的mac地址是應該填入B網絡卡的mac地址,但由於我無法獲得B網絡卡的mac地址,此處就用廣播地址替代。至於源mac地址
自然就是C網絡卡的mac地址。同時,由於我們是做

單向發包實驗,不考慮雙向發包,所以不需要對一開始捕捉下來的資料包檔案
進行客戶端與伺服器端的區分,也就是不用匯出cache檔案。

Tcpreplay向DPDK繫結的網絡卡發包

前面已經做好準備工作,接下來我們開始進行發包測試。
(1)、在這裡我們檢驗一下Tcpreplay的發包,DPDK是否能檢測到:
使用命令開啟testpmd,此時先使用互動模式開啟,命令語句沒什麼特別要求

接著使用show port stats 0 或者使用show port stats all檢視埠狀態,此時應該全部是0

在另一終端執行tcpreplay進行發包:

注:--loop引數是指明發包次數,引數為1,則最終發出去的包packets = 1 * 13(我們的pcap中的包數量)


呼叫這句命令應該會顯示:

而與此同時在testpmd檢視埠資料包狀態:

可以看到收發是成功的,那麼如何再用pdump捕捉下來呢,在測試中,我發現當使用互動模式開啟時,pdump捕獲不到包,
因此我們需要在啟動testpmd時去掉-i命令,然後再執行pdump,接著再進行tcpreplay發包即可。

細節補充:

網絡卡資訊獲取
被DPDK繫結的網絡卡是獲取不到資訊的,除非你一開始就知道是用哪張網絡卡繫結,當然也有可能我沒找到方案。
以下提供幾種方式獲取網絡卡資訊:
1.使用:lshw -c network | grep -E "logical name"
可以獲得當前裝置具備的網絡卡,要注意的是我們只要乙太網卡的資訊,也就是下圖的ens開頭

2.使用:ifconfig
可以獲得這些網絡卡的詳細資訊

3.使用:ethtool 網絡卡名
可以獲得當前網絡卡的連線狀態(是否插了線)(如果你事先知道網路拓撲就不用了)