【网络体系搭建】V1:Ethernet, MAC, ARP与一次Ping的完整过程
1. V1 基础拓扑
1 | PC1 ---------------- SW1 ---------------- PC2 |
两台主机处于:
1 | 同一 IP Subnet |
本章核心目标:
PC1 ping PC2 时,一个数据包从应用需求开始,到 ARP、Ethernet、Switch、ICMP,完整经历了什么。
2. 同网段还是跨网段:主机首先做什么
PC1 要访问:
1 | 192.168.10.20 |
首先使用自己的 Subnet Mask判断目标 IP 是否与自己处于同一 Subnet。
PC1:
1 | 192.168.10.10/24 |
目标:
1 | 192.168.10.20 |
两者都属于:
1 | 192.168.10.0/24 |
因此 PC1 判断:
1 | 目标在本地 Subnet |
但 Ethernet 转发需要:
1 | Destination MAC |
PC1 此时只知道:
1 | Destination IP = 192.168.10.20 |
所以需要 ARP。
3. ARP:IP → MAC
ARP 解决:
已知当前二层目标的 IP,如何得到它的 MAC?
PC1 检查 ARP Cache:
1 | 192.168.10.20 → ? |
如果没有对应关系,就发送 ARP Request。
ARP Request
Ethernet:
1 | DMAC = FF:FF:FF:FF:FF:FF |
ARP 内容核心:
1 | Sender IP = 192.168.10.10 |
含义:
谁拥有 192.168.10.20?请告诉 192.168.10.10。
ARP Request 是二层广播,因此同一 VLAN / Broadcast Domain 内都会收到。
ARP Reply
PC2 发现:
1 | Target IP = 自己 |
于是通常单播回复 PC1:
1 | 192.168.10.20 → BBBB |
最终 PC1 ARP Cache:
1 | 192.168.10.20 → BBBB |
核心:
1 | ARP Table: |
4. Switch 的 MAC Address Table
Switch 不依靠 IP 地址做普通二层转发。
它维护:
1 | MAC Address Table / CAM Table |
例如:
1 | VLAN 10 AAAA → E0/1 |
Switch 学习 MAC 的依据是:
收到 Frame 时查看 Source MAC,并记录它来自哪个接口。
例如 PC1 发 Frame:
1 | SMAC = AAAA |
SW1 从 E0/1 收到:
1 | AAAA → E0/1 |
然后 Switch 根据:
1 | Destination MAC |
决定 Frame 往哪里发。
已知单播
如果 DMAC 已经存在于 MAC Table:
1 | 直接转发到对应接口 |
Unknown Unicast
如果 DMAC 不存在:
1 | 在该 VLAN 内 Flood |
Broadcast
例如:
1 | FF:FF:FF:FF:FF:FF |
在对应 VLAN 内 Flood。
5. ARP Table 与 MAC Table 不要混淆
这是二层学习最重要的区别之一。
Host / Router ARP Table
1 | IP → MAC |
回答:
这个下一跳 IP 对应哪个 MAC?
Switch MAC Table
1 | VLAN + MAC → Physical Interface |
回答:
这个 MAC 应该从哪个二层接口出去?
因此:
1 | ARP: |
两张表解决的是两个不同问题。
即使 Switch 已经知道:
1 | BBBB → E0/2 |
PC1 ARP Cache 被清空后,PC1仍然需要重新 ARP。
因为:
1 | Switch 知道 BBBB 在哪 |
6. ICMP Ping 的完整 Packet Walk
ARP 完成后,PC1 已经知道:
1 | 192.168.10.20 → BBBB |
现在真正发送 ICMP Echo Request。
Ethernet Header
1 | DMAC = BBBB |
0x0800 表示 Ethernet Payload 是 IPv4。
IPv4 Header
1 | SIP = 192.168.10.10 |
IP Protocol 1 表示 ICMP。
ICMP
1 | Type = 8 |
完整逻辑:
1 | Ethernet |
PC2 回复:
1 | Ethernet: |
7. EtherType、IP Protocol 与 Port
三者属于不同层次。
EtherType
Ethernet Header 中:
1 | EtherType |
常见:
1 | IPv4 = 0x0800 |
IP Protocol
IPv4 Header 中:
1 | Protocol |
常见:
1 | ICMP = 1 |
TCP / UDP Port
进入 TCP/UDP 后:
1 | Port |
例如:
1 | TCP 179 → BGP |
因此完整层级:
1 | EtherType |
8. 跨网段时 ARP 的对象发生变化
假设:
1 | PC1 |
PC1 根据自己的 /24 判断:
1 | 192.168.20.10 |
因此 PC1 不会 ARP 192.168.20.10。
而是:
1 | ARP Default Gateway: |
随后发送:
1 | Ethernet: |
因此必须建立一个非常重要的概念:
ARP 找的是“当前这一跳应该把 Ethernet Frame 交给谁”,不一定是最终 Destination IP。
同网段:
1 | ARP 最终主机 |
跨网段:
1 | ARP 下一跳 / Default Gateway |
9. MAC 与 IP 的作用范围
IP 地址
通常表示端到端通信对象:
1 | SIP → 最初发送方 |
没有 NAT 等机制时,经过 Router 后:
1 | SIP / DIP 通常保持不变 |
MAC 地址
用于当前二层链路:
1 | 这一跳谁发? |
经过 Router 后需要重新封装 Ethernet Header,因此:
1 | MAC 地址逐跳变化 |
可以记:
1 | IP: |
这也是后面学习 Routing、GRE、MPLS、VXLAN 时的重要基础。
10. 配置、验证与排障
Host 验证
查看 ARP:
1 | arp -a |
Cisco:
1 | show ip arp |
Switch 验证
查看 MAC Table:
1 | show mac address-table |
查看接口:
1 | show interfaces |
1 | show interfaces status |
基础排障逻辑
同 VLAN 两台 Host 无法通信:
1 | 1. Interface 是否 Up? |
V1 最终核心链条
1 | 应用需要访问 Destination IP |
最终记忆
1 | ARP Table |
1 | 同网段 |
1 | IP |



