网络设备上的ACL(访问控制列表)可以通过硬件和软件来实现,或者更通俗地说,基于硬件和软件的ACL。 如果基于软件的 ACL 的一切都应该很清楚 - 这些是在 RAM 中存储和处理的规则(即在控制平面上)以及所有随之而来的限制,那么我们将了解基于硬件的 ACL 是如何实现的并在我们的工作中发挥作用。文章。 作为示例,我们将使用 Extreme Networks 的 ExtremeSwitching 系列交换机。
由于我们对基于硬件的 ACL 感兴趣,因此数据平面的内部实现或实际使用的芯片组 (ASIC) 对我们来说至关重要。 所有 Extreme Networks 交换机系列均基于 Broadcom ASIC 构建,因此下面的大部分信息也适用于市场上在相同 ASIC 上实现的其他交换机。
从上图可以看出,“ContentAware Engine”直接负责芯片组中ACL的操作,分别负责“ingress”和“egress”。 从架构上来说,它们是相同的,只是“出口”的可扩展性和功能性较差。 从物理上讲,两个“ContentAware 引擎”都是 TCAM 内存加上随附的逻辑,每个用户或系统 ACL 规则都是写入该内存的简单位掩码。 这就是芯片组逐包处理流量且不会降低性能的原因。
物理上,同一个 Ingress/Egress TCAM 又在逻辑上被划分为若干段(取决于内存本身的数量和平台),即所谓的“ACL 切片”。 例如,当您在笔记本电脑上创建多个逻辑驱动器 - C:>、D:> 时,笔记本电脑上物理上相同的 HDD 也会发生同样的情况。 每个 ACL 片又由“字符串”形式的存储单元组成,其中写入了“规则”(规则/位掩码)。
TCAM 划分为 ACL 切片是有一定逻辑的。 在每个单独的 ACL 片中,只能写入彼此兼容的“规则”。 如果任何“规则”与前一个“规则”不兼容,则它将被写入下一个 ACL 切片,无论前一个“规则”中还剩下多少行“规则”。
那么ACL规则的兼容或不兼容从何而来呢? 事实上,写入“规则”的一条 TCAM“行”的长度为 232 位,并分为多个字段 - 固定、字段 1、字段 2、字段 3。 232 位或 29 字节 TCAM 存储器足以记录特定 MAC 或 IP 地址的位掩码,但比完整的以太网数据包头要少得多。 在每个单独的 ACL 切片中,ASIC 根据 F1-F3 中设置的位掩码执行独立查找。 一般来说,可以使用以太网标头的前 128 个字节来执行此查找。 实际上,正是因为可以在 128 个字节上执行搜索,但只能写入 29 个字节,所以为了正确查找,必须设置相对于数据包开头的偏移量。 每个 ACL 切片的偏移量在写入第一个规则时设置,如果在写入后续规则时发现需要另一个偏移量,则认为该规则与第一个规则不兼容并写入到下一个 ACL 切片。
下表显示了 ACL 中指定的条件的兼容性顺序。 每条单独的行都包含生成的位掩码,这些位掩码彼此兼容但与其他行不兼容。
ASIC 处理的每个单独数据包在每个 ACL 切片中运行并行查找。 检查会一直执行到 ACL 切片中的第一个匹配项,但同一数据包允许在不同 ACL 切片中出现多个匹配项。 每个单独的“规则”都有一个相应的操作,如果条件(位掩码)匹配,则必须执行该操作。 如果多个 ACL 切片同时发生匹配,则在“操作冲突解决”块中,根据 ACL 切片的优先级,决定执行哪个操作。 如果ACL同时包含“action”(允许/拒绝)和“action-modifier”(计数/QoS/log/...),那么在多个匹配的情况下,仅执行较高优先级的“action”,而“action”将被执行-modifier”就全部完成了。 下面的示例显示两个计数器都会递增,并且优先级较高的“拒绝”将被执行。
来源: habr.com