国语自产精品视频在线看:您身边最放心的安全下载站! 最新软件|热门排行|软件分类|软件专题|厂商大全

国语自产精品视频在线看

技术教程
您的位置:首页服务器类Linux服务器 → Linux环境使用TC进行服务器流量控制方法

Linux环境使用TC进行服务器流量控制方法

我要评论 2009/07/16 14:39:47 来源:国语自产精品视频在线看 编辑:佚名 [ ] 评论:0 点击:704次

公司目前有一台服务【tái fú wù】器【qì】🐆,网络环【wǎng luò huán】境太高,那台服【nà tái fú】🏨务器【qì】🐆和源服务器【qì】连接🖱下载,就跑到⏫400M-500M,为了控制一下🕙,所以研【suǒ yǐ yán】究了一【jiū le yī】下TC,来做流【lái zuò liú】量控制🗑。给他控【gěi tā kòng】⏲制到小点🕌,不要让【bú yào ràng】这一台📞占了所有的网【yǒu de wǎng】络。TC很强大,很多所📘谓的硬件路由🏯器【qì】🐆,都是基【dōu shì jī】于这个做的。

一🧔、Linux下使用【xià shǐ yòng】⌛TC进行服【jìn háng fú】务器流量控制方法

1)假设【jiǎ shè】🔵eth0位是服【wèi shì fú】💑务器的【wù qì de】😶外网网络接口🐅,首先在eth0的qdiscA,qdiscA控制通【kòng zhì tōng】过本机到外网【dào wài wǎng】🙁的速度🔚,因此可用来控制服务器对外数据传输速度【shū sù dù】。

#tc qdisc add dev eth1 root handle 1:htb default 1

添加 设置接【shè zhì jiē】口【kǒu】 最上层【zuì shàng céng】 句柄🔋(做标记🚋用) 标记🚋 默认使【mò rèn shǐ】🌇用1的🕐class

解释如🦆下🏀:无【wú】⛵论是队列【liè】,还是🧣class和🎐filter都有【dōu yǒu】✒ID之类的【zhī lèi de】标志符,一般都😹有parent(父【fù】,上层的【de】),注意【zhù yì】ID具有接【jù yǒu jiē】口本地【kǒu běn dì】👩性,不同的【bú tóng de】网络接口可以🔌有相同的【de】ID.对于这里因为qdisc在顶部,所以parent无【wú】⛵,用‘root’字样来😉标识,ID用1:来标志

‘default 91′表示当🧡某个ip流不满足任何【zú rèn hé】🏅已设定的【de】📼filter规则时【guī zé shí】,将自动🍷归入class 1中。更详细的【de】指令🍵规则说【guī zé shuō】明请参考手册【kǎo shǒu cè】。

2)然后在🌨qdisc下建立两个【liǎng gè】class,来指定【lái zhǐ dìng】eth0控制通📔过本机到外网【dào wài wǎng】的速度🦍

#tc class add dev eth0 parent 1:0 classid1:30 htb rate 2mbit ceil 4mbit prio 2

注:以上就【yǐ shàng jiù】🔬是我们【shì wǒ men】控制输【kòng zhì shū】出服务器的速度,为2M,最大可🤥以到🙁4M

rate: 是一个类【gè lèi】保证得到的带宽值【dài kuān zhí】。如果有【rú guǒ yǒu】不只一个类【gè lèi】,请保证所有子【suǒ yǒu zǐ】🚮类总和是小于👡或等于♿父类🤰。

prio:用来指【yòng lái zhǐ】示借用带宽时的竞争力【jìng zhēng lì】😅,prio越小,优先级🤗越高🏞,竞争力【jìng zhēng lì】😅越强。

ceil: ceil是一个👦类最大【lèi zuì dà】🗡能得到的带宽值【zhí】。

3)接着针对不同👢的应用【de yīng yòng】📪在各【zài gè】root class下【xià】设置不同的🤕类【lèi】🔨,示例如【shì lì rú】下【xià】。(如果只有一个类【lèi】🔨,这个就⛑没有必要了)

#tc class add dev eth0 parent 1:30 classid 1:31 htbrate 0.5mbit ceil 2mbit prio 3

同时为【tóng shí wéi】了不使一个会🍙话永占带宽🏜,在节点🎠(即本文【jí běn wén】的各应用结点【yòng jié diǎn】🏖)添加随【tiān jiā suí】即公平队列sfq.(多IP)

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

4)接着添加过滤器。

#tc filter add dev eth0 parent 1: protocol ipprio 31 handle 31 fw flowid 1:31

5)用iptable打标🏽,也可以【yě kě yǐ】使用【shǐ yòng】u32之类😳

#iptables -t mangle -I FORWARD -i !eth1 -p tcp –sport 80 -s xxx.xxx.xxx.xxx –j MARK –set-mark 31

