计算机网络:路由器与交换机的区别是什么?
结论:交换机工作在数据链路层,按 MAC 地址在同一广播域内转发帧;路由器工作在网络层,按 IP 地址与路由表在不同网段之间转发包。 一句话:交换机管"同一张网里怎么走",路由器管"不同网之间怎么走"。
1. 对比
| 维度 | 交换机(二层) | 路由器(三层) |
|---|---|---|
| 工作层次 | 数据链路层 | 网络层 |
| 转发依据 | 目的 MAC + MAC 表 | 目的 IP + 路由表,最长前缀匹配 |
| 广播域 | 不隔离(VLAN 可切开) | 隔离,每个接口一个广播域 |
| 冲突域 | 隔离,每端口一个 | 隔离 |
| 是否改包 | 不改,只转发帧 | TTL 减一、重算校验和、重写二层头 |
| 典型接口 | 大量 LAN 口 | 少量 WAN / LAN 口 |
| 附加功能 | VLAN、链路聚合、STP | NAT、DHCP、ACL、VPN、QoS |
| 转发性能 | ASIC 线速转发,延迟低 | 需查路由,略高 |
2. 各自怎么转发
交换机(同一网段):
收到帧 → 学源 MAC 与入端口 → 查目的 MAC
├─ 命中 → 只从对应端口发出(单播)
└─ 未命中 → 向除入端口外的所有端口泛洪
MAC 表项默认老化时间约 300 秒
路由器(跨网段):
收到包 → 查 FIB 做最长前缀匹配 → TTL-1 → 重算首部校验和
→ ARP 解析下一跳 MAC → 重写二层头 → 从出接口发出
关键差异:IP 地址端到端不变,MAC 地址逐跳重写。 主机访问另一个网段时,目的 MAC 填的是网关的 MAC,而不是最终目标的 MAC。
3. 在 Linux 上看二层与三层
# 把两块网卡桥接成一台"二层交换机"
ip link add br0 type bridge
ip link set eth1 master br0
ip link set eth2 master br0
ip link set br0 up
# 看交换机的 MAC 表(FDB),对应物理交换机的 CAM 表
bridge fdb show br br0
# 三层转发:加路由、按目标查出口、看 ARP 邻居
ip route add 10.1.0.0/16 via 192.168.1.1 dev eth0
ip route get 10.1.2.3
ip neigh show
bridge fdb show 是二层转发表,ip neigh show 是三层 ARP 缓存,排查时别把两者混为一谈。
4. 常见追问
Q:跨网段访问时,MAC 怎么变? 源主机查路由发现下一跳是网关,于是目的 MAC 填网关 MAC;网关收到后查路由,再改写成下一跳的 MAC。 IP 首部的源/目的地址全程不变(NAT 除外),变的只有二层头,这就是"逐跳转发"。
Q:三层交换机和路由器有什么区别? 三层交换机本质是"带路由功能的交换机":用 ASIC 做线速转发,端口密度高,适合机房内网段间高速互访; 路由器接口类型更丰富(专线、拨号、VPN),强调策略、NAT 与广域网互联。 家用"路由器"其实是路由 + 交换 + 无线 AP 的一体机。
Q:VLAN 和子网是一回事吗? 不是。VLAN 在二层隔离广播域,子网在三层划分 IP 范围。 实践中通常一个 VLAN 对应一个子网,但两者可以独立配置,跨 VLAN 通信必须经过三层设备。
Q:为什么 ARP 广播不会穿过路由器? 路由器默认不转发广播帧,这正是"隔离广播域"的含义。 所以跨网段必须先有网关,由网关代答 ARP 或直接路由,而不是让 ARP 广播满网飞。
Q:Hub、交换机、路由器怎么排? Hub 工作在物理层,所有端口共享一个冲突域,半双工;交换机按 MAC 转发,每端口独立冲突域; 路由器按 IP 转发并隔离广播域。三者是从"共享"到"隔离"的递进。
Q:交换机接成环路会怎样? 广播帧会在环里无限循环,形成广播风暴,MAC 表也被反复覆盖,网络很快瘫痪。 所以要用 STP / RSTP 阻塞冗余链路,或在数据中心用堆叠、MC-LAG 替代。
小结
交换机用 MAC 表在广播域内做精确投递,路由器用路由表在网段之间择路转发。 记住两条铁律:MAC 逐跳改写、IP 端到端保持;交换机隔离冲突域、路由器隔离广播域。 把这两条讲清,再谈三层交换、VLAN、NAT,逻辑都不会乱。