日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux 下使用 tc 模拟网络延迟和丢包

發(fā)布時(shí)間:2023/12/20 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 下使用 tc 模拟网络延迟和丢包 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)卡)。


# tc qdisc add dev eth0 root netem delay 100ms

該命令將?eth0?網(wǎng)卡的傳輸設(shè)置為延遲?100?毫秒發(fā)送。易寶支付有限公司


更真實(shí)的情況下,延遲值不會(huì)這么精確,會(huì)有一定的波動(dòng),我們可以用下面的情況來(lái)模擬出

帶有波動(dòng)性的延遲值:

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

該命令將?eth0?網(wǎng)卡的傳輸設(shè)置為延遲?100ms ± 10ms?(90 ~ 110 ms?之間的任意值)發(fā)送。

還可以更進(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ā)送。示例:現(xiàn)在?ping?一下?216?機(jī)器:

易寶支付有限公司

可以看出數(shù)據(jù)明顯的波動(dòng)性。

3?模擬網(wǎng)絡(luò)丟包:
# tc qdisc add dev eth0 root netem loss 1%

該命令將?eth0?網(wǎng)卡的傳輸設(shè)置為隨機(jī)丟掉?1%?的數(shù)據(jù)包。示例:在?216?上執(zhí)行

#tc qdisc add dev eth0 root netem loss 10%

顯示?16?個(gè)包只有?13?個(gè)收到了。也可以設(shè)置丟包的成功率:

# tc qdisc add dev eth0 root netem loss 1% 30%

該命令將?eth0?網(wǎng)卡的傳輸設(shè)置為隨機(jī)丟掉?1%?的數(shù)據(jù)包,成功率為?30%?


4.刪除網(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)用和介紹

5?模擬包重復(fù):
# tc qdisc add dev eth0 root netem duplicate 1%

該命令將?eth0?網(wǎng)卡的傳輸設(shè)置為隨機(jī)產(chǎn)生?1%?復(fù)數(shù)據(jù)包 。6?模擬數(shù)據(jù)包損壞:

# 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?以上)

7?模擬數(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

8?查看已經(jīng)配置的網(wǎng)絡(luò)條件:# tc qdisc show dev eth0

該命令將?顯示?eth0?網(wǎng)卡的相關(guān)傳輸配置9?附錄:TC?流量控制

TC?是一個(gè)流量控制的工具,下面轉(zhuǎn)了一關(guān)于?TC?流量控制的文。TC?介紹


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

TC?括三個(gè)本的構(gòu)成塊:

隊(duì)列規(guī)定?qdisc(queueing discipline?)、類(lèi)(class)和分類(lèi)器(Classifiers)

TC?中的隊(duì)列(queueing discipline):
用來(lái)實(shí)現(xiàn)控制網(wǎng)絡(luò)的收發(fā)速度.過(guò)隊(duì)列,linux?可以將網(wǎng)絡(luò)數(shù)據(jù)包緩存起來(lái),然后根據(jù)用戶(hù)

設(shè)置,量不中斷連(如?TCP)的前提下來(lái)平網(wǎng)絡(luò)流量.需要注意的是,linux?對(duì)接收隊(duì)列的控制不好,以我們一只用發(fā)送隊(duì)列,即控發(fā)不控收.封裝其他兩個(gè)要?TC?件(類(lèi)分類(lèi)器)。內(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),類(lèi)基隊(duì)列(CBQ),CBQ?是一種超級(jí)隊(duì)列,即它能包含隊(duì)列(它?CBQ)。

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

TC?中的?Filter?規(guī)則
filter?用來(lái)將用戶(hù)劃入到具的控制策略(即不同的?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?分類(lèi)器,u32?分類(lèi)器,基于路由分類(lèi)器和?RSVP分類(lèi)器(分別于?IPV6IPV4)等;其中,fwmark分類(lèi)允許我們使用?Linux netfilter?代碼選擇流量,而?u32?分類(lèi)允許我們選擇基于?ANY?的流量?.需要注意的是,filter (過(guò)濾)是在?QDisc?內(nèi)部,它們不能作為主體。

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

>TC(queue)

應(yīng)

設(shè)?eth0?服務(wù)器的網(wǎng)網(wǎng)絡(luò)接口。開(kāi)之前,除?eth0?隊(duì)列規(guī)則

tc qdisc del dev eth0 root?2> /dev/null?> /dev/null1)?義最頂層()隊(duì)列規(guī)則,并指定?default?類(lèi)別編號(hào)

tc qdisc add dev eth0 root handle?1:?htb default?2易寶支付有限公司

2)?義第的?1:1?類(lèi)別?(速度)本來(lái)是要多定義第二層葉類(lèi)別,但目前來(lái)看,這個(gè)應(yīng)用中就可以了.

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

:以上就是我們控制輸出服務(wù)器的速度,一個(gè)為?98M,一個(gè)為?2M.
rate:?
是一個(gè)類(lèi)保證得到的帶寬值.如果有不只一個(gè)類(lèi),請(qǐng)保證所子類(lèi)總和是小于或等于父類(lèi).prio:用來(lái)用帶寬時(shí)的競(jìng)爭(zhēng)力,prio?越小,優(yōu)先級(jí)越高,競(jìng)爭(zhēng)力越強(qiáng).
ceil: ceil?
是一個(gè)類(lèi)最大能到的帶寬值.

