网络知识总库

Book Notes · 10 / 14 · 路由实践

Routing TCP/IP 卷I·卷II
精读笔记

Jeff Doyle 的 CCIE 职业发展系列经典(第 2 版,卷II 与 Jennifer Carroll 合著)。这不是一本"翻一翻就能懂"的书,它的定位是实验驱动的协议深读:每个协议你都必须能在实验台上把状态机复现出来,把排障输出逐行看懂。本笔记以原创转述提炼两卷的主线——卷I 的 IGP 三件套、重分发与策略,卷II 的 BGP、组播与 IPv6——并为每一章配上可复现的实验点。

作者 Jeff Doyle / Jennifer Carroll难度 中高阶 · 面向进阶建议用时 约一个月笔记形式 深读档 · 主题精读

全书骨架:从一个自治系统到整个互联网

两卷书合起来回答一个问题:"路由器们是怎么互相商量出一张全球路由表的?" 答案分四步——先在一个自治系统内部用 IGP 三件套(RIP/EIGRP/OSPF,外加 IS-IS)达成一致, 再在多协议共存时用重分发缝合,然后用 BGP 与其他自治系统对话, 最后组播与 IPv6 把问题推广到新场景:

IGP 三件套(RIP / EIGRP / OSPF / IS-IS)→ 重分发与路由策略→ BGP 域间路由→ 组播与 IPv6 概览
FIG.0 — 从自治系统内部(卷I)走向域间(卷II)的知识路径
实验驱动读法

准备 GNS3 或 EVE-NG,每读一个协议就搭一个最小拓扑复现它:看邻居怎么建立、路由怎么收敛、故意断一条链路看状态机怎么走。书里的每个"坑"都要亲手踩过才算读完。

协议 = 状态机

本书最深的假设:动态路由协议本质是一台分布式状态机。排障的八成就是找出"状态卡在哪一步"——邻居停在 Init?卡在 ExStart?路由进了拓扑表却没进路由表?

卷I 对内,卷II 对外

卷I 讲自治系统内部的 IGP 与路由策略,卷II 讲域间的 BGP、组播与 IPv6。两卷的接缝是"重分发"——多协议共存时最危险也最能看出功底的地方。

统一语言:管理距离与度量

思科视角下,所有路由信息最终都被翻译成两个数字:管理距离(信谁)与度量值(走哪条)。掌握这对坐标,就能把任何协议的输出放进同一个框架里比较。

01

路由基础与静态路由 —— 一切从路由表开始

在谈论任何动态协议之前,得先搞清楚路由器到底在维护什么:一张路由表。 这一章是全书的语法课,后面的 RIP、EIGRP、OSPF、BGP 都只是"往这张表里填条目的不同方式"。

路由表的四要素

前缀 / 掩码目的网段——路由器匹配的是"前缀",不是具体主机地址 下一跳 / 出接口包该交给谁、从哪个口送出去 度量值 (metric)同一路由来源内部,衡量"哪条路径更好" 管理距离 (AD)不同路由来源之间,衡量"信谁"——直连最可信,静态次之,各动态协议依次排开
FIG.1 — 路由条目的解剖:四个字段,两级裁决

两个数字常被混淆,记住一句话:管理距离比"出处",度量值比"路径"。 同一条前缀被静态路由和 OSPF 同时学到,先按管理距离选出处; 出处定了之后若有多条路径,再按度量值选哪条走。 这个两级裁决的顺序,是后面所有章节反复用到的裁判规则。

路由条目的来源只有三种:接口UP 时自动产生的直连路由、管理员手工写下的静态路由、 动态协议算出来的动态路由。可信度按这个顺序天然递减—— 亲眼所见的直连当然比听来的传闻可靠,这正是管理距离排序背后的直觉。

最长前缀匹配:查表的唯一规则

路由表里可能同时存在 10.0.0.0/8、10.1.0.0/16、10.1.1.0/24 三条都"沾边"的条目。目的地址 10.1.1.7 会走哪条? 永远是掩码最长的那条——更具体的路由优先,与度量值无关。

