#;tc;qdisc;add;dev;eth0;root;handle;10:;cbq;bandwidth;10Mbit;avpkt;1000
其含义是:我们配置了;eth0;的队列规定,root;表示这是根(root)规定,其句柄;(handle)设定为;10:" 。;其类型为;CBQ 。带宽为;10;M,平均包大小为;1000;字节 。
下面生成根类(root;class):
#;tc;class;add;dev;eth0;parent;10:0;classid;10:1;cbq;bandwidth;10Mbit;rate;
10Mbit;allot;1514;weight;1Mbit;prio;8;maxburst;20;avpkt;1000
这条命令其实不比前一条命令有更多的含义 。其中,1514;是;MTU;的值 。;
下面生成;ISP;类:;
#;tc;class;add;dev;eth0;parent;10:1;classid;10:100;cbq;bandwidth;10Mbit;rate;
8Mbit;allot;1514;weight;800Kbit;prio;5;maxburst;20;avpkt;1000;bounded
我们分配了;8;兆的带宽给它,其中;bounded;表示该类不能超过该阀值 。
下面生成;Office;类:
#;tc;class;add;dev;eth0;parent;10:1;classid;10:200;cbq;bandwidth;10Mbit;rate;
2Mbit;allot;1514;weight;200Kbit;prio;5;maxburst;20;avpkt;1000;bounded
为了更清晰起见,我们的类可以用下图表示:
我们已经向内核通知了我们的类,我们还需要告诉内核如何管理队列,如下所示:
#;tc;qdisc;add;dev;eth0;parent;10:100;sfq;quantum;1514b;perturb;15
#;tc;qdisc;add;dev;eth0;parent;10:200;sfq;quantum;1514b;perturb;15
这里,我们使用了随机公平队列(sfq),在消耗;CPU;周期较少的情况下,其性能还是可以接受的 。其它一些队列规定可能更好,但要占用较多的;CPU;资源 。令牌桶过滤器也经常使用 。
下面还有一件事要作:告诉内核网络包和类的映射关系 。
#;tc;filter;add;dev;eth0;parent;10:0;protocol;ip;prio;100;u32;match;ip;dst;
150.151.23.24;flowid;10:200
#;tc;filter;add;dev;eth0;parent;10:0;protocol;ip;prio;25;u32;match;ip;dst;
150.151.0.0/16;flowid;10:100
这里,我们假定;Office;位于防火墙;150.151.23.24;的后面,其它;IP;地址都属于;ISP 。;u32;匹配是一种比较简单的匹配,我们可以使用;netfilter;生成更加复杂的匹配规则 。
我们已经分配了下载带宽,下面是上载带宽的分配:
#;tc;qdisc;add;dev;eth1;root;handle;20:;cbq;bandwidth;10Mbit;avpkt;1000
#;tc;class;add;dev;eth1;parent;20:0;classid;20:1;cbq;bandwidth;10Mbit;rate;
10Mbit;allot;1514;weight;1Mbit;prio;8;maxburst;20;avpkt;1000
#;tc;class;add;dev;eth1;parent;20:1;classid;20:100;cbq;bandwidth;10Mbit;rate;
8Mbit;allot;1514;weight;800Kbit;prio;5;maxburst;20;avpkt;1000;
bounded
#;tc;class;add;dev;eth1;parent;20:1;classid;20:200;cbq;bandwidth;10Mbit;rate;
2Mbit;allot;1514;weight;200Kbit;prio;5;maxburst;20;avpkt;1000;
bounded
#;tc;qdisc;add;dev;eth1;parent;20:100;sfq;quantum;1514b;perturb;15
#;tc;qdisc;add;dev;eth1;parent;20:200;sfq;quantum;1514b;perturb;15
#;tc;filter;add;dev;eth1;parent;20:0;protocol;ip;prio;100;u32;match;ip;src;
150.151.23.24;flowid;20:200
#;tc;filter;add;dev;eth1;parent;20:0;protocol;ip;prio;25;u32;match;ip;src;
150.151.0.0/16;flowid;20:100
这与前面的描述基本一致,所以就不做更多的解释了 。
注:;
在前面的例子中,我们注意到:即使;ISP;客户多数离线,我们的;Office;用户也仍然只;有;2;M;的带宽,这是相当浪费的 。我们可以删掉;"bounded";参数,这样,各类之间就可以相互借用带宽了 。
但是,某些类也许不希望向其它类借用带宽;比如,一条线路上的两个互为竞争对手的;ISP;的情况 。在这种情况下,我们可以加上关键字;"isolated" 。
3.;结束语
目前,Linux;所提供的;QoS(服务质量)是所有操作系统中最复杂、最完善的 。另外,;BSD;的;ALTQ;应该说也相当不错;但是,在复杂性、灵活性和可扩展性等方面要落后;Linux;一大截 。我不太清楚微软的产品是否提供了这方面的功能 。Sun;的;Solaris;提供;了;CBQ;和;RSVP;的功能 。
推荐阅读
- ios12恢复微信已删除聊天记录的操作步骤
- Linux系统配置与优化经验谈
- 荣耀play中转移数据的详细步骤
- 绿草莓晶是染色的吗
- 花样影视投屏具体操作步骤
- 猫反常的叫是什么预兆
- LINUX引导过程
- 羊双腔吸虫病的防治技术
- ios12中打开个人热点的操作步骤
- 邓羌义勇的文言文翻译 邓羌义勇文言文翻译及注释
