qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          使用iperf測試網(wǎng)絡(luò)性能

           iperf 是一個 TCP/IP 和 UDP/IP 的性能測量工具,能夠提供網(wǎng)絡(luò)吞吐率信息,以及震動、丟包率、最大段和最大傳輸單元大小等統(tǒng)計信息;從而能夠幫助我們測試網(wǎng)絡(luò)性能,定位網(wǎng)絡(luò)瓶頸。iperf是開源的,源代碼可以從http://sourceforge.net/projects/iperf/下載。
            1.    iperf能夠做什么
            提起iperf,想必大家都知道它是用了測試網(wǎng)絡(luò)性能的。具體說來,Iperf是美國伊利諾斯大學(xué)(University of Illinois)開發(fā)的一種開源的網(wǎng)絡(luò)性能測試工具??梢杂脕頊y試網(wǎng)絡(luò)節(jié)點間(也包括回環(huán))TCP或UDP連接的性能,包括帶寬、抖動以及丟包率,其中抖動和丟包率適應(yīng)于UDP測試,而帶寬測試適應(yīng)于TCP和UDP。
            這里需要特別提出的是,iperf不能夠用來測試時延,想一想這是為什么。
            2.    網(wǎng)絡(luò)性能參數(shù)
            以上提到了網(wǎng)絡(luò)的主要性能參數(shù)包括帶寬,時延,抖動和丟包率,這些用一個名詞代替,就是QOS(服務(wù)質(zhì)量)。
            對于時延和抖動,見如下圖
            圖中D1,D2分別表示包A和包B的時延。
            抖動=|D2-D1|
            對于時延,iperf無能為力。但是iperf能夠計算抖動,想想這又是為什么。
            我們知道,在iperf中,我們測試時需要發(fā)送大量的包,因此計算出來的抖動值就是連續(xù)發(fā)送時延差值的平均值。
            3.    安裝iperf
            在Unix系統(tǒng)下,安裝iperf最方便的方法是直接下載rpm包,使用rpm指定安裝即可。
            當然也可以直接去sourceforge上下載源代碼,使用如下命令安裝即可。
            #./configure
            #make
            #make install
            前提是該機器上已經(jīng)有C++編譯器和make等程序。安裝完成之后,可以進行一個簡單的回環(huán)測試iperf是否安裝成功。
          $ iperf -s
          ------------------------------------------------------------
          Server listening on TCP port 5001
          TCP window size: 85.3 KByte (default)
          ------------------------------------------------------------
          [ 4] local 127.0.0.1 port 5001 connected with 127.0.0.1 port 35589
          [ ID] Interval      Transfer    Bandwidth
          [ 4] 0.0-10.0 sec 26.3 GBytes 22.6 Gbits/sec
          $ iperf -c 127.0.0.1
          ------------------------------------------------------------
          Client connecting to 127.0.0.1, TCP port 5001
          TCP window size: 49.5 KByte (default)
          ------------------------------------------------------------
          [ 3] local 127.0.0.1 port 35589 connected with 127.0.0.1 port 5001
          [ ID] Interval      Transfer    Bandwidth
          [ 3] 0.0-10.0 sec 26.3 GBytes 22.6 Gbits/sec


           iperf測試案例介紹
            4.    iperf主要參數(shù)
            iperf中的可選參數(shù)比較多,具體可以參見其用戶手冊。
            http://webfolder.wirelessleiden.nl/iperf/
            一般來說,我們在做性能測試的時候需要指定包長,不同的包長會得到不同的吞吐量,通過-l指定,而使用-b指定帶寬。
            5.    測試吞吐量,抖動和丟包率
            如何需要同時測試以上三個參數(shù),那么只能通過UDP獲得。使用-u參數(shù)進行UDP測試(iperf默認為TCP)。
            在測試的最后server端會給出一個報告。
          [ 3] local 192.168.1.1 port 2152 connected with 192.168.101.2 port 56768
          [ ID] Interval      Transfer    Bandwidth       Jitter  Lost/Total Datagrams
          [ 3] 0.0- 1.0 sec 1.40 MBytes 11.7 Mbits/sec  0.069 ms   0/14671 (0%)
          [ 3] 1.0- 2.0 sec 1.40 MBytes 11.8 Mbits/sec  0.050 ms   0/14703 (0%)
          [ 3] 2.0- 3.0 sec 1.40 MBytes 11.8 Mbits/sec  0.052 ms   0/14708 (0%)
          [ 3] 3.0- 4.0 sec 1.40 MBytes 11.8 Mbits/sec  0.057 ms   0/14704 (0%)
          [ 3] 4.0- 5.0 sec 1.40 MBytes 11.8 Mbits/sec  0.072 ms   0/14706 (0%)
          [ 3] 5.0- 6.0 sec 1.40 MBytes 11.8 Mbits/sec  0.075 ms   0/14705 (0%)
          [ 3] 6.0- 7.0 sec 1.40 MBytes 11.8 Mbits/sec  0.060 ms   0/14707 (0%)
          [ 3] 7.0- 8.0 sec 1.40 MBytes 11.8 Mbits/sec  0.073 ms   0/14703 (0%)
          [ 3] 8.0- 9.0 sec 1.40 MBytes 11.8 Mbits/sec  0.073 ms   0/14706 (0%)
          [ 3] 0.0-10.0 sec 14.0 MBytes 11.8 Mbits/sec  0.064 ms   0/147020 (0%)
            要獲得帶寬數(shù)據(jù),需要不斷在client端增加帶寬值,直到server端出現(xiàn)輕微的丟包為止,此時server端顯示的帶寬就是被測系統(tǒng)的吞吐量。
            6.    測試時延
            那么有朋友會問,iperf不能用來測試時延,而時延又是比較重要的QOS參數(shù),有什么辦法嗎?
            其實最簡單的辦法就是使用Ping程序。我們經(jīng)常用它來測試特定主機能否通過IP到達,
            程序會按時間和反應(yīng)成功的次數(shù),估計丟包率和分組來回時間(即網(wǎng)絡(luò)時延)。
            當然,如果我們能成功構(gòu)造一個回環(huán)測試路徑,那么測試時延就輕而易舉了,我們可以使用iperf發(fā)送數(shù)據(jù),同時結(jié)合tcpdump抓包工具,經(jīng)過wireshark分析.cap文件就可以得出包來回時間,也就是往返時延。
            7.    使用TCP測試帶寬應(yīng)注意的問題
            有時候,我們需要使用TCP來測試網(wǎng)絡(luò)帶寬。這里有一個參數(shù)需要特別注意,那就是TCP窗口大小,可以使用-w參數(shù)指定。
            網(wǎng)絡(luò)通道的容量capacity = bandwidth * round-trip time
            而理論TCP窗口的大小就是網(wǎng)絡(luò)通道的容量。
            比如,網(wǎng)絡(luò)帶寬為40Mbit/s,回環(huán)路徑消耗時間是2ms,那么TCP的窗口大小不小于40Mbit/s×2ms = 80kbit = 10Kbytes
            此時我們可以查詢iperf默認的TCP窗口大小來決定是否需要設(shè)置此參數(shù),在此例中,窗口大小應(yīng)設(shè)計大于10Kbytes,當然,這僅僅是理論值,在實際測試中可能需要作出調(diào)整。
            參數(shù)說明
            -s 以server模式啟動,eg:iperf -s
            -c 以client模式啟動,host是server端地址,eg:iperf -c 222.35.11.23
            通用參數(shù)
            -f [k|m|K|M] 分別表示以Kbits, Mbits, KBytes, MBytes顯示報告,默認以Mbits為單位,eg:iperf -c 222.35.11.23 -f K
            -i sec 以秒為單位顯示報告間隔,eg:iperf -c 222.35.11.23 -i 2
            iperf是client端向server端發(fā)送數(shù)據(jù)
            server端顯示的是接收速率,最好加i參數(shù),進行速率跟蹤
            client 顯示的是發(fā)送速率
            server 顯示接收速率
            -l 緩沖區(qū)大小,默認是8KB,eg:iperf -c 222.35.11.23 -l 16
            可以使用不同的包長,進行測試
            -m 顯示tcp最大mtu值
            -o 將報告和錯誤信息輸出到文件eg:iperf -c 222.35.11.23 -o c:iperflog.txt
            -p 指定服務(wù)器端使用的端口或客戶端所連接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999
            -u 使用udp協(xié)議
            測試htb的時候最好用udp,udp通信開銷小,測試的帶寬更準確
            -w 指定TCP窗口大小,默認是8KB
            如果窗口太小,有可能丟包
            -B 綁定一個主機地址或接口(當主機有多個地址或接口時使用該參數(shù))
            -C 兼容舊版本(當server端和client端版本不一樣時使用)
            -M 設(shè)定TCP數(shù)據(jù)包的最大mtu值
            -N 設(shè)定TCP不延時
            -V 傳輸ipv6數(shù)據(jù)包
            server專用參數(shù)
            -D 以服務(wù)方式運行ipserf,eg:iperf -s -D
            -R 停止iperf服務(wù),針對-D,eg:iperf -s -R
            client端專用參數(shù)
            -d 同時進行雙向傳輸測試
            -n 指定傳輸?shù)淖止?jié)數(shù),eg:iperf -c 222.35.11.23 -n 100000
            -r 單獨進行雙向傳輸測試
            -b 指定發(fā)送帶寬,默認是1Mbit/s
            在測試qos的時候,這是最有用的參數(shù)。
            -t 測試時間,默認10秒,eg:iperf -c 222.35.11.23 -t 5
            默認是10s
            -F 指定需要傳輸?shù)奈募?/div>
            -T 指定ttl值
           測試實例:
            使用:
            此軟件需要安裝到兩端需要互測的機器上,然后一段作為服務(wù)端監(jiān)聽,一端作為客戶端連接。具體命令可以iperf -h 查看下。
            服務(wù)端:
            iperf -s -u
            -s 標記此端為服務(wù)端
            -u標記自己為UDP監(jiān)聽
            -p 指定自己監(jiān)聽端口
            客戶端:
            iperf -c 1.1.1.1 -i 1 -u -t 60 -F /root/a.zip -P 5
            -c標記自己為客戶端
            -i 設(shè)定輸出值間隔
            -u使用傳輸協(xié)議為UDP
            -t 設(shè)定測試時間為60秒
            -F 指定傳輸文件(該項可有可無)
            -P 指定進程數(shù),如果設(shè)置為5,那么也就相當與對端建立五個連接
            注意事項:
            1.發(fā)包測試需要分為UDP測試與TCP測試,其中服務(wù)端需要用-u命令去區(qū)分監(jiān)聽協(xié)議。
            2.TCP協(xié)議測試不能計算出時延與丟包率,而且還不能指定發(fā)送帶寬。
            案例:
          [root@localhost ~]# iperf -c 192.168.1.100 -u -i 1 -t 10 -b 2M #指定2M帶寬向?qū)Χ税l(fā)送數(shù)據(jù)
          ------------------------------------------------------------
          Client connecting to 192.168.1.100, UDP port 5001
          Sending 1470 byte datagrams
          UDP buffer size: 108 KByte (default)
          ------------------------------------------------------------
          [ 3] local 192.200.40.112 port 32784 connected with 218.60.1.20 port 5001 #與對端連接上的信息
          [ ID] Interval Transfer Bandwidth #輸出行的解釋
          [ 3] 0.0- 1.0 sec 12.0 GBytes 103 Gbits/sec
          [ 3] 1.0- 2.0 sec 244 KBytes 2.00 Mbits/sec
          [ 3] 2.0- 3.0 sec 244 KBytes 2.00 Mbits/sec
          [ 3] 3.0- 4.0 sec 244 KBytes 2.00 Mbits/sec
          [ 3] 4.0- 5.0 sec 244 KBytes 2.00 Mbits/sec
          [ 3] 5.0- 6.0 sec 245 KBytes 2.01 Mbits/sec
          [ 3] 6.0- 7.0 sec 244 KBytes 2.00 Mbits/sec
          [ 3] 7.0- 8.0 sec 244 KBytes 2.00 Mbits/sec
          [ 3] 8.0- 9.0 sec 244 KBytes 2.00 Mbits/sec
          [ 3] 9.0-10.0 sec 244 KBytes 2.00 Mbits/sec
          [ 3] 0.0-10.0 sec 12.0 GBytes 10.3 Gbits/sec
          [ 3] Sent 1702 datagrams
          [ 3] Server Report: #輸出報告
          [ 3] 0.0-10.6 sec 263 KBytes 204 Kbits/sec 36.313 ms 1518/ 1701 (89%) #間距 ,傳輸總字節(jié),速率,時延,丟包率。
          [ 3] 0.0-10.6 sec 1 datagrams received out-of-order  #亂序
            服務(wù)端:
          [root@localhost ~]# iperf -s -u #設(shè)定此端為服務(wù)端
          ------------------------------------------------------------ #本段設(shè)置信息
          Server listening on UDP port 5001
          Receiving 1470 byte datagrams
          UDP buffer size: 108 KByte (default)
          ------------------------------------------------------------
          [ 3] local 218.60.1.20 port 5001 connected with 218.241.145.36 port 32784 #如果對端連接上了本端才會出現(xiàn)該信息
          [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
          [ 3] 0.0-10.6 sec 263 KBytes 204 Kbits/sec 36.314 ms 1518/ 1701 (89%)
          [ 3] 0.0-10.6 sec 1 datagrams received out-of-order
            iPerf同樣也可以用于測量UDP數(shù)據(jù)包吞吐量、丟包和延遲指標。與TCP測試不同的是,UDP測試不采取盡可能快地發(fā)送流量的方式。與之相對的是,iPerf嘗試發(fā)送1 Mbps的流量,這個流量是打包在1470字節(jié)的UDP數(shù)據(jù)包中(成為以太網(wǎng)的一幀)。我們可以通過指定一個目標帶寬參數(shù)來增加數(shù)據(jù)量,單位可以是Kbps 或Mbps(-b #K 或 --b #M)。舉例如下:
            測量UDP丟包和延遲
            然而,上面的例子只說明了iPerf客戶端能夠以多快的速度傳輸數(shù)據(jù)。為了得到更多關(guān)于UDP發(fā)送的數(shù)據(jù),我們必須查看服務(wù)器上的結(jié)果:
            測量UDP丟包和延遲
            這樣,我們就可以看到吞吐量(間隔1秒測量的),以及丟包數(shù)(丟失的數(shù)據(jù)屯接收到的數(shù)據(jù)對比)和延遲(如jitter——在連續(xù)傳輸中的平滑平均值差)。延遲和丟失可以通過應(yīng)用的改變而被兼容。比如,視頻流媒體通過緩沖輸入而能夠容忍更多的延遲,而語音通訊則隨著延遲增長性能下降明顯。
            UDP測試可以通過改變報文緩沖長度進行優(yōu)化,長度單位為Kbytes 或 Mbytes(-l #K or #M)。與以太網(wǎng)幀的1500比特的MTU(最大轉(zhuǎn)換單位)不同的是,802.11數(shù)據(jù)幀可以達到2304比特(在加密之前)。
            但是,如果你正在測試的路徑中包括Ethernet和802.11,那么要控制你的測試數(shù)據(jù)包長度,使它在一個Ethernet幀以內(nèi),以避免分片。
            另一個有趣的iPerf UDP測試選項是服務(wù)類型(Type of Service, ToS),它的大小范圍從0x10 (最小延遲) 到0x2 (最少費用)。在使用802.11e來控制服務(wù)質(zhì)量的WLAN中,ToS是映射在Wi-Fi多媒體(WMM)存取范疇的。

          對比兩種方式
            在802.11a/b/g網(wǎng)絡(luò)中,無線電的傳輸性能變化在在兩個方向上都很相似。比如,當距離導(dǎo)致數(shù)據(jù)傳輸率下降或干擾造成重要數(shù)據(jù)包丟失時,發(fā)送和接收的應(yīng)用吞吐量都受到影響。
            在802.11n網(wǎng)絡(luò)中,MIMO天線和多維空間流使問題又有所不同。從筆記本發(fā)送到AP上的數(shù)據(jù)幀可能(有意地)使用一個完全與從AP發(fā)送到筆記本上幀時不同的空間路徑。這樣的結(jié)果是,現(xiàn)在對兩個方向的測試都很重要的。幸運的是,iPerf本身就已經(jīng)擁有這個功能,這是由兩個選項所控制的:
            --d選項是用于告訴iPerf服務(wù)器馬上連接回iPerf客戶端的由--L 所指定端口,以支持同時測試兩個方向的傳輸。
            --r選項雖然有些類似,但是它是告訴iPerf服務(wù)器等到客戶端測試完成后再在相反的方向中重復(fù)之前的測試。
            最后,如果你需要支持多點傳送應(yīng)用,那么可以使用-B選項指定多點傳送組IP地址來啟動多個iPerf服務(wù)器。然后再打開你的iPerf客戶端,連接之前啟動的多點傳送組iPerf服務(wù)器。
            使用測試工具iPerf監(jiān)控?zé)o線網(wǎng)絡(luò)性能:圖形化測試結(jié)果
            如本文介紹的,iPerf程序可以在命令行下運行,它或者也在一個名為JPerf的Java實現(xiàn)前端工具上運行。JPerf不僅能簡化復(fù)雜命令行參數(shù)的構(gòu)造,而且它還保存測試結(jié)果——同時實時圖形化顯示結(jié)果。
            圖1 使用JPerf運行iPerf
            事實上,iPerf測試工具被嵌入到一些其它的網(wǎng)絡(luò)流量分析工具中——包括底層LAN分析工具,如AirMagnet。比如,在下面的屏幕截圖中顯示了一個Wi-Fi筆記本上運行的AirMagnet作為iPerf客戶端與安裝在有線網(wǎng)絡(luò)上的常規(guī)iPerf服務(wù)器進行交互的情況。
            圖2 使用AirMagnet運行iPerf
            總結(jié)
            正如我們所看到的,iPerf簡化了對基于TCP數(shù)據(jù)流應(yīng)用和UDP數(shù)據(jù)包應(yīng)用的端對端性能測定。然而,iPerf仍然無法模擬所有類型的應(yīng)用——比如,對于交互式上網(wǎng)的模擬就不是很好。同時,用于iPerf Wi-Fi測試的WLAN適配器也會影響你的測試——為了獲得更好的測試結(jié)果,我們可以配置一個類似于“實際”用戶的有代表性的適配器。
            盡管如此,iPerf仍然是一個非常方便的工具,它可以幫助你生成和檢測WLAN應(yīng)用流量。同時,因為iPerf可以方便以開源軟件方式獲取,因此使用它來在其它位置重復(fù)創(chuàng)建測試環(huán)境是一個很好的方法——如分公司、供應(yīng)商技術(shù)支持等等。想要了解更多關(guān)于iPerf的信息,可以閱讀NLANR上的更老的文件或者瀏覽SourceForge上新的項目頁面。

          posted on 2014-01-27 10:49 順其自然EVO 閱讀(3523) 評論(0)  編輯  收藏 所屬分類: 測試學(xué)習(xí)專欄

          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計

          • 隨筆 - 3936
          • 文章 - 404
          • 評論 - 179
          • 引用 - 0

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 满城县| 开远市| 邹城市| 桓仁| 富蕴县| 墨江| 银川市| 彩票| 九龙县| 丹巴县| 绥芬河市| 琼中| 朔州市| 海丰县| 正镶白旗| 元阳县| 赞皇县| 广灵县| 濮阳市| 易门县| 同仁县| 印江| 临城县| 施甸县| 梓潼县| 武鸣县| 红安县| 兰溪市| 扬州市| 高密市| 保定市| 连山| 五原县| 同心县| 罗江县| 阿拉善左旗| 阳信县| 南投县| 漳平市| 长武县| 建始县|