1. iperf能夠做什麼
這裡需要特别提出的是,iperf不能夠用來測試時延,想一想這是為什麼。
2. 網絡性能參數
以上提到了網絡的主要性能參數包括帶寬,時延,抖動和丢包率,這些用一個名詞代替,就是qos(服務品質)。
對于時延和抖動,見如下圖
圖中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)。舉例如下:
測量udp丢包和延遲
然而,上面的例子隻說明了iperf用戶端能夠以多快的速度傳輸資料。為了得到更多關于udp發送的資料,我們必須檢視伺服器上的結果:
這樣,我們就可以看到吞吐量(間隔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不僅能簡化複雜指令行參數的構造,而且它還儲存測試結果——同時實時圖形化顯示結果。
圖1 使用jperf運作iperf
事實上,iperf測試工具被嵌入到一些其它的網絡流量分析工具中——包括底層lan分析工具,如airmagnet。比如,在下面的螢幕截圖中顯示了一個wi-fi筆記本上運作的airmagnet作為iperf用戶端與安裝在有線網絡上的正常iperf伺服器進行互動的情況。
圖2 使用airmagnet運作iperf
總結
正如我們所看到的,iperf簡化了對基于tcp資料流應用和udp資料包應用的端對端性能測定。然而,iperf仍然無法模拟所有類型的應用——比如,對于互動式上網的模拟就不是很好。同時,用于iperf wi-fi測試的wlan擴充卡也會影響你的測試——為了獲得更好的測試結果,我們可以配置一個類似于“實際”使用者的有代表性的擴充卡。
盡管如此,iperf仍然是一個非常友善的工具,它可以幫助你生成和檢測wlan應用流量。同時,因為iperf可以友善以開源軟體方式擷取,是以使用它來在其它位置重複建立測試環境是一個很好的方法——如分公司、供應商技術支援等等。想要了解更多關于iperf的資訊,可以閱讀nlanr上的更老的檔案或者浏覽sourceforge上新的項目頁面。
最新内容請見作者的github頁:http://qaseven.github.io/