iperf是一種命令行工具,用於通過測量服務器可以處理的最大網絡吞吐量來診斷網絡速度問題。它在遇到網絡速度問題時特別有用,通過該工具可以確定哪個服務器無法達到最大吞吐量。
環境: server: centos/redhat 7.4
client:window10
iperf版本: iperf 3.1.3
官網地址: https://iperf.fr
根據自己的系統下載相對應的安裝包
因為我們測試的客戶端是win10 ,服務端是Redhat ,所以要下載這兩個版本
服務端安裝
rpm -ivh iperf3-3.1.3-1.fc24.x86_64.rpm
客戶端安裝
解壓之后直接放到當前用戶家目錄即可,否則的話,執行需要加絕對路徑
(補充說明:客戶端服務端是由命令參數決定的,只是在此測試實驗中我個人決定他們為服務端或者是客戶端)
如何使用iperf
-
必須在測試的兩台計算機上同時安裝iPerf。如果在個人計算機上使用基於Unix或 Linux的操作系統,則可以在本地計算機上安裝iPerf。
-
但是,如果要測試網絡提供商的吞吐量,最好使用另一台服務器作為終點,因為本地ISP可能會施加影響測試結果的網絡限制。
使用方法官網也有
命令選項
Usage: iperf [-s|-c host] [options] iperf [-h|--help] [-v|--version] Server or Client: -p, --port # server port to listen on/connect to -f, --format [kmgKMG] format to report: Kbits, Mbits, KBytes, MBytes
格式化帶寬數輸出。支持的格式有:
'b' = bits/sec 'B' = Bytes/sec
'k' = Kbits/sec 'K' = KBytes/sec
'm' = Mbits/sec 'M' = MBytes/sec
'g' = Gbits/sec 'G' = GBytes/sec
'a' = adaptive bits/sec 'A' = adaptive Bytes/sec
自適應格式是kilo-和mega-二者之一。除了帶寬之外的字段都輸出為字節,除非指定輸出的格式,默認的參數是a。 -i, --interval # seconds between periodic bandwidth reports -F, --file name xmit/recv the specified file
設置每次報告之間的時間間隔,單位為秒。如果設置為非零值,就會按照此時間間隔輸出測試報告。默認值為零。 -B, --bind bind to a specific interface -V, --verbose more detailed output -J, --json output in JSON format --logfile f send output to a log file -d, --debug emit debugging output -v, --version show version information and quit -h, --help show this message and quit Server specific: -s, --server run in server mode -D, --daemon run the server as a daemon -I, --pidfile file write PID file -1, --one-off handle one client connection then exit Client specific: -c, --client run in client mode, connecting to -u, --udp use UDP rather than TCP -b, --bandwidth #[KMG][/#] target bandwidth in bits/sec (0 for unlimited) (default 1 Mbit/sec for UDP, unlimited for TCP) (optional slash and packet count for burst mode) -t, --time # time in seconds to transmit for (default 10 secs) -n, --bytes #[KMG] number of bytes to transmit (instead of -t) -k, --blockcount #[KMG] number of blocks (packets) to transmit (instead of -t or -n) -l, --len #[KMG] length of buffer to read or write 設置讀寫緩沖區的長度。 (default 128 KB for TCP, 8 KB for UDP) --cport bind to a specific client port (TCP and UDP, default: ephemeral port) -P, --parallel # number of parallel client streams to run -R, --reverse run in reverse mode (server sends, client receives) -w, --window #[KMG] set window size / socket buffer size -M, --set-mss # set TCP/SCTP maximum segment size (MTU - 40 bytes) -N, --no-delay set TCP/SCTP no delay, disabling Nagle's Algorithm -4, --version4 only use IPv4 -6, --version6 only use IPv6 -S, --tos N set the IP 'type of service' -Z, --zerocopy use a 'zero copy' method of sending data -O, --omit N omit the first n seconds -T, --title str prefix every output line with this string --get-server-output get results from server --udp-counters-64bit use 64-bit counters in UDP test packets [KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga-
iPerf 3 user documentation GENERAL OPTIONS Command line option Description -p, --port n The server port for the server to listen on and the client to connect to. This should be the same in both client and server. Default is 5201. --cport n Option to specify the client-side port. (new in iPerf 3.1) -f, --format [kmKM] A letter specifying the format to print bandwidth numbers in. Supported formats are 'k' = Kbits/sec 'K' = KBytes/sec 'm' = Mbits/sec 'M' = MBytes/sec The adaptive formats choose between kilo- and mega- as appropriate. -i, --interval n Sets the interval time in seconds between periodic bandwidth, jitter, and loss reports. If non-zero, a report is made every interval seconds of the bandwidth since the last report. If zero, no periodic reports are printed. Default is zero. -F, --file name client-side: read from the file and write to the network, instead of using random data; server-side: read from the network and write to the file, instead of throwing the data away. -A, --affinity n/n,m-F Set the CPU affinity, if possible (Linux and FreeBSD only). On both the client and server you can set the local affinity by using the n form of this argument (where n is a CPU number). In addition, on the client side you can override the server’s affinity for just that one test, using the n,m form of argument. Note that when using this feature, a process will only be bound to a single CPU (as opposed to a set containing potentialy multiple CPUs). -B, --bind host Bind to host, one of this machine's addresses. For the client this sets the outbound interface. For a server this sets the incoming interface. This is only useful on multihomed hosts, which have multiple network interfaces. -V, --verbose give more detailed output -J, --json output in JSON format --logfile file send output to a log file. (new in iPerf 3.1) --d, --debug emit debugging output. Primarily (perhaps exclusively) of use to developers. -v, --version Show version information and quit. -h, --help Show a help synopsis and quit. SERVER SPECIFIC OPTIONS 服務器特定選項 Command line option Description -s, --server Run iPerf in server mode. (This will only allow one iperf connection at a time) -D, --daemon Run the server in background as a daemon. -I, --pidfilefile write a file with the process ID, most useful when running as a daemon. (new in iPerf 3.1) CLIENT SPECIFIC OPTIONS 客戶特定選項 Command line option Description -c, --client host Run iPerf in client mode, connecting to an iPerf server running on host. --sctp Use SCTP rather than TCP (Linux, FreeBSD and Solaris). (new in iPerf 3.1) -u, --udp Use UDP rather than TCP. See also the -b option. -b, --bandwidth n[KM] Set target bandwidth to n bits/sec (default 1 Mbit/sec for UDP, unlimited for TCP). If there are multiple streams (-P flag), the bandwidth limit is applied separately to each stream. You can also add a ’/’ and a number to the bandwidth specifier. This is called "burst mode". It will send the given number of packets without pausing, even if that temporarily exceeds the specified bandwidth limit. -t, --time n The time in seconds to transmit for. iPerf normally works by repeatedly sending an array of len bytes for time seconds. Default is 10 seconds. See also the -l, -k and -n options. -n, --num n[KM] The number of buffers to transmit. Normally, iPerf sends for 10 seconds. The -n option overrides this and sends an array of len bytes num times, no matter how long that takes. See also the -l, -k and -t options. -k, --blockcount n[KM] The number of blocks (packets) to transmit. (instead of -t or -n) See also the -t, -l and -n options. -l, --length n[KM] The length of buffers to read or write. iPerf works by writing an array of len bytes a number of times. Default is 128 KB for TCP, 8 KB for UDP. See also the -n, -k and -t options. -P, --parallel n The number of simultaneous connections to make to the server. Default is 1. -R, --reverse Run in reverse mode (server sends, client receives). -w, --window n[KM] Sets the socket buffer sizes to the specified value. For TCP, this sets the TCP window size. (this gets sent to the server and used on that side too) -M, --set-mss n Attempt to set the TCP maximum segment size (MSS). The MSS is usually the MTU - 40 bytes for the TCP/IP header. For ethernet, the MSS is 1460 bytes (1500 byte MTU). -N, --no-delay Set the TCP no delay option, disabling Nagle's algorithm. Normally this is only disabled for interactive applications like telnet. -4, --version4 only use IPv4. -6, --version4 only use IPv6. -S, --tos n The type-of-service for outgoing packets. (Many routers ignore the TOS field.) You may specify the value in hex with a '0x' prefix, in octal with a '0' prefix, or in decimal. For example, '0x10' hex = '020' octal = '16' decimal. The TOS numbers specified in RFC 1349 are: IPTOS_LOWDELAY minimize delay 0x10 IPTOS_THROUGHPUT maximize throughput 0x08 IPTOS_RELIABILITY maximize reliability 0x04 IPTOS_LOWCOST minimize cost 0x02 -L, --flowlabel n Set the IPv6 flow label (currently only supported on Linux). -Z, --zerocopy Use a "zero copy" method of sending data, such as sendfile(2), instead of the usual write(2). This uses much less CPU. -O, --omit n Omit the first n seconds of the test, to skip past the TCP TCP slowstart period. -T, --title str Prefix every output line with this string. -C, --linux-congestion algo Set the congestion control algorithm (Linux only for iPerf 3.0, Linux and FreeBSD for iPerf 3.1).
此時說明已經作為服務端起來了,而且監聽在 5201 端口上,接下來我們就可以在客戶端做壓測了
我的網卡是百兆網,測試結果挺准確的
iperf也可以測試通過udp連接的吞吐量,服務端做同樣的操作
iperf3 -s
客服端指定使用udp協議進行連接測試
帶寬遠遠低於tcp測試的結果,這是因為iperf把UDP客戶端的帶寬限制為每秒1Mbit。此時可以用 -b 選項指定帶寬,可以略高於自己網卡的帶寬,已達到更准確的結果。
這將告訴客戶端我們希望盡可能達到每秒1G 的最大值,-b選項僅在使用UDP連接時有效,因為iperf未在TCP客戶端上設置帶寬限制。
iperf 還可以做雙向測試,在客戶端用 -d 選項,此時他不光發送數據,還接收數據