网络诊断工具Ping详解

1,985 阅读7分钟

ping定义:

ping是工作在「TCP/IP」网络体系结构中应用层的一个计算机网络工具,用来测试数据包能否通过IP协议到达特定主机。

ping的运作原理是向目标主机传出一个ICMP的请求回显数据包(ICMP的TYPE为8),并等待接收回显回应数据包(ICMP的TYPE为0)。程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延,Round-trip delay time)。

由于ping是使用ICMP协议来实现的,所以接下来我们就详细了解一下ICMP。

ICMP协议介绍

ICMP就是互联网控制报文协议,网络包在复杂的网络环境传输时,常常遇到各种各样的问题。当遇到问题的时候,会返回具体的原因。

所以ICMP的功能主要有两种,确认IP包是否成功到底目标地址,通知在发送过程中IP被丢弃的原因。

image.png

ICMP报文是封装在IP包里的,一个ICMP报文包括IP报头,ICMP报头和ICMP报文,若IP报头中的协议字段为1时,说明是一个ICMP报文。

  • 类型:占一个字节,标识ICMP报文的类型,不同类型有不同的代码,它有分为两大类,一类为差错报文,一类为查询报文。

  • 代码:与类型字段一起标识ICMP报文的详细类型。

  • 校验和:检验报文在传输过程中是否出现差错,和IP报头中的校验和是一样的。

类型、代码对应关系

typecode说明
00回显应答(ping 应答)
30网络不可达
31主机不可达
32协议不可达
33端口不可达
34需要进行分片,但设置不分片位
35源站选路失败
36目的网络未知
37目的主机未知
39目的网络被强制禁止
310目的主机被强制禁止
311由于服务类型 TOS,网络不可达
312由于服务类型 TOS,主机不可达
313由于过滤,通信被强制禁止
314主机越权
315优先中止失效
40源端被关闭(基本流控制)
50对网络重定向
51对主机重定向
52对服务类型和网络重定向
53对服务类型和主机重定向
80回显请求(ping 请求)
90路由器通告
100路由器请求
110传输期间生存时间为 0
111在数据报组装期间生存时间为 0
120坏的 IP 首部
121缺少必需的选项
130时间戳请求
140时间戳应答
170地址掩码请求
180地址掩码应答

查询报文类型

ping就是查询报文,一种主动的请求,并且获得主动应答的ICMP协议。ping发起请求命令,会发送一个ICMP Echo Request给对端,请求得到回复,就叫ICMP Echo Reply,它对比原生的ICMP,多了两个字段,一个是标识符,一个是序号。并且ping命令会统计响应时间和TTL(生存周期)来计算往还时间,说明路程的长短。

假定我们在一个子网内,主机A的IP为192.168.6.1,主机B的IP为192.168.6.2,在主机A运行ping 192.168.6.2

  1. ping命令执行的时候,源主机会构建一个ICMP请求的数据包。里头有两个重要的字段,就是我们前面说的标识符和序号,对于请求数据包而言该字段的类型为8(回送请求),另一个就是顺序号,区分连续ping的时候发出的多个数据包,每发出一个请求数据包,顺序号会自动加1,并且会在报文的数据部分插入发送时间。

  2. ICMP协议将这个数据包连同192.168.6.2交给IP层,IP层将会以192.168.6.2作为目标地址,本机IP地址作为源地址,还有一些控制信息构建为一个IP数据包

  3. 加入MAC头,先判断一下是不是在一个子网内,如果是就在ARP映射表中查找IP地址192.168.6.2对应的MAC地址,则可以直接使用。如果没有,就要发送ARP协议查询MAC地址,获取MAC地址后。构建一个数据帧在附加上一些控制信息,依据以太网的介质访问规则,将数据包发送出去。

  4. 192.168.6.2收到这个数据帧后,检查下MAC目标地址,和本机的MAC地址对比,符合就接收,不符丢弃。检查该数据帧,将IP数据包从帧中提取出来,交给本机IP层,IP层检查完后,有用信息提取后交给ICMP协议。

  5. 192.168.6.2收到后,会构建一个ICMP应答包,应答的类型字段为0,顺序号为接收到的请求包的序号,发给主机192.168.6.1

  6. 在规定时限内,源主机也就是192.168.6.1没有接到ICMP的应答包,就说明目标主机不可达,如果接收到ICM应答包,则说明目标主机可达。然后检查当前时刻减去该数据最初从源主机发出的时刻,也就是ICMP数据包的时间延迟。

注意:有很多中间设备都是禁止ping的,并不是说网络不通。这个时候我们就要使用其他协议来检查网络是否通畅,如telnet等

差错报文类型

这是ICMP协议的另一个报文种类,差错报文中常用的类型主要有5种。终点不可达、端口不可达,源点抑制,超时,参数问题,改变路由(重定向)

  1. 假定主机A给主机B发送一个邮件,网络传输中要经过很多台路由器,若R1接到邮件后,发生了故障,不知道下一步该发给哪个路由设备或那台主机设备,这封邮件也就没法到达主机B,这时路由R1就会把数据包丢弃并向主机A发回一个终点不可达的数据报文。这时数据报文,类型为「3」,表示是不可达的错误类型。

  2. 目标系统收到一个IP数据报某个服务请求时,本地没有此服务,会向源头返回ICMP端口不可达信息,类型为「3」。

  3. 假定主机A给主机B发送一个视频,主机A传输非常快,主机B接收慢的话,可能导致数据都拥塞在某一台设备上,这台设备解决不了拥塞问题,会给源主机发送一个源点抑制报文反馈给源主机,告诉源主机数据拥塞了,在发送就会丢数据,告诉他放慢发送数据。类型为「4」。

  4. 如果超过网络包生存周期还是没到,就是超时,主机A给主机B发送一个数据报文时,该数据报文在网络会有一个TTL生存时间字段,没经过一台路由,TTL字段就会减1,路由器收到数据报文后TTL字段值减1后为0的话,该路由器就会把数据包丢弃并向主机A发送一个ICMP超时报文,类型为「11」。

  5. 当路由器后目标追收到数据报的首部中有的字段值不正确时,就会丢弃数据报,向源点发送参数问题的报文,类型为「12」

  6. 路由器改变路由报文发送给主机,让主机知道下次应将数据报文发送给另外的路由器。类型为「5」

另外,ping工具使用ICMP协议,Traceroute也是使用ICMP实现的网络检测跟踪工具,主要使用ICMP差错报文及TTL的方式,后续详细说明