取消
显示结果 
搜索替代 
您的意思是: 
cancel
3847
查看次数
24
有帮助
6
评论
yondong
Cisco Employee
Cisco Employee
本帖最后由 yondong 于 2018-2-27 15:06 编辑
一、简介
在排查网络丢包的故障时,我们可以用ELAN工具在数据包沿途设备抓包来定位被丢弃的数据包是被哪台设备所丢弃,也就是确定故障源。之后,对故障源进一步排查。本文主要介绍如何在Nexus 7000 M系列板卡上配置ELAM,并且解释ELAM相关的输出信息。

二、拓扑
144938xvoeqbq92inveobf.png
在本例中,主机10.0.5.101属于VLAN 2500,并连接到N7K的E4/1口。主机10.0.3.101属于VLAN 55,并连接到N7K的E3/5口。本次的ELAM实验是为了捕获从主机10.0.5.101到主机10.0.3.101的一个数据包。请注意,ELAM只允许捕获一个数据包。
三、ELAM配置过程
首先,为了执行N7K的ELAM我们必须attach到相应的板卡(需要Admin权限):
N7K# attach module 4
Attaching to module 4 ...
To exit type 'exit', to abort type '$.'
module-4#

之后,我们需要确定数据包入向接口的转发引擎。在本例中数据包从Eth4/1接口进入交换机,那么模块4必须是M系列模块。
N7K# show module
Mod Ports Module-Type Model Status
--- ----- ----------------------------------- ------------------ ----------
3 32 10 Gbps EthernetModule N7K-M132XP-12 ok
4 48 10/100/1000 Mbps Ethernet Module N7K-M148GT-11 ok
5 0 Supervisor module-1X N7K-SUP1 active *
6 0 Supervisor module-1X N7K-SUP1 ha-standby

对于M卡,我们需要在二层转发引擎(也叫Eureka)上执行ELAM。请注意,二层转发引擎Data Bus(DBUS)包含有数据包在执行二层、三层查找前的原始包头信息。Result Bus(RBUS)包含有数据包在执行二层、三层查找后的包头信息。每个N7K M系列模块会使用多个二层转发引擎,所以我们必须确认端口Eth4/1使用的是哪个Eureka芯片。芯片和接口对应关系可通过以下命令查看:
module-4# show hardware internaldev-port-map
(some output omitted)
--------------------------------------------------------------
CARD_TYPE: 48 port 1G
>Front Panel ports:48
--------------------------------------------------------------
Device name Dev role Abbr num_inst:
--------------------------------------------------------------
> Eureka DEV_LAYER_2_LOOKUP L2LKP 1
+--------------------------------------------------------------+
+-----------+++FRONT PANEL PORT TO ASICINSTANCE MAP+++--------+
+--------------------------------------------------------------+
FP port|PHYS |SECUR |MAC_0 |RWR_0 |L2LKP|L3LKP |QUEUE |SWICHF
1 0 0 0 0 0 0 0 0 <<<<<物理端口1
2 0 0 0 0 0 0 0 0

在输出中,我们可以看到端口Eth4/1位于Eureka(L2LKP)芯片实例0。注意:对于M系列模块,当您配置ELAM时,ELAM命令中设置Eureka芯片实例是从1开始的,因此在上面输出结果中实例0应改为ELAM命令中的实例1,输出结果中实例1应改为ELAM命令中的实例2,输出结果中实例2应改为ELAM命令中的实例3,以此类推。
module-4# elam asic eureka instance 1
module-4(eureka-elam)#
1、配置触发条件
Eureka芯片可以抓取IPv4,IPv6和其他类型的数据帧。ELAM中配置的帧格式要和实际数据包的帧格式相匹配。比如说,实际数据包为IPv4的帧,那么ELAM的触发条件必须配置为IPv4。IPv6数据包也有同样的限制。
在NX-OS系统中,我们可以使用问号“?”来查看有哪些字段可以被设置为ELAM的触发条件:
module-4(eureka-elam)# trigger dbus dbiingress ipv4 if ?
(省略部分输出结果)
destination-flood Destination Flood
destination-index Destination Index
destination-ipv4-address Destination IP Address
destination-mac-address Destination MAC Address
ip-tos IP TOS
ip-total-len IP TotalLength
ip-ttl IP TTL
source-mac-address SourceMAC Address
vlan-id Vlan IDNumber

在本例中,假设我们只对数据包的源目IP地址感兴趣(实际应用中主要使用的也是源目IP地址作为ELAM的触发条件)。
Eureka要求分别为DBUS和RBUS设置触发参数。对于RBUS来说,一般推荐配置PB1,如果配置PB1后RBUS不能被触发,那么请更改为PB2。
1)DBUS触发条件配置:
module-4(eureka-elam)# trigger dbus dbiingress ipv4 if source-ipv4-address
10.0.5.101 destination-ipv4-address 10.0.3.101 rbi-corelate
2)RBUS触发条件配置:
module-4(eureka-elam)# trigger rbus rbi pb1ip if cap2 1

2、开始抓包
现在,我们已经确定了二层转发引擎,并且配置了触发条件,接下来就可以开始用ELAM抓包了:
module-4(eureka-elam)# start

为了检查ELAM的状态,请输入status命令:
module-4(eureka-elam)# status
Instance: 1
EU-DBUS: Armed <<<<<<<<<<表示转发引擎没有收到我们感兴趣的数据包
trigger dbus dbi ingress ipv4 ifsource-ipv4-address 10.0.5.101
destination-ipv4-address 10.0.3.101 rbi-corelate
EU-RBUS: Armed
trigger rbus rbi pb1 ip if cap2 1
LM-DBUS: Dis-Armed
No configuration
LM-RBUS: Dis-Armed
No configuration

