最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何利用Fiddler模擬惡劣網(wǎng)絡(luò)環(huán)境

 更新時(shí)間:2023年05月11日 09:58:53   作者:百度眾測  
這篇文章主要介紹了如何利用Fiddler模擬惡劣網(wǎng)絡(luò)環(huán)境問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

在解決日常的支持需求中,經(jīng)常會遇到一些用戶反饋一些無法簡單復(fù)現(xiàn)的bug,有很大一部分的bug是由于用戶自身的網(wǎng)絡(luò)環(huán)境波動,或者是本身網(wǎng)絡(luò)環(huán)境就較為惡劣,而服務(wù)在面對這種惡劣的網(wǎng)絡(luò)環(huán)境的健壯性不夠,導(dǎo)致會出現(xiàn)一些意想不到的bug。而在正常的開發(fā)自測過程中很難去營造出這種惡劣的網(wǎng)絡(luò)環(huán)境,使得這些bug較難被提前發(fā)現(xiàn)和修復(fù)。

另外一些服務(wù)在惡劣網(wǎng)絡(luò)環(huán)境下雖然不會出現(xiàn)不可用的情況,但是用戶體檢很差,為了優(yōu)化這個情況下的用戶體驗(yàn),也需要去在本地模擬這種環(huán)境來進(jìn)行調(diào)優(yōu)。

所以要去復(fù)現(xiàn)這些bug,甚至是去提前發(fā)現(xiàn)這些bug,就需要能夠在開發(fā)環(huán)境中模擬出惡劣的網(wǎng)絡(luò)環(huán)境,從而看到在這種惡劣的網(wǎng)絡(luò)環(huán)境下的服務(wù)的表現(xiàn)等。

當(dāng)前模擬惡劣網(wǎng)絡(luò)環(huán)境主要可以通過以下這些手段實(shí)現(xiàn):

  • 通過應(yīng)用層或者傳輸層的代理服務(wù)器,通過在代理服務(wù)器上設(shè)置一些模擬惡劣網(wǎng)絡(luò)環(huán)境的參數(shù),使得通過這些代理服務(wù)器的流量都被轉(zhuǎn)化為惡劣網(wǎng)絡(luò)環(huán)境下的流量。如利用Fiddler,Charles等具有代理服務(wù)器功能的網(wǎng)絡(luò)流量分析軟件來實(shí)現(xiàn)。
  • 通過利用一些更底層的驅(qū)動層面的服務(wù),通過控制網(wǎng)卡的收包發(fā)包的行為,來模擬惡劣的網(wǎng)絡(luò)環(huán)境。如dummynet的ipfw驅(qū)動等。
  • 通過建立一個可控的網(wǎng)關(guān),在網(wǎng)關(guān)上部署模擬惡劣環(huán)境的相關(guān)程序,所有需要借助該網(wǎng)關(guān)進(jìn)行轉(zhuǎn)發(fā)的流量都會被模擬為惡劣網(wǎng)絡(luò)條件。Linux下的netem就提供了這類支持。

通過應(yīng)用層或者傳輸層的代理服務(wù)器,通過在代理服務(wù)器上設(shè)置一些模擬惡劣網(wǎng)絡(luò)環(huán)境的參數(shù),使得通過這些代理服務(wù)器的流量都被轉(zhuǎn)化為惡劣網(wǎng)絡(luò)環(huán)境下的流量。

如利用Fiddler,Charles等具有代理服務(wù)器功能的網(wǎng)絡(luò)流量分析軟件來實(shí)現(xiàn)。通過利用一些更底層的驅(qū)動層面的服務(wù),通過控制網(wǎng)卡的收包發(fā)包的行為,來模擬惡劣的網(wǎng)絡(luò)環(huán)境。

如dummynet的ipfw驅(qū)動等。通過建立一個可控的網(wǎng)關(guān),在網(wǎng)關(guān)上部署模擬惡劣環(huán)境的相關(guān)程序,所有需要借助該網(wǎng)關(guān)進(jìn)行轉(zhuǎn)發(fā)的流量都會被模擬為惡劣網(wǎng)絡(luò)條件。

Linux下的netem就提供了這類支持。

