為什么需要測量帶寬、延遲、抖動和丟包率?
當我們說一個網(wǎng)絡(luò)環(huán)境好時,通常是指我們“感覺”訪問網(wǎng)站立刻就打開了;可是如果反過來,一個網(wǎng)站很久才打開,就一定是網(wǎng)絡(luò)環(huán)境差嗎?未必,也可能是網(wǎng)站本身有問題。如果這是自己的網(wǎng)站,你一定不希望通過反復(fù)刷新頁面,或者多拿幾臺電腦訪問去“感覺”它的速度作為判斷網(wǎng)絡(luò)是否良好的依據(jù),我們需要一個更加可靠的技術(shù)手段。這些指標便是判斷到服務(wù)器的網(wǎng)絡(luò)是否良好的基礎(chǔ)指標。
除了故障排查外,以下幾種情況我們也需要了解這些參數(shù):
-
購買
VPS
:在你購買一臺VPS
,特別是外國的VPS
時,你一定會想了解到底在外國和在國內(nèi)能不能順暢地訪問自己的VPS
,特別是帶寬參數(shù)是否跟實際購買的一致; - 性能測試:你希望對自己的網(wǎng)站做性能測試,需要確保自己的網(wǎng)絡(luò)環(huán)境是滿足指標要求的;
什么樣的指標是合格的?
首先,沒有一個通用的指標,不同的應(yīng)用場景所需要的指標各不相同,比如 IP電話、視頻與訪問網(wǎng)站的網(wǎng)絡(luò)指標要求就各不相同,這里只分析網(wǎng)站訪問的情況。
從服務(wù)器環(huán)境角度看,服務(wù)器只能控制自己的帶寬,但是普通用戶實際訪問的環(huán)境是控制不了的,服務(wù)器需要做的是在差的環(huán)境也能提供較好的體驗,這不是本文的主題,所以我們談指標時并不是指服務(wù)器的角度。
從用戶(開發(fā)者或者普通用戶)環(huán)境角度看,如果一個網(wǎng)站本身是符合要求的(Google Pagespeed Insight
達到90分以上),網(wǎng)絡(luò)環(huán)境應(yīng)該滿足什么樣的指標,用戶打開我們的網(wǎng)站才會很快。這本身也是一個經(jīng)驗指標,并沒有一個定論,下面的指標是我在做性能測試時要求的指標,它的要求高于普通用戶瀏覽網(wǎng)站,因此能夠滿足此指標,網(wǎng)絡(luò)環(huán)境是沒問題的。
- 帶寬:與服務(wù)商提供的最大帶寬接近
-
延遲:
<100ms
-
抖動:
<20ms
-
丟包率:
<1%
測量方法
測量服務(wù)器帶寬
使用iperf
工具測試服務(wù)器帶寬,它分為服務(wù)端與客戶端,兩邊都要安裝iperf
工具。在Linux
通過yum
或者apt-get
即可直接安裝。
服務(wù)端(假設(shè)IP
為106.14.26.11
)運行iperf
服務(wù):
#iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
這是一臺上下行帶寬都接近100Mbits/sec
的服務(wù)器,實測數(shù)值不應(yīng)該與該數(shù)值偏離太遠。
客戶端
測試上行和下行帶寬
$iperf -c 106.14.26.11 -t 60 -d
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 45.32.64.187, TCP port 5001
TCP window size: 197 KByte (default)
------------------------------------------------------------
[ 4] local 104.250.144.8 port 50040 connected with 106.14.26.11 port 5001
[ 5] local 104.250.144.8 port 5001 connected with 106.14.26.11 port 34386
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-60.0 sec 658 MBytes 92.0 Mbits/sec #上行帶寬
[ 5] 0.0-60.4 sec 628 MBytes 87.4 Mbits/sec #下行帶寬
從測試結(jié)果看,上行帶寬為92.0Mbits/sec
, 下行帶寬為87.2Mbits/sec
,低于服務(wù)器的100Mbits/sec
,但是沒有低得很離譜。
如果你的客戶端無法連接到
iperf
服務(wù)端,可能是主機的防火墻擋住或者VPS
提供商做了限制。對于前者,通過iptables -F
即可解決;對于后者,有幾種解法:進VPS
提供商的控制臺修改、聯(lián)系VPS
提供商、修改端口為外部可以訪問得到的端口。
測量延遲、抖動和丟包率
延遲,抖動和丟包率,直接使用ping
做測試即可。如果想測量這個值,建議抓100
個包測試:
$ ping -c 100 www.baidu.com
PING www.a.shifen.com (163.177.151.109): 56 data bytes
64 bytes from 163.177.151.109: icmp_seq=0 ttl=55 time=26.639 ms
64 bytes from 163.177.151.109: icmp_seq=1 ttl=55 time=24.329 ms
64 bytes from 163.177.151.109: icmp_seq=2 ttl=55 time=24.794 ms
64 bytes from 163.177.151.109: icmp_seq=3 ttl=55 time=22.709 ms
64 bytes from 163.177.151.109: icmp_seq=4 ttl=55 time=39.994 ms
64 bytes from 163.177.151.109: icmp_seq=5 ttl=55 time=50.786 ms
。。。省略
^C
--- www.a.shifen.com ping statistics ---
100 packets transmitted, 100 packets received, 0.0% packet loss #最后這個百分比就是丟 包率
round-trip min/avg/max/stddev = 21.505/26.743/50.786/6.613 ms #分別表示最小延遲、平均延遲、最大延遲、抖動(抖動就是延遲標準差)
根據(jù)上面的結(jié)果,我們得到結(jié)論:
延遲:26.743ms
抖動: 6.613ms
丟包率: 0.0%
符合指標要求,所以訪問百度一定很快。(這里假設(shè)帶寬是沒問題的,測量到服務(wù)器的帶寬需要服務(wù)器支持,所以是測量不了的)