news 2026/10/20 2:58:26

IS-IS缺省路由原理与配置:从ATT位到防环排查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IS-IS缺省路由原理与配置:从ATT位到防环排查

IS-IS系列写到第十八篇,前十七篇把邻居建立、LSP同步、区域划分、路由计算这些底子都打完了,今天这篇补一个很重要但容易被忽视的环节——缺省路由。在真实的运营商骨干网和大型数据中心里,缺省路由不夸张地说是全网流量的“最后一根救命稻草”,查不到明细路由的报文最终全靠它引流。这篇把IS-IS缺省路由的原理、配置、防环和排查一次性讲透,适合正在做网络规划或在现网里调试IS-IS的工程师,也适合准备数通认证、想把协议细节搞明白的人。

1. 缺省路由在IS-IS里到底是什么定位

1.1 从路由表的“兜底”逻辑说起

缺省路由,也叫默认路由,用IP前缀表示就是0.0.0.0/0,掩码为零意味着它能匹配任何目的地址。路由表在设计上有一个基本规则:匹配目的地址时,最长前缀优先;如果所有明细路由都匹配不上,最后才会去看这条掩码最短的缺省路由。你可以理解成公司前台没有写具体楼层的访客登记表,凡是没有明确指向的人员,一概先带到总接待处——总接待处就是那个0.0.0.0/0。

在IGP协议里,缺省路由并不是天然存在的。OSPF可以用default-information originate来生成,RIP/BGP也各有各的办法。IS-IS作为链路状态协议,它的处理方式更加“结构化”:任何一条路由,包括缺省路由,都必须作为可达性信息放进LSP(链路状态报文,Link State PDU)里,然后通过泛洪让整个域的LSDB同步。换句话说,IS-IS缺省路由不是靠某台路由器“口头告诉邻居”,而是靠在LSP中主动携带0.0.0.0/0这个前缀,让所有路由器在SPF计算时把它纳入最短路径树。

1.2 为什么要单独用一整篇来讲

你可能觉得这不就是一条路由嘛,配一下就行。但在IS-IS里,缺省路由牵涉到Level-1和Level-2两层结构的交互、ATT位机制、路由渗透策略、防环设计要求,还包括和BGP/external路由的协同。一个细节没处理好,轻则某条链路流量绕远路,重则产生路由环路把整个区域的流量打蒙。

举一个最常见的场景:一台Level-1路由器位于某个未梢区域,它没有Level-2的链路,也看不到其他区域的路由明细。它凭什么能访问其他区域的地址?全靠边界路由器在发送的LSP里把ATT(Attach)位置1,Level-1路由器收到这种LSP后,就会自动在路由表中生成一条指向该边界路由器的缺省路由。这是协议内置的行为,不需要额外配置。但也正因为是“自动的”,很多人在排查时反而找不到头绪——明明配置了level-1,为什么路由表里多出来一条0.0.0.0/0?这就是ATT位在起作用。

而在Level-2区域内部,或者是L1/L2边界想让全网都收到一条特定的默认出口时,就需要显式配置default-route-advertise。这时候缺省路由的来源、cost设计、是否无条件通告、怎么做策略控制,每一项都值得严谨对待。

2. IS-IS缺省路由的底层工作原理

2.1 LSP中的TLV与可达性发布

IS-IS把信息封装在一系列TLV(Type-Length-Value)中,IP可达性信息主要靠这几类TLV承载:

TLV编号名称用途
128IP Internal Reachability内部路由可达性,携带直连网段(旧式)
130IP External Reachability外部路由可达性(旧式)
135Extended IP Reachability扩展可达性,支持宽度量、标签等(当前主流)

一台IS-IS路由器要发布一条缺省路由,本质上就是在自己被泛洪的LSP里插入一个前缀为0.0.0.0/0的可达性TLV。和发布普通网段不同,这个前缀的掩码长度是0,协议在解析时会将其识别为缺省路由,并放入路由计算过程中。

一个容易踩坑的细节:IS-IS的宽窄度量模式会直接影响TLV的承载方式。使用窄度量(narrow metric)时,可达性信息走TLV 128/130;但TLV 128对前缀的处理能力有限,如果你想让缺省路由携带更丰富的属性(比如tag、更精确的优先级标记),就要启用宽度量(wide metric),让TLV 135来承载0.0.0.0/0。我在现网中见过一个案例:设备之间度量模式不一致,导致某些路由计算出现异常,优先级表现得很奇怪,最后排查发现是metric-style narrow和metric-style wide混用造成的。所以在发布缺省路由前,务必先确认全网IS-IS的度量模式是统一的。

