关于ping你了解多少

简介:

我们在平时的处理网络故障中,可能或多或少都会用到ping这个命令,但可多人都只是简单了解ping一个ip地址看看通还是没有通,至于为什么不同及其返回的信息则没有做深入的探究,那么我们今天就好好说下。

提到ping就不能不说起ICMP协议,ICMP全称是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP协议是一种面向连接的协议,用于传输出错报告控制信息。它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。ICMP提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据报。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。 icmp是一种报告错误而不是纠正错误理解只一点很重要。下面我们看下icmp类型

 

 

我们主要说的是echo request  和echo reply 这两个信息,我们在ping一个ip地址时首先我们的主机会发送一个echo request 报文,在我们的目标主机收到请求后会发送一个echo reply 的报文,只有这两个报文都通了也就是说到达各自的主机时,我们才可以ping通对方。关于类型3目标地址不可达,我们在我们的局域网上ping一个不存在的ip地址时,我们的主机会首先发送一个echo request 报文 ,但由于网络中不存在那个ping的ip地址也就没有ip响应echo reply 报文,这是我们的主机就会受到一个目标地址不可达的信息。类型5时关于路由重定向的,我们举个例子,一台主机连接2个路由到外网,假如我们的主机默认网关指向r1,我们的主机流量会通过r1到达外网,现在我们要访问一个192.0.23.5 这个主机web服务器时,我们的主机会首先到达网关路由r1这是路由r1发现到达192.0.23.5这个web服务器路由r2是最佳路径,这是路由r1会发送一个重定向报文,主机在受到报文后就会走r2这个路径到达192.0.23.5web服务器。有一点强调的是重定向只针对源,不针对中间路由。

现在该说说我们的ping了,我们发现有时候我们在ping一个地址时,有时时目标地址不可达有时候则是timeout也就是超时了,那么这两个之间有什么区别?1.首先我们说超时的问题,有超时说明对方无法接受发送过来的数据。当然这种情况下,很可能就是网络出现了故障,但并不能就因此而确定网络一定不通。因为它还有可能是其它原因造成的。原因有以下几点:1. 主机不在线  2.防火墙拦截(中途防火墙)  3.IP安全策略限制(本地防火墙) 4.网关设置错误 这种情况主要出现在Ping外部网络地址时才出现。因为当网关设置错误时,Ping发出的数据包无法经网关进行转发。因此需要检查本机的网关设置以及远程网关的配置是否正确。2. 出现“Destination Host Unreachable”错误信息时表示对方主机不存在或者没有跟对方建立连接。看起来好像与“Request Timed Out”差不多,但两者却有关本质的区别。如果Ping命令所发出的数据包经过路由器,并经路由表到达目标的路由,但是因为其它原因(例如防火墙拦截等)导致不可达,那么就是“Request Timed Out”的提示了;相反如果路由表中没有到达目标的路由信息,那么就会出现“Destination Host Unreachable”。3.Unknown host  这样的原因一般是DNS无法解析的问题。

下面我们在说ping和trace 不同,我们先回顾下ping原理 :发送的是一个echo request包,类型为 8 0,当被ping者接到相关icmp包的时候,根据实际情况,逻辑是,就发回 reply 0 0,逻辑否,则根据具体情况发出一些其他的信息,总结起来的说,是看目的是否能及时的把icmp reply包送回到源,一当路径上的某个节点把reply包给deny掉了,就肯定ping不通了.而trace 理解为hop by hop的ping,但这个ping和上面讲的ping不一样,这个ping和我们的ping命令不同,traceroute包发出去后,途经的每个站点都会发回一个 类型代码为11 0的icmp 包回去,到了终点,才回发送一个代码为3 3的icmp包回到源.

我们在来看下2者在debug 中的区别

ping   :Sending 5, 100-byte ICMP Echos to 192.168.100.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 36/51/68 ms
R4(config)#
*Mar  1 00:03:20.579: IP: tableid=0, s=172.16.14.2 (local), d=192.168.100.1 (Serial1/0), routed via FIB
*Mar  1 00:03:20.583: IP: s=172.16.14.2 (local), d=192.168.100.1 (Serial1/0), len 100, sending
*Mar  1 00:03:20.587:     ICMP type=8, code=0
*Mar  1 00:03:20.639: IP: tableid=0, s=192.168.100.1 (Serial1/0), d=172.16.14.2 (Serial1/0), routed via RIB
*Mar  1 00:03:20.643: IP: s=192.168.100.1 (Serial1/0), d=172.16.14.2 (Serial1/0), len 100, rcvd 3
*Mar  1 00:03:20.647:     ICMP type=0, code=0

