简单来说,「ping」是用来探测本机与网络中另一主机之间是否可达的命令,如果两台主机之间 ping 不通,则表明这两台主机不能建立起连接。ping 是定位网络通不通的一个重要手段。
ping 命令是基于 ICMP 协议来工作的,「 ICMP 」全称为 Internet 控制报文协议( Internet Control Message Protocol)。ping 命令会发送一份 ICMP 回显请求报文给目标主机,并等待目标主机返回 ICMP回显应答。因为 ICMP 协议会要求目标主机在收到消息之后,必须返回 ICMP 应答消息给源主机,如果源主机在一定时间内收到了目标主机的应答,则表明两台主机之间网络是可达的。
举一个例子来描述「ping」命令的工作过程:
1、假设有两个主机,主机 A(192.168.0.1)和主机 B(192.168.0.2),现在我们要监测主机 A 和主机 B 之间网络是否可达,那么我们在主机 A 上输入命令:ping 192.168.0.2 。
2、此时,ping 命令会在主机 A 上构建一个 ICMP 的请求数据包:
ICMP header 中的 type 为 8、code 为 0,代表回显请求。
Sequence number 代表该 ping 包的序列号,一般从 1 开始。
然后 ICMP 协议会将这个数据包以及目标 IP(192.168.0.2)等信息一同交给 IP 层协议。
3、IP 层协议得到这些信息后,将源地址(即本机 IP )、目标地址(即目标 IP:192.168.0.2)、再加上一些其它的控制信息,构建成一个 IP 数据包。
4、IP 数据包构建完成后,还不够,还需要加上 MAC 地址。因此,还需要通过 ARP 映射表找出目标 IP 所对应的 MAC 地址。当拿到了目标主机的 MAC 地址和本机 MAC 后,一并交给数据链路层,组装成一个数据帧,依据以太网的介质访问规则,将它们传送出去。
5、当主机 B 收到这个数据帧之后,会首先检查它的目标 MAC 地址是不是本机,如果是就接收下来处理,接收之后会检查这个数据帧,将数据帧中的 IP 数据包取出来,交给本机的 IP 层协议,然后 IP 层协议检查完之后,再将 ICMP 数据包取出来交给 ICMP 协议处理,当这一步也处理完成之后,就会构建一个 ICMP 应答数据包,回发给主机 A 。
6、在一定的时间内,如果主机 A 收到了应答包,则说明它与主机 B 之间网络可达,如果没有收到,则说明网络不可达。除了监测是否可达以外,还可以利用应答时间和发起时间之间的差值,计算出数据包的延迟耗时。
wireshark 抓包
(SAW:Game Over!)