目錄
一、iperf3 是什么?
二、為什么需要 iperf3?
三、iperf3 的主要測量指標
四、安裝 iperf3
五、基礎使用模式(命令行參數示例)
1. 啟動 Server 端 (必須)
2. 啟動 Client 端進行測試 (最常見)
基本 TCP 測試 (10秒)
基礎參數
UDP 測試
綁定特定接口
設置 TOS/DSCP
六、解讀報告輸出
TCP 測試 (客戶端輸出示例)
UDP 測試 (客戶端輸出示例)
服務器端輸出
七、常見問題 & 技巧
總結
這次來詳細講解一下 ??iperf3?? 這款強大的網絡性能測量工具。
一、iperf3 是什么?
- ??定位:?? iperf3 是一個開源的、跨平臺的??命令行工具??,專門用于測量??網絡帶寬??、??延遲抖動??和??數據包丟失??等網絡性能指標。
- ??核心功能:?? 它通過在兩個聯網設備(通常稱為??客戶端??和??服務器??)之間創建大量的數據流(TCP或UDP),并對這些數據流的傳輸進行計時和統計,從而計算出可用的最大網絡帶寬、延遲變化(抖動)和數據包丟失率。
- ??工作原理:??
- 在一臺設備上運行
iperf3 -s
啟動??服務器端??,監聽特定端口(默認5201)。 - 在另一臺設備上運行
iperf3 -c <服務器IP地址>
啟動??客戶端??,向服務器發起連接。 - 客戶端默認發送 TCP 數據流到服務器(持續時間默認10秒),服務器接收并確認。
- 測試結束后,兩端(尤其是客戶端)會輸出詳細的性能報告,包括帶寬、傳輸數據量、往返時間、抖動、丟包等。
- 在一臺設備上運行
- ??與前代的關系:?? iperf3 是 iperf(目前通常指 iperf2)的一個重寫版本。它設計得更輕量、庫化(libiperf),擁有更簡潔的代碼庫和更少的歷史包袱。雖然在基本功能上相似,但一些高級特性(如特定擁塞控制算法)和參數可能在不同版本間有所不同。
二、為什么需要 iperf3?
- ??驗證理論帶寬:?? 你的鏈路是 1Gbps 的?用 iperf3 測一下實際能達到多少,排除中間設備(交換機、防火墻、路由器)或配置瓶頸。
- ??排查網絡瓶頸:?? 當網絡感覺慢時,通過多點測試(如:客戶端->核心交換機->目標服務器)定位瓶頸位置。
- ??評估設備性能:?? 測試路由器、防火墻、VPN 隧道或負載均衡器的吞吐量和延遲影響。
- ??網絡設備選型:?? 購買新交換機或防火墻前,用 iperf3 測試其在不同負載下的表現。
- ??應用性能調優:?? 評估網絡是否能滿足特定應用(如視頻會議、備份、數據庫同步)的帶寬和延遲要求。
- ??有線 vs 無線:?? 比較有線連接和 Wi-Fi 連接的實際性能差異。
- ??云服務性能:?? 測試云虛擬機之間、虛擬機到本地數據中心、或者不同云區域之間的網絡性能。
- ??擁塞控制算法測試:?? 測試不同 TCP 擁塞控制算法(如 CUBIC, BBR)在實際網絡環境下的表現。
三、iperf3 的主要測量指標
-
??帶寬 (Bandwidth):??
- 最核心的指標,指網絡路徑上數據傳輸的速率。
- ??單位:??
bits per second
(bps),Gigabits per second
(Gbps),Megabits per second
(Mbps),Kilobits per second
(Kbps)。iperf3
默認報告bits per second
。 - ??類型:??
- ??單向帶寬 (Sender to Receiver):?? 客戶端到服務器或服務器到客戶端的傳輸速率(取決于測試模式)。
- ??雙向帶寬 (Bi-directional):?? 同時測量兩個方向的總帶寬(使用
-d
或-w
參數)。
- ??報告形式:??
發送端帶寬
(客戶端輸出) 和接收端帶寬
(服務器輸出)。對于理想 TCP 測試,兩者應非常接近。UDP 測試中接收端帶寬更關鍵(反映實際送達的速率)。
-
??抖動 (Jitter):??
- 指連續數據包到達時間間隔的變化程度。對于實時應用(如 VoIP, 視頻會議)至關重要。
- ??計算方式:?? iperf3 計算包到達時間間隔與理論間隔的差值。
- ??單位:?? 毫秒 (ms)。值越低越好。
-
??丟包率 (Packet Loss):??
- 在傳輸過程中丟失的數據包占總發送包數的百分比。主要出現在 UDP 測試或擁塞嚴重的 TCP 測試中。TCP 本身會重傳丟失包,但重傳會顯著降低有效帶寬。
- ??報告形式:?? 對于 UDP 測試,在客戶端和服務器報告中有
% Lost
的顯示。對于 TCP,iperf3 的默認報告不直接顯示丟包率,但可以通過重傳次數(Retr
)間接推斷擁塞情況(-i
報告間隔顯示更直觀)。
-
??往返時間 (RTT):??
- 數據包從發送方發出到收到接收方確認的總時間。
- ??在 iperf3 報告中的體現:??
- ??TCP 測試:?? iperf3 會報告一個加權平均值
RTT
(在客戶端報告的連接細節部分)。 - ??UDP 測試:?? 不會直接報告 RTT。
- ??TCP 測試:?? iperf3 會報告一個加權平均值
- ??單位:?? 毫秒 (ms)。
-
??緩沖區大小/窗口大小 (Buffer/Window Size):??
- 影響 TCP 吞吐量的關鍵參數。
iperf3
客戶端會報告測試中使用的Receiver Window Size
(由操作系統和可能的手動設置-w
決定)。優化窗口大小對于長距離高帶寬鏈路非常重要。
- 影響 TCP 吞吐量的關鍵參數。
四、安裝 iperf3
iperf3 在主流操作系統上安裝都非常簡單:
- ??Linux (Debian/Ubuntu):??
sudo apt-get install iperf3
- ??Linux (RHEL/CentOS):??
sudo yum install iperf3
(可能需要啟用 EPEL 倉庫) 或sudo dnf install iperf3
- ??macOS:??
- 使用 Homebrew (推薦):
brew install iperf3
- 或從官網下載源代碼編譯。
- 使用 Homebrew (推薦):
- ??Windows:??
- 官方提供了預編譯的二進制文件。從官網下載壓縮包,解壓后即可運行
iperf3.exe
(通常在命令提示符或 PowerShell 中運行,注意路徑)。
- 官方提供了預編譯的二進制文件。從官網下載壓縮包,解壓后即可運行
- ??FreeBSD:??
pkg install iperf3
五、基礎使用模式(命令行參數示例)
1. 啟動 Server 端 (必須)
iperf3 -s
-s
: 以服務器模式運行。- 默認監聽 TCP 端口 5201。使用
-p <端口號>
指定其他端口 (e.g.,iperf3 -s -p 5202
)。 - ??重要:?? 確保防火墻允許
iperf3
的流量通過 (TCP/UDP 的相應端口)。
2. 啟動 Client 端進行測試 (最常見)
基本 TCP 測試 (10秒)
iperf3 -c <server_ip_address>
-c <server_ip_address>
: 以客戶端模式運行,連接到指定 IP 地址的服務器。
基礎參數
-t <秒數>
: 指定測試持續時間 (e.g.,-t 30
運行30秒)。-i <秒數>
: 指定報告間隔 (e.g.,-i 1
每秒輸出一次進度報告)。-P <線程數>
: 使用并行流 (多個 TCP 連接)。這對充分利用高帶寬鏈路或測試負載均衡很有用 (e.g.,-P 4
)。-R
: 反轉模式。默認客戶端發送數據到服務器。使用-R
后,客戶端變成接收者,服務器變成發送者。用于測試反向帶寬。-d
: 同時進行雙向 (duplex) 測試。客戶端既發送也接收數據。-w <size>[KM]
: 設置 TCP 窗口大小/套接字緩沖區大小 (e.g.,-w 256K
,-w 2M
)。對 WAN 優化很重要。
UDP 測試
iperf3 -c <server_ip> -u -b <bandwidth>
-u
: 使用 UDP 而不是 TCP。-b <bandwidth>[KM]
: ??必須??為 UDP 測試指定目標帶寬。如-b 100M
(100 Mbps),-b 1G
(1 Gbps)。- UDP 測試的報告會包含
Jitter
和Lost/% Lost
信息。
綁定特定接口
iperf3 -c <server_ip> -B <local_interface_ip>
- 當設備有多個網卡或 IP 地址時有用。
設置 TOS/DSCP
iperf3 -c <server_ip> -S 0x<hex_value>
- 用于測試 QoS 策略效果。
六、解讀報告輸出
TCP 測試 (客戶端輸出示例)
Connecting to host 192.168.1.100, port 5201
[ 5] local 192.168.1.50 port 56032 connected to 192.168.1.100 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 134 MBytes 1.12 Gbits/sec 0 747 KBytes
[ 5] 1.00-2.00 sec 140 MBytes 1.17 Gbits/sec 0 908 KBytes
[ 5] 2.00-3.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 3.00-4.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 4.00-5.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 5.00-6.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 6.00-7.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 7.00-8.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 8.00-9.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
[ 5] 9.00-10.00 sec 140 MBytes 1.17 Gbits/sec 0 937 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.37 GBytes 1.17 Gbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.37 GBytes 1.17 Gbits/sec receiveriperf Done.
- ??ID:?? 連接/線程標識符。
- ??Interval:?? 報告的時間區間。
- ??Transfer:?? 該間隔內傳輸的數據量。
- ??Bitrate:?? 該間隔內的平均帶寬速率 (
[ ]
內是發送端速率)。 - ??Retr:?? 該間隔內發生的 TCP 重傳次數。??關鍵指標!?? 多次重傳 (>0) 通常表明存在擁塞、鏈路質量差、緩沖區不足或防火墻策略問題。是 TCP 吞吐量低于預期的首要排查點。
- ??Cwnd:?? 報告間隔結束時的擁塞窗口大小估計值 (單位通常是 KBytes)。
- ??Sender Summary:??
Transfer
: 發送端在??整個測試期間??發送的總數據量。Bitrate
: 發送端的??平均發送速率??。Retr
: ??整個測試期間的總重傳次數??。這是判斷測試過程中是否存在丟包(導致重傳)的關鍵指標。
- ??Receiver Summary:??
Transfer
: 接收端確認收到的總數據量 (應與發送端的Transfer
非常接近)。Bitrate
: ??接收端的平均接收速率??。這是測得的??有效網絡吞吐量?? (Available Bandwidth)。它可能略低于發送端速率(協議開銷、接收端處理能力)。
UDP 測試 (客戶端輸出示例)
Connecting to host 192.168.1.100, port 5201
[ 5] local 192.168.1.50 port 52465 connected to 192.168.1.100 port 5201
[ ID] Interval Transfer Bitrate Total Datagrams
[ 5] 0.00-1.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 1.00-2.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 2.00-3.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 3.00-4.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 4.00-5.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 5.00-6.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 6.00-7.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 7.00-8.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 8.00-9.00 sec 128 KBytes 1.05 Mbits/sec 91
[ 5] 9.00-10.00 sec 128 KBytes 1.05 Mbits/sec 91
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 sec 1.25 MBytes 1.05 Mbits/sec 0.000 ms 0/910 (0%) sender
[ 5] 0.00-10.00 sec 1.25 MBytes 1.05 Mbits/sec 0.027 ms 0/910 (0%) receiver
- ??ID, Interval, Transfer, Bitrate:?? 含義與 TCP 類似,但
Bitrate
指的是客戶端 UDP ??發送??的速率 (受-b
參數控制)。 - ??Total Datagrams:?? 該間隔內發送的數據包數量。
- ??Sender Summary:??
- 報告發送的總數據量、發送端的平均發送速率 (
Bitrate
)、總發送的數據包數量 (Datagrams
)。沒有抖動和丟包統計 (發送端不知道接收情況)。
- 報告發送的總數據量、發送端的平均發送速率 (
- ??Receiver Summary (最關鍵):??
Transfer
: 接收端??實際收到??的總數據量。Bitrate
: ??接收端的平均有效接收速率?? (實際可用帶寬)。Jitter
: 整個測試期間的平均抖動 (ms)。Lost/Total Datagrams
: ??總丟失的數據包數量 / 總預期收到的數據包數量?? (來自-b
參數的速率和間隔)。以及丟包百分比 (% Lost
)。這是 UDP 測試的核心可靠性指標。
服務器端輸出
服務器端通常也會輸出報告(在測試結束后或使用 --logfile
參數時保存),內容與客戶端接收方報告類似(顯示接收了哪些數據)。
七、常見問題 & 技巧
-
??連接失敗 (
Connection refused
):??- 服務器未運行:檢查服務器端
iperf3 -s
是否已啟動。 - 端口錯誤:檢查
-p
參數是否在兩端指定且一致。 - ??防火墻阻止:最常見原因!?? 檢查服務器端和沿途設備的防火墻規則,確保允許流量通過
iperf3
使用的端口 (TCP 5201 或自定義的,UDP 測試也需對應規則)。 - 服務器地址錯誤。
- 服務器未運行:檢查服務器端
-
??帶寬低于預期 (TCP):??
- ??重傳 (
Retr
> 0):?? 排查擁塞(使用-t
延長測試時間觀察)、物理鏈路問題(光纖/網線/SFP模塊)、設備(交換機/防火墻/路由器)性能瓶頸(CPU、隊列、ACL)、緩沖區過小(嘗試增大-w
如-w 2M
,尤其是在長距離高帶寬鏈路)。 - 擁塞窗口限制:對于長距離(高延遲)鏈路,默認 TCP 窗口可能太小(參考
Cwnd
值)。使用-w
增大窗口大小(需要同時調大操作系統 TCP 緩沖區net.core.rmem_max/wmem_max
)。 - 擁塞控制算法:嘗試不同的算法
-C bbr
(需內核支持)。 - CPU 瓶頸:檢查客戶端或服務器端 CPU 是否滿載(使用
top
,htop
等工具)。 - 路徑中間設備限制:防火墻策略、QoS 限速、較低端交換機的背板帶寬限制。
- 網卡協商速率:檢查
ethtool <接口>
確認協商速率是期望值 (1Gbps/10Gbps)。 - 跨物理設備/交換機測試性能:不同端口速率、交換機交換能力、VLAN 配置都可能有影響。
- 并行流:嘗試使用
-P 4
或-P 8
啟動多個并發流。
- ??重傳 (
-
??帶寬低于預期 (UDP):??
- 查看??接收端報告??的丟包率和帶寬。
- 如果丟包率高 (
% Lost
),說明網絡無法承載-b
指定的發送速率。降低-b
值。 - 同樣排查網絡擁塞、設備性能、CPU 瓶頸。
-
??Windows 防火墻:?? Windows 防火墻默認阻止入站
iperf3
。運行服務器端時需添加入站規則允許iperf3.exe
或指定端口。 -
??連接重置 (
Connection reset by peer
):?? 服務器或中間設備(如防火墻)提前關閉了連接。嘗試使用-t
縮短測試時間,檢查防火墻超時設置。 -
??獲取服務器報告:?? 客戶端測試完成后,服務器會輸出報告。若想讓服務器將報告保存到文件,使用
--logfile <filename>
參數啟動服務器 (iperf3 -s --logfile ~/iperf.log
)。 -
??使用 JSON 輸出:?? 使用
-J
參數可以讓客戶端輸出 JSON 格式報告,便于其他程序解析和可視化 (iperf3 -c <server> -J > result.json
)。 -
??可視化工具:?? iperf3 本身是命令行工具。第三方工具如
jperf
(圖形前端),gperftools
(可配合圖形化),Flent
(更復雜的網絡測試套件,集成 iperf3) 可以幫助可視化結果和運行自動化測試。 -
??測試雙向帶寬:?? 使用
-d
(雙向同時) 或-R
(先測一個方向,再自動反轉測試另一個方向)。 -
??避免對生產網絡的沖擊:?? iperf3 設計用于壓測,會占滿帶寬。務必在維護窗口或非關鍵業務網絡中進行測試。UDP 測試尤其要注意,無節制的發送可能導致網絡擁塞。
總結
iperf3 是網絡工程師和系統管理員必備的、輕量而強大的網絡性能診斷工具。通過理解其核心概念、正確安裝使用(尤其注意防火墻)、仔細解讀報告(特別是帶寬、重傳、抖動、丟包等指標),并掌握基本的故障排查技巧,你可以有效地利用 iperf3 來測量帶寬潛力、定位瓶頸、驗證配置和評估網絡基礎設施的性能,為網絡優化和問題解決提供堅實的數據支撐。