1. V1 基础拓扑

1
2
3
4
5
6
7
8
9
PC1 ---------------- SW1 ---------------- PC2

PC1:
IP 192.168.10.10/24
MAC AAAA

PC2:
IP 192.168.10.20/24
MAC BBBB

两台主机处于:

1
2
3
同一 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
2
3
目标在本地 Subnet
→ 不需要 Default Gateway
→ 应该直接把 Ethernet Frame 交给 PC2

但 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
2
3
DMAC = FF:FF:FF:FF:FF:FF
SMAC = AAAA
EtherType = 0x0806

ARP 内容核心:

1
2
3
4
5
Sender IP  = 192.168.10.10
Sender MAC = AAAA

Target IP = 192.168.10.20
Target MAC = unknown

含义:

谁拥有 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
2
ARP Table:
IP → MAC

4. Switch 的 MAC Address Table

Switch 不依靠 IP 地址做普通二层转发。

它维护:

1
2
3
MAC Address Table / CAM Table

VLAN + MAC → Interface

例如:

1
2
VLAN 10   AAAA → E0/1
VLAN 10 BBBB → E0/2

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
2
3
4
5
ARP:
192.168.10.20 → BBBB

MAC Table:
VLAN10 + BBBB → E0/2

两张表解决的是两个不同问题。

即使 Switch 已经知道:

1
BBBB → E0/2

PC1 ARP Cache 被清空后,PC1仍然需要重新 ARP。

因为:

1
2
3
Switch 知道 BBBB 在哪
≠
PC1 知道 192.168.10.20 的 MAC 是 BBBB

6. ICMP Ping 的完整 Packet Walk

ARP 完成后,PC1 已经知道:

1
192.168.10.20 → BBBB

现在真正发送 ICMP Echo Request。

Ethernet Header

1
2
3
DMAC = BBBB
SMAC = AAAA
EtherType = 0x0800

0x0800 表示 Ethernet Payload 是 IPv4。

IPv4 Header

1
2
3
SIP = 192.168.10.10
DIP = 192.168.10.20
Protocol = 1

IP Protocol 1 表示 ICMP。

ICMP

1
2
Type = 8
→ Echo Request

完整逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
Ethernet
├── DMAC BBBB
├── SMAC AAAA
└── EtherType 0x0800
↓
IPv4
├── SIP 192.168.10.10
├── DIP 192.168.10.20
└── Protocol 1
↓
ICMP
└── Echo Request

PC2 回复:

1
2
3
4
5
6
7
8
9
10
11
Ethernet:
SMAC = BBBB
DMAC = AAAA

IPv4:
SIP = 192.168.10.20
DIP = 192.168.10.10

ICMP:
Type = 0
Echo Reply

7. EtherType、IP Protocol 与 Port

三者属于不同层次。

EtherType

Ethernet Header 中:

1
2
EtherType
→ 告诉接收方 Ethernet Payload 是什么

常见:

1
2
3
IPv4  = 0x0800
ARP = 0x0806
IPv6 = 0x86DD

IP Protocol

IPv4 Header 中:

1
2
Protocol
→ 告诉接收方 IP Payload 是什么协议

常见:

1
2
3
4
ICMP = 1
TCP = 6
UDP = 17
OSPF = 89

TCP / UDP Port

进入 TCP/UDP 后:

1
2
Port
→ 区分应用 / 服务

例如:

1
2
TCP 179 → BGP
TCP 443 → HTTPS

因此完整层级:

1
2
3
4
5
6
7
8
EtherType
→ L3 是什么?

IP Protocol
→ IP 里面是什么?

TCP/UDP Port
→ 哪个应用 / 服务?

8. 跨网段时 ARP 的对象发生变化

假设:

1
2
3
4
5
6
PC1
192.168.10.10/24
GW 192.168.10.1

目标:
192.168.20.10

PC1 根据自己的 /24 判断:

1
2
192.168.20.10
不属于本地 Subnet

因此 PC1 不会 ARP 192.168.20.10。

而是:

1
2
ARP Default Gateway:
192.168.10.1 → Gateway MAC

随后发送:

1
2
3
4
5
6
7
Ethernet:
DMAC = Gateway MAC
SMAC = PC1 MAC

IP:
SIP = 192.168.10.10
DIP = 192.168.20.10

因此必须建立一个非常重要的概念:

ARP 找的是“当前这一跳应该把 Ethernet Frame 交给谁”,不一定是最终 Destination IP。

同网段:

1
ARP 最终主机

跨网段:

1
ARP 下一跳 / Default Gateway

9. MAC 与 IP 的作用范围

IP 地址

通常表示端到端通信对象:

1
2
SIP → 最初发送方
DIP → 最终目标

没有 NAT 等机制时,经过 Router 后:

1
SIP / DIP 通常保持不变

MAC 地址

用于当前二层链路:

1
2
这一跳谁发?
这一跳交给谁?

经过 Router 后需要重新封装 Ethernet Header,因此:

1
MAC 地址逐跳变化

可以记:

1
2
3
4
5
IP:
端到端

MAC:
一跳一换

这也是后面学习 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1. Interface 是否 Up?
↓
2. IP / Mask 是否正确?
↓
3. 是否判断为同一个 Subnet?
↓
4. ARP 是否成功?
↓
5. ARP Table 是否有目标 IP→MAC?
↓
6. Switch MAC Table 是否学习正确?
↓
7. Ethernet Frame 是否从正确接口转发?
↓
8. 最后检查 ACL / Host Firewall 等

V1 最终核心链条

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
应用需要访问 Destination IP
↓
本机 IP + Mask 判断:
目标同网段还是跨网段?
↓
同网段:
ARP Destination Host

跨网段:
ARP Default Gateway
↓
得到 Next-Hop MAC
↓
封装 Ethernet Frame
↓
Switch 学习 Source MAC
↓
Switch 查询 Destination MAC
↓
二层转发
↓
目标收到 Frame
↓
EtherType
↓
IP Protocol
↓
ICMP / TCP / UDP

最终记忆

1
2
3
4
5
ARP Table
→ IP → MAC

MAC Table
→ VLAN + MAC → Interface
1
2
3
4
5
同网段
→ ARP 最终主机

跨网段
→ ARP 下一跳 / Gateway
1
2
3
4
5
IP
→ 通常端到端

MAC
→ 当前一跳,经过 Router 后重新封装