NetFlow交换已经让位于一种更有效的多层交换形式:Cisco Express Forwarding。思科为其路由器系列开发了CEF,通过使用动态查找表提供高性能的包转发。
CEF也已转入Catalyst交换平台。以下平台均在硬件上执行CEF:
Catalyst 6500 Supervisor 720(集成MSFC3)
催化剂6500主管2/MSFC2组合
催化剂4500主管III、IV、V
固定配置交换机,如Catalyst 3750、3560、3550、2950
CEF利用专用硬件在默认情况下运行。
基于cef的多层交换机由两个基本功能块组成,如图所示图12:三层引擎参与构建路由信息,三层转发引擎可以使用这些路由信息在硬件中交换包。
基于cef的多层交换机的分组流
转发信息库
第三层引擎(本质上是一个路由器)维护路由信息,无论是静态路由还是动态路由协议。基本上,对于表中的每个IP目的子网,路由表被重新格式化为一个有序列表,其中最特定的路由优先。这种新格式被称为转发信息库FIB (Forwarding Information Base),包含了网络前缀可以引用的路由或转发信息。
也就是说,如果存在到10.1.0.0/16的路由,那么到10.1.1.0/24和10.1.1.128/25的路由可能都在FIB表中。请注意,这些示例是越来越具体的子网,由较长的子网掩码指定。在FIB中,这些子网将按照最具体或最长匹配的顺序排列,然后是不太具体的子网。当交换机收到报文时,它可以很容易地检查目的地址,并在FIB中找到匹配时间最长的目的路由表项。
FIB中还包含了每一项的下一跳地址。当在FIB表中找到匹配时间最长的表项时,也会找到三层下一跳地址。
你可能会惊讶地发现FIB也包含主机路由(子网掩码255.255.255.255)项。这些通常不会在路由表中找到,除非它们被发布或手工配置。主机路由在FIB中维护,以便最有效地查找到直连或相邻主机的路由。
和路由表一样,FIB在本质上是动态的。当三层引擎发现路由拓扑发生变化时,会向FIB发送更新报文。当路由表中路由前缀或下一跳地址发生变化时,FIB也会接收到相同的变化。另外,如果ARP表中的下一跳地址发生了变化或老化,FIB也必须反映相同的变化。
可以将与特定接口或VLAN相关的FIB表项以如下形式显示显示ip欧共体语言教学大纲的命令:
开关#显示ip欧共体语言教学大纲的[类型mod / num|vlanvlan id] [细节]
VLAN 101交换虚拟接口对应的FIB表项如例12-1所示。
例12-1查看指定VLAN的FIB表项
开关#显示IP cef vlan 101前缀下一跳10.1.1.0/24连接Vlan101 10.1.1.2/32 10.1.1.2 Vlan101 10.1.1.3/32 10.1.1.3 Vlan101交换机编号
也可以通过指定IP地址前缀和掩码来查看FIB表项显示ip欧共体语言教学大纲的命令:
开关#显示ip欧共体语言教学大纲的[prefix-ip prefix-mask] [longer-prefixes] [细节]
例12-2中的输出显示的是10.1.0.0/16范围内交换机已知的任意子网,不考虑前缀和掩码长度。一般情况下,如果在CEF表中存在前缀和掩码,则只显示精确匹配的前缀和掩码。要查看其他较长的匹配项,可以添加longer-prefixes关键字。
例12-2显示指定IP地址前缀/掩码的FIB表项
开关#显示IP cef 10.1.0.0 255.255.0.0 longer-prefixes前缀下一跳10.1.1.0/24附Vlan101 10.1.1.2/32 10.1.1.2 Vlan101 10.1.1.3/32 10.1.1.3 Vlan101 10.1.2.0/24附Vlan102 10.1.3.0/26 192.168.1.2 Vlan99 192.168.1.3 Vlan99 10.1.3.64/26 192.168.1.2 Vlan99 192.168.1.3 Vlan99 10.1.3.128/26 192.168.1.4 Vlan99 192.168.1.3 Vlan99 192.168.1.3 Vlan99 192.168.1.3 Vlan99 192.168.1.3 Vlan99 10.1.3.128/26 192.168.1.4 Vlan99 192.168.1.3 Vlan99 192.168.1.3 Vlan99 192.168.1.3 Vlan99 192.168.1.3 Vlan99 192.168.1.3 Vlan99
注意,前三个条目与例12-1中列出的相同。其他子网也会显示出来,以及它们的下一跳路由器地址和交换接口。
你可以添加细节关键字可以查看CEF中每个FIB表项的详细信息,示例12-3。
例12-3显示CEF表项详细信息
开关#Show IP cef 10.1.3.0 255.255.255.192 detail10.1.3.0/26, version 270, epoch 0, per-destination sharing 0 packets, 0 bytes via 192.168.1.2, Vlan99, 0 dependencies traffic share 1 next hop 192.168.1.2, Vlan99 valid adjacency via 192.168.1.3, Vlan99, 0 dependencies traffic share 1 next hop 192.168.1.3, Vlan99 valid adjacency 0 packets, 0 bytes switched through the prefix tmstats:外部0包,0字节内部0包,0字节Switch#
版本号描述了自表生成以来CEF条目被更新的次数。epoch号表示整个CEF表被刷新和重新生成的次数。10.1.3.0/26子网有两个下一跳路由器地址,因此本地交换机在这两个路由器之间采用逐目的地负载分担方式。
FIB建立完成后,报文可以沿下虚线路径转发图12.这遵循硬件交换过程,在此过程中不需要“昂贵的”或耗时的操作。然而,有时,根据FIB,一个包不能在硬件上进行交换。数据包随后被标记为“CEF punt”,并立即被发送到第三层引擎进行进一步处理,如图中顶部虚线路径所示图12.导致这种情况的一些条件如下:
FIB表项不存在
FIB表已满
IP Time To Live (TTL)已过期
超过最大传输单元MTU (maximum transmission unit),必须分片
涉及到ICMP (Internet Control Message Protocol)重定向
不支持封装类型
数据包被隧道化,需要压缩或加密操作
的访问列表日志选择触发
必须进行网络地址转换(NAT)操作(除了Catalyst 6500 Supervisor 720,它可以在硬件上处理NAT)
CEF操作可以在单个硬件平台上进行,例如Catalyst 3560和3750交换机。FIB生成并集中在交换机中。CEF也可以通过使用专门的转发硬件进行优化,使用以下技术:
加速CEF(环保联合会)cef分布在多个三层转发引擎上,通常位于Catalyst 6500线路卡上。这些引擎不具备存储和使用整个FIB的能力,所以任何时候只会将FIB的一部分下载到它们中。这相当于一个FIB“缓存”,包含可能再次使用的条目。如果缓存中找不到FIB表项,则向三层引擎请求更多的FIB信息。最终结果是CEF在线路卡上加速,但不一定以持续的线速速度。
分布式欧共体语言教学大纲(dCEF)-CEF可以完全分布在多个三层转发引擎上,性能更佳。由于FIB是完整的三层转发,所以它可以在任意数量的三层转发引擎上复制。Catalyst 6500有支持dCEF的行卡,每个行卡都有自己的FIB表和转发引擎。一个中央的三层引擎(例如MSFC3)维护路由表并生成FIB,然后动态地将其全部下载到每个线路卡中。
邻接表
一般情况下,路由器会维护一个包含三层网络和下一跳信息的路由表和一个包含三层到二层地址映射关系的ARP表。这些桌子是独立保存的。
回想一下,FIB保留了每个表项的下一跳地址。为了进一步简化报文转发,FIB对每一个下一跳表项都有相应的二层信息。FIB的这一部分被称为邻接表,由可以在第二层单跳到达的节点的MAC地址组成。
可以使用如下命令显示邻接表的内容:
开关#显示邻接[类型mod / num|vlanvlan id] [总结|细节]
例如,可以显示每个物理接口或VLAN接口上已知的邻接关系的总数显示邻接总结,如例12-4所示。
例12-4显示已知邻接体的总数
开关#显示邻接总结Adjacency Table has 106 adjacencies Table epoch: 0(此epoch有106条表项)接口邻接计数Vlan99 21 Vlan101 3 Vlan102 1 Vlan103 47 Vlan104 7 Vlan105 27 Switch#
为每个下一跳路由器和每个直接连接到本地交换机的主机保留邻接关系。属性可以查看有关邻接关系的更详细信息细节关键字,例如例12-5。
例12-5显示邻接体的详细信息
开关#显示邻接vlan 99的详细信息协议接口地址IP Vlan99 192.168.1.2(5) 0 packets, 0 bytes 000A5E45B145000E387D51000800 ARP 01:52:50 Epoch: 0 IP Vlan99 192.168.1.3(5) 1 packets, 104 bytes 000CF1C909A0000E387D51000800 ARP 04:02:11 Epoch: 0 . 000CF1C909A0000E387D51000800 ARP 04:02:11 Epoch: 0 . 000cf1c45b145000e387d51000800 ARP 01:52:50 Epoch: 0 IP Vlan99 192.168.1.3(5) 1 packets, 104 bytes
注意,邻接表项包括直接连接的主机的IP地址(三层)和MAC地址(二层)。MAC地址可以显示为十六进制数字长串的前6个八位元(如前面输出的阴影部分)或单独显示在一行上。十六进制数字字符串的其余部分包含三层引擎接口的MAC地址(6个字节,对应于示例中的Vlan99接口)和EtherType值(2个字节,其中0800表示IP)。
从ARP表中建立邻接表信息。例12-5显示ARP表项的邻接关系。当下一跳地址收到有效的ARP表项时,更新邻接表。如果ARP表项不存在,则将FIB表项标记为“CEF glean”。这意味着第三层转发引擎不能在硬件上转发数据包,因为丢失了第二层的下一跳地址。报文被发送到三层引擎,从而生成ARP请求并接收ARP应答。这被称为欧共体语言教学大纲的收集状态,三层引擎必须收集下一跳目的地的MAC地址。
收集状态可以通过几种方式进行演示,如例12-6所示。
例12-6显示CEF Glean状态的邻接关系
开关#显示IP cef邻接收集前缀下一跳接口10.1.1.2/32 attached Vlan101 127.0.0.0/8 attached EOBC0/0 [output省略显示IP arp 10.1.1.2开关#Show IP cef 10.1.1.2 255.255.255.255 detail10.1.1.2/32, version 688, epoch 0, attached, connected 0 packets, 0 bytes via Vlan101, 0 dependencies有效收集邻接开关#
需要注意的是,主机10.1.1.2/32的FIB表项已经存在,但显示为glean状态。的显示ip地址转换协议命令显示该IP地址没有有效的ARP表项。
期间,一个无伤大雅的条目CEF收集状态等待ARP决议,后续的数据包,主机立即下降的输入队列不填,第三层引擎不会变得太忙担心需要重复的ARP请求。这就是所谓的ARP节流或节流邻接.如果在2秒内没有收到ARP响应,则释放节流,触发另一个ARP请求。否则,在收到ARP应答后,释放节流,完成FIB表项,报文在硬件上完全转发。
邻接表还可以包含其他类型的表项,以便有效地处理报文。例如,你可能会看到下面列出的邻接类型:
零邻接-用于切换到null接口的报文。null接口总是在路由器或交换机上定义的;它代表了一个逻辑接口,静默地接收数据包而不实际转发它们。
删除邻接-用于交换无法正常转发的报文。实际上,这些包被丢弃而不被转发。包可能会因为封装失败、未解析的地址、不支持的协议、没有有效的路由、没有有效的邻接关系或校验和错误而被丢弃。可以使用以下命令测量drop邻接活动:
开关#展示英语滴CEF Drop Statistics Slot Encap_fail Unresolved Unsupported No_route No_adj ChkSum_Err RP 8799327 1 45827 5089667 32 0交换机编号
丢弃邻接-当由于访问列表或其他策略动作需要丢弃报文时使用。
把邻接-当报文必须发送到三层引擎进行进一步处理时使用。属性所列的各种punt邻接原因可以衡量CEF punt活动显示cef not-cef-switched命令: