介紹
Iperf是一款基於TCP/IP和UDP/IP的網絡性能測試工具,它可以用來測量網絡帶寬和網絡質量,還可以提供網絡延遲抖動、數據包丟失率、最大傳輸單元等統計信息。網絡管理員可以根據這些信息了解並判斷網絡性能問題,從而定位網絡瓶頸,解決網絡故障。
iperf的主要功能:
1)TCP方面
-
測試網絡帶寬。
-
支持多線程,在客戶端與服務端支持多重連接。
-
報告MSS/MTU值的大小。
-
支持TCP窗口值自定義並可通過套接字緩沖。
2)UDP方面
-
可以設置指定帶寬的UDP數據流
-
可以測試網絡抖動值、丟包數
-
支持多播測試
-
支持多線程,在客戶端與服務端支持多重連接。
安裝方法:arm linux 移植 iperf3
用法
iperf分為客戶端和服務器2個部分,因此參數也做了區分;iperf的命令行選項共分為三類,分別是:
注意,iperf 有2.x和3.x的版本不同,調試時需要配套使用,而不能2.x與3.x混用。
- 客戶端與服務器端公用選項
- 服務器端專用選項
- 客戶端專用選項
服務器端專用選項
| 命令行參數 | 含義描述 |
|---|---|
| -s | 將iperf以server模式啟動,例如:iperf3 –s,iperf3默認啟動的監聽端口為5201,可以通過“-p”選項修改默認監聽端口 |
| -D | 將iperf作為后台守護進程運行,例如:iperf3 -s -D |
客戶端專用選項
| 命令行參數 | 含義描述 |
|---|---|
| -c | 將iperf以client模式啟動 例如:iperf3 -c 192.168.12.168,其中192.168.12.168是server端的IP地址 |
| -u | 指定使用UDP協議 |
| -b [K|M|G] | 指定UDP模式使用的帶寬,單位bits/sec。此選項與“-u”選項相關。默認值是1 Mbit/sec |
| -t | 指定傳輸數據包的總時間。iperf將在指定的時間內,重復發送指定長度的數據包。默認是10秒鍾 |
| -n [K|M|G] | 指定傳輸數據包的字節數,例如:iperf3 -c 192.168.12.168 –n 100M |
| -l | 指定讀寫緩沖區的長度。TCP方式默認大小為8KB,UDP方式默認大小為1470字節 |
| -P | 指定客戶端與服務端之間使用的線程數。默認是1個線程。需要客戶端與服務器端同時使用此參數 |
| -R | 切換數據發送接收模式,例如默認客戶端發送,服務器端接收,設置此參數后,數據流向變為客戶端接收,服務器端發送 |
| -w | 指定套接字緩沖區大小,在TCP方式下,此設置為TCP窗口的大小。在UDP方式下,此設置為接受UDP數據包的緩沖區大小,用來限制可以接收數據包的最大值 |
| -B | 用來綁定一個主機地址或接口,這個參數僅用於具有多個網絡接口的主機。在UDP模式下,此參數用於綁定和加入一個多播組 |
| -M | 設置TCP最大信息段的值 |
| -N | 設置TCP無延時 |
公用選項
| 命令行參數 | 含義描述 |
|---|---|
| -f [k|m|g|K|M|G] | 指定帶寬輸出單位,“[k|m|g|K|M|G]”分別表示以Kbits, Mbits, Gbits, KBytes, MBytes,GBytes顯示輸出結果,默認以Mbits為單位,例如:iperf3 -c 192.168.12.168 -f M |
| -p | 指定服務器端使用的端口或客戶端所連接的端口,例如: iperf3 -s -p 9527; iperf3 -c 192.168.12.168 -p 9527 |
| -i | 指定每次報告之間的時間間隔,單位為秒。如果設置為非零值,就會按照此時間間隔輸出測試報告。默認值為1。 例如:iperf3 -c 192.168.12.168 -i 2 |
| -F | 指定文件作為數據流進行帶寬測試。 例如:iperf3 -c 192.168.12.168 -F web-ixdba.tar.gz |
TCP測試實例
服務端
在PC機上,啟動 iperf 服務:
iperf3 -s -i 1
客戶端
板子上,使用 iperf 客戶端測試:
iperf3 -c 192.168.168.106 -i 1 -w 300k -t 10
日志
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.168.16, port 50850
[ 5] local 192.168.168.106 port 5201 connected to 192.168.168.16 port 50852
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.01 sec 67.8 MBytes 564 Mbits/sec
[ 5] 1.01-2.00 sec 74.2 MBytes 628 Mbits/sec
[ 5] 2.00-3.00 sec 70.1 MBytes 588 Mbits/sec
[ 5] 3.00-4.00 sec 77.8 MBytes 653 Mbits/sec
[ 5] 4.00-5.00 sec 75.0 MBytes 629 Mbits/sec
[ 5] 5.00-6.00 sec 79.1 MBytes 663 Mbits/sec
[ 5] 6.00-7.00 sec 78.8 MBytes 661 Mbits/sec
[ 5] 7.00-8.00 sec 77.5 MBytes 650 Mbits/sec
[ 5] 8.00-9.00 sec 77.8 MBytes 652 Mbits/sec
[ 5] 9.00-10.00 sec 78.3 MBytes 657 Mbits/sec
[ 5] 10.00-10.06 sec 4.17 MBytes 628 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.06 sec 761 MBytes 634 Mbits/sec receiver
可以看出,iperf默認的運行時間是10秒鍾,每隔一秒鍾輸出一次傳輸狀態,同時還可以看到每秒鍾傳輸的數據量在67.8MB左右,剛好與“Bandwidth”列的值對應起來,網卡的帶寬速率維持在634 Mbits/sec左右,而測試的服務器是千兆網卡,這個測試值也基本合理。
在輸出的最后,iperf還給出了總的數據發送、接收量,並給出了帶寬速率平均值,通過這些值,基本可以判斷網絡帶寬是否正常,網絡傳輸狀態是否穩定。
UDP測試實例
由於UDP協議是一個非面向連接的輕量級傳輸協議,並且不提供可靠的數據傳輸服務.
因此對UDP應用的關注點不是傳輸數據有多快,而是它的丟包率和延時指標。
通過iperf的“-u”參數即可測試UDP應用的傳輸性能。
服務端命令相同iperf3 -s -i 1,客戶端命令如下:
iperf3 -c 192.168.168.106 -i 1 -w 300k -t 10 -u # UDP 測試
日志如下:
Accepted connection from 192.168.168.16, port 50862
[ 6] local 192.168.168.106 port 5201 connected to 192.168.168.16 port 49242
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 6] 0.00-1.00 sec 123 KBytes 1.01 Mbits/sec 32475.353 ms 0/87 (0%)
[ 6] 1.00-2.01 sec 129 KBytes 1.05 Mbits/sec 91.498 ms 0/91 (0%)
[ 6] 2.01-3.00 sec 127 KBytes 1.05 Mbits/sec 0.979 ms 0/90 (0%)
[ 6] 3.00-4.01 sec 129 KBytes 1.05 Mbits/sec 0.127 ms 0/91 (0%)
[ 6] 4.01-5.00 sec 126 KBytes 1.04 Mbits/sec 0.170 ms 0/89 (0%)
[ 6] 5.00-6.00 sec 129 KBytes 1.05 Mbits/sec 0.245 ms 0/91 (0%)
[ 6] 6.00-7.00 sec 129 KBytes 1.05 Mbits/sec 0.238 ms 0/91 (0%)
[ 6] 7.00-8.00 sec 127 KBytes 1.04 Mbits/sec 0.302 ms 0/90 (0%)
[ 6] 8.00-9.00 sec 129 KBytes 1.05 Mbits/sec 0.236 ms 0/91 (0%)
[ 6] 9.00-10.00 sec 127 KBytes 1.04 Mbits/sec 0.117 ms 0/90 (0%)
[ 6] 10.00-10.05 sec 7.07 KBytes 1.13 Mbits/sec 0.145 ms 0/5 (0%)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 6] 0.00-10.05 sec 1.25 MBytes 1.04 Mbits/sec 0.145 ms 0/906 (0%) receiver
iperf3: the client has unexpectedly closed the connection
重點關注虛線下的一段內容,在這段輸出中,“Jitter”列表示抖動時間,或者稱為傳輸延遲,“Lost/Total”列表示丟失的數據報和總的數據報數量,后面的0%是平均丟包的比率,“Datagrams”列顯示的是總共傳輸數據報的數量。
在UDP應用中隨着傳輸數據的增大,丟包率和延時也隨之增加。對於延時和丟包可以通過改變應用程序來緩解或修復,例如視頻流應用,可以通過緩存數據的方式而可以容忍更大的延時。