2.2 ATT位如何“自动”生成Level-1缺省路由

ATT位是IS-IS中极具特色的一种机制,它出现在LSP的IS邻居TLV里,但其作用远不止“邻居关系标识”。当一个Level-1-2路由器同时连接着多个区域,且它拥有到其他区域的Level-2路由时,它会在向Level-1区域通告的LSP中置上ATT位。Level-1路由器收到后,知道这位“顶梁柱”可以去往区域之外,于是自动生成一条度量值为该目的路由器距离的缺省路由。

这里有一个底层判别依据:Level-1路由器并不需要知道其他区域的任何具体路由,它只需要认定“从这台设置了ATT位的路由器走,肯定能到达区域外”。这大大减少了Level-1路由器的LSDB规模和路由表规模,是IS-IS区域化设计的精髓。如果Level-1区域里有多台Level-1-2路由器都置了ATT位,Level-1路由器会进行SPF计算,对每台候选边界路由器计算距离,然后选择最优的那条作为缺省路由的下一跳。

需要特别提醒的是:ATT位机制生成的缺省路由,在路由表中通常表现为一条直连到该Level-1-2设备的IS-IS路由,本身不会参与Level-2区域的泛洪。所以,如果你想让Level-2区域也收到缺省路由,不能指望ATT位,必须显式配置通告。反之,如果Level-1区域不希望自动接收缺省路由,则需要在Level-1路由器上做路由策略过滤,或者调整边界路由器的ATT位设置,这在某些厂商设备上是可以通过命令关闭ATT位置位的。

2.3 缺省路由在SPF计算中的命运

SPF(最短路径优先)算法在IS-IS中用来计算到每个目标的最短路径树。缺省路由进入LSDB后,也会参与SPF计算,但它匹配任何目的地址的特殊性,决定了它只在路由表匹配“兜底”阶段才登场。

在华为、Juniper等主流设备的IS-IS实现中,缺省路由与普通路由之间会有优先级上的先后关系。常规路由、区域间路由、外部路由等按照协议优先级排列,缺省路由往往处于最低优先的一档。这其实是符合直觉的设计:查询路由表时,系统总是先把精确匹配的机会让给更具体的前缀。一旦某个目的地址在路由表中完全找不到匹配项,缺省路由才会介入。

但要注意,IS-IS缺省路由并不会影响BGP路由的递归查找。如果一台路由器同时运行IS-IS和BGP,BGP的下一跳递归查询往往需要底层IGP提供路由支撑。缺省路由在某些设计中可以参与这种递归,但也可能因为缺省路由的引入导致原本不该走的流量走了默认路径,从而产生次优路径甚至环路。所以,在部署IS-IS缺省路由前,要把全网的路由优先级、外部路由注入点都梳理一遍。

3. 组网设计思路与配置前必做的三件事

3.1 明确缺省路由的注入点

配置永远排在设计后面。我接触过的很多故障,根本不是命令敲错,而是启动规划的时候就没想清楚缺省路由该从哪儿进来、覆盖多大范围。在做IS-IS缺省路由部署前,请先回答三个问题。

第一,谁是网络的“出口”?网络的出口通常是连接外部网络(比如另一个自治系统、运营商上行、云专线)的那台路由器,它天然适合作为缺省路由的发布源。在这台设备上启用default-route-advertise,全网就能感知到离开本域的方向。

第二,哪些区域需要感知这条缺省路由?如果重点是Level-2骨干区域,那么就沿骨干区域通告;如果重点是某个Level-1未梢区域,边界路由器上利用ATT位机制或者显式通告,都能达成目标。但两者覆盖范围和形态不同,不能混为一谈。

第三,缺省路由的cost怎么设置?由于缺省路由是“兜底”路径,它的cost直接影响所有无法匹配明细路由的流量走向。如果两条出口路由器同时通告缺省路由,cost将成为选路的关键依据。

3.2 检查度量模式与区域类型

配置之前,用display isis brief或等效命令查看当前设备的IS-IS进程状态,重点确认以下几点:

  • IS-IS运行在Level-1、Level-2还是Level-1-2模式
  • 度量模式是narrow还是wide
  • 邻居关系是否都是up状态
  • 是否存在多次区域地址重叠的情况

