取消
显示结果 
搜索替代 
您的意思是: 
cancel
7169
查看次数
90
有帮助
10
评论
blgao
Cisco Employee
Cisco Employee
本帖最后由 blakegao 于 2015-3-20 09:40 编辑
软硬件平台
硬件平台: Catalyst 6500 系列交换机
当前,支持ERSPAN的硬件为Supervisor 720 配置 PFC3 (其中PFC3A需要硬件版本号为3.2或以上)。
硬件平台: Catalyst 6500 系列交换机
问题描述
和传统的SPAN一样,ERSPAN能够将SPAN源接口的流量复制到目的接口上,但是ERSPAN更吸引人的地方在于,被监控接口和目标接口可以在不同的网络设备上,利用IP GRE隧道,使得用户可以跨越3层网络进行远程多台设备的诊断和镜像工作。
图1对比了本地SPAN (Local SPAN),远程SPAN (RSPAN)和ERSPAN的区别:
093837almblkph5e67puux.png

ERSPAN的配置并不复杂,但是在配置的过程中,如果稍不注意,可能会导致Catalyst 6500 系列交换机CPU高的问题。本文就其中两个最典型的ERSPAN造成高CPU的场景进行分析,并给出解决办法。
故障诊断步骤场景 1
在ERSPAN的目的设备上,发现CPU高,而且绝大部分的CPU是中断(interrupt)高(X%/Y%,其中X代表CPU的总数值,Y代表中断,如果Y值很高,则表示中断造成了CPU高的现象,其占据了CPU利用率的绝大部分)。例如我们看到下面的CPU进程输出,中断为90%,中断数值过高一般意味着有过多的流量流向了CPU,进行了软件转发。
6506#show proc cpuCPUutilization for five seconds: 99%/90%; one minute: 99%; five minutes: 99%
通过检查配置,我们发现,在ERSPAN的源设备上,其源会话的配置完全正确:
6506(config)#monitorsession 1 type erspan-source
6506(config-mon-erspan-src)#sourcevlan 10
6506(config-mon-erspan-src)#destination
6506(config-mon-erspan-src-dst)#ipaddress 10.100.100.1
6506(config-mon-erspan-src-dst)#erspan-id1
6506(config-mon-erspan-src-dst)#originip address 10.10.10.1
6506(config-mon-erspan-src-dst)#exit
6506(config-mon-erspan-src)#noshut
6506(config-mon-erspan-src)#exit