同時(shí)為了不使一個(gè)會(huì)話(huà)永占帶寬,加隨即公平隊(duì)列?sfq.
tc qdisc add dev eth0 parent?1:2?handle?2:?sfq perturb?10?tc qdisc

add?dev?eth0?parent?1:3?handle?3:?sfq?perturb?10

3)?設(shè)定過(guò)濾
過(guò)濾器可以使用本的?u32?也可以使用?iptables?來(lái)標(biāo)記
定在?root?類(lèi)?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 parent?1:?prio?50?u32 match ip

dst 0.0.0.0/0?flowid?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

TC?對(duì)對(duì)高速度的控制
Rate ceiling?率限
數(shù)?ceil?定了一個(gè)類(lèi)可以用的大帶寬,?用來(lái)限制類(lèi)可以用多少帶寬.缺省的?ceil?是和率一
這個(gè)性對(duì)于?ISP?是很有用的,?們一限制被服務(wù)的用戶(hù)量即使其他戶(hù)沒(méi)請(qǐng)求服務(wù).(ISPS?很想用戶(hù)付更多的錢(qián)得到更好的服務(wù)) ,根類(lèi)是不允許用的,?沒(méi)定?ceil

易寶支付有限公司

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

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è)流量很類(lèi)個(gè)時(shí)間類(lèi)大的率提供給其他類(lèi). burst?和?cburst?數(shù)控制多少數(shù)據(jù)可以以大的速度費(fèi)力的發(fā)送需要的其他類(lèi).
如果?cburst?小于一個(gè)理上的數(shù)據(jù)包他形成的發(fā)不會(huì)超過(guò)?ceil?,?方法?TBF?最高速率也是這.
可能會(huì)問(wèn),?么需要?bursts .?為它可以很易的提高向應(yīng)速度在一個(gè)很擁擠鏈路.比如?WWW?流量是發(fā)的.?你訪(fǎng)問(wèn)主頁(yè).發(fā)的獲得并閱讀.?空閑的時(shí)間?burst?"charge"一次.
: burst?和?cburst?至少要和其子類(lèi)的值一.

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

實(shí)例
使用?
TC?限制個(gè)?IP?進(jìn)行速度控制

tc?qdisc?add?dev?eth0?root?handle?1:?htb?r2q?1?tc?class?add?dev eth0?parent?1:?classid?1:1?htb?rate?30mbit?ceil?60mbit?tc??filter add?dev?eth0?parent?1:?protocol?ip?prio?16?u32?match?ip?dst 192.168.1.2??flowid?1:1

就可以限制?192.168.1.2?的下載速度為?30Mbit?最高可以?60Mbit ,中?r2q,指沒(méi)有?default?root,使個(gè)網(wǎng)絡(luò)的帶寬沒(méi)有限制

使用?TC?對(duì)整段?IP?進(jìn)行速度控制
tc qdisc add dev eth0 root handle?1:?htb r2q?1?tc class add dev

易寶支付有限公司

eth0?parent?1:?classid?1:1?htb?rate?50mbit?ceil?1000mbit?tc?filter add?dev?eth0?parent?1:?protocol?ip?prio?16?u32?match?ip?dst 192.168.111.0/24?flowid?1:1

就可以限制?192.168.111.0?到?255?的帶寬為?3000k?了,實(shí)載速度為?200k?左右。這種情況下,這個(gè)網(wǎng)段所有機(jī)器共享這?200k?的帶寬。
還可以加
一個(gè)?sfq(隨機(jī)公平隊(duì)列)

tc?qdisc?add?dev?eth0?root?handle?1:?htb?r2q?1?tc?class?add?dev eth0?parent?1:?classid?1:1?htb?rate?3000kbit?burst?10k?tc?qdisc add?dev?eth0?parent?1:1?handle?10:?sfq?perturb?10?tc?filter?add dev?eth0?parent?1:?protocol?ip?prio?16?u32?match?ip?dst 192.168.111.168?flowid?1:1

sfq,可以防止一個(gè)內(nèi)的一個(gè)?ip?個(gè)帶寬。使用?TC?控制服務(wù)器對(duì)速度為?10M

如下,我要理一臺(tái)服務(wù)器,只能向外發(fā)?10M?的數(shù)據(jù)

tc qdisc del dev eth0 root tc qdisc add dev eth0 root handle?1:htb tc class add dev eth0 parent?1:?classid?1:1?htb rate 100mbitceil 100mbit tc class add dev eth0 parent?1:1?classid?1:10?htbrate 10mbit ceil 10mbit tc qdisc add dev eth0 parent?1:10?sfqperturb?10?tc filter add dev eth0 protocol ip parent?1:?prio?2u32 match ip dst?220.181.xxx.xx/32flowid?1:1?#?上面臺(tái),220.181.xxx.xx/32?臺(tái)認(rèn)的,主要是讓這個(gè)?ip?進(jìn)來(lái)不被控制?tcfilter add dev eth0 protocol ip parent?1:?prio?50?u32 match ip dst0.0.0.0/0?flowid?1:10?#?認(rèn)讓所有的流量都從這個(gè)過(guò)




? ? ? 本文轉(zhuǎn)自灬落魄灬 ?51CTO博客,原文鏈接:http://blog.51cto.com/smoke520/1844034,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者



總結(jié)

以上是生活随笔為你收集整理的linux 下使用 tc 模拟网络延迟和丢包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。