本节书摘来自异步社区《CCNP SWITCH 300-115认证考试指南》一书中的第2章,第2.4节交换表,作者 【美】David Hucaby(戴维 胡卡比),更多章节内容可以访问云栖社区“异步社区”公众号查看
2.4 交换表
CCNP SWITCH 300-115认证考试指南
Catalyst交换机维护了几种类型的表,它们在交换过程中起到了非常重要的作用。这些表针对2层交换或MLS定制,并且被保存在高速存储中,因此交换机能够非常迅速地读取表项,并与数据帧(包)的许多字段进行并行比对。
2.4.1 内容可寻址存储
关键
所有的Catalyst交换机都使用CAM表来执行2层转发。当数据帧到达某个交换端口后,交换机会学习到数据帧的源MAC地址,并将其记录在CAM表中。除此以外,该数据帧所到达的端口和端口所在的VLAN也会被记录,并附加一个时间戳。如果之前已经在某个交换端口学习到的MAC地址出现于另一个端口,那么该MAC地址的条目和时间戳都会更新为最新的数据,而之前的条目则会被立即删除。如果MAC地址出现的端口及VLAN ID与CAM表中记录的一致,那么此时交换机仅仅更新条目的时间戳。
交换机通常需要维护一张很大的CAM表,以便支持更多目的地址的查找和转发。但是,在大型网络中,即便再大的表空间也无法保证能够存储所有的地址。为了更好地管理CAM表空间,不活跃的条目(一段时间内没有发起流量的地址)应当被老化。默认情况下,空闲CAM条目在被老化删除前会保留300秒。你可以使用下面的配置命令来更改默认的老化时间:
Switch(config)# mac address-table aging-time seconds
默认情况下,交换机是通过入站数据帧来动态学习MAC地址的。对于一些特殊的情景,MAC地址信息可能无法通过学习得到,那么你可以为交换机配置静态的CAM表条目。为了实现这一目标,你应当使用下面的配置命令:
Switch(config)# mac address-table static mac-address vlan vlan-id interface type
mod/num
注意:
在配置CAM表时,你应当留意命令语法上的一些微小变化。对于Catalyst IOS 12.1(11)EA1及其之前版本,CAM表的配置命令使用关键字mac-address-table;而在最近的Cisco IOS版本中,配置命令改为使用关键字mac address-table(省略了第一个连字符)。但是Catalyst 4500和6500的IOS软件版本例外,依然使用关键字mac-address-table的格式。为了平滑地过渡,当前许多交换机平台同时支持两种不同的命令语法。
交换机从一个交换端口学习到了一台主机的MAC地址,但是如果主机的连接位置发生了变化,导致对应的MAC地址出现在了不同的交换端口上,那么此时交换机会做出怎样的反应?通常情况下,主机的原始CAM表条目会在空闲300秒后被老化删除,即便该地址已经从新的端口上学习到了。为了避免在这一期间(等待老化)出现重复的CAM表条目,交换机会立即清除那些已经存在,但是出现在了不同交换端口的MAC地址条目。这种行为是基于一种安全的假设:由于MAC地址具有唯一性,因此一台主机(假设主机只有一块网卡)不可能同时连接到多个交换端口,除非网络出现了故障。在既定的时间点上,如果一台交换机发现一个MAC地址能够从两个不同的端口学习到,那么它会产生一条错误消息,通告该MAC地址在不同的接口之间“抖动(flapping)”。
2.4.2 三重内容可寻址存储1
在传统的路由环境中,ACL能够选取、过滤或控制特定的流量。访问控制列表由一系列访问控制条目(ACE)组成,并按照编号顺序对流量进行条件评估。访问控制列表在对数据流量进行评估(或匹配)时会占用一定的时间,导致数据包的转发延迟因此增加。
与上述情况不同的是,在多层交换中,ACL要求的所有比对过程完全由TCAM执行。这是一种基于硬件的评估方式,拥有近乎线性的比对速率。借助TCAM的出色性能表现,交换机仅需执行一次表查找行为,便能够评估一个数据包与整个访问控制列表的条件。大部分的交换机都拥有多个TCAM表,因此入站和出站安全、QoS ACL等策略允许同时被评估。换言之,交换机能够做到并行地作出2层和3层的转发决策。
Catalyst IOS软件的TCAM操作需要以下两个组件提供支持。
特性管理器(FM)——在访问控制列表创建或配置完成后,特性管理器会把ACE编译或合并为TCAM表的条目。交换机评估TCAM表的速度可以线性等同于数据帧的转发速度。
交换数据库管理器(SDM)——对于一些Catalyst交换机平台而言,TCAM表会被划分为几个支持不同功能的区域。SDM负责配置或调整TCAM子区域,为特定的交换功能提供充足的存储空间(在Catalyst 4500和6500平台上,TCAM是固定的,无法被重新划分)。
1.TCAM结构
从概念上而言,TCAM是CAM表的一种扩展。回顾上文,交换机可以利用一个索引值或钥匙(通常为MAC地址)与CAM表执行比对,并返回一个结果值(通常是某个交换端口和VLAN ID)。交换机查找CAM表的速度非常快,并且总是基于由二进制数值(0或1)组成的精确索引值进行比对2。
TCAM同样使用表查找操作,但是相比于CAM表查找,这种查找要复杂和抽象得多。例如,二进制值(0和1)组成了表查找的索引,但是TCAM还使用掩码值来决定索引中哪些比特位是需要关注的。这种高效的方式使得一个真正的查找索引可能存在3种输入的比特值:0、1和X(无关紧要)——即三重或三元组。
TCAM的条目由Value(值)、Mask(掩码)和Result(结果)(VMR)三部分组成。数据帧或数据包头部的字段可用于比对TCAM表,即这些字段与Mask和Value对进行比对,然后得到Result。下面将对TCAM的查找比对过程进行简要描述。
Value:长度固定为134个比特位,由源和目的地址,以及其他一些相关的协议信息组成——所有内容都可用于比对。串联构成Value的信息种类取决于所配置的访问控制列表的类型,如表2-2所示。TCAM表中的Value组合直接等于给定ACE条件的取值,如地址、端口或其他协议信息,最长支持134个比特3。
Mask:与Value一样,拥有完全相同的长度(134比特)、格式和比特顺序。Mask只是用于选择Value具有意义的比特。这与IP地址及掩码的关系非常相似,例如,掩码为1的对应Value位代表必须完全匹配;而掩码为0的对应Value位则代表无需关心。TCAM中所使用的掩码与ACE所配置的掩码完全一致。
Result:一系列数值,代表了在TCAM表查找完成之后需要执行的行为。尽管传统的访问控制列表只包含允许或拒绝的结果,但是TCAM查找的输出值(Result)却可以提供更为丰富的结果或行为。例如,查找的结果可能是代表允许或拒绝的二进制值、QoS限速的索引值,或是下一跳路由信息的指针等。
注意:
这里仅仅讨论了在IPv4环境下的TCAM。如果交换机使用了IPv4- IPv6的双栈SDM模板,那么TCAM的表空间可能会存在一些限制。由于IPv6地址的长度为128比特,因此TCAM必须对一些地址进行压缩,才能将其存储到条目中。
关键
TCAM总是根据Mask(掩码)进行组织排列的,并且一个Mask需要与8个Value组合建立关联4。例如,Catalyst 6500系列交换机的TCAM(安全ACL和QoS ACL的TCAM各自独立)最大拥有4096个Mask和32768个Value。这样做有利于同时评估每一个Mask-Value对,即在一次表查找中完成最佳或最长匹配。
2.TCAM实例
图2-5说明了TCAM是如何构建和使用的。需要说明的是,这个简单的实例可能与特性管理器(FM)实际产生的编译结果有所出入,因为特性管理器可能为了达成某些TCAM算法的要求,优化或改写ACE。
access-list 100 permit tcp host 192.168.199.14 10.41.0.0 0.0.255.255 eq telnet
access-list 100 permit ip any 192.168.100.0 0.0.0.255
access-list 100 deny udp any 192.168.5.0 0.0.0.255 gt 1024
access-list 100 deny udp any 192.168.199.0 0.0.0.255 range 1024 2047
实例中,扩展的访问控制列表(access-list 100)在配置完成后,被合并到TCAM条目中。首先,Mask(掩码)值必须和访问控制列表中定义的一致。也就是说,TCAM条目中的Mask值必须覆盖所有ACE想要比对的地址值和相应的地址掩码值。所有其他Mask比特可以填写为“x”,代表着无关紧要的状态,因为这些比特并未使用。
这里的访问控制列表只包含了3个不同的掩码:一个用于匹配源IP地址的全部32个比特(即ACE中地址掩码为0.0.0.0或关键字host);一个用于匹配目的地址的16个比特(ACE中地址掩码为0.0.255.255),另一个用于匹配目的地址的24个比特(ACE中地址掩码为0.0.0.255)。ACE中所使用的关键字any代表“匹配所有”或“无关紧要”。
3个不同的掩码值被填入TCAM条目的Mask一栏。接着,对于这3个掩码值,所有可能的Value组合都需要与之匹配。例如,32个比特的源IP掩码(Mask 1)只能在第一条ACE中找到,即源IP地址为192.168.199.14和目的地址为10.41.0.0。Mask 1其余的掩码内容是目的地址掩码0.0.255.255,已经不适用于其他的ACE语句。因此,第一条ACE语句中定义的源和目的地址被放进了与Mask 1关联的对应Value组合的分栏内。Mask 2(0.0.255.255)可以匹配3个Value组合:目的地址192.168.100.0、192.168.5.0和192.168.199.0。所有这些地址被放入了与Mask 2相关联的Value组合的分栏内。重复这一过程,直至所有的ACE都被合并到TCAM条目中。
如果一个Mask关联的第8个Value组合空间也被填满,那么下一个可适用相同掩码的Value组合值则必须关联到新的Mask条目。因此,在确保不会发生溢出的情况下,交换机总是尝试把所有的ACE填入可用的Mask和Value组合条目中。
3.TCAM中的端口操作
对于4层端口的比对操作,你可能注意到了这样一个事实:只有ACE语句要求精确匹配时,条件才能对应基于Mask和Value的严格匹配(端口操作关键字为eq,或者没有4层端口操作符)。例如,确切定义了地址值、地址掩码和端口编号的ACE语句:
access-list test permit ip 192.168.254.0 0.0.0.255 any
access-list test permit tcp any host 192.168.199.10 eq www
当ACE使用了端口操作符,并且需要进行逻辑比较时,应当如何处理呢?例如下面的ACE语句:
access-list test permit udp any host 192.168.199.50 gt 1024
access-list test permit tcp any any range 2000 2002
对于这样的情况,在Mask和Value组合之间仅使用一个简单的逻辑操作(是/否)已经不能产生期望的结果了。TCAM还提供了一种机制用于执行4层端口的操作或比对,而且同样可以在一次表查找的过程中完成。如果ACE包含了端口操作符,例如gt、lt、neq或range,那么特性管理器(FM)会在编译TCAM条目时,附加一个包含操作符和运算对象的逻辑操作单元(LOU)寄存器。需要注意的是,TCAM只支持有限数量的LOU。如果使用了逻辑比较操作符的ACE数量超过了可用的LOU数量,那么特性管理器则会把这些ACE分解为多条只使用常规匹配条件的ACE(使用eq操作符)。
在图2-5中,两条ACE要求执行4层端口的操作:
一条要求匹配所有UDP目的端口大于1024的数据包;
一条要求匹配所有UDP目的端口范围为1024~2047的数据包。
特性管理器检查所有ACE的4层端口操作条件,然后把这些语句编译到LOU寄存器对中。交换机在对数据包进行评估时,可以随时加载LOU寄存器的内容,并且独立于其他ACE参数。如果其他ACE需要执行相同的比较,那么LOU的内容可以被重复使用。当LOU加载完毕后,TCAM会在需要的位置进行调用。图2-5中拥有两个LOU寄存器值:A1和B1:2对。TCAM内可用的LOU数量是非常有限的(事实上,这个数量很少),所以你在配置包含4层端口逻辑操作的ACE时应当谨慎一些。
1译者注:本节内容对于一般读者而言非常抽象,并且难于理解。事实上,作者试图解释多层交换是如何利用TCAM来执行高级转发决策的,但是这些内容涉及了交换机内部硬件编程的基本思想。希望读者在阅读本节时能够在自己的头脑中化抽象为具体,并建立自己的理解。
2译者注:交换机在对CAM表进行比对时,返回的结果非常简单和确定,即找到对应的条目,按照条目信息转发数据帧;没有找到对应的条目,丢弃数据帧。另外,CAM表的查找要求完全匹配。
3译者注:Value组合是指根据ACE限定条件而最终确定的Value取值,比如一个Value组合等于源IP地址、目的IP地址和目的端口三者的组合结果。
4译者注:这里是指一个Mask可用于匹配8个Value组合,因为掩码取值的可能性要比待评估的值少。例如,IPv4地址长度为32个比特位,理论上存在232种可能的取值。但是掩码的取值必须连续,因此一个掩码适用于多个IP地址是可以理解的。TCAM表中Mask的取值等于访问控制列表中所有掩码值的串联,是一种分段的连续取值,相比于Value的取值灵活性要低。综上所述,为了更加有效地组织TCAM表,并提高评估效率,Cisco使用一个Mask关联8个Value组合的规则。