路由的原理是什么?路由表是怎么工作的?
简化版
路由解决「数据包该往哪个方向走下一跳」的问题。每个路由器都有一张路由表,记录「去往某个网段,应该从哪个接口、转发给哪个下一跳」。路由器收到包后,取出目的 IP,在路由表里用最长前缀匹配找到最合适的一条,把包转发到对应的下一跳——如此一跳一跳接力,直到抵达目标网络。找不到匹配就走默认路由(0.0.0.0/0)。
详细版
路由表长什么样(简化):
| 目的网络 | 子网掩码 | 下一跳 | 出接口 |
|---|---|---|---|
| 192.168.1.0 | /24 | 直连 | eth0 |
| 10.0.0.0 | /8 | 10.1.1.1 | eth1 |
| 0.0.0.0 | /0(默认路由) | 1.2.3.1 | eth2 |
转发过程:
- 路由器收到一个数据包,取出目的 IP;
- 拿目的 IP 去和路由表每条记录的「目的网络 + 掩码」比对(IP AND 掩码 == 目的网络?);
- 可能匹配多条,选掩码最长(前缀最精确)的那条——这叫最长前缀匹配;
- 按这条记录,从指定出接口转发给指定下一跳;
- 下一跳路由器重复这个过程,直到到达目标网络,最后由目标网络内部(ARP + MAC)投递到具体主机。
默认路由(0.0.0.0/0):匹配所有目的地,作为「兜底」——路由表里没有更精确匹配时就走它(通常指向上级/运营商网关)。
完整版教学
一、路由的核心思想:分布式的「一跳接力」
互联网如此庞大,没有任何一台设备知道「到某个 IP 的完整路径」。路由采用的是分布式、逐跳决策的方式:
- 每个路由器只负责一件事——根据目的 IP,决定「下一跳该发给谁」,把包往正确的方向推进一步;
- 它不需要知道完整路径,只要保证「朝目标更近一步」;
- 一个个路由器接力,数据包就像击鼓传花一样,一跳跳最终到达目标网络。
这就像开车没有全程地图,但每个路口都有路牌告诉你「去某方向往这走」,跟着路牌一个路口一个路口地开,最终就能到目的地。路由表就是路由器的「路牌」。
二、最长前缀匹配:为什么要选最精确的
路由表里可能有多条记录都「匹配」同一个目的 IP。比如目的 10.1.2.3:
10.0.0.0/8 → 下一跳 A (匹配,前缀 8 位)
10.1.0.0/16 → 下一跳 B (也匹配,前缀 16 位,更精确)
10.1.2.0/24 → 下一跳 C (也匹配,前缀 24 位,最精确)
三条都匹配,该听谁的?答案是最长前缀匹配——选**掩码最长(前缀位数最多)**的那条,即 10.1.2.0/24 → 下一跳 C。
为什么?因为前缀越长,网络范围越具体、越精确。/24 精确到一个小网段,/8 是个巨大的范围。「更具体的路由」通常代表「更接近目标的、专门的路径」,应当优先。默认路由 /0 前缀最短、范围最大(匹配一切),所以它永远是最后的兜底选择。
三、路由表从哪来:直连、静态、动态
路由表里的记录有三个来源:
- 直连路由:路由器接口直接连着的网段,配好接口 IP 就自动生成,优先级最高(就在门口,直接送达);
- 静态路由:管理员手动配置的路由。简单、可控,但网络变化时要手动改,适合小型或稳定的网络;
- 动态路由:路由器之间运行路由协议(如 OSPF、BGP、RIP)自动学习和交换路由信息,网络拓扑变化时能自动更新。大型网络(尤其互联网骨干)必须用动态路由(详见「静态路由和动态路由」那道题)。
三者可以并存,路由器按优先级和最长前缀匹配综合选路。
四、路由 vs 交换:网络层 vs 链路层
初学者常混淆「路由」和「交换」,其实是不同层次的「转发」:
- 路由(路由器,网络层):跨网络转发,看IP 地址,靠路由表选下一跳,连接不同网段;
- 交换(交换机,链路层):同一局域网内转发,看MAC 地址,靠 MAC 地址表选端口。
一个数据包跨网络传输时,是「路由 + 交换」配合:路由器决定「下一跳是哪个网络/路由器」(IP 层面),而每一段链路内部靠交换机按 MAC 把帧送到下一跳设备(详见「路由器和交换机的区别」那道题)。
五、路由与 ARP、网关如何协同
路由决定「下一跳的 IP」,但实际发送数据帧要用 MAC 地址,这就要 ARP 配合:
- 路由器(或主机)用路由表算出「下一跳 IP」;
- 如果下一跳不是直连主机而是要出本网段,就把包发给网关(下一跳路由器);
- 用 ARP 解析出下一跳的 MAC 地址,封装成帧发出去(详见「ARP 协议」那道题)。
对普通主机而言,「路由表」通常很简单:本网段直连,其余全部走默认网关(详见「默认网关」那道题)。复杂的选路是路由器的活。
六、常见误区
- ❌ 以为路由器知道完整路径——它只做「下一跳」决策,逐跳接力,不掌握全程。
- ❌ 匹配多条时随便选一条——用最长前缀匹配,选前缀最精确的那条。
- ❌ 把路由和交换混为一谈——路由看 IP 跨网段(网络层),交换看 MAC 在局域网内(链路层)。
- ❌ 以为路由表都靠手动配——大型网络靠动态路由协议(OSPF/BGP)自动学习维护。
六、常见误区与追问
| 考点 | 正确口径 |
|---|---|
| 路由表 | 记录目的网段、下一跳、出口接口和 metric |
| 匹配规则 | 最长前缀匹配优先 |
| 路由来源 | 直连、静态、动态路由协议 |
10.1.2.3 matches:
10.0.0.0/8
10.1.0.0/16
10.1.2.0/24 <- longest prefix wins
0.0.0.0/0
路由选择先看“最具体的网段”,再看优先级和 metric,不是简单选最近的一条。
- 误区:路由器保存每台主机的路径。 路由表通常按网段聚合,不会为互联网每台主机保存单独路径。
- 误区:默认路由优先级最高。 默认路由是 0.0.0.0/0,前缀最短,只有无更具体路由时才匹配。
- 误区:动态路由一定比静态路由好。 动态路由适合复杂网络,静态路由简单可控,场景不同。
- 追问:最长前缀匹配是什么? 多个路由都匹配目的 IP 时,选择前缀长度最长、范围最小的那条。
- 追问:metric 有什么作用? 同等匹配条件下,用 metric 表示成本,选择成本更低路径。
- 追问:路由环路怎么避免? 可通过 TTL、路由协议算法、水平分割、毒性逆转和收敛机制降低风险。
七、加强记忆
路由是分布式的逐跳接力:每个路由器用路由表(目的网络→下一跳/出接口),根据数据包的目的 IP,通过最长前缀匹配选最精确的一条转发到下一跳,直到抵达目标网络,找不到就走默认路由 0.0.0.0/0。路由表来自直连/静态/动态(OSPF、BGP)。路由(网络层看 IP 跨网段)不同于交换(链路层看 MAC 局域网内),实际发送还需 ARP 解析下一跳 MAC。