溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

TC限速原理和TC限速的實(shí)現(xiàn)

發(fā)布時(shí)間:2020-06-05 09:13:11 來(lái)源:億速云 閱讀:4353 作者:Leah 欄目:云計(jì)算

這篇文章主要為大家分享TC限速的實(shí)現(xiàn)步驟。文中還介紹了TC限速原理和TC限速的隊(duì)列規(guī)則分類器等,希望大家通過(guò)這篇文章能有所收獲。


一.TC限速相關(guān)介紹

1.TC限速原理介紹
Linux操作系統(tǒng)中的流量控制器TC(Traffic Control)用于Linux內(nèi)核的流量控制,主要是通過(guò)在輸出端口處建立一個(gè)隊(duì)列來(lái)實(shí)現(xiàn)流量控制。
接收包從輸入接口進(jìn)來(lái)后,經(jīng)過(guò)流量限制丟棄不符合規(guī)定的數(shù)據(jù)包,由輸入多路分配器進(jìn)行判斷選擇,如果接收包的目的主機(jī)是本主機(jī),那么將該包送給上層處理,否則需要進(jìn)行轉(zhuǎn)發(fā),將接收包交到轉(zhuǎn)發(fā)塊(Forwarding Block)處理。轉(zhuǎn)發(fā)塊同時(shí)也接收本主機(jī)上層(TCP、UDP等)產(chǎn)生的包,通過(guò)查看路由表,決定所處理包的下一跳。然后,對(duì)包進(jìn)行排列以便將它們送到輸出接口。
從以上介紹可以看出,TC只能對(duì)網(wǎng)卡發(fā)出的數(shù)據(jù)包做分類限制,不能對(duì)網(wǎng)卡接收的數(shù)據(jù)包做分類限制,但是可以對(duì)網(wǎng)卡接收的數(shù)據(jù)包流量做一個(gè)整體限制。因?yàn)槲覀冺?xiàng)目中只需要對(duì)網(wǎng)卡接收的流量做整體限制,所以TC剛好可以滿足我們對(duì)網(wǎng)卡流量雙向限制的要求。

2.TC限速基本概念介紹
TC對(duì)流量的處理由三種對(duì)象控制,它們是:
隊(duì)列規(guī)則 qdisc(queueing discipline)
類(class)
分類器(Classifiers).

qdisc隊(duì)列規(guī)則(queueing discipline)
qdisc(隊(duì)列規(guī)則)是queueing discipline的簡(jiǎn)寫(xiě),它是理解流量控制(traffic control)的基礎(chǔ)。無(wú)論何時(shí),內(nèi)核如果需要通過(guò)某個(gè)網(wǎng)絡(luò)接口發(fā)送數(shù)據(jù)包,它都需要按照為這個(gè)接口配置的qdisc把數(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ù)包。
可分類的qdisc包括:
(1)CBQ
CBQ是Class Based Queueing(基于類別排隊(duì))的縮寫(xiě)。它實(shí)現(xiàn)了一個(gè)豐富的連接共享類別結(jié)構(gòu),既有限制(shaping)帶寬的能力,也具有帶寬優(yōu)先級(jí)管理的能力。帶寬限制是通過(guò)計(jì)算連接的空閑時(shí)間完成的??臻e時(shí)間的計(jì)算標(biāo)準(zhǔn)是數(shù)據(jù)包離隊(duì)事件的頻率和下層連接(數(shù)據(jù)鏈路層)的帶寬。
(2)HTB
HTB是Hierarchy Token Bucket的縮寫(xiě)。通過(guò)在實(shí)踐基礎(chǔ)上的改進(jìn),它實(shí)現(xiàn)了一個(gè)豐富的連接共享類別體系。使用HTB可以很容易地保證每個(gè)類別的帶寬,雖然它也允許特定的類可以突破帶寬上限,占用別的類的帶寬。HTB可以通過(guò)TBF(Token Bucket Filter)實(shí)現(xiàn)帶寬限制,也能夠劃分類別的優(yōu)先級(jí)。
(3)PRIO
PRIO qdisc不能限制帶寬,因?yàn)閷儆诓煌悇e的數(shù)據(jù)包是順序離隊(duì)的。使用PRIO qdisc可以很容易對(duì)流量進(jìn)行優(yōu)先級(jí)管理,只有屬于高優(yōu)先級(jí)類別的數(shù)據(jù)包全部發(fā)送完畢,才會(huì)發(fā)送屬于低優(yōu)先級(jí)類別的數(shù)據(jù)包。為了方便管理,需要使用iptables或者ipchains處理數(shù)據(jù)包的服務(wù)類型(Type Of Service,ToS)。

