弱網(wǎng)背景
app研發(fā)不同于實(shí)驗(yàn)室里做研究,哪里有“理想環(huán)境”。
理想里,用戶(hù)用著性能卓越的手機(jī),連著暢通無(wú)阻的wifi網(wǎng)絡(luò)。
現(xiàn)實(shí)是,他們可能正用著你聞所未聞的機(jī)型,穿梭于地鐵、公交、火車(chē)、鄉(xiāng)間、大山….. 信號(hào)“若隱若現(xiàn),撲朔迷離”…
弱網(wǎng)絡(luò)引發(fā)的crash,anr,丟包等各種問(wèn)題,除了親身到各個(gè)網(wǎng)絡(luò)崩潰的地方測(cè)試,祈求問(wèn)題重現(xiàn)外,還有弱網(wǎng)絡(luò)模擬測(cè)試工具可以助一臂之力!
弱網(wǎng)測(cè)試工具
1、fiddler:模擬網(wǎng)路延遲;
2、network emulation for windows toolkit:模擬網(wǎng)絡(luò)丟包場(chǎng)景;(網(wǎng)絡(luò)、丟包、延時(shí))
3、ATC;
4、iOS平臺(tái),通過(guò)自帶的開(kāi)發(fā)者選項(xiàng) 》Network Link Conditioner;
5、charles;
6、360wifi、獵豹wifi;
下面將講解Network-Emulator-Toolkit網(wǎng)絡(luò)模擬使用:
一、安裝
安裝方式:默認(rèn)安裝
應(yīng)用平臺(tái):Windows操作系統(tǒng)
軟件版本:x86/x64
二、原理介紹

如上圖,一個(gè)ADSL用戶(hù)通過(guò)modem連接到網(wǎng)絡(luò),通過(guò)網(wǎng)絡(luò)應(yīng)用如IE,MSN,同某個(gè)服務(wù)器通信。如下,我們把上圖簡(jiǎn)化為如下端到端的連接和訪問(wèn)操作。

如上,模擬客戶(hù)端和模擬服務(wù)器通過(guò)以太網(wǎng)連接,并將NEWT安裝在服務(wù)器上??蛻?hù)端和服務(wù)器之間的通信都途經(jīng)NEWT,這里NEWT充當(dāng)圖1中的ADSL。
NEWT通過(guò)虛擬鏈路(virtual link)封裝了端到端的網(wǎng)絡(luò)連接行為,并且通過(guò)操縱流經(jīng)虛擬鏈路的數(shù)據(jù)包交換模擬真實(shí)網(wǎng)絡(luò)行為。
有時(shí)候,我們期望僅通過(guò)模擬操作影響來(lái)自某個(gè)客戶(hù)端與服務(wù)器的數(shù)據(jù)交互,但是不影響服務(wù)器同其它客戶(hù)端的交互。這個(gè)可通過(guò)包過(guò)濾器(packet filter)和虛擬鏈路來(lái)實(shí)現(xiàn)。
NEWT可以安裝在客戶(hù)端,也可以安裝在服務(wù)端,只要客戶(hù)端和服務(wù)器通過(guò)物理鏈路連接,且途徑NEWT實(shí)例即可。
具體實(shí)現(xiàn)如下:

進(jìn)來(lái)的數(shù)據(jù)包被第一個(gè)信道(channel)處理。如果數(shù)據(jù)包符合第一個(gè)過(guò)濾器列表(Filter)中過(guò)濾器設(shè)置的過(guò)濾條件,則數(shù)據(jù)包流經(jīng)給第一個(gè)信道的虛擬鏈路(Link),否則流經(jīng)下一個(gè)信道,依此類(lèi)推。如果到最后,都沒(méi)有匹配的,則傳遞給上層應(yīng)用。同理,如果信道沒(méi)有設(shè)置任何過(guò)濾器,則所有包都會(huì)流經(jīng)該信道。
注:這里的?“incoming packet”?是從NEWT驅(qū)動(dòng)的角度來(lái)看的。所有接收到的和發(fā)送的包,通過(guò)同樣的處理流經(jīng)NEWT驅(qū)動(dòng)都被視為流入包。
操縱包

三、使用Network Emulator Client
1. 使用步驟
a.新建Channel[可選]
打開(kāi)后,默認(rèn)就新建了一個(gè)名為“VirtualChannel 1”的channel。如果有必要,可以新建多個(gè)Channel。
入口:菜單欄?Configuration -> New Filter?或工具欄的快捷按鈕

b.新建Filter
入口:菜單欄?Configuration -> New Filter?或工具欄的快捷按鈕

說(shuō)明:
如上,可選擇所有網(wǎng)絡(luò)(ALL NetWork),也可以選擇IPV4、IPV6(本地IP(Local IP),或者遠(yuǎn)程IP(Remote IP)及子網(wǎng)掩碼(IP Mask)),
選擇IPV4、IPV6的情況下,還可以選擇協(xié)議(Protocol),針對(duì)TCP\UDP協(xié)議,還可以指定本地端口(Local Port)或遠(yuǎn)程端口(Remote Port)大小范圍
可以選擇網(wǎng)卡適配器(Adapaters,?這里為mac地址)
選好過(guò)濾條件后,點(diǎn)擊添加(ADD)按鈕,添加過(guò)濾條件;選中已添加的記錄,點(diǎn)擊刪除(Delete)按鈕,可刪除記錄;選中已添加的記錄,重新修改過(guò)濾條件,點(diǎn)擊修改按鈕(Modify),可修改記錄。
c.新建連接
入口:菜單欄?Configuration -> New Link?或工具欄的快捷按鈕

注:未配置的情況下,左右兩條線都是灰色的
詳細(xì)說(shuō)明(上行為例)
Loss

說(shuō)明:
No Loss:默認(rèn),不模擬丟包。
Periodic loss:?模擬周期性的丟包。按填寫(xiě)數(shù)量(設(shè)為x個(gè)),每x個(gè)包,就丟一個(gè)包(one packet is dropped per given number of packets)。
Random loss:?模擬隨機(jī)丟包,按給定丟包的概率,隨機(jī)丟包。
Burst loss:?模擬根據(jù)給定的可能性進(jìn)行丟包。當(dāng)發(fā)生一個(gè)丟包事件時(shí),接著連續(xù)丟幾個(gè)包(丟包數(shù)量控制在最大(max)最小值(min)之間)。
G-E loss:?模擬發(fā)生數(shù)據(jù)包丟失遵循Gilbert-Elliot模型,由兩個(gè)狀態(tài)組成:好的狀態(tài)和壞的狀態(tài)??煞謩e為這2個(gè)狀態(tài)指定數(shù)據(jù)包丟失率,同時(shí)可設(shè)置網(wǎng)絡(luò)傳輸在這兩種狀態(tài)的概率
(And the network transit between the two states is at given transition probabilities)
Error

說(shuō)明:
真實(shí)世界中,當(dāng)數(shù)據(jù)包經(jīng)過(guò)網(wǎng)絡(luò)傳輸時(shí),包中的一到多個(gè)字節(jié)(bit)數(shù)據(jù)可能發(fā)生錯(cuò)誤。
No Error:不模擬傳輸錯(cuò)誤。
Random error:根據(jù)給定的比例,模擬隨機(jī)發(fā)生傳輸錯(cuò)誤。
G-E error:發(fā)生傳輸錯(cuò)誤遵循Gilbert-Elliot Model,?模型,由兩個(gè)狀態(tài)組成:好的狀態(tài)和壞的狀態(tài)??煞謩e為這2個(gè)狀態(tài)指定數(shù)據(jù)包丟失率,同時(shí)可設(shè)置網(wǎng)絡(luò)傳輸在這兩種狀態(tài)的概率(the network transit between the two states according to giventransition probabilities)
錯(cuò)誤概率單元(Error Rate Unit):
Bit error:?設(shè)置出錯(cuò)概率為每個(gè)字節(jié)出錯(cuò)的概率。
Packet error:?設(shè)置出錯(cuò)概率為每個(gè)包出錯(cuò)的概率。
出錯(cuò)和丟包的關(guān)系
大多數(shù)情況下,包出錯(cuò)導(dǎo)致包丟失,特殊情況下,包中的數(shù)據(jù)被編碼,協(xié)議??苫謴?fù)被損壞的包,經(jīng)過(guò)修正后,包為可接受的包,即包不丟失。此外,除了包出錯(cuò)會(huì)導(dǎo)致包丟失,其它因素也會(huì)影響包丟失,如連接失敗(Link failure),緩沖區(qū)溢出(buffer overflow),隊(duì)列管理和傳輸超時(shí)(transmission timeout)等。
Latency

說(shuō)明:
延遲來(lái)自某應(yīng)用發(fā)送的數(shù)據(jù)包被另一個(gè)應(yīng)用程序接收到的時(shí)間。
Fixed delay:?按給定值,延遲固定時(shí)間(單位:毫秒)packets are delayed fora fixed amount of time.
Uniform delay:?按統(tǒng)一分布,延遲一定量的時(shí)間(時(shí)間控制在最大最小值之間)
Normal delay:?按正態(tài)分布.延遲一定量的時(shí)間(average:平均值,Devation:偏差)
Linear delay:?延遲一定量的時(shí)間(在給定時(shí)間周期(Period)內(nèi),延遲的時(shí)間大小從最小值線性增加到最大值,當(dāng)達(dá)到最大值時(shí),又從最小值開(kāi)始。
Burst delay:?根據(jù)給定概率(Probability),延遲一定量的時(shí)間(Latency),?丟包數(shù)控制最大值和最小值之間
BW&Queue

如果不指定帶寬(bandwith),則不修改傳輸速率。
如果不設(shè)置隊(duì)列,則不對(duì)接到的包做任何隊(duì)列操作
Queue
Normal queue:所有接收到的包都被放入一個(gè)指定隊(duì)列大小的先進(jìn)先出(First In, First Out)隊(duì)列。
Randomly Early Detection (RED) queue:所有接收到的包都被放入一個(gè)RED隊(duì)列。如果隊(duì)列大小小于給定的最低閾值(Minimum Threshold),隊(duì)列被評(píng)估為不擁擠的,什么都不做;如果隊(duì)列大小大于給定最大閾值(Maximum
Threshold),則隊(duì)列被評(píng)估為擁擠的,根據(jù)丟包規(guī)則,丟棄一些包。
丟包規(guī)則:
Drop front:?必要時(shí),丟棄位于隊(duì)列頭部的包。.
Drop tail:?必要時(shí),丟棄位于隊(duì)列尾部的包。
Drop random:必要時(shí),根據(jù)統(tǒng)一分布,隨機(jī)丟個(gè)包。
Queue Mode:設(shè)置隊(duì)列大小的單位,以包(Packet Mode)為單位或者以字節(jié)為單位Byte Mode
BgTraffic

一些網(wǎng)絡(luò)數(shù)據(jù)包交換和模擬的兩端沒(méi)有任何關(guān)系,被指為背景流(background traffic)。這些背景流會(huì)帶來(lái)延時(shí)效果。
Constant-bit rate (CBR) traffic:?根據(jù)給定的固定比例生成背景流(每XX kbps、mbps數(shù)據(jù)包,xx字節(jié)背景流)
Exponential traffic:根據(jù)指數(shù)On/Off時(shí)間分布生成背景流。個(gè)人理解,Burst則為生成背景流時(shí)間,Idle則不生成背景流時(shí)間(時(shí)間單位:秒
Pareto traffic:?同上,不過(guò)是排列圖分布(Pareto)
Recorder

模擬收到的包不是按發(fā)送順序排序的。
No Recoder:不模擬
其它:具體待定
Disconnection

模擬周期性斷開(kāi)連接的行為。
Connection time:?一段時(shí)間周期內(nèi),link保持連接狀態(tài)的持續(xù)時(shí)間。
Disconnection time:?一段時(shí)間周期那日,link保持?jǐn)嚅_(kāi)狀態(tài)的持續(xù)時(shí)間
Disconnection rates: link發(fā)生斷開(kāi)連接的比率
例子:設(shè)置connection time為10秒,disconnection為5秒,那么周期為15秒,如果設(shè)置rate為0.4,那么平均每10秒內(nèi),有4秒是link處于連接斷開(kāi)的時(shí)間(if connection time is 10 seconds, time is 5 seconds, the period will be 15 seconds. If rate is 0.4, then on average in 4 out of 10 periods disconnection occurs.?)。
點(diǎn)擊觸發(fā)跟蹤按鈕[可選]
點(diǎn)擊“黃色小腳丫”按鈕,確保按鈕為“點(diǎn)選”狀態(tài)
注:RT Traffic Monitor,RT Packet Monitor,Connection Analyzer,Information Watch
開(kāi)啟控制
點(diǎn)擊開(kāi)始按鈕
停止控制
點(diǎn)擊停止按鈕
保存文件[可選]
保存配置文件為xml,方便后續(xù)導(dǎo)入,重用
附工具欄說(shuō)明

連接方式:
Dialup56k:通過(guò)傳輸速率為56kbps的modem進(jìn)行連接
ADSL(128/512):?通過(guò)上行128kbps,下行512kbps的ADSL連接。
GPRS:它是GSM移動(dòng)電話用戶(hù)可用的一種移動(dòng)數(shù)據(jù)業(yè)務(wù),理論傳輸速率115kbit/s,實(shí)際可達(dá)53.6Kbps。
CDMA2000:3G移動(dòng)通訊標(biāo)準(zhǔn)。
WCDMA:寬帶碼分多址(英語(yǔ):Wideband Code Division Multiple Access,常簡(jiǎn)寫(xiě)為W-CDMA),是一種3G蜂窩網(wǎng)絡(luò),使用的部分協(xié)議與2G GSM標(biāo)準(zhǔn)一致。
IEEE802.11b:通過(guò)無(wú)線局域網(wǎng),帶寬最高可達(dá)11Mbps,實(shí)際的工作速度在5Mb/s左右,室外為300米;在辦公環(huán)境中最長(zhǎng)為100米
案例:

App弱網(wǎng)測(cè)試整理總結(jié):