這里主要先講的是第一種手段,即利用Fiddler來模擬惡劣的網(wǎng)絡(luò)環(huán)境,對服務(wù)進(jìn)行測試,這個手段實(shí)現(xiàn)簡單,較為直觀,但是缺點(diǎn)是只能支持那些利用HTTP進(jìn)行通信和交互的服務(wù)。在之后的文章中也會進(jìn)一步說一下后兩種手段。

Fiddler是啥

Fiddler的官網(wǎng)上是這樣描述它自己的:The free web debugging proxy for any browser, system or platform,即跨瀏覽器、跨系統(tǒng)、跨平臺的免費(fèi)Web Debug代理服務(wù)器。

當(dāng)你的HTTP瀏覽經(jīng)過Fiddler時(shí),F(xiàn)iddler可以監(jiān)視流量,查看HTTP通訊的各種信息,設(shè)置斷點(diǎn)查看和修改HTTP數(shù)據(jù),甚至可以構(gòu)造各種測試用的HTTP包以及重放已記錄的包等。

其官網(wǎng)是http://www.fiddler2.com/fiddler2/,上面詳細(xì)地介紹了Fiddler到底是什么。

簡單地利用Fiddler限速模擬惡劣網(wǎng)絡(luò)環(huán)境

Fiddler本身已經(jīng)預(yù)置提供了模擬Modem速度的選項(xiàng),其位置位于:

Rules – Performances – Simulate Modem Speeds

Fidder界面

  

勾選該選項(xiàng)后,所有通過Fiddler代理的流量都會變得和多年前的56k小貓時(shí)上網(wǎng)一般的慢。  

由于Fiddler只是一個HTTP代理,要直觀地看出限速效果,最好是運(yùn)行在瀏覽器中的測速工具,這里選用speedtest.net提供的測速工具進(jìn)行測試。  

首先是開啟該選項(xiàng)之前的速度:

開啟前速度

打開了Simulate Modem Speeds后:

開啟后速度

速度已經(jīng)回到了當(dāng)年那種無法忍受的低速了,注意到這里PING值也有了顯著的提高,而事實(shí)上ping值是ICMP層的控制報(bào)文,并不會被Fiddler影響,理論上ping值并不會出現(xiàn)提高的情況,進(jìn)一步分析Fiddler中的報(bào)文則可以看出端倪:

端倪

事實(shí)上網(wǎng)頁插件并不能實(shí)現(xiàn)發(fā)送ICMP包并得到ping值的功能,而是用多次較小的HTTP GET請求的響應(yīng)時(shí)間來計(jì)算PING值,這里實(shí)際算出來的是一個平均的HTTP的RTT值,所以受到Fiddler模擬惡劣環(huán)境的影響就是正常的了。

調(diào)整模擬惡劣網(wǎng)絡(luò)環(huán)境的參數(shù)

直接模擬Modem速度實(shí)在是慢爆了,事實(shí)上就算是在很差信號的情況下,手機(jī)移動網(wǎng)絡(luò)的速度都已經(jīng)超過了當(dāng)年的56k Modem速度了,所以采用默認(rèn)的配置模擬出來的環(huán)境過于惡劣,并不一定符合需求,此時(shí)就需要對限速的參數(shù)進(jìn)行調(diào)整。  

Fiddler本身就提供了一個配置文件供調(diào)整這些參數(shù),點(diǎn)擊:  

Rules – Customize Rules…  

就會用文本編輯器打開CustomRules.js文件,其默認(rèn)位于用戶目錄的文檔目錄下的\Fiddler2\Scripts 位置,后綴名是js,其內(nèi)容實(shí)質(zhì)是JScript.NET——微軟對ECMAScript規(guī)范的實(shí)現(xiàn),與日常使用的javascript是屬于同一個規(guī)范下的,但是在擴(kuò)展的細(xì)節(jié)實(shí)現(xiàn)存在一定的不同。  

打開該文件后,可以找到一個m_SimulateModem標(biāo)志位:

if (m_SimulateModem) {
    // Delay sends by 300ms per KB uploaded.
    oSession["request-trickle-delay"] = "300";
    // Delay receives by 150ms per KB downloaded.
    oSession["response-trickle-delay"] = "150"
}

