国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Linux下TC的網(wǎng)絡(luò)流量管理

2010-08-15 00:45:09郭正球
關(guān)鍵詞:網(wǎng)絡(luò)流量隊(duì)列過(guò)濾器

郭正球

(長(zhǎng)沙航空職業(yè)技術(shù)學(xué)院,湖南長(zhǎng)沙 410124)

基于Linux下TC的網(wǎng)絡(luò)流量管理

郭正球

(長(zhǎng)沙航空職業(yè)技術(shù)學(xué)院,湖南長(zhǎng)沙 410124)

介紹Linux下的流量管理器(TC),討論了TC的排隊(duì)規(guī)定、分類(lèi)和過(guò)濾器三個(gè)關(guān)鍵組件的相關(guān)細(xì)節(jié),給出運(yùn)用TC工具實(shí)現(xiàn)網(wǎng)絡(luò)流量管理的具體實(shí)例。

服務(wù)質(zhì)量;流量管理;隊(duì)列規(guī)定;類(lèi);過(guò)濾器

目前采用盡力而為(Best-effort)模型設(shè)計(jì)的互聯(lián)網(wǎng),會(huì)盡可能地為所有用戶(hù)分配網(wǎng)絡(luò)帶寬,用以傳送更多的網(wǎng)絡(luò)流量,但對(duì)帶寬和數(shù)據(jù)傳輸延時(shí)卻沒(méi)有明確規(guī)定。[1]當(dāng)下,以BT為代表的P2P服務(wù)在提升網(wǎng)絡(luò)傳輸效率的同時(shí)也極大地消耗了網(wǎng)絡(luò)帶寬,對(duì)其他網(wǎng)絡(luò)應(yīng)用帶來(lái)沖擊。網(wǎng)絡(luò)長(zhǎng)時(shí)間的高度擁塞,給網(wǎng)絡(luò)管理帶來(lái)困難和功能失效的危險(xiǎn),將直接影響網(wǎng)絡(luò)的正常運(yùn)行和關(guān)鍵業(yè)務(wù)的開(kāi)展。因此,需要對(duì)網(wǎng)絡(luò)流量進(jìn)行分類(lèi)與控制,監(jiān)控網(wǎng)絡(luò)中的各流量狀態(tài),并根據(jù)應(yīng)用的需求實(shí)施面向用戶(hù)、帶寬、業(yè)務(wù)類(lèi)型和服務(wù)質(zhì)量的流量控制,從而有效地利用網(wǎng)絡(luò)帶寬,保障網(wǎng)絡(luò)的正常運(yùn)行。

在網(wǎng)絡(luò)服務(wù)質(zhì)量(QoS)領(lǐng)域里,流量管理被作為其重要的研究方向。目前,很多網(wǎng)絡(luò)硬件廠(chǎng)商都在防火墻、路由器等網(wǎng)絡(luò)關(guān)鍵上設(shè)備整合了流量管理功能,也有廠(chǎng)家推出了基于ASIC芯片的專(zhuān)業(yè)流量控制設(shè)備,這些基于硬件的流量管理設(shè)備具有高性能和高可靠性等特點(diǎn),但價(jià)格不菲,并且在部署和使用過(guò)程中缺乏靈活性和可定制性。Linux作為一個(gè)優(yōu)秀的網(wǎng)絡(luò)操作系統(tǒng),在對(duì)網(wǎng)絡(luò)QoS的支持有著得天獨(dú)厚的優(yōu)勢(shì)。通過(guò)Linux內(nèi)核(Kernel)中的流量控制(TC)模塊完全可以實(shí)現(xiàn)網(wǎng)絡(luò)流量的顆粒控制,而且靈活性非常高。

1 Linux對(duì)流量管理的支持

目前,Linux內(nèi)核已經(jīng)發(fā)展到Kernel 2.6版本,其帶寬管理模塊(TC)通過(guò)這幾年的發(fā)展,已經(jīng)變得非常成熟和穩(wěn)定。TC模塊主要包括隊(duì)列規(guī)定(Queuing discip line)、過(guò)濾器(Filter)、類(lèi)(Class)這三個(gè)關(guān)鍵組件。[2]

