Files
cs-note/hhs/NETWORK/02-链路层/04-Switch与路由器.md
T
2026-05-24 11:42:38 +08:00

5.9 KiB
Raw Blame History

tags, create time
tags create time
计算机网络
Switch
Hub
Router
VLAN
2026-05-17 23:20

Switch vs Hub vs Router

概述

这三种设备是构建局域网的核心组件,但它们工作在完全不同的 OSI 层,转发决策的依据也不同。理解它们的差异是设计网络拓扑的基础。

特性 Hub(集线器) Switch(交换机) Router(路由器)
OSI 层级 物理层 L1 数据链路层 L2 网络层 L3
寻址依据 无(全量复制) MAC 地址 IP 地址 + 路由表
冲突域 全部共享 每个端口独立 每个接口独立
广播域 不隔离 不隔离(同 VLAN) 天然隔离
性能 极低(半双工) 高(全双工并行) 依赖 CPU/ASIC
现代使用 ❌ 已淘汰 ✅ 局域网核心 ✅ 网关/边界

Hub(集线器)——已淘汰的共享介质

工作原理

Hub 本质上就是一个多端口的中继器(Repeater)。收到任何端口的电信号,放大后复制到所有其他端口。

flowchart LR
    A["PC-A 发送"] -->|"信号"| H[Hub]
    H -->|"原样复制"| B["PC-B (收到!)"]
    H -->|"原样复制"| C["PC-C (碰撞! 🔥)"]
    
    style H fill:#FF6B6B,color:#fff

致命缺陷

  1. 所有端口在同一冲突域:两台同时发送 = 碰撞 → CSMA/CD 退避
  2. 只能半双工:同一时刻要么收要么发
  3. 无法隔离故障:一台 PC 中毒疯狂发包会影响所有人
  4. 安全性差:所有流量对所有端口可见

Switch(交换机)——现代 LAN 核心

工作原理

Switch 为每个端口维护一张独立的 MAC 表,只将帧转发到目标端口,实现"点对点"通信。

flowchart TD
    S["Switch<br/>MAC 表: mac_A→Port1, mac_B→Port2"]
    
    PC_A["PC-A → Port1"] -->|"发给 Mac_B"| S
    S -->|"仅从 Port2 发出"| PC_B["PC-B"]
    
    PC_D["PC-D → Port4"] -->|"未知目标"| S
    S -->|"泛洪到 Port1,2,3"| N["Port1~3 都收到<br/>只有正确的会处理"]
    
    style S fill:#98FB98,color:#000

MAC 表学习流程

sequenceDiagram
    participant SW as Switch
    participant A as PC-A (mac_A)
    participant B as PC-B (mac_B)
    
    A->>SW: Frame(mac_A→mac_B) from Port1
    SW->>SW: Learn: mac_A on Port1
    SW->>B: Flood (mac_B unknown)
    
    B->>SW: Reply Frame(mac_B→mac_A) from Port2
    SW->>SW: Learn: mac_B on Port2
    
    A->>SW: Next Frame(mac_A→mac_B) from Port1
    SW->>SW: Forward directly → Port2 only ✅

Switch 的关键优势

特性 说明
每个端口一个冲突域 端口间互不影响
全双工通信 收发光纤分开,可同时对发对收
硬件转发 ASIC 芯片查 MAC 表,延迟 < 1ms
背板带宽 交换机内部总线,决定交换能力上限
VLAN 支持 802.1Q 实现逻辑分割

常见 Switch 规格参数

参数 说明 典型值
端口速率 千兆/万兆/25G/100G 1/10 Gbps
端口数 24/48 口最常见 —
背板带宽 内部交换容量 双向 ≥ 端口总数 × 速率 × 2
包转发率 PPS (packets per second) 10G 端口满速 ≈ 14.88M PPS
缓存 SRAM 缓冲丢包 几 MB ~ 几百 MB

Router(路由器)——跨网段互联

工作原理

Router 运行在 OSI 第三层,根据 IP 路由表做出转发决策,不同接口属于不同的子网和广播域。

flowchart TD
    subgraph "LAN 1 — 192.168.1.0/24"
        A["PC-A 192.168.1.10"]
        S["Local Switch"]
    end
    
    subgraph "Router Gateway"
        R["Router eth0: .1 / eth1: .1"]
    end
    
    subgraph "LAN 2 — 192.168.2.0/24"
        B["PC-B 192.168.2.10"]
        S2["Local Switch"]
    end
    
    A --> S --> R
    R --> S2 --> B
    
    style A fill:#DDA0DD,color:#000
    style B fill:#DDA0DD,color:#000
    style R fill:#98FB98,color:#000

Router 转发动作详解

当 PC-A(192.168.1.10)要发数据给 PC-B(192.168.2.10)时:

sequenceDiagram
    participant A as PC-A
    participant R as Router
    participant B as PC-B
    
    Note over A: 判断:192.168.2.10 不在本地子网?<br/>→ 走默认网关
    A->>R: Frame{SrcMac=A, DstMac=Gateway}<br/>IP(Src=192.168.1.10,<br/>     Dst=192.168.2.10)
    Note over R: Step 1: Strip Ethernet Header<br/>Step 2: 校验 IP Checksum<br/>Step 3: 查路由表 → 下一跳 via eth1<br/>Step 4: ARP 找 B 的 MAC<br/>Step 5: Rebuild Ethernet Header
    R->>B: Frame{SrcMac=Gateway, DstMac=B}<br/>IP(Src=192.168.1.10,<br/>     Dst=192.168.2.10)
    Note over R: ← MAC 改了 ←          IP 没变

关键规则:IP 不变,MAC 逐跳改

flowchart LR
    A["原始帧<br/>SrcMAC=A DstMAC=R1-E0<br/>SrcIP=A DstIP=B"] -->|"通过 Router1"| M1["帧改写<br/>SrcMAC=R1-E1 DstMAC=R2-E0<br/>SrcIP=A DstIP=B ← 不变!"]
    M1 -->|"通过 Router2"| M2["帧改写<br/>SrcMAC=R2-E1 DstMAC=B<br/>SrcIP=A DstIP=B"]
    
    style A fill:#DDA0DD,color:#000
    style M2 fill:#98FB98,color:#000

[!tip] 一句话记住区别 Switch 看 MAC 转发,Router 看 IP 转发。 Switch 是"同城快递",Router 是"跨省物流"。

三者的协作关系

现实网络中,三者通常协同工作:

PC ──┬── Hub(旧时代遗留)   ← 冲突域大,已淘汰
     ├── Switch(局域网核心) ← MAC 转发表驱动,全双工
     │      │
     │      └── Router(网关) ← IP 路由表驱动,隔离广播域
     │             │
     │             └── ISP Router → Internet
     │
     └── Wireless AP → Switch (AP 本身不转发)

关联笔记