Linux流量控制--过滤器&分类

来源:互联网 发布:软件演化生命周期模型 编辑:程序博客网 时间:2024/06/07 05:08
使用过滤器分类

每块网卡都有一个出口根排队规则,缺省情况下是pfifo_fast 排队规则。每个排队规则都指定一个句柄,句柄有两个部分,一个主号码和一个次号码。习惯上把根队列规定称为“1:”,等价于“1:0”。类的主号码必须与它们父辈的主号码一致。如下图

 


数据包是在根队列规定处入队和出队的,而内核只同根打交道。一个数据包可能是按照下面这个链状流程进行分类的:1: -> 1:1 -> 12: -> 12:2,数据包现在应该处于12:2 下属的某个队列规定中的某个队列中。在这个例子中,树的每个节点都附带着一个过滤器,用来选择下一步进入哪个分支。然而,这样也是允许的:1: -> 12:2,也就是说,根所附带的一个过滤器要求把数据包直接交给12:2。

当内核决定把一个数据包发给网卡的时候,根队列规定1:会得到一个出队请求,然后把它传给1:1,然后依次传给10:、11:和12:,然后试图从它们中进行 dequeue()操作。也就是说,内核需要遍历整颗树,因为只有12:2 中才有这个数据包。换句话说,类及其兄弟仅仅与其“父队列规定”进行交谈,而不会与网卡进行交谈。只有根排队规则才能由内核进行出队操作。而且,任何类的出队操作都不会比它们的父类更快。

为了决定用哪个类处理数据包,必须调用所谓的“分类器链” 进行选择。这个链中包含了这个分类队列规定所需的所有过滤器。

Linux下可用的分类器有fw、u32、route等。fw根据防火墙如何对这个数据包做标记进行判断;u32根据数据包中的各个字段进行判断;route根据数据如何被路由进行判断。rsvp、rsvp6根据数据包的RSVP 情况进行判断,它只能用于自己的网络,互联网并不遵守RSVP;tcindex用于DSMARK排队规则。

分类器一般都能接受几个参数,如下:

protocol

分类器所接受的协议。一般来说只会接受IP 数据。必要参数。

parent  

分类器附带在哪个句柄上。句柄必须是一个已经存在的类。必要参数。

prio  

分类器的优先权值。优先权值低的优先。

handle  

对于不同过滤器,它的意义不同。

fw

fw分类器要依靠防火墙把需要引导的封包标识起来。所以必须先设定好防火墙,使用 ipchains/iptables给数据包打标签。

例如:iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j MARK --set-mark 1

它的意思是把发往目的端口为53(DNS)的UDP数据包都打上标记1。

tc filter add dev eth0 parent 10: protocol ip prio 1 handle 1 fw classid 10:1

它的意思是打上标记为1的数据包优先级为1,并放入10:1队列中。

u32

u32分类器是当前很先进的过滤器。全部基于哈希表实现,所以当有很多过滤器的时候仍然能够保持健壮。u32 过滤器最简单的形式就是一系列记录,每条记录包含两个部分:一个选择器和一个动作。

u32 选择器包含了能够对当前通过的数据包进行匹配的特征定义。它其实只是定义了IP 包头中某些位的匹配而已,但这种看似简单的方法却非常有效。

例如:# tc filter add dev eth0 protocol ip parent 1:0 pref 10 u32 /

match u32 00100000 00ff0000 at 0 flowid 1:10

它的意思是匹配那些TOS 字段带有‘最小延迟’属性的数据包。

普通选择器定义了要对数据包进行匹配的特征、掩码和偏移量。使用普通选择器,可以匹配IP(或者上层协议)头部的任意一个bit。一般选择器的语法是:

match [ u32 | u16 | u8 ] PATTERN MASK [ at OFFSET | nexthdr+OFFSET]

利用u32、u16 或u8 三个关键字中的一个来指明特征的bit 数。然后PATTERN和MASK 应该按照它定义的长度紧挨着写。OFFSET 参数是开始进行比较的偏移量(以字节计)。如果给出了“nexthdr+”关键字,偏移量就移到上层协议头部开始的位置。

例如:# tc filter add dev eth0 parent 10: prio 3 u32 /

       match ip protocol 6 0xff /

match u8 0x10 0xff at nexthdr+13 /

flowid 10:1

它的意思是匹配带有ACK 位的TCP 数据包,并将其放入10:1的队列中。

route

路由分类器基于路由表的路由结果进行过滤。当一个数据包穿越一个类,并到达一个标有“route”的过滤器的时候,它就会按照路由表内的信息进行分裂。

例如:# ip route add 192.168.10.0/24 via 192.168.10.1 dev eth1 realm 10

tc filter add dev eth1 parent 1:0 protocol ip prio 100 route to 10 classid 1:10

目标网络192.168.10.0 定义为realm 10,凡是去往192.168.10.0 子网的数据包匹配到类1:10。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 四个月宝宝左侧胸锁乳突肌厚怎么办 脖子疼好几天了怎么办 有双下巴怎么办才能瘦掉 胃突然疼的厉害怎么办 手劳损痛的厉害怎么办 手臂扭到了很疼怎么办 寒湿导致肩膀痛怎么办 吃辣脖子肿了怎么办 脖子长了个肿瘤怎么办 一边背高一边低怎么办 生完孩子肩宽了怎么办 狗狗脖子上长囊肿怎么办 胸肋关节韧带疼怎么办 三岁宝宝有点驼背怎么办 20多岁有点驼背怎么办 五岁宝宝有点驼背怎么办 孕妇腰扭了很痛怎么办 怀孕了腰扭了疼怎么办 小龙芭比扭腰机开机没有声音怎么办 高中生训练数学计算的准确性怎么办 跑步累了跑不动了怎么办 一跑步就岔气了怎么办 婴儿关节折邹发红怎么办? 打了借条人跑了怎么办 吃凉的胃不舒服怎么办 跑步机带子跑偏怎么办 在跑步机上摔倒怎么办 弯道以后就是直线行驶怎么办 跑步机的声音大怎么办 科二一直考不过怎么办 考科目三太紧张怎么办 科目三太紧张了怎么办 跑步慢怎么办怎样跑快 铣床铣得不直怎么办 考试的时候检测仪响怎么办 吸入腐蚀性气体导致嗓子疼怎么办 孕妇已做c13检查怎么办 静电除尘器绝缘子箱温度低怎么办 高中三角函数计算总算不对怎么办 江苏高考物理考d怎么办 高二化学学不好怎么办