Linux的帶寬管理模塊(TC)會(huì)將流經(jīng)網(wǎng)絡(luò)接口的數(shù)據(jù)包按某種隊(duì)列算法放入相應(yīng)的隊(duì)列,并通過(guò)優(yōu)先級(jí)、大小、長(zhǎng)度等隊(duì)列規(guī)定來(lái)控制數(shù)據(jù)包發(fā)送,從而達(dá)到對(duì)流量的控制。能夠?qū)崿F(xiàn)流量控制功能的隊(duì)列規(guī)定主要有:CLASSLESSQDISC(無(wú)類(lèi)隊(duì)列規(guī)定)和CLASSFULQDIS(分類(lèi)隊(duì)列規(guī)定)兩種。

1.1 無(wú)類(lèi)隊(duì)列規(guī)定

無(wú)類(lèi)隊(duì)列規(guī)定能夠接受數(shù)據(jù)包和重組、延遲或丟棄數(shù)據(jù)包。這可以用作對(duì)于整個(gè)網(wǎng)絡(luò)接口的流量進(jìn)行整形,但不細(xì)分各種情況,屬于粗放型的流量管理。典型的無(wú)類(lèi)隊(duì)列規(guī)定有SFQ(隨機(jī)公平隊(duì)列)、TBF(令牌桶過(guò)濾器)、pfifo-fast(先進(jìn)現(xiàn)出)、ID(前向隨機(jī)丟包)。

1.2 分類(lèi)隊(duì)列規(guī)定

在分類(lèi)隊(duì)列規(guī)定的概念里擴(kuò)展了Class(類(lèi))和Filter(過(guò)濾器)兩個(gè)組件,在類(lèi)和過(guò)濾器的支持下, Linux可以根據(jù)數(shù)據(jù)包的類(lèi)型、優(yōu)先級(jí)別等來(lái)區(qū)分不同類(lèi)型的流量,然后通過(guò)不同的隊(duì)列規(guī)則來(lái)控制數(shù)據(jù)包的發(fā)送方式,以實(shí)現(xiàn)對(duì)流量的控制。

典型的分類(lèi)隊(duì)列規(guī)定主要有以下幾種:

1)CBQ(Class Based Queueing,基于類(lèi)的隊(duì)列)

CBQ是一種基于類(lèi)的可以包含其它隊(duì)列的超級(jí)隊(duì)列,CBQ會(huì)根據(jù)對(duì)流量特征處理數(shù)據(jù)包,并確保一定的傳輸速率,在接收數(shù)據(jù)包時(shí)根據(jù)IP協(xié)議頭、IP地址、應(yīng)用程序或協(xié)議、URL或其它信息等進(jìn)行分類(lèi)。每類(lèi)流量被分配到指定的FIFO (FirstInFirstOut)隊(duì)列。如果隊(duì)列為空閑,帶寬便可以供其它隊(duì)列使用,即帶寬借用。

2)HTB(Hierarchical Token Buchet,分層的令牌桶)

HTB實(shí)際是在TBF上發(fā)展起來(lái)的,它的分層機(jī)制使網(wǎng)絡(luò)在帶寬固定的情況下很容易實(shí)現(xiàn)對(duì)每個(gè)類(lèi)別的帶寬分配,同時(shí)還允許特定的類(lèi)可以突破帶寬上限,占用別的類(lèi)的空閑帶寬,這對(duì)要在具有固定連接速率的鏈路上實(shí)現(xiàn)帶寬管理非常方便。

3)PRIO:PRIOQDisc

