Ping简介
Ping是排除设备访问故障的常见方法。它使用Internet控制消息协议ICMP(Internet Control Message Protocol)确定以下内容:
-
远程设备是否处于可访问状态。
-
访问远程设备时是否丢失报文。
-
本端与远程设备之间通信的往返延迟。
点链接跳转查看往期文章:
【案例分享】配置DHCP Snooping防止DHCP Server仿冒者攻击
Ping实现过程
现在以一个实例来说明Ping的实现过程。
如图1所示,PC1想要Ping通PC2,即Ping 11.1.1.2。
图8-12Ping的实现过程
- PC1的Ping程序生成一个ICMP请求报文。
-
-
ICMP报文沿协议栈向下传输到IP层,封装IP头,包含源地址IP与目的地址IP。在此封装过程中,IP层已经根据IP地址和掩码判断出了源IP与目的IP不属于同一网段。
-
ICMP报文再向下传到链路层,准备进行以太帧头的封装,但由于无法知道目的MAC地址,暂时无法进行封装。
-
由于已经知道了源IP与目的IP不属于同一网段,故PC1要查找FIB表,找自己的下一跳。
-
如果PC1没找到下一跳,则得不到下一跳的IP,也得不到下一跳的MAC地址,以太帧头无法进行封装,于是PC1就Ping不通PC2。
-
如果PC1找到了下一跳,得到了下一跳的IP,但此时还不知道下一跳的MAC地址,故PC1要发送ARP广播请求。
-
-
下一跳(Device a口 10.1.1.2/24)收到此请求以后,发现请求所对应的IP地址是自己,于是回复一个ARP单播应答给PC1,此应答包含了10.1.1.2/24所对应的MAC地址。
-
PC1此时已经收到ARP应答,得到了下一跳的MAC地址,进行以太帧头的封装,然后将数据报发送给Device。当PC1向Device发送ARP请求时,将自己的IP地址到物理地址的映射写入ARP请求中。当Device收到PC1的ARP请求后,Device就将PC1的这一映射写入到了自己的ARP缓存中。这是因为以后很可能Deviceh也要向PC1进行数据传送,为了以后彼此通信的方便,避免总是发送ARP请求及应答,减少网络上的通信。
-
Device收到数据报文后,剥掉以太帧头,上送到IP层,发现IP首部中的目的IP地址11.1.1.2/24不是自己,需要转发,故查找自己的路由表,重新进行数据报文的封装。当封装到以太帧头时,发现目的MAC地址(11.1.1.2/24对应的MAC地址)未知,故Device也要发送ARP广播请求。
-
PC2收到此请求以后,发现请求所对应的IP地址是自己,于是回复一个ARP单播应答给Device,此应答包含了11.1.1.2/24所对应的MAC地址。与前面Device学习PC1的ARP映射一样,PC2也相应地在自己的ARP缓存中记录了Device b口的IP地址到物理地址的映射。
-
Device此时已经收到ARP应答,得到了PC2的MAC地址,进行以太帧头的封装。然后将数据报发送给PC2。
-
PC2收到此数据报文后,拆封以太帧头,拆封IP首部后发现是个ICMP请求报文,于是会回复一个ICMP应答报文给PC1。此时的源IP地址变成了PC2的IP地址11.1.1.2/24,目的IP地址变成了PC1的IP地址10.1.1.1/24。由于目的IP与源IP不在同一网段,所以PC2也要查找FIB表,经查找得知下一跳为Device b口 11.1.1.1/24。如前所述,PC2的ARP缓存中已经记录了Device b口的映射信息,故不需要再向Device发送ARP请求,直接在ARP缓存中读到Device 11.1.1.1/24的MAC地址进行封装,将数据报发给Device。同理Device也不需要向PC1发送ARP请求,直接在自己的ARP缓存中读到PC1的MAC地址,将数据报文转发给PC1。
-
PC1收到数据报文后,逐层拆封以太帧头、IP首部,得到ICMP应答报文,显示Ping通。
Ping命令格式
Ping命令的参数非常的丰富,用户可以依据检测目的、网络类型、当前网络状况等因素选择不同的参数。
ping [ ip ] [ -a source-ip-address | -c count | -d | { -f | ignore-mtu } | -h ttl-value | -nexthop nexthop-ip-address | -i interface-type interface-number | -m time | -n | -name | -p pattern | -q | -r | { -s packetsize | -range [min min-size | max max-size | step step-size ]*} | -system-time | -t timeout | -tos tos-value | -v | -vpn-instance vpn-instance-name ] *host [ ip-forwarding]
表8-3Ping命令参数解释
|-----------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
| 参数 | 参数说明 | 取值 |
| ip | 使用IPv4协议。不指定该参数时,也表示使用IPv4协议。 | - |
| -a source-ip-address | 指定发送ICMP Echo Request报文的源IP地址。 如果不指定源IP地址,将采用出接口的IP地址作为ICMP Echo Request报文发送的源地址。 | 点分十进制形式。 |
| -c count | 指定发送ICMP Echo Request报文次数。 ping 命令每发送一个ICMP Echo Request报文,顺序号就加1,顺序号从1开始,缺省情况下发送5个ICMP Echo Request报文,也可以通过命令行参数count设置发送ICMP Echo Request报文的个数。 当网络质量不高时,可以增加发送报文数目,通过丢包率来检测网络质量。 | 整数形式,取值范围是1~4294967295,缺省值是5。 |
| -d | 设置socket为debug模式。 | 缺省为非debug模式。 |
| -f | 设置报文发送的过程中不分片。 说明: 使用-f参数后,ICMP报文将不会被分片,如果ICMP报文的大小超过链路的MTU值,ICMP报文将会被丢弃。可以通过不使用-f参数或者增大链路MTU值的方式使ICMP报文不被丢弃。 | - |
| -h ttl-value | 指定TTL的值。 报文在转发过程中,如果TTL字段的值减为0,报文到达的三层设备就会向源端发送ICMP超时报文,表明远程设备不可达。 | 整数形式,取值范围是1~255。缺省值是255。 |
| -nexthop nexthop-ip-address | 指定下一跳IP地址。 指定该参数后,ICMP Echo Request报文在发送前不再查找路由表,而是直接发送。可用于排除路由表项不正确而导致的Ping不通问题。 | 点分十进制格式。 |
| i interface-type interface-number | 设置发送ICMP Echo Request报文的接口。 | - |
| -m time | 指定发送下一个ICMP请求报文的等待时间。 Ping 发送ICMP Echo Request报文后等待应答(reply),缺省等待500毫秒后发送下一个ICMP Echo Request报文。可以通过time参数配置发送时间间隔。在网络状况较差情况下,不建议此参数取值小于500毫秒。 | 整数形式,取值范围是1~10000,单位毫秒。缺省值是500。 |
| -n | 将host参数直接作为IP地址,而不需作域名解析。 | - |
| -name | 显示目的地址的主机名。 | - |
| -p pattern | 指定ICMP Echo Request报文填充字节。 可以通过配置ICMP Echo Request报文的填充字节,便于故障定位人员从大量ICMP Echo Reply报文后识别出某类报文。 | 16进制整数,取值范围是0~FFFFFFFF。缺省情况下,填充方式为从0x01开始,依次递增。 |
| -q | 指定只显示统计信息。 ping命令指定此参数后,系统只显示发送、接收报文数、报文丢失率、最小返回时间、平均返回时间和最大返回时间。 | 缺省情况下,显示全部信息。 |
| -r | 指定记录路由。 如果指定记录路由,在IP报文传送过程中,在IP包到达三层路由设备后,经过的每一个三层设备都把它的IP地址放入选项字段中。当数据报到达目的端时,所经过的IP地址都应该复制到ICMP回显应答中,并且返回途中所经过的三层设备地址也要被加入到回应的IP报文中。当Ping程序收到回显应答时,它就可以显示出经过的三层设备的IP地址。 | 缺省情况下,不记录路由。 |
| -s packetsize | 指定Echo Request报文的长度(不包括IP和ICMP报文头)。 | 整数形式,取值范围是20~9600,单位是字节。缺省报文长度是56字节。 |
| -range | 设置Echo Request报文净荷长度的范围及变化步长。当需要发送可变长度的Echo Request报文时,可以配置该参数。 | 如果不指定-range,发送报文的长度是-s packetsize。缺省值是56。如果指定-range,发送的第一个报文的长度是min min-size,后续报文长度按照步长step step-size递增,直到报文长度达到最大值max max-size。缺省情况下,长度范围是56~9600,步长是1。 |
| min min-size | 设置Echo Request报文净荷长度的最小值。 | 整数形式,取值范围是20~9600,单位是字节。缺省值是56。 |
| max max-size | 设置Echo Request报文净荷长度的最大值。 | 整数形式,取值范围是20~9600,单位是字节。缺省值是9600。 |
| step step-size | 设置报文长度变化的步长。 | 整数形式,取值范围是1~1000,单位是字节。缺省值是1。 |
| -system-time | 显示报文发送时的系统时间。 | - |
| -t timeout | 指定发送完ICMP Echo Request后,等待ICMP Echo Reply的超时时间。 ping 命令会发送ICMP Echo Request报文到某个地址,然后等待应答(reply),当ICMP Echo Request报文到达目标地址以后,在一个有效的时间内(timeout之前)返回ICMP Echo Reply给源地址,则说明目的地可达。如在有效时间内,没有收到回应,则在发送端显示超时。 正常情况下,发送完ICMP Echo Request后会在1~10秒内收到应答(reply)。当网络传输速率较慢时,可以使用此参数加大ICMP ECHO_REQUEST报文的响应超时时间。 | 整数形式,取值范围是0~65535,单位是毫秒。缺省超时时间是2000毫秒。 |
| -tos tos-value | 指定发送ICMP Echo Request报文的ToS值。通过设置ToS值,配置ICMP报文的优先级别。 | 整数形式,取值范围是0~255。缺省值是0。 |
| -v | 如果不指定**-v**,系统只显示本用户收到ICMP ECHO-REPLY报文。 如果指定**-v**,系统会显示设备收到的所有ICMP ECHO-REPLY报文。 | - |
| -vpn-instance vpn-instance-name | VPN实例名。 | 字符串形式,区分大小写,不支持空格,长度范围是1~31。当输入的字符串两端使用双引号时,可在字符串中输入空格。 |
| ignore-mtu | 忽略接口发送包的最大传输单元。 | - |
| host | 目的主机的域名或IP地址。 | 字符串形式主机名,不支持空格,区分大小写,长度范围是1~255,当输入的字符串两端使用双引号时,可在字符串中输入空格。或者合法的点分十进制IPv4地址。 |
| ip-forwarding | 指定头节点强制走IP。 | - |
END
微思网络,始于2002年
专业IT认证培训22年,面向全国招生!
微思-主要课程有:
*网络技术:华为HCIA/ HCIP/HCIE;思科CCNA/CCNP/CCIE
*Linux技术:红帽 RHCE/RHCA
*K8S&容器:CKA/CKS
*数据库:ORACLE OCP/ OCM ;MySQL ;达梦数据库
*虚拟化:VMware VCP/VCAP
*安全认证:CISP体系/CISSP/ CISA;CCSK;CISAW体系
*管理类:PMP 项目管理;软考中/高项;ITIL体系;Togaf
其他课程如:ACP;Azure...