ping 的作用:通过 ICMP 回显数据包发送到远端设备并侦听回显数据包来验证与一台或多台远端设备的连接性。该命令只在安装了 TCP/IP 协议后才可以使用。
关于 ping 的协议:ping 包属于 ICMP 协议,ICMP 协议是没有端口号的,所以在防火墙设置的时候不像其他的程序或协议有对应的端口号可以设置。
在哪里使用 ping:Windows 系统的话,开始-运行-cmd,在命令行窗口中就可以使用。Linux 系统中我不知道怎么用,请 Google。
ping 命令详解
用法:
ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] target_name
在 CMD 窗口输入 ping /?,回车,也可看到 ping 命令帮助,如上。
参数详解:
-t:ping 指定的计算机直到手动中断。ctrl+c 中断 ping。中断普通的 ping 过程也是 ctrl+c.
-a:将地址解析为计算机名。例:c:\>ping -a 127.0.0.1
pinging china-hacker [127.0.0.1] with 32 bytes of data:(china-hacker 就是他的计算机名)
reply from 127.0.0.1: bytes=32 time<10ms ttl=128
reply from 127.0.0.1: bytes=32 time<10ms ttl=128
reply from 127.0.0.1: bytes=32 time<10ms ttl=128
reply from 127.0.0.1: bytes=32 time<10ms ttl=128ping statistics for 127.0.0.1:packets: sent = 4, received = 4, lost = 0 (0% loss),approximate round trip times in milli-seconds:minimum = 0ms, maximum = 0ms, average = 0ms
-n count:发送 count 指定的 echo 数据包数。默认值为 4。
-l size:发送包含由 size 指定的数据量的 echo 数据包。默认为 32 字节;最大值是 65,527。
-f:在数据包中发送 「不要分段」 标志。数据包就不会被路由上的网关分段。
-i TTL:将 「生存时间」 字段设置为 ttl 指定的值。
-v TOS:将 「服务类型」 字段设置为 tos 指定的值。
-r count:在 「记录路由」 字段中记录传出和返回数据包的路由。count 可以指定最少 1 台,最多 9 台计算机。
-s count:指定 count 指定的跃点数的时间戳。
-j host-list:利用 host-list 指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)ip 允许的最大数量为 9。
-k host-list:利用 host-list 指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)ip 允许的最大数量为 9。
-w timeout:指定超时间隔,单位为毫秒。
target-name:指定要 ping 的远程计算机。
ping 的后台执行过程
就以这样一个网络作为例子:假设有 A、B、C、D 四台机器,一台路由 RA,子网掩码均为 255.255.255.0,默认网关是 192.168.0.1。
1. 同一网段
我们来看一下在 A 主机上执行 「Ping 192.168.0.5」 后,都发生了些什么。首先,Ping 会通知系统建立一个固定格式的 ICMP 请求数据包,然后由 ICMP 协议打包这个数据包和地址 「192.168.0.5」 转交给 IP 层协议(一组后台运行的进程,与 ICMP 类似),IP 层协议将以地址 「192.168.0.5」 作为目的地址,本机 IP 地址作为源地址,加上一些其他的控制信息,构建一个 IP 数据包,并想办法得到 192.168.0.5 的 MAC 地址(物理地址,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),以便交给数据链路层构建一个数据帧。关键就在这里,IP 层协议通过机器 B 的 IP 地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络内查找这台机器的 MAC,如果以前两机有过通信,在 A 机的 ARP 缓存表应该有 B 机 IP 与其 MAC 的映射关系,如果没有,就发一个 ARP 请求广播,得到 B 机的 MAC,一并交给数据链路层。后者构建一个数据帧,目的地址是 IP 层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
主机 B 收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将 IP 数据包从帧中提取出来,交给本机的 IP 层协议。同样,IP 层检查后,将有用的信息提取后交给 ICMP 协议,后者处理后,马上构建一个 ICMP 应答包,发送给主机 A,其过程和主机 A 发送 ICMP 请求包到主机 B 一模一样。2. 不同网段
在主机 A 上执行 「Ping 192.168.1.4」 后,开始跟上面一样,到了怎样得到 MAC 地址时,IP 协议通过计算发现 D 机与自己不在同一网段内,就直接将交由路由处理,也就是将路由的 MAC 取过来,至于怎样得到路由的 MAC,跟上面一样,先在 ARP 缓存表找,找不到可以利用广播。路由得到这个数据帧后,再跟主机 D 进行联系,如果找不到,就向主机 A 返回一个超时的信息。
ping 结果分析
ping 的结果分两种,正常的结果,表明连接性良好,如下:
Pinging 202.105.136.105 with 32 bytes of data:
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114Ping statistics for 202.105.136.105:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 590ms, Maximum = 601ms, Average = 593ms
还有就是不正常的结果,也就是说设备之间的连接性不好。这些结果有:
- Request Timed Out
- Destination Net Unreachable
- Bad IP address
- Source quench received
- Unknown host
- No answer
- no rout to host
- transmit failed,error code:10043
- unknown host name
一般我们常遇到的是前四种情况。
参考资料
- ping 命令后台执行过程及返回信息详解:http://article.wxiu.com/wxjs/network/200902/06-4764.html 这篇文章说的比较详细
- ping 命令详解:http://blog.csdn.net/mathewsking/archive/2009/01/06/3721337.aspx 这篇文章中说到了如何利用 ping 来测试网络的连通性。
- ping 结果中的 TTL 是什么意思:http://www.hinn.cn/2007/05/ping_ttl.html