PRIO不能限制帶寬,因?yàn)閷儆诓煌?lèi)別的數(shù)據(jù)報(bào)是順序離隊(duì)。使用PRIO Qdisc可以很容易對(duì)流量進(jìn)行優(yōu)先級(jí)管理,只有屬于高優(yōu)先級(jí)類(lèi)別的數(shù)據(jù)報(bào)全部發(fā)送完畢,才會(huì)發(fā)送屬于低優(yōu)先級(jí)類(lèi)別的數(shù)據(jù)報(bào)。為方便管理,需要使用iptables或者ipchain處理數(shù)據(jù)包的服務(wù)類(lèi)型(Type Of Service, TOS)。

1.3 過(guò)濾器和類(lèi)

在分類(lèi)隊(duì)列中使用過(guò)濾器區(qū)別不同類(lèi)型的數(shù)據(jù)包,過(guò)濾器根據(jù)源IP地址、端口、目地IP、端口、協(xié)議類(lèi)型、TOS字節(jié)、網(wǎng)絡(luò)接口等參數(shù)或準(zhǔn)則將進(jìn)入隊(duì)列的數(shù)據(jù)包分為不同的類(lèi)。類(lèi)由隊(duì)列規(guī)定來(lái)管理,它和隊(duì)列規(guī)定緊密聯(lián)系在一起。不同的類(lèi)對(duì)應(yīng)著不同的隊(duì)列規(guī)定,類(lèi)本身不儲(chǔ)存數(shù)據(jù)包,而是利用隊(duì)列規(guī)定來(lái)管理其所擁有的數(shù)據(jù)。它們之間的關(guān)系如圖1所示。

Linux下常用的過(guò)濾器有fwmark、u32、route等,通過(guò)這些過(guò)濾器可以區(qū)別不同類(lèi)型的網(wǎng)絡(luò)流量。fwmark過(guò)濾器是根據(jù)防火墻對(duì)數(shù)據(jù)包所做的特定標(biāo)記進(jìn)行判斷;u32過(guò)濾器基于哈希表實(shí)現(xiàn),能夠?qū)Ξ?dāng)前通過(guò)的數(shù)據(jù)包進(jìn)行匹配的特征定義; route過(guò)濾器是根據(jù)數(shù)據(jù)如何被路由進(jìn)行判斷。

在過(guò)濾器里有protocol、parent、prio、hand le、fw、u32這些參數(shù)需要進(jìn)行設(shè)置。protocol是必要參數(shù),指的是過(guò)濾器所接受的協(xié)議。parent也是必要參數(shù),用來(lái)明確過(guò)濾器附帶在哪個(gè)句柄上,句柄必須是一個(gè)已經(jīng)存在的類(lèi)。prio是用來(lái)說(shuō)明分類(lèi)器的優(yōu)先權(quán)值,優(yōu)先權(quán)值低的優(yōu)先級(jí)越高。handle是過(guò)濾器句柄的描述,對(duì)于不同過(guò)濾器,它的意義不同。

1.4 實(shí)現(xiàn)TC的三個(gè)關(guān)鍵組件

TC的實(shí)現(xiàn)涉及到隊(duì)列(Queue),分類(lèi)器(Class)和過(guò)濾器(Filter)三個(gè)關(guān)鍵組件。

隊(duì)列用來(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ò)流量。需要注意的是,基于IP/TCP平行協(xié)議族的特點(diǎn),TC對(duì)流量控制的實(shí)現(xiàn)一般都在發(fā)送隊(duì)列上來(lái)實(shí)現(xiàn),即“控發(fā)不控收”。對(duì)于Linux防火墻來(lái)說(shuō),控制下行速率需要在對(duì)內(nèi)接口上實(shí)施,而控制上行速率則需要在對(duì)外接口上實(shí)施。[3]

Class用來(lái)表示控制策略。很多時(shí)候可能要對(duì)不同的IP實(shí)施不同的流量控制策略,此時(shí)可用不同的Class來(lái)表示不同的控制策略。

Filter用來(lái)將流量劃入到具體的控制策略中(即不同的Class中)。比如,要對(duì)A、B兩個(gè)IP產(chǎn)生的流量實(shí)行不同的控制策略(C、D),這時(shí),可以用Filter將A流量劃入到控制策略C,將B流量劃入到控制策略D,Filter劃分的標(biāo)志位可用u32打標(biāo)功能或iptables的set-mark功能來(lái)實(shí)現(xiàn)。