这条规则看似简单,却是大量排障的钥匙: 流量"不按预期走"时,先怀疑路由表里藏着一条更长的前缀把流量截走了。 它同时也是汇总设计的基石——汇总路由兜底,明细路由择优,两层各安其位。

静态路由:简单,但有三处暗礁

静态路由的适用场景很明确:末节网络(stub)只有一条出口、默认路由指向运营商、 小规模拓扑追求完全可控。它的局限同样明确—— 网络一大、拓扑一变,手工维护就成了事故源头。三个必须吃透的概念:

  • 递归查询:静态路由可以只写下一跳地址,而下一跳本身可能也要查路由表才能确定出接口。一条静态路由可能引发多次查表,链式依赖断一环全断。
  • 默认路由:0.0.0.0/0 是最短的前缀,按最长匹配它"兜底"所有流量——这是"不知道往哪走就往这走"的标准表达,末节网络几乎只需要它。
  • 浮动静态路由:给静态路由配一个比动态协议更差的管理距离,平时被动态路由压在表外,动态路由失效时它浮上来顶班——最朴素的备份方案。

实验建议:两台路由器、两个回环网段,只配静态路由把双向流量跑通—— 注意"通"是双向的,回程路由忘了写是新手第一个坎。 然后故意只写下一跳不写接口,观察递归解析如何发生; 再加一条浮动静态,断掉主链路看它接管,恢复主链路看它退回。

易混淆:静态路由"写下一跳 IP"和"写出接口"不等价。 写接口时路由器认为目标网段"直连",可能在对等网络上疯狂发 ARP; 写下一跳则触发递归查询。在以太网这种多路访问接口上,更稳妥的习惯是两者都写。
02

RIP 与 RIPv2 —— 距离矢量的活化石

RIP 是动态路由协议的祖师爷,也是最纯粹的"距离矢量"样本: 每台路由器只告诉邻居"我到某网段有多远",不描述拓扑本身。 读懂 RIP,你就读懂了这一类协议的荣光与天花板。

传闻式路由:距离矢量的本质

距离矢量协议里,路由是"传闻":我听说隔壁老王离目标三跳,那我记四跳。 没人见过完整的地图,只有道听途说的距离与方向。 这个比喻值千金——它解释了这一类协议的一切弱点: 收敛慢(传闻要一层层传)、易出环(旧传闻与新传闻会在网络里打架)、 无法验证(你没法问老王"你这三跳具体走的哪条路")。

跳数度量:一把太钝的尺子

RIP 用跳数(经过几台路由器)当度量,上限十五跳——再多一跳即"不可达"。 这把尺子的问题显而易见:它看不见带宽差异 (一条低速链路和一个高速链路同样算一跳), 也把网络直径死死限制在十几跳以内。 度量太钝,是距离矢量家族的通病,RIP 只是最极端的那个。

RIPv1 的类路病与 RIPv2 的救赎

RIPv1 的更新报文里不带子网掩码,只能按有类地址(A/B/C 类)猜测—— 不连续子网会被自动汇总搞得面目全非。 RIPv2 补上掩码,支持 VLSM 与不连续子网,认证也来了, 更新方式从广播换成组播(不再惊扰网段上所有主机)。 但请注意:这些改进治的是"类路病",治不了距离矢量的根病。

RIPv1:有类 · 广播 · 无掩码→ RIPv2:VLSM · 组播 · 认证‖ 距离矢量本质未变:传闻式路由
FIG.2 — v2 修的是表达力,不是收敛方式

计数到无穷与它的补丁们

链路断了,坏消息在距离矢量网络里传得极慢—— 两台路由器可能互相把对方当成通往失效网段的出口, 跳数你加一我加一,一直数到"不可达"才罢休,这就是计数到无穷。

RIP 打了一圈补丁:水平分割(从哪个口学的路由不从哪个口回传)、 毒性逆转(明确回传"此路不通")、触发更新(坏消息不等周期立刻发)、 抑制计时器(坏消息之后冷静一阵,防旧传闻复活)。 补丁能缓解,不能根治——这正是链路状态协议后来登场的理由, 也是为什么今天 RIP 只当教学素材读:它是理解"为什么会演化出 OSPF"的最佳标本。

