免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4306 | 回复: 13
打印 上一主题 下一主题

为什么我的QoS数据流不能进入队列? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-29 09:13 |只看该作者 |倒序浏览
iptables -t mangle -I PREROUTING -p udp --sport 21 -j MARK --set-mark 0x1
iptables -t mangle -I PREROUTING -p udp --sport 21 -j RETURN
iptables -t mangle -I PREROUTING -p udp --dport 21 -j MARK --set-mark 0x1
iptables -t mangle -I PREROUTING -p udp --dport 21 -j RETURN
iptables -t mangle -I PREROUTING -p udp --sport 80 -j MARK --set-mark 0x2
iptables -t mangle -I PREROUTING -p udp --sport 80 -j RETURN
iptables -t mangle -I PREROUTING -p udp --dport 80 -j MARK --set-mark 0x2
iptables -t mangle -I PREROUTING -p udp --dport 80 -j RETURN

iptables -t mangle -I OUTPUT -p udp --sport 21 -j MARK --set-mark 0x1
iptables -t mangle -I OUTPUT -p udp --sport 21 -j RETURN
iptables -t mangle -I OUTPUT -p udp --dport 21 -j MARK --set-mark 0x1
iptables -t mangle -I OUTPUT -p udp --dport 21 -j RETURN
iptables -t mangle -I OUTPUT -p udp --sport 80 -j MARK --set-mark 0x2
iptables -t mangle -I OUTPUT -p udp --sport 80 -j RETURN
iptables -t mangle -I OUTPUT -p udp --dport 80 -j MARK --set-mark 0x2
iptables -t mangle -I OUTPUT -p udp --dport 80 -j RETURN

tc qdisc del dev eth2 root
tc qdisc add dev eth2 root handle 1: cbq bandwidth 10Mbit avpkt 1000 cell 8 mpu 64

tc class add dev eth2 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate 10Mbit allot 1514 weight 1Mbit prio 8 maxburst 200 avpkt 1000 bounded
tc class add dev eth2 parent 1:1 classid 1:2 cbq bandwidth 10Mbit rate 9Mbit allot 1514 weight 0.9Mbit prio 6 maxburst 8 avpkt 1000
tc class add dev eth2 parent 1:1 classid 1:3 cbq bandwidth 10Mbit rate 64Kbit allot 1514 weight 6.4Kbit prio 2 maxburst 200 avpkt 160 bounded

tc qdisc add dev eth2 parent 1:2 sfq quantum 1514b perturb 15
tc qdisc add dev eth2 parent 1:3 sfq quantum 1514b perturb 15

tc filter add dev eth2 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:2
tc filter add dev eth2 parent 1:0 protocol ip prio 2 handle 2 fw classid 1:3

eth2是wan口,从lan口向eth2用上述命令打流量,在wan口eth2也可以接收到21端口和80端口数据,但在串口中发现两个队列数据均为0,21端口和80端口数据都没有进入队列,为什么呢?即使把mangle表的OUTPUT链内容去掉也不行。

# tc -s qdisc ls dev eth2
qdisc cbq 1: rate 10000Kbit (bounded,isolated) prio no-transmit
Sent 1897468 bytes 9406 pkts (dropped 0, overlimits 0)
  borrowed 0 overactions 0 avgidle 597 undertime 0
qdisc sfq 8001: parent 1:2 limit 128p quantum 1514b perturb 15sec
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc sfq 8002: parent 1:3 limit 128p quantum 1514b perturb 15sec
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
# tc -s class ls dev eth2
class cbq 1: root rate 10000Kbit (bounded,isolated) prio no-transmit
Sent 1897468 bytes 9406 pkts (dropped 0, overlimits 0)
  borrowed 0 overactions 0 avgidle 597 undertime 0
class cbq 1:1 parent 1: rate 10000Kbit (bounded) prio no-transmit
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
  borrowed 0 overactions 0 avgidle 655 undertime 0
