時(shí)間:2015/6/28來(lái)源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評(píng)論(0)
C規(guī)則涉及到 隊(duì)列(QUEUE) 分類器(CLASS) 過(guò)濾器(FILTER),filter劃分的標(biāo)志位可用U32或iptables的set-mark來(lái)實(shí)現(xiàn) ) 一般是"控發(fā)"不控收 linux下有兩塊網(wǎng)卡,一個(gè)eth1是外網(wǎng),另一塊eth0是內(nèi)網(wǎng).在eth0上做HTB。(注 意:filter劃分標(biāo)志位可用u32打標(biāo)功能或iptables的set-mark功能,如果用iptables來(lái)打標(biāo)記的話,下行速LV在eth0處 控制,但打標(biāo)應(yīng)在進(jìn)入eth0之前進(jìn)行,所以,"-i eth1";例子:
主要命令就下面三句:創(chuàng)建一個(gè)HTB的根
1.tc qdisc add dev eth0 root handle 1: htb default 20創(chuàng)建一個(gè)HTB的類,流量的限制就是在這里限制的,并設(shè)置突發(fā).
2.tc class add dev eth0 parent 1: classid 1:1 htb rate 200kbit(速率) ceil 200kbit burst 20k(突發(fā)流量)
創(chuàng)建一個(gè)過(guò)濾規(guī)則把要限制流量的數(shù)據(jù)過(guò)濾出來(lái),并發(fā)給上面的類來(lái)限制速度3.tc filter add dev eth0 parent 1: prio 1(優(yōu)先級(jí)) protocol ip u32 match ip sport 80 0xfff flowid 1:1
說(shuō)明:讓交互數(shù)據(jù)包保持較低的延遲時(shí)間,并最先取得空閑帶寬,比如:
ssh telnet dns quake3 irc ftp控制 smtp命令和帶有SYN標(biāo)記的數(shù)據(jù)包,都應(yīng)屬于這一類。為了保證上行數(shù)據(jù)流不會(huì)傷害下行流,還要把ACK數(shù)據(jù)包排在隊(duì)列前面,因?yàn)橄滦袛?shù)據(jù)的ACK必須同上行流進(jìn)行竟?fàn)帯?/p>
TC+IPTABLES+HTB+SFQ
1 tcp/ip 協(xié)議規(guī)定,每個(gè)封包,都需要有ACKNOWLEDGE訊息的回傳,也就是說(shuō),傳輸?shù)馁Y料需要有一個(gè)收到資料的訊息回復(fù),才能決定后面的傳輸速度,并決定是 否重新傳輸遺失的資料,上行的帶寬一部分就是用來(lái)傳輸這些ACK資料的.上行帶寬點(diǎn)用大的時(shí)候,就會(huì)影響ACK資料的傳送速度,并進(jìn)而影響到下載速度,
2 試驗(yàn)證明,當(dāng)上傳滿載時(shí),下載速度變?yōu)樵瓉?lái)速度的40%,甚至更低,,因?yàn)樯陷d文件(包括ftp上傳,發(fā)郵件SMTP),如果較大,一個(gè)的通訊量令帶寬超 向包和,那么所有的數(shù)據(jù)包按照先進(jìn)先出的原則進(jìn)行排隊(duì)和等待,這就可以解釋為什么網(wǎng)內(nèi)其中有人用ftp上載文件或發(fā)送大郵件的時(shí)候,整個(gè)網(wǎng)速變得很慢的原 因.
解決速度之道:
1 為了解決這些速度問(wèn)題,對(duì)經(jīng)過(guò)線路的數(shù)據(jù)進(jìn)行了有規(guī)則的分流.把本來(lái)在寬帶上的瓶頸轉(zhuǎn)移到我們的LINUX路由器上,可以把帶寬控制的比我們購(gòu)買的帶寬小一點(diǎn). 這樣,我們就可以方便的用tc技術(shù)對(duì)經(jīng)過(guò)的數(shù)據(jù)進(jìn)行分流與控制.
我們的想像就像馬路上的車道一樣,有高速道,還有小車道,大車道,需要高速的syn ack icmp ssh等走高速道,需要大量傳輸?shù)膄tp-data,smtp等走大車道,不能讓它堵塞整條馬路,各行其道.
linux下的TC(traffic control)就有這樣的作用,只要控制得當(dāng),一定會(huì)有明顯的效果.tc 和iptables結(jié)合是最好的簡(jiǎn)單運(yùn)用的結(jié)合方法.
我 們?cè)O(shè)置過(guò)濾器以便用iptables對(duì)數(shù)據(jù)包進(jìn)行分類,因?yàn)閕ptables更靈活,而且還可以為每個(gè)規(guī)則設(shè)置計(jì)數(shù)器,iptables用mangle鏈 來(lái)mark數(shù)據(jù)包,告訴了內(nèi)核,數(shù)據(jù)包會(huì)有一個(gè)特定的FWMARK標(biāo)記值(handle x fw) 表明它應(yīng)該送給那個(gè)類(classid x:x),而prio是優(yōu)先值,表明那些重要數(shù)據(jù)應(yīng)該優(yōu)先通過(guò)那個(gè)通道,首先選擇隊(duì)列(選擇htb),
一般系統(tǒng)默認(rèn)的是fifo的先進(jìn)先出隊(duì)列,就是說(shuō)包是按照先來(lái)先處理的原則,如果有一個(gè)大的數(shù)據(jù)包在前面,那么后面的包只能等前面的發(fā)完后才能接著發(fā)了,這樣就算后面既使是一個(gè)小小的ack包,也要等待了,這樣上傳就影響了下載,就算你有很大的下載帶寬也無(wú)能為力.
HTB(Hierarchical token bucket,分層的令牌桶),就像CBQ一樣工作,但是并不靠計(jì)算閑置時(shí)間來(lái)整形,它是一個(gè)分類的令牌桶過(guò)濾器.,它只有很少的參數(shù).
結(jié)構(gòu)簡(jiǎn)圖: 1:
~~~~~~~~~~~~~~~~`~~~~~
~~~~~~~_________1:1~~~~~~~~~1:2________
|~~~|~~~~|~~~~|~~~~~|~~~~~~~~|~~~~~~~~|~~~~~~~|
1:11~~~1:12~~~~~~~~~~~~1:21~~~1:22~~~1:23~~1:24
優(yōu)先順序: 1:11 1:12 1:21 1:22 1:23 1:24
根據(jù)上面的例子,開始腳本:
關(guān)于參數(shù)的說(shuō)明:
rate:是一個(gè)類保證得到的帶寬值,如果有不只一個(gè)類,請(qǐng)保證所有子類總和是小于或等于父類,
ceil: ceil是一個(gè)類最大能得到帶寬值.
prio: 是優(yōu)先權(quán)的設(shè)置,數(shù)值越大,優(yōu)先權(quán)越小,如果是分配剩余帶寬,就是數(shù)值小的會(huì)最優(yōu)先取得剩余的空閑的帶寬權(quán).
一般大數(shù)據(jù)的話,控制在50%-80%左右吧,而ceil最大建議不超過(guò)85%,以免某一個(gè)會(huì)話占用過(guò)多的帶寬.
rate可按各類所需要分配:
1:11是很小而且最重要的數(shù)據(jù)包通道,當(dāng)然要多分點(diǎn),甚至必要時(shí)先全部占用,不過(guò)一般不會(huì)的,所以給全速.
1:12是很重要的數(shù)據(jù)道,給多點(diǎn),最少給一半,但需要時(shí)可以再多一點(diǎn)
rate規(guī)劃 1:2=1:21 +1:22 +1:23 +1:24 一般總在50%-80%左右.
1:21 http,pop是最常用的啦,為了太多人用,而導(dǎo)致堵塞,我們不能給得太多,也不能太少.
1:22 我打算給smtp用,優(yōu)先低于1:21,以防發(fā)大的附件大量占用帶寬.
1:23 我打算給ftp-data,和1:22一樣,很可能大量上傳文件,所以,rate不能給的太多,而當(dāng)其他有剩時(shí)可以給大些,ceil設(shè)置大些.
1:24 是無(wú)所謂通道,就是一般不是我們平時(shí)工作上需要的通道,給小點(diǎn)防止這些人妨礙有正常工作需要的人.
上行uplink 320K,設(shè)置銷低于理論值.
DEV="PPP0"
UPLINK=300
下行downlink 3200K大概一半左右,以便能夠得到更多的關(guān)發(fā)連接.
DOWNLINK=1500
1 曾加一個(gè)根隊(duì)列,沒有進(jìn)行分類的數(shù)據(jù)包都走這個(gè)1:24是缺省類:
tc qdisc add dev $DEV parent 1: htb default 24
1.1 增加一個(gè)根隊(duì)下面主干類1: 速率為$UPLINK k
tc cladd add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit ceil ${UPLINK}kbit prio 0
1.1.1 在主干類1下建立第一葉子類,這是一個(gè)最高優(yōu)先權(quán)的類,需要高優(yōu)先和高速的包走這條通道,比如SYN ACK ICMP等.
tc class add dev $DEV parent 1:1 classid 1:11 htb rate ${$uplink}kbit ceil ${uplink}kbit prio 1
1.1.2 在主類1下建立第二葉子類,這是一個(gè)次高優(yōu)先權(quán)的類,比如我們重要的crm數(shù)據(jù)。
tc class add dev $DEV parent 1:1 classid 1:12 htb rate ${$uplink-150}kbit ceil ${uplink-50}kbit prio 2
1.2 在根類下建立次干類 classid 1:2 ,此次干類的下面全部?jī)?yōu)先權(quán)低于主干類,以防重要數(shù)據(jù)堵塞。
tc class add dev $DEV parent 1: classid 1:2 htb rate ${$UPLINK -150]kbit prio 3
#p#副標(biāo)題#e#
1.2.1 在次干類下建立第一葉子類,可以跑例如http ,pop等。
tc class add dev $DEV parent 1:2 classid 1:21 htb rate 100kbit ceil ${$uplink -150}kbit prio 4
1.2.2 在次干類下建立第二葉子類,不要太高的速度,以防發(fā)大的附件大量占用帶寬,便如smtp等。
tc class add dev $DEV parent 1:2 classid 1:22 htb rate 30kbit ceil ${uplink-160}kbit prio 5
1.2.3 在次干類下建立第三葉子類,不要太高的帶寬,以防大量的數(shù)據(jù)堵塞網(wǎng)絡(luò),例如:ftp-data.
tc class add dev $DEV parent 1:2 classid 1:23 htb rate 15kbit ceil ${UPLINK-170}kbit prio 6
1.2.4 在次干類下建立第四葉子類。無(wú)所謂的數(shù)據(jù)通道,無(wú)需要太多的帶寬,以防無(wú)所謂的人在阻礙正務(wù)。
tc class add dev $DEV parent 1:2 classid 1:24 htb rate 5kbit ceil ${UPLINK -250}kbit prio 7
在每個(gè)類下面再附加上另一個(gè)隊(duì)列規(guī)定,隨機(jī)公平隊(duì)列(SFQ),不被某個(gè)連接不停占用帶寬,以保證帶寬的平均公平使用。
#SFQ(stochastic fairness queueing 隨機(jī)公平隊(duì)列),SFQ的關(guān)鍵詞是"會(huì)話"(或稱作流),主要針對(duì)一個(gè)TCP會(huì)話或者UDP流,流量被分成相當(dāng)多數(shù)量的FIFO隊(duì)列中,每個(gè)隊(duì)列對(duì)應(yīng)一個(gè)會(huì)話。
數(shù)據(jù)按照簡(jiǎn)單輪轉(zhuǎn)的方式發(fā)送,每個(gè)會(huì)話都按順序得到發(fā)送機(jī)會(huì)。這種方式非常公平,保證了每個(gè)會(huì)話都不會(huì)被其它會(huì)話所淹沒,SFQ之所以被稱為"隨機(jī)",是因?yàn)樗⒉皇钦娴臑槊總(gè)會(huì)話創(chuàng)建一個(gè)隊(duì)列,而是使用一個(gè)散列算法,把所有的會(huì)話映射到有限的幾個(gè)隊(duì)列中去。
#參數(shù)perturb是多少秒后重新配置一次散列算法,默認(rèn)為10秒.
tc qdisc add dev $DEV parent 1:11 handle 111: sfq perturb 5
tc qidsc add dev $DEV parent 1:12 handle 112: sfq perturb 5
tc qdisc add dev $DEV parent 1:21 handle 121: sfq perturb 10
tc qidsc add dev $DEV parent 1:22 handle 122: sfq perturb 10
tc qidsc add dev $DEV parent 1:23 handle 123: sfq perturb 10
tc qidsc add dev $DEV parent 1:24 handle 124: sfq perturb 10
設(shè)置過(guò)濾器,handle是iptables作mark的值,讓被iptables在mangle鏈做了mark的不同的值選擇不同的通道classid,而prio是過(guò)濾器的優(yōu)先級(jí)別
tc filter add dev $DEV parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11
tc filter add dev $DEV parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12
tc filter add dev $DEV parent 1:0 protocol ip prio 3 handle 3 fw classid 1:21
tc filter add dev $DEV parent 1:0 protocol ip prio 4 handle 4 fw classid 1:22
關(guān)鍵詞標(biāo)簽:linux,TC+HTB流量控制
相關(guān)閱讀
熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程使用screen管理你的遠(yuǎn)程會(huì)話GNU/Linux安裝vmware如何登錄linux vps圖形界面 Linux遠(yuǎn)程桌面連
人氣排行 Linux下獲取CPUID、硬盤序列號(hào)與MAC地址linux tc實(shí)現(xiàn)ip流量限制dmidecode命令查看內(nèi)存型號(hào)linux下解壓rar文件安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令lcx.exe、nc.exe、sc.exe入侵中的使用方法查看linux服務(wù)器硬盤IO讀寫負(fù)載