实验建议:三台路由器串成环跑 RIPv2,断一条链路, 在接口上抓更新报文,亲眼看跳数一轮轮涨到不可达; 再分别开关水平分割对比收敛速度。 顺手把一条低速链路和一条高速链路并排放进拓扑,看 RIP 如何"公平地"选错路。

易混淆:水平分割防的是"两台路由器之间的双人舞"环路, 防不了三台以上设备构成的环——环状拓扑里计数到无穷照样发生。 别把补丁当成根治,这是出题人最爱挖的坑。
03

EIGRP —— DUAL 的优雅与"卡在活动状态"

EIGRP 自称"高级距离矢量",骨子里却是一台准链路状态设备: 它维护邻居表和拓扑表,只传变化不传全表,收敛速度直追 OSPF。 让它与众不同的灵魂是 DUAL 算法。

先立邻居,再谈路由

与 RIP 的"逢人就说"不同,EIGRP 先通过 Hello 报文建立明确的邻居关系, 再只向邻居可靠地投递路由信息——重要更新需要对方确认,丢了会重传。 这带来两个直接好处:初始同步之后只发增量更新,日常流量极小; 邻居死了立刻知道,不必等路由一条条超时。 "邻居表 + 拓扑表 + 路由表"三张表,是 EIGRP 排障的固定动线。

DUAL 的核心词汇:可行距离、后继与可行后继

可行距离 (FD)我到目标网段的已知最佳度量 后继 (Successor)当前选定的最佳下一跳,进路由表 报告距离 (RD)邻居向我报告的"它到目标的距离" 可行后继 (FS)备用下一跳——邻居的报告距离小于我的可行距离时,可保证用它转发不成环

可行后继的判定条件(RD < FD)是 DUAL 无环的数学保证: 邻居离目标比我近,把包交给它就不可能绕回我这儿。 后继挂了,可行后继立刻顶上来,收敛快得几乎无感—— 好网络里 EIGRP 的"秒切"就是这么来的。

弥散更新:快收敛的代价

没有可行后继时,DUAL 进入"活动状态":向邻居发出查询, 邻居再问邻居,查询像涟漪一样扩散出去, 必须等所有应答回来才能定新路由——这就是"弥散计算"。

链路失效→ 有 FS?立即切换(被动状态)‖ 无 FS:活动状态,发出查询→ 收齐应答 → 定新后继‖ 应答超时 → SIA,邻居重置
FIG.3 — DUAL 的两条路径:秒切 vs 弥散计算

如果某台邻居迟迟不应(链路拥塞、它自己也在等别人), 路由就卡在活动状态(SIA),计时器超时后邻居关系被重置,网络剧烈抖动。 SIA 是 EIGRP 最经典的排障场景:缓解思路是控制查询边界—— 用汇总与末节配置把涟漪圈在小范围里,别让它扩散到全网。

高级度量与不等价负载分担

EIGRP 的复合度量以带宽与延迟为主体(另有负载、可靠性等可调因子), 比跳数灵敏得多。它还支持不等价负载分担: 只要备用路径的度量落在主路径的某个倍数范围内, 流量就能按比例摊到多条路上——这是大多数 IGP 不给的奢侈。

为什么工程师爱它:配置上手快、收敛快、可控性强, 一台台路由器配过去几乎不出岔子。 在非多厂商环境里,它长期是最省心的 IGP—— 这份口碑,就是它曾是思科私有的最好注脚。

实验建议:搭一个带环路的四台拓扑,验证 FD/RD 条件—— 把每条候选路径的 RD 与 FD 抄下来逐个比对,亲手确认谁配当可行后继。 然后人为拖慢一条链路制造延迟,重现 SIA; 再用汇总把查询边界收紧,看 SIA 消失。

易混淆:"邻居在拓扑表里"不等于"路由在路由表里"。 DUAL 算出来的可行后继躺在拓扑表里待命,只有后继才被提交给路由表; 而路由表条目还要再过管理距离这一关。 查问题时三表(邻居表、拓扑表、路由表)要分开看,串着看必误诊。
04

OSPF —— 链路状态协议的标准像

OSPF 是 IGP 的正殿:开放标准、分层设计、 每台路由器握有全区域的拓扑地图,各自跑 SPF 算出最短路径树。 卷I 里篇幅最厚的一章,也是 CCIE 实验的重灾区。

链路状态的世界观

链路状态协议不再传"传闻",而是让每台路由器向全区域泛洪自己的局部视图—— "我是谁,我连着谁,链路状态如何"。 收齐所有人的自白之后,每台路由器拼出同一张完整地图, 各自独立跑最短路径算法。 传闻变成了地图:收敛快、可验证、无环天然成立,代价是内存与算力。

邻接状态机:排障的主轴

两台 OSPF 路由器从插上网线到完全同步,要走过一串状态。 把这串状态背下来还不够——要在实验里亲眼看它走, 卡住时能立刻说出"停在哪一步、为什么":

Down→Init→2-Way→ExStart→Exchange→Loading→Full
FIG.4a — 邻接建立状态机:卡在 ExStart/Exchange 多半是 MTU 不匹配,卡在 Init 多半是 Hello 参数没谈拢
  • Init → 2-Way:收到对方的 Hello,并在里面看到了自己的名字。广播网络上普通邻居之间停在 2-Way 就算正常状态。
  • ExStart → Exchange:协商主从、交换链路状态数据库的摘要目录——MTU 不一致会让这一步永远谈崩。
  • Loading → Full:按摘要补齐缺失条目,数据库完全同步,SPF 可以信任地跑了。

邻接能建立的前提是 Hello 参数谈得拢: 区域号、认证、网络类型、Hello/失效间隔等必须一致。 排障时先看"Hello 发没发出去、对方收没收到",再查参数对没对上——顺序反了会浪费半天。

DR/BDR:广播网络上的"班长"制度

以太网这种多路访问网络上,若每台路由器都两两建立完全邻接, 邻接数量是平方级爆炸。OSPF 选出一个指定路由器(DR)和备份(BDR), 其他路由器只跟它们俩完全同步,泛洪也经由 DR 中转。 选举比的是接口优先级再比路由器 ID,且不抢占—— 新来一台更"高"的路由器,也得等现任 DR 下台。

LSA 类型与区域设计

链路状态通告(LSA)是 OSPF 的原子信息单位: 路由器 LSA 描述"我连着谁",网络 LSA 由 DR 代广播网段发言, 汇总 LSA 在区域之间搬运路由,外部 LSA 负责重分发进来的域外路由…… 每种回答一类问题,认不全它们就看不懂数据库。

骨干 Area 0所有区域间流量都经过它——区域间路由本质仍是距离矢量式传递 普通区域完整数据库,完整计算 末节/完全末节默认路由替代外部(乃至汇总)路由,区域内数据库大幅瘦身 虚链路让一个不直连 Area 0 的区域"搭便车"穿过中转区域——应急手段,不是常规设计

区域设计是 OSPF 的工程灵魂:分层不是为了好看, 而是把 SPF 重算与泛洪圈在区域内部,网络才能长大。 骨干区域是所有区域的枢纽,其余区域必须挂在它身上—— 虚链路之所以是"创可贴",正因为它绕过了这条铁律。

实验建议:两台路由器之间抓邻居建立全过程,逐帧对应状态机; 再故意把一边接口 MTU 改大,看邻接卡在 ExStart——这是必做实验。 三区域拓扑里配末节区域,对比数据库条目的消长; 最后把骨干拆断,用虚链路缝合,再体会它为什么只能应急。

易混淆:"邻居关系"和"邻接关系"不是一回事。 能互发 Hello、在对方 Hello 里看到自己,只是邻居(2-Way); 真正交换链路状态数据库到 Full,才是邻接。 广播网络上两台 DROther 之间永远是 2-Way,这不是故障——把它当故障重启设备的人不少。
05

IS-IS —— 运营商的静默之选

IS-IS 出身 ISO 的 CLNS 体系,原本不是为 IP 设计的; 可大 ISP 的骨干里它出镜率极高。 学它不为别的:换一个哲学看链路状态,顺便理解运营商的审美。

TLV:可扩展性的来源

IS-IS 的报文是"类型-长度-值(TLV)"的积木堆: 要支持新地址族、新功能,加一类 TLV 就行,报文骨架不用动。 IPv6、流量工程、段路由的扩展都以这种方式长进协议里。 对比之下,OSPF 为 IPv6 专门重写了 v3—— 这一笔最能说明 TLV 设计的远见:协议的可扩展性,在画第一版报文格式时就注定了。

Level-1 / Level-2:边界在链路上,不在路由器上

IS-IS 的分层与 OSPF 形似神不同:L1 路由器只认本区域, L2 路由器串成骨干,一台路由器按接口分别属于不同层级。 关键差异——OSPF 的区域边界画在路由器上(ABR), IS-IS 的边界画在链路上: 两台不同区域的路由器之间那条链路就是边界,路由器整体归属一个区域。 这让区域调整灵活得多,也让"骨干"天然是一串连续的 L2 路由器链。

OSPF:边界在 ABR 路由器上‖ IS-IS:边界在区域间的链路上‖ L1 只知本区域,靠默认路径找 L2
FIG.5 — 两种分层哲学:同一个概念,两种切法

另一个容易忽视的差异:广播网络上 IS-IS 也选类似 DR 的角色(DIS), 但选举规则与抢占行为与 OSPF 并不相同—— 别把 DR 的肌肉记忆直接搬进 IS-IS 实验。

窄度量、宽度量与运营商偏爱它的理由

早期 IS-IS 的度量字段窄小,大带宽时代不得不引入宽度量—— 这是读老配置时常撞见的历史包袱,也是"协议字段宽度要留余量"的教科书案例。

运营商偏爱 IS-IS 的理由可以上位概括为三条: TLV 带来的扩展顺滑(对 IPv6、段路由友好); 协议自身跑在 CLNS 上,与 IP 转发面解耦,少一层自举依赖; 平坦的分区习惯贴合骨干拓扑。 它不是"更好的 OSPF",而是另一种工程口味—— 企业网惯用 OSPF,运营商骨干常见 IS-IS,井水不犯河水。

实验建议:三台路由器配 L1/L2 混合层级, 观察 L1 区域如何靠默认路径到达外部; 再抓一次链路状态报文,数里面的 TLV 种类, 直观感受"积木式"扩展——同一个报文骨架,装上 IP 的 TLV 就跑 IP, 这就是它与"为 IP 而生"的协议最大的气质差别。

易混淆:别拿 OSPF 词汇硬套 IS-IS。 DIS 行为类似 DR 但规则有异;L1/L2 也不等于"普通区域/Area 0"的一一映射。 迁移知识时先问"这个角色在对方协议里对应谁",再下结论—— 凭类比猜配置,是双协议环境里翻车最快的姿势。
06

重分发与路由策略 —— 全书排障密度最高的一章

真实的网络几乎从不止跑一种协议:并购来的网段跑 OSPF, 老设备只懂 RIP,边界上还得对接 BGP。 把 A 协议的路由灌进 B 协议,叫重分发;控制"灌什么、怎么灌",叫路由策略。 这一章的技巧与事故,密度冠绝全书。

单点安全,多点危险

单台路由器做单向重分发,一般可控; 两台以上路由器在 A、B 协议之间双向互灌,环路风险立刻浮现: A 学来的路由被灌进 B,又经另一台灌回 A—— 由于管理距离的差异,回灌的路由可能比"原装"的更被信任, 次优路径甚至环路就此定型。 多点双向重分发,是生产事故的经典配方。

协议 A 域⇄ 重分发点 1⇄ 协议 B 域⇄ 重分发点 2⇄ 路由回灌:环路温床
FIG.6 — 多点双向重分发的回灌回路:两域之间有两个门,路由就会兜圈子

种子度量:跨协议翻译的"汇率"

把 OSPF 路由灌进 RIP,度量值怎么折算? 两种协议的度量语言互不相通——成本、跳数、复合度量各有各的量纲, 必须给重分发指定一个"种子度量"。 不给或乱给,轻则度量失真(一律折算成同一个值,路径优劣全丢), 重则目标网段在目的协议里直接不可达。 种子度量的选择,体现了你对两边度量语义的翻译能力。

策略工具箱四件套

route-map策略总开关:匹配条件 + 动作,重分发、BGP、策略路由都离不开它 前缀列表精确匹配前缀与掩码范围——比访问列表更适合表达"网段" 分发列表在协议内部过滤路由的进出 路由标记 (tag)给重分发的路由盖戳:灌过去时打标,灌回来时按标拦截——防回灌的核心手法

工具箱的使用顺序有讲究:前缀列表负责"认出谁", route-map 负责"认出之后做什么",分发列表在协议边界上收口, tag 则给路由打上跨域可识别的身份。 四件套组合起来,几乎可以表达任何"这些路由可以走、那些不行"的意图。

方法论:先画流向图再动手

把每个路由域画成圈,把每个重分发点画成门, 箭头标出路由该往哪流、不该往哪流; 然后用 tag 与过滤把"不该"的箭头逐条封死。 纸上清楚了,配置只是誊写;纸上没画就动手,事故只是时间问题。 书里这一章的案例教学价值,一半在协议细节,另一半就在这套"先图后配"的工程纪律。

实验建议:OSPF + RIP 双域、两台边界路由器做双向重分发, 先裸配观察次优路径与环路,再逐层加 tag 过滤与分发列表, 每加一层用路由表对比变化—— 这是全书最值得完整复现的一组实验,没有之一。

易混淆:重分发的是"路由表里的路由",不是"协议数据库"。 EIGRP 拓扑表里的可行后继、OSPF 数据库里没被选中的 LSA, 都不会被灌给对方——先被本协议选进路由表,才有资格被重分发。 排障时发现"对方学不到",先回本协议查这条路由是否真的在位。
07

BGP —— 策略协议,不是最短路径协议

卷II 的主角登场。BGP 把互联网的自治系统(AS)缝在一起: 它不追求最短路径,它追求的是"符合各方意愿的路径"。 理解这一句话,BGP 的所有怪癖都有了出处。

路径矢量与 AS 的概念

自治系统是受单一管理控制的网络(一家运营商、一家大企业),用 AS 号标识。 BGP 是路径矢量协议:路由更新里带着完整的 AS 路径列表—— "到我这里要经过 AS 甲、AS 乙、AS 丙"。 路径列表一身二任:既是选路依据(越短通常越优), 也是防环机制(看到自己的 AS 号出现在路径里,直接拒收)。

eBGP 与 iBGP:同一协议的两种人格

eBGP跨 AS 的对等:默认直连、生存期极短,路由可以向外传播 iBGPAS 内部的对等:可以跨多跳建立,但默认"从 iBGP 学来的路由不再转给其他 iBGP 邻居"

iBGP 这条防环规则的代价是:AS 内部所有 BGP 扬声器要么全互联 (邻居数量平方爆炸),要么引入路由反射器—— 让指定路由器代为中转 iBGP 路由,把平方压成线性。 反射器集群与层级设计,是大型 AS 内部架构的日常功课; 它放松了"不转述"规则,换来可扩展性,防环职责则由额外属性接手。

BGP 状态机:从 Idle 到 Established

Idle→Connect→Active→OpenSent→OpenConfirm→Established
FIG.7 — BGP 会话建立:卡在 Active 说明 TCP 三次握手就没成——先查底层连通与端口可达性,再谈 BGP 配置

与 OSPF 一样,BGP 排障从状态机入手: Active 是"在努力但还没握上手",通常意味着对端不可达或配置错位; OpenSent/OpenConfirm 阶段卡住,多半是参数协商(版本、AS 号、认证)谈崩; Established 之后才轮到谈路由。 BGP 跑在 TCP 之上,这让它跨多跳建立会话成为可能, 也让"会话通了但路由不通"与"路由通了但转发不通"成为两类独立故障—— 排障时先问自己:卡的是会话、路由,还是转发?

属性与选路:一张优先级清单

BGP 路由携带一堆属性,选路就是按固定次序比较它们(上位概括): 先看本地偏好类属性(本 AS 更想从哪个出口走), 再看 AS 路径长短(经过的 AS 越少越好), 再看起源、MED(邻居建议从哪个入口进来)等, 一路比下去,直到用路由器 ID 兜底。 这张清单的深意在于——每一级都是一处策略把手: 想引导流量,就去调整对应级的属性。

