软硬件平台
问题描述
故障诊断步骤
经验总结
相关命令
其他相关文档
硬件平台: Nexus 7000
软件版本: 所有
用户网络中,经常使用 ping 命令测试设备连通性。在 ping Nexus 7000 设备时,会出现规律性丢包。
N7K-1 (10.10.3.3) -------------- (10.10.3.4) N7K-2 CTD-100-F1.11.09-7000-1# ping 10.10.3.4 vrf test packet-size 2000 count 30 PING 10.10.3.4 (10.10.3.4): 2000 data bytes 2008 bytes from 10.10.3.4: icmp_seq=0 ttl=254 time=7.559 ms 2008 bytes from 10.10.3.4: icmp_seq=1 ttl=254 time=2.082 ms 2008 bytes from 10.10.3.4: icmp_seq=2 ttl=254 time=2.079 ms 2008 bytes from 10.10.3.4: icmp_seq=3 ttl=254 time=1.964 ms 2008 bytes from 10.10.3.4: icmp_seq=4 ttl=254 time=1.964 ms 2008 bytes from 10.10.3.4: icmp_seq=5 ttl=254 time=1.965 ms 2008 bytes from 10.10.3.4: icmp_seq=6 ttl=254 time=1.971 ms 2008 bytes from 10.10.3.4: icmp_seq=7 ttl=254 time=1.959 ms Request 8 timed out 2008 bytes from 10.10.3.4: icmp_seq=9 ttl=254 time=2.158 ms 2008 bytes from 10.10.3.4: icmp_seq=10 ttl=254 time=2.008 ms 2008 bytes from 10.10.3.4: icmp_seq=11 ttl=254 time=2.09 ms 2008 bytes from 10.10.3.4: icmp_seq=12 ttl=254 time=2.088 ms 2008 bytes from 10.10.3.4: icmp_seq=13 ttl=254 time=2.088 ms 2008 bytes from 10.10.3.4: icmp_seq=14 ttl=254 time=2.123 ms 2008 bytes from 10.10.3.4: icmp_seq=15 ttl=254 time=2.059 ms 2008 bytes from 10.10.3.4: icmp_seq=16 ttl=254 time=2.089 ms Request 17 timed out 2008 bytes from 10.10.3.4: icmp_seq=18 ttl=254 time=2.128 ms 2008 bytes from 10.10.3.4: icmp_seq=19 ttl=254 time=2.045 ms 2008 bytes from 10.10.3.4: icmp_seq=20 ttl=254 time=2.089 ms 2008 bytes from 10.10.3.4: icmp_seq=21 ttl=254 time=2.089 ms 2008 bytes from 10.10.3.4: icmp_seq=22 ttl=254 time=2.087 ms 2008 bytes from 10.10.3.4: icmp_seq=23 ttl=254 time=2.086 ms 2008 bytes from 10.10.3.4: icmp_seq=24 ttl=254 time=2.092 ms 2008 bytes from 10.10.3.4: icmp_seq=25 ttl=254 time=14.091 ms Request 26 timed out 2008 bytes from 10.10.3.4: icmp_seq=27 ttl=254 time=2.206 ms 2008 bytes from 10.10.3.4: icmp_seq=28 ttl=254 time=1.927 ms 2008 bytes from 10.10.3.4: icmp_seq=29 ttl=254 time=1.962 ms --- 10.10.3.4 ping statistics --- 30 packets transmitted, 27 packets received, 10.00% packet loss round-trip min/avg/max = 1.927/2.705/14.091 ms
使用大包 ping 测试,可以使此现象更明显地重现。
首先,我们需要了解此类 ping 测试数据包是如何在 Nexus 设备上被处理的。Nexus 设备处理数据包分为软件处理和硬件处理。绝大部分数据流量都是通过硬件处理快速转发的。但是一些特殊流量是需要交由软件处理的。包括以下种类的数据包(并不局限于以下类型):
根据此策略,目的地址为对端接口地址的 ping 测试流量会被 Nexus 7000 软件处理。软件处理意味着数据包会被送到设备 CPU,由 CPU 处理和转发。所以无论在 N7K-1,还是 N7K-2 上,ping 流量都是由 CPU 处理转发的。
在了解了 Nexus 处理数据包的行为后,我们开始对此故障进行排查。
我们通过抓包软件,对链路进行抓包,发现数据包已经从 N7K-1 上发出,N7K-2 也已经收到。
据此判断,N7K-2 收到数据包后,由于某种原因,数据包被丢弃。
根据 Nexus 配置文档,Nexus 设备默认配置 CoPP 特性,对设备 CPU 进行保护。于是,我们通过命令检查 N7K-2 上 CoPP 的状态。
CTD-100-F1.11.09-7000-2# sh policy-map inter control-plane | be copp-system-class-monitoring class-map copp-system-class-monitoring (match-any) match access-grp name copp-system-acl-icmp match access-grp name copp-system-acl-icmp6 match access-grp name copp-system-acl-traceroute police cir 130 kbps , bc 1000 ms module 1 : conformed 1411010 bytes; action: transmit violated 87528 bytes; action: drop module 2 : conformed 23868 bytes; action: transmit violated 0 bytes; action: drop module 7 : conformed 5930 bytes; action: transmit violated 0 bytes; action: drop
通过命令,我们可以很清晰的发现数据包有部分被丢弃了。
解决办法:
CoPP 功能在 Nexus 设备上是默认开启的,并且会有默认的限制参数设置。主要功能是保护设备 CPU 运行和对正常控制流量的处理。用户配置时,可以结合自身网络需求,对 CoPP 参数进行调整。
show policy-map interface control-plane