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

武文浩 等: 可编程数据平面       DDoS  检测与防御机制                                              3841



                                  当前窗口                源地址 Sketch 0
                                 Sketch 更新
                                           Hash 1
                                                                          源地址计数
                                                                           最小值
                                           Hash 2
                                                                                    当前观察窗口
                                                      目的地址 Sketch 0                   计数结果
                                           Hash 1                        目的地址计数
                                                                           最小值
                                           Hash 2
                             标识寄存器
                               flag=0
                                                      源地址 Sketch 1
                                           Hash 1
                                                                          源地址计数
                                                                           最小值
                                           Hash 2
                                                                                    上一观察窗口
                                                      目的地址 Sketch 1
                                                                                      计数结果
                                           Hash 1
                                                                         目的地址计数
                                                                           最小值
                                           Hash 2
                                 上一窗口
                                Sketch 查询
                                             图 8 Sketch  轮换工作与副本保存原理

                 算法  1. 标识寄存器更新.

                 输入: 数据包   p;
                 输出: 标识寄存器值      flag.

                 1. if p.resubmit_ flag = 1 // 数据包的重发标识  resubmit_ flag  为  1, 上一观察窗口结束
                 2.  Wid = Wid +1; // 观察窗口序号  Wid  更新
                 3.  if p.r.ddos_ flag = 1 // 上一窗口中未发生  DDoS  攻击, 重发包头  r 中的标识位为  0
                 4.   flag = ~ flag; // 标识寄存器翻转
                 5.  else
                 6.   flag = flag; // 标识寄存器保持不变
                 7.  end
                 8. end

                 4.2.2    熵值计算模块
                    熵值计算模块使用前文中多组            Sketch  得到的当前观察窗口源目地址计数值计算当前的源目地址熵. 由于可
                 编程交换机的限制, 数据平面中的单次处理仅能使用当前数据包的头部信息, 且数据平面中无法直接支持循环操
                 作及浮点数运算. 为了解决以上问题, 本模块中采用了一种逐数据包累加的方式进行熵值更新, 并将实际的熵值扩
                 大一定的倍数后近似为整数, 同时, 将复杂计算操作的计算结果预先配置在查找转发表中, 使用查找转发的计算方
                 法进行对数等计算.
                    (1) 逐数据包累加的计算方法
                    原有的熵值计算方法中需要同时计算所有类别                 IP  地址的计数信息, 由于可编程数据面中仅能处理当前数据
                 包的头部信息, 难以同时获取所有           IP  的计数值, 因此本文实现了一种逐数据包累加的计算方法, 每次计算时仅需
                 要使用单个数据包的头部信息, 如图           9  所示.
                    在这一计算方法的具体实现中, IP          地址熵值计算的公式可以改写为如公式              (6) 所示的形式.
   413   414   415   416   417   418   419   420   421   422   423