PING 工作原理
一、什么是 PING 是
DOS 命令,一般用于检测网络通与不通 ,也叫时延,其值越大,速度越慢 PING (Packet Internet Grope),因特网包探索器,用于测试网络连接量的程序。Ping 发 送一个 ICMP 回声请求消息给目的地并报告是否收到所希望的 ICMP 回声应答。
它是用来检查网络是否通畅或者网络连接速度的命令。 作为一个生活在网络上的管理员或 者黑客来说,ping 命令是第一个必须掌握的 DOS 命令,它所利用的原理是这样的:网络上 的机器都有唯一确定的 IP 地址,我们给目标 IP 地址发送一个数据包,对方就要返回一个同 样大小的数据包, 根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机 的操作系统等。
Ping 是 Windows 系列自带的一个可执行命令。利用它可以检查网络是否能够连通,用 好它可以很好地帮助我们分析判定网络故障。应用格式:Ping IP 地址。该命令还可以加许 多参数使用,具体是键入 Ping 按回车即可看到详细说明。ping 指的是端对端连通,通常用 来作为可用性的检查, 但是某些病毒木马会强行大量远程执行 ping 命令抢占你的网络资 源,导致系统变慢,网速变慢。严禁 ping 入侵作为大多数防火墙的一个基本功能提供给用 户进行选择。通常的情况下你如果不用作服务器或者进行网络测试,可以放心的选中它,保 护你的电脑
二、PING的工作流程 我们以下面一个网络为例:有 A、B、C、D 四台机子,一台路由 RA,子网掩码均为 255.255.255.0,默认路由为 192.168.0.1 [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 测试
1.Ping 本机IP
例如本机 IP 地址为:172.168.200.2。则执行命令 Ping 172.168.200.2。如果网卡安装配 置没有问题,则应有类似下列显示: Replay from 172.168.200.2 bytes=32 time<10ms Ping statistics for 172.168.200.2 Packets Sent=4 Received=4 Lost=0 0% loss Approximate round trip times in milli-seconds Minimum=0ms Maxiumu=1ms Average=0ms 如果在 MS-DOS 方式下执行此命令显示内容为:Request timed out,则表明网卡安装或 配置有问题。将网线断开再次执行此命令,如果显示正常,则说明本机使用的 IP 地址可能 与另一台正在使用的机器 IP 地址重复了。如果仍然不正常,则表明本机网卡安装或配置有 问题,需继续检查相关网络配置。
2.Ping 网关 IP
假定网关 IP 为:172.168.6.1,则执行命令 Ping 172.168.6.1。在 MS-DOS 方式下执行此 命令,如果显示类似以下信息: Reply from 172.168.6.1 bytes=32 time=9ms TTL=255 Ping statistics for 172.168.6.1 Packets Sent=4 Received=4 Lost=0 Approximate round trip times in milli-seconds Minimum=1ms Maximum=9ms Average=5ms 则表明局域网中的网关路由器正在正常运行。反之,则说明网关有问题。
3.Ping 远程
IP 这一命令可以检测本机能否正常访问 Internet。比如江苏电信运营商的 IP 地址为: 202.102.48.141。在 MS-DOS 方式下执行命令:Ping 202.102.48.141,如果屏幕显示:
Reply from 202.102.48.141 bytes=32 time=33ms TTL=252
Reply from 202.102.48.141 bytes=32 time=21ms TTL=252
Reply from 202.102.48.141 bytes=32 time=5ms TTL=252
Reply from 202.102.48.141 bytes=32 time=6ms TTL=252
Ping statistics for 202.102.48.141
Packets Sent=4 Received=4 Lost=0 0% loss
Approximate round trip times in milli-seconds
Minimum=5ms Maximum=33ms Average=16ms
则表明运行正常,能够正常接入互联网。反之,则表明主机文件(windows/host)存在问 题。
对于 Windows 下 ping 命令相信大家已经再熟悉不过了,但是能把 ping 的功能发挥到最 大的人却并不是很多,当然我也并不是说我可以让 ping 发挥最大的功能,我也只不过经常 用 ping 这个工具,也总结了一些小经验,现在和大家分享一下。
此参数没有什么其他技巧。
ping 命令的其他技巧: 在一般情况下还可以通过 ping 对方让对方返回给你的 TTL 值大小, 粗略的判断目标主机的系统类型是Windows 系列还是 UNIX/Linux 系列,一般情况下Windows 系列的系统返回的 TTL 值在 100-130 之间,UNIX/Linux 系列的系统返回的 TTL 而 值在 240-255 之间,当然 TTL 的值在对方的主机里是可以修改的,Windows 系列的系统可 以通过修改注册表以下键值实现:
[HKEY_LOCAL_MACHINE\sys tem\CurrentControlSet\Services\Tcpip\ Parameters]
"DefaultTTL"=dword:000000ff
255---FF
128---80
64----40
32----20
Ping 是个使用频率极高的网络诊断程序, 用于确定本地主机是否能与另一台主机交换 (发 送与接收)数据报。根据返回的信息,你就可以推断 TCP/IP 参数是否设置得正确以及运行 是否正常。 需要注意的是: 成功地与另一台主机进行一次或两次数据报交换并不表示 TCP/IP 配置就是正确的,你必须执行大量的本地主机与远程主机的数据报交换,才能确信 TCP/IP 的正确性。
===============================================
Ping 的返回信息有"Request Timed Out"、"Destination Net Unreachable"和"Bad IP address"还有"Source quench received"。
"Request Timed Out"这个信息表示对方主机可以到达到 TIME OUT,这种情况通常是为 对方拒绝接收你发给它的数据包造成数据包丢失。 大多数的原因可能是对方装有防火墙或已 下线。
"Destination Net Unreachable"这个信息表示对方主机不存在或者没有跟对方建立连接。 这里要说明一下"destination host unreachable"和"time out"的区别,如果所经过的路由器的 路由表中具有到达目标的路由,而目标因为其它原因不可到达,这时候会出现"time out", 如果路由表中连到达目标的路由都没有,那就会出现"destination host unreachable"。
"Bad IP address" 这个信息表示你可能没有连接到 DNS 服务器所以无法解析这个 IP 地 址,也可能是 IP 地址不存在。
"Source quench received"信息比较特殊,它出现的机率很少。它表示对方或中途的服务 器繁忙无法回应。
===============================================
怎样使用 Ping 这命令来测试网络连通呢?
连通问题是由许多原因引起的,如本地配置错误、远程主机协议失效等,当然还包括设备 等造成的故障。
首先我们讲一下使用 Ping 命令的步骤。
使用 Ping 检查连通性有六个步骤:
1. 使用 ipconfig /all 观察本地网络设置是否正确;
2. Ping 127.0.0.1,127.0.0.1 回送地址 Ping 回送地址是为了检查本地的 TCP/IP 协议有 没有设置好;
3. Ping 本机 IP 地址,这样是为了检查本机的 IP 地址是否设置有误;
4. Ping 本网网关或本网 IP 地址,这样的是为了检查硬件设备是否有问题,也可以检查本 机与本地网络连接是否正常;(在非局域网中这一步骤可以忽略)
5.Ping 本地 DNS 地址,这样做是为了检查 DNS 是否能够将 IP。
6.Ping 远程 IP 地址,这主要是检查本网或本机与外部的连接是否正常。
===============================================
在检查网络连通的过程中可能出现一些错误,这些错误总的来说分为两种最常见。
1. Request Timed Out "request time out"这提示除了在《PING(一)》提到的对方可能装有防火墙或已关机以 外,还有就是本机的 IP 不正确和网关设置错误。
①、IP 不正确: IP 不正确主要是 IP 地址设置错误或 IP 地址冲突, 这可以利用 ipconfig /all 这命令来检查。 在 WIN2000 下 IP 冲突的情况很少发生,因为系统会自动检测在网络中是否有相同的 IP 地 址并提醒你是否设置正确。在 NT 中不但会出现"request time out"这提示而且会出现 "Hardware error"这提示信息比较特殊不要给它的提示所迷惑。
②、网关设置错误:这个错误可能会在第四个步骤出现。网关设置错误主要是网关地址设 置不正确或网关没有帮你转发数据,还有就是可能远程网关失效。这里主要是在你 Ping 外 部网络地址时出错。错误表现为无法 Ping 外部主机返回信息"Request timeout"。
2. Destination Host Unreachable
当你在开始 PING 网络计算机时如果网络设备出错它返回信息会提示"destination host unreachable"。如果局域网中使用 DHCP 分配 IP 时,而碰巧 DHCP 失效,这时使用 PING 命令就会产生此错误。 因为在 DHCP 失效时客户机无法分配到 IP 系统只有自设 IP, 它往往 会设为不同子网的 IP。所以会出现"Destination Host Unreachable"。另外子网掩码设置错 误也会出现这错误。
还有一个比较特殊就是路由返回错误信息, 它一般都会在"Destination Host Unreachable" 前加上 IP 地址说明哪个路由不能到达目标主机。 这说明你的机器与外部网络连接没有问题, 但与某台主机连接存在问题。
五、PING 的各类反馈信息 Request timed out[1]
a.对方已关机, 或者网络上根本没有这个地址: 比如在上图中主机 A 中 PING 192.168.0.7 , 或者主机 B 关机了,在主机 A 中 PING 192.168.0.5 都会得到超时的信息。
b.对方与自己不在同一网段内,通过路由也无法找到对方,但有时对方确实是存在的,当 然不存在也是返回超时的信息。
c.对方确实存在,但设置了 ICMP 数据包过滤(比如防火墙设置) 怎样知道对方是存在,还是不存在呢,可以用带参数 -a的 Ping 命令探测对方,如果能 得到对方的 NETBIOS 名称,则说明对方是存在的,是有防火墙设置,如果得不到,多半是 对方不存在或关机,或不在同一网段内。
d.错误设置 IP 地址 正常情况下,一台主机应该有一个网卡,一个 IP 地址,或多个网卡,多个 IP 地址(这些 地址一定要处于不同的 IP 子网)。但如果一台电脑的“拨号网络适配器”(相当于一块软网 卡)的 TCP/IP 设置中,设置了一个与网卡 IP 地址处于同一子网的 IP 地址,这样,在 IP 层协议看来,这台主机就有两个不同的接口处于同一网段内。当从这台主机 Ping 其他的机 器时,会存在这样的问题:
A.主机不知道将数据包发到哪个网络接口,因为有两个网络接口都连接在同一网段。
B.主机不知道用哪个地址作为数据包的源地址。因此,从这台主机去 Ping 其他机器,IP 层协议会无法处理,超时后,Ping 就会给出一个“超时无应答”的错误信息提示。但从其他 主机 Ping 这台主机时,请求包从特定的网卡来,ICMP 只须简单地将目的、源地址互换, 并更改一些标志即可,ICMP 应答包能顺利发出,其他主机也就能成功 Ping 通这台机器了。
Destination host Unreachable
对方与自己不在同一网段内,而自己又未设置默认的路由,比如上例中 A 机中不设定默 认的路由,运行 Ping 192.168.0.1.4 就会出现“Destination host Unreachable”。
网线出了故障
这里要说明一下“destination host unreachable”和 “time out”的区别,如果所经过的路由 器的路由表中具有到达目标的路由,而目标因为其他原因不可到达,这时候会出现“time out”,如果路由表中连到达目标的路由都没有,那就会出现“destination host unreachable”。
Bad IP address
这个信息表示您可能没有连接到 DNS 服务器,所以无法解析这个 IP 地址,也可能是 IP 地址不存在。
Source quench received 这个信息比较特殊,它出现的机率很少。它表示对方或中途的服务器繁忙无法回应。
Unknown host——不知名主机 这种出错信息的意思是,该远程主机的名字不能被域名服务器(DNS)转换成 IP 地址。 故障原因可能是域名服务器有故障, 或者其名字不正确, 或者网络管理员的系统与远程主机 之间的通信线路有故障。
No answer——无响应 这种故障说明本地系统有一条通向中心主机的路由, 但却接收不到它发给该中心主机的任 何信息。故障原因可能是下列之一:中心主机没有工作;本地或中心主机网络配置不正确; 本地或中心的路由器没有工作;通信线路有故障;中心主机存在路由选择问题。
Ping 127.0.0.1:127.0.0.1 是本地循环地址
如果本地址无法 Ping 通,则表明本地机 TCP/IP 协议不能正常工作。
no rout to host:网卡工作不正常。
transmit failed,error code:10043 网卡驱动不正常。
unknown host name:DNS 配置不正确。
ping UNIX 命令
用途
发送一个回送信号请求给网络主机。
语法
ping [ -d] [ -D ] [ -n ] [ -q ] [ -r] [ -v] [ \ -R ] [ -a addr_family ] [ -c Count ] [ -w timeout ] [ -f | -i \ Wait ] [ -l Preload ] [ -p Pattern ] [ -s PacketSize ] [ -S hostname/IP addr ] \ [ -L ] [ - I a.b.c.d. ] [ -o interface ] [ -T ttl ] Host [ PacketSize ] \ [ Count ]
描述 /usr/sbin/ping 命令发送一个因特网控制报文协议(ICMP) ECHO_REQUEST 去从主机 或网关那里获得 ICMP ECHO_RESPONSE 信号。
ping 命令用于:
* 确定网络和各外部主机的状态。
* 跟踪和隔离硬件和软件问题。
* 测试、评估和管理网络。
如果主机正在运行并连在网上, 它就对回送信号进行响应。 每个回送信号请求包含一个网 际协议(IP)和 ICMP 头,后面紧跟一个timeval 结构,以及来填写这个信息包的足够的 字节。缺省情况是连续发送回送信号请求直到接收到中断信号(Ctrl-C)。
ping 命令每秒发送一个数据报并且为每个接收到的响应打印一行输出。 ping 命令计算信 号往返时间和(信息)包丢失情况的统计信息,并且在完成之后显示一个简要总结。ping 命 令在程序超时或当接收到 SIGINT 信号时结束。 Host 参数或者是一个有效的主机名或者是 因特网地址。
缺省情况下,ping 命令将连续发送回送信号请求到显示器直到接收到中断信号(Ctrl-C).中断键可以使用 stty 命令来更改。
由于连续回送信号请求会对系统造成一定的负载,重复的请求信号应当主要用作问题隔 离。
标志
-c Count 指定要被发送(或接收)的回送信号请求的数目,由 Count 变量指出。
-w timeout 这个选项仅和 -c 选项一起才能起作用。 它使 ping 命令以最长的超时时间去 等待应答(发送最后一个信息包后)。
-d 开始套接字级别的调试。
-D 这个选项引起 ICMP ECHO_REPLY 信息包向标准输出的十六进制转储。
-f 指定 flood-ping 选项。
-f 标志“倾倒”或输出信息包,在它们回来时或每秒 100 次, 选择较快一个。每一次发送 ECHO_REQUEST,都打印一个句号,而每接收到一个 ECHO_REPLY 信号,就打印一个退格。这就提供了一种对多少信息包被丢弃的信息的快 速显示。仅仅 root 用户可以使用这个选项。
注: 这在网络上将非常困难,必须小心使用。Flood ping 命令仅仅 root 用户可以使用。 -f 标志与 -i Wait 标志不兼容。
-I a.b.c.d 指定被 a.b.c.d 标明的接口将被用于向外的 IPv4 多点广播。-I 标志是大写的 i 。
-o interface 指出 interface 将被用于向外的 IPv6 多点广播。 接口以 “en0”, “tr0”等的形 式指定。
-i Wait 在每个信息包发送之间等待被 Wait 变量指定的时间(秒数)。缺省值是在每个 信息包发送之间等待 1 秒。这个选项与 -f 标志不兼容。
-L 对多点广播 ping 命令禁用本地回送。
-l Preload 在进入正常行为模式(每秒 1 个)前尽快发送 Preload 变量指定数量的信息 包。-l 标志是小写的 L。
-n 指定仅输出数字。不企图去查寻主机地址的符号名。
-p Pattern 指定用多达 16 个“填充”字节去填充你发送的信息包。这有利于诊断网络上依 赖数据的问题。例如,-p ff 全部用 1 填充信息包。
-q 指定静默输出。除了在启动和结束时显示总结行外什么也不显示。
-r 忽略路由表直接送到连接的网络上的主机上。如果 主机 不在一个直接连接的网络上, ping 命令将产生一个错误消息。这个选项可以被用来通过一个不再有路由经过的接口去 ping 一个本地主机。
-R 指定记录路由选项。-R 标志包括 ECHO_REQUEST 信息包中的 RECORD_ROUTE 选项,并且显示返回信息包上的路由缓冲。
注: IP 头仅仅大到适合 9 个这样的路由。而且,许多主机和网关忽略这个选项。
-a addr_family 映射 ICMP 信息包的目的地址到 IPv6 格式,如果 addr_family 等于 “inet6”的话。
-s PacketSize 指定要发送数据的字节数。缺省值是 56,当和 8 字节的 ICMP 头数据 合并时被转换成 64 字节的 ICMP 数据。
-S hostname/IP addr 将 IP 地址用作发出的 ping 信息包中的源地址。在具有不止一个 IP 地址的主机上,可以使用 -S 标志来强制源地址为除了软件包在其上发送的接口的 IP 地址外的任何地址。如果 IP 地址不是以下机器接口地址之一,则返回错误并且不进行任何 发送。
-T ttl 指定多点广播信息包的生存时间为 ttl 秒。 -v 请求详细输出,其中列出了除回送信号响应外接收到的 ICMP 信息。
参数
PacketSize 指定了要发送数据的字节数。缺省值是 56,当和 8 字节的 ICMP 头数据 合并时被转换成 64 字节的 ICMP 数据。包含这个参数是为了和以前的 ping 命令版本相 兼容。
Count 指定了要发送(接收)的回送信号请求的数目。包含这个参数是为了和 以前的 ping 命令版本相兼容。