排障还能这么玩?教你5个好用命令(上)

2023-08-23 09:35:03 浏览数 (2)

作为一名网工,基本上都会有很长一段时间去解决网络中出现的各种问题吧。

比如说,在两台或多台路由器之间创建路由的时候,比如RIP、EIGRP或OSPF……

遇到网络故障的时候,你一般会最先使用哪条命令进行排障?

Ping还是Traceroute?是Show还是Telnet?又或是Clear、Debug

排障命令网上一搜,非常多了,但大多数都是讲点理论基础,在实际应用上,差点意思。

为了方便你更好地理解和吸收,遇到同样的情况的时候,可以直接复用。

今天这篇,先给你说说最熟悉的Ping命令,千万别错过这三个实用排障案例。

01

Ping的原理&功能

“ping”这个词源于声纳定位操作,指来自声纳设备的脉冲信号。

Ping命令的思想与发出一个短促的雷达波,通过收集回波来判断目标很相似:

即源站点向目的站点发出一个ICMP Echo Request报文,目的站点收到该报文后回一个ICMP Echo Reply报文。

这样就验证了两个节点间IP层的可达性——表示了网络层是连通的。

Ping命令功能主要是用于检查IP网络连接及主机是否可达。

02

RGNOS平台的ping命令

在RG系列设备上,Ping命令的格式是这样的:

代码语言:javascript复制
ping  ip-address

比如说,向主机10.15.50.1 Ping报文

代码语言:javascript复制
RG# ping  10.15.50.1 //ping通的情况
Switch>PING
Target IP address or host: 10.15.50.1   //目的IP

Repeat count [5]: 2    //执行次数

Datagram size [100]: 8100   //数据包大小

Timeout in milliseconds [2000]: 5000  //延迟时间

Extended commands [n]:

Sending 2, 8100-byte ICMP Echos to 10.15.50.1,
timeout is 5000 milliseconds.
!!

Success rate is 100 percent (2/2)
Minimum = 21ms Maximum = 22ms, Average = 21msRG
# ping  10.15.50.1 //ping不通的情况
Sending 5, 100-byte ICMP Echos to 10.15.50.1,
timeout is 2000 milliseconds.
.....

Success rate is 0 percent (0/5)

03

Windows平台的Ping命令

在PC机上或Windwos为平台的服务器上,Ping命令的格式如下:

代码语言:javascript复制
Ping [ -n  number ] [ -t  ] [ -l  number ]  ip-address

-n:Ping报文的个数,缺省值为5;

-t:持续地ping 直到人为地中断,Ctr Breack暂时中止ping命令并查看当前的统计结果,而Ctr C则中断命令的执行。

-l:设置Ping报文所携带的数据部分的字节数,设置范围从0至65500。例:向主机10.15.50.1 发出2个数据部分大小为 3000 Bytes的ping报文。

代码语言:javascript复制
C:>ping -l 3000 -n 2 10.15.50.1
Pinging 10.15.50.1 with 3000 bytes of data
Reply from 10.15.50.1: bytes=3000 time=321ms TTL=255
Reply from 10.15.50.1: bytes=3000 time=297ms TTL=255
Ping statistics for 10.15.50.1:
    Packets: Sent = 2, Received = 2, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 297ms, Maximum =  321ms, Average =  309ms

04

巧用Ping进行故障排除

排障案例① 连通性问题还是性能问题?

案例描述:

工程师小C,在配置完一台路由器之后执行Ping命令检测链路是否通畅。

发现5个报文都没有Ping通,于是检查双方的配置命令并查看路由表,却一直没有找到错误所在。

最后又重复执行了一遍相同的Ping命令,发现这一次5个报文中有1个Ping 通了——原来是线路质量不好存在比较严重的丢包现象。

工程师小C又配置了一台路由器,然后执行Ping命令访问Internet上某站点的IP地址,但没有Ping通。

有了上次的教训小L,再一次Ping了20个报文,仍旧没有响应。于是小L断定是网络故障。

但是在费劲周折检查了配置链路之后仍没有发现任何可疑之处。

最后小L采取逐段检测的方法对链路中的网关进行逐级测试,发现都可以Ping 通,但是响应的时间越来越长,最后一个网关的响应时间在1800ms左右。

会不会是由于超时而导致显示为Ping 不同呢?