一旦满足触发条件的数据包被转发引擎接收到,ELAM状态就会显示为被触发:
module-4(eureka-elam)# status
Instance: 1
EU-DBUS: Triggered <<<<<<<<<<表示转发引擎已经收到我们感兴趣的数据包
trigger dbus dbi ingress ipv4 ifsource-ipv4-address 10.0.5.101
destination-ipv4-address 10.0.3.101 rbi-corelate
EU-RBUS: Triggered
trigger rbus rbi pb1 ip if cap2 1
LM-DBUS: Dis-Armed
No configuration
LM-RBUS: Dis-Armed
No configuration
四、输出结果说明
我们可以通过show dbus和show rbus来查看ELAM的结果。但需要注意的是,如果有大量的数据包都匹配到了我们预先设定的触发条件,那么DBUS和RBUS可能会被不同的数据包所触发。这时候我们就需要通过以下命名来确保DBUS和RBUS的内部序列号是一致的。
module-4(eureka-elam)# show dbus | i seq
seq = 0x05
module-4(eureka-elam)# show rbus | i seq
seq = 0x05

以下内容只是ELAM的一部分输出结果,也是我们最应该关注的部分:
module-4(eureka-elam)# show dbus
seq = 0x05
vlan = 2500
source_index = 0x00a21
l3_protocol = 0x0 (0:IPv4, 6:IPv6)
l3_protocol_type = 0x01, (1:ICMP, 2:IGMP,4:IP, 6:TCP, 17:UDP)
dmac = 00.00.0c.07.ac.65
smac = d0.d0.fd.b7.3d.c2
ip_ttl = 0xff
ip_source = 010.000.005.101
ip_destination = 010.000.003.101

module-4(eureka-elam)# show rbus
seq = 0x05
flood = 0x0
dest_index = 0x009ed
vlan = 55
ttl = 0xfe
data(rit/dmac/recir) = 00.05.73.a9.55.41
data(rit/smac/recir) = 84.78.ac.0e.47.41

通过DBUS数据我们可以确认N7K收到了来自VLAN2500的数据包,而且该数据包的源目MAC地址是d0d0.fdb7.3dc2和0000.0c07.ac65,源目IP分别是10.0.5.101和10.0.3.101。同样也可以看到是IPv4的数据帧。为了验证从哪个接口收到了触发ELAM条件的数据包,我们可以通过SRC_INDEX(show dbus的输出结果)参数来查看。
N7K# show system internal pixm info ltl 0xa21(SRC_INDEX值)
Member info
------------------
Type LTL
---------------------------------
PHY_PORT Eth4/1 <<<<<<<<<<物理口E4/1收到了该数据包
FLOOD_W_FPOE 0x8014

同理,在RBUS的输出结果中可以看到从物理口E4/1收到的数据包被路由到了VLAN 55,同时TTL值从DBUS的0xff减小到了RBUS的0xfe。并且可以看出,该数据帧进行了重写操作,源目MAC分别被重写为8478.ac0e.4741和0005.73a9.5541。
另外,我们也可以通过DEST_INDEX (show rbus的输出结果)参数来验证该数据包的输出端口:

N7K# show system internal pixm info ltl 0x9ed(DEST_INDEX值)
Member info
------------------
Type LTL
---------------------------------
PHY_PORT Eth3/5 <<<<<<<<<<数据包被送往口物理接口E3/5
FLOOD_W_FPOE 0x8017
FLOOD_W_FPOE 0x8016

五、附加命令
通过以下两条命令可以查看ltl池的具体用途,从而可以确认在ELAM的输出结果中SRC_INDEXDEST_INDEX值是否合理,是否为UCAST Pool的值。
N7K# show system internal pixm info ltl0x11a0
0x11a0 is not configured

N7K# show system internal pixm infoltl-region
LTL POOL TYPE SIZE RANGE <<<<<SRC_INDEX/DEST_INDEX
=====================================================================
DCE/FC Pool 1024 0x0000 to 0x03ff
SUPInband LTL 32 0x0400 to 0x041f
MDFlood LTL 1 0x0420
Central R/W 1 0x0421
UCAST Pool 1536 0x0422 to 0x0a21
PCPool 1720 0x0a22 to 0x10d9
LCCPU Pool 32 0x1152 to 0x1171
EARLPool 72 0x10da to 0x1121
SPANPool 48 0x1122 to 0x1151
UCAST VDC Use Pool 16 0x1172 to 0x1181
UCAST Generic Pool 30 0x1182 to 0x119f
LISPPool 4 0x1198 to 0x119b
Invalid SI 1 0x119c to 0x119c
ESPANSI 1 0x119d to 0x119d
Recirc SI 1 0x119e to 0x119e
DropDI 2 0x119f to 0x11a0
UCAST (L3_SVI_SI) Region 31 0x11a1 to 0x11bf
UCAST (Fex/GPC/SVI-ES) 3648 0x11c0 to 0x1fff
UCAST Reserved for Future Use Region 2048 0x2000 to 0x27ff
======================> UCAST MCASTBOUNDARY <======================
VDCOMF Pool 32 0x2800 to 0x281f

评论
Yanli Sun
Community Manager
Community Manager
感谢专家分享
SMG-SH
Level 7
Level 7
哈哈哈,这个详细,点赞
Walter.wu
Spotlight
Spotlight
这个贼详细,多谢大佬!
xuxianda7
Spotlight
Spotlight
谢谢分享,思科员工的分享真不错,这种实际案例是我们这些工程师很需要的
yondong
Cisco Employee
Cisco Employee
大家有什么问题,可以留言,我有时间一定会一一回复大家。
yondong
Cisco Employee
Cisco Employee
大家有什么问题,可以留言,我有时间一定会一一回复大家。
入门指南

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

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









快捷链接