linux通過tc控制網路QoS(1)

來源:互聯網
上載者:User

tc是linux traffic control的簡稱,原理是在協議棧出包的時候,通過qdisc (Queue Discipline)和 filter 機制把不同規則定義的流放到不同class的子qdisc中(對於classful qdisc是這樣,對於classless qdisc只有一個root qdisc)。網上關於tc的資料很多,本篇不去討論tc的各種qdisc, class, filter或者不同的classful/classless class的使用,而只針對HTB+iptables/ebtables的方式做一些研究

HTB是classful qdisc的一種實現,latrc.org推薦使用HTB來代替CBQ作為classful qdisc的配置,在HTB中,區分不同流的方法很多,比如u32 selector,classify,mark等。先來看lartc.org那篇著名的文檔Linux Advanced Routing&Traffic Control HOWTO裡的例子

#tc qdisc add dev eth0 root handle 1: htb default 30

#tc class add dev eth0 parent 1: classid 1:10 htb rate 5mbit burst 15k

#tc class add dev eth0 parent 1: classid 1:20 htb rate 3mbit ceil 5mbit burst 15k

#tc class add dev eth0 parent 1: classid 1:30 htb rate 500kbit ceil 1mbit burst 15k

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

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

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

這個例子的情境是,把eth0的出流量分成三類,分別限制rate, ceil頻寬和burst流量(具體值的含義參考HTB相關文檔,其中1:30為預設),對於每一類流量而言,又用一個sfq的子qdisc來保證公平。這麼做的原因比如很多進程的出流量都可以match到classid 1:10,這是這些進程公用頻寬,通過一個sfq來保證不會有進程的頻寬被餓死。

最後這個例子通過一個u32 selector來區分流量,可以看出,HTTP流量被分到了class 1:10,SMTP流量被分到了 class 1:20,其餘都在default class 1:30,所有共用HTTP流量的進程採用公平方式共用

我們可以用u32 match的方式來匹配不同的流,這裡不廢話了,有興趣去看上面提到的那個文檔。個人認為u32 match雖然可以 match 不同的協議如ip tcp icmp,並match諸如IP段,連接埠等,但終究不如iptables更靈活,同時u32 match對於二層無感,這都使得通過iptables/ebtables mark目標來做filter更加靈活可控

舉兩個例子,首先是tc + iptables來對ip地址192.168.1.1的出包做QoS,限制bps為2Mbit,允許突發bps最高到5Mbit

#tc qdisc add dev eth0 root handle 1: htb default 100

#tc class add dev eth0 parent 1: classid 1:10 htb rate 2Mbit ceil 5Mbit

#iptables -t mangle -A POSTROUTING -s 192.168.1.1 -j CLASSIFY --set-class 1:10

tc + iptables只能對三層流量做QoS,如果是二層流量,只能通過tc + ebtables了,下面的例子用來限制arp報文的bps

#tc qdisc add dev eth0 root handle 1: htb default 100

#tc class add dev eth0 parent 1: classid 1:20 htb rate 1Kbit ceil 5Kbit

#tc filter add dev eth0 prio 32 protocol arp handle 127 fw classid 1:10

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.