所以说 BGP 是策略协议:它表达的是商业关系—— 客户的路由优先转发,对等伙伴的流量免费互换,上游供应商按流量计费。 一张全球路由表,本质是几十万份商业合同的投影; 这和 IGP"谁快选谁"的世界观,隔着一层人间烟火。

实验建议:三个 AS 的最小互联:两端 eBGP,中间 AS 内部两台 iBGP。 先体验"全互联"缺一角时路由莫名消失的怪象,再配路由反射器修复; 然后调本地偏好,看出口选择随之翻转; 最后试着用 AS 路径属性做入向流量的引导,体会"策略"二字的分量。

易混淆:"BGP 表里有这条路由"不等于"流量能到"。 常见断链:iBGP 学来的路由,其下一跳地址可能位于对端 AS—— 如果本 AS 内部的 IGP 不知道怎么去那个下一跳,路由就"看得到走不通"。 下一跳可达性是 BGP 与 IGP 的接缝,也是域间排障的第一检查点。
08

组播与 IPv6 路由概览 —— 卷II 的两条延长线

最后一章收束两条支线:组播把"一对多"变成路由问题, IPv6 把前七章的协议家族整体升级。 两段内容都以"思想差异"为主,细节可留待专项深入。

组播的动机与 RPF 检查

一份视频流要发给一万个接收者,单播要复制一万份,组播只发一份, 由路由器在分叉点复制——带宽节省发生在"最后分叉之前"的每一跳。 但组播路由的逻辑是反的:单播问"这个包要去哪", 组播问"这个包从哪来"——RPF 检查验证组播包是否来自 "回到源头的正确接口",来路不对就丢弃,这是组播防环的第一道闸。

PIM 稠密与稀疏:先淹后剪 vs 先点后聚

稠密模式假设到处都有接收者:先把流量泛洪到全网,没人要的分支再剪掉——适合接收者密集的小网 稀疏模式假设接收者稀少:流量先汇聚到汇合点(RP),接收者显式加入后再拉流——适合大而稀的网络

由此引出组播树的两种形态:共享树(大家都从 RP 那棵树上取流, 省状态但路径可能绕)与源树(每个源到接收者各走最短路径, 路径优但状态多)。 稀疏模式常以共享树起步、流量起来后再切换源树收尾, 是两种折中的合奏。别忘了主机侧还有"声明我想收哪个组"的组成员协议在配合—— 组播是主机、路由器两头协作的系统工程。

组播源→RP 汇合点(共享树)→接收者‖流量起来后切换:源树 · 最短路径直达
FIG.8a — 稀疏模式的经典舞步:先经 RP 搭桥,再抄近路

IPv6 路由:熟悉的配方,升级的地址

前七章的协议家族整体有 IPv6 版:RIPng、OSPFv3、EIGRP for IPv6、 承载多地址族的 MP-BGP。差异要点做上位概括: 地址变长、链路本地地址登场、邻居发现(ND)取代 ARP; OSPFv3 把认证交还给 IP 层并重构了 LSA 体系; MP-BGP 则用同一套会话承载不同地址族的路由,BGP 从此"一套班子多块牌子"。

IPv4 时代:ARP · 广播 · 每协议单版本→ IPv6 时代:ND · 组播化 · MP-BGP 一族多载
FIG.8b — 升级的是地址与载具,不变的是状态机与选路哲学

思想没变,表达变了——这正是"先学透 IPv4 版再升级"的理由。 过渡技术(双栈、隧道、协议翻译)书中一笔带过, 实践中记住一条即可:双栈是默认答案—— 能双栈就别翻译,隧道是桥梁不是归宿。

实验建议:组播侧,两台路由器一台源一台接收者, 抓包验证 RPF 丢弃行为,再看"声明加入"之后流量如何被引过来; IPv6 侧,把第 4 章的 OSPF 实验用 OSPFv3 重做一遍, 对照两张数据库感受差异——同样的状态机,换了一套报文语言。

易混淆:组播不是广播的"升级版"。 广播是链路层向所有人喊话,组播是网络层按"组"订阅分发—— 接收者要先声明加入,路由器才会把流量引过来。 把组播当广播理解,RPF 与 PIM 的一切行为都会显得莫名其妙。

