tc qdisc add dev $IFACE root handle 1: htb default 20
tc class add dev $IFACE parent 1: classid 1:1 htb rate ${USPEED}kbit prio 5
tc filter add dev $IFACE parent 1: protocol ip prio 18 u32 match ip src 192.168.18.15/0 flowid 1:1
ip link set dev $IFB up
tc qdisc add dev $IFACE handle ffff: ingress
tc filter add dev $IFACE parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev $IFB
tc qdisc add dev $IFB root handle 2: htb
tc class add dev $IFB parent 2: classid 2:1 htb rate ${DSPEED}kbit
tc filter add dev $IFB protocol ip parent 2: prio 1 u32 match ip dst 192.168.18.15/0 flowid 2:1
上面是来源于wondershaper的主要tc部分,因做测试有所修改。
tc qdisc add dev $IFACE root handle 1: htb default 20
在创建时指定一个 default 20,表示默认使用classid 1:20组,即没有其它规则指定的都使用classid 1:20这一组规则处理。很多“大神”在写qos脚本时认为,这default是“随便创建”的,随便填256,999,65536等等,以为反正用不到。他们写的东西能不能用我真的不知道,但“随便创建”就体现出无知来。比如在传输一个未识别类型的数据时,使用这“随便创建”并且并不存在的规则时,传输就毫无顾忌,横冲直撞,占满整个带宽,何来qos可言?
正常做法应该创建一条1:20规则,并且指定带宽和比较低的优先级,无法归类的也受控制。
但tc是个非常卵疼的东西,管输出不管输入,因此要用于wan接口上会很大麻烦,所以都用于比较方便控制的br-lan上,如果指定default组,则内网传输也受控,在外网100mbps,内网1000mbps的环境下使用,内网也受控不会超过100mbps,造成非常蛋疼的效果。