01 — 路由与地址本质
01 — 路由与地址本质
这是围绕 CGNAT 问题的旧专题,已按新体系纠错。系统主线请先读 路由器、接口与默认网关。
家用路由器 ≠ 路由器
你家里那个长着几根天线的方盒子,在工业界并不叫"路由器",而是网关综合体——集成了调制解调器、路由器、交换机、无线 AP、DHCP 服务器和 NAT 网关的缝合怪。
要理解纯粹的网络原理,必须把这些功能拆解开来看。
CGNAT (100.64.0.0/10) 与私网 (192.168.x.x) 有本质区别吗?
结论:它们都不是普通全球单播地址,但标准规定的用途和管理域不同。 RFC 1918 用于组织私网,RFC 6598 的 100.64.0.0/10 是运营商与用户设备之间的 Shared Address Space。NAT 数据面可以采用相似技术,但不能因此说地址语义完全相同。
IPv4 地址枯竭的妥协
世界上只有 43 亿个 IPv4 地址,远远不够分。RFC 1918 划定了几块私有地址:
| 网段 | 用途 |
|---|---|
10.0.0.0/8 |
大型企业 |
172.16.0.0/12 |
中型企业 |
192.168.0.0/16 |
家用路由器默认 |
这些地址就像内部工号,不能在公网上路由。
CGNAT 的诞生
运营商手里的公网 IP 也不够发了。他们的思路:既然你家里能搞 NAT(把家里几台电脑藏在一个光猫 IP 后面),那我在省级骨干网层面,能不能也搞一个超级大的 NAT,把你整个小区都藏在我运营商的几个公网 IP 后面?
为什么必须用 100.64.x.x?
如果运营商使用与用户 LAN 重叠的 RFC 1918 前缀,可能发生地址重叠:
例如 WAN 和 LAN 都落在
192.168.1.0/24,直连路由、ARP 与管理地址可能冲突,导致路由器无法按预期选择 WAN 下一跳。它通常表现为错误出接口或不可达,不应笼统称为“死循环”。
为此,IETF 在 RFC 6598 中专门划出 100.64.0.0/10,命名为 CGNAT 保留地址。
大局观结论: 100.64.0.0/10 不应作为普通全球单播地址传播,主要供服务提供商部署 CGN 使用。它避免占用客户常见 RFC 1918 空间,但不能保证所有网络设计都“完美不冲突”。
真正的路由器长什么样?(端口与 IP 的关系)
忘掉家用路由器,想象一台企业级核心路由器(如思科机架式设备)。
交换机 vs 路由器
| 交换机 (Switch) | 路由器 (Router) | |
|---|---|---|
| 工作层 | 数据链路层(L2) | 网络层(L3) |
| 端口标识 | 按 VLAN/MAC 转发,管理或 SVI 可有 IP | 执行三层终结的逻辑接口通常有 IP,也可 unnumbered |
| 功能 | 同一局域网内互联 | 连接不同子网 |
| 端口命名 | 端口 (Port) | 接口 (Interface) |
关键认知: 常规三层接口连接一个 IP 子网并配置该链路可用地址;但二层成员口、聚合成员、unnumbered 口不必配置 IP。物理口、逻辑接口与地址不是严格一一对应。
经典拓扑
接口 0/0 (eth0): 192.168.1.1/24 → 研发部(所有电脑网关填这个)
接口 0/1 (eth1): 192.168.2.1/24 → 销售部
接口 0/2 (wan0): 203.0.113.5/30 → 电信光纤,通向互联网
路由表到底记录什么?(打破幻觉)
很多初学者以为路由表记录的是:目标 IP → 具体设备 MAC。这是绝对错误的! 那是 ARP 表干的活。
路由表记录的仅仅是"指路牌":去往哪个网段 → 从哪个物理接口扔出去 → 下一跳是谁。
真实路由表示例:
| 目标网络 | 子网掩码 | 接口 | 下一跳 |
|---|---|---|---|
| 192.168.1.0 | 255.255.255.0 | eth0 | 0.0.0.0(直连) |
| 192.168.2.0 | 255.255.255.0 | eth1 | 0.0.0.0(直连) |
| 0.0.0.0(默认) | 0.0.0.0 | wan0 | 203.0.113.6(电信网关) |
路由决策过程: 销售部电脑发包到 8.8.8.8。路由器查表,前两条不匹配,命中第三条默认路由。路由器不关心 8.8.8.8 在哪,它只做一件事:把包从 wan0 接口扔给下一跳 203.0.113.6。任务完成。
路由器的冰冷本质:只是一个无情的网络岔路口指路人。