該標(biāo)志位控制著oSession的兩個參數(shù)值的設(shè)置,當(dāng)勾選了Simulate Modem Speeds時(shí),request-trickle-delay與response-trickle-delay就會被設(shè)置,其中request-trickle-delay中的值代表每KB的數(shù)據(jù)被上傳時(shí)會被延時(shí)多少毫秒,response-trickle-delay則對應(yīng)下載時(shí)每KB的數(shù)據(jù)會被延時(shí)多少毫秒,如果本身網(wǎng)速已經(jīng)相當(dāng)快的話,這里設(shè)置的值就可以近似地推算出開啟模擬后的上傳和下載帶寬了,比如默認(rèn)設(shè)置下下載延時(shí)為150ms,上傳延時(shí)為300ms,對應(yīng)可以推算出大致的模擬帶寬為:

上傳帶寬=(1*8/1000)/0.300≈0.053Mbps

下載帶寬=(1*8/1000)/0.150≈0.027Mbps

然而實(shí)際情況下卻得到了兩倍于這個值的帶寬,推測可能是Fiddler的內(nèi)部實(shí)現(xiàn)上有一些和描述上的不同,為何為造成這個現(xiàn)象現(xiàn)在還不是很清楚,所以上述公式最后還需要修正一個2.0的系數(shù),即:

上傳帶寬=((1*8/1000)/0.300)*2.0≈0.106Mbps

下載帶寬=((1*8/1000)/0.150)*2.0≈0.053Mbps

假設(shè)我們將兩個參數(shù)都設(shè)置為50,則會得到上下載帶寬均為0.32Mbps,測速結(jié)果如下所示:

設(shè)置參數(shù)以后的測速結(jié)果

編寫自定義腳本

進(jìn)一步地,我們可以擴(kuò)展CustomRules.js里的邏輯,參照J(rèn)script的文檔可以在模擬惡劣環(huán)境中加入更多自定義的邏輯,這里實(shí)現(xiàn)了一個隨機(jī)延時(shí)量設(shè)置,使得網(wǎng)絡(luò)帶寬不是恒定為一個低速的值,而是會在一定范圍內(nèi)隨機(jī)抖動:

static function randInt(min, max) {
    return Math.round(Math.random()*(max-min)+min);
}
if (m_SimulateModem) {
    // Delay sends by 300ms per KB uploaded.
    oSession["request-trickle-delay"] = ""+randInt(1,50);
    // Delay receives by 150ms per KB downloaded.
    oSession["response-trickle-delay"] = ""+randInt(1,50);
}

得到的測試結(jié)果如下:

得到的測試結(jié)果

在測速過程中的瞬時(shí)速度的趨勢圖如下:

瞬時(shí)速度趨勢圖

可以看到整體的網(wǎng)絡(luò)限速存在了一定程度的抖動。

通過進(jìn)一步擴(kuò)展CustionRules.js可以實(shí)現(xiàn)很多需要的惡劣環(huán)境模擬場景,如果場景較為復(fù)雜的話,也可以通過編寫Fiddler的插件的方式,編寫C#插件代碼來進(jìn)一步控制Fiddler的行為,在這里就不多做贅述了。

詳細(xì)可以參照:http://docs.telerik.com/fiddler/extend-fiddler/extendwithdotnet

Fiddler模擬惡劣網(wǎng)絡(luò)環(huán)境的局限性