class cbq 1:2 parent 1:1 leaf 8001: rate 9000Kbit prio 6
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
  borrowed 0 overactions 0 avgidle 673 undertime 0
class cbq 1:3 parent 1:1 leaf 8002: rate 64000bit prio 1
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
  borrowed 0 overactions 0 avgidle 2.97632e+08 undertime 0

[ 本帖最后由 jhunix008 于 2008-10-29 09:24 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-10-29 10:56 |只看该作者
但在串口中发现两个队列数据均为0,21端口和80端口数据都没有进入队


您这里的串口指的是什么啊?

没有在linux上实施过QOS,不过我想应该和网络设备的思路相似,请问一下您的优先级报文怎么实现?

论坛徽章:
0
3 [报告]
发表于 2008-10-29 11:21 |只看该作者

回复 #2 hjp0021 的帖子

我是在路由器上添加的上述命令,所以可以在串口中看到结果。
所有发往21端口的包在iptables中打标记为1,发往80端口的包MARK值为2,然后
tc filter add dev eth2 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:2
中将mark为1的数据流和类1:2(即9M带宽的数据流)对应起来,优先级设为6,
而发往80端口的数据流和类1:3(即64K带宽的数据流)对应起来,优先级设为2,属于高优先级的。

是不是因为我的mark标记没有打上去?怎么看到mark值是否打上去了呢?

[ 本帖最后由 jhunix008 于 2008-10-29 11:25 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-10-29 15:46 |只看该作者
我是在路由器上添加的上述命令,所以可以在串口中看到结果。


什么路由器?Cisco还是别的厂家?

从描述来看应该是MARK没有打上,您不忙着做队列调度,首先可以通过抓包确认一下标记打上没有。

论坛徽章:
0
5 [报告]
发表于 2008-10-29 17:35 |只看该作者

回复 #4 hjp0021 的帖子

我们自己的路由器,在上面调试QoS功能。抓包可以看到标记吗?毕竟mark不是包的一部分。
问题是如何确定有没有打上标记呢?我看网上有人也是这样打标记而且可以的,不知道为什么会这样。

论坛徽章:
0
6 [报告]
发表于 2008-10-29 18:47 |只看该作者

回复 #5 jhunix008 的帖子

呵呵,看来我指的mark和你指的mark不相同,我说的mark意指优先级标记。比如根据VLAN实现QOS,VLAN  111的优先级为5,VLAN  222的优先级为0,这里的5,0在报文中是可以体现出来的。
那么通过抓包就能看到报文中的QOS优先级是否已经被标记。

[ 本帖最后由 hjp0021 于 2008-10-29 18:54 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-10-29 19:54 |只看该作者
我上面说的mark是iptables加上去的,它只能在分配给它值的主机上使用,并不是包的一部分。但是我看到很多资料都说可以这样为数据流打不同的标记,并以此来区分不同的数据流,包括“Linux高级路由和流量控制HOWTO”。不知道为什么我这样使用不能起作用。

[ 本帖最后由 jhunix008 于 2008-10-29 19:56 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-10-29 20:17 |只看该作者
刚才加了下面两句以后
iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -p icmp -j RETURN
从lan内ping外网IP,结果发现1:2的有了Sent数据,说明这样打mark标记是可以的。问题应该是我上面的iptables命令不对。再查查看,难道不能针对端口来打mark?

论坛徽章:
0
9 [报告]
发表于 2008-10-30 09:25 |只看该作者
我试了试根据IP来打不同的mark也不可以,我的Linux kernel版本是2.6.15,看样子是应该是需要打IPMARK的patch?打了patch再试试看。我记得Linux2.4.30内核里是有“Layer 7 match support”的,2.6.15版本的没有了?

论坛徽章:
0
10 [报告]
发表于 2008-10-30 16:28 |只看该作者
不清楚,帮你顶下....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP