ACL在非A类板上的匹配顺序说明
QACL在非A类板上通过4种硬件表项资源来实现的:MASK表(规则表),RULE表(掩码表),COUNTER表(计数器表),METER表(限流表)。通常来说,每个千兆端口都拥有一套表项资源 ,而每8个百兆端口共用一套表项资源。
QOS的大部分功能需要MASK表和RULE表这两种硬件资源配合使用。所以在这里主要说明的是MASK表和RULE表,对COUTER表和METER表不作过多说明。
一、MASK表和RULE表
1.MASK表(掩码表)
组成结构 = 掩码的位置 + RULE的起始序号 + RULE的长度
MASK表项和RULE表项存在一对多的关系,因此在下发RULE表项时,会自动把使用相同MASK表项的RULE表项排列在一起。在MASK表项中,记录了这个RULE表项块的起始位置和相应长度。
当进行MASK表的查找时,总是从表的最底端开始向上查找。而MASK表的存储顺序则是由全局视图下定义的ACL ORDER命令来确定的。
1) acl order auto
规则的匹配顺序采用深度优先。在存储MASK时,会自动调整MASK在MASK表中的位置,优先级最高的MASK会在MASK表的最底端。当具有新的优先级更高的MASK规则下发时,会将MASK表中的所有表项向上移动一个位置空出最底端位置,然后将新的MASK存入到表底位置上。当一条规则下发后,首先找到MASK的位置,然后将该位置以上的MASK表项都向上移动一位,然后插入该规则的MASK,这个算法思想很象数据结构中的插入算法。
2) acl order first-config-first-match
规则的匹配顺序采用先下发先生效。在存储MASK时,最先下发的规则其MASK存放在最底端,然后依次根据规则下发的顺序由低向高存入相应规则的MASK。如果MASK已经存在那么相应表项中将RULE表的长度加1,RULE表的起始位置不变。而该规则在RULE表中将和具有相同MASK的规则存入在一块。
3) acl order last-config-first-match
规则的匹配顺序采用后下发先生效。在存储MASK时,每新加入一条MASK表项时,MASK表中已存在的所有表项都将向上移动一位空出最底端位置,然后将新的MASK表项插入到最底端。这么保证了最后下发的规则,永远都是第一个进行匹配的。如果MASK已经存在那么相应表项中将RULE表的长度加1,RULE表的起始位置不变。而该规则在RULE表中将和具有相同MASK的规则存入在一块。
注意:
当一条规则的MASK同已下发的ACL规则MASK相同时,会复用MASK表中已有的MASK而不会生成新的MASK表项插入到MASK表中。
2.RULE表(规则表)
组成结构 = MASK表序号 + IN-PROFILE动作 + OUT-PROFILE动作 + COUNTER表项序号 + METER表项序号 + 其他杂项
RULE表项记录了自己使用的MASK表项序号、METER表项序号和COUNTER表项序号。如果没有限流和计数功能,这两个成员的数值被设置为0。当报文匹配时,会采取一定的动作。动作类型分为两类:限内动作(In -Profile)和限外动作(Out-Profile动作):限内动作指使能限流功能后匹配的报文不超过设定的门限值时采取的动作;限外动作指使能限流功能后匹配的报文超过设定的门限值后采取的动作。如果没有使能限流功能,只有限内动作起作用。
二、下发顺序引起的跳跃问题
采用auto的方式下发规则时,由于MASK采用的是深度优先,进行规则匹配时完全按照优先级的顺序进行匹配的,所以不存在任何问题。而在采用其它两种方式时,由于MASK表项复用,所以在下发规则时稍不注意就会引起ACL规则匹配顺序的跳跃问题。
1.先下发先生效
定义规则3000,ACL的匹配顺序为先下发先生效,然后在端口上下发该规则。并进行以下操作:
1) 从192.168.2.0网段上的某台主机ping192.168.48.0网段中的某台主机;
2) 从192.168.2.0网段上的某台主机登录192.168.48.0网段中的FTP服务器。
acl number 3000
rule 0 permit ip source 192.168.2.0 0.0.0.255 destination 192.168.88.0 0.0.0.255
rule 1 deny ip
rule 2 deny tcp destination-port eq ftp-data
rule 3 deny tcp destination-port eq ftp
rule 4 permit ip source 192.168.2.0 0.0.0.255 destination 192.168.48.0 0.0.0.255
按照这样的配置顺序下发,通常理解会认为这两种操作的结果都不会成功。而事实上,在进行匹配的过程中,由于rule 4复用了rule 0的掩码(掩码相同),rule 4会先在rule 1、rule 2和rule 3之前进行匹配并成功,所以以两个操作都会成功。
图2. 先下发先生效MASK表的存储结构
2.后下发先生效
定义规则3000,ACL的配置跟前例相同,ACL的匹配顺序为后下发先生效,在端口上下发ACL后进行以下操作:
1) 从192.168.2.0网段上的某台主机ping192.168.48.0网段中的某台主机;
2) 从192.168.2.0网段上的某台主机登录192.168.48.0网段中的FTP服务器。
按照配置顺序下发,由于rule 4最后下发那么按照通常的理解rule 4会最先匹配,那么这两种操作都会成功。而事实上,以上两个操作都不会成功。其原因是在匹配过程中,由于rule 4复用了rule 0的掩码,而导致rule 4的掩码位置在MASK表中比rule 1、rule 2和rule 3都要高,所以最后匹配。因此以上两个操作都无法成功。
图3. 后下发先生效MASK表的存储结构
3.总结
由于芯片的原因,所以我们在配置ACL和下发ACL规则时稍不留神就会产生事与愿违的结果。在进行操作时,首先要注意下发的顺序,其次在下发时尽量将MASK相同的规则放在一起,注意规则之间的范围包含关系。只有在明确了这两点要求后,才能保证ACL有效的下发。
该案例暂时没有网友评论
✖
案例意见反馈
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作