我们可以看出我们的源主机首先发送了一个request的报文IICMP type=8, code=0, 目的主机回了个relay报文 ICMP type=0, code=0  结果ping通了

他不通的啥样那 我们在看下

 

 R4(config)#do ping 192.168.100.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.100.2, timeout is 2 seconds:

*Mar  1 00:25:15.735: IP: tableid=0, s=172.16.14.2 (local), d=192.168.100.2 (Serial1/0), routed via FIB
*Mar  1 00:25:15.735: IP: s=172.16.14.2 (local), d=192.168.100.2 (Serial1/0), len 100, sending
*Mar  1 00:25:15.735:     ICMP type=8, code=0.:没有回复relay的报文ping不通

R4(config)#do tracer 192.168.100.2

Type escape sequence to abort.
Tracing the route to

*Mar  1 00:47:11.567: IP: tableid=0, s=172.16.14.2 (local), d=192.168.100.2 (Serial1/0), routed via FIB
*Mar  1 00:47:11.571: IP: s=172.16.14.2 (local), d=192.168.100.2 (Serial1/0), len 28, sending
*Mar  1 00:47:11.571:     UDP src=49234, dst=33434
*Mar  1 00:47:11.599: IP: tableid=0, s=172.16.14.1 (Serial1/0), d=172.16.14.2 (Serial1/0), routed via RIB
*Mar  1 00:47:11.603: IP: s=172.16.14.1 (Serial1/0), d=172.16.14.2 (Serial1/0), len 56, rcvd 3
*Mar  1 00:47:11.607:     ICMP type=11, code=0
*Mar  1 00:47:20.643: IP: tableid=0, s=172.16.14.2 (local), d=192.168.100.2 (Serial1/0), routed via FIB
*Mar  1 00:47:20.643: IP: s=172.16.14.2 (local), d=192.168.100.2 (Serial1/0), len 28, sending
*Mar  1 00:47:20.647:     UDP src=49235, dst=33435
*Mar  1 00:47:20.707: IP: tableid=0, s=172.16.14.1 (Serial1/0), d=172.16.14.2 (Serial1/0), routed via RIB
*Mar  1 00:47:20.711: IP: s=172.16.14.1 (Serial1/0), d=172.16.14.2 (Serial1/0), len 56, rcvd 3
*Mar  1 00:47:20.715:     ICMP type=11, code=0
*Mar  1 00:47:20.719: IP: tableid=0, s=172.16.14.2 (local), d=192.168.100.2 (Serial1/0), routed via FIB
*Mar  1 00:47:20.723: IP: s=172.16.14.2 (local), d=192.168.100.2 (Serial1/0), len 28, sending
*Mar  1 00:47:20.723:     UDP src=49236, dst=33436
*Mar  1 00:47:20.767: IP: tableid=0, s=172.16.14.1 (Serial1/0), d=172.16.14.2 (Serial1/0), routed via RIB
*Mar  1 00:47:20.771: IP: s=172.16.14.1 (Serial1/0), d=172.16.14.2 (Serial1/0), len 56, rcvd 3
*Mar  1 00:47:20.775:     ICMP type=11, code=0

 *Mar  1 00:47:20.783: IP: tableid=0, s=172.16.14.2 (local), d=192.168.100.2 (Serial1/0), routed via FIB
*Mar  1 00:47:20.787: IP: s=172.16.14.2 (local), d=192.168.100.2 (Serial1/0), len 28, sending
*Mar  1 00:47:20.791:     UDP src=49237, dst=33437
*Mar  1 00:47:20.867: IP: tableid=0, s=172.16.123.2 (Serial1/0), d=172.16.14.2 (Serial1/0), routed via RIB
*Mar  1 00:47:20.871: IP: s=172.16.123.2 (Serial1/0), d=172.16.14.2 (Serial1/0), len 56, rcvd 3
*Mar  1 00:47:20.875:     ICMP type=3, code=3
*Mar  1 00:47:26.903: IP: s=192.168.100.4 (Loopback0), d=255.255.255.255, len 71, unroutable
*Mar  1 00:47:26.903:     UDP src=57768, dst=53172.16.123.2 
*Mar  1 00:47:29.907: IP: tableid=0, s=172.16.14.2 (local), d=192.168.100.2 (Serial1/0), routed via FIB
*Mar  1 00:47:29.907: IP: s=172.16.14.2 (local), d=192.168.100.2 (Serial1/0), len 28, sending
*Mar  1 00:47:29.911:     UDP src=49238, dst=33438
*Mar  1 00:47:29.987: IP: tableid=0, s=172.16.123.2 (Serial1/0), d=172.16.14.2 (Serial1/0), routed via RIB
*Mar  1 00:47:29.991: IP: s=172.16.123.2 (Serial1/0), d=172.16.14.2 (Serial1/0), len 56, rcvd 3
*Mar  1 00:47:29.995:     ICMP type=3, code=3

发现trace时hop next hop  的每经过一个路由发送回来一个回复报文。

 补充点:·ping 127.0.0.1

  这个Ping命令被送到本地计算机的IP软件,该命令永不退出该计算机。如果没有做到这一点,就表示TCP/IP的安装或运行存在某些最基本的问题。

  ·ping 本机IP

  这个命令被送到我们计算机所配置的IP地址,我们的计算机始终都应该对该Ping命令作出应答,如果没有,则表示本地配置或安装存在问题。出现此问题时,局域网用户请断开网络电缆,然后重新发送该命令。如果网线断开后本命令正确,则表示另一台计算机可能配置了相同的IP地址。 

·ping 局域网内其他IP

这个命令应该离开我们的计算机,经过网卡及网络电缆到达其他计算机,再返回。收到回送应答表明本地网络中的网卡和载体运行正确。但如果收到0个回送应答,那么表示子网掩码(进行子网分割时,将IP地址的网络部分与主机部分分开的代码)不正确或网卡配置错误或电缆系统有问题。

·ping 网关IP

这个命令如果应答正确,表示局域网中的网关路由器正在运行并能够作出应答。

·ping 远程IP

如果收到4个应答,表示成功的使用了缺省网关。对于拨号上网用户则表示能够成功的访问Internet(但不排除ISP的DNS会有问题)。

·ping localhost

localhost是个作系统的网络保留名,它是127.0.0.1的别名,每台计算机都应该能够将该名字转换成该地址。如果没有做到这一带内,则表示主机文件(/Windows/host)中存在问题。

ok  结束!



本文转自q狼的诱惑 51CTO博客,原文链接:http://blog.51cto.com/liangrui/454381,如需转载请自行联系原作者

相关文章
|
域名解析 网络协议 Linux
解决Linux环境中ping域名ping不通,ping ip地址可以ping通问题
解决Linux环境中ping域名ping不通,ping ip地址可以ping通问题
解决Linux环境中ping域名ping不通,ping ip地址可以ping通问题
|
6月前
|
监控 网络协议 Linux
telnet和ping区别
telnet和ping区别
157 0
|
9月前
|
NoSQL Redis
PING
PING
59 0
|
网络协议 Windows
快速排除故障命令除了 ping 还有 tracert
快速排除故障命令除了 ping 还有 tracert
262 0
快速排除故障命令除了 ping 还有 tracert
|
Windows
ping命令使用技巧(一次Ping多个地址)
打开windows 命令行 窗口, 在命令行输入以下命令: for /l %i in (1,1,255) do ping -n 1  -w 60 192.168.0.%i  | find "Reply" >>d:\pingall.
3463 0
|
网络架构
ping
关于网关的Misc 两台计算机, 可以ping通呢? 1. 通过网关 2. 在网关中有一个路由表, 在该表中, 有一条一条的NextStep的记录, 记录了目标地址为什么就走那一条记录 3. 网关都会先拿自己的IP地址与发过来的请求报文匹配, 如果匹配成功就响应 4.
956 0
|
Linux 网络架构 Windows