在现网中,我见过因为Level-1/Level-2模式理解不一致而导致缺省路由“时有时无”的情况。特别是Level-1-2路由器上,如果设备和邻居在同一个区域,但彼此支持的路由层次不同,可能产生区域路由渗透异常。满配前先花十分钟做一次基础状态确认,能省去后面大量的排查时间。

3.3 设计防环预案

缺省路由最怕环路。由于它匹配一切目的地址,一旦两台路由器互相把对方通告的缺省路由当作最优路径,整个流量就会在两者之间打转,直到TTL耗尽。IS-IS本身是链路状态协议,基于LSDB计算路由,和距离矢量协议相比环路的概率低很多,但仍然可能因为跨协议引入(比如从静态路由引入的缺省路由又回灌到IS-IS)而产生问题。

建议在配置前,先梳理全网是否存在“动态学习的缺省路由再次被IS-IS通告”的情况。如果路由表中已有的缺省路由来源于另一个IGP或静态路由,而IS-IS又被允许通告这些外部缺省路由,就要防止它们形成闭环。一个常用的手段是在发布缺省路由时配合路由策略,只允许从真正信任的方向引入,而不是无脑泛洪。

4. IS-IS缺省路由配置实操

4.1 基础拓扑与需求模拟

这里用一个简化的三层组网来演示配置过程。网络包含三台路由器,均为虚构设备名称,仅用于示意:

  • R1:边界出口路由器,连接外部网络,运行IS-IS Level-2
  • R2:核心路由器,Level-1-2,连接区域1和区域2
  • R3:区域2内的Level-1路由器,只运行Level-1

区域1的System ID区域号为49.0001,区域2为49.0002。需求是让R3所在的Level-1区域能够自动获得去往外部网络的缺省路由,同时让整个Level-2区域内的路由器都能看到一条指向R1的缺省路由用于外网出口。

4.2 在出口路由器上通告缺省路由

在R1上配置IS-IS基础进程,并启用缺省路由的显式通告。

# isis 1 is-level level-2 network-entity 49.0001.0000.0000.0001.00 default-route-advertise always cost 10 # interface GigabitEthernet0/0/0 isis enable 1 isis circuit-type level-2 # interface GigabitEthernet0/0/1 ip address 10.1.1.1 255.255.255.0 isis enable 1 isis circuit-type level-2

这里的命令分为几个层次:

  • is-level level-2:让R1只在Level-2层面参与IS-IS路由计算,不涉及Level-1。
  • default-route-advertise:IS-IS进程向LSP中注入缺省路由。always参数的含义是不管当前路由表中是否已有缺省路由,都强制生成并通告。
  • cost 10:为这条缺省路由指定cost值。注意,这里指定的cost会随LSP泛洪,并在SPF计算中累加各跳的开销。比如R2到R1的链路cost是10,R2计算出的默认路由总cost就是20。

有朋友会问,为什么不直接配静态缺省路由指向外部?可以配,default-route-advertise与静态路由并不冲突。R1上如果已经配置了静态缺省路由指向对端外部网关,IS-IS的default-route-advertise可以基于这条静态路由发布;如果你用always,即使没有静态缺省路由,IS-IS也会强行生成自己的缺省路由,把它广播给全网。always适合在需要无条件保证出口可用性的场景使用,但也意味着IS-IS域内所有路由器都会依赖这条默认出口,一旦出现双出口竞争,必须配合cost来控制主备。

4.3 Level-1区域内的ATT位自动生成

R2作为Level-1-2路由器,同时连接区域49.0001和49.0002,它会通过ATT位向Level-1区域通告自己具备离开区域的能力。由于R2在Level-2中收到了R1发布的缺省路由,它有能力转发区域外流量,于是R2发出的Level-1 LSP中会携带ATT位。R3作为纯Level-1路由器,不需要任何额外配置,就会自动在路由表中生成指向R2的缺省路由。

R2的关键配置:

# isis 1 is-level level-1-2 network-entity 49.0001.0000.0000.0002.00 # interface GigabitEthernet0/0/0 isis enable 1 isis circuit-type level-2 # interface GigabitEthernet0/0/1 isis enable 1 isis circuit-type level-1

R3的关键配置:

# isis 1 is-level level-1 network-entity 49.0002.0000.0000.0003.00 # interface GigabitEthernet0/0/0 isis enable 1 isis circuit-type level-1

如果区域2内有多台Level-1-2路由器,R3的SPF会选择最优的那台作为缺省网关,冗余性和负载均衡都由协议本身保证。如果希望R3显式收到一条区域出口的缺省路由,而不是靠ATT位自动生成,R2上也可以直接配置default-route-advertise route-policy,把特定前缀以缺省路由形式下发给Level-1区域。

