HCIP-ICT实战进阶04-ISIS原理与配置
0 前言
IS-IS(Intermediate System to Intermediate System, 中间系统到中间系统)协议, 和OSPF一样属于内部网关协议, 也是一种采用SPF算法进行路径计算的链路状态协议.
ISIS发展
ISIS最早是OSI七层模型里面出现的路由协议(OSPF是在TCP/IP模型里面出现).
在七层模型里面, 主要了解一下网络层服务:
-
无连接服务(CLNS)
其中的协议主要分成三种:
- CLNP--被路由协议
- ISIS--中间系统到中间系统
- ESIS--终端系统到中间系统
IS-网络设备, ES-网络终端
-
面向连接的服务(CONS)
最早的ISIS协议是为了CLNP提供服务, 不支持IP网络, 最后进行了扩充和修订, 称为集成ISIS协议.
由于设计之初不太一样, 所以ISIS和OSPF报文的封装方式也不太一样.
- ospf是利用IP进行外层封装
- ISIS利用MAC进行外层封装
ISIS里面有自己的专属地址格式(NSAP地址--网络服务接入点, 类似ipv4&ipv6)
1 ISIS基本原理
1.1 NSAP地址组成
由两个部分组成, 每个部分也有各自组成部分:
- IDP: 类似于IP地址的主网络号;
- AFI: 地址分配机构和地址格式;
- IDI: 用于标识域.
- DSP: 类似IP地址的子网号和主机地址;
- High Order DSP: 用于分割区域;
- system-id: 用于区域内唯一标识一台设备(类似于RID), 长度是固定为48bit(6Byte), 一般是采用设备的RID转换;
- SEL: 用于表示服务类型, 不同传输协议会使用不同的标识, 目前最常用的就是00, 表示一个具体的地址.
NSAP地址长度为8-20byte(64-160bit), 两部分的长度是可变的.
上述IDP和DSP组成内容里面, 其中AFI和IDI一般主要有两种显示: 47(公网)、49(私网)
对于Area Address区域号码(类似于OSPF里面的区域划分), 不同厂商会有不同的概念:
- 认为DSP的High Order DSP就是区域号码;
- 认为IDP+DSP的High Order DSP就是区域号码.
比如一个NSAP地址可以这么写:
47.0001.1921.6800.1001.00
47-AFI和IDI
0001-区域(也有厂商会认为47.0001是区域号码)
1921.6800.1001-system-id
00-当前NSAP是一个具体地址(01表示伪节点)
system-id冲突
如果两台设备system-id冲突会发生什么?
在这之前先回顾类比OSPF的RID冲突:
-
两台设备直连, RID冲突: 无法建立邻居关系
-
两台设备同区域不是直连, R1-R2-R3(R1和R3冲突):
邻居关系正常建立, R1和R3设备的路由条目会互相学到(但是用不了), R2设备的路由条目会一直变动(LSA更新), 之后R1或者R3会重新选举RID, 消除RID冲突, 恢复网络正常.
-
两台设备不同区域, 两台设备都没有进行外部路由引入, 则没有问题(三类LSA没有RID信息), 但如果有一台设备引入外部路由(五类LSA携带ASBR的RID), 则出现冲突, 无法重新选举, 需要手动调整.
回到ISIS, 两台直连设备出现system-id冲突, 会自动修改system-id, 两台设备可以正常建立邻居关系.
自动修改过程: 前两个字节为F; 后四个字节随机生成;
比如FFFF.1234.5678
ISIS默认开启了自动修改system-id的功能
开启配置命令(双重否定):
undo isis system-id auto-recover disable
1.2 NET
当SEL是00的时候, NSAP地址有一个特殊的名称: NET地址(类似于IP网络中的IP地址), 用于标识一台设备.
NET(Network Entity Title, 网络实体名称), 由区域地址(Area ID)和system ID组成, 可以看做特殊的NSAP.
NET长度与NSAP相同, 最长的20Byte, 最短的8Byte.
在IP网络中运行ISIS时, 只需配置NET, 根据NET地址设备可以获取到Area ID和system ID.
NET地址会根据真实IP地址进行转换(推荐方式).
比如:
192.168.1.1->192.168.001.001->1921.6800.1001
举例
每台运行ISIS的网络设备至少需要拥有一个NET, 当然一台设备也可以同时配置多个NET, 但这些NET的system ID必须相同.
在华为的网络设备上, System ID长度固定为6Byte, 在一个ISIS路由域中, 设备的system ID必须唯一, 为了便于管理, 一般根据Router ID配置system ID.
1.3 ISIS区域-路由分级
在NET地址里面, 可以看到ISIS是有区域ID概念的, 但是要注意, ISIS的区域ID只影响邻居关系建立, 不会影响骨干区域和非骨干区域.
ISIS和ospf一样, 都有骨干区域和非骨干区域.
Level-1路由器
level-1设备, 非骨干区域设备, Level-1路由器负责区域内的路由,它只与属于同一区域的Level-1和Level-1-2路由器形成邻居关系,维护一个Level-1的LSDB,该LSDB包含本区域的路由信息,到区域外的报文转发给最近的Level-1-2路由器.
Level-2路由器
level-2设备, 骨干区域设备:Level-2路由器负责区域间的路由,可以与同一区域或者其它区域的Level-2和Level-1-2路由器形成邻居关系,维护一个Level-2的LSDB,该LSDB包含区域间的路由信息。所有Level-2路由器和Level-1-2路由器组成路由域的骨干网,负责在不同区域间通信,骨干网必须是物理连续的。Level-2路由器是否形成邻居关系与区域无关.
Level-1-2路由器
level-1-2设备, 骨干区域连接非骨干区域设备, 但是属于骨干区域设备, 同时属于Level-1和Level-2的路由器称为Level-1-2路由器,可以与同一区域的Level-1和Level-1-2路由器形成Level-1邻居关系,也可以与同一区域或者其他区域的Level-2和Level-1-2路由器形成Level-2的邻居关系。Level-1-2路由器维护两个LSDB,Level-1的LSDB用于区域内路由,Level-2的LSDB用于区域间路由.
如果两台设备都是level-1-2设备, 则首先判断区域号码是否一致, 如果不一致, 则只建立Level-2关系, 如果不一致, 则建立Level-1和Level-2关系.
骨干区域由level-2和level-1-2层级的设备构建而成, 非骨干区域由level-1层级设备构成.
ISIS的level层级是一台设备的属性, OSPF区域的划分是一个接口的属性.
1.5 ISIS的网络类型
ISIS支持的网络类型: 点到点网络(P2P)、广播(Broadcast);
OSPF支持的网络类型: p2p、非广播(nbma)、点到多点(p2mp)、广播.
1.6 ISIS开销值(ISIS最大痛点)
ISIS和OSPF一样, 会有开销值计算(都是SPF算法计算网络拓扑)
- OSPF接口开销值是有计算公式(接口开销值=带宽参考值/接口带宽), 默认为1;
- ISIS接口默认开销固定是10.
1.6.1 ISIS开销值类型
-
narrow: 窄模式(默认)
-
收发都是narrow;
-
接口开销值受报文位数限制, 取值范围为(1~63), 整条链路开销值累加不能超过1023;
-
窄模式不能携带其他路由的属性(比如segment routing).
-
-
wide: 宽模式(常用)
-
收发都是wide;
-
开销值取值范围为(1 ~ 2^24-1), 累加上限为2^32-1;
-
支持携带路由属性(segment routing必须使用宽模式).
-
-
compatible: 兼容模式
-
收发都是narrow和wide;
-
一个接口从发送报文的时候同时携带窄模式和宽模式.
-
-
narrow-兼容
- 发送是narrow, 接收是narrow和wide.
-
wide-兼容
- 发送是wide, 接收是narrow和wide.
1.6.2 计算开销值
ISIS和OSPF一样, 都是去往目标网络的最短路径所有的出接口开销值累加.
当然, ISIS也可以类似OSPF, 手工指定, 或者自动计算:
- 接口开销: 为单个接口设置开销;
- 全局开销: 为所有接口配置开销;
- 自动计算开销: 根据接口带宽自动计算到达目的开销;
1.7 ISIS报文介绍
ISIS报文是直接封装在数据链路层的帧结构的.
-
Hello PDU: 在ISIS里面也称为IIH(IS-IS Hello), 用于发现、建立、维护邻居关系. 在广播网络中, level-1的关系之间使用level-1 IIH, level-2关系之间使用level-2 IIH; 在P2P网络中, 这只使用一种P2P IIH, 报文格式有所差别;
Hello报文发送周期: 普通ISIS路由器是10s, 老化时间是30s, DIS是3.333s, 老化时间10s.
-
LSP PDU: 链路状态报文, 用于交换链路状态信息.(不同于OPSF中LSA放在LSU报文中, LSP既可以是链路状态信息也是报文)
LSP报文同样分成了两种:
- level-1 LSP
- level-2 LSP
ISIS更新周期: 900s更新, 1200s老化, 倒计时(OSPF: 1800更新, 3600老化, 正计时)
老化倒计时为0时, 会等待60s再删除, 但一般问的老化时间还是1200s.
-
SNP PDU: 序列号报文, 主要是LSDB的摘要信息, 用于维护LSDB的完整性, 以及确保网络的LSDB是同步的.
SNP又分为两种:
-
CSNP
-
level-1 CSNP
- level-2 CSNP
-
PSNP
-
ISI报文类比OSPF:
- IIH--Hello
- CSNP--DD
- PSNP--LSR/LSAck
- LSP--LSU
拾遗: ospf报文中携带LSA摘要的报文有: DD、LSR、LSAck.
1.8 ISIS报文详细结构
-
数据链路层:
-
源mac地址: 发送该报文的接口mac地址
-
目的mac地址:
- level-1: 01-80-c2-00-00-14
- level-2: 01-80-c2-00-00-15
组播mac地址(OSPF是组播IP地址: 224.0.0.5和224.0.0.6)
-
-
type/length:
- 当该字段数值小于等于1500(0x05DC), 表示报文是IEEE 802.3结构;
- 当字段大于等于1536(0x0600), 表示报文是Ethernet II结构.
目前学到比较多的数据帧, 结构都是Ethernet II结构, 比如ARP: 0x0806.
目前有在使用802.3的协议主要就是ISIS.
-
LLC子层:
- DSAP: 目的服务访问点, ISIS报文的DSAP会写成0xfe
- SSAP: 源服务访问点, ISIS报文的DSAP会写成0xfe
- Control: 控制字段, 表面当前不是正规的TCP/IP报文.
1.8.1 ISIS数据封装--ISIS通用头部(类似OSPF的报头)
- Intradomain Routeing Protocol Information Discriminator: 1Byte, 域内路由选择鉴别符, 在ISIS报文里面, 该字段固定为0x83
- PDU Header Length: 1Byte, PDU头部长度标识, ISIS通用
- Version: 1Byte, 版本号码, 当前固定为0x01
- system-id length: 1Byte, 表示NSAP地址或者NET地址的system-id长度; 如果为0, 表示system-id是正常6Byte, 如果是255, 表示system-id不正常为空.
- reserved: 3bit, 保留未使用
- PDU Type: 5bit, 表示ISIS报文类型, 一共9种:
- 15--L1 IIH
- 16--L2 IIH
- 17--P2P IIH
- 18--L1 LSP
- 20--L2 LSP
- 24--L1 CSNP
- 25--L2 CSNP
- 26--L1 PSNP
- 27--L2 PSNP
- version: 1Byte, 版本号码, 重复定义, 固定0x01;
- reserved: 1Byte, 保留未使用, 重复定义;
- Max Area Address: 1Byte, 表示ISIS支持最大区域数量, 设置为1~254, 默认是0. 默认为0时, 表示当前设备支持3个区域.
1.8.2 ISIS数据封装--消息内容
变长CLV(Code-Length-Value) 三元组, 其实就是TLV数据结构:
- type: 当前内容类型;
- length: 内容长度;
- value: 具体携带内容.
TLV结构优点: 可拓展性非常强, OSPF报文几乎没有任何TLV结构, 所以OSPFv2只能支持IPv4, 但ISIS协议的报文是TLV结构, 想要支持后续版本只需要在内容中添加类型即可.
ISIS只是采用了单层TLV, BGP是TLV嵌套TLV再嵌套TLV(后话).
ISIS比较经典的TLV结构报文:
type | 内容 |
---|---|
2 | 中间系统邻接 |
128 | 内部路由可达信息(ISIS内部的路由信息) |
129 | 现在ISIS为了支持哪种协议(IPv4&IPv6) |
130 | 外部路由可达信息(ISIS引入的外部路由) |
131 | 区域间路由 |
133 | 认证 |
OSPF中某一类LSA携带的内容是固定的, 无法更改, 但是ISIS通过TLV的形式, 可以任意填写type, 携带任意信息.
1.8.3 IIH报文
IIH报文用于建立和维持邻接关系, 广播网络中Level-1 ISIS路由器使用Level-1 LAN IIH;
广播网络中的Level-2 ISIS路由器使用Level-2 LAN IIH; 点到点网络中则使用P2P IIH.
广播IIH
-
通用头部;
-
Res/Circuit type: 1字节, 表示发送该PDU设备的层级, 前6bit未使用, 后2bit:
-
00(0x0): 不可用
-
01(0x1): level-1
-
10(0x2): level-2
-
11(0x3): level-1-2
-
-
Source ID: 6字节, 始发该IIH报文设备的system-id;
-
Holding time: 2字节, 保持时间, 邻居路由器等待始发路由器发送下一个IIH报文的时间间隔(老化时间)
-
PUD length: 2字节, PDU数据包的长度
-
res/priority 最前1bit保留未使用, 后7bit表示DIS优先级;
-
LAN ID: DIS的system-id长度(7Byte)+1字节, 一般用于DIS的system-id和1字节伪节点标识.
-
TLV: 可变长度域.
P2P IIH
-
通用头部;
-
Res/Circuit type: 1字节, 表示发送该PDU设备的层级, 前6bit未使用, 后2bit:
-
00(0x0): 不可用
-
01(0x1): level-1
-
10(0x2): level-2
-
11(0x3): level-1-2
-
-
Source ID: 6字节, 始发该IIH报文设备的system-id;
-
Holding time: 2字节, 保持时间, 固定为30s(p2p不选举DIS);
-
PUD length: 2字节, PDU数据包的长度;
-
Local circuit ID: 1字节, 本地链路ID, 只有p2p网络会有该字段, 始发该报文的设备会给接口做一个唯一标识.
-
TLV: 可变长度域.
1.8.4 LSP报文
(ISIS的LSP有两个意思: 一个是LSP{(LSU)}报文, 一个是LSP{LSA}信息), 这里讲的是LSP报文.
-
通用头部;
-
PDU Length: PDU长度
-
Remaining lifetime: LSP生成时间, 1200s, 倒计时
-
LSP ID: 由三个部分组成:
-
system-id
-
伪节点id(circuit id): 是否为伪节点
-
lsp分片编号: 是否为最后一片;
举例:
0000.0000.0001.00-00 常规LSP
0000.0000.0001.01-00 DIS发送的LSP
0000.0000.0001.00-01 常规LSP的最后一片
-
-
Seq: 4Btye, 序列号, 每次更新+1, 最大2^32-1;
-
checksum: 校验和(从remaining lifetime之后的信息开始校验);
-
P: 自动修复, 只和L2 LSP有关系, 类似虚连接, 但是没有厂商实现
-
ATT: 始发路由器是一个与其他区域相连的设备, 该字段在L1/L2的LSP都存在, 但只有L1-2设备产生的L1的LSP才使用;
-
OL: 过载位, 被置位的LSP会在网络中会传播, 但是不会进行SPF计算;
-
IS type: 产生这个LSP的设备类型
- 01: L1设备
- 11: L2设备
-
TLV: 可变长度域.
1.8.5 SNP报文
CSNP
全序列号报文, 携带某台设备的LSDB的所有LSP摘要信息, 主要在广播网络上由DIS发送(周期10s), 用于维护广播网络中所有设备的LSDB; 在p2p网络中, 也会有CSNP报文, 但只是在开始建立邻接关系才会使用.
- PDU Length: PDU长度;
- Source ID: 6字节, 始发该CSNP报文设备的system-id;
- Strat LSP ID: 表示TLV字段中描述的LSP 范围的第一个 LSP ID;
- End LSP ID: 表示TLV字段中描述的LSP范围的最后一个LSP ID;
- TLV: 可变长度域.
PSNP
部分序列号报文, 只携带部分LSP摘要信息, 当设备发现LSDB不同步时, 通过PSNP报文来请求新的LSP信息. 在p2p网络中, 收到LSP信息需要用PSNP进行回复确认.
- PDU Length: PDU长度;
- Source ID: 6字节, 始发该IIH报文设备的system-id;
- TLV: 可变长度域.
2 ISIS工作原理
2.1 DIS设备
ISIS的DIS属性:
类似于OSPF的DR, 但是不太一样
-
DIS: 指定中间系统, 用于在广播网络中, 选举出一台DIS设备(广播网络需要选举DIS, P2P不需要), 减少链路状态信息泛洪.
-
Hello时间: 普通ISIS路由器hello周期是10s, 但是当设备选举为DIS之后, 则hello时间修改为10/3 s, 修改这个hello周期时间是为了更快检测到DIS是否出现故障.
-
优先级: ISIS默认优先级是64, 可配置范围是0-127. (OSPF: 1, 0-255)
-
选举优先级规则:
- 比较优先级: 数值越大越优先;
- 比较mac地址, mac地址越大越优先(ISIS报文封装只有MAC地址没有IP地址).
-
如果设备之间的关系是Level-1-2关系, 则需要选举两个DIS, level-1一个, level-2一个.
-
DIS支持抢占(OSPF不会), 所以没有备份(BDR).
-
ISIS同一个广播网络里面, 虽然选举了DIS,但是所有设备之间依然是邻接关系(OSPF只保留DR和BDR与其他设备之间的邻接关系).
2.2 伪节点
ISIS网络选举出一台DIS设备之后, DIS设备会创建一台虚拟路由器(伪节点), 该广播域的所有设备都和这台虚拟路由器建立邻接关系, 又因为伪节点是虚拟的, 所以查看邻接关系的时候, 看到的就是全设备的邻接关系, ISIS为了能够识别出伪节点的设备编号, 所以对于伪节点的ISIS会用DIS的system-id加上一个字节的Circuit ID标识(Circuit ID如果是伪节点则非0, 其他普通节点都是0).
创建伪节点就是类似于OSPF的DR, 由伪节点进行广播网络中的链路状态信息同步.
ISIS的DIS设备可以抢占.
- 好处: 网络发生任何变动, 则DIS设备实时更改;
- 坏处: 当DIS发生变动时, 伪节点也会变化, 链路信息需要重新泛洪.
2.3 ISIS邻接关系建立前提(原则)
- 两台设备层级需要一致, 需要两边设备具有相同层级的属性, 比如L1和L1, L2和L2, L2和L1-2, L1-2和L1-2;
- 如果是建立L1关系, 则Area ID(区域号码)需要一致, L2关系无影响;
- 两边设备需要处于同一个物理连接, 如果是广播网络, 则设备之间在同一个广播域; 如果是P2P设备, 则设备之间需要直连. 原因是ISIS使用数据链路成封装, 是组播MAC传递消息, 只能在单个网络内传递;
- 网络类型需要一致(p2p连接/广播网络), 或者是通过命令修改为同一个接口类型;
- 如果存在认证, 则两边认证需要保持一致.
- 最好是相同网段(默认情况下).
2.4 ISIS邻接关系建立
2.4.1 广播网络邻接关系建立
前提: 广播网络中的IIH报文有两种(L-1 IIH和L-2 IIH), 目的MAC地址是组播MAC(L-1是14, L-2是15).
一开始两边的ISIS设备都是down状态, 以R1先发送为例:
- R1通过组播mac地址的方式发送一个IIH报文(该报文没有任何邻接信息);
- R2设备收到IIH报文, 认为自己可能有一个邻居R1, 此时R2将自己对于R1的邻居关系状态置为init(表示初始化, 需要确认);
- R2将IIH报文中的邻居设置为R1, 组播发送出去;
- R1收到该IIH报文后, 直接确认R2邻居是存在的, 与R2的邻居关系状态变为UP.;
- R1将IIH报文中的邻居设置为R2, 组播发送出去;
- R2收到IIH报文, 确认R1邻居关系, 与R1的邻居关系变为UP状态, 至此邻接关系建立完成.
两边都进入UP状态后, 设备会等到两个IIH报文的发送周期(20s), 然后进行DIS选举. 选举完DIS设备后, DIS设备IIH周期改为3.3333s发送, 10s老化.
ISIS和OSPF邻接建立的差别:
-
状态差别:
- ISIS只有三种状态:down init up
- OSPf有七个状态:down init 2-way exstart exchange loading full
-
选举时间点差别:
- ISIS是邻接建立完成在选举DIS;
- OSPF是邻接建立过程中选举DR(互发hello报文时)
-
默认优先级差别:
-
ISIS默认优先级是64, 优先级0参加选举;
-
OSPF默认优先级是1, 优先级0不参加选举;
-
2.4.2 P2P网络邻接建立
P2P网络邻接建立有两种方式:
两次握手机制(不可靠)
只要ISIS设备收到对端发送的IIH报文, 就认为该邻居UP. 同时down状态设备收到其他设备发送的IIH会直接进入UP状态.
两次握手机制存在非常大的问题, 如果R1设备向R2设备发送完IIH报文后立刻出现故障, R2依然会误认为R1已经UP了, R2也会进入UP状态, 从而出现网络故障.
三次握手机制(可靠, 默认)
过程同广播网络邻接关系建立一致, 但邻接关系建立完之后不会也不需要选举DIS设备.
-
配置命令切换握手机制:
isis ppp-negotiation 2-way isis ppp-negotiation 3-way
只能在p2p网络使用.
-
配置命令让接口忽略IP地址检查:
isis peer-ip-ingnore
对接收到的IIH报文不进行对IP地址检查.
2.5 ISIS的LSDB
3 ISIS LSP更新过程
3.1 广播网络LSP更新过程
- 新加入的路由器R3首先发送IIH报文, 与该广播域中的路由器建立邻接关系, 建立邻接关系之后, R3等待LSP刷新定时器超时, 然后将自己的LSP发往组播地址(Level-1: 01-80-c2-00-00-14; Level-2: 01-80-c2-00-00-15). 这样同一个广播网络内的所有邻居都将收到该LSP报文, 这一过程不需要其他设备进行回复确认;
- 该网段中的DIS会把收到的R3 LSP信息加入LSDB中, 并等待CSNP更新周期(10s), 然后发送CSNP报文;
- R3收到DIS发来的CSNP报文, 对比自己的LSDB(也是一种确认DIS是否收到自己LSP信息的一种方式, 如果DIS没收到R3的LSP报文, R3将再次发送自己的LSP信息), 然后向DIS发送PSNP请求自己没有的LSP信息;
- DIS收到该PSNP报文后向R3发送对于的LSP进行LSDB同步.
3.2 点到点网络LSP更新过程
-
A和B设备直线互相发送IIH报文, 进行ISIS邻接关系建立(P2P不用选举DIS);
-
邻接关系建立后, A和B互相发送CSNP报文, 收到对端发送的CSNP报文之后, 会检查本地LSDB和CSNP的摘要信息是否一致, 如果不一致, 则需要进行LSP更新; 如果一致, 则不需要更新;
-
A发现不一致的情况下, A设备会向B发送一个PSNP报文用于请求对方的具体LSP信息;
-
B设备收到PSNP请求之后, 根据请求消息内容, 将LSDB有关LSP信息封装到LSP报文里发送给A设备, 同时启动LSP重传定时器(5s);
注意: ISIS的广播网络, DIS可以周期性发送CSNP, 所以广播网络不需要专门的确认机制, 但是P2P网络没有DIS, 也就是没有周期发送CSNP的设备, 所以需要进行确认.
-
A设备收到LSP之后, 需要进行本地LSDB更新, 然后向B设备发送PSNP报文进行确认;
-
B设备如果在计时器结束前收到PSNP确认, 则关闭计时器, 否则重新进行第3步.
3.3 LSP处理机制
不管是周期性更新, 还是网络变化出现触发更新, 都需要进行LSP报文的处理.
在广播网络中, 如果A设备收到一个LSP报文更新, A设备会根据本地LSDB内容和LSP报文里面的LSP消息进行对比:
- 相同的路由信息, 对比序列号:
- LSP序列号大于本地: 本地LSDB更新LSP信息, 组播向外发送更新内容.
- LSP序列号小于本地: 收到LSP报文的接口会将LSP报文发送回去.
- 如果序列号一致, 比较remaining lifetime(剩余生存时间):
- 如果LSP剩余生存时间大于本地LSDB, 说明LSP比较新, 更新本地LSDB的LSP信息, 组播向外发送更新内容;
- 如果LSP剩余生存时间小于本地LSDB, 则将本地LSDB中的LSP信息通过LSP报文回复.
- 如果剩余生存时间为0, 删除LSP.
- 如果剩余时间一致, 则比较校验和(checksum):
- 如果收到LSP大于本地, 则更新LSDB;
- 如果小于本地, 则将本地LSDB回复.
- 如果以上全部一致, 则该LSP报文无意义, 丢弃LSP报文.
在点到点网络中, 更新的方式和后续处理和广播网络略有差别:
在收到LSP并判断为需要更新之后, 设备将收到的LSP加入LSDB, 并发送PSNP进行确认, 之后将这新的LSP信息发送给除了发送该LSP报文的其他邻居.
注意: 剩余时间在国际化标准文档中, 只要不是0, 就是一致的(只有0和非0), 如果是0就删除LSP报文, 不是0则不比较剩余时间.
但是华为设备不同:
- 收到LSP剩余时间大于本地, 则认为本地比较新, 将本地LSP信息进行回复.
- 收到LSP剩余时间小于本地, 则认为收到的比较新, 进行LSP更新.
猜测原因: 1. 喜欢和思科反着来(懂得都懂); 2. 遵循国际标准(振声).
4 ISIS路由计算
4.1 L-1(非骨干)路由器的路由计算
通过区域内部泛洪L-1的LSP, 之后同区域内部LSDB同步之后, 再进行SPF算法.
4.2 L-2(骨干)路由器的路由计算
通过区域内部泛洪L-2的LSP, 之后同区域内部LSDB同步之后, 再进行SPF算法.
4.3 L-1-2(骨干)路由器的路由计算
生成两个层级的LSDB, 两个LSDB都会进行SPF计算, 最后生成的路由信息在加入路由表之后, 优先加入L-2的路由.
L-1-2设备会将L-1区域的LSP信息转换成L-2信息在L-2区域泛洪, 但不会将L-2信息转换成L-1信息.
但是为了L-1设备能与L-2区域进行通信, L-1/2会向L-1设备发送ATT=1的L-1 LSP, 用于告诉L-1的设备需要生成去往L-1-2设备的默认路由, 从而实现非骨干区域和骨干区域的通信.
如果需要L-1-2设备能够产生ATT置位, 则需要L-1和L-1-2设备唯一同一Area ID, L-2为不同的Area ID.
ATT产生的默认路由, 并不会专门生成一条LSP来传递, 而是直接将ATT-1写在LSP中, 让L-1的设备生成指向L-1-2的默认路由.
ATT置位是为了产生默认路由, 但在有明细路由存在时不会产生默认路由.
4.4 L-1路由器的次优路径问题
L1收到两台L-1-2设备带有ATT=1的LSP, 生成两条默认路由分别指向两台L-1-2设备, L1只会计算去往L-1-2设备的开销值, 即两条默认路由cost=10, 形成负载分担.
如果R1需要去往R5, 从R3转发, 后续开销比从R2转发小, 出现次优路径, 此时需要配置路由渗透.
4.5 路由渗透(route-link)
路由渗透就是L1-2的设备被允许,可以将L2的LSP信息转换成L1的LSP进行传递.
5 ISIS认证
5.1 根据报文种类分类
-
接口认证: 接口视图下配置, 对L-1和L-2的IIH报文认证.
-
区域认证: ISIS进程视图下配置, 对L-1的SNP和LSP报文进行认证.
-
路由域认证: ISIS进程视图下配置, 对L-2的SNP和LSP报文进行认证.
5.2 根据认证方式认证
- 简单认证(明文): 将配置的密码直接加入报文中, 这种加密方式的安全性低于其他两种方式.
- MD5认证(密文): 通过将配置的密码进行MD5算法加密之后再加入报文中, 提高了密码的安全性;
- Keychain认证;
- HMAC-SHA256认证.
6 ISIS LSP分片
如果一台ISIS设备需要发送LSDB信息非常多, 此时可能一个LSP报文无法放置所有链路状态信息, 于是ISIS衍生出一种分片机制, 就是一台设备产生一个主体LSP和多个分片LSP报文.
分片的标识上面有讲过, 分片标识占用了一个字节, 在查看的时候, 显示为16进制, 因此, 一个系统的分片最多可以产生256个.
如果需要分片, 则一台设备会出现以下几个概念:
- 初始系统: 标识真实的ISIS进程(主体);
- 系统ID: 初始系统的system-id;
- 虚拟系统: 有初始系统虚拟出来的附加系统, 简单来说就是分片系统;
- 附加系统ID: 就是分片的虚拟系统的系统ID, 有网管设备同一分配;
分片的时候, 主体系统和附加系统会通过ISIS的24号TVL表示, 附加系统最多可以有50个, 所以主系统+附加系统可以有51个, 分片最多可以有51x256个.
7 ISIS快速收敛
和OSPF一样, 算法里分成了I-SPF和PRC算法
- OSPF: 区域内不管出现什么变动都是触发I-SPF, 区域间触发PRC, 非常的笨;
- ISIS: 网络发生更新时, 先判断拓扑是否变化, 如果没有变化, 只有路由变化, 则采用PRC算法; 如果拓扑变化则采用I-SPF算法, 将算法的理想使用情况实现.
7.1 智能定时器
同OSPF的智能定时器, 记不清的可以回顾我的这篇OSPF的博客.
ISIS快速扩散机制: ISIS正常情况下应该是收到LSP, 然后计算之后在发送出去, 快速扩散情况下收到LSP后不进行计算, 立刻发送给其他设备.
8 ISIS的基本配置
8.1 配置命令
-
创建ISIS进程并进入:
[Huawei]isis [process-id]
process-id: 进程id, 缺省为1.
-
配置网络实体名称(NET)(isis进程视图下):
[Huawei-isis-1]network-entity net
net为需要为其net地址, 例如: 49.0001.0000.0000.0001.00;
NET地址不是在接口中配置, 而是在ISIS协议里面配置的, 一个进程可以创建至多三个, 但同一进程上net地址的system-id必须要相同.
-
为设备配置全局Level级别:
[Huawei-isis-1]is-level {level-1 | level-1-2 | level-2}
缺省情况下level为level-2.
在网络运行的过程中, 改变ISIS设备的level可能会导致ISIS重启并可能会造成ISIS邻居断连, 建议在配置ISIS时就完成设备level的配置.
-
路由汇总(isis视图下)
summary ip-address mask
路由汇总的掩码不能用简写.
-
进入接口视图, 使能ISIS协议:
[Huawei-g0/0/1]isis enable [process-id]
配置后ISIS将通过该接口建立邻居、扩散LSP报文.
-
配置接口Level级别:
[Huawei-g0/0/1]isis circuit-level [level-1|level-2|level-1-2]
缺省情况下, 接口的level级别为level-1-2, 两台level-1-2在建立邻居关系时, 默认会建立level-1和level-2邻居关系(level-1-2), 如果希望只建立level-1或level-2邻居关系, 可通过修改接口的level级别实现.
-
设置接口网络类型为P2P:
[Huawei-g0/0/1]isis circuit-type p2p
缺省情况下, 接口网络类型根据物理接口决定.
使用该命令将广播网接口模拟成P2P接口时,接口发送Hello报文的间隔时间、宣告邻居失效前IS-IS没有收到的邻居Hello报文数目、点到点链路上LSP报文的重传间隔时间以及1S-IS各种认证均恢复为缺省配置,而DIS优先级、DIS名称、 广播网络上发送CSNP报文的间隔时间等配置均失效。
-
恢复接口的缺省网络类型:
[Huawei-g0/0/1]undo isis circuit-type
使用该命令恢复接口的缺省网络类型时,接口发送Hello报文的间隔时间、宣告邻居失效前IS-IS没有收到的邻居Hello报文数目、点到点链路上LSP报文的重传间隔时间、IS-IS各种认证、 DIS 优先级和广播网络上发送CSNP报文的间隔时间均恢复为缺省配置。
-
修改接口的DIS优先级(需要先配置net地址)
[Huawei-g0/0/1]isis dis-priority priority [level-1|level-2]
该命令用来指定挑选对于层次的DIS是的接口优先级.缺省情况下, IS-IS接口DIS优先级为64.
-
配置ATT置位(ATT永远只会和L-1的LSP有关系):
attached-bit advertise always
无视ATT置位条件, 永远置位ATT
永不置位ATT:
attached-bit advertise always
-
路由渗透(在L-1-2设备上isis视图下配置):
import-route isis level-1 into level-2
命令的形式像ospf的路由引入, 但是这是isis的特殊命令, 表示需要将L2转换成L1进行路由渗透(路由泄露).
-
修改设备开销模式:
isis cost-style [narrow|wide|compatible]
如果需要修改开销值模式, 需要全网设备都修改.
-
修改接口开销值:
isis cost cost
注意不同开销模式的开销值取值范围.
-
接口认证配置:
isis authentication-mode simple|md5|hmac|keychain plain|cipher password [level-1|level-2|send-only]
未在结尾加上层级默认针对L1和L2的IIH报文.
send-only: 只对发送的报文添加认证信息, 接收时无需认证.
-
区域认证配置:
area-authentication-mode simple|md5|hmac|keychain plain|cipher password [all-send-only|snp-packet {authentication-avoid|send-only}]
表示对L-1的SNP和LSP报文进行认证.
all-send-only: 发送的SNP和LSP报文都会检查认证信息, 收到的SNP和LSP可以不检查认证.
snp-packet authentication-avoid: LSP报文收发检查认证, SNP收发检查认证.
snp-packet send-only: LSP和SNP发送携带认证信息, 但收到LSP检查认证, SNP不检查.
-
路由域认证配置:
domain-authentication-mode simple|md5|hmac|keychain plain|cipher password []
-
快速扩散配置(isis视图下):
flash-flood
8.2 查看命令
-
查看邻居:
dis isis peer [verbose]
verbose可以查看详细信息
-
查看设备上的LSP信息:
dis isis lsdb [net]
-
查看ISIS进程:
display current-configuration configuration isis
-
查看接口isis接口运行状态及角色
display isis interface [verbose]
小问题
-
OSPF的LSU一定需要LSAck的回复进行确认吗?
不一定, 当广播里面出现多台设备(DR BDR DRouter), DRouter设备向DR设备发送的LSU更新消息是不需要DR进行回复(LSAck)的, DR后续需要在整个网络中通告自己LSDB的链路状态信息, 若DRouter发现通告的信息没有自己的链路状态信息, 那么DRouter会重新向DR发送LSU.
ISIS的广播网络LSDB同步类似:
设备通过DIS发送的CSNP对比自己的LSDB确认DIS是否收到了自己的LSP信息, 不需要额外通过报文进行确认.