Page 417 - 《软件学报》2025年第8期
P. 417

3840                                                       软件学报  2025  年第  36  卷第  8  期


                    ● 难以在可编程数据面上完成熵值计算. 由于可编程交换机仅支持简单的整数算术运算, 不支持对数、熵值
                 等复杂运算类型及浮点数的计算, 并且无法在一次计算中同时获得多个数据包的信息, 这导致难以直接对所有数
                 据包统计信息进行熵值计算.
                    为了解决以上的问题, 本文中针对可编程数据面的特性及计算与存储限制, 对上述流程中的步骤设计了适应
                 可编程交换机的计算模块, 其中包含一种多组               Sketch  轮换的新型数据结构用于实现对多个窗口统计信息的记录
                 与保存, 同时, 使用了逐包累加的熵值计算方式以及基于查找转发的计算方法, 实现对熵值的计算. 各模块功能与

                 关键技术如下所示.
                    ● 地址频率统计与状态保存         (第  4.2.1  节). 使用多组  Sketch  轮换的新型数据结构, 完成多个观察窗口统计数据
                 的实现对观察窗口内       IP  地址频率的估计和保存, 同时完成观察窗口结束时所需的自动刷新.
                    ● 熵值计算模块     (第  4.2.2  节). 使用逐包累加的熵值计算方法, 将原始的单次计算转换成单个时间窗口的数据
                 包熵值增量的累加, 在每个数据包到达时对熵值进行更新, 无须获取其他数据包信息; 同时, 使用基于查找转发的
                 计算方法, 完成计算中所涉及的对数、熵值等复杂运算.
                    ● DDoS  攻击状态判定模块      (第  4.2.3  节). 通过多个计数器实现包含安全状态与          DDoS  攻击状态的有限状态
                 机, 实现对当前窗口的      DDoS  攻击检测及当前系统所处状态的保存.
                    ● 数据包类别判定及受攻击         IP  地址存储  (第  4.2.4  节). 使用来自此前模块中的源目地址计数值及状态信息判
                 断当前数据包类别, 并将判断为         DDoS  攻击类型的数据包的目的         IP  存入哈希表.

                 4.2   关键模块工作原理

                 4.2.1    地址频率统计与状态保存模块
                    在本文所述机制中, 实现熵值计算和            DDoS  攻击防御需要统计并保存观察窗口中各             IP  地址的出现频次. 针对
                 这一问题, 采用一种拓展的        Count-Min Sketch  结构实现对观察窗口内     IP  地址频率的估计, 同时完成观察窗口结束
                 时所需的自动刷新. 与普通的          Count-Min Sketch  结构不同, 本次设计为每一个观察窗口进行编号, Count-Min
                 Sketch  中将会同时记录该键值的计数与这一计数值对应的观察窗口序号. 在进行更新时, 如果                          Count-Min Sketch
                 内部记录的窗口号与当前窗口一致, 则该位置计数值增加. 若与当前窗口序号不一致, 则说明观察窗口发生了变
                 化, 此时将会把被选中位置的计数值置为             1  以实现自动的刷新. 为了同时计算源目地址的频率值并保存正常状态
                 的信息, 交换机中将会同时维护          4  个上述数据结构, 其中每两个       Count-Min Sketch  为一组, 记录同一个观察窗口中
                 的源  IP  地址和目的  IP  地址的出现频率. 两组数据结构将分别处于更新状态和查询状态并在观察窗口结束时根据
                 当前网络状态进行轮换, 其中处于更新状态的               Count-Min Sketch  将会记录当前窗口中各    IP  的计数值, 而处于查询
                 状态的   Count-Min Sketch  则会保持原有计数值不变.
                    如图  8  所示, 数据包到达后首先会查询一个标志寄存器, 并在该寄存器所指定的                      Count-Min Sketch  上进行更
                 新. 例如, 图中该寄存器的值为        0, 会更新上方两个编号为       0  的  Count-Min Sketch, 而另一组则不更新计数值, 仅进
                 行查询操作. 此时, 下方编号为        1  的  Count-Min Sketch  中所保留的即为上一观察窗口中的各      IP  地址的计数值.
                    通过在每个窗口结束翻转标识寄存器的值, 两组数据结构将会轮换地进行更新, 从而实现在完成当前计数的
                 同时保留上一个窗口中的计数状态. 为了给后续的                DDoS  攻击防御机制提供网络在正常状态下的计数值, 需要保
                 证用于保存之前窗口计数值的一组            Count-Min Sketch  中的计数状态是在没有发生      DDoS  攻击的情况下得到的. 因
                 此, 在多组数据结构进行轮换时会检查上一观察窗口中是否发生了                      DDoS  攻击, 若上一窗口中发生了       DDoS  攻击,
                 则标志寄存器不会翻转. 算法         1  演示了两组数据结构在观察窗口结束时的轮换. 首先判断观察窗口是否结束, 并更
                 新窗口序号    (第  1、2  行), 在安全状态的观察窗口结束后标志寄存器翻转              (第  3、4  行), 两组  Sketch  将会轮换工作.
                 当  DDoS  攻击发生时, 标识寄存器不会进行翻转           (第  5、6  行), 仍然会使用与上一个窗口中相同的          Sketch  进行计
                 数, 此时另一组    Sketch  中的安全状态计数值将会得到保留. 最终这一模块将会为接下来的计算提供当前数据包的
                 源目  IP  在本观察窗口中的计数值以及在正常状态下的计数值.
   412   413   414   415   416   417   418   419   420   421   422