http://www.pubyun.com/blog/deveops/%E7%BD%91%E7%BB%9C%E8%B4%A8%E9%87%8F%E6%8C%87%E6%A0%87%E5%8F%8A%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7iperf/
服務器上架以,首要的是進行操作系統安裝,然后進行聯通性測試和網絡質量測試。我們曾經有過教訓,一個服務器上的業務一直不正常,技術人員排查了好久,在應用和系統上一直沒有找到問題,最后發現是一根質量低劣的成品網絡線,造成網絡質量極差從而引起系統無法正常工作。
網絡質量的指標,主要有以下幾個:
- 帶寬(throughput),網絡的吞吐率,端到端之間可以傳輸的最大速率。比如服務器之間的千兆網絡帶寬是1000Mbps,或者用戶adsl上網速率是 2Mbps。
- 延時(latency),數據包從本地傳輸到對端之間需要的時間,一般是來回的時間。如果延時過大,就會覺得網絡慢,特別是一些交互性強的應用。比如延時超過300ms,通過ssh就會明顯感到服務器響應比較慢,跟不上鍵盤輸入的速度。延時一方面和兩地之間的傳輸距離有關,比如中美之間通過海底光纜傳輸半個地球,來回距離加起來最起碼4萬公里,光速是30萬公里每秒,所以理論延時最起碼是130ms,再加上光纜需要轉接和繞路,以及其他損耗,所以中美之間網絡延時最好的時候也在170ms左右。延時另外一個原因是網絡帶寬的占用率,如果占用率高,則延時也高,比如天朝的特色,電信和網通之間,互相掐架,互聯帶寬很小,網絡瓶頸,造成互相之間延時很高。很多時候,同一個城市的網通到電信,比到美國去繞一圈還要慢。延時的其他原因,是cpu處理跟不上等。
- 丟包(loss),由於線路帶寬占用過高,數據包從一端到另外一端傳輸的途中,會產生丟失。丟包率是網絡的一個重要指標,一旦產生丟包,說明網絡帶寬不足,系統會自動重傳,導致繼續劣化,所以丟包率超過10%以后,網絡質量會迅速劣化。
- 抖動(jitter),如果延時不穩定,忽快忽慢,網絡就存在抖動。抖動這個指標,在VOIP,視頻會議等場合,是一個非常重要的指標,如果產生抖動,往往聲音和圖像也會抖動,無法聽清楚或者看清楚。
各種應用,對上述指標的敏感性不一,比如http等應用,往往只對帶寬和延時敏感,而游戲類應用,對延時、丟包、帶寬敏感,及時語音和視頻對上述幾個指標都比較敏感。
普通用戶測試網絡質量的工具,通常的有:
1、ping
誰最常用的一個測試網絡質量的一個工具,在各種操作系統、網絡設備中一般都自帶該工具。ping可以測試網絡的延時、丟包率,優點是使用方便,不用安裝。
ping的缺陷也比較明顯:
- 測試的時候,僅僅發送很小的負載icmp包,無法測試真實負載下的網絡質量,比如單位里的網絡平時是正常的,但是開一個迅雷下載,就很糟糕了。
- 測試的指標單一,對於帶寬、抖動無法測試
2、下載工具,可以測試帶寬
這里介紹一個優秀的網絡質量測試工具iperf,這個工具在我們的 asterisk 網絡電話項目中,立下了汗馬功勞。iperf 可以測試真實載荷下的網絡質量,可以測試端到端的網絡質量,可以測試一定吞吐率下的丟包、抖動。
iperf 在 linux 下和windows下都有二進制包。安裝方法:
- centos 下,需要使用EPEL 的軟件包
yum install iperf on centos6
=======================
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
rpm -K rpmforge-release-0.5.2-2.el6.rf.*.rpm
rpm -i rpmforge-release-0.5.2-2.el6.rf.*.rpm
yum install iperf
- 一般的網絡傳輸,使用 tcp 測試(普通網絡應用),測試傳輸帶寬:
- 語音服務器應該使用 udp 方式 (-u 選項),主要用於voip,視頻會議,一些游戲:
服務器上運行:
iperf -s -u
客戶端上測試在8Mbps帶寬情況下的網絡質量:
iperf -u -c 172.17.0.5 -b 8M -i 1 -w 1M -t 10
客戶端起20個進程,每個進程 100k帶寬,測試網絡質量
iperf -u -c 172.17.0.5 -b 100k -i 1 -w 1M -t 30 -P20
測試結果包括帶寬、抖動、丟包:
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec 0.003 ms 0/ 893 (0%)
http://www.sdnlab.com/2961.html
2 工作原理
使用Iperf測試時必須將一台主機設置為客戶端,一台主機設置為服務器。
Iperf測試TCP
Iperf測試TCP帶寬的原理比較簡單,在客戶端和服務端建立三次握手連接后,客戶端帶寬的大小等於發送的總數據除以發送的總時間。對服務端測得的帶寬,則是接收的總數據除以所花時間。
TCP模式下簡單舉例:
Server:iperf -s
Client:iperf -c 10.0.0.1 -i 1
客戶端到服務器10.0.0.1上帶寬測試,每一秒鍾打印一次信息。
Iperf測試UDP
Iperf測試UDP性能時,客戶端可以指定UDP數據流的速率。客戶端發送數據時,將根據客戶端提供的速率計算數據報發送之間的時延。
客戶端還可以指定發送數據報的大小。每個發送的數據報包含一個ID號,用來唯一標識報文,服務器端根據該ID號來確定數據報丟失和亂序。
當把UDP報文大小設置可以將整個報文放入IP層的包(packet)內時,那么UDP所測得的報文丟失數據即為IP層包的丟失數據,這提供了一個有效的測試包丟失情況的方法。
數據報傳輸延遲抖動 (Jitter)的測試由服務器端完成,客戶發送的報文數據包含有發送時間戳,服務器端根據該時間信息和接收到報文的時間戳來計算傳輸延遲抖動。傳輸延遲抖動反映傳輸過程中是否平滑。由於它是一個相對值,所以並不需要客戶端和服務器端時間同步。
UDP模式下簡單舉例:
Server:iperf -s -u
Client:iperf -c 10.0.0.1 -u -b 100M
在UDP模式下,客戶端以100Mbps為數據發送速率,測試客戶端到服務器10.0.0.1上的帶寬。
綜上,用以下方法測試網絡連接的質量:
- 延時(反應時間或者RTT):用ping命令量度
- Jitter(延時變化):用Iperf UDP測試來量度
- 數據報丟失:用Iperf UDP測試來量度
- 帶寬:通過TCP測試來量度
4 測試實例
測試環境
1) 已搭建好一套SDN網絡環境,使用Mininet模擬交換機和主機連接到一款OpenFlow控制器
2) 使用Mininet自帶的Iperf工具
應用實例
實例一:最簡參數實例
Iperf客戶端連接Iperf服務器的TCP默認端口5001,否則我們可以用-p參數修改Iperf服務器的端口,客戶端與服務器必須加上同樣的端口。結果顯示的帶寬是從用戶到服務器之間的帶寬。
本文未完,更多詳情請搜索http://www.sdnlab.com/2961