Wireshark抓取以太网MAC帧并进行分析

用Wireshark抓取并分析MAC帧,是理解数据链路层工作原理最直观的方式。下面我会带你从准备抓包开始,通过几个具体的实验,一步步看懂MAC帧的结构,并理解它在网络通信中的关键作用。

🛠️ 第一步:准备工作与抓包

过程如下:

  1. 获取工具 :从官网下载并安装Wireshark,参考:wireshark抓包工具简介及使用总结-CSDN博客它是我们分析网络流量的"显微镜"。

  2. 选择网卡:打开Wireshark,选择当前正在使用的网卡(如Wi-Fi或以太网)开始抓包。

  3. 生成流量 :打开命令行(CMD或终端),输入 ping www.baidu.com,这会生成可供分析的ICMP请求和响应数据包。

  4. 停止与筛选 :在Wireshark中停止抓包,并在顶部的过滤栏输入 icmp,让屏幕只显示我们关心的ping包。

经过第一步,有如下内容:

这里点击了第一行数据,下面展开的四行是啥?

你贴出的这四行信息,是Wireshark对一个数据包从下到上的精炼总结。每一行都代表了网络模型中的一个关键层级,我来帮你逐一拆解:

1. 第一行:全局概览 (Frame 122)

Frame 122: Packet, 74 bytes on wire (592 bits), 74 bytes captured (592 bits) on interface...

  • Frame 122:这是Wireshark抓到的第122个数据包。

  • 74 bytes on wire:这个包在网线上实际传输的大小是74字节。这里包含了所有开销,比如尾部用于校验的FCS(帧校验序列)字段。

  • 74 bytes captured :Wireshark实际抓取到的数据大小。通常和on wire一致,除非你设置了抓包截断。

  • on interface...:这是数据包被捕获的具体网卡代号。

一句话总结:它告诉你,这是捕获到的第122个、大小为74字节的原始数据帧。

注意, 不要以为第一行是物理层信息,事实上,真实的物理层 (如:电压高低、电磁波频率、光信号、比特流、前导码、帧间隙)在Wireshark里基本是看不到的 。你能看到的"Frame"行,其实是网卡驱动把物理层传来的比特流组装成帧之后 ,再交给Wireshark时,Wireshark为了方便你分析而额外添加的一个元数据头部

2. 第二行:数据链路层 (Ethernet II)

Ethernet II, Src: MicroStarINT_6e:d9:b8 (2c:f0:5d:6e:d9:b8), Dst: TpLinkTechno_35:63:1c (68:77:24:35:63:1c)

  • 协议Ethernet II,这是最常用的以太网帧格式。

  • 源MAC地址 (Src)MicroStarINT...。这是发送方 的网络硬件地址。MicroStarINT是微星(MSI),表明这个包很可能是从你的微星电脑网卡发出的。

  • 目的MAC地址 (Dst)TpLinkTechno...。这是接收方 的网络硬件地址。TpLinkTechno是普联(TP-LINK),说明接收方是你家或办公室里的TP-LINK路由器或交换机。

一句话总结:它标明了这个数据包在局域网内的"下一站"物理地址------从你的电脑(微星网卡)发给路由器(TP-LINK设备)。

3. 第三行:网络层 (Internet Protocol Version 4)

Internet Protocol Version 4, Src: 192.168.0.108, Dst: 180.101.51.73

  • 协议IPv4,互联网协议第四版。

  • 源IP地址 (Src)192.168.0.108。这是你电脑在局域网内的逻辑地址(私有IP)。

  • 目的IP地址 (Dst)180.101.51.73。这是目标服务器的逻辑地址(公网IP)。通过查询可知,这个IP通常属于百度或其他大型服务商。

一句话总结 :它告诉网络设备,这个数据包"逻辑上的终点"是IP地址为180.101.51.73的服务器。

4. 第四行:传输层/应用层 (Internet Control Message Protocol)

Internet Control Message Protocol

  • 协议ICMP(互联网控制消息协议)。这不是一个承载用户数据的常规协议(如TCP/UDP),而是一个用于网络诊断和控制的协议。

