第7篇:同一 VLAN 内两台 PC 如何通信
关键词:VLAN 同一VLAN通信 以太网帧 交换机转发 MAC地址 ARP 二层通信
一、引言
理解了 ARP 和 MAC 地址表后,我们就可以回答网络入门的一个经典问题:同一 VLAN 内的两台 PC 是如何通信的?
这看似简单,但完整的数据流涉及:IP 层的路由判断、ARP 解析、以太网帧封装、交换机的 MAC 学习和转发等多个环节。理清这个过程,是你从"会配置"到"懂原理"的关键一步。
一个真实的案例:某网络管理员将两台 PC 划入了 VLAN 10,IP 配置为 192.168.10.10/24 和 192.168.10.20/24。两台 PC 互相 Ping 不通。经过排查,发现接入交换机的端口虽然加入了 VLAN 10,但端口类型配置错误——一个是 Access 端口,另一个是 Hybrid 端口且未允许 VLAN 10 通过。
本文从完整的数据流角度,还原同一 VLAN 内两台 PC 的通信全过程。
二、前提条件
两台 PC 要实现同一 VLAN 内通信,必须满足以下前提:
| 条件 | 说明 | 验证方法 |
|---|---|---|
| 同一 VLAN | 两台 PC 连接在交换机的端口属于同一 VLAN | display port vlan |
| 同一子网 | IP 地址和子网掩码计算后网络地址相同 | ipconfig / ip addr |
| 物理链路正常 | 网线连通、端口 UP | display interface brief |
| 无 ACL 拦截 | 交换机端口或 VLAN 层面无访问控制阻止 | display current-configuration |
三、通信完整流程
3.1 场景设定
| 设备 | IP 地址 | 子网掩码 | MAC 地址 | VLAN |
|---|---|---|---|---|
| PC_A | 192.168.10.10 | 255.255.255.0 | AA:AA:AA:AA:AA:01 | VLAN 10 |
| PC_B | 192.168.10.20 | 255.255.255.0 | BB:BB:BB:BB:BB:01 | VLAN 10 |
| 交换机 | - | - | - | S5720-28C-EI |
PC_A 连接交换机 GE0/0/1(Access,VLAN 10),PC_B 连接 GE0/0/2(Access,VLAN 10)。
3.2 通信六步详解
第一步:IP 层判断目的地址
PC_A 的应用层发起通信(如 Ping 192.168.10.20)。PC_A 的 IP 层执行判断: - 目的 IP 与掩码 AND:192.168.10.20 & 255.255.255.0 = 192.168.10.0 - 本机 IP 与掩码 AND:192.168.10.10 & 255.255.255.0 = 192.168.10.0 - 结论:目的 IP 与本机在同一子网,数据直接发往目标,不经过网关
第二步:ARP 解析目的 MAC
PC_A 查找本地 ARP 缓存中 192.168.10.20 的 MAC 地址。首次通信无缓存,发送 ARP Request 广播:"Who has 192.168.10.20? Tell 192.168.10.10"。交换机在 VLAN 10 内泛洪,PC_B 收到后匹配自己的 IP,回复 ARP Reply 单播:"192.168.10.20 is at BB:BB:BB:BB:BB:01"。PC_A 缓存该映射。
第三步:封装以太网帧
PC_A 构造以太网帧: - 目的 MAC:BB:BB:BB:BB:BB:01(从 ARP 获取) - 源 MAC:AA:AA:AA:AA:AA:01 - 类型:0x0800(IPv4) - 载荷:IP 包(源 192.168.10.10 → 目的 192.168.10.20)
第四步:交换机学习源 MAC
交换机 GE0/0/1 收到帧后,提取源 MAC(AA:AA:AA:AA:AA:01),记录到 VLAN 10 的 MAC 地址表:AA:AA:AA:AA:AA:01 → GE0/0/1。
第五步:交换机查表转发目的 MAC
交换机查找目的 MAC(BB:BB:BB:BB:BB:01): - 若已学习:精确转发到对应端口(如 GE0/0/2) - 若未学习:在 VLAN 10 内泛洪(首次通信时必然泛洪)
第六步:PC_B 接收与解封装
PC_B 收到帧,检查目的 MAC 匹配自己 → 接收 → 剥离以太网头 → 将 IP 包递交给 IP 层处理。
3.3 通信时序图