Class 類
某些qdisc可以包含一些類別,不同的類別中可以包含更深入的qdisc,通過(guò)這些細(xì)分的qdisc還可以為進(jìn)入隊(duì)列的數(shù)據(jù)包排隊(duì)。通過(guò)設(shè)置各種類別數(shù)據(jù)包的離隊(duì)次序,qdisc可以設(shè)置網(wǎng)絡(luò)數(shù)據(jù)流量的優(yōu)先級(jí)。

Filter 規(guī)則
Filter(過(guò)濾器)用于為數(shù)據(jù)包分類,決定它們按照何種qdisc進(jìn)入隊(duì)列。無(wú)論何時(shí)數(shù)據(jù)包進(jìn)入一個(gè)劃分子類的類別中,都需要進(jìn)行分類。分類的方法可以有多種,使用fileter(過(guò)濾器)就是其中之一。使用filter(過(guò)濾器)分類時(shí),內(nèi)核會(huì)調(diào)用附屬于這個(gè)類(class)的所有過(guò)濾器,直到返回一個(gè)判決。如果沒(méi)有判決返回,就作進(jìn)一步的處理,而處理方式和qdisc有關(guān)。需要注意的是,filter(過(guò)濾器)是在qdisc內(nèi)部,它們不能作為主體。

二.TC限速操作

1.虛擬機(jī)流入流量限制
(1)清除tap01網(wǎng)卡設(shè)備上所有的流入規(guī)則,防止與新添加的規(guī)則沖突。
# tc qdisc del dev tap01 root
(2)在網(wǎng)絡(luò)設(shè)備tap01上綁定一個(gè)htb類型的qdisc根隊(duì)列
# tc qdisc add dev tap01 root handle 1: htb default 9999
(3)在qdisc根隊(duì)列1:下創(chuàng)建一個(gè)子類1:5,并設(shè)置子類的流量速率為50Mb/s
# tc class add dev tap01 parent 1: classid 1:5 htb rate 50Mbit burst 1Mbit
(4)為子類1:5添加隨機(jī)公平隊(duì)列sfq,防止該類被某一會(huì)話連接獨(dú)占
# tc qdisc add dev tap01 parent 1:5 handle 5: sfq perturb 10
(5)為子類1:5添加過(guò)濾器,用來(lái)將目標(biāo)地址為0.0.0.0/0(指所有網(wǎng)絡(luò))的數(shù)據(jù)包發(fā)往類1:5,使用其中的規(guī)則出隊(duì)
# tc filter add dev tap01 parent 1: protocol ip prio 1 u32 match ip dst 0.0.0.0/0 flowid 1:5
注: tap01為虛擬機(jī)連接到網(wǎng)橋的網(wǎng)卡,與虛擬機(jī)內(nèi)部的網(wǎng)卡一一對(duì)應(yīng)。因tap01口的出方向的流量就是進(jìn)入虛擬機(jī)內(nèi)部網(wǎng)卡的流量,所以限制tap01口的出方向的流量,就可以限制流入虛擬機(jī)的網(wǎng)絡(luò)流量。

2.虛擬機(jī)流出流量限制
(1)清除tap01網(wǎng)卡設(shè)備上所有的流入規(guī)則,防止與新添加的規(guī)則沖突。
# tc qdisc del dev tap01 ingress
(2)在網(wǎng)絡(luò)設(shè)備tap01上綁定一個(gè)處理ingress流量的qdisc根隊(duì)列
# tc qdisc add dev tap01 ingress handle ffff:
(3)為類ffff:添加過(guò)濾器,并限制流量為50Mb/s
# tc filter add dev tap01 parent ffff: protocol all prio 1 basic police rate 50Mbit burst 10Mbit mtu 65535 drop
注: tap01為虛擬機(jī)連接到網(wǎng)橋的網(wǎng)卡,與虛擬機(jī)內(nèi)部的網(wǎng)卡一一對(duì)應(yīng)。因tap01口的入方向的流量就是虛擬機(jī)內(nèi)部網(wǎng)卡發(fā)出的流量,所以限制tap01口的入方向的流量,即可限制流出虛擬機(jī)的網(wǎng)絡(luò)流量。
命令中的數(shù)字10和65535存在關(guān)聯(lián)性,需要一起修改,否則會(huì)導(dǎo)致限速不準(zhǔn)確。

看完上述內(nèi)容,你們對(duì)TC限速原理和TC限速的實(shí)現(xiàn)大概了解了嗎?如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI