1. 自治系统内部的路由先把边界和分工想明白自治系统这个词第一次接触的人容易把它想成一个抽象的管理概念但它其实是路由协议设计里最实际的一条分界线。简单说一个自治系统就是由同一个管理主体运营、使用统一路由策略的一批网络和路由器的集合对外用同一个编号标识自己编号范围里 64512 到 65534 这一段是留给大家在实验和内部环境里随便用的私有号。这个编号在实验环境里随手写一个就行比如我习惯用 65001 起步。为什么要划这条线因为自治系统内部的路由协议RIP、OSPF 这一类统称 IGP和自治系统之间的路由协议BGP解决的根本不是同一个问题把它们混在一起谈配置和排障的思路就会全乱。这篇东西我想把 IGP 这一层拆开讲透重点落在 RIP 和 OSPF 两个协议上它们各自怎么工作、度量怎么算、环路怎么防、区域怎么划、实际敲命令的时候哪些参数必须对齐、出问题了从哪儿下手。1.1 从一张网到多个域分层带来的实际收益单台路由器管自己的直连网段这件事没什么难度接口配上地址、打开协议直连路由自然就有了。麻烦的是当设备数量涨到几十台、上百台网络从一条线变成一张网、再变成一张带环的网每台设备都需要知道去某个远端网段该往哪个口发。如果所有路由器都维护一张完整的全网拓扑图那么任何一根线抖动一下全网设备都要重新算一遍这个代价在小网络里看不出来在几百台设备的环境里就是灾难。分层的思路正是从这里来的把大网切成若干区域每个区域只维护自己区域内的精确拓扑跨区域的部分只保留方向 距离这种粗略信息。这样一处链路故障的影响范围被限制在区域内部其他区域甚至感知不到。这个收益是实打实的但代价也得说清楚。区域边界上的路由器负责把一个区域的明细转成汇总路由丢给其他区域的那台设备会把原本精确的拓扑信息压缩成一条条汇总条目压缩就意味着信息丢失丢失就意味着可能出现次优路径——明明有一条更近的路但因为汇总之后只看到一个方向流量绕远了。这是所有分层路由设计的通病OSPF 有其他链路状态协议也有。我在做区域规划的时候通常会想清楚一件事哪些网段之间的流量是高频的、对时延敏感的这些网段尽量放在同一个区域里不要让它们跨边界走汇总路由。区域划分的第一原则不是按部门分按楼层分而是按流量模式分。1.2 IGP 和 EGP 的分工RIP 与 OSPF 各自站的位置自治系统内部跑的是 IGP目标是快速收敛、无环、路径可度量自治系统之间跑的是 EGP实际上就是 BGP目标是策略可控、规模可扩展、连接稳定。这两个目标几乎是对立的快速收敛要求协议对任何变化都立刻反应而稳定性要求协议对抖动要克制不要一有风吹草动就重新选路。所以 BGP 的收敛时间是分钟级的IGP 的收敛时间是秒级的谁也不能替代谁。有些人会问为什么不能全网只用一种协议答案很直接IGP 撑不住几十万条路由的规模BGP 也扛不住高频的拓扑变化。在 IGP 这个候选池里RIP 和 OSPF 代表了两种完全不同的设计哲学。RIP 是距离矢量协议它只知道自己到某个网段有多远、下一跳是谁不知道中间经过了哪些设备靠邻居之间互相听说来传播信息OSPF 是链路状态协议它要求每台设备都收集全区域的链路状态自己跑一遍最短路径算法算出整张路由表。前者实现简单、资源占用低、配置几行就完事后者实现复杂、要维护数据库、要做区域划分但能撑起大型网络。这两个协议我都用过说实话 RIP 在今天的生产环境里已经很少见了但它作为一个理解距离矢量思想的样本价值依然在——很多 OSPF 里看起来莫名其妙的机制追根溯源都能在 RIP 踩过的坑里找到对应。2. RIP拿跳数当尺子简单到有点固执RIP 的历史比我入行的时间长得多它诞生在一个处理器算力极其有限、链路带宽普遍只有几十 K 的年代那个年代的设计约束造就了它今天看起来所有不合理的地方。理解这些约束比背它的配置命令有用得多。2.1 报文格式、四个定时器和听说式的路由学习RIP 的报文封装在 UDP 里端口 520这个设计本身就说明了它的年代感——把路由协议跑在传输层之上意味着它要依赖 UDP 的校验和与复用机制但也带来了一点开销和一点安全隐患。版本上RIPv1 用广播255.255.255.255发更新报文里不带子网掩码属于有类路由协议也就是它认为 10.0.0.0/8 下面所有网段都必须是 /8RIPv2 改成组播 224.0.0.9报文里带上子网掩码支持 VLSM 和 CIDR还加了 MD5 明文认证的选项。今天要上 RIP一定是 v2v1 除了在老设备兼容场景下基本没有讨论价值。RIP 靠四个定时器维持整个状态机这几个数字必须记牢因为排障的时候大部分现象都能用它们解释定时器默认值作用失效后的现象更新定时器 Update30 秒周期性把整张路由表从所有非被动接口发出去无这是正常心跳失效定时器 Invalid180 秒超过这个时间没收到某条路由的更新标记为不可达跳数 16路由变 16 跳但还在表里抑制定时器 Holddown180 秒收到度量变大的更新后冻结一段时间不接受更差的信息期间路由不参与选路防止抖动刷新定时器 Flush240 秒超时后彻底从路由表删除路由消失度量就是跳数最大 15 跳16 表示不可达。这个上限直接决定了 RIP 能撑的网络直径不超过 15 台路由器超过就废了。为什么用跳数而不是带宽因为在它设计的年代让每台路由器去感知链路带宽并做加权计算成本太高而跳数是唯一一个不需要额外状态就能比较的量。缺点也明显一条 2M 的窄带链路和一条 10G 的骨干链路在 RIP 眼里都是 1 跳选路的时候完全平等这在今天几乎不可接受。2.2 一个能跑起来的最小实验拓扑与配置我在实验环境里习惯用一个三角形拓扑来验证 RIP因为三角形天然带环能直接观察到水平分割和毒性逆转的效果。三台虚拟路由器 R1、R2、R3R1-R2 用 10.0.12.0/24R2-R3 用 10.0.23.0/24R1-R3 用 10.0.13.0/24各自再挂一个环回口模拟业务网段。! R1 配置 interface GigabitEthernet0/0 ip address 10.0.12.1 255.255.255.0 ! interface GigabitEthernet0/1 ip address 10.0.13.1 255.255.255.0 ! interface Loopback0 ip address 172.16.1.1 255.255.255.255 ! router rip version 2 no auto-summary network 10.0.0.0 network 172.16.0.0 passive-interface Loopback0no auto-summary这行是必须加的不加会出问题。RIP 默认会在有类边界上做自动汇总比如把 172.16.1.0/24 汇总成 172.16.0.0/16 再发出去如果网络里存在子网不连续的划分一边是 172.16.1.0/24另一边是 172.16.2.0/24中间隔着别的网段汇总之后两边都会认为对方是本地直连路由就错了。这个坑在混合地址规划的老网络里特别常见。passive-interface用来把不需要跑协议的接口静默掉环回口、用户接入口都应该加既省资源又减少被探测面。验证的时候三条命令够用show ip route rip ! 看 RIP 学到的路由 show ip rip database ! 看 RIP 自己的数据库包括还没进路由表的 show ip protocols ! 看当前定时器、版本、汇总状态show ip rip database这条容易被忽略但它很有用——抑制中的路由、刚失效还没刷新的路由都会在这里显示路由表里看不到的东西这里能看到。2.3 环路从哪来水平分割、毒性逆转和触发更新的组合拳距离矢量协议最经典的病就是计数到无穷。场景是这样的R1 挂的业务网段 172.16.1.0/24 断了R1 把这条路由标记成 16 跳但 R2 手里还有一条经 R1 到 172.16.1.02 跳的旧信息它会把这个信息又发给 R1R1 一看哦从 R2 走要 2 跳那我自己走就是 3 跳于是改成 3 跳……然后 R2 从 R1 那里学到 3 跳改成 4 跳两边互相抬价一路加到 16 才停。这就是计数到无穷收敛慢得离谱。对付它有三招通常是组合使用水平分割Split Horizon从某个接口学到的路由不再从这个接口发回去。这是最基本的一招直接掐断了把信息还给我的老师这条路径。毒性逆转Poison Reverse水平分割的变种反过来——从某接口学到的路由主动从这个接口发回去但跳数置为 16。好处是邻居能立刻知道这条路不通了不用等定时器。代价是更新报文变大。触发更新Triggered Update拓扑一变立刻发更新不等 30 秒周期。这一招对收敛速度提升最明显。抑制计时器Holddown收到某路由变远了的信息后先冻结 180 秒期间不接受这条路由的更差度量。这一招是防抖动的但也会拖慢正常收敛是把双刃剑。注意事项在部分网状或者点对多点的链路上水平分割可能会误伤——因为从 A 分支学到的路由本来是需要通过同一个物理接口转发给 B 分支的水平分割一拦B 分支就学不到了。老式帧中继环境里这个坑特别经典解决办法是在该接口下关掉水平分割no ip split-horizon代价是环路防护弱了一层。我个人对 RIP 的态度是理解它的机制很有价值但真要在生产里用它必须先确认网络直径不超过 10 跳留点余量、拓扑是简单的树形或星形、链路带宽基本一致。只要有一条不满足就该考虑换协议了。3. OSPF把全网地图摊开每台设备自己算最短路OSPF 的设计思路和 RIP 完全相反它不靠邻居口口相传而是要求每台路由器把我和谁相连、连接的开销是多少这些本地信息打包成链路状态通告LSA泛洪到整个区域最终每台设备手里都有一份完全一致的链路状态数据库LSDB。有了这张完整的地图每台设备独立跑一遍 Dijkstra 最短路径算法算出以自己为根的最短路径树再转成路由表。这个设计的好处是不可能出现计数到无穷因为每台设备都是基于完整地图自己算不存在信任邻居的二手信息这回事。代价是资源消耗高——每台设备要存一份数据库、要跑算法、要维护邻居状态机。区域划分就是为了把这个代价控制住。3.1 邻居状态机从 Down 到 Full 的七个台阶OSPF 排障有八成的功夫在邻居状态上这套状态机必须烂熟于心。两台路由器要成为邻居先要过 Hello 这一关。Hello 报文默认 10 秒发一次广播网络和点对点网络Dead 时间是 Hello 的 4 倍也就是 40 秒在非广播多路访问网络里 Hello 是 30 秒、Dead 是 120 秒。Hello 报文发到 224.0.0.5 这个组播地址DR 和 BDR 额外监听 224.0.0.6。Hello 报文里携带的字段任何一项不一致邻居就起不来必须一致的字段不一致的表现Area ID邻居停在 Down日志提示区域不匹配Hello / Dead 间隔邻居停在 Down双方都收不到对方的 Hello网络掩码广播网络邻居停在 Down 或者 2-Way认证类型和密钥认证失败邻居起不来Stub 区域标志邻居停在 DownMTU影响 DBD 交换邻居卡在 ExStart / Exchange还要注意 Router ID 不能重复重复的话双方都起不来日志里会明确提示。状态机依次是 Down → Init → 2-Way → ExStart → Exchange → Loading → Full。几个关键节点的含义Init我收到了你的 Hello但你的 Hello 里没有我的 Router ID说明你还没听到我。这个状态通常意味着单向通信检查链路方向、ACL、或者一端配了另一端没配。2-Way双方 Hello 里都看到了对方。在广播网络上非 DR/BDR 之间的邻居关系正常就停在 2-Way这是终态不是故障。很多人第一次看到 2-Way 就慌其实完全正常。ExStart / Exchange开始交换数据库摘要DBD 报文协商主从关系。卡在这一步最常见的原因就是 MTU 不一致——DBD 报文比较大MTU 小的一端会丢弃。解决办法要么把两端 MTU 调一致要么在接口下加ip ospf mtu-ignore忽略检查。Loading向邻居请求自己缺的 LSA 明细。卡在这里说明 LSA 传输有问题通常是 MTU 或者链路质量导致的丢包重传。Full数据库同步完成邻居关系建立开始参与 SPF 计算。3.2 LSA 类型、区域划分与 DR/BDR 选举OSPF 有六种常用 LSA各自负责什么必须分清楚否则看数据库就是一团乱麻LSA 类型名称产生者作用范围Type 1Router LSA每台路由器本区域内泛洪Type 2Network LSADR本区域内泛洪描述广播网段Type 3Summary LSAABR跨区域描述其他区域的网段Type 4ASBR SummaryABR告诉其他区域 ASBR 在哪Type 5External LSAASBR全区域描述外部引入路由Type 7NSSA ExternalNSSA 内的 ASBR只在 NSSA 内到 ABR 转成 Type 5区域划分的硬规则只有一条所有非骨干区域必须直接连到骨干区域 0非骨干区域之间不能直接交换 Type 3 LSA必须绕道区域 0 中转。这条规则听起来死板背后有它的道理——它保证了区域间的无环性。两个非骨干区域如果直连就可能形成区域间的环路而 Type 3 LSA 只是距离 方向不像 Type 1 那样带完整拓扑没法靠 SPF 算法自动破环。所以要打通两个非骨干区域要么把它们合并要么拉一条虚链路穿过区域 0。DR/BDR 选举是广播网络以太网特有的机制。一个网段上如果有 N 台路由器两两建邻居就是 N×(N-1)/2 条邻接关系泛洪的报文量爆炸。DR 的作用是把这个网状结构变成星形所有路由器只和 DR/BDR 建立 Full 关系非 DR/BDR 之间只停在 2-Way。选举规则是按优先级默认 1范围 0-2550 表示不参选先比优先级相同再比 Router ID数值大的胜。关键点在于这个选举不抢占——选举完成后新加入的高优先级路由器不会抢走 DR 位置除非原 DR 挂了。所以规划的时候要提前把优先级定好别指望后来加台设备就能顶上。3.3 多区域配置实操与开销调优拓扑设计成R1 在区域 0R2 是 ABR同时连区域 0 和区域 1R3 在区域 1。! R2ABR配置 interface GigabitEthernet0/0 ip address 10.0.12.2 255.255.255.0 ip ospf 1 area 0 ! interface GigabitEthernet0/1 ip address 10.0.23.2 255.255.255.0 ip ospf 1 area 1 ! interface Loopback0 ip address 10.0.0.2 255.255.255.255 ip ospf 1 area 0 ! router ospf 1 router-id 10.0.0.2 auto-cost reference-bandwidth 10000 area 1 range 172.16.0.0 255.255.0.0area 1 range是做区域间汇总把区域 1 里所有 172.16.x.0/24 压成一条 172.16.0.0/16 发到区域 0能显著缩小其他区域的 LSDB 和路由表规模。汇总的前提是地址规划本身是连续的如果地址乱分汇总就无从做起——这也是为什么我一再强调地址规划要在上协议之前就定好。auto-cost reference-bandwidth 10000这行是重点它涉及到 OSPF 开销的计算逻辑。默认参考带宽是 100 Mbps接口开销 参考带宽 / 接口带宽取整且最小为 1。算一下就发现问题了100M 接口100 / 100 110M 接口100 / 10 101000M 接口100 / 1000 0.1取整后是 1百兆口和千兆口的开销完全一样都是 1。这意味着 OSPF 在默认配置下分不出百兆和千兆的优劣选路的时候会视而不见。解决办法就是把参考带宽调大比如调到 1000010 Gbps那么千兆口开销是 10、百兆口是 100、十兆口是 1000区分度就出来了。关键注意auto-cost reference-bandwidth这个值必须全网所有路由器一致。如果一半设备用默认 100、一半用 10000同一段链路在两端算出的开销不同路由计算会彻底乱套出现单向路由、路由环路这类恶性问题。上线之前一定要逐台确认。除了改参考带宽也可以直接在接口上写死ip ospf cost 10这种方式更精确适合需要对某条链路做特殊偏好的场景比如有一条备份链路不希望它被选中就把开销调到很大。4. 收敛、开销、规模两个协议的实测对比与选型理论讲完落到选型上必须拿数据说话。我在虚拟化实验环境里用一个线性拓扑做过几组对照测试R1-R2-R3 三台设备串联中间断开 R2-R3 之间的链路测量路由收敛到稳定的时间。需要说明的是这些数字是实验环境下的观察值真实设备、真实流量负载下会有差异重点看数量级和规律。4.1 三个维度的实测数据与背后原因收敛速度这一项要分情况讨论很多人只看一个总数其实两种故障类型的表现完全不同故障类型RIP 收敛时间OSPF 收敛时间直连链路物理断开1-3 秒触发更新1-3 秒立刻泛洪 LSA对端整机断电 / 静默约 180 秒等失效定时器约 40 秒等 Dead 定时器这个差异很有讲头。RIP 在链路物理断开时表现其实不差因为接口 down 会立刻触发更新1-3 秒就能把路由置为 16 跳传播出去但如果是对端设备整机失联、接口还保持着 up 状态RIP 只能干等 180 秒的失效定时器。OSPF 在这方面好很多因为 Hello 是 10 秒一次、Dead 是 40 秒40 秒内就能判定邻居失效。OSPF 的收敛时间还可以进一步压缩把接口下的 Hello 和 Dead 调小interface GigabitEthernet0/0 ip ospf hello-interval 2 ip ospf dead-interval 8这样对端失联的检测时间能压到 8 秒以内配合 SPF 计算整体收敛可以做到 10 秒左右。但这招有代价Hello 报文频率提高 5 倍CPU 和带宽开销上升而且必须两端配置一致一端改了另一端没改邻居直接起不来。我一般只在对时延特别敏感的链路上下这个手不做全局配置。资源开销这一项OSPF 明显重于 RIP。RIP 的路由表就是一张扁平列表内存占用和路由条数成正比CPU 几乎不用算什么OSPF 要维护 LSDB、邻居状态机、SPF 计算任务内存占用和 CPU 峰值都高一个量级。在低端设备上这个差异会很明显我见过配置较低的设备跑 OSPF 时 CPU 长期在 30% 以上换成 RIP 立刻降到个位数。规模上限决定了选型的边界。RIP 的 15 跳上限是硬约束网络直径超过 15 台路由器就根本不能用没有商量的余地。OSPF 通过区域划分可以撑到几百上千台区域内的路由器数量建议控制在 50 台以内这是经验值不是标准超过之后 LSDB 规模、SPF 计算频率、泛洪开销都会变得难以控制。4.2 选型决策与混合部署的坑选型其实没那么纠结几条判断标准过一遍就清楚了网络直径小于 10 台路由器、拓扑是简单的星形或树形、链路带宽基本一致、对收敛速度没有严格要求 → RIP 能用配置简单、维护成本低小分支机构之间互联是个合理场景。网络规模超过 15 跳、存在带宽差异大的链路、需要快速收敛、需要分区管理 → 只能用 OSPF。网络里有大量外部路由要引入、需要做路由汇总 → OSPF 的汇总能力和 LSA 机制明显更强。真正麻烦的是混合部署也就是一部分区域跑 RIP、一部分跑 OSPF在边界设备上做双向重分发。这里有几个坑必须提前防第一个坑是度量不可比。OSPF 的 cost 和 RIP 的跳数是两套完全不同的尺度重分发的时候不能自动映射必须手工指定种子度量。把 RIP 重分发进 OSPF 时如果不指定默认 cost 是 20把 OSPF 重分发进 RIP 时如果不指定默认跳数是无穷大也就是不重分发这条路由直接丢失。所以必须显式写router ospf 1 redistribute rip subnets metric 100 metric-type 2 ! router rip version 2 redistribute ospf 1 metric 3subnets这个关键字千万别漏漏了之后所有子网路由都不会被重分发进去只重分发有类主网路由这是新手最常踩的一个坑。第二个坑是路由回环。A 协议的路由重分发进 BB 又重分发回 A如果不加控制一条路由会在两个协议之间来回弹跳度量越滚越大。解决办法是用 route-map 打标签tag重分发进来的时候打上标记往回重分发的时候把带标记的过滤掉route-map FROM_RIP deny 10 match tag 100 route-map FROM_RIP permit 20 set tag 200 ! router ospf 1 redistribute rip subnets route-map FROM_RIP第三个坑是管理距离优先级。同一台设备从两个协议学到同一条路由时靠管理距离决定信谁。默认值通常是直连 0、静态 1、OSPF 110、RIP 120。数字小的优先。这个顺序意味着 OSPF 总是压过 RIP如果实际希望走 RIP 那边就必须手工调管理距离但这会引入新的不一致风险改之前想清楚。5. 排障实录这些状态和日志到底在说什么配置敲完不通这时候最忌讳的是瞎改。我的习惯是先看现象归类再按层级往下钻先看邻居状态再看数据库最后看路由表一层一层排除。5.1 RIP 的常见故障速查现象可能原因排查动作路由表里完全没有 RIP 路由network语句没覆盖到接口网段show ip protocols看宣告了哪些网段只有部分路由学不到接口被设成了 passive检查passive-interface配置邻居之间互相学不到版本不匹配一端 v1 一端 v2两端统一version 2部分子网路由丢失自动汇总导致的汇总错误加no auto-summary路由反复消失又出现链路抖动触发抑制计时器看show ip rip database里的抑制状态更新报文发了但对方收不到组播被 ACL 拦、或者接口没开水平分割相关处理抓包看 224.0.0.9 是否到达有一个细节值得单独说RIP 的组播地址 224.0.0.9 是链路本地范围的不会被路由转发所以不存在跨网段收到 RIP 更新这种情况。如果抓包发现 Hello 类报文跨越了路由器那一定是配置或者网络结构有问题。5.2 OSPF 邻居卡在某个状态怎么查这是 OSPF 排障的核心场景我把常见状态和处理方式整理成一张表遇到问题直接对号入座卡在的状态最可能的原因处理办法Down接口没启用 OSPF、区域 ID 不匹配、Hello/Dead 间隔不一致、认证不匹配逐项比对两端配置show ip ospf interface看参数Init单向收到 Hello对端没收到我的检查链路方向、ACL、光纤收发是否单通2-Way广播网络上的非 DR/BDR 关系正常现象不用处理如果是点对点网络卡在 2-Way 才是故障ExStartMTU 不一致、Router ID 冲突show ip ospf interface比对 MTU或者临时加ip ospf mtu-ignore验证ExchangeDBD 报文丢失、链路质量差查接口错包计数、换线换口LoadingLSA 请求得不到响应、MTU 导致大包丢弃同样先查 MTU再看show ip ospf database是否缺条目Full 但路由不对区域划分错误、汇总配置错误、虚链路没通看 Type 3 LSA 是否到达show ip ospf database summary排障的时候我会按这个顺序敲命令基本能定位到 90% 的问题show ip ospf neighbor ! 邻居状态和状态持续时长 show ip ospf interface brief ! 各接口的区域、开销、网络类型 show ip ospf interface GigabitEthernet0/0 ! 详细参数包括定时器和 MTU show ip ospf database ! LSDB 概览看各类 LSA 数量 show ip ospf database router 10.0.0.1 ! 看某台设备的 Type 1 明细 show ip ospf ! 当前 SPF 跑了多少次最后运行时间show ip ospf这条命令里的 SPF 运行次数很能说明问题。如果这个数字在短时间内快速增长说明网络里有持续的拓扑震荡得回头查链路稳定性而不是纠结路由为什么不对。5.3 路由有了但不通往上一层查邻居 Full、路由表里有条目、但 ping 不通这时候问题已经不在路由协议层了得往上走。我遇到过的情况大致这么几类第一类是单向路由。A 能到 BB 回不来ping 通才怪。用traceroute从两端各跑一次对比路径哪一端断了一目了然。这类问题在重分发边界上特别常见因为重分发配置往往是单向写的写了一半忘了另一半。第二类是ACL 或防火墙拦截。路由协议本身跑在组播或者特定端口上业务流量走的是另一套规则路由通了不代表业务通。查的时候要区分控制面通和数据面通。第三类是区域间次优路径导致的非对称转发。去程走区域 0 中转回程走另一条路两端的状态检测设备看到半连接就丢了。这类问题最隐蔽得靠抓包看双向路径才能确认。实操心得排障的时候一定要养成先确认现状再动手的习惯。看到不通就急着改配置很可能把原本正确的部分改坏了最后问题越查越多。我的做法是先把当前的邻居表、路由表、接口状态全部导出存档改一处验一处出问题能立刻回退。我在实际环境里踩过最深的一个坑是在做区域间汇总的时候把汇总掩码写错了本来应该是 /16 写成了 /24结果区域内的明细路由被汇总条目覆盖一部分网段直接黑洞。当时邻居全是 Full、数据库也正常就是部分地址不通查了很久才想到去看汇总配置。从那之后我形成了一个习惯任何汇总配置上线前先在一个网段上验证确认汇总后的覆盖范围完全包含原有的明细一条不多一条不少再推广到全网。汇总本质上是做信息压缩压缩必然有损损掉的那部分如果正好是有用的故障排查的难度会成倍上升因为它不报错、不掉邻居只是悄悄地把流量引到不存在的地方。另外一个想分享的经验是关于参考带宽的。我在一个多厂商设备混跑的环境里遇到过一部分设备默认参考带宽是 100M另一部分出厂就设成了 10G两边对同一条千兆链路的开销算出 1 和 10结果流量全往一侧压另一侧链路长期闲着。这个问题光看路由表看不出来得逐台show ip ospf interface对比开销值才能发现。所以现在我做任何 OSPF 部署第一步都是把所有设备的参考带宽统一写死不依赖出厂默认值这个动作花不了两分钟能省掉后面几天的排查。至于 RIP最后再说一句实在话如果今天要从零设计一个网络我大概率不会选它。但如果接手的是一个已经跑了十几年的老网络里面还有几台低端设备撑着边缘接入那么在不动大结构的前提下把 RIPv1 升到 RIPv2、把自动汇总关掉、把不需要跑协议的接口静默掉这三件事做完就能消掉大部分莫名其妙的故障成本极低收益很直接。技术选型这件事合适永远比先进重要。