• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2018年4月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345


            專注即時(shí)通訊及網(wǎng)游服務(wù)端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標(biāo)準(zhǔn)模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉(zhuǎn)載,并在文章開(kāi)頭給出了原文出處,如有再轉(zhuǎn),敬請(qǐng)保留相關(guān)信息,這是大家對(duì)原創(chuàng)作者勞動(dòng)成果的自覺(jué)尊重!!如為您帶來(lái)不便,請(qǐng)于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊(cè)

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 216879
            • 排名 - 118

            最新評(píng)論

            閱讀排行榜

            https://my.oschina.net/shou1156226/blog/514929
            http://blog.csdn.net/weiweicao0429/article/details/17578011
            1. 模擬延遲傳輸簡(jiǎn)介
                    netem 與 tc: netem 是 Linux 2.6 及以上內(nèi)核版本提供的一個(gè)網(wǎng)絡(luò)模擬功能模塊。該功能模塊可以用來(lái)在性能良好的局域網(wǎng)中,模擬出復(fù)雜的互聯(lián)網(wǎng)傳輸性能,諸如低帶寬、傳輸延遲、丟包等等情 況。使用 Linux 2.6 (或以上) 版本內(nèi)核的很多發(fā)行版 Linux 都開(kāi)啟了該內(nèi)核功能,比如 Fedora、Ubuntu、Redhat、OpenSuse、CentOS、Debian 等等。 tc 是Linux 系統(tǒng)中的一個(gè)工具,全名為 traffic control(流量控制)。tc 可以用來(lái)控制 netem 的工作模式,也就是說(shuō),如果想使用 netem ,需要至少兩個(gè)條件,一個(gè)是內(nèi)核中的 netem 功能被包含,另一個(gè)是要有 tc 。

                    需要注意的是:本文介紹的流控只能控制發(fā)包動(dòng)作,不能控制收包動(dòng)作,同時(shí),它直接對(duì)物理接口生效,如果控制了物理的 eth0,那么邏輯網(wǎng)卡(比如 eth0:1)也會(huì)受到影響,反之,如果您在邏輯網(wǎng)卡上做控制,該控制可能是無(wú)效的。(注:虛擬機(jī)中的多個(gè)網(wǎng)卡可以在虛擬機(jī)中視為多個(gè)物理網(wǎng)卡)。

            1)將 eth0 網(wǎng)卡的傳輸設(shè)置為延遲 100 毫秒發(fā)送
            # tc qdisc add dev eth0 root netem delay 100ms
            2)模擬出帶有波動(dòng)性的延遲值:
            # tc qdisc add dev eth0 root netem delay 100ms 10ms
            該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為延遲 100ms ± 10ms(90 ~ 110 ms之間的任意值)發(fā)送。

            3)還可以更進(jìn)一步加強(qiáng)這種波動(dòng)的隨機(jī)性:
            # tc qdisc add dev eth0 root netem delay 100ms 10ms 30%
            該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為 100ms ,同時(shí),大約有 30% 的包會(huì)延遲± 10ms發(fā)送。

             

            2. 模擬網(wǎng)絡(luò)丟包:
            # tc qdisc add dev eth0 root netem loss 1%
            該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為隨機(jī)丟掉 1% 的數(shù)據(jù)包。

            也可以設(shè)置丟包的成功率:

            # tc qdisc add dev eth0 root netem loss 1% 30%
            該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為隨機(jī)丟掉 1% 的數(shù)據(jù)包,成功率為30% 。

             

            3. 模擬包重復(fù)
            # tc qdisc add dev eth0 root netem duplicate 1%
            該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為隨機(jī)產(chǎn)生1% 的重復(fù)數(shù)據(jù)包

             

            4. 模擬包損壞
            # tc qdisc add dev eth0 root netem corrupt 0.2%
            該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為隨機(jī)產(chǎn)生0.2% 的損壞的數(shù)據(jù)包 。(內(nèi)核版本需在2.6.16以上)

             

            5. 模擬數(shù)據(jù)包亂序
            # tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%
            該命令將 eth0 網(wǎng)卡的傳輸設(shè)置為:有25% 的數(shù)據(jù)包(50%相關(guān))會(huì)被立即發(fā)送,其他的延遲10秒。

            新版本中,如下命令也會(huì)在一定程度上打亂發(fā)包的次序:

            #tc qdisc add dev eth0 root netem delay 100ms 10ms
             

            6. 刪除網(wǎng)卡上面的相關(guān)配置:
            將之前命令中的add 改為 del即可刪除配置:

            # tc qdisc del dev eth0 XXXXXXXXXXX(自己加的配置)
            該命令將刪除eth0網(wǎng)卡的相關(guān)傳輸配置

            至此,我們已經(jīng)可以通過(guò)TC 在測(cè)試環(huán)境中模擬一定的網(wǎng)絡(luò)延時(shí)和丟包的情況。下面是關(guān)于tc更多的應(yīng)用和介紹

             

            7. 查看已經(jīng)配置的網(wǎng)絡(luò)條件
            #tc qdisc show dev eth0
            該命令將 查看并顯示eth0 網(wǎng)卡的相關(guān)傳輸配置

             

            8. 附錄 : TC流量控制
            在 linux中,TC有二種控制方法CBQ 和 HTB。HTB是設(shè)計(jì)用來(lái)替換CBQ 的,它是一個(gè)層次式的過(guò)濾框架。

            TC 包括三個(gè)基本的構(gòu)成塊:隊(duì)列規(guī)定qdisc(queueing discipline)、類(class)和分類器(Classifiers)

            1)TC中的隊(duì)列(queueing discipline):
                    用來(lái)實(shí)現(xiàn)控制網(wǎng)絡(luò)的收發(fā)速度.通過(guò)隊(duì)列,linux可以將網(wǎng)絡(luò)數(shù)據(jù)包緩存起來(lái),然后根據(jù)用戶的設(shè)置,在盡量不中斷連接(如TCP)的前提下來(lái)平滑網(wǎng)絡(luò)流量.需要注意的是,linux對(duì)接收隊(duì)列的控制不夠好,所以我們一般只用發(fā)送隊(duì)列,即“控發(fā)不控收”.它封裝了其他兩個(gè)主要TC 組件(類和分類器)。內(nèi)核如果需要通過(guò)某個(gè)網(wǎng)絡(luò)接口發(fā)送數(shù)據(jù)包,它都需要按照為這個(gè)接口配置的qdisc(排隊(duì)規(guī)則)把數(shù)據(jù)包加入隊(duì)列。然后,內(nèi)核會(huì)盡可能多地從qdisc里面取出數(shù)據(jù)包,把它們交給網(wǎng)絡(luò)適配器驅(qū)動(dòng)模塊。

                    最簡(jiǎn)單的QDisc是 pfifo,它不對(duì)進(jìn)入的數(shù)據(jù)包做任何的處理,數(shù)據(jù)包采用先入先出的方式通過(guò)隊(duì)列。不過(guò),它會(huì)保存網(wǎng)絡(luò)接口一時(shí)無(wú)法處理的數(shù)據(jù)包。
            隊(duì)列規(guī)則包括FIFO(先進(jìn)先出),RED(隨機(jī)早期探測(cè)),SFQ(隨機(jī)公平隊(duì)列)和令牌桶(Token Bucket),類基隊(duì)列(CBQ),CBQ是一種超級(jí)隊(duì)列,即它能夠包含其它隊(duì)列(甚至其它CBQ)。

            2)TC中的Class類:
                    class用來(lái)表示控制策略.很顯然,很多時(shí)候,我們很可能要對(duì)不同的IP 實(shí)行不同的流量控制策略,這時(shí)候我們就得用不同的class來(lái)表示不同的控制策略了.

            3)TC中的Filter規(guī)則:
                    filter用來(lái)將用戶劃入到具體的控制策略中(即不同的class中).比如,現(xiàn)在,我們想對(duì)xxa,xxb兩個(gè)IP 實(shí)行不同的控制策略(A,B),這時(shí),我們可用filter將 xxa 劃入到控制策略A,將xxb 劃入到控制策略B,filter劃分的標(biāo)志位可用u32 打標(biāo)功能或IPtables的 set-mark (大多使用iptables來(lái)做標(biāo)記)功能來(lái)實(shí)現(xiàn)。
            目前,TC可以使用的過(guò)濾器有:fwmark分類器,u32分類器,基于路由的分類器和RSVP分類器(分別用于IPV6、IPV4)等;其中,fwmark分類器允許我們使用Linux netfilter代碼選擇流量,而u32 分類器允許我們選擇基于ANY 頭的流量.需要注意的是,filter (過(guò)濾器)是在QDisc內(nèi)部,它們不能作為主體。

            4)TC 的應(yīng)用流程
            數(shù)據(jù)包->iptables(在通過(guò)iptables時(shí),iptables根據(jù)不同的ip來(lái)設(shè)置不同的 mark)->TC(class)-

            >TC(queue)

            5)TC對(duì)最對(duì)高速度的控制
            (1 Rate ceiling速率限度

                    參數(shù) ceil 指定了一個(gè)類可以用的最大帶寬,用來(lái)限制類可以借用多少帶寬。缺省的ceil 是和速率一樣
            這個(gè)特性對(duì)于ISP 是很有用的,因?yàn)樗麄円话阆拗票环?wù)的用戶的總量即使其他用戶沒(méi)有請(qǐng)求服務(wù)。(ISPS很想用戶付更多的錢得到更好的服務(wù)) ,注根類是不允許被借用的,所以沒(méi)有指定ceil。

            注: ceil的數(shù)值應(yīng)該至少和它所在的類的速率一樣高,也就是說(shuō) ceil 應(yīng)該至少和它的任何一個(gè)子類一樣高。

            (2 Burst 突發(fā)

                    網(wǎng)絡(luò)硬件只能在一個(gè)時(shí)間發(fā)送一個(gè)包這僅僅取決于一個(gè)硬件的速率。鏈路共享軟件可以利用這個(gè)能力動(dòng)態(tài)產(chǎn)生多個(gè)連接運(yùn)行在不同的速度。所以速率和ceil 不是一個(gè)即時(shí)度量只是一個(gè)在一個(gè)時(shí)間里發(fā)送包的平均值。實(shí)際的情況是怎樣使一個(gè)流量很小的類在某個(gè)時(shí)間類以最大的速率提供給其他類。 burst 和cburst參數(shù)控制多少數(shù)據(jù)可以以硬件最大的速度不費(fèi)力的發(fā)送給需要的其他類。
                    如果 cburst 小于一個(gè)理論上的數(shù)據(jù)包他形成的突發(fā)不會(huì)超過(guò)ceil 速率,同樣的方法TBF 的最高速率也是這樣。
            你可能會(huì)問(wèn),為什么需要bursts 。因?yàn)樗梢院苋菀椎奶岣呦驊?yīng)速度在一個(gè)很擁擠的鏈路上。比如WWW 流量是突發(fā)的。你訪問(wèn)主頁(yè)。突發(fā)的獲得并閱讀。在空閑的時(shí)間burst將再"charge"一次。
            注: burst和 cburst 至少要和其子類的值一樣大。

            (3 TC命令格式:

            加入

            tc qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] qdisc[ qdisc specific parameters ]tc class [ add | change | replace ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specificparameters ]
            tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priorityfiltertype [ filtertype specific parameters ] flowid flow-id
            顯示

            tc [-s | -d ] qdisc show [ dev DEV ]
            tc [-s | -d ] class show dev DEV tc filter show dev DEV
            查看TC 的狀態(tài)

            tc -s -d qdisc show dev eth0tc -s -d class show dev eth0
            刪除tc規(guī)則

            tc qdisc del dev eth0 root
            6)應(yīng)用
            假設(shè)eth0 位是服務(wù)器的外網(wǎng)網(wǎng)絡(luò)接口。開(kāi)始之前,先要清除eth0 所有隊(duì)列規(guī)則

            tc qdisc del dev eth0 root2> /dev/null> /dev/null
            (1 定義最頂層(根)隊(duì)列規(guī)則,并指定default類別編號(hào)

            tc qdisc add dev eth0 root handle1:htb default2
            (2 定義第一層的1:1 類別

            tc class add dev eth0 parent 1:1 classid 1:2 htb rate 98mbit ceil 100mbit prio 2
            tc class add dev eth0 parent 1:1 classid 1:3 htb rate 1mbit ceil 2mbit prio 2
            rate: 是一個(gè)類保證得到的帶寬值.如果有不只一個(gè)類,請(qǐng)保證所有子類總和是小于或等于父類.

            prio:用來(lái)指示借用帶寬時(shí)的競(jìng)爭(zhēng)力,prio越小,優(yōu)先級(jí)越高,競(jìng)爭(zhēng)力越強(qiáng).

            ceil: ceil 是一個(gè)類最大能得到的帶寬值.

            同時(shí)為了不使一個(gè)會(huì)話永占帶寬,添加隨即公平隊(duì)列sfq.

            tc qdisc add dev eth0 parent1:2handle 2:sfq perturb10tc qdisc
            add dev eth0 parent 1:3 handle 3: sfq perturb 10
            (3 設(shè)定過(guò)濾器

            過(guò)濾器可以使用本身的u32 也可以使用 iptables來(lái)打上標(biāo)記
            指定在 root 類 1:0中,對(duì) 192..168.0.2的過(guò)濾,使用1:2 的規(guī)則,來(lái)給他98M的速度,寫(xiě)法就如下

            tc filter add dev eth0 protocol ip parent 1:0 u32 match ip src
            192.168.0.2 flowid 1:2 tc filter add dev eth0 protocol ip parent1:0 u32 match ip src 192.168.0.1 flowid 1:3
            如果是所有ip 寫(xiě)法就如

            tc filter add dev eth0 protocol ip parent1:prio 50u32 match ipdst 0.0.0.0/0flowid 1:10
            使用Iptables來(lái)配合過(guò)濾器,還可以使用這個(gè)方法,但需要借助下面的iptables的命令來(lái)做標(biāo)記了

            tc filter add dev eth0 parent 1: protocol ip prio 1 handle 2 fw
            flowid 1:2 tc filter add dev eth0 parent 1: protocol ip prio 1handle 2 fw flowid 1:3
            iptables 只要打上記號(hào)就行了

            iptables -t mangle -A POSTROUTING -d 192.168.0.2 -j MARK --set-mark 10 iptables -t mangle -A POSTROUTING -d 192.168.0.3 -j MARK--set-mark 20
             

            posted on 2017-02-04 11:13 思月行云 閱讀(1602) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 服務(wù)器\Ops
            色综合久久久久久久久五月| 亚洲午夜精品久久久久久人妖| 久久久久一级精品亚洲国产成人综合AV区 | 日本人妻丰满熟妇久久久久久| 久久丫忘忧草产品| …久久精品99久久香蕉国产| 午夜不卡888久久| 一本久久知道综合久久| 精品久久久噜噜噜久久久| 精品久久人妻av中文字幕| 久久午夜无码鲁丝片午夜精品| 精品久久久久久中文字幕大豆网| 99精品久久久久中文字幕| 香蕉久久永久视频| 久久99精品综合国产首页| 手机看片久久高清国产日韩| 久久精品天天中文字幕人妻| 久久国产精品波多野结衣AV| 亚洲国产精品无码久久久蜜芽 | 久久久国产精品| 9久久9久久精品| 精品久久久无码21p发布| 久久夜色撩人精品国产| 亚洲国产成人久久综合一| 国产A级毛片久久久精品毛片| 久久播电影网| 国产福利电影一区二区三区久久久久成人精品综合 | 漂亮人妻被中出中文字幕久久| 99热精品久久只有精品| 久久国产色AV免费观看| 久久亚洲精品国产精品| 亚洲AV无码久久精品蜜桃| 国内精品久久久久影院薰衣草 | 亚洲中文字幕无码久久综合网| 日本精品一区二区久久久| 久久久久亚洲AV综合波多野结衣| 久久线看观看精品香蕉国产| 国产精品99久久精品| 成人久久久观看免费毛片| 青青热久久综合网伊人| 日本道色综合久久影院|