1 2 3 4 5 6 | #tc qdisc add dev eth0 root handle 1: prio # 此命令立即创建了类 : 1:1, 1:2, 1:3 ( 缺省三个子类 ) #tc qdisc add dev eth0 parent 1:1 handle 10: sfq #tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate 20kbit buffer 1600 limit 3000 注 : 此为 TBF 限速的另一写法 , 前文有讲解 . #tc qdisc add dev eth0 parent 1:3 handle 30: sfq |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #tc qdisc add dev eth0 root handle 1:0 cbq bandwidth 100Mbit avpkt 1000 cell 8 #tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 100Mbit rate 6Mbit weight 0.6Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded 这部分按惯例设置了根为 1:0, 并且绑定了类 1:1. 也就是说整个带宽不能超过 6Mbps. #tc class add dev eth0 parent 1:1 classid 1:3 cbq bandwidth 100Mbit rate 5Mbit weight 0.5Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 #tc class add dev eth0 parent 1:1 classid 1:4 cbq bandwidth 100Mbit rate 3Mbit weight 0.3Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 建立了 2 个类 . 注意我们如何根据带宽来调整 weight 参数的 . 两个类都没有配置成"bounded", 但它们都连 接到了类 1:1 上 , 而 1:1 设置了"bounded". 所以两个类的总带宽不会超过 6Mbps. 别忘了 , 同一个 CBQ 下面的子 类的主号码都必须与 CBQ 自己的号码相一致 ! #tc qdisc add dev eth0 parent 1:3 handle 30: sfq #tc qdisc add dev eth0 parent 1:4 handle 40: sfq 缺省情况下 , 两个类都有一个 FIFO 队列规定 . 但是我们把它换成 SFQ 队列 , 以保证每个数据流都公平对待 . #tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip sport 80 0xffff flowid 1:3 #tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip sport 25 0xffff flowid 1:4 |
1 2 3 4 5 6 7 8 9 10 11 12 | #tc qdisc add dev eth0 root handle 1: htb default 30 #tc class add dev eth0 parent 1: classid 1:1 htb rate 6mbit burst 15k #tc class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbit burst 15k #tc class add dev eth0 parent 1:1 classid 1:20 htb rate 3mbit ceil 6mbit burst 15k #tc class add dev eth0 parent 1:1 classid 1:30 htb rate 1kbit ceil 6mbit 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 # 添加过滤器 , 直接把流量导向相应的类 : #U32="tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32" #$U32 match ip dport 80 0xffff flowid 1:10 #$U32 match ip sport 25 0xffff flowid 1:20 三 . Linux 流量控制之 U32 过滤规则 过滤器是对数据包进行分类工具 , 过滤器用与把数据包分类并放入相应的子队列 , 这些过滤器在分类的队列规定内部被调用 . 为了决定用哪个类处理数据包 , 必须调用所谓的"分类器链" 进行选择 . 这个链中包含了这个分类队列规定所需的所有过滤器 . 常用到的为 U32 过滤器 分类的一示例图: 当一个数据包入队的时候 , 每一个分支处都会咨询过滤器链如何进行下一步 . 典型的配置是在 1:1 处有一个过滤器把数据包交给 12:, 然后 12: 处的过滤器在把包交给 12:2. 你可以把后一个过滤器同时放在 1:1 处 , 而得到效率的提高 . 另外 , 你不能用过滤器把数据包向"上"送 . 而且 , 使用 HTB 的时候应该把所有的规则放到根上 .. 注 : 数据包只能向"下"进行入队操作 ! 只有处队的时候才会上到网卡所在的位置来 . 他们不会落到树的最 底层后送到网卡 ... 清单 6. 过滤器过滤示例
常用到的过滤命令一览
根据源 / 目的地址 源地址段 'match ip src 1.2.3.0/24' 目的地址段 'match ip dst 4.3.2.0/24' 单个 IP 地址 'match ip 1.2.3.4/32' 根据源 / 目的端口 , 所有 IP 协议 源 'match ip sport 80 0xffff' 0xffff 表所有数据包 目的 'match ip dport 80 0xffff' 根据 IP 协议 (tcp, udp, icmp, gre, ipsec) icmp 是 1:'match ip protocol 1 0xff' 1 是根据 /etc/protocols 协议号来定 根据 fwmark
注 :handle 根据过滤器的不同 , 含义也不同 按 TOS 字段
flowid 1:4 选择交互和最小延迟的数据流 匹配大量传输 , 使用"0x08 0xff".
at 0 flowid 1:10 匹配那些 TOS 字段带有'最小延迟'属性的数据包 |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |