ping命令详解

Ping命令是对两个TCP/IP系统连通性进行测试的基本工具,目的是为了测试目标主机是否可达。它利用ICMP回显请求(80)和回显应答(00)报文,而不用经过传输层(TCP/UDP)。Ping服务器一般在内核中实现ICMP的功能,Ping只有在安装了TCP/IP协议以后才可以使用。

Ping命令结构
我们称发送回显请求的 Ping 程序为客户,被 Ping 的主机为服务器。
ICMP 回显请求和回显应答报文:
Ping 命令的类型值为 8 0 ,代码值为 0
标识符: Unix 系统在实现 Ping 程序时把 ICMP 报文中的标识符字段设置成发送进程的 ID 号。这样可以区分多个 Ping 实例。
序列号:从 0 开始,每发送一次新的回显请求就加 1 。通过 Ping 程序打印出返回的每个分组的序列号来查看是否有分组丢失,失序或重复。
Ping 程序通过在 ICMP 报文数据中存放发送请求的时间值来计算往返时间。当应答返回时,用当前时间减去存放在 ICMP 报文中的时间值,即是往返时间。
ICMP 回显请求和回显应答的时间差在 4ms 以下。
 
IP记录路由选项
Ping 程序提供了查看 IP 记录路由选项的功能。 Ping 程序提供 -R 选项来记录路由。它使 Ping 程序在发送出去的 IP 数据报中设置 IP RR 选项(该 IP 数据报包含 ICMP 回显请求报文)。这样,每个处理该数据报的路由器都把它的 IP 地址放入选项字段中。当数据报到达目的端时, IP 地址清单复制到 ICMP 回显应答中。这样返回途中所经过的路由器也被加入到清单中。当 Ping 程序收到回显应答时,它就打印出这份 IP 地址清单。
IP 记录路由选项的缺点:
IP 首部中只有有限的空间来存放 IP 地址。 IP 首部中的首部字段长度是 4bit ,因此整个 IP 首部最长只能有 15 32bit 长的字(即 60 个字节)。由于 IP 首部固定长度为 20 字节, RR 选项用去 3 个字节,还剩下 40-3=37 个字节用来存放 IP 地址清单,即 37/4=9 IP 地址。对于现在的网络中,记录的容量是十分有限的。
IP 数据报中的 RR 选项的一般格式:
Code 1 个字节。指明 IP 选项的类型。 RR 选项的类型是 7
Len :是 RR 选项总字段长度。 Ping 程序一般情况都设置成最大长度 39 字节,最多可记录 9 IP 地址。
Ptr :基于 1 的指针字段,指向存放下一个 IP 地址的位置。它的最小值为 4 ,指向存放第一个 IP 地址的位置。随着每个 IP 地址存入清单, ptr 的值分别为 8 12 16… 最大到 36 。当记录下 9 IP 地址后, ptr 的值为 40 ,表示清单已满。
当路由器在清单中记录 IP 地址时记录的是出站 IP 地址。当回显应答到达源主机时候,源主机将自己的出口地址也加入清单中。
 
IP时间戳选项
IP 时间戳选项与记录路由选项类似。 IP 时间戳选项的格式:
时间戳选项的代码为 0x44 。其他两个字段 len ptr 与记录路由选项相同:选项的总长度(一般为 36 40 )和指向下一个可用空间的指针( 5 9 13 等)
OF 字段表示溢出字段, FL 字段表示标志字段。时间戳选项的操作根据标志字段进行。
 

标志
描述
0
只记录时间戳
1
记录经过的每台路由器的 IP 地址和时间戳,在选项列表中只有存放 4 对地址和时间戳的空间
3
发送端对选项列表进行初始化,存放了 4 IP 地址和 4 个取值为 0 的时间戳值。只有当列表中的下一个 IP 地址与当前路由器地址相匹配时,才记录它的时间戳。

 
如果路由器由于没有空间而不能增加时间戳选项,那么它将增加溢出字段的值。
如果要同时记录 IP 地址和时间戳(标志位为 1 ),那么就可以同时存入其中的四对值。只记录时间戳是没有意义的。因为没有标明时间戳与路由器之间的对应关系。
 