但是在ERSPAN的目的设备上,只在loopback 0接口下配置了目的IP地址,并没有ERSPAN目的会话的相关配置(或者可能错误的删除掉了相关配置):
6509e(config)#interfaceloopback0
6509e(config-if)#ipaddress 10.100.100.1 255.255.255.255
这便是造成ERSPAN目的设备CPU高的根本原因。如果在源设备上,ERSPAN的源会话配置完毕并且已经激活,该会话就会把抓到的数据包发向ERSPAN的目的接口。而在目的设备上,目的ip地址已经配置完毕且接口是开启状态,但是ERSPAN的目的会话功能并没有被激活,因此从源设备过来的ERSPAN流量会直接流向目的设备的CPU,造成CPU中断过高。为了避免这样的问题,则需要相应的在目的设备上增加ERSPAN目的会话的相关配置,来终结去向CPU的ERSPAN流量。事实上,推荐的最简洁的目的会话配置可以是只包括目的会话ID以及IP地址的配置,例如:
6509e(config)#monitorsession 1
6509e(config-mon-erspan-dst)#source
6509e(config-mon-erspan-dst-src)#ipaddress 10.100.100.1
由此可见,如果ERSPAN目的设备的目的会话配置有误或者不完全,则会造成目的设备高CPU现象。为了避免该问题,较合理的配置顺序为先在目的设备上配置ERSPAN会话终结功能,再配置ERSPAN源设备。
场景 2
在ERSPAN的源设备上,CPU高,且中断高。
首先,检查相关配置,发现源和目的会话的配置都正确,如下:
ERSPAN源会话配置:
6506(config)#monitorsession 1 type erspan-source
6506(config-mon-erspan-src)#sourcevlan 10
6506(config-mon-erspan-src)#destination
6506(config-mon-erspan-src-dst)#ipaddress 10.100.100.1
6506(config-mon-erspan-src-dst)#erspan-id1
6506(config-mon-erspan-src-dst)#originip address 10.10.10.1
6506(config-mon-erspan-src-dst)#exit
6506(config-mon-erspan-src)#noshut
6506(config-mon-erspan-src)#exit
ERSPAN目的会话配置:
6509e(config)#monitorsession 1 type erspan-destination
6509e(config-mon-erspan-dst)#destinationint gig 7/25
6509e(config-mon-erspan-dst)#source
6509e(config-mon-erspan-dst-src)#ipaddress 10.100.100.1
6509e(config-mon-erspan-dst-src)#erspan-id1
6509e(config-mon-erspan-dst-src)#exit
6509e(config-mon-erspan-dst)#noshut
6509e(config-mon-erspan-dst)#exit
于是我们可以在ERSPAN源设备上通过使用Netdr抓取流向CPU的数据包:
6506#debug netdrcapture rx
6506#no debug netdrcapture rx
6506#show netdrcaptured-packets
通过 show netdr captured-packets 的输出,我们发现,绝大多数去CPU的数据包都是长度大于1500 byte的GRE数据包,并且DF位为1。
------- dump of incoming inband packet-------
interface NULL,routine draco2_process_rx_packet_inline dbus info: src_vlan 0x3FE(1022),src_indx 0x7FFD(32765), len 0x600(1536) bpdu 0, index_dir 0, flood 0, dont_lrn0, dest_indx 0x380(896) 08020C00 03FE0000 7FFD0006 00280000 002F0000 00000000429F0000 03800000 mistral hdr: req_token 0x0(0), src_index0x7FFD(32765), rx_offset 0x76(118) requeue 0, obl_pkt 0, vlan 0x3FE(1022)destmac 00.1F.CA.1D.5E.00, srcmac 0A.0B.0C.0D.0E.0F, protocol 0800 protocol ip:version 0x04, hlen 0x05, tos 0x00, totlen 1518, identifier 1023 df 1, mf 0, fo0, ttl 255, src 10.10.10.1, dst 10.100.100.1, proto 47
通过检查接口配置发现,其接口的MTU配置为1500 byte。
一般来说,Catalyst 6500交换机会把超过接口MTU值而造成MTU检测失败的数据包发到CPU进行分片或产生ICMP不可达信息。ERSPAN的源设备不会对MTU检测失败的ERSPAN数据包进行分片处理。实际上,源设备把ERSPAN的数据包的DF位置为1,防止该数据包在ERSPAN的全程路径上进行分片处理。而且ERSPAN的目的会话也不会对分片了的数据包进行重组。因此,如果ERSPAN数据包的大小超过了接口的MTU数值,导致MTU检测失败,该数据包会被发往CPU,最终被丢弃。
ERSPAN可以支持的最大3层数据包的大小为9202 byte。因此,为了不造成MTU检测失败,导致CPU高和数据包的丢弃,就需要在ERSPAN的路径上的所有接口上配置足够大的MTU数值。对于3层以太接口,可以配置的MTU范围为64 byte到9216 byte。因此,对于ERSPAN,推荐的MTU配置为9216 byte,且该MTU数值应该应用于从ERSPAN的源设备到目的设备中间经过的所有接口上。
当然,对于MTU检测失败造成CPU高的问题,我们也可以通过使用命令mls rate-limit all mtu-failure rate(例如,可以将rate数值设为10 pps)来限制由于超过接口MTU值而流向CPU的数据包的数量,但是这样做只能缓解CPU的压力,并不能防止超出MTU的ERSPAN数据包丢失。

评论
xupeng
Cisco Employee
Cisco Employee
楼主好人,谢谢分享
taosun2
Cisco Employee
Cisco Employee
赞!!!
yanzha4
Spotlight
Spotlight
文美人更美啊
congx
Cisco Employee
Cisco Employee
楼主好人 么么哒
Luke Huang
Cisco Employee
Cisco Employee
thanks for your share
linchen2
Community Member
:D:D:D:D{:2_31:}
yinba
Cisco Employee
Cisco Employee
{:3_48:}
pengxu
Community Member
谢谢分享@@@@
newouxinhao
Level 1
Level 1
{:3_48:}楼主好人
suzhouxiaoniu
Spotlight
Spotlight
学习了,强烈的顶一下。。。
入门指南

使用上面的搜索栏输入关键字、短语或问题,搜索问题的答案。

我们希望您在这里的旅程尽可能顺利,因此这里有一些链接可以帮助您快速熟悉思科社区:









快捷链接