網絡性能評估工具Iperf詳解(可測丟包率)

網絡性能評估工具Iperf詳解(可測丟包率)

一、網絡性能評估工具Iperf

網絡性能評估主要是監測網絡帶寬的使用率,將網絡帶寬利用最大化是保證網絡性能的基礎,但是由於網絡設計不合理、網絡存在安全漏洞等原因,都會導致網絡帶寬利用率不高。要找到網絡帶寬利用率不高的原因,就需要對網絡傳輸進行監控,此時就需要用到一些網絡性能評估工具,而Iperf就是這樣一款網絡帶寬測試工具,本節將詳細介紹一下Iperf的使用。

1、Iperf能做什麼
Iperf是一款基於TCP/IP和UDP/IP的網絡性能測試工具,它可以用來測量網絡帶寬和網絡質量,還可以提供網絡延遲抖動、數據包丟失率、最大傳輸單元等統計信息。網絡管理員可以根據這些信息瞭解並判斷網絡性能問題,從而定位網絡瓶頸,解決網絡故障。

下面介紹Iperf的主要功能。

(1)TCP方面

q 測試網絡帶寬。

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

q 報告MSS/MTU值的大小。

q 支持TCP窗口值自定義並可通過套接字緩衝。

(2)UDP方面

q 可以設置指定帶寬的UDP數據流

q 可以測試網絡抖動值、丟包數

q 支持多播測試

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

二、Iperf的安裝與使用

iperf可以運行在任何IP網絡上,包括本地以太網、接入因特網、Wi-Fi網絡等。在工作模式上,iperf運行於服務器、客戶端模式下,其服務器端主要用於監聽到達的測試請求,而客戶端主要用於發起連接會話,因此要使用iperf,需要兩臺服務器,一臺運行在服務器模式下,另一臺運行在客戶端模式下。

1.安裝iperf
iperf支持Win32、Linux、FreeBSD、MacOS X、OpenBSD和Solaris等多種操作系統平臺。讀者可以從iperf官方主頁http://iperf.fr/ 下載各種版本,目前最新的版本是iperf3.0,這裏下載的軟件包爲iperf-3.0.tar.gz,安裝過程如下:

# wget http://downloads.es.net/pub/iperf/iperf-3.0.6.tar.gz
# tar zxvf iperf-3.0.6.tar.gz

# cd iperf-3.0.6
# ./configure
# make
# make install

2.iperf參數介紹
在完成iperf安裝後,執行“iperf3 –h”即可顯示iperf的詳細用法。iperf的命令行選項共分爲三類,分別是客戶端與服務器端公用選項、服務器端專用選項和客戶端專用選項,下面對常用的選項進行介紹。

服務器端專用選項的含義如表1所示。

表1 服務器端專用選項的含義
在這裏插入圖片描述

客戶端專用選項的含義如表2.5所示。

表2 客戶端專用選項的含義
在這裏插入圖片描述

客戶端與服務器端公用選項的含義如表3所示。

表3 客戶端與服務器端公用選項的含義
在這裏插入圖片描述

三、 Iperf應用實例

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

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

clip_image002

圖1通過iperf測試網絡帶寬利用率

從圖1可以看出,iperf默認的運行時間是10秒鐘,每隔一秒鐘輸出一次傳輸狀態,同時還可以看到每秒鐘傳輸的數據量在112MB左右,剛好與“Bandwidth”列的值對應起來,網卡的帶寬速率維持在941Mbits/sec左右,而測試的服務器是千兆網卡,這個測試值也基本合理。在輸出的最後,iperf還給出了總的數據發送、接收量,並給出了帶寬速率平均值,通過這些值,基本可以判斷網絡帶寬是否正常,網絡傳輸狀態是否穩定。

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

clip_image004

圖2 添加“-t”和“-i”參數後的iperf輸出

從圖2 可以看出,輸出狀態的間隔變爲每5秒鐘一次,總共執行測試時間爲20秒,測試的帶寬速率仍然保持在941Mbits/sec左右,唯一變化的是失敗重傳次數增加了。

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

clip_image006

圖3 iperf客戶端通過“-n”參數指定要傳輸的數據量

