iperf網絡測試工具


 

1、簡介

Iperf3 是一個網絡性能測試工具。Iperf可以測試最大TCP和UDP帶寬性能,具有多種參數和UDP特性,可以根據需要調整,可以報告帶寬、延遲抖動和數據包丟失.對於每個測試,它都會報告帶寬,丟包和其他參數,可在Windows、Mac OS X、Linux、FreeBSD等各種平台使用,是一個簡單又實用的小工具。

軟件下載地址:https://iperf.fr/iperf-download.php

2、Iperf3的主要功能

TCP方面

1. 測試網絡帶寬。

2. 支持多線程,在客戶端與服務端支持多重連接。

3. 報告MSS/MTU值的大小。

4.支持TCP窗口值自定義並可通過套接字緩沖。

UDP方面

1. 可以設置指定帶寬的UDP數據流。

2. 可以測試網絡抖動值、丟包數。

3. 支持多播測試。

4. 支持多線程,在客戶端與服務端支持多重連接。

3、安裝lperf3

 在CentOS 7上使用下列命令即可安裝: # yum install iperf3 在ubuntu 上使用下列命令安裝: # apt-get install iperf3 windows端安裝: #下載解壓安裝包,進入dos切換到iperf3解壓目錄,執行iperf3即可運行.

4、Iperf應用實例

要使用iperf,首先要啟用一個服務端,這里假定服務端的IP地址為172.17.120.13,在此服務器上運行“iperf3 -s”即可開啟iperf的服務器模式。在默認情況下,iperf3將在服務端打開一個5201監聽端口,此時就可以將另一台服務器作為客戶端執行iperf功能測試了。

 [root@serverb ~]# iperf3 -s warning: this system does not seem to support IPv6 -trying IPv4 ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------

5、測試TCP吞吐量

1.為了確定網卡的最大吞吐量,可以在任意客戶端運行iperf命令,iperf將嘗試從客戶端盡可能快地向服務端發送數據請求,並且會輸出發送的數據量和網卡平均帶寬值。圖1是一個最簡單的帶寬測試命令。

 [root@servera ~]# iperf3 -c 172.17.120.13 Connecting to host 172.17.120.13, port 5201 [ 4] local 172.17.120.12 port 33842connected to 172.17.120.13 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 212MBytes 1.78 Gbits/sec 258 234KBytes [ 4] 1.00-2.00 sec 213MBytes 1.79 Gbits/sec 275 178KBytes [ 4] 2.00-3.00 sec 216MBytes 1.81 Gbits/sec 237 198KBytes [ 4] 3.00-4.00 sec 219MBytes 1.84 Gbits/sec 246 327KBytes [ 4] 4.00-5.00 sec 220MBytes 1.85 Gbits/sec 220 262KBytes [ 4] 5.00-6.00 sec 218MBytes 1.83 Gbits/sec 217 334KBytes [ 4] 6.00-7.00 sec 218MBytes 1.83 Gbits/sec 374 271KBytes [ 4] 7.00-8.00 sec 217MBytes 1.82 Gbits/sec 249 231KBytes [ 4] 8.00-9.00 sec 217MBytes 1.82 Gbits/sec 316 224KBytes [ 4] 9.00-10.00 sec 218MBytes 1.83 Gbits/sec 238 278KBytes ------------------------- [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 2.12 GBytes 1.82 Gbits/sec 2630 sender [ 4] 0.00-10.00 sec 2.12 GBytes 1.82 Gbits/sec receiver iperf Done. -------------------------------------------------------------------------- ##可以看出,iperf默認的運行時間是10秒鍾,每隔一秒鍾輸出一次傳輸狀態,同時還可以看到每秒鍾傳輸的數據量在218MB左右,剛好與“Bandwidth”列的值對應起來,網卡的帶寬速率維持在1.82 Gbits/sec左右,而測試的服務器是千兆網卡,這個測試值也基本合理。在輸出的最后,iperf還給出了總的數據發送、接收量,並給出了帶寬速率平均值,通過這些值,基本可以判斷網絡帶寬是否正常,網絡傳輸狀態是否穩定。

