Network-Emulator-Toolkit網(wǎng)絡(luò)模擬器使用筆記

弱網(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é):

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容