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

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


                 址熵值之差是否超过固定阈值. 4) 最后, 在入口流水线的末尾会将                  DDoS  攻击检测结果和     IP  计数值信息封装在桥
                 接包头中发送至出口流水线. 同时, 若当前观察窗口结束, 则使用可编程交换机提供的重发机制修改存储在上一级
                 流水线中的    DDoS  攻击状态.
                    (2) 出口流水线    DDoS  攻击防御. 本文在可编程交换机出口流水线             (egress) 中实现基于源目地址计数值差的
                 DDoS  攻击防御机制, 主要包括数据包类别判定模块和受攻击                 IP  地址存储模块这两个子模块. 其具体工作流程如
                 下. 1) 首先, 数据包类别判定模块根据桥接包头中所封装的               DDoS  攻击检测结果判断当前观察窗口的状态, 若当前
                 观察窗口中存在      DDoS  攻击, 则依据公式    (5) 判别该数据包的类别. 2) 之后, 若当前数据包的目的             IP  被判定为被
                 攻击者, 则会在受攻击       IP  存储模块中使用哈希表存储该         IP, 并将后续流量中丢弃指向该         IP  的数据包, 从而实现
                 DDoS  攻击的实时防御.

                 4.3.2    基于数据包重提交机制的逆流水线信息传递
                    在入口流水线结束时, 采用重提交机制更新地址频率统计及状态保存模块中的标识位. 该操作仅在每观察窗
                 口结束时进行一次. 本文所述机制在多组             Sketch  结构轮换中标识寄存器需要根据上一窗口的最终检测结果进行
                 转换, 这一需求导致了两个无法放置在同一级流水线上的操作需要读取或更改同一个寄存器中的值. 而在                                  Tofino
                 架构中, 无法在某一阶段中访问另一阶段流水线中的寄存器. 我们采用                      Tofino  交换芯片所提供的重发机制解决这
                 一问题: 在入口流水线的逆解析器中可以选择对数据包进行重提交操作, 该数据包将会重新发送, 进入入口流水
                 线. 如图  13  所示, 每当一个观察窗口结束时, 本文机制将当前窗口的检测结果封装至数据包的头部并进行重发. 在
                 数据包进入入口流水线后, 首先将会检测这一数据包的                  resubmit_flag 标识, 若检测为重发数据包, 可编程交换机将
                 会解析封装在数据包头部的上一窗口计数结果, 并判断是否翻转                     Sketch  计数模块前的标识寄存器.

                                              重提交包头
                                            标志位 DDoS 检测结果        原数据

                                         流水线阶段 1                            流水线阶段 n


                                    更新 DDoS    获取当前 DDoS         ...
                                     攻击状态        攻击状态                     DDoS 攻击判别结果



                                                 DDoS 攻击
                                                状态寄存器
                                           寄存器部署在流水线阶段 1
                                              图 13 利用重提交机制实现信息传递

                 4.3.3    基于桥接数据包的出入口流水线信息传递
                    在入口流水线结束时, 采用桥接数据包头将入口流水线的计算结果传递至出口流水线. 在                            P4 16  标准下, 入口与
                 出口流水线中不存在能够全局访问的用户自定义元数据                    (metadata), 因此如果需要实现入口流水线与出口流水线
                 之间的信息传递, 则需要定义额外的数据包头部进行桥接. 如后文图                     14  所示为本文机制所定义的桥接头部以及信
                 息传递流程, 在出口流水线中将会把关键的计算结果封装为桥接头部并解析. 桥接头部中包含的信息有: 当前窗口
                 的  DDoS  检测结果, 当前数据包的源地址及目的地址 IP 在本观察窗口的总计数值, 以及在上一个安全状态观察窗
                 口中的总计数值.

                 5   实验分析

                 5.1   系统部署
                    基于本文中所提出的架构, 使用          P4  语言实现了该    DDoS  攻击检测与防御机制, 并将其部署在           Intel-Tofino  可
   417   418   419   420   421   422   423   424   425   426   427