日期:2014-05-16  浏览次数:20599 次

有没有懂LINUX下流量控制工具TC的高手啊,有点问题请教啊
最近在写毕业论文,其中涉及到流量控制这一块。由于资源所限,采用了linux下的TC工具。
现在的问题是配置好了TC的队列、过滤器后,用一台机器向所配置的机子发数据,配置TC的机器上也同时运行一个程序,获取这些数据并同时按照TOS字段的不同转发到不同网卡,TC的过滤器就是按照这些TOS字段来对应的队列。
结果我查看status时,结果都是0,为什么没有反应呢?有没有高手来指点一下啊,网上的资料实在是太少了,也不知道是我研究的太过前沿还是太过落后!
贴一段主要的命令吧:

#建立根分类,默认分类为1:30

tc qdisc add dev $DEV root handle 1: htb default 30


#主干类下面建立子分类EF,编号1:11,保证带宽3M,不可借用

tc class add dev $DEV parent 1: classid 1:1 htb rate 3Mbit ceil 3Mbit prio 1


#根分类下建次干分类AF
tc class add dev $DEV parent 1: classid 1:2 htb rate 7Mbit ceil 7Mbit prio 1


#次干分类下建立AF1-AF4分类

tc class add dev $DEV parent 1:2 classid 1:21 htb rate 2Mbit ceil 7Mbit prio 2

tc class add dev $DEV parent 1:2 classid 1:22 htb rate 2Mbit ceil 7Mbit prio 2

tc class add dev $DEV parent 1:2 classid 1:23 htb rate 2Mbit ceil 7Mbit prio 2

tc class add dev $DEV parent 1:2 classid 1:24 htb rate 1Mbit ceil 7Mbit prio 2


#每个类下附加SFQ规则
tc qdisc add dev $DEV parent 1:11 handle 11: sfq perturb 5

tc qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 5

tc qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 5

tc qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 5

tc qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 5

echo "设置队列规则成功."


#按TOS设置过滤器
echo -n "按TOS设置包过滤器......"

U32="tc filter add dev $DEV parent 1: protocol ip prio 1 u32"

${U32} match ip tos ${DSCP_EF} 0xff flowid 1:1
${U32} match ip tos ${DSCP_AF1} 0xff flowid 1:21

${U32} match ip tos ${DSCP_AF2} 0xff flowid 1:22

${U32} match ip tos ${DSCP_AF3} 0xff flowid 1:23

${U32} match ip tos ${DSCP_AF4} 0xff flowid 1:24


echo "包过滤器设置成功."

}


------解决方案--------------------
TOS字段需要使用netfilter为不同TOS设置MARK。TC再依据过滤规则为不同MARK值得包加入不同的TC队列。应该是你没用iptables为TOS设置过滤规则。