PING (Packe InterNet Groper,因特网包探索器),是一个用于测试网络连接量的程序 。该命令通过向特定的目标主机发送 ICMP(Internet Control Message Protocol ,因特网报文控制协议)Echo 请求报文,测试目标是否可达及了解其有关状态 。
一、原理
类型(十进制) | 内容 | Content |
---|---|---|
0 | 回送应答 | Echo Reply |
3 | 目标不可达 | Destination Unreachable |
4 | 原点抑制 | Source Quench |
5 | 重定向或改变路由 | Redirect |
8 | 回送请求 | Echo Request |
9 | 路由器公告 | Router Advertisement |
10 | 路由器请求 | Router Solicitation |
11 | 超时 | Time Exceeded |
17 | 地址子网请求 | Address Mask Request |
18 | 地址子网应答 | Address Mask Reply |
1、测试主机向目标主机发送一个【ICMP】报文,其类型字段值为8(回送请求);
2、如若途中未出现异常则目标返回类型字段值为0(回送应答)的ICMP报文,说明这台主机存在;
如图中所示,源地址:192.168.31.253首先向目的地址192.168.31.1发送Echo Request数据包,在收到信息后目的地址再向源地址发送Echo Reply数据包,以示响应,因为ping命令默认发送包的数量为4,所以共计四组请求响应报文。
3、如果遇到被路由丢弃,目标主机不回应或者传输失败等情况,将返回类型字段值为11(超时)的【ICMP】报文。
二、功能
1、验证网络的连通性
2、统计响应时间和【TTL】
TTL(Time To Live,生存周期):每经过一次路由该值自减1,直至减到0时该IP包会被丢弃。通过这样的设置可以在路由遇到死循环时,避免IP包在环内不停转发,但不能达到目的地。
对环回地址测试:
以域名为参数进行ping测试:
域名可以通过向本地DNS缓存读取或者向更高节点的DNS服务器申请解析成其对应的IP地址。
使用【nslookup】命令查看【baidu.com】对应的IP:
由上图所示,【baidu.com】对应的公网IP为220.181.38.148 & 39.156.69.79,通过这两个IP均能连接至百度搜索引擎Web端。
对已查询到的公网IP进行直接PING测试:
注意:PING使用的是ICMP报文,上层协议是IP,其是应用层直接使用网络层的一个例子,没有经过传输层的TCP或UDP。
命令详解:
使用命令 + /?来查询该命令的详细用法和说明。
1、参数 –t
通常情况下,ping命令仅发送4个数据包进行连通性测试,使用【-t】可以不间断的持续ping 目标主机。
按下ctrl +space可以暂停发送,按下enter回车可以继续;按下ctrl +c可以停止。
由于网络波动的原因,会造成时间在一定范围内起伏,但在网络畅通的情况下一般不会有较大影响。
2、参数 -a
通过【–a】参数可以将IP地址解析为主机名。用法:ping -a [ip]
主机名就是计算机的名字(计算机名),网上邻居就是根据主机名来识别的,这个名字可以随时更改,从我的电脑属性的计算机名就可更改。 用户登陆时候用的是操作系统的个人用户帐号,这个也可以更改,从控制面板的用户界面里改就可以了。这个用户名和计算机名无关。
以下演示步骤均在无线局域网内实现。
可以看出局域网内192.168.31.1和192.168.31.253的主机名分别为“XiaoQiang”和“DESKTOP-RMED9GN”。
3、参数 -n
通过【–n】参数可以发送指定数量的Echo数据包,可以通过计算来衡量网络速率及波动性。
由于测试主机使用无线网卡,可以看出网络波动较大。
4、参数 -l
用法:ping -l [自定义包大小] [ip]
默认情况下,每个包的大小是32byte 。 通过使用【-l】来自定义所的测试数据包的大小。
5、参数 -f
将IP数据包中的FLAG字段值默认为000,使用该命令将的DF字段置为1,禁止分片操作,若超过MTU规定大小,则发送失败,并显示“需要拆分数据包但是设置 DF”字样。
保留位(无效)① | DF ② | MF ③ |
---|---|---|
0 | 0 | 0 |
比特(位置) | 含义 |
---|---|
0 | 未使用,但必须为0 |
1 | DF(don't fragment):指示是否分片,默认为0(可以分片),置为1则不能分片 |
2 | MF(more fragment):包在分片情况下,表示是否为最后一个包,0表示为最后一个分片的包,反之 |
一般情况下发送的数据包都会通过路由分段再发送给对方,加上此参数以后路由就不会再分段处理;在接收数据的主机没有足够资源来重组片段的情况下,这可以用来禁止分片。
6、参数 -i
通过使用该参数可以设置源地址(发送端)发送的PING包的TTL值。
TTL通常表示包在被丢弃前最多能经过的路由器个数。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。、
如下所示,表示从当前主机访问域名baidu.com在20跳(hop)内可以完成。
D:\>ping baidu.com -i 20
正在 Ping baidu.com [220.181.38.148] 具有 32 字节的数据:
来自 220.181.38.148 的回复: 字节=32 时间=52ms TTL=51
来自 220.181.38.148 的回复: 字节=32 时间=52ms TTL=51
来自 220.181.38.148 的回复: 字节=32 时间=52ms TTL=51
来自 220.181.38.148 的回复: 字节=32 时间=52ms TTL=51
220.181.38.148 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 52ms,最长 = 52ms,平均 = 52ms
ping baidu.com -i 5
正在 Ping baidu.com [220.181.38.148] 具有 32 字节的数据:
来自 202.97.107.185 的回复: TTL 传输中过期。
来自 202.97.107.185 的回复: TTL 传输中过期。
来自 202.97.107.185 的回复: TTL 传输中过期。
来自 202.97.107.185 的回复: TTL 传输中过期。
220.181.38.148 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
ping baidu.com -i 6
正在 Ping baidu.com [220.181.38.148] 具有 32 字节的数据:
来自 202.97.107.185 的回复: TTL 传输中过期。
来自 202.97.107.185 的回复: TTL 传输中过期。
来自 202.97.107.185 的回复: TTL 传输中过期。
来自 202.97.107.185 的回复: TTL 传输中过期。
220.181.38.148 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
通过抓包分析可以看出,当前主机192.168.31.253尝试以TTL值分别为5和6向域名baidu.com所对应的公网IP:220.181.38.148发送回送请求,但在经过节点202.97.107.185和36.110.248.10时TTL值耗尽,未能达到目标地址,当前所在节点向数据包中的源地址回送类型(type)为11,代码(code)为0,意为网络不可达的超时报文。
7 、参数 -v
使用方法:ping -v [num] [ip]
num有效范围为【0,255】
该参数原使用于修改IP报文中的TOS(区分服务)值,用来表明服务质量。该值通常取决于应用,但是在符合质量要求的情况下按其要求发送本身的功能实现起来十分困难,若因不符合质量要求也会产生不公平的现象。因此实现TOS控制极其困难。
比特位 | 含义 |
---|---|
0、1、2 | 优先度 |
3 | 最低延迟 |
4 | 最大吞吐 |
5 | 最大可靠性 |
6 | 最小代价 |
3~6 | 最大安全 |
7 | 未定义 |
TOS现以被分为两个部分,前六位为DSCP(差分服务代码点,进行质量控制),后两位为ECN(显示拥塞通告,报告网络拥堵情况)。故“-v”参数已废除。
8 、参数 -r count
-r参数提供记录路由的功能,PING包经过的每一个路由都会把其自身的IP地址放入选项(options)字段中,每个IP占4个字节。除去IP头部固定的20个字节还剩下长度为40的选项部分,其中Type,Length,Pointer各占一个字节,剩余字节为37,共能存放9个IP地址。