数据包分类算法:从交叉积到决策树的深入解析
1. 交叉积算法
交叉积算法是一种用于数据包分类的基础方案。它通过从每个字段的前缀表中各取一个值,形成一个 5 元组,这个 5 元组就被称为交叉积。例如,在一个包含 5 个字段的系统中,若各字段的元素数量分别为 4、4、5、2、3,那么总共就有 4 * 4 * 5 * 2 * 3 = 480 种可能的交叉积。
交叉积的一个关键特性是:对于一个数据包头部 H,如果将每个字段 H[i] 的最长匹配前缀操作连接起来形成交叉积 C,那么匹配 H 的最低成本规则与匹配 C 的最低成本规则是相同的。基于这个特性,基本的交叉积算法会构建一个包含所有可能交叉积的表,并预先计算出每个交叉积对应的最低成本规则。
当有数据包头部到达时,搜索算法会进行 K 次最长匹配前缀操作,然后通过一次哈希查找交叉积表,就可以确定该数据包的最低成本匹配规则。在硬件实现中,这 K 次前缀查找可以并行进行。
然而,简单的交叉积算法存在内存爆炸的问题。在最坏情况下,交叉积表可能会有 NK 个条目(N 是规则数量,K 是字段数量)。例如,当 N = 100 且 K = 5 时,表的大小可能会达到 10^10,这是非常庞大的。
为了减少内存使用,可以采用按需构建交叉积的方法。这种方法不是一开始就构建完整的交叉积表,而是在有数据包头部 H 到达时,先进行最长匹配前缀操作计算出交叉积项 C。如果交叉积表中已经有 C 的条目,就返回相关规则;如果没有,则通过线性搜索数据库找到 C 的最佳匹配规则,并将该条目插入交叉积表。后续具有相同交叉积 C 的数据包就可以快速查找规则。
此外,还可以将交叉积表作为缓存,移除最近未使用的交叉积,这
超级会员免费看
订阅专栏 解锁全文
1050

被折叠的 条评论
为什么被折叠?