2.iperf提供很多參數,可以多角度、全方位地測試網絡帶寬利用率,例如,要改變iperf運行的時間和輸出頻率,可以通過“-t”和“-i”參數來實現。

 [root@servera ~]# iperf3 -c 172.17.120.13 -t 20 -i 5 Connecting to host 172.17.120.13, port 5201 [ 4] local 172.17.120.12 port 33846connected to 172.17.120.13 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-5.00 sec 1.05 GBytes 1.80 Gbits/sec 1192 250KBytes [ 4] 5.00-10.00 sec 1.06 GBytes 1.82 Gbits/sec 1219 182KBytes [ 4] 10.00-15.00 sec 1.06 GBytes 1.83 Gbits/sec 1012 191KBytes [ 4] 15.00-20.00 sec 1.06 GBytes 1.82 Gbits/sec 1237 254KBytes ------------------------- [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-20.00 sec 4.23 GBytes 1.82 Gbits/sec 4660 sender [ 4] 0.00-20.00 sec 4.23 GBytes 1.82 Gbits/sec receiver iperf Done. -------------------------------------------------------------------------- ##可以看出,輸出狀態的間隔變為每5秒鍾一次,總共執行測試時間為20秒,測試的帶寬速率仍然保持在1.82 Gbits/sec左右,唯一變化的是失敗重傳次數增加了。

3.為了模擬大量的數據傳輸,也可以指定要發送的數據量,這可以通過“-n”參數來實現。在指定“-n”參數后,“-t”參數失效,iperf在傳輸完畢指定大小的數據包后,自動結束。

 [root@servera ~]# iperf3 -c 172.17.120.13 -i 10 -n 5000000000 Connecting to host 172.17.120.13, port 5201 [ 4] local 172.17.120.12 port 33850connected to 172.17.120.13 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-10.00 sec 2.11 GBytes 1.81 Gbits/sec 2308 250KBytes [ 4] 10.00-20.00 sec 2.11 GBytes 1.81 Gbits/sec 2471 240KBytes [ 4] 20.00-22.08 sec 448MBytes 1.81 Gbits/sec 560 212KBytes ------------------------- [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-22.08 sec 4.66 GBytes 1.81 Gbits/sec 5339 sender [ 4] 0.00-22.08 sec 4.65 GBytes 1.81 Gbits/sec receiver iperf Done. -------------------------------------------------------------------------- ##iperf客戶端通過“-n”參數指定要傳輸的數據量。指定發送一個5GB左右的數據包,並且每隔10秒鍾輸出一次傳輸狀態,從這個輸出可以看出,當失敗重傳次數較多時,傳輸速率急速下降。

4.有時候,為了模擬更真實的TCP應用,iperf客戶端允許從一個特定的文件發送數據,這可以通過“-F”參數實現。

 [root@servera opt]# iperf3 -c 172.17.120.13 -F jdk-8u91-linux-x64.tar.gz -i 5 -t 20 Connecting to host 172.17.120.13, port 5201 [ 4] local 172.17.120.12 port 33874connected to 172.17.120.13 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-0.36 sec 73.6 MBytes 1.72 Gbits/sec 84 225KBytes ------------------------- [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-0.36 sec 73.6 MBytes 1.72 Gbits/sec 84 sender Sent 73.6 MByte / 173MByte (42%) of jdk-8u91-linux-x64.tar.gz [ 4] 0.00-0.36 sec 72.3 MBytes 1.69 Gbits/sec receiver iperf Done. -------------------------------------------------------------------------- ##iperf客戶端通過“-F”參數指定文件來發送數據。通過“-F”參數指定了一個jdk-8u91-linux-x64.tar.gz文件作為iperf要傳輸的數據,在使用此參數時,需要同時指定一個“-t”參數來設置要測試傳輸的時間,這個時間盡量設置長一些,因為在默認傳輸時間10秒內,這個文件可能還沒有傳完。

5.在使用iperf進行網絡帶寬測試時,如果沒有指定發送方式,iperf客戶端只會使用一個單一的線程,而iperf是支持多線程的,可以使用iperf提供的“-P”參數來設置多線程的數目,通過使用多線程,可以在一定程度上增加網絡的吞吐量。

 [root@servera opt]# iperf3 -c 172.17.120.13 -n 2000000000 -i 5 -f M Connecting to host 172.17.120.13, port 5201 [ 4] local 172.17.120.12 port 33878connected to 172.17.120.13 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-5.00 sec 1.05 GBytes 216MBytes/sec 2370 272KBytes [ 4] 5.00-8.84 sec 830MBytes 216MBytes/sec 886 207KBytes ------------------------- [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-8.84 sec 1.86 GBytes 216MBytes/sec 3256 sender [ 4] 0.00-8.84 sec 1.86 GBytes 215MBytes/sec receiver iperf Done. -------------------------------------------------------------------------- ##為了速率單位統一,這里使用“-f”參數將輸出結果都通過MBytes來顯示。傳輸1.86GBytes的數據消耗了8.84秒的時間,平均帶寬速率為216 MBytes/sec(注意單位)。

