簡介
本文檔介紹由於IPV6多播偵聽程式發現資料包泛洪而導致各種Catalyst平台上的CPU使用率較高,以及緩解此問題的方法。
必要條件
沒有先決條件。
需求
本文件沒有特定需求。
採用元件
本檔案中的資訊是根據Cisco Catalyst 6500系列交換器、Catalyst 4500系列交換器和Catalyst 3850系列交換器。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。
問題
某些Cisco Catalyst平台上可能會出現CPU使用率較高的情況,這是因為MAC地址在333.xxxx.xxxx範圍內的IPv6組播流量被傳送到CPU。
根據RFC7042,所有MAC-48組播識別符號的字首為「33-33」(即,從33-33-00-00-00-00到33-33-FF-FF-FF-FF範圍內的2**32組播MAC識別符號)均按照[RFC2464]中對IPv6組播指定的方式使用。具有多點傳送目的地位址DST的IPv6封包(由16個八位元組成DST[1]到DST[16])會傳送到乙太網路多點傳送位址,該位址的前兩個八位元是值3336十六進位制的,最後四個八位元是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 snooping,以全域性啟用ipv6 mld snooping。這樣會降低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窺探中所述,可以全域性或每個VLAN啟用或停用MLD窺探。當啟用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,Dst 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協助。
Catalyst 6500交換器上的Supervisor Engine 720具有兩個CPU。一個CPU是網路管理處理器(NMP)或交換機處理器(SP)。 另一個CPU是第3層CPU,稱為路由處理器(RP)。
show process cpu 命令中列出了進程和中斷CPU利用率。如下所示,高 由中斷導致的CPU主要基於流量。中斷交換流量,是與特定進程不匹配,但仍需要轉發的流量。以下示例顯示由於中斷而導致RP上的CPU使用率較高的Catalyst 6500交換機。
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
- 在入口介面上使用風暴控制。storm-control在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服務請求進行進一步調查。