十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

以太网组网实验全解析:从帧结构到ARP与交换机MAC地址表

以太网组网实验全解析:从帧结构到ARP与交换机MAC地址表 简介数据链路层是网络通信的基础它定义了帧如何封装、MAC地址如何识别以及交换机如何转发。理解这些原理是排查网络故障、优化组网方案的前提。以太网帧由目的MAC、源MAC、类型字段和载荷组成最小帧长64字节的规则与MTU计算密切相关。ARP协议负责将IP地址解析为MAC地址广播请求与单播应答构成了通信的起点。交换机通过学习源MAC地址建立转发表并根据目的MAC决定转发或泛洪。抓包工具Wireshark能够逐字节还原帧结构验证ARP生命周期、MAC地址表老化及MTU限制等现象。这些内容最终收敛到以太网组网实验的完整验证方法帮助工程人员将理论落地为实践提升网络调试能力。1. 以太网组网实验到底在验证什么先对“ping 通了”保持怀疑大多数学生做完这个实验看到两台电脑能互相 ping 通就认为任务完成。但以太网组网实验真正要验证的并不是 ICMP 回显而是数据链路层的完整工作链路帧怎么封装、MAC 地址怎么被识别、交换机怎么建立转发表、ARP 怎么把 IP 解析成 MAC。Ping 通只说明 IP 层以上的协议栈是通的而帧格式是否规范、广播域内还有哪些报文在流动ping 命令根本不会告诉你。这个实验的价值在于逼着你把网络分层从抽象概念落成看得见的字节流。做这个实验前你需要能说出以太网帧的最小长度为什么是 64 字节做完之后你应该能对着 Wireshark 里的十六进制内容逐字段解释帧头每一段代表什么。这篇文章从拓扑搭建开始到帧分解、ARP 交互、交换机 MAC 地址表学习最后落到三个验证技巧上跟着走一遍你会得到一份能写进实验报告、禁得起老师追问的完整结果。2. 两台 PC 加一台交换机以太网组网实验的最小可复现拓扑2.1 拓扑选型直连网线不等于组网实验先明确一件事如果只是让两台电脑通信一根交叉网线直连就可以但这不是“组网”。组网实验的核心对象是交换机它决定了帧往哪个端口转发、广播报文会被送到哪里、MAC 地址表如何动态维护。所以这里用的拓扑是PC-A 的网卡接交换机 1 号口PC-B 的网卡接交换机 2 号口。不接路由器不做 VLAN仅一个广播域内的二层通信。连线的时候注意交换机的端口指示灯。指示灯亮起只代表物理链路建立不代表配置正确。很多实验做不通第一步就错在物理层——网线没插紧、交换机端口被禁用、网卡被系统识别成“未识别的网络”。进入正题前先确认两端网卡都拿到链路协商速率100M 还是 1000M 无所谓但必须是 Link Up 状态。2.2 给两台机器分配同网段 IPWindows 与 Linux 的配置差异以太网帧本身不认识 IP 地址它只认 MAC但人类管理网络依赖 IP。这个实验里 IP 地址的作用是让协议栈产生 ARP 解析需求从而驱动整个二层的转发行为。给 PC-A 配 192.168.1.10/24给 PC-B 配 192.168.1.20/24掩码用 255.255.255.0。不要配成不同网段——不同网段需要网关介入而实验一没有路由器跨网段通信必然失败那不是实验要考察的内容。Windows 上在「控制面板 → 网络连接 → 属性 → IPv4」里手动填入或者用命令快速完成# 管理员权限 PowerShellName 换成实际网卡名 New-NetIPAddress -InterfaceAlias 以太网 -IPAddress 192.168.1.10 -PrefixLength 24 # 验证配置结果能看到 IP、子网掩码和网卡 MAC Get-NetIPConfiguration ipconfig /allLinux 端用 ip 命令更直接# 先看网卡接口名常见的是 eth0、ens33、enp3s0 ip link show # 配置 IP 并启用网卡/24 等价于 255.255.255.0 sudo ip addr add 192.168.1.20/24 dev ens33 sudo ip link set ens33 up # 确认地址、MAC、状态均为 UP ip addr show ens33配置完成后先各自看一眼本机的 MAC 地址和 IP这组数据后面要对得上。Windows 用ipconfig /all里的“物理地址”Linux 用ip link show里的link/ether字段记录下来备用。2.3 用 ping 做连通性基线注意第一包和后续包的差异地址配好后从 PC-A ping PC-B命令本身很简单但观察点有三个维度。第一个维度是结果能通或不通。第二个维度是延迟同网段二层直连正常应该在 1ms 以下如果延迟到几十毫秒多半是网卡协商成了半双工或者交换机端口有异常。第三个维度是首包延迟第一次 ping 的响应时间往往明显大于后续包因为首包触发了 ARP 解析后续包里的 MAC 地址已经被缓存了。# Windows ping 192.168.1.20 -n 10 # Linux ping -c 10 192.168.1.20如果你发现前几包超时、后面连续通最可能的原因是 ARP 缓存里残留了旧条目。Windows 上执行arp -d清空Linux 上执行sudo ip neigh flush all重新 ping 一次这时首包超时或高延迟的现象会重现——这个细节在实验报告里非常加分它说明你理解 ARP 缓存的生命周期。3. 用 Wireshark 拆解以太网帧从十六进制字节中定位每个字段3.1 抓包过滤规则只看实验相关的流量实验环境干净但网卡上仍然可能有系统后台流量比如 IPv6 邻居发现、mDNS、LLMNR 等。为了不被干扰先设置显示过滤器。抓包之前想清楚要验证什么如果验证 ICMP 报文用icmp如果验证 ARP用arp如果验证以太网帧结构本身用eth配合具体条件。我一般会直接过滤源和目的 MAC避免其他广播流量污染视野eth.addr 你的PC-A网卡MAC地址注意 Wireshark 的 MAC 地址格式是aa:bb:cc:dd:ee:ff冒号分隔大小写无所谓。过滤后抓包界面上只剩下这台机器发出的和收到的帧干扰最小。3.2 逐字段对照官方帧格式前导码、目的 MAC、源 MAC、类型抓到一个 ICMP 请求帧后双击该包在中间面板展开 Ethernet II 那一行。标准以太网帧从目的 MAC 开始分析头部结构如下字段长度内容示例说明目的 MAC6 字节00:0c:29:xx:xx:xx接收方网卡地址源 MAC6 字节00:0c:29:xx:xx:xx发送方网卡地址类型/长度2 字节0x0800大于 1536 表示上层协议类型IPv4 为 0x0800Payload46~1500 字节ICMP 报文不够 46 字节要填充FCS4 字节抓包中通常不显示循环冗余校验网卡硬件计算确认源 MAC 是不是 PC-A 网卡的地址目的 MAC 是 PC-B 的地址。这里有个关键点如果抓包时选错了网卡你会发现自己电脑发出去的帧源 MAC 显示的却是别的网卡的地址这是刚开始用 Wireshark 最常见的错误遇到这个问题先检查有没有用无线网卡在抓有线网卡的包。Wireshark 底部有十六进制窗口选中 Ethernet II 头部对应字节会高亮。你可以从第 13 个字节开始读前 12 字节是目的 MAC 和源 MAC第 13~14 字节是类型字段08 00就代表 IPv4。这个手动读字节的练习建议至少做一次对理解“帧头就是一段有结构的二进制数据”有很大帮助。3.3 payload 的长度门限最小帧与 MTU 的换算再往下看 ICMP 部分你会发现一个完整以太网帧的数据区被分成了几层IP 头部 20 字节加 ICMP 头部 8 字节加数据部分。所以一个 ping 包至少占用 28 字节的 IP 层载荷但以太网帧里数据区最小要求 46 字节不足就要填充Padding。实际操作中因为 IP 头部通常是 20 字节ICMP 头部 8 字节windows 下 ping 默认发送 32 字节数据加起来数据区刚好 60 字节不需要填充帧总长就是 14 60 4 78 字节不含前导码。你可以在 Wireshark 中看到这一帧的长度字段从Frame行直接读。如果发送的数据变成 1 字节数据区只有 29 字节不足 46协议栈会补到 46帧总长固定为 64 字节——这是以太网为什么不支持小于 64 字节帧的原因。# Windows 发送 1 字节数据观察帧长度还是 64 字节 ping 192.168.1.20 -n 1 -l 1 # Linux 发送 1 字节数据 ping -c 1 -s 1 192.168.1.20这个实验做一个对比分别用默认数据长度和 1 字节数据长度发 ping抓包对比帧的总长度。你会发现对端返回的应答帧长度也不同通过观察长度列的变化能直观感受到“填充”的作用。4. ARP 在组网实验中的完整生命周期广播请求与单播应答4.1 一个 ping 命令背后发生的事先解析 MAC 再发 ICMP抓包目录中先抓到一个 ARP 请求然后才是 ICMP 请求这个顺序不是巧合。协议栈要发送 IP 数据包但以太网帧需要目的 MAC 地址必须先把目标的 IP 地址解析成 MAC 地址。ARP 解析过程可以一句话说清发送方在广播域内喊“谁的 IP 是 192.168.1.20把 MAC 告诉我”所有人收到广播只有目标 IP 回话。用 Wireshark 过滤arp你会看到两个方向的对ARP 请求目的 MAC 是ff:ff:ff:ff:ff:ff广播opcode 为 1ARP 应答目的 MAC 是发送方的单播地址opcode 为 24.2 清空 ARP 缓存重抓验证解析过程的真实存在默认情况下ARP 应答会被双方缓存连续 ping 时不会每次都发 ARP 广播。为了在报告里完整展示 ARP 过程先清缓存再发一个 ping整个过程只有一条 ARP 请求和一条 ARP 应答# Windows: 清空本机 ARP 缓存 arp -d# Linux: 清空邻居表 sudo ip neigh flush all清完后从 PC-A ping PC-B抓包后按照时间顺序排列你会看到这样一个完整序列帧 1: PC-A 发出 ARP 请求广播问 192.168.1.20 的 MAC 帧 2: PC-B 发出 ARP 应答单播告诉 PC-A 自己的 MAC 帧 3: PC-A 发出 ICMP Echo Request 帧 4: PC-B 回复 ICMP Echo Reply如果你抓到的序列里第一条就是 ICMP说明 ARP 缓存里已经有条目需要重新清缓存。如果 ARP 请求发了多遍才收到应答检查是不是防火墙拦截了 ICMP但放行了 ARP。4.3 从交换机视角看 ARP三层地址不会出现在转发依据里ARP 报文对交换机来说只是一个普通以太网帧交换机不解析 ARP 的内容它只关心帧里的源 MAC 和目的 MAC。APR 请求里目的 MAC 是全 F交换机看到广播地址后把它从除入口外的所有端口转发出去ARP 应答是单播帧交换机根据之前学习到的 MAC 地址表只发给对应端口。这也是整个实验里最容易答错的问题ARP 是三层还是二层的协议ARP 报文承载在以太网帧里没有 IP 头部所以它工作在数据链路层和网络层之间通常归为二层协议。但它的作用是为三层 IP 地址解析 MAC所以考试里问你“ARP 报文到达交换机时交换机怎么处理”——答案是当作普通帧转发只看目的 MAC。5. 交换机 MAC 地址表的建立与转发规则二层组网的核心机制5.1 三步转发逻辑学习、查找、泛洪交换机不是一开始就知道 PC-A 连着端口 1、PC-B 连着端口 2。它通过接收帧的源 MAC 地址建立映射。典型的转发过程如下从端口 1 收到 PC-A 发出的帧记录源 MACAA:...对应端口 1存入 MAC 地址表查看目的 MAC 是否在表中在表中则只从对应端口转发不在表中则从除接收端口外的所有端口泛洪PC-A 第一次 ping PC-B 时ARP 请求的目的 MAC 是广播地址交换机无条件泛洪同时学习了 PC-A 的 MAC 对应端口 1。PC-B 回 ARP 应答时目的 MAC 是 PC-A 的地址此时交换机表中已经有 PC-A 的条目于是只从端口 1 转发——这就是交换机比集线器高效的本质原因。你可以在实验环境里查看交换机的 MAC 地址表来验证这个学习过程。不同厂商命令不同常见实验设备的查看方式如下按你自己设备的实际命令执行# 思科风格交换机 show mac address-table # 华为/H3C 风格交换机实验报告里常用 display mac-address表中应该能看到两条动态条目MAC 地址分别对应你的两台电脑端口号对应实际的接线端口。注意看有没有 VLAN 字段即使默认 VLAN 1 也要写清楚因为 MAC 地址表是按 VLAN 隔离的。5.2 对比广播帧与单播帧的抓包差异判断泛洪行为的痕迹交换机泛洪广播帧这件事很难直接观察但你可以从抓包行为中侧面验证。在 PC-A 上启动 Wireshark然后在 PC-A 上 ping 一个不存在的 IP 地址比如 192.168.1.200ping 192.168.1.200由于目标不存在ARP 广播发出后没人应答MAC 表里也不会增加新条目。你会看到 PC-A 反复发送 ARP 广播每一个广播帧目的 MAC 都是全 F。这说明当交换机不知道目的 MAC 对应哪个端口时帧会被复制到所有端口——虽然 PC-B 也收到了这些 ARP 广播但 PC-B 发现自己不是目标 IP不会做应答。另一个验证方法是把 PC-B 上的 Wireshark 也开着对比两台机器抓到的帧。你会看到同一个 ARP 广播帧同时出现在两台机器的抓包列表里这证明广播帧被交换机复制到了所有端口。而 PC-A 发给 PC-B 的单播 ICMP 帧只会出现在 PC-B 的抓包里PC-A 抓不到自己发出的单播帧被交换机转发的副本——这个过程你可以通过对比帧编号验证。5.3 MAC 地址表老化的实际影响为什么换端口后网络暂时不通实验里如果中途把 PC-A 从交换机端口 1 换到端口 3马上 ping 可能会失败一小段时间。原因是交换机 MAC 表里还记录着“PC-A 的 MAC 对应端口 1”帧被发往错误的端口PC-A 收不到。解决办法有两个一是等 MAC 条目老化一般 300 秒二是重启交换机清空 MAC 地址表。在实验报告里写清楚这个现象并解释“MAC 地址表的老化时间是保证网络拓扑变化后能快速收敛的关键机制”这比单纯贴上 ping 成功的截图更能体现理解深度。6. 收尾验证三个让实验报告更可信的追加检查6.1 用帧序号核对收包完整性判断有没有丢包Wireshark 中每一帧都有一个 frame.number 字段你可以通过显示过滤器frame.number来快速定位观察点。验证是否丢包的办法是用 ping 的结果和抓包数量互相印证。如果 ping 显示发送 10 包接收 10 包但抓包里只有 18 个 ICMP 帧请求 10 个回复 8 个说明有 2 个应答帧实际上没回到 PC-A或者发了但网卡没抓到。此时对交换机端口做统计确认交换机侧是否收到全部请求。这个技巧的意义在于命令行的 ping 统计只告诉你 ICMP 层的视角抓包告诉你链路层的视角两个视角对不上时问题往往出在网卡驱动丢包或交换机端口错误计数上。6.2 连续大 ping 验证 MTU 一致性1472 字节这个数的来历最后做一次大包测试验证你对 MTU 的理解。以太网 payload 上限 1500 字节扣除 IP 头部 20 字节和 ICMP 头部 8 字节ICMP 数据部分最大就是 1472 字节。# Windows: 发送 1472 字节刚好填满 MTU ping 192.168.1.20 -n 5 -l 1472 # 尝试超过 MTU应显示需要拆分数据包但被设置为不分片 ping 192.168.1.20 -n 1 -l 1473 -f第二个命令会提示“需要拆分数据包但是设置 DF”之类的错误这是正常的它证明以太网帧长度限制真实存在而不是书本上的抽象概念。在实验报告的“实验结果分析”里写出这个命令的输出比单纯写“以太网 MTU 是 1500”更有说服力。6.3 观察 Wireshark 的错误提示CRC 校验与抓包工具的边界在 PC-B 上抓包时偶尔会在某个帧上看到黑色的标记或在 Checksum 字段显示 incorrect。如果是在本机发送的帧上看到Wireshark 校验和验证不可用这通常是网卡驱动开启了 checksum offload校验和由网卡硬件计算Wireshark 在软件层面无法验证不是真实的错误。同理帧的 FCS 字段在正常抓包里是不可见的——网卡硬件已经剥离了它你看到的是从目的 MAC 开始的完整帧而不是物理线路上的原始比特流。这一条写进报告的“实验心得”说明你已经分辨出“抓包工具看到的内容”和“物理链路上实际传输的内容”的区别。实验做到这一步就已经不是简单的配 IP、ping 通了而是把数据链路层的原理和实际抓包数据完整地对应了起来。本文还有配套的精品资源点击获取
返回列表