1. 程式人生 > >iperf測試工具使用方法

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中的可選引數比較多,具體可以參見其使用者手冊。

一般來說,我們在做效能測試的時候需要指定包長,不同的包長會得到不同的吞吐量,通過-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,當然,這僅僅是理論值,在實際測試中可能需要作出調整。


引數說明
模式啟動,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協議測試不能計算出時延與丟包率,而且還不能指定傳送頻寬。

案例:
[[email protected] ~]# 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  #亂序

服務端:
[[email protected] ~]# 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)。舉例如下:

 測量UDP丟包和延遲

然而,上面的例子只說明瞭iPerf客戶端能夠以多快的速度傳輸資料。為了得到更多關於UDP傳送的資料,我們必須檢視伺服器上的結果:

 測量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上新的專案頁面。

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中的可選引數比較多,具體可以參見其使用者手冊。

一般來說,我們在做效能測試的時候需要指定包長,不同的包長會得到不同的吞吐量,通過-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,當然,這僅僅是理論值,在實際測試中可能需要作出調整。


引數說明
模式啟動,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協議測試不能計算出時延與丟包率,而且還不能指定傳送頻寬。

案例:
[[email protected] ~]# 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  #亂序

服務端:
[[email protected] ~]# 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)。舉例如下:

 測量UDP丟包和延遲

然而,上面的例子只說明瞭iPerf客戶端能夠以多快的速度傳輸資料。為了得到更多關於UDP傳送的資料,我們必須檢視伺服器上的結果:

 測量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上新的專案頁面。