扩展Ping命令
 
-t  
不停的 ping 目的主机,直到按下 Control-C 中断。  此功能没有什么特别的技巧,不过可以配合其他参数使用。
 
-a  
解析目的主机的计算机名。
C:/D-Lab>ping -a 192.168.1.23
Pinging practice.dlab.com [192.168.1.23] with 32 bytes of data:
Reply from 192.168.1.23: bytes=32 time<10ms TTL=254
Reply from 192.168.1.23: bytes=32 time<10ms TTL=254
Reply from 192.168.1.23: bytes=32 time<10ms TTL=254
Reply from 192.168.1.23: bytes=32 time<10ms TTL=254
Ping statistics for 192.168.1.21:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
//IP 192.168.1.21 的主机名为 practice.dlab.com
 
-n  
发送指定的 Echo 数据包数。
在默认情况下,一般只发送四个数据包。通过 -n 选项可以定义发送的个数,对衡量网络速度很有帮助。比如想测试发送 35 个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过以下获知:
C:/D-Lab>ping -n 35 211.17.216.134
Pinging 211.17.216.134 with 32 bytes of data:
Reply from 211.17.216.134: bytes=32 time=50ms TTL=241
Reply from 211.17.216.134: bytes=32 time=50ms TTL=241
Reply from 211.17.216.134: bytes=32 time=50ms TTL=241
Request timed out.
………………
Reply from 211.17.216.134: bytes=32 time=50ms TTL=241
Reply from 211.17.216.134: bytes=32 time=50ms TTL=241
Ping statistics for 211.17.216.134:
Packets: Sent = 50, Received = 48, Lost = 2 (4% loss),
Approximate round trip times in milli-seconds:
Minimum = 40ms, Maximum = 51ms, Average = 46ms
由上可知发向目的主机 211.17.216.134 35 个数据包的当中,返回了 48 个,其中有两个由于未知原因丢失。这 48 个数据包当中返回速度最快为 40ms ,最慢为 51ms ,平均速度为 46ms
 
-l  
定义 echo 数据包大小。
在默认的情况下 windows 下的 ping 发送的数据包大小为 32byte ,也可以通过 -L 选项定义它的大小,但上限只能发送 65500byte 。由于 Windows 系统的安全漏洞,当向对方一次发送的数据包大于或等于 65532 时,对方就很有可能 down 掉。
C:/D-Lab>ping -l 65500 -t 192.168.25.123    // 不停的向 IP 192.168.25.123 发送大小为 65500 字节的数据包,此命令带有攻击性。
Pinging 192.168.25.123 with 65500 bytes of data:
Reply from 192.168.25.123: bytes=65500 time<10ms TTL=254
Reply from 192.168.25.123: bytes=65500 time<10ms TTL=254
………………
这种攻击的后果是使目的主机网络资源枯竭,各种服务被中断。
 
-f  
在数据包中发送“不要分段”标志。
一般所发送的数据包都会通过路由分段再发送给对方,加上此参数以后路由就不会再对发送的数据包进行分段处理。
带有 -f 选项的 ping 是一种快速 ping 。使得 ping 发出的数据包速度和数据包从远程主机返回一样快,或者更快,达到每秒 100 次。在这种方式下,每个请求用一个句点表示,对于每一个响应打印一个空格键。
 
-i  
指定 TTL 值在对方的系统里停留的时间。 此参数同样是帮助检查网络运转情况的。
 
-v  
将“服务类型”字段设置为 tos 指定的值。
 