2 流量控制的具體實(shí)例

Linux流量控制模塊提供一個(gè)用戶(hù)狀態(tài)下的TC命令,可以通過(guò)TC命令來(lái)實(shí)現(xiàn)對(duì)流量的管理。

2.1 實(shí)例環(huán)境

先假設(shè)一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)環(huán)境,如圖2所示。

流量控制器(TC)上有兩個(gè)網(wǎng)絡(luò)接口,連接ISP的對(duì)外接口為eth0,分配公網(wǎng)IP地址:a.b.c.d,最大帶寬為50Mbps。連接內(nèi)部網(wǎng)絡(luò)的為eth1,分配私有IP地址:192.168.1.1。另有三臺(tái)內(nèi)網(wǎng)主機(jī)1、主機(jī)2和主機(jī)3,各主機(jī)的IP地址分配見(jiàn)圖2。

現(xiàn)在需要對(duì)內(nèi)網(wǎng)主機(jī)實(shí)施以下的流量管理:

1)控制內(nèi)網(wǎng)主機(jī)1、主機(jī)2和主機(jī)3的下行(下載)速率分別為為8Mbps、15Mbps和20Mbps;

2)控制內(nèi)網(wǎng)主機(jī)1、主機(jī)2和主機(jī)3的上行(上載)速率分別為為5Mbps、8Mbps和10Mbps;

2.2 下行控制

對(duì)下行速率的控制,需要在TC的內(nèi)接口上實(shí)施,基本步驟如下:

1)在流量控制器(TC)內(nèi)接口上(eth1)綁定一個(gè)HTB隊(duì)列用以控制下行速率,指定缺省分類(lèi)為2:40,沒(méi)有被過(guò)濾的流量將進(jìn)行這個(gè)缺省分類(lèi)。

tc qdisc add dev eth1 root handle 2:0 htb default40

2)建立主干分類(lèi),并指定最大帶寬為50Mbit,允許突發(fā)流量15Kbit。

tc class add dev eth1 parent 2:0 classid 2:1 htb rate 50Mbit burst15kbit

3)在內(nèi)接口上隊(duì)列(HTB)上為三臺(tái)內(nèi)網(wǎng)主機(jī)分別建立相應(yīng)速率的子分類(lèi);最后一條命令創(chuàng)建默認(rèn)分類(lèi)。

tc class add dev eth1 parent 2:1 classid 2:10 htb rate 8Mbit burst 15kbit

tc class add dev eth1 parent 2:1 classid 2:20 htb rate 10Mbit burst 15kbit

tc class add dev eth1 parent 2:1 classid 2:30 htb rate 15Mbit burst 15k

tc class add dev eth1 parent 2:1 classid 2:40 htb rate 7Mbit burst 15k

4)在每個(gè)類(lèi)下面再附加上另一個(gè)隨機(jī)公平隊(duì)列(SFQ),以保證帶寬的平均公平使用。

tc qdisc add dev eth1 parent 2:10 hand le 10: sfq perturb 10

tc qdisc add dev eth1 parent 2:20 hand le 20: sfq perturb 10

tc qdisc add dev eth1 parent 2:30 hand le 30: sfq perturb 10

tc qdisc add dev eth1 parent 2:40 hand le 30: sfq perturb 10

5)根據(jù)下行流量控制要求建立相應(yīng)的u32過(guò)濾器;最后一條命令創(chuàng)建默認(rèn)流量的過(guò)濾器,可以省略。

tc filter add dev eth0 protocol ip parent2:0 prio 2 u32match ip dst 192.168.1.2/32 flowid 2:10

tc filter add dev eth0 protocol ip parent2:0 prio 2 u32match ip dst 192.168.1.3/32 flowid 2:20

tc filter add dev eth0 protocol ip parent2:0 prio 2 u32match ip dst 192.168.1.4/32 flowid 2:30

