当你ping的时候,你知道背后发生了什么吗?

当你ping的时候,你知道背后发生了什么吗?
文章图片
概览
对于ping命令 , 想必只大家都知道吧?当我们检查网络情况的时候 , 最先使用的命令肯定是ping命令吧?一般我们用ping查看网络情况 , 主要是检查两个指标:
第一个是看看是不是超时
第二个看看是不是延迟太高
如果超时那么肯定是网络有问题(禁ping情况除外);如果延迟太高 , 网络情况肯定也是很糟糕的 。
那么对于ping命令的原理 , ping是如何检查网络的?大家之前有了解吗?接下来我们来跟着ping命令走一圈 , 看看ping是如何工作的 。
2
环境准备和抓包
环境准备
抓包工具:Wireshark准备两台电脑 , 进行互ping操作:
A电脑(IP地址:192.168.2.135/MAC地址:98:22:EF:E8:A8:87)
B电脑(IP地址:192.168.2.179/MAC地址:90:A4:DE:C2:DF:FE)
抓包操作
打开Wireshark , 选取指定的网卡进行抓包 , 进行ping操作 , 在A电脑上pingB电脑的IP
当你ping的时候,你知道背后发生了什么吗?
文章图片
抓包情况如下:
当你ping的时候,你知道背后发生了什么吗?
文章图片
这里先简单的介绍下Wireshark的控制面板 , 这个面板包含7个字段 , 分别是:
NO:编号
Time:包的时间戳
Source:源地址
Destination:目标地址
Protocol:协议
Length:包长度
Info:数据包附加信息
3
深入解析
上图中抓包编号54-132显示的就是整个ping命令的过程 , 我们知道ping命令不是依托于TCP或者UDP这种传输层协议的 , 而是依托于ICMP协议实现的 , 那么什么是ICMP协议呢?这里简单介绍下:
ICMP协议的产生背景
[RFC792]中说明了ICMP产生的原因:由于互联网之间通讯会涉及很多网关和主机 , 为了能够报告数据错误 , 所以产生了ICMP协议 。 也就是说ICMP协议就是为了更高效的转发IP数据报和提高交付成功的机会 。
ICMP协议的数据格式
当你ping的时候,你知道背后发生了什么吗?
文章图片
根据上图我们知道了ICMP协议头包含4个字节 , 头部主要用来说明类型和校验ICMP报文 。 下图是对应的类型和代码释义列表 , 我们后面分析抓包的时候会用到 。
当你ping的时候,你知道背后发生了什么吗?
文章图片
简单介绍完了ICMP , 那么抓包过程中出现的ARP协议是什么呢?我们同样来简单解释下:
ARP协议
我们知道 , 在一个局域网中 , 计算机通信实际上是依赖于MAC地址进行通信的 , 那么ARP(AddressResolutionProtocol)的作用就是根据IP地址查找出对应的MAC地址 。
Ping过程解析
了解了上面的基础概念后 , 我们来分析下抓包的数据 , 其流程如下:
A电脑(192.168.2.135)发起ping请求 , ping192.168.2.179
A电脑广播发起ARP请求 , 查询192.168.2.179的MAC地址 。
B电脑应答ARP请求 , 向A电脑发起单向应答 , 告诉A电脑自己的MAC地址为90:A4:DE:C2:DF:FE
知道了MAC地址后 , 开始进行真正的ping请求 , 由于B电脑可以根据A电脑发送的请求知道源MAC地址 , 所以就可以根据源MAC地址进行响应了 。
上面的请求过程我画成流程图比较直观一点:
当你ping的时候,你知道背后发生了什么吗?
文章图片
观察仔细的朋友可能已经发现 , Ping4次请求和响应结束后 , 还有一次B电脑对A电脑的ARP请求 , 这是为什么呢?这里我猜测应该是有2个原因:
由于ARP有缓存机制 , 为了防止ARP过期 , 结束后重新更新下ARP缓存 , 保证下次请求能去往正确的路径 , 如果ARP过期就会导致出现一次错误 , 从而影响测试准确性 。