使用iperf測試網絡性能

iperf 是一個 TCP/IP 和 UDP/IP 的性能測量工具,能夠提供網絡吞吐率信息,以及震動、丟包率、最大段和最大傳輸單元大小等統計信息;從而能夠幫助我們測試網絡性能,定位網絡瓶頸。iperf是開源的,源代碼可以從http://sourceforge.net/projects/iperf/下載。

1.    iperf能夠做什麼

提起iperf,想必大家都知道它是用了測試網絡性能的。具體說來,Iperf是美國伊利諾斯大學(University of Illinois)開發的一種開源的網絡性能測試工具。可以用來測試網絡節點間(也包括迴環)TCPUDP連接的性能,包括帶寬、抖動以及丟包率,其中抖動和丟包率適應於UDP測試,而帶寬測試適應於TCPUDP

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

2.    網絡性能參數

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

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


圖中D1D2分別表示包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

[ ID] Interval      Transfer    Bandwidth

[ 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
UDP buffer size: 108 KByte (default)
------------------------------------------------------------
[ 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發送的數據,我們必須查看服務器上的結果:

 

這樣,我們就可以看到吞吐量(間隔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上新的項目頁面。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章