一句话总结 :这个包的具体用途是发送一个网络控制消息。你常用的 ping 命令,底层就是通过发送和接收ICMP包来工作的。

🎯 把四行连起来看:一个完整的故事

把这四行信息串联起来,就能还原这个数据包在网络中传递的完整意图:

第122个数据包,大小74字节。

它由你的电脑(MAC: 微星...,IP: 192.168.0.108) 发出,先交给局域网的路由器(MAC: TP-LINK...)

路由器会读取它,然后根据目标IP地址(180.101.51.73) 将它转发到互联网。

而它本身携带的是一个 ICMP协议网络探测请求 (很可能是ping命令发出的)。

✨ 一个关键细节:MAC和IP地址的不同作用

注意第二行和第三行地址的区别:

  • MAC地址 (第二行) :从 你的电脑路由器。这描述的是 "下一跳" 。就像你寄快递,先要交给楼下代收点。

  • IP地址 (第三行) :从 你的电脑目标服务器。这描述的是 "最终目的地" 。就像快递单上写的收件人最终地址。

即使目标服务器远在千里之外,每一段链路的MAC地址都在变化(从电脑到路由器,路由器到下一个路由器...),但IP地址始终指向最终的那个服务器。这正是TCP/IP协议栈分层思想的绝佳体现。

🔬 第二步:解剖一个标准的以太网MAC帧

在抓包列表中选中任意一个ICMP包,然后在下方详情面板展开"Ethernet II"部分,就能看到一个完整的MAC帧头部。

  • 目的MAC地址 (Destination)

    6字节。表示这个数据包要发给谁。

    在你的ping实验中,发出帧的目的MAC 是下一站设备的地址。如果ping的是子网外的主机(如百度),这个地址是你路由器的MAC地址

  • 源MAC地址 (Source)

    6字节。表示这个数据包从哪里来。

    这是发出帧的网络接口卡(NIC)的唯一硬件地址。在你抓到的ping请求里,它就是你电脑网卡的MAC地址

  • 类型/长度字段 (Type/Length)

    2字节。告诉网卡,这个帧的数据部分装的是什么上层协议。

    常见的值如 IPv4 (0x0800) 表示上层是IP协议;ARP (0x0806) 表示是地址解析协议。

💡 第三步:通过实验理解MAC地址的作用

MAC地址是局域网中进行"点对点"寻址的核心。为了更好地理解这一点,可以进行几个对比实验:

  • 场景一:访问同子网的设备

    当你ping同宿舍的另一台电脑(IP在同一网段)时,你会发现,发出的ICMP请求帧中,目的MAC地址直接就是那台目标电脑的MAC地址。这说明在同一个"院子"里,数据可以直接送到邻居家。

  • 场景二:访问外网(如百度)

    当你ping www.baidu.com时,你会发现一个有趣的现象:发出的ICMP请求帧中,目的MAC地址 并不是百度的MAC(它根本不在你的局域网里),而是你默认网关的MAC地址(通常就是你的路由器)。

这是为什么呢?

简单来说,你的电脑知道,要离开自己的"院子"(局域网)去往外面的世界,必须先把数据交给唯一的"大门"(网关)。所以,无论你要访问哪个外网IP,数据帧都会把网关的MAC地址作为目标,让网关帮忙把数据转发出去。

🤔 第四步:深入探究:FCS校验与ARP协议

  1. 为什么Wireshark里看不到帧校验序列(FCS)?

    你可能已经注意到,Wireshark的Ethernet帧详情里没有显示帧尾的4字节FCS字段。这是因为FCS的校验工作是由网卡硬件完成的。当网卡检查完数据无误后,会把这个字段去掉,才将数据交给操作系统和Wireshark。所以,Wireshark"看到"的是校验通过的帧,但不显示这个"已用即焚"的字段。

  2. MAC地址是如何自动获取的?------ARP协议

    你一定好奇过:电脑是怎么知道"百度"的MAC地址是网关,又是怎么知道网关的MAC地址是00:74:9c:9f:40:13的呢?这靠的是地址解析协议(ARP)

    • 当你ping一个IP时,系统会先检查自己的ARP缓存表。

    • 如果找不到对应的MAC地址(比如刚开机或清了缓存),就会在局域网内广播一个ARP请求:"谁拥有IP 192.168.1.1?请告诉MAC地址为AA:AA:AA:AA:AA:AA的设备。"

    • 拥有该IP的设备(如网关)会单播回复自己的MAC地址。这样,你的电脑就知道该把数据发给谁了。

