路由协议
静态/动态、OSPF、BGP、负载均衡。
路由协议:静态路由、OSPF 与 BGP
这一课你将能做到
- 配置静态路由并用最长前缀原则解释路由匹配结果
- 用「邻居表 → 数据库 → 路由表」三件套读懂 OSPF
- 用一句话讲清 BGP 为什么叫「路径向量」,以及它和 OSPF 的本质区别
为什么要学
路由是「包往哪走」的唯一答案。K8s 的 CNI、云上的路由表、公司到云的专线,全是路由的变体。面试里「OSPF 和 BGP 的区别」是网络岗必考题;运维日常里「补一条路由解决回程不通」是高频操作。这一课先给你能上手的命令,再给你能讲出来的直觉。
先建立图像
┌──────┐ ┌──────┐ ┌──────┐
内网A ──────┤ R1 ├───┤ R2 ├───┤ R3 ├────── 内网B
└──────┘ └──────┘ └──────┘
OSPF: R1↔R2↔R3 互相通告链路状态,各自算最短路径(一个组织内)
BGP: 企业网 ↔ ISP ↔ ISP 按策略与路径选路(组织之间)
R1 路由表(简化):
10.1.0.0/16 → 直连 eth0 (最长前缀优先)
10.2.0.0/16 → 下一跳 192.168.12.2 (OSPF 学到,管理距离 110)
0.0.0.0/0 → 下一跳 203.0.113.1 (默认路由,兜底)
跟着做
步骤 1:Linux 上配静态路由
# 场景:本机去 10.2.0.0/16 要绕行网关 192.168.1.254
sudo ip route add 10.2.0.0/16 via 192.168.1.254 dev eth0
ip route show # 验证已入表
ip route get 10.2.0.5 # 模拟查表:这个包会从哪出
sudo ip route del 10.2.0.0/16 via 192.168.1.254 # 删除
步骤 2:一分钟起一个动态路由实验
docker run -d --name r1 --privileged frrouting/frr:v8.4.0
docker exec r1 vtysh -c "show ip route" # FRR:开源路由套件,命令风格同 Cisco
真机 / 模拟器上的 OSPF 三件套(Cisco 风格):
show ip ospf neighbor # 邻居表:谁活着
show ip ospf database # LSDB:全网链路状态地图
show ip route ospf # 路由表里 O 开头的条目
步骤 3:验证最长前缀原则
sudo ip route add 10.2.1.0/24 via 192.168.1.1 # 更长的前缀
ip route get 10.2.1.5 # → 192.168.1.1(/24 赢了 /16)
ip route get 10.2.2.5 # → 192.168.1.254(回落到 /16)
步骤 4:用 traceroute 看逐跳选路
traceroute -n example.com # 每一行 = 一台路由器
mtr -n -c 20 example.com # 持续观察丢包与延迟在哪一跳
步骤 5:两台 FRR 容器把 OSPF 跑起来
# r1 与 r2 的互联接口各配同网段 IP,再启用 OSPF
docker exec r1 vtysh -c "conf t" -c "interface eth1" \
-c "ip address 192.168.12.1/24" -c "router ospf 1" -c "network 192.168.12.0/24 area 0"
docker exec r2 vtysh -c "conf t" -c "interface eth1" \
-c "ip address 192.168.12.2/24" -c "router ospf 1" -c "network 192.168.12.0/24 area 0"
docker exec r1 vtysh -c "show ip ospf neighbor" # 状态到 Full 即邻接成功
docker exec r1 vtysh -c "show ip route ospf" # 学到对端通告的网段