读后自测 · 9 题

1. 管理距离和度量值各自回答什么问题?同一条前缀被静态路由和 OSPF 同时学到时,怎么选?
管理距离回答"信哪个来源"(直连最可信,静态次之,各动态协议各有默认值);度量值回答"同一来源内部走哪条路径"。先比管理距离定出处——静态胜出,OSPF 条目被压下;出处内部若有多条等价路径,才轮到度量值与负载分担出场。
2. 路由表里 /8、/16、/24 三条前缀都匹配目的地址,流量走哪条?为什么?
走 /24——最长前缀匹配是查表的唯一规则,更具体的路由永远优先,与度量值、管理距离无关。这也是"流量不按预期走"时首先要排查的方向:路由表里往往藏着一条更长的前缀把流量截走了。
3. RIPv2 相对 RIPv1 修好了什么?什么没修好?
修好了表达力:更新携带子网掩码,支持 VLSM 与不连续子网,增加认证,改用组播更新。没修好距离矢量的本质——收敛仍靠邻居间互相传话,计数到无穷仍需水平分割、毒性逆转等补丁缓解而非根治,十几跳的规模天花板也原样保留。所以 RIP 今天只配当教学标本。
4. EIGRP 的可行后继为什么能保证无环?"卡在活动状态"是怎么回事?
可行后继的判定是邻居的报告距离小于本机的可行距离——邻居比我更靠近目标,把包交给它就不可能绕回来,这是 DUAL 无环的数学根基。没有可行后继时进入活动状态发出查询,必须收齐所有应答才能定新路由;某邻居迟迟不应,路由就卡在活动状态(SIA),超时后邻居关系被重置,引发网络抖动。缓解之道是收紧查询边界(汇总、末节配置)。
5. OSPF 邻居卡在 ExStart/Exchange 状态,最该怀疑什么?邻居与邻接有何区别?
最该怀疑接口 MTU 不匹配(以及主从协商异常)。区别:互发 Hello 并达到 2-Way 只是"邻居";把链路状态数据库同步到 Full 才是"邻接"。广播网络上两台 DROther 之间停在 2-Way 属正常现象,不算故障。
6. IS-IS 与 OSPF 的区域边界画法有何不同?运营商为什么偏爱 IS-IS?
OSPF 把区域边界画在路由器(ABR)上,一台路由器可横跨多区域;IS-IS 把边界画在链路上,路由器整体归属一个区域,区域间的链路即边界。运营商偏爱的理由可概括为:TLV 积木式结构对 IPv6、段路由等扩展友好;协议自身跑在 CLNS 上,与 IP 转发面解耦;分层习惯贴合骨干拓扑。
7. 多点双向重分发为什么会出环路?标准防御手法是什么?
A 域的路由经重分发点 1 灌入 B 域,又经点 2 灌回 A 域;由于管理距离差异,回灌的"二手路由"可能比原装路由更被信任,次优路径乃至环路就此形成。标准防御:动手前先画流向图;重分发时用 route-map 给路由打 tag,回灌方向按 tag 拦截;配合前缀列表与分发列表逐条封死不该出现的流向;种子度量按两边语义认真折算。
8. BGP 会话卡在 Active 状态意味着什么?为什么说 BGP 是"策略协议"?
Active 意味着 TCP 连接尚未建立——先查底层连通性、端口可达与对端配置,别急着翻 BGP 策略。说 BGP 是策略协议,是因为它的选路清单(本地偏好、AS 路径、MED 等)每一级都是策略把手,表达的主要是 AS 之间的商业关系与路由意愿,而不是地理或时延意义上的"最短路径"。
9. 组播的 RPF 检查在防什么?PIM 稀疏模式为什么需要 RP?
RPF 检查验证组播包是否来自"回到组播源的正确接口",来路不对即丢弃——它把组播防环转化为单播路由表查询。稀疏模式假设接收者稀少,不可能先泛洪再剪枝,于是设汇合点 RP:源先把流注册到 RP,接收者显式加入后到 RP 拉流,流量起来后可再切换到源树抄近路。RP 就是稀疏模式下供需双方的"媒人"。