ping命令我们见怪不怪了,一般来说,我们们用 ping查看网络情况,主要是检查两个指标:
1、对方是否可达
2、延迟是否太高
如果超时那么肯定是网络有问题(禁 ping情况除外),如果延迟太高,网络情况肯定也是很糟糕的。
我们知道它的作用,但是ping到底是如何检查网络的?它背后的原理又是什么呢?
接下来我们做个实验来验证一下!
环境准备和抓包
01 环境准备
抓包工具:Wireshark 准备两台电脑,进行互 ping操作:
A电脑(IP地址:192.168.27.1 / MAC地址:54-89-98-75-5F-DA)B电脑(IP地址:192.168.2.179 / MAC地址:54-89-98-63-42-38)02 抓包操作
打开 Wireshark,选取指定的网卡进行抓包,进行 ping操作,在 A电脑上 ping B电脑的 IP。抓包情况如下:
在上图中可以看到发送方和接收方的IP以及使用的协议等、在下面的封包列表中显示被选中的详细信息,信息按OSI Layer进行分组;
上面就是整个 ping命令的过程,但我们知道 ping命令不是依托于 TCP或者 UDP这种传输层协议的,而是依托于 ICMP协议实现的, 那么什么是 ICMP 协议呢?这里简单介绍下:
1、ICMP是什么?
ICMP是控制报文协议,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息,这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
从技术角度说,ICMP就是一个"错误侦测与回报机制",其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性﹐其功能主要有:
· 侦测远端主机是否存在。
· 建立及维护路由资料。
· 重导资料传送路径(ICMP重定向)。
ICMP在沟通之中,主要是透过不同的类别(Type)与代码(Code) 让机器来识别不同的连线状况。常用的类别如下表所列:
可见,ICMP 是个非常有用的协议﹐尤其是当我们要对网路连接状况进行判断的时候。
02 Ping过程解析
了解了上面的基础概念后,我们来分析下抓包的数据,其流程如下:
A 主机( 192.168.27.1)发起 ping请求, ping 192.168.27.5A 主机广播发起 ARP请求,查询 192.168.27.5的 MAC地址B 电脑应答 ARP请求,向 A电脑发起单向应答,告诉 A电脑自己的 MAC地址为 54-89-98-63-42-38知道了对方的 MAC地址后,开始进行真正的 ping请求,由于 B电脑可以根据A电脑发送的请求知道 源 MAC地址,所以就可以根据源 MAC地址进行响应了上面的请求过程我画成流程图比较直观一点:
关于ping
1、ping命令是依托于 ICMP协议的, ICMP协议是网络层辅助IP工作的协议,存在就是为了更高效的转发 IP数据报和提高交付成功的机会。
ping命令除了依托于 ICMP,在局域网下还要借助于 ARP协议, ARP协议能根据 IP地址反查出计算机的 MAC地址。
另外 ARP是有缓存的,为了保证 ARP的准确性,计算机会更新ARP缓存。