四、关键知识点总结
4.1 数据帧中的地址变化
同一 VLAN 内通信的整个往返过程中,IP 地址和 MAC 地址的变化如下:
| 阶段 | 源 MAC | 目的 MAC | 源 IP | 目的 IP |
|---|---|---|---|---|
| PC_A → PC_B(去程) | AA:AA:AA:AA:AA:01 | BB:BB:BB:BB:BB:01 | 192.168.10.10 | 192.168.10.20 |
| PC_B → PC_A(回程) | BB:BB:BB:BB:BB:01 | AA:AA:AA:AA:AA:01 | 192.168.10.20 | 192.168.10.10 |
关键:同一 VLAN 内通信,源/目的 IP 和源/目的 MAC 在往返过程中均保持不变(源和目的互换),中间设备(交换机)不修改任何地址。
4.2 交换机的角色
交换机在此通信中充当纯转发设备: - 不修改数据帧内容(不改 IP、不改 MAC) - 只负责根据目的 MAC 决定从哪个端口发出 - 通过学习源 MAC 不断更新自己的 MAC 地址表
4.3 首次通信的特殊性
首次通信时,由于交换机 MAC 表中没有目的 MAC 的记录,交换机必须泛洪。这意味着: - 同一 VLAN 内的所有端口都会收到这个帧 - 其他 PC 的网卡会收到帧但因目的 MAC 不匹配而丢弃 - 这是正常的"学习过程",不影响安全性(数据载荷其他 PC 无法读取)
五、常见故障排查
5.1 同 VLAN 但 Ping 不通:排查清单
| 排查项 | 检查命令 | 说明 |
|---|---|---|
| 端口 VLAN 成员 | display port vlan |
确认两端端口在同一 VLAN |
| 端口类型 | display current-configuration interface GE0/0/1 |
Access/Hybrid/Trunk 配置正确 |
| 端口 UP 状态 | display interface brief |
端口物理和协议状态均 UP |
| IP 配置 | PC 端 ipconfig |
IP 和掩码正确、同一子网 |
| ARP 缓存 | PC 端 arp -a |
目标 IP 有 MAC 映射 |
| MAC 地址表 | display mac-address |
交换机学习到两端 MAC |
| STP 阻塞 | display stp brief |
端口未被 STP 阻塞 |
| 端口安全 | display mac-limit statistics |
端口未被 MAC 超限关闭 |
5.2 故障案例:端口类型不匹配
现象:PC_A(Access VLAN 10)与 PC_B(Hybrid 端口)互相 Ping 不通。
根因:Hybrid 端口 GE0/0/2 未配置 port hybrid vlan 10 untagged,导致 VLAN 10 的帧从该端口发出时携带 VLAN Tag,PC_B 的普通网卡无法识别带 Tag 的帧。
解决:
# 修正 Hybrid 端口配置
[HUAWEI] interface GigabitEthernet 0/0/2
[HUAWEI-GigabitEthernet0/0/2] port link-type hybrid
[HUAWEI-GigabitEthernet0/0/2] port hybrid vlan 10 untagged
六、总结
| 阶段 | 执行者 | 动作 | 结果 |
|---|---|---|---|
| IP 判断 | PC_A IP 层 | 子网掩码比对 | 确认同子网,不经过网关 |
| ARP 解析 | PC_A + PC_B | 广播请求 + 单播应答 | 获取目的 MAC |
| 帧封装 | PC_A 网卡 | 填充 MAC 头和 IP 包 | 构造完整以太网帧 |
| MAC 学习 | 交换机 | 记录源 MAC 与端口映射 | 更新 MAC 地址表 |
| 帧转发 | 交换机 | 查目的 MAC 决定出端口 | 精确转发或泛洪 |
| 帧接收 | PC_B 网卡 | 匹配目的 MAC 并解封装 | 递交 IP 层处理 |
核心要点: 1. 同一 VLAN 通信不经过网关,所有转发由二层交换机完成 2. IP 地址保持不变,MAC 地址在往返过程中源目的互换 3. 首次通信必泛洪(交换机未学习目的 MAC),后续精确转发 4. 交换机不改帧内容,只负责"查表选端口" 5. 同 VLAN 通信故障优先查 VLAN 成员、端口类型和端口状态
思考题
- 同一 VLAN 内的两台 PC 通信,如果中间经过了两台级联的交换机,通信过程与经过一台交换机有何不同?
- 为什么同一 VLAN 内通信不需要网关?如果 PC 误配了网关会影响同 VLAN 通信吗?
- 同一 VLAN 内有 100 台 PC,PC_A 首次 Ping PC_B 时,泛洪的帧会被所有 100 台 PC 的网卡收到吗?其他 PC 会处理这个帧吗?
下篇预告
同一 VLAN 内的通信已经清晰了,但如果 PC_A 在 VLAN 10,PC_B 在 VLAN 20,它们之间还能通信吗?VLAN 隔离了广播域,那跨 VLAN 通信需要什么机制?下一篇文章《跨 VLAN 通信为什么要三层接口》将揭示答案。