是不是所有的网络协议都要经过mac层

这是一个很深刻的问题。简短的回答是:不完全是,但绝大多数你日常接触的网络协议都要经过MAC层。

要理解为什么,需要分清两个概念:MAC层 (介质访问控制层)和更广义的数据链路层

1. 绝大多数情况:是的,必须经过MAC层

在你最熟悉的场景里(用电脑上网、手机连Wi-Fi、服务器通过网线通信),答案是肯定的

  • 物理媒介的强制要求 :只要数据需要通过以太网线、Wi-Fi、光纤这些物理介质传输,就必须封装成MAC层能识别的帧格式(如Ethernet II、802.11无线帧)。MAC地址就像快递的"下一站门牌号",没有它,交换机、路由器不知道在局域网内把数据交给谁。

  • 你的抓包就是例子 :你的抓包文件里,IP包外面确实套了一个Ethernet II的MAC帧头。这就是最典型的例子:IP over Ethernet

2. 例外情况:不经过MAC层

有些网络协议可以不经过传统的MAC层,主要有这几类:

场景 例子 为什么不经过MAC层
回环地址 ping 127.0.0.1 数据由操作系统直接在内部虚拟的"回环接口"处理,根本不走任何物理网卡,自然也不需要MAC封装。
点对点链路 老旧拨号上网(PPP协议)、路由器之间的专线(HDLC协议) 这种链路只有两端两个节点,不需要MAC地址来区分多个设备。它们使用PPP、HDLC等协议代替MAC层。
某些广域网技术 传统的帧中继、ATM网络 这些技术使用自己的寻址方式(如帧中继的DLCI号、ATM的VPI/VCI),不使用MAC地址。
虚拟机内部通信 同一台电脑上两个虚拟机之间的虚拟网络 虚拟交换机可以在内部直接转发,绕过物理网卡的MAC层处理。

3. 一个容易混淆的概念:MAC层 vs 数据链路层

关键在于,MAC层是数据链路层的一个子层

数据链路层通常分为两个子层:

  • LLC子层(逻辑链路控制):负责差错控制、流量控制,对上层统一接口。

  • MAC子层(介质访问控制):负责封装成帧、物理寻址(MAC地址)、介质访问竞争(CSMA/CD或CSMA/CA)。

所以更准确的说法是:

所有需要经过共享介质(网线、Wi-Fi)的网络协议,都必须经过数据链路层的MAC子层。

但像PPP这样的协议,它虽然也是数据链路层,却没有MAC子层(它不需要MAC地址)。

4. 为什么你会有"所有协议都要过MAC层"的印象?

因为以太网太成功了

我们现在上网,90%以上的最后一公里都是以太网(包括Wi-Fi,它的帧格式类似以太网)。TCP/IP协议栈在设计时,就假设下层是"尽力而为"的MAC层网络。所以:

  • IP协议被设计成可以运行在任何数据链路层之上(包括以太网、Wi-Fi、PPP等)。

  • 但现实中 ,你99%抓到的包,IP外面都套着Ethernet II

总结

问题 答案
所有网络协议都要经过MAC层吗? 不是。 回环、PPP、某些广域网技术就不需要。
你日常上网(以太网/Wi-Fi)要经过吗? 必须经过。 这是物理传输的前提。
你抓包看到的要经过吗? 你已经看到了 ------IP包外面套着Ethernet II,这就是MAC层。

一句话记住MAC层是"局域网以太网世界"的门票,但如果你不出这个门(回环)或走的是专线(PPP),就不需要这张票。

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
网络研究院3 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展