Fiddler進(jìn)行限速較為簡單和靈活,配置也較為方便,但是由于它是一個應(yīng)用層的HTTP的代理,只能模擬該層上的行為,對于一些復(fù)雜的網(wǎng)絡(luò)層的丟包、重傳等惡劣情況就不能很好的模擬出來,而且對于其他協(xié)議的應(yīng)用也不支持,后續(xù)會介紹一些其他的模擬惡劣環(huán)境的方法和軟件來彌補(bǔ)這些缺失。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Keras搭建Efficientdet目標(biāo)檢測平臺的實(shí)現(xiàn)思路

    Keras搭建Efficientdet目標(biāo)檢測平臺的實(shí)現(xiàn)思路

    EfficientNet模型具有很獨(dú)特的特點(diǎn),這個特點(diǎn)是參考其它優(yōu)秀神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)出來的,本文以Efficientnet-B0和Efficientdet-D0為例,進(jìn)行Efficientdet的解析,感興趣的朋友一起看看吧
    2021-06-06
  • 使用DeepSeek搭建個人知識庫(在筆記本電腦上)

    使用DeepSeek搭建個人知識庫(在筆記本電腦上)

    本文介紹了如何在筆記本電腦上使用DeepSeek和開源工具搭建個人知識庫,通過安裝DeepSeek和RAGFlow,并使用CherryStudio進(jìn)行交互,可以實(shí)現(xiàn)本地文檔的解析和知識問答,雖然個人配置可以運(yùn)行,但在企業(yè)商用時(shí),需要考慮配置升級和數(shù)據(jù)集質(zhì)量的問題,感興趣的朋友一起看看吧
    2025-03-03
  • iisschlp.wsc [88,25] 屬性值無效 : progid

    iisschlp.wsc [88,25] 屬性值無效 : progid

    今天在運(yùn)行iisapp.vbs時(shí)候提示W(wǎng)indows Script Component - file://C:WINDOWSsystem32iisschlp.wsc [88,25] 屬性值無效 : progid,原來是因?yàn)榘踩O(shè)置惹的禍,以前就是因?yàn)檫@個一直沒解決
    2014-07-07
  • 2022最新騰訊輕量云?debian?10?安裝pve教程詳解

    2022最新騰訊輕量云?debian?10?安裝pve教程詳解

    這篇文章主要介紹了騰訊輕量云?debian?10?安裝pve教程?2022,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Minio設(shè)置文件鏈接永久有效的完整步驟

    Minio設(shè)置文件鏈接永久有效的完整步驟

    大家應(yīng)該都知道m(xù)inio分享文件的鏈接最多支持分享七天,而最近遇到了一個需求要求設(shè)置永久可下載,這篇文章主要給大家介紹了關(guān)于Minio設(shè)置文件鏈接永久有效的相關(guān)資料
    2022-07-07
  • Runnable.com 在線測試代碼片分享網(wǎng)站

    Runnable.com 在線測試代碼片分享網(wǎng)站

    Runnable是一個一站式的代碼片段集合網(wǎng)站,你不僅可以搜索代碼,還可以編輯、運(yùn)行這些代碼片段,以確保它們的正確性與可用性
    2013-12-12
  • Hive?判斷某個字段長度的示例代碼

    Hive?判斷某個字段長度的示例代碼

    hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,用來進(jìn)行數(shù)據(jù)提取、轉(zhuǎn)化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規(guī)模數(shù)據(jù)的機(jī)制,這篇文章主要介紹了Hive?判斷某個字段長度,需要的朋友可以參考下
    2024-08-08
  • 程序員 代碼是從頭編還是使用框架好呢?

    程序員 代碼是從頭編還是使用框架好呢?

    為什么框架發(fā)展得越來越好,因?yàn)樵絹碓蕉嗟某绦騿T選擇使用框架。當(dāng)處于實(shí)際的項(xiàng)目開發(fā)中,程序員就會發(fā)現(xiàn)項(xiàng)目周期短,使用框架可以最有效地節(jié)約時(shí)間。如果完全從頭開始編程,使用時(shí)間太多不說,對程序員的個人編碼水平也提出了很高的要求
    2017-08-08
  • skynet.call使用詳細(xì)解析

    skynet.call使用詳細(xì)解析

    這篇文章主要介紹了skynet.call使用詳細(xì)解析,本文給大家介紹的非常詳細(xì)對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2025-04-04
  • 趣談Unicode、Ascii、utf-8、GB2312、GBK等編碼知識

    趣談Unicode、Ascii、utf-8、GB2312、GBK等編碼知識

    這篇文章主要介紹了趣談Unicode、Ascii、utf-8、GB2312、GBK等編碼知識,文章寫的詼諧風(fēng)趣,膜拜啊,需要的朋友可以參考下
    2014-07-07

最新評論

东源县| 屯门区| 托克逊县| 隆德县| 海兴县| 海门市| 扎囊县| 巢湖市| 银川市| 泸定县| 东阳市| 新丰县| 吕梁市| 静宁县| 乐安县| 南投县| 新邵县| 元氏县| 商城县| 江城| 江西省| 翼城县| 北票市| 临桂县| 手游| 汨罗市| 佛冈县| 资兴市| 阿坝| 东台市| 苍梧县| 铅山县| 惠来县| 寻乌县| 普宁市| 修水县| 辉南县| 土默特左旗| 铁岭县| 象山县| 吴桥县|