概述
本地报文头获取可以实现报文头快速捕获以便分析和定位网络问题。
在网络运行过程中,通常会遇到CPU占用率很高,接口流量异常等问题,这时需要对网络设备接收或者转发的报文头进行观测和分析以定位网络问题。
通过配置本地报文头获取,可以在不影响接口接收和转发报文的前提下,将报文头捕获并保存到设备指定文件,对当前的数据流进行监控和分析。
报文捕获的方式通常有两种:一是捕获上送CPU的报文(也称主机报文),二是捕获转发报文。
对于华为设备使用的报文捕获命令是capture-packet,本文以华为设备为例进行介绍。不同版本的设备所使用的命令可能不同。
捕获上送CPU的报文
应用环境
随着网络规模的扩展和应用的增多,设备CPU的处理压力也越来越大。当上送CPU的报文过多时,会导致CPU的占有率过高,性能下降,从而影响其他正常业务的运行。
为了减轻CPU的处理压力,保证CPU的稳定运行,可以设置过滤策略,根据过滤策略对上送CPU报文飞报文头进行捕获并分析,然后用户可以根据分析结果定位网络问题。
当用户使用ACL配置过滤条件时,需要先创建ACL。
操作步骤
1.执行命令system-view,进入系统视图。
2.配置ACL规则(可选)。
说明:
用户配置ACL规则后,就可以获取指定ACL编号规则的报文。
报文头获取功能对于报文是否匹配ACL规则,采用如下策略:
- 如果匹配上ACL规则,且ACL规则的动作是permit,则报文会被获取。
- 如果匹配上ACL规则,且ACL规则的动作是deny,则报文会被丢弃,不会被转发,可能影响业务。
- 如果没有匹配上ACL规则,则报文不会被获取,只进行正常转发。
- 如果引用的ACL规则不存在,或者ACL存在但是ACL中没有定义规则,则报文不会被获取,只进行正常转发。
- 匹配ACL规则时,ACL规则里的vpn-instance vpn-instance-name参数不生效。
3.执行命令capture-packet local-host,配置上送CPU报文的报文头获取功能。
注意:
- 不同版本的设备所使用的命令可能不同
- 主机报文头获取可以设置报文头获取超时时间time、获取报文的数量packet-number。在进行报文头获取时,如果满足其中一个条件,则报文头获取结束。
- 配置主机报文头获取功能时,可以根据接口上报文数量的多少设置各参数取值。如果接口上报文比较多,可以设置较短的报文头获取超时时间time,较多的获取报文头个数number;如果接口上报文比较少,可以设置较长的报文头获取超时时间time、较少的获取报文头个数number。
- 主机报文头获取可以配置参数file(保存文件方式)或者terminal(终端显示方式)。当选择file方式时,每次报文头获取命令只能保存一个文件,文件最大为2M,超过2M部分的内容不被保存。
- 使能上送报文的报文头获取功能,对设备性能的影响可以忽略。
4.(可选)执行命令capture-packet file limit limit-value,配置报文头获取目录下报文头文件(后缀名为.cap的文件)的最大个数。该命令仅在Admin-VS支持。
5.检查配置结果
- 执行命令display capture-packet config-state,查看主机报文头获取的配置信息,可以查看报文头获取索引、报文头获取文件名称等信息。
- 执行命令display capture-packet file file-name [ original-packet ],查看报文头获取文件信息。
- 执行命令display capture-packet information [ instance-id instance-id [ from begin-packet-number [ to end-packet-number ] ] [ format-cap ] [ verbose ] ],查看主控板内存中报文头获取实例的信息。
捕获转发报文
应用环境
在网络维护中,如果出现流量异常(如通话质量下降,视频马赛克等现象),怀疑可能是由设备存在错包或丢包引起的,这时就需要设置过滤策略,有针对性的捕获转发报文头信息进行故障定位,以便及时处理非法报文,保证网络数据的正常传输。
当用户使用ACL配置过滤条件时,需要先创建ACL。
操作步骤
1.执行命令system-view,进入系统视图。
2.配置ACL规则(可选)。
说明:
用户配置ACL规则后,就可以获取指定ACL编号规则的报文。
报文头获取功能对于报文是否匹配ACL规则,采用如下策略:
- 如果匹配上ACL规则,且ACL规则的动作是permit,则报文会被获取。
- 如果匹配上ACL规则,且ACL规则的动作是deny,则报文会被丢弃,不会被转发,可能影响业务。
- 如果没有匹配上ACL规则,则报文不会被获取,只进行正常转发。
- 如果引用的ACL规则不存在,或者ACL存在但是ACL中没有定义规则,则报文不会被获取,只进行正常转发。
- 匹配ACL规则时,ACL规则里的vpn-instance vpn-instance-name参数不生效。
3.执行命令capture-packet forwarding interface { interface-type interface-num | interface-name } [ inbound | outbound ] [ vlan vlan-id [ to vlan-id ] | pvlan pe-vlan-value cvlan ce-vlan-vlaue [ to vlan-id ] ] [ [ ipv6 ] acl { acl-number | name acl-name } ] [ [ time-out time-out ] | [ packet-num packet-number ] | [ overwrite ] | [ packet-len length ] | { [ file file-name [ filesize ] ] | [ buffer-only ] } ] *,配置转发报文的报文头获取功能。
- 转发报文头获取可以设置报文头获取超时时间time、获取报文头的数量packet-number。在进行报文头获取时,如果满足其中一个条件,则报文头获取结束。
- 在配置转发报文的报文头获取功能时,如果想控制设备报文头获取的速度,可以通过命令car中参数cir设置转发报文带宽。参数cir的缺省值是2Mbps,该参数取值越大,转发报文的带宽越高,报文的报文头获取速度越快。
- 配置转发报文头获取功能时,可以根据接口上报文数量的多少设置各参数取值。如果接口上报文比较多,可以设置较短的报文头获取超时时间time,较多的获取报文头个数number;如果接口上报文比较少,可以设置较长的报文头获取超时时间time、较少的获取报文头个数number。
4.(可选)执行命令capture-packet file limit limit-value,配置报文头获取目录下报文头文件(后缀名为.cap的文件)的最大个数。该命令仅在Admin-VS支持。
5.检查配置结果
- 执行命令display capture-packet config-state,查看主机报文头获取的配置信息,可以查看报文头获取索引、报文头获取文件名称等信息。
- 执行命令display capture-packet file file-name [ original-packet ],查看报文头获取文件信息。
- 执行命令display capture-packet information [ instance-id instance-id [ from begin-packet-number [ to end-packet-number ] ] [ format-cap ] [ verbose ] ],查看主控板内存中报文头获取实例的信息。
配置转发报文头获取示例
组网需求
如下图所示,PC1通过DeviceA、DeviceB访问网络。当家庭终端PC1出现视频马赛克现象时,可能是由于DeviceB存在错报引起的,需要捕获原始的报文头信息进行故障定位。这时可以配置转发报文头获取,在DeviceA的入接口(10.1.1.2)获取从DeviceB转发报文的报文头。
操作步骤
1.配置接口IP地址及路由协议,具体配置过程略。
2.配置ACL(可选)。
<DeviceA> system-view
[DeviceA] acl number 2001
[DeviceA-acl4-basic-2001] rule permit source 10.1.1.1 0.0.0.0
[DeviceA-acl4-basic-2001] commit
[DeviceA-acl4-basic-2001] quit
[DeviceA] quit
3.配置转发报文的报文头获取
<DeviceA> capture-packet forwarding interface gigabitethernet 1/0/0 inbound acl 2001 file zhua.cap time-out 3600 packet-len 64 packet-num 900
//在接口入方向匹配ACL,捕获包的长度为64字节,捕获包的数量为900,将捕获到的数据存放在zhua.cap文件(文件名必须以.cap结尾)
4.查看主机报文头获取的配置信息。
<DeviceA> display capture-packet config-state
Capture-Packet Index 1
Type : forwarding
Interface : GigabitEthernet
Direction : inbound
ACL : 2001
File Name : cfcard:/capture_fwd_GigabitEthernet3.0.0_2012-05-03-14-25-42.cap
Time-out : 3600 seconds
Packet-num : 900
Packet-len : 62
BufferOnly : disabled
5.查看主机报文头获取的文件。
<DeviceA> display capture-packet file cfcard:/capture_fwd_GigabitEthernet3.0.0_2012-05-03-14-25-42.cap
a1 b2 c3 d4 00 02 00 04 00 00 00 00 00 00 00 00
00 00 ff ff 00 00 00 09 4d 10 36 db 00 0a d5 81
00 00 00 0c 00 00 00 0c ff 03 c0 21 09 9d 00 08
8a 8c bc c3 4d 10 36 db 00 0a d6 ae
注意:
1.捕获的报文格式为''.cap'',是一种16进制的数据,无法直接阅读,需要使用wireshark等软件进行解析。
2.华为设备捕获数据包的默认长度通常为64字节。但有些低端交换机默认为10字节,这样导致抓包数据不完整wireshark软件解析会出问题,所以抓包长度尽量为64字节或128字节。
3.设备捕获的报文头文件''XXX.cap'',通常默认存放在flash:/logfile/目录下。
配置主机报文头(上送CPU)获取示例
组网需求
如下图所示,PC1通过DeviceA、DeviceB访问网络。当DeviceB的CPU利用率过高,可能是DeviceB受到攻击引起,需要捕获原始的报文进行故障定位。这时可以配置主机报文头获取功能,在DeviceB上获取上送CPU报文的报文头。
操作步骤
1.配置接口IP地址及路由协议,具体配置过程略。
2.配置上送CPU报文的报文头获取。
<DeviceB> capture-packet local-host all interface gigabitethernet 1/0/2 packet-len 60 packet-num 1000 time-out 3600
##设备版本不同,命令可能不同
3.查看主机报文头获取的配置信息。
<DeviceB> display capture-packet config-state
Capture-Packet Index 1
Type : local-host
SysID : all
Interface : GigabitEthernet1/0/2
File Name : cfcard:/capture_host_all_GigabitEthernet3.0.2_2012-05-03-10-51-29.cap
Time-out : 3600 seconds
Packet-num : 1000
Packet-len : 60
BufferOnly : disabled
4.查看主机报文头获取的文件。
<DeviceB> display capture-packet file cfcard:/capture_host_all_GigabitEthernet3.0.2_2012-05-03-10-51-29.cap
a1 b2 c3 d4 00 02 00 04 00 00 00 00 00 00 00 00
00 00 ff ff 00 00 00 09 4d 10 36 db 00 0a d5 81
00 00 00 0c 00 00 00 0c ff 03 c0 21 09 9d 00 08
8a 8c bc c3 4d 10 36 db 00 0a d6 ae