tc filter add dev eth0 protocol ip parent2:0 prio 3 u32 match ip dst 192.168.1.0/24 flowid 2:40

2.3 上行控制

對(duì)上行速率的控制,需要在TC的對(duì)外接口上實(shí)施,但需要以下兩個(gè)方面的問(wèn)題:

1)因?yàn)閮?nèi)部網(wǎng)絡(luò)使用的是私有地址,內(nèi)部IP產(chǎn)生的上行流量在經(jīng)過(guò)外網(wǎng)卡(eth0)時(shí)會(huì)進(jìn)行NAT轉(zhuǎn)換,所以不能用源地址進(jìn)行u32過(guò)濾,需要使用fw過(guò)濾器進(jìn)行流量標(biāo)識(shí);

2)在使用fw過(guò)濾器分類(lèi)的時(shí)候優(yōu)先級(jí)一定不能相同,否則將失效。

基本步驟如下:

1)使用iptables在TC的內(nèi)接口處為三臺(tái)內(nèi)網(wǎng)主機(jī)的上行流量分別打上不同的mark,以此來(lái)標(biāo)識(shí)不同的數(shù)據(jù)流,為fw過(guò)濾分類(lèi)時(shí)所使用;

iptables-A PREROUTING-tmangle-ieth1 -s 192.168.1.2/32-j MARK--set-mark 1

iptables-A PREROUTING-tmangle-ieth1 -s 192.168.1.3/32-j MARK--set-mark 2

iptables-A PREROUTING-tmangle-ieth1 -s 192.168.1.4/32-j MARK--set-mark 3

2)如同控制下行流量一般,在eth0上建立HTB隊(duì)列、主干、子分類(lèi)及默認(rèn)分類(lèi);

tc qdisc add dev eth0 roothand le 1:0 htb default 40

tc classadd dev eth0 parent 1:0 classid 2:1 htb rate 50Mbit burst 15kbit

tc class add dev eth0 parent 1:1 classid 2:10 htb rate 5Mbitburst 15kbit

tc class add dev eth0 parent 1:1 classid 2:20 htb rate 8Mbitburst 15kbit

tc class add dev eth0 parent 1:1 classid 2:30 htb rate 10Mbit burst 15k

tc class add dev eth0 parent 1:1 classid 2:40 htb rate 27Mbit burst 15k

3)附加一個(gè)隨機(jī)公平隊(duì)列(SFQ),以保證帶寬的平均公平使用。

tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10

tc qdisc add dev eth0 parent 2:20 handle 20: sfq perturb 10

tc qdisc add dev eth0 parent 2:30 handle 30: sfq perturb 10

tc qdisc add dev eth0 parent 2:40 handle 30: sfq perturb 10

4)創(chuàng)建相應(yīng)的fw過(guò)濾器,注意使用不同的優(yōu)先級(jí)(prio)。

tc filter add dev eth0 parent1:0 protocol ip prio 1 handle 1 fw classid 1:10

tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 1 fw classid 1:20

tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 1 fw classid 1:30

tc filter add dev eth0 parent 1:0 p rotocol ip prio 4 handle 1 fw classid 1:40

通過(guò)以上命令,便可以實(shí)現(xiàn)對(duì)內(nèi)網(wǎng)主機(jī)的上/下行流量的管理。

