使用iperf3調試網絡


介紹

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應用中隨着傳輸數據的增大,丟包率和延時也隨之增加。對於延時和丟包可以通過改變應用程序來緩解或修復,例如視頻流應用,可以通過緩存數據的方式而可以容忍更大的延時。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM