2010-11-24 Packet Classification

今天准备看一看高性能的作业。这一次的作业时关于packet classification的。先解释一下packet classification,在路由器接受到一个包之后,路由器需要根据一些路由策略来决定如何处理这些包,那么在接受到一个包了之后,查看一下这个包到底是通过哪一个规则来处理,这就需要的是packet classification。

packet classification一般有两类方法,一种是基于树的,有点想前面学过的查表算法,就是把规则抽象成一个节点,通过搜索一棵树来匹配规则。

另外一种非常巧妙,就是把一个规则看成一个d维的空间,接收到的包相当于一个点,看看这个点属于哪一个优先级更高的空间。

感觉是基于几何的这种算法更流行一些。我看的这个论文就是属于这种类型的算法。

首先是一堆基本表示方法,

U=[0..2^w-1]表示的是一维的值域,U^d表示的是d维的空间。H是一个规则的集合,h表示一个规则。R(h)表示的是h这个规则代表的一个空间,很明显这个空间是属于U^d的,这个空间的各个维度分别是<R1(h),R2(h),…,Rd(h)>,一个多维空间x被表示为<I1(x),I2(x),…,Id(x)>也是属于U^d的。一个包被表示成一个点<q1,q2,…, qd>也是属于这个空间的。

算法分为两部分,一个是在一个给定空间上面进行数据结构的构建,另外一个是通过这个数据结构来进行packet classification。讲解数据结构的构建:

第一部分是进行对规则的划分,因为这是对于某一个区域x的,可以分为以下几类:

1) 如果规则h与x没有交集,那么直接丢弃规则h。

2) 如果规则h覆盖了整个区域x,那么h成为了cover(x)中的一员,称为覆盖规则。

3) 如果规则h在j轴上面的投影Rj(h)覆盖了区域x在j轴上面的投影,那么h成为FBj(x)中的一员,称为回滚规则。

4) 如果规则h与区域x交叉的话,h属于cross(x)集合,称为交叉规则。

对于覆盖规则cover(x),所有在x中的点都是属于cover(x)集合里面的规则的。g(x)表示的是cover(x)集合里面优先级最高的规则,所以g(x)是一个潜在的正确解。

对于回滚规则,也就是有一个维度可以覆盖的规则,那么,在这个维度上面,这个规则是可以覆盖的,那么要判断一个点是否属于某个规则的时候,就是判断其他维度上面是不是属于,所以。对于FBj(x)里面的规则,就可以把d维空间上面的分类问题变成一个d-1维空间上面的分类问题。

对于交叉规则,则不能提供任何信息,只能再把这个区域分为m个小的区域,然后在使用cross(x)里面的规则去递归地建立数据结构D^d(yi,cross(x))。

然后,需要存储的数据有,1) 对g(x)的一个引用,g(x)表示的是最高优先级的cover(x),2) 有d个引用,分别连接到d个(d-1)维的数据结构D^d(x,FBj(x)),3)m个引用,分别引用到D^d(yi,cross(x))上面。

这个创建过程完的时候这个区域的值为1.

今天先到这里,明天继续。

转载于:https://www.cnblogs.com/wudanzy/archive/2010/11/25/1887218.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值