天天看點

使用iperf測試網絡性能

  1.    iperf能夠做什麼

  這裡需要特别提出的是,iperf不能夠用來測試時延,想一想這是為什麼。

  2.    網絡性能參數

  以上提到了網絡的主要性能參數包括帶寬,時延,抖動和丢包率,這些用一個名詞代替,就是qos(服務品質)。

  對于時延和抖動,見如下圖

使用iperf測試網絡性能

  圖中d1,d2分别表示包a和包b的時延。

  抖動=|d2-d1|

  對于時延,iperf無能為力。但是iperf能夠計算抖動,想想這又是為什麼。

  我們知道,在iperf中,我們測試時需要發送大量的包,是以計算出來的抖動值就是連續發送時延內插補點的平均值。

  3.    安裝iperf

  在unix系統下,安裝iperf最友善的方法是直接下載下傳rpm包,使用rpm指定安裝即可。

  當然也可以直接去sourceforge上下載下傳源代碼,使用如下指令安裝即可。

  #./configure

  #make

  #make install

  前提是該機器上已經有c++編譯器和make等程式。安裝完成之後,可以進行一個簡單的回環測試iperf是否安裝成功。

$ iperf -s

------------------------------------------------------------

server listening on tcp port 5001

tcp window size: 85.3 kbyte (default)

[ 4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 35589

[ id] interval      transfer    bandwidth

[ 4] 0.0-10.0 sec 26.3 gbytes 22.6 gbits/sec

$ iperf -c 127.0.0.1

client connecting to 127.0.0.1, tcp port 5001

tcp window size: 49.5 kbyte (default)

[ 3] local 127.0.0.1 port 35589 connected with 127.0.0.1 port 5001

[ 3] 0.0-10.0 sec 26.3 gbytes 22.6 gbits/sec

 iperf測試案例介紹

  4.    iperf主要參數

  iperf中的可選參數比較多,具體可以參見其使用者手冊。

  http://webfolder.wirelessleiden.nl/iperf/

  一般來說,我們在做性能測試的時候需要指定包長,不同的包長會得到不同的吞吐量,通過-l指定,而使用-b指定帶寬。

  5.    測試吞吐量,抖動和丢包率

  如何需要同時測試以上三個參數,那麼隻能通過udp獲得。使用-u參數進行udp測試(iperf預設為tcp)。

  在測試的最後server端會給出一個報告。

[ 3] local 192.168.1.1 port 2152 connected with 192.168.101.2 port 56768

[ id] interval      transfer    bandwidth       jitter  lost/total datagrams

[ 3] 0.0- 1.0 sec 1.40 mbytes 11.7 mbits/sec  0.069 ms   0/14671 (0%)

[ 3] 1.0- 2.0 sec 1.40 mbytes 11.8 mbits/sec  0.050 ms   0/14703 (0%)

[ 3] 2.0- 3.0 sec 1.40 mbytes 11.8 mbits/sec  0.052 ms   0/14708 (0%)

[ 3] 3.0- 4.0 sec 1.40 mbytes 11.8 mbits/sec  0.057 ms   0/14704 (0%)

[ 3] 4.0- 5.0 sec 1.40 mbytes 11.8 mbits/sec  0.072 ms   0/14706 (0%)

[ 3] 5.0- 6.0 sec 1.40 mbytes 11.8 mbits/sec  0.075 ms   0/14705 (0%)

[ 3] 6.0- 7.0 sec 1.40 mbytes 11.8 mbits/sec  0.060 ms   0/14707 (0%)

[ 3] 7.0- 8.0 sec 1.40 mbytes 11.8 mbits/sec  0.073 ms   0/14703 (0%)

[ 3] 8.0- 9.0 sec 1.40 mbytes 11.8 mbits/sec  0.073 ms   0/14706 (0%)

[ 3] 0.0-10.0 sec 14.0 mbytes 11.8 mbits/sec  0.064 ms   0/147020 (0%)

  要獲得帶寬資料,需要不斷在client端增加帶寬值,直到server端出現輕微的丢包為止,此時server端顯示的帶寬就是被測系統的吞吐量。

  6.    測試時延

  那麼有朋友會問,iperf不能用來測試時延,而時延又是比較重要的qos參數,有什麼辦法嗎?

  其實最簡單的辦法就是使用ping程式。我們經常用它來測試特定主機能否通過ip到達,

  程式會按時間和反應成功的次數,估計丢包率和分組來回時間(即網絡時延)。

  當然,如果我們能成功構造一個回環測試路徑,那麼測試時延就輕而易舉了,我們可以使用iperf發送資料,同時結合tcpdump抓包工具,經過wireshark分析.cap檔案就可以得出包來回時間,也就是往返時延。

  7.    使用tcp測試帶寬應注意的問題

  有時候,我們需要使用tcp來測試網絡帶寬。這裡有一個參數需要特别注意,那就是tcp視窗大小,可以使用-w參數指定。

  網絡通道的容量capacity = bandwidth * round-trip time

  而理論tcp視窗的大小就是網絡通道的容量。

  比如,網絡帶寬為40mbit/s,回環路徑消耗時間是2ms,那麼tcp的視窗大小不小于40mbit/s×2ms = 80kbit = 10kbytes

  此時我們可以查詢iperf預設的tcp視窗大小來決定是否需要設定此參數,在此例中,視窗大小應設計大于10kbytes,當然,這僅僅是理論值,在實際測試中可能需要作出調整。

  參數說明

  -s 以server模式啟動,eg:iperf -s

  -c 以client模式啟動,host是server端位址,eg:iperf -c 222.35.11.23

  通用參數

  -f [k|m|k|m] 分别表示以kbits, mbits, kbytes, mbytes顯示報告,預設以mbits為機關,eg:iperf -c 222.35.11.23 -f k

  -i sec 以秒為機關顯示報告間隔,eg:iperf -c 222.35.11.23 -i 2

  iperf是client端向server端發送資料

  server端顯示的是接收速率,最好加i參數,進行速率跟蹤

  client 顯示的是發送速率

  server 顯示接收速率

  -l 緩沖區大小,預設是8kb,eg:iperf -c 222.35.11.23 -l 16

  可以使用不同的包長,進行測試

  -m 顯示tcp最大mtu值

  -o 将報告和錯誤資訊輸出到檔案eg:iperf -c 222.35.11.23 -o c:iperflog.txt

  -p 指定伺服器端使用的端口或用戶端所連接配接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999

  -u 使用udp協定

  測試htb的時候最好用udp,udp通信開銷小,測試的帶寬更準确

  -w 指定tcp視窗大小,預設是8kb

  如果視窗太小,有可能丢包

  -b 綁定一個主機位址或接口(當主機有多個位址或接口時使用該參數)

  -c 相容舊版本(當server端和client端版本不一樣時使用)

  -m 設定tcp資料包的最大mtu值

  -n 設定tcp不延時

  -v 傳輸ipv6資料包

  server專用參數

  -d 以服務方式運作ipserf,eg:iperf -s -d

  -r 停止iperf服務,針對-d,eg:iperf -s -r

  client端專用參數

  -d 同時進行雙向傳輸測試

  -n 指定傳輸的位元組數,eg:iperf -c 222.35.11.23 -n 100000

  -r 單獨進行雙向傳輸測試

  -b 指定發送帶寬,預設是1mbit/s

  在測試qos的時候,這是最有用的參數。

  -t 測試時間,預設10秒,eg:iperf -c 222.35.11.23 -t 5

  預設是10s

  -f 指定需要傳輸的檔案

  -t 指定ttl值

 測試執行個體:

  使用:

  此軟體需要安裝到兩端需要互測的機器上,然後一段作為服務端監聽,一端作為用戶端連接配接。具體指令可以iperf -h 檢視下。

  服務端:

  iperf -s -u

  -s 标記此端為服務端

  -u标記自己為udp監聽

  -p 指定自己監聽端口

  用戶端:

  iperf -c 1.1.1.1 -i 1 -u -t 60 -f /root/a.zip -p 5

  -c标記自己為用戶端

  -i 設定輸出值間隔

  -u使用傳輸協定為udp

  -t 設定測試時間為60秒

  -f 指定傳輸檔案(該項可有可無)

  -p 指定程序數,如果設定為5,那麼也就相當與對端建立五個連接配接

  注意事項:

  1.發包測試需要分為udp測試與tcp測試,其中服務端需要用-u指令去區分監聽協定。

  2.tcp協定測試不能計算出時延與丢包率,而且還不能指定發送帶寬。

  案例:

[root@localhost ~]# iperf -c 192.168.1.100 -u -i 1 -t 10 -b 2m #指定2m帶寬向對端發送資料

client connecting to 192.168.1.100, udp port 5001

sending 1470 byte datagrams

udp buffer size: 108 kbyte (default)

[ 3] local 192.200.40.112 port 32784 connected with 218.60.1.20 port 5001 #與對端連接配接上的資訊

[ id] interval transfer bandwidth #輸出行的解釋

[ 3] 0.0- 1.0 sec 12.0 gbytes 103 gbits/sec

[ 3] 1.0- 2.0 sec 244 kbytes 2.00 mbits/sec

[ 3] 2.0- 3.0 sec 244 kbytes 2.00 mbits/sec

[ 3] 3.0- 4.0 sec 244 kbytes 2.00 mbits/sec

[ 3] 4.0- 5.0 sec 244 kbytes 2.00 mbits/sec

[ 3] 5.0- 6.0 sec 245 kbytes 2.01 mbits/sec

[ 3] 6.0- 7.0 sec 244 kbytes 2.00 mbits/sec

[ 3] 7.0- 8.0 sec 244 kbytes 2.00 mbits/sec

[ 3] 8.0- 9.0 sec 244 kbytes 2.00 mbits/sec

[ 3] 9.0-10.0 sec 244 kbytes 2.00 mbits/sec

[ 3] 0.0-10.0 sec 12.0 gbytes 10.3 gbits/sec

[ 3] sent 1702 datagrams

[ 3] server report: #輸出報告

[ 3] 0.0-10.6 sec 263 kbytes 204 kbits/sec 36.313 ms 1518/ 1701 (89%) #間距 ,傳輸總位元組,速率,時延,丢包率。

[ 3] 0.0-10.6 sec 1 datagrams received out-of-order  #亂序

[root@localhost ~]# iperf -s -u #設定此端為服務端

------------------------------------------------------------ #本段設定資訊

server listening on udp port 5001

receiving 1470 byte datagrams

[ 3] local 218.60.1.20 port 5001 connected with 218.241.145.36 port 32784 #如果對端連接配接上了本端才會出現該資訊

[ id] interval transfer bandwidth jitter lost/total datagrams

[ 3] 0.0-10.6 sec 263 kbytes 204 kbits/sec 36.314 ms 1518/ 1701 (89%)

[ 3] 0.0-10.6 sec 1 datagrams received out-of-order

  iperf同樣也可以用于測量udp資料包吞吐量、丢包和延遲名額。與tcp測試不同的是,udp測試不采取盡可能快地發送流量的方式。與之相對的是,iperf嘗試發送1 mbps的流量,這個流量是打包在1470位元組的udp資料包中(成為以太網的一幀)。我們可以通過指定一個目标帶寬參數來增加資料量,機關可以是kbps 或mbps(-b #k 或 --b #m)。舉例如下:

使用iperf測試網絡性能

  測量udp丢包和延遲

  然而,上面的例子隻說明了iperf用戶端能夠以多快的速度傳輸資料。為了得到更多關于udp發送的資料,我們必須檢視伺服器上的結果:

使用iperf測試網絡性能

  這樣,我們就可以看到吞吐量(間隔1秒測量的),以及丢包數(丢失的資料屯接收到的資料對比)和延遲(如jitter——在連續傳輸中的平滑平均值差)。延遲和丢失可以通過應用的改變而被相容。比如,視訊流媒體通過緩沖輸入而能夠容忍更多的延遲,而語音通訊則随着延遲增長性能下降明顯。

  udp測試可以通過改變封包緩沖長度進行優化,長度機關為kbytes 或 mbytes(-l #k or #m)。與以太網幀的1500比特的mtu(最大轉換機關)不同的是,802.11資料幀可以達到2304比特(在加密之前)。

  但是,如果你正在測試的路徑中包括ethernet和802.11,那麼要控制你的測試資料包長度,使它在一個ethernet幀以内,以避免分片。

  另一個有趣的iperf udp測試選項是服務類型(type of service, tos),它的大小範圍從0x10 (最小延遲) 到0x2 (最少費用)。在使用802.11e來控制服務品質的wlan中,tos是映射在wi-fi多媒體(wmm)存取範疇的。

對比兩種方式

  在802.11a/b/g網絡中,無線電的傳輸性能變化在在兩個方向上都很相似。比如,當距離導緻資料傳輸率下降或幹擾造成重要資料包丢失時,發送和接收的應用吞吐量都受到影響。

  在802.11n網絡中,mimo天線和多元空間流使問題又有所不同。從筆記本發送到ap上的資料幀可能(有意地)使用一個完全與從ap發送到筆記本上幀時不同的空間路徑。這樣的結果是,現在對兩個方向的測試都很重要的。幸運的是,iperf本身就已經擁有這個功能,這是由兩個選項所控制的:

  --d選項是用于告訴iperf伺服器馬上連接配接回iperf用戶端的由--l 所指定端口,以支援同時測試兩個方向的傳輸。

  --r選項雖然有些類似,但是它是告訴iperf伺服器等到用戶端測試完成後再在相反的方向中重複之前的測試。

  最後,如果你需要支援多點傳送應用,那麼可以使用-b選項指定多點傳送組ip位址來啟動多個iperf伺服器。然後再打開你的iperf用戶端,連接配接之前啟動的多點傳送組iperf伺服器。

  使用測試工具iperf監控無線網絡性能:圖形化測試結果

  如本文介紹的,iperf程式可以在指令行下運作,它或者也在一個名為jperf的java實作前端工具上運作。jperf不僅能簡化複雜指令行參數的構造,而且它還儲存測試結果——同時實時圖形化顯示結果。

使用iperf測試網絡性能

  圖1 使用jperf運作iperf

  事實上,iperf測試工具被嵌入到一些其它的網絡流量分析工具中——包括底層lan分析工具,如airmagnet。比如,在下面的螢幕截圖中顯示了一個wi-fi筆記本上運作的airmagnet作為iperf用戶端與安裝在有線網絡上的正常iperf伺服器進行互動的情況。

使用iperf測試網絡性能

  圖2 使用airmagnet運作iperf

  總結

  正如我們所看到的,iperf簡化了對基于tcp資料流應用和udp資料包應用的端對端性能測定。然而,iperf仍然無法模拟所有類型的應用——比如,對于互動式上網的模拟就不是很好。同時,用于iperf wi-fi測試的wlan擴充卡也會影響你的測試——為了獲得更好的測試結果,我們可以配置一個類似于“實際”使用者的有代表性的擴充卡。

  盡管如此,iperf仍然是一個非常友善的工具,它可以幫助你生成和檢測wlan應用流量。同時,因為iperf可以友善以開源軟體方式擷取,是以使用它來在其它位置重複建立測試環境是一個很好的方法——如分公司、供應商技術支援等等。想要了解更多關于iperf的資訊,可以閱讀nlanr上的更老的檔案或者浏覽sourceforge上新的項目頁面。

最新内容請見作者的github頁:http://qaseven.github.io/

繼續閱讀