Linux作為一個(gè)開(kāi)源的操作系統(tǒng),可以通過(guò)其強(qiáng)大的腳本程序來(lái)靈活地控制內(nèi)部網(wǎng)絡(luò)的上/下行流量,包括對(duì)不同類(lèi)型流量(如HTTP、DNS、SYN等)進(jìn)行優(yōu)先級(jí)的調(diào)整,以保證關(guān)鍵服務(wù)的質(zhì)量。同樣,也可以對(duì)TC進(jìn)行二次開(kāi)發(fā),設(shè)計(jì)出適用性強(qiáng)的可視化流量管理系統(tǒng),如今已有一些網(wǎng)絡(luò)設(shè)備廠(chǎng)家在X86硬件平臺(tái)下設(shè)計(jì)出基于Linux內(nèi)核的流量控制設(shè)備。相比采用ASIC芯片設(shè)計(jì)的高端流量控制設(shè)備,通過(guò)Linux的TC在X86平臺(tái)搭建的流量管理平臺(tái)具有更高的性?xún)r(jià)比,而且Linux對(duì)硬件配置要求不高,在一臺(tái)普通的PC機(jī)就可以通過(guò)Linux輕松地實(shí)現(xiàn)流量管理,對(duì)于大流量的園區(qū)網(wǎng)絡(luò)則可以通過(guò)Linux集群技術(shù)將多臺(tái)普通PC組合部署,構(gòu)建更高性能的流量管理集群系統(tǒng),以滿(mǎn)足流量管理的需要。

3 結(jié)束語(yǔ)

網(wǎng)絡(luò)流量的管理是目前困擾很多網(wǎng)絡(luò)管理者的問(wèn)題,對(duì)流量進(jìn)行靈活的定制管理是當(dāng)前網(wǎng)絡(luò)管理的需要。實(shí)踐證明通過(guò)Linux平臺(tái)下的TC可以實(shí)現(xiàn)網(wǎng)絡(luò)流量的有效控制與管理,改善網(wǎng)絡(luò)的服務(wù)質(zhì)量。

[1]林闖.計(jì)算機(jī)網(wǎng)絡(luò)的服務(wù)質(zhì)量QoS[M].北京:清華大學(xué)出版社,2004.

[2]祝琳.Linux網(wǎng)絡(luò)系統(tǒng)對(duì)QoS的支持[J].計(jì)算機(jī)技術(shù), 2002,(2):100-102.

[3]Bert Hubert.Linux的高級(jí)路由和流量控制[M].北京:人民郵電出版社,2005.

[編校:劉敏]

TC's Network Traffic Management Based on the Linux

GUO Zhengqiu
(Changsha Aeronautical Vocationaland Technical College,Changsha Hunan 410124)

This paper introduces the traffic controlor(TC)based on the Linux,discusses the related detailsof TC's queuing discipline,classification and filtermodules,lists some samples ofachieving network management by way of TC.

QoS;traffic management;queuing discipline;class;filter

TP393

A

1671-9654(2010)02-050-04

2010-03-15

郭正球(1980-),男,湖南沅江人,助理工程師,研究方向?yàn)檐浖こ獭⒕W(wǎng)絡(luò)安全與管理。

猜你喜歡
網(wǎng)絡(luò)流量隊(duì)列過(guò)濾器
基于多元高斯分布的網(wǎng)絡(luò)流量異常識(shí)別方法
基于神經(jīng)網(wǎng)絡(luò)的P2P流量識(shí)別方法
隊(duì)列里的小秘密
基于多隊(duì)列切換的SDN擁塞控制*
軟件(2020年3期)2020-04-20 00:58:44
在隊(duì)列里
支持過(guò)濾器的REST模型研究與實(shí)現(xiàn)
聲音過(guò)濾器
AVB網(wǎng)絡(luò)流量整形幀模型端到端延遲計(jì)算
豐田加速駛?cè)胱詣?dòng)駕駛隊(duì)列
基于LOGO!的空氣過(guò)濾器自潔控制系統(tǒng)
南宫市| 鲁甸县| 大名县| 巴林左旗| 七台河市| 家居| 浏阳市| 辽宁省| 阳山县| 台北市| 松滋市| 蓬溪县| 体育| 阳曲县| 济南市| 舞阳县| 博罗县| 甘孜县| 呈贡县| 嵩明县| 资源县| 广元市| 舞钢市| 南康市| 逊克县| 彭水| 水富县| 建阳市| 教育| 石首市| 文水县| 石渠县| 宁安市| 鹤庆县| 德安县| 陕西省| 滁州市| 洪雅县| 湘乡市| 鄱阳县| 淮阳县|