二【èr】、TC对最对【duì zuì duì】高速度的控制🔻 | Rate ceiling 速率限🗾度

参数ceil指定了一个类👹可以用的【yòng de】🦋最大带宽【kuān】🤘, 用来限【yòng lái xiàn】制类可🗼以借用🕞多少带🌂宽【kuān】。缺省的【de】ceil是和速率一样⚫,这个特【zhè gè tè】🐰性对于💉ISP是很有用的【yòng de】🦋, 因为他👯们一般限制被【xiàn zhì bèi】服务🆚的【de】用户的【de】总量即使其【jí shǐ qí】他用户【tā yòng hù】没有请求服务🆚。(ISPS 很想用【hěn xiǎng yòng】户付更多的【de】钱得到更好的【de】服务🆚) ,注根类【zhù gēn lèi】是不允👑许被借【xǔ bèi jiè】用的【yòng de】🦋, 所以没有指定【yǒu zhǐ dìng】ceil。

(注【zhù】: ceil的数值应该至【yīng gāi zhì】少和它【shǎo hé tā】🐋所在的类的速率一样【lǜ yī yàng】高【gāo】💵, 也就是💦说ceil应该至【yīng gāi zhì】少和它【shǎo hé tā】🐋的任何一个子🧗类一样🤽高【gāo】💵。)

Burst 突发

网络硬件只能😋在一个【zài yī gè】🚐时间发💐送一个包这仅【bāo zhè jǐn】仅取决【jǐn qǔ jué】🧜于一个硬件的【de】速率【sù lǜ】。 链路共【liàn lù gòng】🌨享软件可以利【kě yǐ lì】🦌用这个能力动【néng lì dòng】🍗态产生🤶多个连【duō gè lián】接运行【jiē yùn háng】🏛在不同的速度【de sù dù】。所以速率【sù lǜ】和ceil不是一个即时度量只【dù liàng zhī】是一个在一个【zài yī gè】🚐时间里发送包的【de】平均🦔值。实际的【de】🐖情况是✍怎样使一个流量很小的【de】类🕤在某个时间类【shí jiān lèi】🕤以最大【yǐ zuì dà】的【de】🥅速率【sù lǜ】提供给其他类🕤。 burst 和cburst 参数控制多少【zhì duō shǎo】数据可🕞以以硬【yǐ yǐ yìng】件最大🦓的速度【de sù dù】不费力的【de】发送给需要🚎的【de】其他类🕤。

如果📏cburst 小于一⭐个理论上的数据包他【jù bāo tā】形成的【xíng chéng de】突发不【tū fā bú】会超过🎖ceil 速率【sù lǜ】📓, 同样的方法🏈TBF的最高【de zuì gāo】速率【sù lǜ】📓也是这样。

你可能会问【huì wèn】, 为什么需要【xū yào】🐪bursts . 因为它❇可以很🔬容易的🕝提高向🥍应速度在一个【zài yī gè】很拥挤的链路上【shàng】👫。 比如WWW 流量是🐕突发的【tū fā de】。 你访问主页。 突发的【tū fā de】获得并阅读。 在空闲的时间【de shí jiān】burst将再【jiāng zài】🚌”charge”一次。

(注【zhù】🧐: burst 和【hé】🛅cburst至少要和【hé】🛅其子类的值一样大。)

三、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 specific parameters ]

tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ 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的状态

tc -s -d qdisc show dev eth0

tc -s -d class show dev eth0

删除tc规则

tc qdisc del dev eth0 root

实例

一、下载

下载限制单个IP

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

就可以【jiù kě yǐ】☔限制🈸192.168.1.2的下载【de xià zǎi】速度为30Mbit最高可以60Mbit

r2q,是指没有【yǒu】default的【de】📚root,使整个网络的【wǎng luò de】🐗带宽没🐍有【yǒu】限制

下载整段IP

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 的带宽为【wéi】💜3000k了【le】,实际下载速度为【wéi】💜200k左右【zuǒ yòu】。

这种情😍况下【kuàng xià】,这个网🍒段所有【duàn suǒ yǒu】🐎机器共【jī qì gòng】享这200k的带宽。

还可以加入一个sfq(随机公平队列)

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è duàn nèi】的一个【de yī gè】🌎ip占用整个带宽。

TC简介

在Linux中,TC有二种⛳控制方【kòng zhì fāng】💃法【fǎ】🗄CBQ和HTB.HTB是设计【shì shè jì】用来替换【huàn】CBQ的【de】🥋。它是一个层次【gè céng cì】式的【de】🥋过滤框架。TC包括三个基本✖的【de】🥋构成块【gòu chéng kuài】🎥: 队列规【duì liè guī】定qdisc(queueing discipline )、类(class)和分类💶器(Classifiers)。

