静态路由的全部优点是「可控」,全部缺点是「不会变」。 浮动静态靠管理距离做备份,但它只认接口状态,不认路径通不通。
03.05.04 讲完怎么查表,从这一节开始讲「表里的行是怎么来的」。 来源只有两类:人写的(静态)与协议学的(动态)。先看人写的。
一、一条静态路由要写三个东西
目的前缀(去哪儿)、下一跳地址或出接口(交给谁)、可选的管理距离(多可信)。
下一跳与出接口二选一,但含义不同:写出接口是「从这个口发出去」,写下一跳是「交给这个地址」。 在以太网这种多路访问链路上,写下一跳更安全——写出接口会让设备对每个目的地址都发一次 ARP, 表会迅速膨胀。
点对点链路上两者等价,因为对端只有一个,写哪个都行。
二、浮动静态:用管理距离做备份
做法极简:主路由用默认管理距离(静态是 1),备份路由写一个更大的值(比如 200)。 值小的先生效,主路由消失后备份才浮上来。
路由 管理距离 状态
直连 0 永远最优 主静态路由 1 生效中 浮动静态(备份) 200 藏在表里,不转发 OSPF 110 生效中,但输给静态 RIP 120 生效中,输给 OSPF
注意 OSPF 110 与静态 1 的关系:静态比 OSPF 可信。 所以「配了一条静态默认路由,OSPF 学到的默认路由就不管用了」——现场常见的「OSPF 邻居起来了但流量不走它」多半是这个原因。
三、切换时间取决于「怎么发现主路由死了」
浮动静态是被「主路由消失」触发的,而主路由消失只有两种途径:
一、接口 down:物理断了或协议断了,毫秒级,立刻切。 二、下一跳不可达:要等 ARP 超时或探测失败,几秒到几十秒。
还有第三种情况:设备活着,但转发坏了。接口不 down、下一跳也 ping 得通,但包就是过不去。 这时候浮动静态永远不切——因为它只认「接口状态」,不认「路径通不通」。
所以「静态路由不能做真正的高可用」。 要做路径探测得上 BFD、IP SLA 这类机制,或者干脆换动态路由。
四、静态路由仍然有它的位置
末梢网络:只有一条出口的分支,写一条默认路由就够,跑协议纯属浪费。 默认路由:全网往往只在出口设备上写一条,其余靠协议分发。 临时调试与引流:加一条 /32 把某个地址引到指定设备,比改协议快得多。
一条经验:路由条目少于 10 条、拓扑半年不变,就用静态。超过这个量级,人会写错, 而写错的路由比没有路由更难查。
五、动手 Demo:静态路由与浮动静态路由,主备怎么切
这段对比直连、主静态、浮动静态、OSPF、RIP 五种来源的管理距离与状态, 再按「接口 down」与「下一跳不可达」两种触发算切换时间。
for name, ad, note in routes:
T([name, u"%d" % ad, note], [0, 0, 0])
P(u" 接口 down 切换:毫秒级;下一跳不可达:%d 秒以上。" % 30)
实跑输出:
--------------------------------------------------------------------
静态路由与浮动静态路由,主备怎么切
--------------------------------------------------------------------
**静态路由是「手写的路线」**:不会自己变,但也不会自己错。
**浮动静态路由是它的高可用版本**:平时不生效,主路由一断就顶上。
**做法是靠管理距离**:主路由用默认值(静态是 1),备份路由写一个更大的值(比如 200)。
**值小的先生效,主路由消失后备用的才浮上来。**
路由 管理距离 状态 什么时候生效
-------------------------------------------------------------------------
直连 0 永远最优 接口起来就有
主静态路由 1 生效中 默认
浮动静态(备份) 200 不生效(藏在表里) 主路由消失时
OSPF 110 生效中 比静态差
RIP 120 生效中 比 OSPF 差
**注意 OSPF 110 与静态 1 的关系**:静态路由比 OSPF 更可信。
**所以「配了一条静态默认路由,OSPF 学到的东西就不管用了」**
这是现场常见的「明明 OSPF 邻居起来了但流量不走」的原因。
**算一下切换的代价**:浮动静态靠「主路由消失」触发,
而主路由消失靠「接口 down」或者「下一跳不可达」。
· 接口 down:**毫秒级**,接口一断立刻切。
· 下一跳不可达:要等 ARP 超时或探测失败,**几秒到几十秒**。
**所以浮动静态的实际切换时间取决于「怎么发现主路由死了」。**如果对端是「设备还活着但转发坏了」,
接口不会 down——**这时候静态路由永远不切。**
**这就是为什么「静态路由不能做真正的高可用」**:它只认「接口状态」,不认「路径通不通」。
**要做路径探测得用 BFD、IP SLA 这些机制,或者干脆上动态路由。**
「200 藏在表里」这一行的意思:它确实在路由表里,但不参与转发。 所以 show 命令能看到它,ping 却不通——这是正常的,不是故障。
「OSPF 输给静态」这一行是现场高频坑:很多人以为「动态路由更聪明,应该它说了算」, 但管理距离的规则是「静态更可信」,因为静态是人明确指定的。
最后那段「设备活着但转发坏了」是静态路由的死穴:它没有探测能力。要做探测得另外配 BFD, 这也解释了为什么运营商的备用链路上几乎都能看到 BFD。
30 秒实验
- 在你电脑上加一条到某网段的静态路由,看它出现在表里哪一行。
- 用 route print 或 ip route 看管理距离与度量值两列。
- 想一想:如果出口有两条宽带,你会怎么配备份?
常见误区
- 以为静态路由不如动态路由。它更可控,末梢网络首选。
- 以为浮动静态能检测路径故障。它只看接口状态。
- 以为备份路由「没生效就是没配上」。它藏在表里,这是设计如此。
自测三问(点开对答案)
1. 浮动静态路由靠什么机制实现主备切换? —— 给备份路由设更大的管理距离,主路由消失后它才浮上来。 2. 为什么静态路由做不了真正的高可用? —— 它只认接口状态,设备活着但转发坏了时不会切换。 3. 什么时候该用静态路由而不是动态? —— 条目少于 10 条、拓扑长期不变、末梢网络或临时引流。下一节:规模一大,静态就写不过来了——看动态路由。
- ☐ (本节完,下一节 03.05.06 动态路由选择)