iperf3 網路效能測試工具
iperf3 是一款強大的開源網路效能測試工具,廣泛用於測量 IP 網路上的最大可達到頻寬。
最近在建置跨地區的 K8s 叢集時,剛好有機會需要驗證公司內部的專線品質,所以就使用 iperf3 進行測試、評估網路狀態與效能。
本篇文章將教學 iperf3 的基本使用方法、常見參數以及如何在不同環境中進行測試。
iperf3 的核心功能
- 支援 TCP 和 UDP 測試:
- TCP: 測量傳輸控制協定 (Transmission Control Protocol) 的頻寬。TCP 提供可靠的、面向連接的傳輸服務,適用於大多數網路應用。
- UDP: 測量使用者資料包協定 (User Datagram Protocol) 的頻寬。UDP 提供不可靠的、無連接的傳輸服務,適用於對即時性要求較高或可以容忍少量封包遺失的應用(如串流媒體、線上遊戲)。測試 UDP 時,iperf3 還可以報告抖動 (jitter) 和封包遺失率。
- 客戶端-伺服器架構: iperf3 採用客戶端-伺服器模型。一台機器執行 iperf3 伺服器,另一台機器執行 iperf3 客戶端,客戶端向伺服器發起連接並傳輸資料。
- 可調整的測試參數: 使用者可以自訂多種測試參數,例如測試持續時間、傳輸資料量、平行串流數量、TCP 視窗大小、UDP 頻寬等。
- 雙向測試: 可以測試上傳和下載頻寬。
- 詳細的報告: 提供即時的測試結果,包括傳輸速率、傳輸資料量、封包遺失 (UDP)、抖動 (UDP) 等。
- JSON 格式輸出: 支援將測試結果輸出為 JSON 格式,方便程式解析和整合。
- 跨平台支援: 可在多種作業系統上執行,包括 Linux、Windows、macOS、FreeBSD 等。
- 零複製 (Zero-copy) 模式: 在支援的系統上,可以使用
-Z
選項啟用零複製模式,減少 CPU 使用率,更準確地測量網路本身的效能。
iperf3 如何運作
iperf3 的運作基於客戶端和伺服器之間的資料傳輸。
- 啟動伺服器: 在一台主機上啟動 iperf3 伺服器模式 (
iperf3 -s
)。伺服器會監聽指定的網路連接埠(預設為 5201),等待客戶端的連接。 - 啟動客戶端: 在另一台主機上啟動 iperf3 客戶端模式 (
iperf3 -c <server_ip>
),並指定伺服器的 IP 位址。 - 建立連接: 客戶端會嘗試連接到指定的伺服器和連接埠。
- 資料傳輸:
- TCP 測試 (預設): 客戶端向伺服器傳送資料(或在反向模式下,伺服器向客戶端傳送資料)。iperf3 會測量在指定時間內或傳輸指定資料量時的平均傳輸速率。
- UDP 測試 (
-u
): 客戶端以指定的速率向伺服器傳送 UDP 封包。伺服器會接收這些封包,並統計接收到的封包數量、遺失的封包數量以及封包到達時間的抖動。
- 結果報告: 測試完成後,客戶端和伺服器都會顯示測試結果,包括傳輸速率、傳輸總量、以及 UDP 測試中的封包遺失和抖動。
安裝 iperf3
iperf3 的安裝方式因作業系統而異:
Linux (Debian/Ubuntu):
1
2sudo apt update
sudo apt install iperf3Linux (CentOS/RHEL/Fedora):
1
2
3
4sudo yum install epel-release # 如果尚未安裝 EPEL
sudo yum install iperf3
# 或者使用 dnf
sudo dnf install iperf3macOS (使用 Homebrew):
1
brew install iperf3
Windows:
可以從 iperf3 官方網站 (https://iperf.fr/iperf-download.php) 下載預編譯的執行檔。下載後解壓縮,即可在命令提示字元 (cmd) 或 PowerShell 中執行 iperf3.exe。建議將其路徑加入系統的 PATH 環境變數中,方便使用。
基本使用方法
在作為伺服器的主機上執行以下命令:1
iperf3 -s
這會啟動 iperf3 伺服器,並在預設連接埠 5201 上監聽。
常用伺服器選項:
-s
或--server
:以伺服器模式執行。-p <port>
或--port <port>
:指定伺服器監聽的連接埠(預設 5201)。-i <interval>
或--interval <interval>
:設定定期頻寬報告的間隔時間(秒)。-1
或--one-off
:僅處理一個客戶端連接,然後退出。-D
或--daemon
:以背景程式 (daemon) 模式執行。
範例:
啟動伺服器
1 | iperf3 -s |
客戶端
在作為客戶端的主機上執行以下命令,並將 這會啟動 iperf3 客戶端,連接到指定的伺服器,並執行預設的 TCP 測試(持續 10 秒)。 常用客戶端選項: 範例: TCP 測試輸出範例 (客戶端): UDP 測試輸出範例 (客戶端): 使用 預設情況下,客戶端傳送資料,伺服器接收。使用 與 iperf2 的 這會先顯示客戶端到伺服器的傳輸數據,接著顯示伺服器到客戶端的傳輸數據。如果需要分別測試上傳和下載,仍然可以使用以下方式: TCP 視窗大小會影響長距離高頻寬網路 (Long Fat Networks, LFNs) 的效能。在某些情況下,調整視窗大小 ( 如果主機擁有多個網路介面卡或 IP 位址,可以使用 在多核心系統上,可以使用 通常情況下,客戶端只顯示其自身的測試結果。使用此選項,客戶端也會顯示伺服器端的測試結果摘要。 將測試日誌輸出到檔案而不是標準輸出。 雖然 iperf3 是 iperf2 的後繼者,但它們之間存在一些關鍵差異,且兩者並不相容 (iperf2 客戶端不能與 iperf3 伺服器通訊,反之亦然)。 一般來說,對於新的測試,建議使用 iperf3,因為它更易於使用,並且持續獲得更新和支援。 iperf3 是一個不可或缺的網路效能測試工具。它簡單易用,功能強大,能夠提供關於網路頻寬、抖動和封包遺失的寶貴數據。無論是網路管理員、系統工程師還是普通使用者,都可以利用 iperf3 來評估和最佳化其網路環境,確保網路連接的品質和效率。透過理解其各種選項和最佳實踐,使用者可以更有效地利用 iperf3 來解決實際的網路問題。1
iperf3 -c <server_ip>
-c <host>
或 --client <host>
:以客戶端模式執行,並指定要連接的伺服器主機。-p <port>
或 --port <port>
:指定要連接的伺服器連接埠(預設 5201)。-t <time>
或 --time <time>
:測試持續時間(秒,預設 10 秒)。-n <bytes>
或 --bytes <bytes>
:要傳輸的資料總量 (例如 100M, 2G)。-b <bits/sec>
或 --bitrate <bits/sec>
:UDP 模式下的目標頻寬 (例如 10M, 1G)。TCP 模式下此選項無效,因為 TCP
會嘗試使用所有可用頻寬。-l <length>
或 --length <length>
:讀寫緩衝區的大小 (TCP 預設 128KB,UDP 預設 8KB)。-P <num>
或 --parallel <num>
:平行執行的客戶端串流數量。-u
或 --udp
:使用 UDP 協定進行測試。-R
或 --reverse
:反向模式,由伺服器傳送資料,客戶端接收。-i <interval>
或 --interval <interval>
:設定定期頻寬報告的間隔時間(秒)。-J
或 --json
:以 JSON 格式輸出結果。-Z
或 --zerocopy
:使用零複製方法傳送資料 (如果支援)。-O <sec>
或 --omit <sec>
:忽略測試開始的前 N 秒。--get-server-output
:從伺服器獲取測試結果。--cport <port>
:指定客戶端使用的來源連接埠。連接到 IP 為 192.168.1.100 的伺服器,進行預設 TCP 測試
1
iperf3 -c 192.168.1.100
進行 30 秒的 TCP 測試
1
iperf3 -c 192.168.1.100 -t 30
進行 UDP 測試,目標頻寬為 100 Mbps,持續 20 秒
1
iperf3 -c 192.168.1.100 -u -b 100M -t 20
進行 TCP 反向測試 (伺服器傳送,客戶端接收)
1
iperf3 -c 192.168.1.100 -R
進行 4 個平行串流的 TCP 測試
1
iperf3 -c 192.168.1.100 -P 4
進行 TCP 測試並將結果輸出為 JSON 格式
1
iperf3 -c 192.168.1.100 -J
解讀基本輸出
1
2
3
4
5
6
7
8
9
10
11Connecting to host 192.168.1.100, port 5201
[ 5] local 192.168.1.101 port 53212 connected to 192.168.1.100 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 110 MBytes 923 Mbits/sec 0 1.20 MBytes
[ 5] 1.00-2.00 sec 112 MBytes 940 Mbits/sec 0 1.35 MBytes
...
[ 5] 9.00-10.00 sec 112 MBytes 938 Mbits/sec 0 1.80 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.09 GBytes 937 Mbits/sec 0 sender
[ 5] 0.00-10.04 sec 1.09 GBytes 933 Mbits/sec receiver-R
(反向模式),則 sender 是伺服器端的傳送速率,receiver 是客戶端測量的接收速率。使用 --get-server-output
選項可以在客戶端同時看到伺服器端的 sender/receiver 摘要。1
2
3
4
5
6
7
8
9
10
11Connecting to host 192.168.1.100, port 5201
[ 5] local 192.168.1.101 port 54321 connected to 192.168.1.100 port 5201
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-1.00 sec 11.9 MBytes 100 Mbits/sec 0.025 ms 0/8502 (0%)
[ 5] 1.00-2.00 sec 11.9 MBytes 100 Mbits/sec 0.015 ms 0/8501 (0%)
...
[ 5] 9.00-10.00 sec 11.9 MBytes 100 Mbits/sec 0.020 ms 0/8501 (0%)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 sec 119 MBytes 100 Mbits/sec 0.020 ms 0/85010 (0%) sender
[ 5] 0.00-10.00 sec 119 MBytes 100 Mbits/sec 0.018 ms 0/85008 (0%) receiver進階選項與技巧
平行串流 (
-P
):-P <num>
可以模擬多個應用程式同時傳輸資料的情況,有助於測試網路能否處理多個並行連接,並可能達到更高的總頻寬,尤其是在高延遲網路上。1
iperf3 -c <server_ip> -P 8
反向模式 (
-R
):-R
選項可以反轉這個方向,由伺服器傳送資料,客戶端接收。這對於測試下載速度非常有用。1
iperf3 -c <server_ip> -R
雙向同時測試 (
--bidir
):-d
選項類似,iperf3 客戶端可以使用 --bidir
選項來同時進行上傳和下載的頻寬測試。當客戶端使用此選項時,它會先進行正常的上傳測試,然後伺服器會自動啟動一個反向的流量傳輸給客戶端。1
iperf3 -c <server_ip> --bidir
測試上傳
1
iperf3 -c <server_ip>
測試下載
1
iperf3 -c <server_ip> -R
設定 TCP 視窗大小 (
-w
):-w <size>
, 例如 -w 2M
) 可能有助於達到更高的吞吐量。不過,現代作業系統通常具有良好的 TCP 自動調整機制,手動設定可能不是必需的。綁定特定 IP 位址 (
-B
):-B <ip_address>
選項將 iperf3 綁定到特定的 IP 位址進行測試。伺服器端綁定 IP
1
2
3
4
5
6 iperf3 -s -B 192.168.1.100
```
#### 客戶端綁定 IP
```bash
iperf3 -c <server_ip> -B 192.168.1.101設定 CPU 親和性 (
-A
):-A <cpu_num>
將 iperf3 程序綁定到特定的 CPU 核心,這有助於在某些情況下獲得更一致的測試結果。取得伺服器端輸出 (
--get-server-output
):1
iperf3 -c <server_ip> --get-server-output
記錄到檔案 (
--logfile
):1
2iperf3 -c <server_ip> --logfile client_test.log
iperf3 -s --logfile server_test.log常見應用場景
這是 iperf3 最基本的用途,用於了解兩點之間網路的最大資料傳輸能力。
透過在網路路徑的不同區段進行測試 (例如,客戶端到交換器,交換器到路由器,路由器到伺服器),可以幫助定位造成效能低落的瓶頸點。
評估無線存取點 (AP) 和無線客戶端之間的實際傳輸速率,找出訊號干擾或設定問題。
檢查 QoS 策略是否按預期工作,例如,高優先順序流量是否獲得了保證的頻寬。
在進行網路升級、更換設備或調整設定後,使用 iperf3 進行前後對比測試,以量化變更帶來的影響。
了解防火牆或入侵檢測/防禦系統 (IDS/IPS) 在處理大量流量時對網路效能的影響。
測試虛擬機器之間或本地到雲端環境的網路連線品質。使用 iperf3 的技巧與最佳實踐
iperf3 vs iperf2
特性 iperf2 iperf3 主要目標 頻寬測試 頻寬測試,更易用,更小的程式碼庫 程式碼庫 較舊,功能較多但可能較複雜 重新編寫,更現代,更精簡 JSON 輸出 不支援 (或透過第三方補丁) 內建支援 ( -J
)零複製 支援 支援 ( -Z
)執行緒模型 每個串流一個執行緒 單執行緒 (通常情況下),非同步 I/O 雙向測試 -d
選項支援同時雙向支援 --bidir
(客戶端發起同時雙向),或分別執行 -R
API 提供 C++ API 提供 C API (libiperf) 社群支援 仍有使用者,但更新較少 活躍開發和維護 報告 文字報告 文字報告,JSON 報告 結論
也許你也會想看看