一、iperf原理及概述
iPerf是一個網絡性能測試工具,可以測試TCP或者UDP的網絡吞吐量。
(1)TCP帶寬測試
iPerf的主要目標是幫助調整特定路徑上的TCP連接。眾所周知,TCP最基本的調整問題是調整TCP窗口大小,它控制在任何一點在網絡中可以有多少數據。如果它太小,發送者將會在一段時間內處於空閑狀態,從而影響發送TCP的性能。TCP窗口大小的理論值是:瓶頸帶寬與往返延時的乘積,即:
bottleneck bandwidth * round trip time
例如瓶頸鏈路是45 Mbit/sec,使用ping命令測量到的往返時延是42ms。那么TCP窗口的理論值是:
45 Mbit/sec * 42 ms = (45e6) * (42e-3) = 1890000 bits= 230 KByte
在實際測試中,可以以計算得到的TCP窗口為基准,在這個值(如上面為230KByte)的基礎上,升高或者降低TCP窗口大小,可以得到一個性能的提升。
主要功能如下:
- 測量網絡帶寬
- 報告MSS/MTU值的大小和觀測值
- 支持TCP窗口值通過套接字緩沖
- 當P線程或Win32線程可用時,支持多線程。客戶端與服務端支持同時多重連接
(2)UDP帶寬測試
帶寬測試一般來說采用UDP模式測試,因為在UDP模式下能測出極限帶寬、路徑時延、丟包率,這些測試項會在帶寬測試報告中打印出來。在進行測試時,先以鏈路理論帶寬作為數據發送速率進行測試,例如,從客戶端到服務器之間的鏈路的理論帶寬為1000Mbps,先用 -b 1000M進行測試,然后根據測試結果(包括實際帶寬,時延抖動和丟包率),再以實際帶寬作為數據發送速率進行測試,會發現時延抖動和丟包率比第一次好很多,重復測試幾次,就能得出穩定的實際帶寬。
iperf是基於server-client模式工作的,因此,要使用iperf測試帶寬,需要建立一個服務端(用於丟棄流量)和一個客戶端(用於產生流量)。iperf服務端或者是客戶端,都是使用的同一個命令,不過是啟動命令的選項不同而已。
主要功能如下:
- 客戶端可以創建指定帶寬的UDP流
- 測量丟包
- 測量延遲
- 支持多播
- 當P線程可用時,支持多線程。客戶端與服務端支持同時多重連接(不支持Windows)
二、iPerf常用選項
iPerf常用選項分為 通用選項、服務端特定選項以及客戶端特定選項。
(1)通用選項
-f <kmKM> |
報告輸出格式。[kmKM]:format to report(Kbits, Mbits, KBytes, MBytes) |
-i <sec> |
在周期性報告帶寬之間暫停n秒。如周期是10s,則-i指定為2,每隔2秒報告一次帶寬測試情況,共計報告5次 |
-p |
設置服務端監聽的端口,默認是5001 |
-u |
使用UDP協議測試 |
-w n<K/M> |
指定TCP窗口大小 |
-m |
輸出MTU大小 |
-M |
設置MTU大小 |
-o <filename> |
結果輸出至文件 |
-e |
輸出詳細測試報告,包括pps等 |
(2)服務端選項
-s |
iperf服務器模式 |
-d |
以后台模式運行服務端 |
-U |
運行一個單一線程的UDP模式 |
(3)客戶端選項
-b |
指定客戶端通過UDP協議發送數據的帶寬(bit/s),默認是1Mbit/s |
-c <ServerIP> |
以客戶端模式運行iperf,並且連接至服務端主機ServerIP,eg: iperf -c <server_ip> |
-d |
雙向測試 |
-t |
指定iperf帶寬測試時間,默認是10s,eg:iperf -c <server_ip> -t 20 |
-P |
指定客戶端並發線程數,默認只運行一個線程。 eg,指定3個線程 : iperf -c <server_ip> -P 3 |
-T |
出棧多播數據包的TTL值。這本質上就是數據通過路由器的跳數,默認是1,鏈接本地。 |