受此启发,小L将Ping 命令报文的超时时间改为4000ms,这次成功Ping通了,显示所有的报文响应时间都在2200ms 左右。

建议和总结:

真的是Ping不通吗?这个问题需要定位清楚。

因为连通性问题和性能问题排错的关注点是不一样的——问题定位错误必然会导致排错过程的周折。

使用一般的Ping命令,缺省是发送5个报文的,超时时长是2000ms。

如果Ping不通情况发生,最好能够再用带参数-c和-t的Ping命令再执行一遍。

如:Ping -c 20 -t 4000 ip-address,即连续发送20个报文,每个报文的超时时长为4000ms,这样一般可以判断出到底是连通性问题还是性能问题。

排障案例② 使用大包ping对端进行MTU不一致的故障排除

案例描述:

某次开局,使用RG路由器与其他厂商的某路由器互连,并运行OSPF协议。

数据配置完毕后,一切正常,并在今后相当长的时间内设备运转稳定。但两个月后,用户反馈网络中断。

相关信息显示:

1、登录到两台路由器上,发现双方连接正常,可以相互Ping通对端地址。但OSPF协议中断。

2、登录RG路由器查看邻居状态,发现邻居状态机处于Exstart状态。打开相应的debug开关查看相应的报文信息,发现双方都可以收到Hello报文,但RG路由器发送DD报文后,一直没有收到对方回应的DD报文。

3、登录其他厂商的那台路由器,打开相应的debug开关,发现对方收到RG路由器发送的DD报文后,一发送了相应的DD报文予以回应。

原因分析:

初步断定,RG路由器没有收到DD回应报文,但对方确实发出来了。

既然可以接收到HELLO 报文说明链路是通畅的,而且多播报文的收发也没有问题。

那么有可能是对方发送的DD 报文有错误导致RG路由器拒收,但查看相应的信息,并没有报告接收到错误的DD 报文。

仔细查看某厂商路由器的调试信息发现这个DD报文很大有2000 多字节。

会不会是由于报文太大导致的问题呢?

试着Ping了一个2000字节的报文,结果不通。那么故障原因很可能是——由于双方的MTU不一致导致大包不通。

处理过程:

检查配置,发现对方路由器的MTU设置为4000多而RG路由器的MTU设置为1500,于是修改对端路由器的MTU为1500。

故障排除。

那么为什么工程初期没有问题呢?

这是因为前期DD报文长度小于1500字节,而后来网络扩容导致路由信息过多使DD 报文的长度超过了1500 字节。

建议和总结:

由于Ping 缺省报文是56 个字节,所以显示的Ping 通信息只是表示56字节的报文可以通而并不一定表示其他大小的报文仍旧可以通。

所以,应当善于使用Ping的其他参数来进行故障排除。

排障案例③ A能Ping通B,B就一定能Ping通A吗?

案例描述:

先来看个组网图。

在RouterA上配置一条指向2.0.0.0/8的静态路由:

代码语言:javascript复制
RouterA(config)# ip route 2.0.0.0 255.0.0.0 1.1.1.1

在RouterA 上Ping RouterB 的以太网地址2.2.2.2,显示可以正常Ping通。

但是在RouterB上Ping RouterA的以太网地址3.3.3.3,却无法Ping通。

原因分析:

由于在RouterB 上却没有相应的配置到3.0.0.0/8 路由,所以从RouterB 上Ping不通RouterA的以太网口3.3.3.3 。

但是为何在A上可以Ping 通2.2.2.2 呢?同样是没有回程路由啊?

打开路由器上的IP报文调试开关发现,原来从RouterA上发出的ICMP报文的源地址填写的是1.1.1.1而不是3.3.3.3。

由于两台路由器的s0口处于同一网段,所以响应报文可以顺利到达RouterB。

建议和总结:

A能够Ping通B则B一定能够Ping通A(不考虑防火墙的因素),这句话的对错取决于A和B到底是指主机还是指路由器。

如果是指两台主机,那么这句话就是正确的。

如果是指两台路由器那就是错误的,因为路由器通常会有多个IP地址。

现在就有如下问题:当从一台路由器上执行Ping命令它发出的ICMP Echo报文的源地址究竟选择哪一个呢?

实际情况是路由器选择发出报文的接口的IP地址。

0 人点赞