队列【liè】(queueing discipline):用来实【yòng lái shí】现控制网络的收发速度🥙。通过队【tōng guò duì】🦂列【liè】,Linux可以将网络数据包【jù bāo】🌅缓存起来【lái】,然后根🍜据用户【jù yòng hù】的设置【de shè zhì】,在尽量【zài jìn liàng】不中断【bú zhōng duàn】⛳连接😨(如 TCP)的前提【de qián tí】🛸下来平【xià lái píng】滑网络🌃流量【liú liàng】。需要注🌗意的是,linux对接收【duì jiē shōu】队列【liè】的控制不够好,所以我们一般【men yī bān】只用发送队列【sòng duì liè】🧀,即“控发不🦖控收🦖”。它封装🎟了其他【le qí tā】😕两个主要 TC组件(类和分【lèi hé fèn】🌃类器)。内核如果需要通过某个网络接口发送数据【sòng shù jù】包🌅,它都需要按照😞为这个【wéi zhè gè】接口配置的【zhì de】qdisc(排队规则)把数据【bǎ shù jù】包加入🖱队列【liè】。然后👒,内核会 尽可能🍾多地从qdisc里面取出数据📕包🌅,把它们交给网【jiāo gěi wǎng】🚰络适配器驱动模块🌀。

最简单🚖的【de】QDisc是【shì】pfifo它不对🍝进入的【de】👸数据包【shù jù bāo】🧟做任何的【de】处理,数据包【shù jù bāo】🧟采用先入先出🐲的【de】方式📭通过队【tōng guò duì】列🔉。不过,它会保存网络【cún wǎng luò】接口一时无法【shí wú fǎ】处理的【de】数据包【shù jù bāo】🧟。

队列⛲规则包括FIFO(先进先【xiān jìn xiān】出【chū】🗻),RED(随机早期探测【qī tàn cè】),SFQ(随机公平队列⛲)和令牌【hé lìng pái】💑桶🛤(Token Bucket),类基队列⛲(CBQ),CBQ 是一种🐰超级队💏列⛲,即它【jí tā】🔎能够包含其它【tā】🔎队列⛲(甚至其【shèn zhì qí】它【tā】🔎CBQ)。

class用来表示【lái biǎo shì】控制策【kòng zhì cè】😻略。很显然,很多时候,我们很可能要🤝对不同【duì bú tóng】的【de】🚀IP实行不同的【bú tóng de】🚀流量控制策【kòng zhì cè】😻略,这时候我们就得用不同的【bú tóng de】🚀class来表示【lái biǎo shì】不同的【bú tóng de】🚀控制策【kòng zhì cè】😻略了🈳。

filter用【yòng】🚸来将用【lái jiāng yòng】🚸户划入到【huá rù dào】具体的【de】控👠制策略【luè】🗿中【zhōng】(即不同的【de】🌔class中【zhōng】)。比如【bǐ rú】,现在,我们想对xxa,xxb两个IP实行不同的【de】🌔控制策略【luè】🗿 (A,B),这时【zhè shí】⛷,我们可⏺用【yòng】🚸filter将xxa划入到【huá rù dào】控制策略【luè】🗿A,将xxb划入到【huá rù dào】控制策略【luè】🗿B,filter划分的【huá fèn de】🌔标志位✨可用【yòng】🚸u32打标功🈲能或 IPtables的【de】🌔 set-mark(大多使用【yòng】🚸iptables来做标👴记【jì】)功能来【gōng néng lái】📼实现【shí xiàn】。

目前,TC可以使用的过【yòng de guò】滤器有📙:fwmark分类器🔰,u32分类器🔰,基于路【jī yú lù】♑由的分🌷类器和RSVP分类器🔰(分别用【fèn bié yòng】于【yú】🖤IPV6、IPV4)等【děng】;其【qí】 中〽,fwmark分类器🔰允许我⚡们使用【men shǐ yòng】 Linux netfilter 代码选【dài mǎ xuǎn】择流量,而🤛u32分类器🔰允许我⚡们选择【men xuǎn zé】基于【yú】🖤 ANY 头的流【tóu de liú】量 .需要注意的是,filter(过滤器【guò lǜ qì】)是在QDisc内部😳,它们不😐能作为主体。

数据包->iptables(在通过iptables时【shí】,iptables根据不同的【bú tóng de】♊ip来设置【lái shè zhì】🗄不同的【bú tóng de】♊mark)->TC(class)->TC(queue)。


关键词:Linux,服务器

阅读本文后您有什么感想? 已有 人给出评价!

  • 1 欢迎喜欢
  • 1 白痴
  • 1 拜托
  • 1 哇
  • 1 加油
  • 1 鄙视