简介
本文档介绍由于IPV6组播侦听程序发现数据包泛洪而导致的各种Catalyst平台上的高CPU使用率,以及缓解此问题的方法。
先决条件
没有先决条件。
要求
本文档没有任何特定的要求。
使用的组件
本文档中的信息基于Cisco Catalyst 6500系列交换机、Catalyst 4500系列交换机和Catalyst 3850系列交换机。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。
问题
由于MAC地址范围为3333.xxxx.xxxx的IPv6组播流量正被传送到CPU,因此某些Cisco Catalyst平台上可能会出现CPU使用率较高的情况。
根据RFC7042,所有MAC-48组播标识符前缀“33-33”(即,2**32个组播MAC标识符,范围从33-33-00-00-00-00到33-33-FF-FF-FF-FF)均按照[RFC2464]中为IPv6组播指定。组播目的地址为DST的IPv6数据包由16个八位组DST[1]到DST[16]组成,它被传输到以太网组播地址,其前两个八位组是值333十六进制,其后四个八位组是DST的后四个八位组,如图1所示。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 0 1 1 0 0 1 1|0 0 1 1 0 0 1 1|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DST[13] | DST[14] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DST[15] | DST[16] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(Figure 1: Address Mapping - Multicast)
有时,使用特定NIC卡的主机设备进入休眠模式时,会泛洪IPv6组播流量。此问题不限于特定主机供应商,尽管某些芯片组比其他芯片组更频繁地表现出此行为。
故障排除和解决方案
您可以使用以下步骤了解发现CPU使用率较高的Catalyst交换机是否受此问题的影响,并实施相应的解决方案。
Catalyst 3850 系列交换机
在Catalyst 3850交换机上,NGWC L2M进程使用CPU处理IPv6数据包。当交换机上禁用组播侦听程序发现(MLD)监听时,MLD加入/离开数据包将泛洪到所有成员端口。而且,如果有许多传入的MLD加入/离开数据包,此进程将消耗更多CPU周期,以在所有成员端口上发送数据包。已经看到,当某些主机进入休眠模式时,它们可能会发送数千个数据包/秒的IGMPv6 MLD流量。
3850#show processes cpu detailed process iosd sorted | exc 0.0
Core 0: CPU utilization for five seconds: 43%; one minute: 35%; five minutes: 33%
Core 1: CPU utilization for five seconds: 54%; one minute: 46%; five minutes: 46%
Core 2: CPU utilization for five seconds: 75%; one minute: 63%; five minutes: 58%
Core 3: CPU utilization for five seconds: 48%; one minute: 49%; five minutes: 57%
PID T C TID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process
12577 L 2766882 2422952 291 23.52 23.67 23.69 34816 iosd
12577 L 3 12577 1911782 1970561 0 23.34 23.29 23.29 34818 iosd
12577 L 0 14135 694490 3264088 0 0.28 0.34 0.36 0 iosd.fastpath
162 I 2832830 6643 0 93.11 92.55 92.33 0 NGWC L2M
解决方案
在受影响的交换机上配置ipv6 mld监听,以全局启用ipv6 mld监听。这会降低CPU利用率。
3850#conf t
Enter configuration commands, one per line. End with CNTL/Z.
3850(config)#ipv6 mld snooping
3850(config)#end
启用MLD监听时,在软件和硬件中构建每VLAN IPv6组播地址表。然后,交换机在硬件中执行基于IPv6组播地址的桥接,从而防止这些数据包由软件处理。
有关配置MLD监听的详细信息,请单击链接
在IOS XE的早期版本中,发现CPU队列可能因此问题而卡住,这将阻止该队列中的所有控制数据包进入CPU。这是通过IOS版本3.3.3和3.6.0及更高版本的CSCuo14829修复的。有关详细信息,请参阅此漏洞。
Catalyst 4500 系列交换机
Catalyst 4500系列交换机支持使用三态内容可寻址存储器(TCAM)的IPv6组播流量硬件转发。 这在Cisco Catalyst 4500E和4500X系列交换机上的组播中解释
当涉及IPv6组播侦听程序发现流量时,交换机需要执行软件转发(使用CPU资源)。 如在Catalyst 4500交换机上配置IPv6 MLD监听中所述,MLD监听可以全局启用或禁用或按VLAN启用。启用MLD监听时,在软件中构建每VLAN IPv6组播MAC地址表,在软件和硬件中构建每VLAN IPv6组播地址表。然后,交换机在硬件中执行基于IPv6组播地址的桥接。这是Catalyst 4500系列交换机上的预期行为。
为了检查被传送到CPU的数据包的类型,我们可以运行“debug platform packet all buffer”,然后运行“show platform cpu packet buffered”命令。
4500#debug platform packet all buffer
platform packet debugging is on
Cat4500#sh platform cpu packet buffered
Total Received Packets Buffered: 1024
-------------------------------------
Index 0:
33 days 11:42:21:833532 - RxVlan: 214, RxPort: Te1/15
Priority: Normal, Tag: Dot1Q Tag, Event: L2 Router, Flags: 0x40, Size: 90
Eth: Src 44:39:C4:39:5A:4A Dst 33:33:FF:7F:EB:DB Type/Len 0x86DD
Remaining data:
0: 0x60 0x0 0x0 0x0 0x0 0x20 0x0 0x1 0xFE 0x80
10: 0x0 0x0 0x0 0x0 0x0 0x0 0x46 0x39 0xC4 0xFF
20: 0xFE 0x39 0x5A 0x4A 0xFF 0x2 0x0 0x0 0x0 0x0
30: 0x0 0x0 0x0 0x0 0x0 0x1 0xFF 0x7F 0xEB 0xDB
40: 0x3A 0x0 0x5 0x2 0x0 0x0 0x1 0x0 0x83 0x0
此数据包从源mac地址44:39:C4:39:5A:4A到达VLAN 214上的接口Tengigabitethernet1/15。协议0x86DD是IPv6,在本例中,目的MAC 33:33:FF:7F:EB:DB用于组播IPv6 MLD节点。
解决方案
由于此流量,我们有两种解决CPU使用率过高问题的方法。
- 禁用在终端主机上生成IPv6组播侦听程序发现流量。这可以通过升级NIC驱动程序或禁用发送IPv6数据包的主机的BIOS上的功能来实现。您可以联系客户机的供应商,该供应商可以帮助禁用BIOS功能或升级NIC驱动程序。
- 启用控制平面策略(CoPP)以丢弃传送到CPU的过多IPv6组播侦听程序发现流量。而且,这些数据包是本地链路的跳数限制,因此这些数据包预期会被传送到CPU。
ipv6 access-list IPv6-Block
permit ipv6 any any
!
class-map TEST
match access-group name IPv6-Block
!
policy-map ipv6
class TEST
police 32000 conform-action drop exceed-action drop
!
control-plane
service-policy input ipv6
在上例中,我们将CPU处理的IPv6流量限制为每秒32000个数据包。
Catalyst 6500 系列交换机
Catalyst 6500交换机使用TCAM在硬件中做出转发决策,TCAM通常不需要CPU协助,只要TCAM有转发条目。
Catalyst 6500交换机上的Supervisor Enginet 720有两个CPU。一个CPU是网络管理处理器(NMP)或交换机处理器(SP)。 另一个CPU是第3层CPU,称为路由处理器(RP)。
进程和中断CPU利用率列在show process cpu命令中。如下所示,高 中断引起的CPU大多基于流量。中断交换流量,是指与特定进程不匹配但仍需要转发的流量。以下示例显示Catalyst 6500交换机由于中断而在RP上具有高CPU利用率。
6500#show process cpu
CPU utilization for five seconds: 98%/92%;
one minute: 99%; five minutes: 99% PID Runtime(ms) Invoked
检查是否有接口或第3层VLAN丢弃高流量。(输入队列丢弃)。 如果是,流量可能会从该VLAN传送到RP。
Vlan19 is up, line protocol is up
Input queue: 0/75/6303532/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
5 minute input rate 19932000 bits/sec, 26424 packets/sec
5 minute output rate 2662000 bits/sec, 1168 packets/sec
以下命令可用于查找接口vlan 19的输入队列缓冲区中的所有数据包。
6500#show buffer input-interface vlan 19 packet
或者,您可以使用NetDR捕获捕获Catalyst 6500交换机上发往CPU的流量。本文档解释如何解释使用NetDR捕获捕获的数据包。
------- dump of incoming inband packet -------
interface Vl16, routine mistral_process_rx_packet_inlin, timestamp 03:17:56.380
dbus info: src_vlan 0x10(16), src_indx 0x1001(4097), len 0x5A(90)
bpdu 0, index_dir 0, flood 1, dont_lrn 0, dest_indx 0x4010(16400)
E8820000 00100000 10010000 5A080000 0C000418 01000008 00000008 4010417E
mistral hdr: req_token 0x0(0), src_index 0x1001(4097), rx_offset 0x76(118)
requeue 0, obl_pkt 0, vlan 0x10(16)
destmac 33.33.FF.4A.C3.FD, srcmac C8.CB.B8.29.33.62, protocol 86DD
protocol ipv6: version 6, flow 1610612736, payload 32, nexthdr 0, hoplt 1
class 0, src FE80::CACB:B8FF:FE29:3362, dst FF02::1:FF4A:C3FD
解决方案
使用以下一个或多个解决方案。
- 使用以下配置丢弃IPv6组播数据包。
6500(config)#mac-address-table static 3333.FF4A.C3FD vlan <vlan #> drop
- 将IPv6组播流量重定向到未使用或管理员关闭接口(本例中为Gi1/22)。
6500(config)#mac-address-table 3333.FF4A.C3FD vlan 19 interface Gi1/22
- 使用VLAN访问控制列表(VACL)丢弃IPv6组播流量。
6500(config)#mac access-li extended Multicast_MAC
6500(config-ext-macl)#permit any host 3333.FF4A.C3FD
6500(config-ext-macl)#exit
6500(config)#vlan access-map block-ipv6 10
6500(config-access-map)#action drop
6500(config-access-map)#match mac address Multicast_MAC
6500(config-access-map)#exit
6500(config-access-map)#vlan access-map block-ipv6 20
6500(config-access-map)#action forward
6500(config-access-map)#exit
6500(config)#vlan filter block-ipv6 vlan-list <vlan #>
- 禁用IPv6 MLD监听。
6500(config)#no ipv6 mld snoopin
- 使用控制平面策略(CoPP)丢弃IPv6组播流量
6500(config)#ipv6 access-list test
6500(config-ipv6-acl)#permit ipv6 any any
6500(config-ipv6-acl)#exit
6500(config)#class-map TEST
6500(config-cmap)#match access-group name test
6500(config-cmap)#exit
6500(config)#policy-map ipv6
6500(config-pmap)#class TEST
6500(config-pmap-c)#police 320000 conform-action drop exceed-action drop
6500(config-pmap-c)#exit
6500(config)#control-plane
6500(config-cp)#service-policy in ipv6
6500(config-cp)#exit
- 在入口接口上使用风暴控制。风暴控制在1秒间隔内监控传入流量级别,在此间隔内,它会将流量级别与已配置的流量风暴控制级别进行比较。流量风暴控制级别是端口总可用带宽的百分比。每个端口都有一个流量风暴控制级别,用于所有类型的流量(广播、组播和单播)。
6500(config)#interface Gi2/22
6500(config-if)#storm-control multicast level 10
7.如果SP(交换机处理器)上的CPU使用率较高,请应用以下解决方法。
6500(config)#mls rate-limit ipv6 mld 10 1
如果您无法根据本文档中提供的信息确定原因,请提交TAC服务请求以进一步调查。