首页 / 资讯中心 / 文章详情

IS-IS协议详解:从NET地址规划到配置实例的落地指南

IS-IS协议详解:从NET地址规划到配置实例的落地指南 ★ FEATURED ARTICLE
1. 从一次割接开始为什么我推翻了OSPF方案上个月帮某客户做骨干网改造设备选型都定了组网方案却卡了壳。客户现有网络跑的是OSPF按说同协议替换最省事但业务侧提了个需求未来三年要并入几十个边缘节点地址段规划很碎希望IGP能扛住大规模路由、收敛快、扩展性强还不能让区域边界成为瓶颈。我当时的直觉是——该上IS-IS了。IS-IS这个名字很多做企业网的朋友可能只在认证题库里见过。它和OSPF同属链路状态协议但要真说起底层机制两者差异大到足以影响整张网的架构走向。IS-IS最初是为ISO的CLNS网络设计的后来被IETF扩展支持IP路由所以它的报文封装、寻址方式和OSPF完全不同。在ISP骨干网和数据中心场景里IS-IS几乎成了事实标准原因就是它的纯L2扁平设计、极强的扩展性以及用一台设备就能同时承载IPv4和IPv6路由的天然优势。这篇文章我就以一套“基础网络配置实例”为线索从NET地址规划、区域设计、接口激活、认证配置到故障排查完整过一遍IS-IS的落地方法。没有花哨的东西都是实打实能在工程里直接用的配置和思路。如果你是刚接触IS-IS的网络工程师或者正在纠结IGP选型这篇内容应该能帮你省不少踩坑的时间。2. 动手之前IS-IS的几个核心概念我帮你翻译成人话2.1 路由器和链路它用的是另一套叫法第一次看IS-IS配置文档最劝退的就是一堆新名词L1、L2、NET、DIS、SNPA、PDU。其实换个角度就通了。OSPF里的Area 0、ABR、ASBR对应到IS-IS就是L2、L1/L2路由器、L1路由器。OSPF里一个区域内有DR/BDR选举IS-IS对应的是DIS指定中间系统。关键差异在两点。第一IS-IS没有“骨干区域被分割”的问题所有L2路由器天然构成一个连续的骨干区域边界在链路上而不是在路由器上。第二IS-IS的报文全部封装在链路层之上不需要IP协议号所以它天然不依赖IP连通性很多排障场景里反而更干净。这里要重点理解L1和L2的转发逻辑L1路由器只维护本区域内的路由默认路由指向最近的L1/L2路由器。L2路由器维护整个L2级别的路由负责跨区域流量转发。L1/L2路由器相当于OSPF里的ABR但机制更灵活没有OSPF那种区域间防环的条条框框。我记得最开始做实验的时候总拿OSPF的思维去套IS-IS结果反复改area id折腾一晚上没通。后来才明白IS-IS的area设计是“一套NET地址里带区域号”不是OSPF那种接口上定义area的玩法。思路一转配置立刻清爽。2.2 NET地址的算法其实就是一个身份证号IS-IS路由器需要一个全网唯一的标识叫NETNetwork Entity Title。它的格式长这样49.0001.0010.0100.1001.00看起来像一串无规律数字其实拆开看就几段49AFIAuthority and Format Identifier私有地址段类似IPv4里的私网地址直接用49开头不会有冲突问题。0001Area ID区域号。L1路由器判断是否同区域就看这段。0010.0100.1001System ID系统ID。必须全网唯一长度固定6字节通常用Loopback地址的IPv4来编比如10.10.0.1转成0010.0100.0001或者直接用路由器编号。00NSEL固定为00不用管。最让我欣慰的是NET地址里没有掩码的概念所以不存在什么子网划分、汇总冲突的问题。排障时的核心口诀就一句网内所有路由器的System ID不能重复同区域的Area ID必须一致。2.3 广播网络里的DIS选举比OSPF的DR要简单IS-IS在广播多路访问网络比如以太网里也要选举一个DIS负责周期发送SNP序号数据包同步链路状态数据库。但和OSPF的DR/BDR不同IS-IS的DIS优先级是接口级配置默认64值越大越优先。DIS没有备份也就是没有BDR这种角色。DIS是抢占式的新加一台高优先级设备原DIS立刻让位这与OSPF的“稳定第一”思路完全不同。我实测过如果你的网络里对DIS稳定性有强迫症要求最简单粗暴的办法是所有接口优先级全设成默认或者干脆把DIS优先级都设成一个值通过MAC地址来定胜负这样至少逻辑上可预测。3. 配置实例全解三台路由器撑起一个最小可用的IS-IS网3.1 网络拓扑与地址规划我们用一个最简单的场景来演示三台路由器组成一个三角形网络两台属于Area 0001一台属于Area 0002。所有链路用10.1.x.x/24网段Loopback地址用10.0.x.x/32。设备区域System IDLoopback0接口及IPR100010000.0000.000110.0.0.1/32G0/0: 10.1.12.1/24, G0/1: 10.1.13.1/24R200010000.0000.000210.0.0.2/32G0/0: 10.1.12.2/24, G0/1: 10.1.23.2/24R300020000.0000.000310.0.0.3/32G0/0: 10.1.13.3/24, G0/1: 10.1.23.3/24这是一个经典的双区域互联模型其中R1和R2在区域内R3跨区域。全网启用IS-IS后R1和R2之间保持L1邻居R1、R2分别与R3建立L2邻居。跨区域路由通过L1/L2边界设备完成。3.2 关键配置逐行拆解先看R1的完整配置。每一条我都加了注释后面再单独解释几个容易踩坑的点。router isis 100 is-net 49.0001.0000.0000.0001.00 is-type level-1-2 metric-style wide ! interface Loopback0 ip address 10.0.0.1 255.255.255.255 ip router isis 100 isis circuit-type level-2 ! interface GigabitEthernet0/0 ip address 10.1.12.1 255.255.255.255 ip router isis 100 isis circuit-type level-1 ! interface GigabitEthernet0/1 ip address 10.1.13.1 255.255.255.255 ip router isis 100 isis circuit-type level-2几个关键点拆开说第一is-net是启动IS-IS进程的必需项相当于OSPF里router-id的作用但比router-id更严格因为它在整网ID体系里是唯一的。有同学问我能不能不配NET直接跑IS-IS答案是绝对不能进程起不来。第二metric-style wide。IS-IS早期默认使用narrow风格度量值只支持6位最大63这在现在的网络里完全不够用。改wide风格后度量值支持24位最大16777215并且能携带TE扩展信息。强烈建议所有新部署都用wide不用纠结兼容性问题。第三isis circuit-type level-1和level-2。这就涉及前面说的IS-IS和OSPF的最大区别同一台路由器上一个接口可以只跑L1、只跑L2、或者两者都跑。OSPF里你只能在一个接口上属于一个area但IS-IS允许你用接口-level来精细化控制不同链路上的路由传播范围。这个特性在分层网络里简直好用到爆。再看R2和R3逻辑一样只是NET地址和接口号不同。我直接给R2的关键配置router isis 100 is-net 49.0001.0000.0000.0002.00 is-type level-1-2 metric-style wide ! interface Loopback0 ip address 10.0.0.2 255.255.255.255 ip router isis 100 isis circuit-type level-2 ! interface GigabitEthernet0/0 ip address 10.1.12.2 255.255.255.255 ip router isis 100 isis circuit-type level-1 ! interface GigabitEthernet0/1 ip address 10.1.23.2 255.255.255.255 ip router isis 100 isis circuit-type level-2R3属于区域0002注意它的NET地址里Area ID是0002System ID保持唯一。router isis 100 is-net 49.0002.0000.0000.0003.00 is-type level-2-only metric-style wide ! interface Loopback0 ip address 10.0.0.3 255.255.255.255 ip router isis 100 isis circuit-type level-2 ! interface GigabitEthernet0/0 ip address 10.1.13.3 255.255.255.255 ip router isis 100 isis circuit-type level-2 ! interface GigabitEthernet0/1 ip address 10.1.23.3 255.255.255.255 ip router isis 100 isis circuit-type level-2R3只做L2这样省掉L1/L2路由器的开销跨区域流量全部走L2。在纯骨干设备上这种配置能减少LSDB规模和CPU消耗。3.3 验证与调试命令配置完别急着欢呼先用命令确认状态。我列几个最常用的show isis adjacency show isis database show isis route show isis interface debug isis adjacency debug isis update-packets实测中的一个顺序先看邻居再看数据库最后看路由表。show isis adjacency输出里每一行就是一个邻居。重点看State是否是UP如果UP就说明L1/L2属性没问题。如果邻居Down优先检查MTU、认证、电路类型是否一致。如果邻居都UP了但路由表没有那大概率是NET地址配错或者System ID冲突。用show isis database看LSDB里有没有三台设备的LSP再对照System ID就能定位问题。3.4 扩展地址汇总和路由泄露基础实例跑通只是第一步。实际工程里你要是把IS-IS的路由全裸奔到全网很快LSDB就肥到跑不动了。IS-IS做汇总有个天然优势在L1/L2边界路由器上你可以分别对L1和L2的路由做聚合不用像OSPF那样区分域间路由和域内路由。router isis 100 aggregate-address 10.0.0.0/16 level-2这条命令的意思是把区域内的所有细网段聚合为10.0.0.0/16后通告到L2级别。注意一点聚合生效的前提是LSDB里已经有这些明细路由。另一个重要机制是路由泄露Route Leak。L1路由器默认看不到其他区域的具体路由只有默认路由指向L1/L2边界。这在某些场景下会浪费带宽。如果你希望L1区域内的路由器也能看到外部明细路由可以在边界路由器上加router isis 100 redistribute level-2 into level-1泄露出去了路由表会变大但能避免跨区域的次优路径。做这个操作前建议先做路由策略只泄露特定网段避免全网明细全塞进L1区域。4. IS-IS和OSPF的区别一张表说清楚好多刚入门的同学搞不清这两个协议到底差在哪我直接列个对比表。对比维度IS-ISOSPF报文封装直接封装在链路层封装在IP报文里区域模型路由器级别L1/L2接口级别Area骨干区域天然连续L2路由器构成Area 0必须物理或逻辑连续路由计算SPF算法SPF算法度量值默认wide 支持24位默认cost 参考带宽可调支持网络类型广播、点到点广播、点到点、NBMA等IPv6支持原生扩展同一进程可跑双栈需要单独实例扩展性纯L2可扩展适合超大规模区域划分较灵活但ABR压力大我自己的感受是IS-IS在三层架构的骨子里更“平”。它的L1/L2不是OLSR那种分层路由而是把“区域”这个概念从接口上抽象到了路由器级别让网络设计多了一层自由度。尤其在做数据中心spine-leaf架构时所有leaf设备做L1spine设备做L2两行配置就能把整张网收敛了。而OSPF在分支办公网、混合组网环境里表现更友好因为它在NBMA和多种二层技术上的适配性更强。IS-IS最初是为CLNS设计的对纯IP以太网的某些边界场景比如p2p链路上的MTU协商、二层广播域隔离反而需要人为配置处理。选型没有绝对的对错关键看你网络的规模和演进方向。网络不超过几十台设备OSPF够用如果规划是几百台起步未来要承载IPv6和TEIS-IS会省心很多。5. 排障实录三台设备居然折腾了半夜5.1 问题一邻居起不来MTU背锅有次在某公司实验室调IS-IS链路是千兆以太网接口MTU设了9000。按照普通OSPF的习惯我没多想。结果邻居状态一直卡在INIT看show isis adjacency半天不动。排查过程先看物理层show interface没有错误。再看认证配置没配。最后抓包才发现IS-IS的Hello报文太大超出了接口实际支持的MTU对端直接丢弃。这个坑很经典。IS-IS的Hello报文要携带所有CLV包括IP接口地址、认证信息、支持的协议等默认的PDU大小会随配置增大。解决办法有两个一是所有接口统一MTU二是强制IS-IS PDU大小限制。interface GigabitEthernet0/0 mtu 1500 ! router isis 100 lsp-mtu 1400lsp-mtu限定了LSP最大大小这样就算某个接口MTU不一致IS-IS报文也不会超长。实测下来只要链路层MTU相同IS-IS跑起来非常稳。5.2 问题二跨区域路由打不通原来是路由泄露没做按我们上面那个三台设备的拓扑R1Area 0001默认只能看到自己区域内的路由。如果R1想ping通R3的Loopback路由表里只会有一条默认路由指向R2L1/L2边界。但这条默认路由的下一跳是R2的接口R1必须能学到R2的物理接口网段才行。很多人在这犯迷糊为什么我R1上能看到10.1.13.0/24但看不到10.0.0.3/32因为10.1.13.0/24是R1和R3之间的直连链路属于L1区域内的路由。而10.0.0.3/32是R3的LoopbackR3作为L2-only设备这条路由只通告到L2级别。解决方法是按需做路由泄露。在R2上加redistribute level-2 into level-1并且在策略里允许10.0.0.3/32问题立解。值得注意的是强制泄露所有L2路由到L1会导致L1区域路由表膨胀丢失“L1区域收敛快”的核心优势。正确姿势是只泄露必要网段。5.3 问题三认证不生效排查细节控IS-IS支持三种认证接口认证、区域认证、路由域认证。有一次我配置了区域认证结果发现L1邻居依然能建立但LSP不接受。原因是IS-IS认证的检测点非常严格——hello认证是基于接口的和区域认证不挂钩。具体配置如下interface GigabitEthernet0/0 isis password huawei123 level-1 ! router isis 100 area-password huawei123 domain-password huawei123注意三点接口密码是明文在生产环境务必用keychain或hmac-sha方式。区域密码只对L1的LSP生效L2的LSP要靠domain-password。如果一台设备既做L1又做L2两个密码都要配否则对端会拒绝对应Level的LSP。我实测过只配了area-password但没配domain-password结果L2邻居能建立但LSP不互通查了大半天才定位到是level不匹配。6. 进阶调优Metric和负载均衡的实战经验6.1 手动调整Metric控制路径IS-IS的默认Metric是10所有接口一样。这在简单拓扑里没问题但一旦出现冗余链路流量会均匀分担不管后端链路带宽。要手动控制需要理解IS-IS的Metric累加方式interface GigabitEthernet0/0 isis metric 20 level-2这条命令把该接口在L2级别的Metric改成20。注意IS-IS的接口Metric可以针对Level分别设置灵活性比OSPF高。6.2 负载均衡配置IS-IS默认支持多条等价路径负载均衡但默认的等价条件是基于Metric相等。如果两条路Metric不一样就只能走小的那条。想让不等价链路也能分担流量需要开启traffic-share类功能。router isis 100 maximum-paths 8maximum-paths设置最大等价路径数一般设备支持4条或8条。实际组网里如果你想让两条不同带宽的链路同时转发需要配合路由策略或者metric-style wide环境下的TE Metric做调整否则只能等价负载。6.3 快速收敛的几板斧IS-IS在收敛速度上天生有优势但默认配置还有优化空间开启fast-flood特性让LSP在本地SPF计算前就先加速泛洪。缩短SPF计算间隔。默认是5秒生产环境可以调到1秒甚至更短。开启BFD联动。IS-IS支持BFD快速检测链路故障亚秒级切换不是梦。router isis 100 timer spf 1 200 200 ! interface GigabitEthernet0/0 isis bfd这个timer spf后面的参数依次是初始延迟、最小延迟、最大延迟单位毫秒。一般建议初始1秒之后都是200毫秒别把SPF压太狠防止频繁抖动造成CPU飙高。7. 最后再分享一点个人观察做了这么多年网络我最大的体会是协议选型这事儿看着是纯技术问题实际是架构理念问题。IS-IS能把一张网组织得像一套精密齿轮不需要那么多特殊角色和防环机制因为它从一开始就没打算让用户把事情搞复杂。OSPF的许多特性比如DR/BDR、虚链路、NSSA都是在给旧时代的网络打补丁。而IS-IS的简洁是建立在“所有设备都足够聪明”的假设之上。对于刚开始学IS-IS的朋友我的建议是先别看厂商文档找个GNS3或者EVE-NG按这篇文章的拓扑先把三台设备的邻居跑起来再用debug isis看一遍报文交互你会对IS-IS的运作方式产生肌肉记忆。等哪天你深夜割接遇到一个诡异的路由黑洞灵光一闪想起“这可能是L1/L2边界的问题”这篇文章就没白写。
阅读完成 · 觉得有帮助?
咨询建站