Cisco IOS 将对标准 ACL 实施一种内部逻辑。 如前所述,其中一部分逻辑是当主机属于某一范围时,阻止在 range 语句后面配置 host 语句,如图 1 所示。

IOS 内部逻辑的另一部分涉及标准 ACE 的内部序列。 图 2 显示了标准访问列表的配置。 首先配置拒绝三个网络的 range 语句,然后配置五个 host 语句。 由于主机 IP 地址不属于前面输入的 range 语句,因此 host 语句都是有效语句。

show running-config 命令用于检验 ACL 配置。 请注意,语句列出的顺序与其输入顺序不同。 我们将使用 show access-lists 命令理解这背后的原理。

如图 3 所示,show access-lists 命令可将 ACE 与其序列号一起显示。 我们可能希望输出中语句的顺序反映语句的输入顺序。 但是,show access-lists 的输出显示情况并非如此。

标准 ACE 列出的顺序是 IOS 用来处理该列表的顺序。 注意,语句分为两个部分,先列出 host 语句,然后是 range 语句。 序列号表示语句的输入顺序,而不是语句的处理顺序。

host 语句首先列出,但不一定是以这些语句的输入顺序列出。 IOS 使用特殊的哈希函数按顺序添加 host 语句。 最终顺序可以优化主机 ACL 条目的搜索。

range 语句在 host 语句后面显示。 这些语句按其输入的顺序列出。

回想一下,可以使用序列号编辑标准 ACL 和编号 ACL。 在 show access-lists 命令输出中显示的序列号是从该列表中删除单条语句时使用的编号。 当插入新的 ACL 语句时,序列号只会影响列表中 range 语句的位置。 始终能够使用哈希函数恢复 host 语句的顺序。

继续使用本示例,在将运行配置保存后,重新加载路由器(重新启动)。 如图 3 所示,show access-lists 命令会以相同顺序显示 ACL,但是已对语句重新编号。 现在序列号以编号的大小顺序显示。

注意:哈希函数只能应用于 IPv4 标准访问列表中的 host 语句。 这种算法不在 IPv4 扩展 ACL 或 IPv6 ACL 中使用。 这是因为,扩展 ACL 和 IPv6 ACL 根据不止一个源地址进行过滤。 有关哈希函数的详细信息不属于本课程的范围。