4.4 带路由策略的缺省发布

实践中并不是所有缺省路由都要无条件发布。有些场景需要根据外部路由的存在性来决定是否下发缺省路由,例如:只有本路由器上存在BGP路由表中某个关键前缀时,才向IS-IS域通告缺省路由。此时可以配合route-policy来实现。

R1上的增强配置:

# route-policy DEFAULT_DETECT permit node 10 if-match ip-prefix CRITICAL_NETWORK # isis 1 default-route-advertise route-policy DEFAULT_DETECT # ip prefix-list CRITICAL_NETWORK index 10 permit 203.0.113.0 24

这段配置的含义是:只有当路由表中存在203.0.113.0/24这条外部路由时,IS-IS才发布缺省路由。这比always更精准,能避免因误配置导致全网默认路由漂移。如果想在R2上向Level-1区域定向发布,也可以在R2的Level-1视图下配置对应的策略。

4.5 验证缺省路由是否生效

在R3上查看IS-IS路由表:

display isis route

重点观察是否有前缀0.0.0.0/0的出现。正常情况下,R3会显示出一条从R2学到的缺省路由,其metric等于R2到R3的链路cost。

在R1上查看发布的LSP信息:

display isis lsdb

关注R1的LSP中是否包含前缀0.0.0.0/0的可达性TLV。如果使用了宽度量模式,可以在扩展IP可达性TLV中明确看到该前缀,以及R1填充的cost值、tag等属性。

在R2上,可以使用display fib查看实际转发信息,确认缺省路由被正确加载到FIB,下一跳为R1的接口地址。FIB表的展示可以同时确认报文的转发路径是否符合预期。

5. 常见问题与现网排查技巧

5.1 Level-1路由器学不到缺省路由

现象:区域内的Level-1路由器查路由表,没有0.0.0.0/0。

排查思路按顺序进行:

  • 检查边界路由器是否真的在Level-2看到了通往其他区域的路径。如果边界路由器自身的Level-2缺省路由就没有,它可能不会置上ATT位,Level-1区域自然学不到。
  • 检查边界路由器是否通过Level-1链路向区域内发送LSP。如果链路cricuit-type设成了level-2-only,Level-1的LSP不会在这条链路上出现,更别提ATT位。
  • 检查区域内是否有重叠区域地址。当Level-1路由器认为自己与边界路由器属于同一个区域时,它们的交互可能出现异常,甚至边界路由器不会把自己视为“可以去往其他区域的出口”。

5.2 缺省路由产生了环路

环路是缺省路由部署中最严重的事故。通常发生在多台路由器同时通告默认路由,且通告来源互为依赖时。

举例来说,R1通过IS-IS向R2发布缺省路由,R2又通过另一种方式(比如路由引入)将自己的缺省路由回传给R1。由于IS-IS是链路状态协议,R1会计算到R2的最短路径,并把R2作为这条默认路由的下一跳,而R2的默认路由下一跳又指向R1,两者陷入死循环。

解决办法:

  • 使用default-route-advertise的route-policy过滤发布源,只允许从特定方向引入缺省路由。
  • 在边界路由上对入方向的路由做过滤,阻止学习来自内部区域的缺省路由。
  • 如果确实存在双出口设计,通过cost高低设置主备,避免两台路由器互指。

5.3 双出口的次优路径问题

如果网络中有两台出口路由器,分别连接两个不同的外部网络,同时都通告缺省路由,内部路由器如何选择?SPF会根据cost值计算到每台出口的最短路径,选择综合代价小的一侧作为默认出口。但问题在于,单条缺省路由无法区分不同外部目的地址的最优出口。若两个外部网络需要精细化选路,通常需要依靠BGP路由来承载外部明细,或者使用IS-IS的多拓扑特性做策略路由导流,缺省路由只负责“兜底”。这一点在设计时就要想清楚,不要指望靠一条0.0.0.0/0解决所有出口调度。

5.4 缺省路由一直不更新

IS-IS的LSP有老化机制和序列号机制。如果缺省路由的cost值或tag属性发生了变化,但LSP没有及时泛洪更新,可能导致全网缺省路由保持不变。出现这种情况时,可以在发布设备上执行LSP刷新操作,或触发接口事件来加速泛洪。display isis lsdb中查看LSP的序列号和剩余生存时间,能判断该LSP是否处于持续更新的正常状态。

另外一个低概率但真实存在的情况:设备开启了LSP分片扩展,而缺省路由所在的分片没有被其他路由器正确接收。排查时关注分片是否完整,以及各设备的LSDB同步状态。

6. 我个人在实际操作中的几条经验

IS-IS缺省路由看似只是配置一条命令,但它在整个网络中起的是“重力场”的作用,影响范围远远超过那台发布路由器本身。这些年做现网维护,我总结了三条比较务实的体会。

第一,能显式定义的通告路径,不要依赖自动机制。ATT位虽然方便,但它的行为在跨厂商互通时表现得并不完全一致。如果网络里同时有多个厂商的设备,建议在边界路由器上明确配置缺省路由的通告策略,而不是让每台设备自行理解ATT位的含义。跨厂商环境下,任何一个协议字段的细微理解偏差在关键时刻都会被放大。

第二,缺省路由的cost一定要有全局视图。我见过不止一次,两台出口路由器一台用默认cost 10,另一台配成了cost 5,结果全网流量都压到后者身上,链路负载严重失衡。缺省路由的cost本质上是在告诉全网“首选谁”,多花两分钟做全局成本规划,比事后调整负载均衡策略划算得多。

第三,任何对缺省路由的变更都要走“观察—小范围验证—全量发布”的流程。LSP泛洪对全网的影响是即时的,新cost值几秒钟内就会传遍整个骨干区域。如果改错了cost方向,全网流量瞬间绕路,用户侧的感知就是丢包和时延飙升。规范的变更窗口和回退预案,比任何精妙的配置都重要。

IS-IS缺省路由的内容到这里就完整了。前面讲过的SPF计算、LSP处理、区域间路由渗透,在这一篇里形成了一个闭环:缺省路由需要依靠LSP来承载,依靠区域边界来传播,依靠cost来控制路径,还需要依靠路由策略来防环。能把这张网织好,IS-IS的骨干网络就稳了一大半。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 2:58:09

网络性能四大核心指标:带宽、时延、抖动与丢包详解

1. 从一次视频会议卡顿说起,为什么要关注这四个指标我印象很深的一次经历,是某天下午开一个重要的远程会议,画面突然开始模糊,声音断断续续,讲的人一句话要重复两三遍,听众那边拼命打“听不清”。当时第一反…

作者头像 李华
网站建设 2026/10/20 2:58:04

Hive面试高频真题全解析:原理、SQL优化与数据倾斜实战

又到了招聘季,后台很多同学在准备大数据开发面试,问得最多的就是Hive。说实话,Hive在数仓岗位里就是基本功,基本每一轮技术面都跑不掉。我翻了翻最近几年美团、京东这类大厂的面经,发现Hive的考察重点其实很集中&#…

作者头像 李华
网站建设 2026/10/20 2:56:53

Git push报错src refspec master does not match any:原因与5种解法

刚接触 Git 的人,第一次往远程仓库推代码时,大概率会迎面撞上这么一条红字:error: src refspec master does not match any我当年第一次看到它,满脑子都是问号:明明每一步都照着教程来了,为什么就是 push 不…

作者头像 李华
网站建设 2026/10/20 2:56:26

世界模型千步推演如何实现?从记忆架构到训练对齐的完整突破

如果你这两年一直在关注智能体训练圈,应该能明显感觉到一个变化:越来越多的团队开始把“世界模型”当成主角来做,而不只是强化学习里一个可有可无的辅助模块。我最近一口气读完了一个研究方向相近的团队连续发表的两篇机器学习顶级会议论文&a…

作者头像 李华
网站建设 2026/10/20 2:56:05

垂直农场智能补光算法测试框架:从SIL到HIL的落地实践

最近接了一个垂直农场智能补光项目的测试任务,核心是验证一块自研的LED光照控制算法到底省不省电、控得准不准。说实话,这类项目跟普通嵌入式算法测试差别很大,因为它既要验证控制逻辑正确,又要量化节能收益,还要你懂一…

作者头像 李华
网站建设 2026/10/20 2:55:47

.NET中构建AI智能体:Microsoft Agent Framework实战指南

不知道你有没有遇到过这种场景:公司技术栈明明以 .NET 为主,结果一聊到 AI 智能体,团队里默认的潜台词就是“这东西得用 Python 写”。我一开始也是这么想的,直到我把一个内部业务流程的智能体原型用 .NET 写完、跑通,…

作者头像 李华