6.使用多線程后,iperf傳輸同樣大小數據量所消耗的時間和平均帶寬速率。

 [root@servera opt]# iperf3 -c 172.17.120.13 -n 2000000000 -i 5 -P 2 -f M Connecting to host 172.17.120.13, port 5201 [ 4] local 172.17.120.12 port 33882connected to 172.17.120.13 port 5201 [ 6] local 172.17.120.12 port 33884connected to 172.17.120.13 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-5.00 sec 531MBytes 106MBytes/sec 804 195KBytes [ 6] 0.00-5.00 sec 560MBytes 112MBytes/sec 846 265KBytes [SUM] 0.00-5.00 sec 1.07 GBytes 218MBytes/sec 1650 ------------------------- [ 4] 5.00-8.71 sec 407MBytes 110MBytes/sec 639 170KBytes [ 6] 5.00-8.71 sec 410MBytes 111MBytes/sec 634 202KBytes [SUM] 5.00-8.71 sec 817MBytes 220MBytes/sec 1273 ------------------------- [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-8.71 sec 938MBytes 108MBytes/sec 1443 sender [ 4] 0.00-8.71 sec 936MBytes 108MBytes/sec receiver [ 6] 0.00-8.71 sec 970MBytes 111MBytes/sec 1480 sender [ 6] 0.00-8.71 sec 968MBytes 111MBytes/sec receiver [SUM] 0.00-8.71 sec 1.86 GBytes 219MBytes/sec 2923 sender [SUM] 0.00-8.71 sec 1.86 GBytes 219MBytes/sec receiver iperf Done. -------------------------------------------------------------------------- ##這里通過“-P”參數開啟了2個多線程,從傳輸時間上看,傳輸1.86GBytes的數據,消耗時間為8.71秒,比之前單線程的傳輸時間少了近0.07秒鍾,在平均帶寬速率上,從之前單線程的216 MBytes/sec提高到219 MBytes/sec,從這個結果可以看出,多線程對網絡傳輸性能的提高不小。

6、測試UDP丟包和延遲

1.iperf也可以用於UDP數據包吞吐量、丟包率和延遲指標,但是由於UDP協議是一個非面向連接的輕量級傳輸協議,並且不提供可靠的數據傳輸服務,因此對UDP應用的關注點不是傳輸數據有多快,而是它的丟包率和延時指標。通過iperf的“-u”參數即可測試UDP應用的傳輸性能。

 [root@servera opt]# iperf3 -c 172.17.120.13 -u -b 100M -f M -i 3 Connecting to host 172.17.120.13, port 5201 [ 4] local 172.17.120.12 port 50680connected to 172.17.120.13 port 5201 [ ID] Interval Transfer Bandwidth Total Datagrams [ 4] 0.00-3.00 sec 34.6 MBytes 11.5 MBytes/sec 24875 [ 4] 3.00-6.00 sec 35.8 MBytes 11.9 MBytes/sec 25738 [ 4] 6.00-9.00 sec 35.7 MBytes 11.9 MBytes/sec 25633 [ 4] 9.00-10.00 sec 11.9 MBytes 11.9 MBytes/sec 8561 ------------------------- [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 118MBytes 11.8 MBytes/sec 0.053 ms 26431/84807 (31%) [ 4] Sent 84807datagrams iperf Done. -------------------------------------------------------------------------- ##iperf傳輸100MB的UDP數據包的輸出結果。重點關注虛線下的一段內容,在這段輸出中,“Jitter”列表示抖動時間,或者稱為傳輸延遲,“Lost/Total”列表示丟失的數據報和總的數據報數量,后面的31%是平均丟包的比率,“Datagrams”列顯示的是總共傳輸數據報的數量。

