摘要:在测试和部署网络通信应用时,我们经常会遇到网络不通的问题,一般都会想到ping一下。本文将带您了解ping命令的作用和原理~
在测试和部署网络通信应用时,我们经常会遇到网络不通的问题。一般都会想到ping一下。那么ping命令的作用和原理到底是什么呢?
ping 命令是基于 ICMP 协议来工作的,要明白ping, 先了解下ICMP协议吧~
ICMP协议ICMP全称为互联网控制报文协议(Internet Control Message Protocol)。
那么具体是怎么“控制”的呢?
在复杂的网络传输环境里,数据包常常会遇到各种问题导致传输失败。网络层的IP协议是一种无连接的,不可靠的数据包协议,它并不能保证数据一定被送达,因此,我们需要其它的协议,在数据包传发送异常时,能将异常信息传回来,这样才可以调整传输策略,以此来控制整个局面。
ICMP协议格式ICMP 协议是通过IP协议来发送的,报文封装在 IP 包里面。如下:
ICMP报文格式:
ICMP数据包由8bit的类型字段和8bit的代码字段以及16bit的校验字段再加上选项数据组成。
ICMP报文大致分为两类:查询报文类型和差错报文类型。
查询报文类型查询报文主要应用于ping查询、子网掩码查询、时间戳查询等。
ping命令其实就是对ICMP协议查询报文类型的使用。
主机A ping 主机B时,ping命令在主机A构建ICMP请求数据包时,ICMP的类型字段为8(回送请求),当主机B构建ICMP请求数据包时,ICMP的类型字段为0(回送应答)。如果主机A在一定时间内收到了主机B的应答,则表明两台主机之间网络是可达的。
差错报文类型差错报文主要产生于数据传送发送错误的时候,包括:目标不可达(网络不可达、主机不可达、协议不可达、端口不可达、禁止分片等)、超时、参数问题、重定向(网络重定向、主机重定向等)等。
IP 路由器无法将 IP 数据包发送给目标地址时,会给发送端主机返回一个目标不可达的 ICMP 消息,并在这个消息中显示不可达的具体原因,原因记录在 ICMP 包头的代码字段。
ping命令的工作过程举一个例子来描述「ping」命令的工作过程:
假设有两个主机,主机A(192.168.0.1)和主机B(192.168.0.2),现在我们要监测主机A和主机B之间网络是否可达,
在主机A上输入命令:ping 192.168.0.2
1)发送端主机构建ICMP请求数据包。ping命令会在主机A上构建一个 ICMP的请求数据包。数据包包含多个字段,主要的有类型和序号。
类型:在请求数据包中,类型字段为8;
序号:主要用于区分连续 ping 的时候发出的多个数据包。
每发出一个请求数据包,序号会自动加 1。为了能够计算往返时间 RTT,它会在报文的数据部分插入发送时间。