Page 227 - 《软件学报》2020年第12期
P. 227

鲁宁  等:联盟模式下高效单包溯源方法研究                                                            3893


                                                                                 n
         立的哈希函数,使用它们来计算每个成员前缀,若每个哈希值占 n bits,那么 k 个哈希值对应 2  bits 布鲁姆过滤器
         的位置索引,并将这 k 个位置的值设置为 1.任给 IP 分组 p,鉴于当前网络广泛采用 CIDR 技术,覆盖 p 中目的地
         址的前缀最多有 32 种.对于任一前缀,都使用 k 个哈希函数来计算它在布鲁姆过滤器所处位置,同时查验其值.
         若 k 个值都为 1,那就证明 p 就是溯源分组.不过,若将传统布鲁姆过滤器直接应用于溯源分组识别,会产生如下
         问题.
             1)   联盟成员的灵活退出和加入,要求布鲁姆过滤器必须能够随时添加和删除成员前缀的压缩值,然而传
                 统结构只支持添加,不支持删除;
             2)   鉴于覆盖 IP 到达分组目的地址的网络前缀类型较多,入口路由器的高负载,要求布鲁姆过滤器必须能
                 够并行查验所有可能的覆盖前缀,然而传统结构只支持串行查验,效率较低.
             为此,本文设计一种面向网络前缀的计数布鲁姆过滤器(counting Bloom filtering  toward  prefixes,简称
         PCBF),如定义 10 所述,它能够在随意增添和删除成员前缀的前提下快速、准确地完成溯源分组识别.
             定义 10.  面向网络前缀的计数布鲁姆过滤器可被定义为五元组 PCBF=(P,E,H,S,O),具体含义如下.
             •   P={p 1 ,p 2 ,…,p m }为所涉及的联盟成员前缀集;
             •   E={e 1 ,e 2 ,…,e n }为所涉及的到达分组的目的地址集;
             •   H={h 1 ,h 2 ,…,h k }为所基于的散列函数集;
             •   S={s 1 ,s 2 ,…,s |Π(P)| }为所构建的布鲁姆过滤器集,Π表示从网络前缀到掩码长度的单向映射函数,Π(P)表
                示关于 P 中元素的掩码长度集,|Π(P)|为Π(P)的基数,s i 可描述为一个长度为 x 的比特向量:
                                                   1
                                               s =  (, ,..., )ss 2 i  s i x  .
                                                   i
                                               i
                同一布鲁姆过滤器只接受掩码长度相同的网络前缀插入,因此|S|=|Π(P)|;
             •   O={o 1 ,o 2 ,…,o I }为 PCBF 上关于 P 和 E 中元素的原子操作集,主要包括插入(Insert)、删除(Delete)和查
                找(Select).∀p i ∉P,“Insert p i ”执行步骤为:
                 1)   从 S 中搜索与掩码长度Π(p i )对应布鲁姆过滤器 s j ;
                 2)   ∀h i ∈ H,计算前缀 P i 在 s j 中的散列地址 h 1 (P i ),h 2 (P i ),…,h k (P i );
                                                 1 ()
                 3)   将 s j 的上述散列位置重新置位,即 s      hP i  + +  ,s h 2 ()P i  +  +  ,...,s  k h  ()P i  +  +  ;
                                                 j      j         j
                                                                          1 ()
                “Delete  p i ”的执行步骤与“Insert  p i ”几乎相同,只是在置位时,前者变成 s     hP i  − − .∀e i ∈E,“Find  e i ”执行
                                                                         j
                步骤为:
                 1)   依据 S,构建 e i 候选前缀集 C(e i )={c i |∀s j ∈S,c i =σ(e i ,s j )},其中,σ表示利用 s j 掩码长度来截取 e i 网络
                     前缀的函数;
                 2)   ∀c i ∈C(e i ),∀h i ∈H,计算 c i 的散列地址,得到 h 1 (c i ),h 2 (c i ),…,h k (c i );
                                1 ()
                                    0
                 3)   若∃c i ,s.t.   s hc i  >∧  s h 2 ()c i  >  0 ... s∧  ∧  k h  ()c i  >  0 ,那么 e i ∈ sub S,返回 True;反之,e i ∉ sub S,返回 False.
                               j        j          j
             定义 11.  亚属于∈ sub :ip∈ sub S,当前仅当∃prefix∈S,s.t.   ip∈S,其中,ip 表示 IP 地址.
             如图 6 所示,基于布鲁姆过滤器的溯源分组识别策略的基本原理描述为:给定 PCBF=(P,E,H,S,O),其中,
               P={198.3.0.0/18,198.1.1.0/24,…},E={198.3.13.28},H={H 1 ,H 2 ,…,H k },S=∅,O={Insert,Delete,Find}.
             溯源路由器首先依据 P 中元素的掩码长度来构建计数布鲁姆过滤器,得到 S={s(/18),s(/21),s(/24),…}.一般
         情况下,s 的每一维计数器都由 4bit 组成,初始值为 0.然后,将 P 中所有元素插入到对应布鲁姆过滤器,也就是
         ∀p i ∈P,执行 Insert p i .如果成员 AS j 退出联盟,那么 P=P−{p j },其中,p j 是 AS i 的网络前缀.同时,执行 Delete p i .最后,
         依据 S 中布鲁姆过滤器的掩码长度裁剪 E 中元素 e i ,进而完成查找任务,也就是∀e i ∈E,Find  e i .若能返回 True,就
         说明到达分组是溯源分组;反之,则不是.从时间开销的角度分析,与传统布鲁姆过滤器相比,PCBF 能够完成不同
         长度网络前缀的并行查找,从而将查询复杂度降到 o(k).
   222   223   224   225   226   227   228   229   230   231   232