课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
相信大家一般在遇到网络问题的时候,大部分都是先通过ping一下的功能来查看网络状况。下面我们就一起来了解一下,ping命令的作用和类型都有哪些。
一、「ping」命令的作用和原理?
简单来说,「ping」是用来探测本机与网络中另一主机之间是否可达的命令,如果两台主机之间ping不通,则表明这两台主机不能建立起连接。ping是定位网络通不通的一个重要手段。
ping命令是基于ICMP协议来工作的,「ICMP」全称为Internet控制报文协议(InternetControlMessageProtocol)。ping命令会发送一份ICMP回显请求报文给目标主机,并等待目标主机返回ICMP回显应答。因为ICMP协议会要求目标主机在收到消息之后,必须返回ICMP应答消息给源主机,如果源主机在一定时间内收到了目标主机的应答,则表明两台主机之间网络是可达的。
举一个例子来描述「ping」命令的工作过程:
假设有两个主机,主机A(192.168.0.1)和主机B(192.168.0.2),现在我们要监测主机A和主机B之间网络是否可达,那么我们在主机A上输入命令:ping192.168.0.2
此时,ping命令会在主机A上构建一个ICMP的请求数据包(数据包里的内容后面再详述),然后ICMP协议会将这个数据包以及目标IP(192.168.0.2)等信息一同交给IP层协议。
IP层协议得到这些信息后,将源地址(即本机IP)、目标地址(即目标IP:192.168.0.2)、再加上一些其它的控制信息,构建成一个IP数据包。
IP数据包构建完成后,还不够,还需要加上MAC地址,因此,还需要通过ARP映射表找出目标IP所对应的MAC地址。当拿到了目标主机的MAC地址和本机MAC后,一并交给数据链路层,组装成一个数据帧,依据以太网的介质访问规则,将它们传送出出去。
当主机B收到这个数据帧之后,会先检查它的目标MAC地址是不是本机,如果是就接收下来处理,接收之后会检查这个数据帧,将数据帧中的IP数据包取出来,交给本机的IP层协议,然后IP层协议检查完之后,再将ICMP数据包取出来交给ICMP协议处理,当这一步也处理完成之后,就会构建一个ICMP应答数据包,回发给主机A
在一定的时间内,如果主机A收到了应答包,则说明它与主机B之间网络可达,如果没有收到,则说明网络不可达。除了监测是否可达以外,还可以利用应答时间和发起时间之间的差值,计算出数据包的延迟耗时。
通过ping的流程可以发现,ICMP协议是这个过程的基础,是非常重要的,因此下面就把ICMP协议再详细解释一下。
ICMP协议大致可分为两类:
查询报文类型
差错报文类型
1、查询报文类型:
查询报文主要应用于:ping查询、子网掩码查询、时间戳查询等等。
上面讲到的ping命令的流程其实就对应ICMP协议查询报文类型的一种使用。在主机A构建ICMP请求数据包的时候,其ICMP的类型字段中使用的是8(回送请求),当主机B构建ICMP应答包的时候,其ICMP类型字段就使用的是0(回送应答),更多类型值参考上表。
对查询报文类型的理解可参考一下文章开始讲的ping流程,这里就不做赘述。
2、差错报文类型:
差错报文主要产生于当数据传送发送错误的时候。
它包括:目标不可达(网络不可达、主机不可达、协议不可达、端口不可达、禁止分片等)、超时、参数问题、重定向(网络重定向、主机重定向等)等等。
差错报文通常包含了引起错误的IP数据包的一个分片的IP部,加上该分片数据部分的前8个字节。
当传送IP数据包发生错误的时候(例如主机不可达),ICMP协议就会把错误信息封包,然后传送回源主机,那么源主机就知道该怎么处理了。
那是不是只有遇到错误的时候才能使用差错报文类型呢?也不一定。
Traceroute就是一个例外,Traceroute是用来侦测源主机到目标主机之间所经过路由情况的常用工具。Traceroute的原理就是利用ICMP的规则,制造一些错误的事件出来,然后根据错误的事件来评估网络路由情况。
作者:奎哥
节选:公众号:不止思考
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。