Wireshark分析PING命令的过程

本文详细介绍了使用Wireshark分析ping命令在网络中的运行流程,包括ARP协议用于查找MAC地址,ICMP协议用于网络检测。通过实例展示了不同情况下的网络通信:ping其他网段不存在地址时会先获取网关MAC,ping其他网络存在地址时直接通过网关,以及在同一网络内通信时的直接ARP请求。总结了ping命令如何根据目标IP是否在同一网络,决定是否需要经过网关进行通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Wireshark分析PING命令的过程

Wireshark的使用可以参考:wireshark抓包新手使用教程 - jack_Meng - 博客园

前言

相信大家对ping命令都很熟悉,也经常用来检测网络环境,但你对ping命令背后的运行过程有多少了解呢?

正文部分涉及两个背景知识:ARP协议和ICMP协议,简单说ARP协议是根据Mac地址查找IP,而ICMP协议是用来检测网络情况的,感兴趣的小伙伴可以自行查阅这两个协议

ping命令的流程

下面以几个案例来分析,先介绍一些本机和网关地址

本机的地址:
IPv4 地址 . . . . . . . . . . . . : 192.168.4.6
物理地址. . . . . . . . . . . . . : 5C-80-B6-FE-A5-0B
子网掩码  . . . . . . . . . . . . : 255.255.255.0
​
网关的地址:
IPv4 地址 . . . . . . . . . . . . : 192.168.4.1
物理地址. . . . . . . . . . . . . : b4-de-df-24-5f-1b

ping一个其他网段且不存在的地址

先打开Wireshark抓包再输入命令哦

# 清除本机ARP表
arp -d
# ping命令
ping 10.10.10.10

获取网关地址

从下图可以看出,26号包是我本机发起的ARP广播,查找网关的Mac地址,这是因为ping命令指向的地址 10.10.10.10 和我本机地址 192.168.4.6 不在同一个网段,因此需要借助网关转发;

而本机的ARP表被清空了,因此需要先发起ARP广播获取网关的Mac地址

在Wireshark的过滤栏中输入arp,表示筛选arp协议相关的包

Mac地址前面部分是网卡厂商的标识,由于这是全球统一的,因此Wireshark直接显示厂商的名称,如IntelCor表示的是因特尔的网卡,而zte表示的是中兴的网卡

发起ICMP请求

本机发起的ICMP请求,但目标Mac却是网关,这是为什么呢?

原因是本机不知道目标IP的Mac地址,它需要借助网关来转发,因此需要先将数据包发送给网关;

而该地址不存在,所以没有响应。

 

而若是本机的ARP表中已经存在网关的地址,则可以省去第一步,可以直接将ICMP包发送给网关

ping一个其他网络且存在的地址

C:\WINDOWS\system32>ping www.baidu.com
​
正在 Ping www.a.shifen.com [163.177.151.110] 具有 32 字节的数据:
来自 163.177.151.110 的回复: 字节=32 时间=13ms TTL=55
来自 163.177.151.110 的回复: 字节=32 时间=11ms TTL=55
来自 163.177.151.110 的回复: 字节=32 时间=12ms TTL=55
来自 163.177.151.110 的回复: 字节=32 时间=15ms TTL=55
​
163.177.151.110 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 11ms,最长 = 15ms,平均 = 12ms

39号包和上面提到的一样,本机发起的请求,目标IP是163.177.151.110,而目标Mac地址是网关

由于此时ARP表中已经有网关的记录,无需发起ARP广播获取网关的Mac地址

而我们查看一下40号包,可以发现该包的源IP地址是163.177.151.110,但源Mac地址是网关,而目标Mac地址和目标IP地址都是本机

这是由于数据包在网络传输中需要经过许多设备,而这个数据包的源IP地址和目标IP地址不变源Mac地址目标Mac地址会随着经过的网络环境发生变化,在本机所处的局域网中,最后一步是由网关将数据包转发到本机,这就是为什么这个包的源Mac地址是网关而目标Mac地址是本机了

采用NAT协议的网络是会修改对外数据包的源IP地址哦

ping一个本网络且存在的地址

先来查看一下本机的ARP表

C:\WINDOWS\system32>arp -a
接口: 192.168.4.6 --- 0x1c
  Internet 地址         物理地址              类型
  192.168.4.1           b4-de-df-24-5f-1b     动态
  192.168.4.230         00-11-32-82-cc-f3     动态
  192.168.4.255         ff-ff-ff-ff-ff-ff     静态
  224.0.0.22            01-00-5e-00-00-16     静态
  224.0.0.251           01-00-5e-00-00-fb     静态
  224.0.0.252           01-00-5e-00-00-fc     静态
  239.255.255.250       01-00-5e-7f-ff-fa     静态
  255.255.255.255       ff-ff-ff-ff-ff-ff     静态

可以看到有好几个IP与Mac地址的映射,而如果我们ping一个不在该表的IP

C:\WINDOWS\system32>ping 192.168.4.5
​
正在 Ping 192.168.4.5 具有 32 字节的数据:
来自 192.168.4.5 的回复: 字节=32 时间=738ms TTL=64
来自 192.168.4.5 的回复: 字节=32 时间=54ms TTL=64
来自 192.168.4.5 的回复: 字节=32 时间=5ms TTL=64
来自 192.168.4.5 的回复: 字节=32 时间=11ms TTL=64
​
192.168.4.5 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 5ms,最长 = 738ms,平均 = 202ms

可以看到这次和前两次不同,发起的ARP广播直接请求192.168.4.5的Mac地址,而192.168.4.5也直接回应本机。

让我们再来看看ICMP包的情况,从157号和158号包可以看出,两个主机之间的通信并没有经过网关,这是由于两个IP处在同一个网段,因此系统直接对目标地址发起了ARP请求,并且后续的ICMP包也无需经过网关,两个主机处于同一个广播域。

 

还有一个细节是当ARP表记录了192.168.4.5的地址后,请求的延时低了许多,这是因为减少了ARP广播获取192.168.4.5 Mac地址的步骤,可以直接发送ICMP包给对应主机。

总结

从前面的三个例子中可以看出,ping命令的运行过程是这样的:

  1. 判断目标IP地址是否为本网络
  2. 若是,则查找本机的ARP表,若表中没有记录则对目标IP发起ARP广播,不经过网关
  3. 若不是,则查找本机ARP表是否有网关的记录,若则直接发起ICMP协议,目标IP是ping的IP,目标Mac地址是网关;而若表中没有,则发起对网关的ARP请求,获取网关的Mac地址后再发送ICMP包
  4. 若目标IP与本机处于同一网络,并且ARP表中有记录,则可以免去ARP广播请求获取目标Mac地址的步骤,直接与目标主机通信ICMP数据包
  5. 若目标IP与本机不是同一个网络,则通信需要借助网关,数据包的源Mac地址和目标Mac地址会被修改

### 关于 `null` 的解释 在 Java 中,`null` 是任何引用类型的默认值[^1]。这意味着当声明一个对象类型的变量而未显式赋值时,该变量会被自动初始化为 `null`。需要注意的是,这种行为适用于类的成员变量、实例变量和静态变量。然而,对于局部变量来说,如果尝试使用未经初始化的对象类型变量,则会导致编译错误。 尽管如此,当前讨论的主题似乎偏离了您最初提到的内容——关于 Wireshark 捕获 ARPPing 命令网络通信过程。以下是针对这一主题的相关解答: --- ### 使用 Wireshark 捕获和分析 ARPPing 命令过程 #### 工具准备 Wireshark 是一款功能强大的开源网络协议分析工具,能够实时捕获并显示网络数据包的详细信息。为了捕获和分析 ARP 以及 ICMP 协议的数据包,需确保已安装最新版本的 Wireshark 并具备管理员权限以访问底层网络接口。 #### 配置过滤条件 ARP 数据包属于链路层协议 (Ethernet),其主要作用是在局域网中解析 IP 地址到 MAC 地址的映射关系;Ping 命令则基于 ICMP 协议实现主机间的可达性测试。可以通过设置特定的捕获过滤器来筛选这些流量: - **捕获 ARP 流量**: 输入 `arp` 或更具体的表达式如 `(arp.opcode == 1)` 来仅获取请求帧。 - **捕获 ICMP 流量**: 对应命令为 `icmp` 或细化至具体消息类型,例如检测回声请求/响应可写成 `(icmp.type==8) || (icmp.type==0)`[^3]。 #### 实际操作步骤说明 启动程序后,在目标适配器上启用监听模式之前定义好上述任一规则字符串加载应用逻辑从而减少冗余记录数量提升效率效果显著另外记得保存重要片段以便后续深入研究或者报告撰写之用最后别忘了关闭项目前确认停止录制动作以免遗忘造成不必要的资源浪费等问题发生总之合理规划整个流程有助于提高工作效率同时也能获得更加精确的结果呈现形式满足不同场景下的需求差异等等诸多方面均值得我们去认真对待执行每一个细节环节力求做到最好最完美无缺憾为止才行啊亲们加油吧! ```bash # 示例:运行 ping 命令向远程服务器发送探测信号 ping -c 4 www.example.com ``` 通过以上方法即可轻松完成对指定活动期间产生的相关联报文序列进行全面监控与剖析工作啦! --- ### 注意事项 由于实际环境中可能存在多种干扰因素影响最终观察结论准确性因此建议结合实际情况灵活调整策略参数设定范围大小长短等方面综合考量后再做决定比较好哦朋友们记住了吗? ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值