2.這個輸出結果過於簡單,要了解更詳細的UDP丟包和延時信息,可以在iperf服務端查看,因為在客戶端執行傳輸測試的同時,服務端也會同時顯示傳輸狀態。

 [root@serverb ~]# iperf3 -s -i 3 iperf3: OUT OF ORDER -incoming packet =84786and received packet =84793AND SP =5 iperf3: OUT OF ORDER -incoming packet =84788and received packet =84793AND SP =5 iperf3: OUT OF ORDER -incoming packet =84790and received packet =84793AND SP =5 iperf3: OUT OF ORDER -incoming packet =84792and received packet =84793AND SP =5 [ 5] 9.00-10.04 sec 11.9 MBytes 96.1 Mbits/sec 0.009 ms 3682/8550 (43%) ------------------------- [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 5] 0.00-10.04 sec 0.00 Bytes 0.00 bits/sec 0.009 ms 31126/84793 (37%) [SUM] 0.0-10.0 sec 31126datagrams received out-of-order ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- -------------------------------------------------------------------------- ##在這個輸出中,詳細記錄了在傳輸過程中,每個階段的傳輸延時和丟包率,在UDP應用中隨着傳輸數據的增大,丟包率和延時也隨之增加。對於延時和丟包可以通過改變應用程序來緩解或修復,例如視頻流應用,可以通過緩存數據的方式而可以容忍更大的延時。

7、JSON 格式輸出

如果需要做一些自動化方面測試和管理工作,需要讀取格式化的測試結果,那可以選擇-J參數,來輸出JSON格式測試結果。

 [root@servera opt]# iperf3 -c 172.17.120.13 -J -t 2 { "start":{ "connected":[{ "socket":4, "local_host":"172.17.120.12", "local_port":33892, "remote_host":"172.17.120.13", "remote_port":5201 }], "version":"iperf 3.1.7", "system_info":"Linux servera 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64", "timestamp":{ "time":"Mon, 18 Nov 2019 14:57:35 GMT", "timesecs":1574089055 }, "connecting_to":{ "host":"172.17.120.13", "port":5201 }, "cookie":"servera.1574089055.168685.57df3fda7b", "tcp_mss_default":1460, "test_start":{ "protocol":"TCP", "num_streams":1, "blksize":131072, "omit":0, "duration":2, "bytes":0, "blocks":0, "reverse":0 } }, "intervals":[{ "streams":[{ "socket":4, "start":0, "end":1.000089, "seconds":1.000089, "bytes":223387300, "bits_per_second":1.786939e+09, "retransmits":219, "snd_cwnd":309520, "rtt":1287, "omitted":false }], "sum":{ "start":0, "end":1.000089, "seconds":1.000089, "bytes":223387300, "bits_per_second":1.786939e+09, "retransmits":219, "omitted":false } }, { "streams":[{ "socket":4, "start":1.000089, "end":2.000118, "seconds":1.000029, "bytes":223362480, "bits_per_second":1.786848e+09, "retransmits":254, "snd_cwnd":194180, "rtt":757, "omitted":false }], "sum":{ "start":1.000089, "end":2.000118, "seconds":1.000029, "bytes":223362480, "bits_per_second":1.786848e+09, "retransmits":254, "omitted":false } }], "end":{ "streams":[{ "sender":{ "socket":4, "start":0, "end":2.000118, "seconds":2.000118, "bytes":446749780, "bits_per_second":1.786894e+09, "retransmits":473, "max_snd_cwnd":309520, "max_rtt":1287, "min_rtt":757, "mean_rtt":1022 }, "receiver":{ "socket":4, "start":0, "end":2.000118, "seconds":2.000118, "bytes":445289780, "bits_per_second":1.781054e+09 } }], "sum_sent":{ "start":0, "end":2.000118, "seconds":2.000118, "bytes":446749780, "bits_per_second":1.786894e+09, "retransmits":473 }, "sum_received":{ "start":0, "end":2.000118, "seconds":2.000118, "bytes":445289780, "bits_per_second":1.781054e+09 }, "cpu_utilization_percent":{ "host_total":7.686052, "host_user":0.939716, "host_system":7.196450, "remote_total":0.152400, "remote_user":0.016691, "remote_system":0.137075 }, "sender_tcp_congestion":"cubic", "receiver_tcp_congestion":"cubic" } }

8、總結

缺省iperf3使用上傳模式:Client負責發送數據,Server負責接收;如果需要測試下載速度,則在Client側使用-R參數即


免責聲明!

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



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