-r  
在“记录路由”字段中记录发出和返回数据包的路由。指定的 count 值最小是 1 ,最大是 9
在一般情况下你发送的数据包是通过一个个路由才到达目的。通过此参数就可以设定想探测经过的路由的个数,不过限制数为 9 个,也就是说只能跟踪到最多 9 个路由。
C:/D-Lab>ping -n 1 -r 9 202.96.105.101    // 发送一个数据包,记录 9 个路由
Pinging 202.96.105.101 with 32 bytes of data:
Reply from 202.96.105.101: bytes=32 time=10ms TTL=249
Route: 202.107.208.187 ->
202.107.210.214 ->
61.153.112.70 ->
61.153.112.89 ->
202.96.105.149 ->
202.96.105.97 ->
202.96.105.101 ->
202.96.105.150 ->
61.153.112.90
Ping statistics for 202.96.105.101:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 10ms, Maximum = 10ms, Average = 10ms
 
-s  
指定 count 指定的路由和对应的时间戳。 此参数和 -r 类似,只是这个参数不记录数据包返回所经过的路由,最多只能记录 4 个。
 
-j
宽松的源站选路(路由稀疏源)。利用 computer-list 指定的主机列表路由数据包。在路经列表中的主机之间可以经过其它未在列表上的主机。 IP 允许的最大数量为 9
 
-k
严格的源站选路(路由严格源)。利用 computer-list 指定的计算机列表路由数据包。在路经列表中的主机之间不可以经过其它未在列表上的主机。 IP 允许的最大数量为 9
 
-w
指定超时间隔,单位为毫秒。
 
 
判断目标主机系统
可以通过 ping 回显应答的 TTL 值大小,粗略的判断目标主机的系统类型是 Windows 还是 UNIX/Linux 。一般情况下 Windows 系统返回的 TTL 值在 100-130 之间,而 UNIX/Linux 系统返回的 TTL 值在 240-255 之间。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ping命令用于测试网络连接是否正常,可以通过向目标主机发送ICMP请求并等待响应来判断网络是否连通。下面是ping命令的输出详解: 1. 输出的第一行:PING 主机名(IP地址) 数据包大小 字节数=数据包大小,ttl 生存时间 例如:PING google.com (172.217.11.78) 56(84) bytes of data.,其中: - google.com:主机名,也可以是IP地址。 - (172.217.11.78):主机的IP地址。 - 56(84) bytes of data.:每个ICMP数据包的大小,这里表示发送的数据包大小为56字节,加上8字节的ICMP头部共计64字节。 - ttl:生存时间,表示每个数据包在网络中传输的最大跳数,通常为64。 2. 输出的第二行:来自 主机名(IP地址) 的回复: 字节大小=数据包大小 时间=往返时间ms TTL=生存时间 例如:64 bytes from 172.217.11.78: icmp_seq=1 ttl=116 time=21.9 ms,其中: - 64 bytes from 172.217.11.78:表示接收到的数据包大小。 - icmp_seq=1:ICMP序列号,用于标识发送的数据包,每发送一个数据包,序列号加1。 - ttl=116:生存时间,表示数据包在网络中的跳数,每经过一个路由器,该值减1,如果该值为0,则数据包被丢弃。 - time=21.9 ms:往返时间,表示从发送数据包到接收到响应的时间,单位为毫秒。 3. 输出的第三行:来自 主机名(IP地址) 的回复: 字节大小=数据包大小 时间=往返时间ms TTL=生存时间 同第二行。 4. 输出的第四行:来自 主机名(IP地址) 的回复: 字节大小=数据包大小 时间=往返时间ms TTL=生存时间 同第二行。 5. 输出的第五行:来自 主机名(IP地址) 的回复: 字节大小=数据包大小 时间=往返时间ms TTL=生存时间 同第二行。 6. 输出的第六行:统计信息 例如:--- google.com ping statistics ---,其中: - ---:表示分隔符。 - google.com ping statistics:表示ping的统计信息。 - ---:表示分隔符。 - 4 packets transmitted:发送的数据包数量。 - 4 packets received:接收到的数据包数量。 - 0% packet loss:数据包丢失率,表示发送的数据包中有多少个数据包没有接收到,一般情况下应该是0%。 - time 3000ms:总共的时间,单位为毫秒。 - rtt min/avg/max/mdev = 20.872/22.338/24.253/1.054 ms:往返时间的最小值、平均值、最大值和标准差,单位为毫秒。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值