圖3的例子是指定發送一個5GB左右的數據包,並且每隔10秒鐘輸出一次傳輸狀態,從這個輸出可以看出,當失敗重傳次數較多時,傳輸速率急速下降。

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

clip_image008

圖4 iperf客戶端通過“-F”參數指定文件來發送數據

在圖4的例子中,通過“-F”參數指定了一個webdata.tar.gz文件作爲iperf要傳輸的數據,在使用此參數時,需要同時指定一個“-t”參數來設置要測試傳輸的時間,這個時間儘量設置長一些,因爲在默認傳輸時間10秒內,這個文件可能還沒有傳完。

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

下面通過兩個例子進行簡單對比,圖5是iperf使用單線程傳輸1.86GBytes數據所消耗的時間和帶寬使用情況。爲了速率單位統一,這裏使用“-f”參數將輸出結果都通過MBytes來顯示。

clip_image010

圖5 iperf在單線程模式下的傳輸時間和傳輸速率

從圖5中可以看出,傳輸1.86GBytes的數據消耗了17秒的時間,平均帶寬速率爲112MBytes/sec(注意單位).下面再看看使用多線程後,iperf傳輸同樣大小數據量所消耗的時間和平均帶寬速率,如圖6所示。

clip_image012

圖6 iperf使用多線程後的數據傳輸狀態

這裏通過“-P”參數開啓了2個多線程,從傳輸時間上看,傳輸1.86GBytes的數據,消耗時間爲10.79秒,比之前單線程的傳輸時間少了近7秒鐘,在平均帶寬速率上,從之前單線程的112MBytes/sec提高到177MBytes/sec,從這個結果可以看出,多線程對網絡傳輸性能的提高不小。

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

clip_image014

圖7 iperf傳輸100MB的UDP數據包的輸出結果

在圖7中,重點關注虛線下的一段內容,在這段輸出中,“Jitter”列表示抖動時間,或者稱爲傳輸延遲,“Lost/Total”列表示丟失的數據報和總的數據報數量,後面的0.33%是平均丟包的比率,“Datagrams”列顯示的是總共傳輸數據報的數量。

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

clip_image016

圖8 iperf服務端顯示的UDP傳輸狀態

在這個輸出中,詳細記錄了在傳輸過程中,每個階段的傳輸延時和丟包率,在UDP應用中隨着傳輸數據的增大,丟包率和延時也隨之增加。對於延時和丟包可以通過改變應用程序來緩解或修復,例如視頻流應用,可以通過緩存數據的方式而可以容忍更大的延時。

四、出錯處理

錯誤:

iperf3: error - unable to read from stream socket: No route to host

是防火牆默認關閉了 icmp

需要將客戶端和服務端的防火牆 將

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

刪掉或註釋掉即可。

五、windows與linux使用 iperf注意事項

windows與linux使用iperf打流時,需要增加-w的參數,否則會影響測試的吞吐量

另外iperf3, server端直接-s即可,無需增加額外的參數

iperf3 -s

如果想增加-w的參數,只在client端增加即可

iperf3 -c 192.168.0.100 -w 16M -i 1 -P 5 -B 192.168.0.10 -t 10

其中:

-w:  --window    #[KMG]    set window size / socket buffer size
-i: 上報時間間隔
-P: 線程數
-B: 監聽本機的IP
-t: 測試時間
-c: 服務端的IP

iperf3使用幫助說明

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
  -i, --interval  #         seconds between periodic bandwidth reports
  -F, --file name           xmit/recv the specified file
  -A, --affinity n/n,m      set CPU affinity
  -B, --bind      <host>    bind to a specific interface
  -V, --verbose             more detailed output
  -J, --json                output in JSON format
  -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
  -1, --one-off             handle one client connection then exit
Client specific:
  -c, --client    <host>    run in client mode, connecting to <host>
  -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)
  -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
  -C, --linux-congestion <algo>  set TCP congestion control algorithm (Linux only)
  -M, --set-mss   #         set TCP maximum segment size (MTU - 40 bytes)
  -N, --nodelay             set TCP 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'
  -L, --flowlabel N         set the IPv6 flow label (only supported on Linux)
  -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

[KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga-

iperf3 homepage at: http://software.es.net/iperf/
Report bugs to:     https://github.com/esnet/iperf

參考:https://www.cnblogs.com/wuling129/p/4795262.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章