HCIP-ICT实战进阶04-ISIS原理与配置

0 前言

IS-IS(Intermediate System to Intermediate System, 中间系统到中间系统)协议, 和OSPF一样属于内部网关协议, 也是一种采用SPF算法进行路径计算的链路状态协议.

ISIS发展

ISIS最早是OSI七层模型里面出现的路由协议(OSPF是在TCP/IP模型里面出现).

在七层模型里面, 主要了解一下网络层服务:

  1. 无连接服务(CLNS)

    其中的协议主要分成三种:

    • CLNP--被路由协议
    • ISIS--中间系统到中间系统
    • ESIS--终端系统到中间系统

    IS-网络设备, ES-网络终端

  2. 面向连接的服务(CONS)

最早的ISIS协议是为了CLNP提供服务, 不支持IP网络, 最后进行了扩充和修订, 称为集成ISIS协议.

由于设计之初不太一样, 所以ISIS和OSPF报文的封装方式也不太一样.

  • ospf是利用IP进行外层封装
  • ISIS利用MAC进行外层封装

ISIS里面有自己的专属地址格式(NSAP地址--网络服务接入点, 类似ipv4&ipv6)

1 ISIS基本原理

1.1 NSAP地址组成

由两个部分组成, 每个部分也有各自组成部分:

  1. IDP: 类似于IP地址的主网络号;

    • AFI: 地址分配机构和地址格式;
    • IDI: 用于标识域.
  2. 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里面的区域划分), 不同厂商会有不同的概念:

  1. 认为DSP的High Order DSP就是区域号码;
  2. 认为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冲突:

  1. 两台设备直连, RID冲突: 无法建立邻居关系

  2. 两台设备同区域不是直连, R1-R2-R3(R1和R3冲突):

    邻居关系正常建立, R1和R3设备的路由条目会互相学到(但是用不了), R2设备的路由条目会一直变动(LSA更新), 之后R1或者R3会重新选举RID, 消除RID冲突, 恢复网络正常.

  3. 两台设备不同区域, 两台设备都没有进行外部路由引入, 则没有问题(三类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开销值类型

  1. narrow: 窄模式(默认)

    • 收发都是narrow;

    • 接口开销值受报文位数限制, 取值范围为(1~63), 整条链路开销值累加不能超过1023;

    • 窄模式不能携带其他路由的属性(比如segment routing).

  2. wide: 宽模式(常用)

    • 收发都是wide;

    • 开销值取值范围为(1 ~ 2^24-1), 累加上限为2^32-1;

    • 支持携带路由属性(segment routing必须使用宽模式).

  3. compatible: 兼容模式

    • 收发都是narrow和wide;

    • 一个接口从发送报文的时候同时携带窄模式和宽模式.

  4. narrow-兼容

    • 发送是narrow, 接收是narrow和wide.
  5. wide-兼容

    • 发送是wide, 接收是narrow和wide.

1.6.2 计算开销值

ISIS和OSPF一样, 都是去往目标网络的最短路径所有的出接口开销值累加.

当然, ISIS也可以类似OSPF, 手工指定, 或者自动计算:

  1. 接口开销: 为单个接口设置开销;
  2. 全局开销: 为所有接口配置开销;
  3. 自动计算开销: 根据接口带宽自动计算到达目的开销;

1.7 ISIS报文介绍

ISIS报文是直接封装在数据链路层的帧结构的.

  1. 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.

  2. LSP PDU: 链路状态报文, 用于交换链路状态信息.(不同于OPSF中LSA放在LSU报文中, LSP既可以是链路状态信息也是报文)

    LSP报文同样分成了两种:

    • level-1 LSP
    • level-2 LSP

    ISIS更新周期: 900s更新, 1200s老化, 倒计时(OSPF: 1800更新, 3600老化, 正计时)

    老化倒计时为0时, 会等待60s再删除, 但一般问的老化时间还是1200s.

  3. 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报文详细结构

  1. 数据链路层:

    • 源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)

  2. type/length:

    1. 当该字段数值小于等于1500(0x05DC), 表示报文是IEEE 802.3结构;
    2. 当字段大于等于1536(0x0600), 表示报文是Ethernet II结构.

    目前学到比较多的数据帧, 结构都是Ethernet II结构, 比如ARP: 0x0806.

    目前有在使用802.3的协议主要就是ISIS.

  3. LLC子层:

    • DSAP: 目的服务访问点, ISIS报文的DSAP会写成0xfe
    • SSAP: 源服务访问点, ISIS报文的DSAP会写成0xfe
    • Control: 控制字段, 表面当前不是正规的TCP/IP报文.

1.8.1 ISIS数据封装--ISIS通用头部(类似OSPF的报头)

  1. Intradomain Routeing Protocol Information Discriminator: 1Byte, 域内路由选择鉴别符, 在ISIS报文里面, 该字段固定为0x83
  2. PDU Header Length: 1Byte, PDU头部长度标识, ISIS通用
  3. Version: 1Byte, 版本号码, 当前固定为0x01
  4. system-id length: 1Byte, 表示NSAP地址或者NET地址的system-id长度; 如果为0, 表示system-id是正常6Byte, 如果是255, 表示system-id不正常为空.
  5. reserved: 3bit, 保留未使用
  6. 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
  7. version: 1Byte, 版本号码, 重复定义, 固定0x01;
  8. reserved: 1Byte, 保留未使用, 重复定义;
  9. Max Area Address: 1Byte, 表示ISIS支持最大区域数量, 设置为1~254, 默认是0. 默认为0时, 表示当前设备支持3个区域.

1.8.2 ISIS数据封装--消息内容

变长CLV(Code-Length-Value) 三元组, 其实就是TLV数据结构:

  1. type: 当前内容类型;
  2. length: 内容长度;
  3. 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

  1. 通用头部;

  2. Res/Circuit type: 1字节, 表示发送该PDU设备的层级, 前6bit未使用, 后2bit:

    • 00(0x0): 不可用

    • 01(0x1): level-1

    • 10(0x2): level-2

    • 11(0x3): level-1-2

  3. Source ID: 6字节, 始发该IIH报文设备的system-id;

  4. Holding time: 2字节, 保持时间, 邻居路由器等待始发路由器发送下一个IIH报文的时间间隔(老化时间)

  5. PUD length: 2字节, PDU数据包的长度

  6. res/priority 最前1bit保留未使用, 后7bit表示DIS优先级;

  7. LAN ID: DIS的system-id长度(7Byte)+1字节, 一般用于DIS的system-id和1字节伪节点标识.

  8. TLV: 可变长度域.

P2P IIH

  1. 通用头部;

  2. Res/Circuit type: 1字节, 表示发送该PDU设备的层级, 前6bit未使用, 后2bit:

    • 00(0x0): 不可用

    • 01(0x1): level-1

    • 10(0x2): level-2

    • 11(0x3): level-1-2

  3. Source ID: 6字节, 始发该IIH报文设备的system-id;

  4. Holding time: 2字节, 保持时间, 固定为30s(p2p不选举DIS);

  5. PUD length: 2字节, PDU数据包的长度;

  6. Local circuit ID: 1字节, 本地链路ID, 只有p2p网络会有该字段, 始发该报文的设备会给接口做一个唯一标识.

  7. TLV: 可变长度域.

1.8.4 LSP报文

(ISIS的LSP有两个意思: 一个是LSP{(LSU)}报文, 一个是LSP{LSA}信息), 这里讲的是LSP报文.

  1. 通用头部;

  2. PDU Length: PDU长度

  3. Remaining lifetime: LSP生成时间, 1200s, 倒计时

  4. 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的最后一片

  5. Seq: 4Btye, 序列号, 每次更新+1, 最大2^32-1;

  6. checksum: 校验和(从remaining lifetime之后的信息开始校验);

  7. P: 自动修复, 只和L2 LSP有关系, 类似虚连接, 但是没有厂商实现

  8. ATT: 始发路由器是一个与其他区域相连的设备, 该字段在L1/L2的LSP都存在, 但只有L1-2设备产生的L1的LSP才使用;

  9. OL: 过载位, 被置位的LSP会在网络中会传播, 但是不会进行SPF计算;

  10. IS type: 产生这个LSP的设备类型

    • 01: L1设备
    • 11: L2设备
  11. TLV: 可变长度域.

1.8.5 SNP报文

CSNP

全序列号报文, 携带某台设备的LSDB的所有LSP摘要信息, 主要在广播网络上由DIS发送(周期10s), 用于维护广播网络中所有设备的LSDB; 在p2p网络中, 也会有CSNP报文, 但只是在开始建立邻接关系才会使用.

  1. PDU Length: PDU长度;
  2. Source ID: 6字节, 始发该CSNP报文设备的system-id;
  3. Strat LSP ID: 表示TLV字段中描述的LSP 范围的第一个 LSP ID;
  4. End LSP ID: 表示TLV字段中描述的LSP范围的最后一个LSP ID;
  5. TLV: 可变长度域.

PSNP

部分序列号报文, 只携带部分LSP摘要信息, 当设备发现LSDB不同步时, 通过PSNP报文来请求新的LSP信息. 在p2p网络中, 收到LSP信息需要用PSNP进行回复确认.

  1. PDU Length: PDU长度;
  2. Source ID: 6字节, 始发该IIH报文设备的system-id;
  3. TLV: 可变长度域.

2 ISIS工作原理

2.1 DIS设备

ISIS的DIS属性:

类似于OSPF的DR, 但是不太一样

  1. DIS: 指定中间系统, 用于在广播网络中, 选举出一台DIS设备(广播网络需要选举DIS, P2P不需要), 减少链路状态信息泛洪.

  2. Hello时间: 普通ISIS路由器hello周期是10s, 但是当设备选举为DIS之后, 则hello时间修改为10/3 s, 修改这个hello周期时间是为了更快检测到DIS是否出现故障.

  3. 优先级: ISIS默认优先级是64, 可配置范围是0-127. (OSPF: 1, 0-255)

  4. 选举优先级规则:

    1. 比较优先级: 数值越大越优先;
    2. 比较mac地址, mac地址越大越优先(ISIS报文封装只有MAC地址没有IP地址).
  5. 如果设备之间的关系是Level-1-2关系, 则需要选举两个DIS, level-1一个, level-2一个.

  6. DIS支持抢占(OSPF不会), 所以没有备份(BDR).

  7. 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邻接关系建立前提(原则)

  1. 两台设备层级需要一致, 需要两边设备具有相同层级的属性, 比如L1和L1, L2和L2, L2和L1-2, L1-2和L1-2;
  2. 如果是建立L1关系, 则Area ID(区域号码)需要一致, L2关系无影响;
  3. 两边设备需要处于同一个物理连接, 如果是广播网络, 则设备之间在同一个广播域; 如果是P2P设备, 则设备之间需要直连. 原因是ISIS使用数据链路成封装, 是组播MAC传递消息, 只能在单个网络内传递;
  4. 网络类型需要一致(p2p连接/广播网络), 或者是通过命令修改为同一个接口类型;
  5. 如果存在认证, 则两边认证需要保持一致.
  6. 最好是相同网段(默认情况下).

2.4 ISIS邻接关系建立

2.4.1 广播网络邻接关系建立

前提: 广播网络中的IIH报文有两种(L-1 IIH和L-2 IIH), 目的MAC地址是组播MAC(L-1是14, L-2是15).

一开始两边的ISIS设备都是down状态, 以R1先发送为例:

  1. R1通过组播mac地址的方式发送一个IIH报文(该报文没有任何邻接信息);
  2. R2设备收到IIH报文, 认为自己可能有一个邻居R1, 此时R2将自己对于R1的邻居关系状态置为init(表示初始化, 需要确认);
  3. R2将IIH报文中的邻居设置为R1, 组播发送出去;
  4. R1收到该IIH报文后, 直接确认R2邻居是存在的, 与R2的邻居关系状态变为UP.;
  5. R1将IIH报文中的邻居设置为R2, 组播发送出去;
  6. R2收到IIH报文, 确认R1邻居关系, 与R1的邻居关系变为UP状态, 至此邻接关系建立完成.

两边都进入UP状态后, 设备会等到两个IIH报文的发送周期(20s), 然后进行DIS选举. 选举完DIS设备后, DIS设备IIH周期改为3.3333s发送, 10s老化.

ISIS和OSPF邻接建立的差别:

  1. 状态差别:

    • ISIS只有三种状态:down init up
    • OSPf有七个状态:down init 2-way exstart exchange loading full
  2. 选举时间点差别:

    • ISIS是邻接建立完成在选举DIS;
    • OSPF是邻接建立过程中选举DR(互发hello报文时)
  3. 默认优先级差别:

    • 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设备.

  1. 配置命令切换握手机制:

    isis ppp-negotiation 2-way
    isis ppp-negotiation 3-way

    只能在p2p网络使用.

  2. 配置命令让接口忽略IP地址检查:

    isis peer-ip-ingnore

    对接收到的IIH报文不进行对IP地址检查.

2.5 ISIS的LSDB

3 ISIS LSP更新过程

3.1 广播网络LSP更新过程

  1. 新加入的路由器R3首先发送IIH报文, 与该广播域中的路由器建立邻接关系, 建立邻接关系之后, R3等待LSP刷新定时器超时, 然后将自己的LSP发往组播地址(Level-1: 01-80-c2-00-00-14; Level-2: 01-80-c2-00-00-15). 这样同一个广播网络内的所有邻居都将收到该LSP报文, 这一过程不需要其他设备进行回复确认;
  2. 该网段中的DIS会把收到的R3 LSP信息加入LSDB中, 并等待CSNP更新周期(10s), 然后发送CSNP报文;
  3. R3收到DIS发来的CSNP报文, 对比自己的LSDB(也是一种确认DIS是否收到自己LSP信息的一种方式, 如果DIS没收到R3的LSP报文, R3将再次发送自己的LSP信息), 然后向DIS发送PSNP请求自己没有的LSP信息;
  4. DIS收到该PSNP报文后向R3发送对于的LSP进行LSDB同步.

3.2 点到点网络LSP更新过程

  1. A和B设备直线互相发送IIH报文, 进行ISIS邻接关系建立(P2P不用选举DIS);

  2. 邻接关系建立后, A和B互相发送CSNP报文, 收到对端发送的CSNP报文之后, 会检查本地LSDB和CSNP的摘要信息是否一致, 如果不一致, 则需要进行LSP更新; 如果一致, 则不需要更新;

  3. A发现不一致的情况下, A设备会向B发送一个PSNP报文用于请求对方的具体LSP信息;

  4. B设备收到PSNP请求之后, 根据请求消息内容, 将LSDB有关LSP信息封装到LSP报文里发送给A设备, 同时启动LSP重传定时器(5s);

    注意: ISIS的广播网络, DIS可以周期性发送CSNP, 所以广播网络不需要专门的确认机制, 但是P2P网络没有DIS, 也就是没有周期发送CSNP的设备, 所以需要进行确认.

  5. A设备收到LSP之后, 需要进行本地LSDB更新, 然后向B设备发送PSNP报文进行确认;

  6. B设备如果在计时器结束前收到PSNP确认, 则关闭计时器, 否则重新进行第3步.

3.3 LSP处理机制

不管是周期性更新, 还是网络变化出现触发更新, 都需要进行LSP报文的处理.

广播网络中, 如果A设备收到一个LSP报文更新, A设备会根据本地LSDB内容和LSP报文里面的LSP消息进行对比:

  1. 相同的路由信息, 对比序列号:

    • LSP序列号大于本地: 本地LSDB更新LSP信息, 组播向外发送更新内容.
    • LSP序列号小于本地: 收到LSP报文的接口会将LSP报文发送回去.
  2. 如果序列号一致, 比较remaining lifetime(剩余生存时间):
    • 如果LSP剩余生存时间大于本地LSDB, 说明LSP比较新, 更新本地LSDB的LSP信息, 组播向外发送更新内容;
    • 如果LSP剩余生存时间小于本地LSDB, 则将本地LSDB中的LSP信息通过LSP报文回复.
    • 如果剩余生存时间为0, 删除LSP.
  3. 如果剩余时间一致, 则比较校验和(checksum):
    • 如果收到LSP大于本地, 则更新LSDB;
    • 如果小于本地, 则将本地LSDB回复.
  4. 如果以上全部一致, 则该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 根据报文种类分类

  1. 接口认证: 接口视图下配置, 对L-1和L-2的IIH报文认证.

  2. 区域认证: ISIS进程视图下配置, 对L-1的SNP和LSP报文进行认证.

  3. 路由域认证: ISIS进程视图下配置, 对L-2的SNP和LSP报文进行认证.

5.2 根据认证方式认证

  1. 简单认证(明文): 将配置的密码直接加入报文中, 这种加密方式的安全性低于其他两种方式.
  2. MD5认证(密文): 通过将配置的密码进行MD5算法加密之后再加入报文中, 提高了密码的安全性;
  3. Keychain认证;
  4. HMAC-SHA256认证.

6 ISIS LSP分片

如果一台ISIS设备需要发送LSDB信息非常多, 此时可能一个LSP报文无法放置所有链路状态信息, 于是ISIS衍生出一种分片机制, 就是一台设备产生一个主体LSP和多个分片LSP报文.

分片的标识上面有讲过, 分片标识占用了一个字节, 在查看的时候, 显示为16进制, 因此, 一个系统的分片最多可以产生256个.

如果需要分片, 则一台设备会出现以下几个概念:

  1. 初始系统: 标识真实的ISIS进程(主体);
  2. 系统ID: 初始系统的system-id;
  3. 虚拟系统: 有初始系统虚拟出来的附加系统, 简单来说就是分片系统;
  4. 附加系统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 配置命令

  1. 创建ISIS进程并进入:

    [Huawei]isis [process-id]

    process-id: 进程id, 缺省为1.

  2. 配置网络实体名称(NET)(isis进程视图下):

    [Huawei-isis-1]network-entity net

    net为需要为其net地址, 例如: 49.0001.0000.0000.0001.00;

    NET地址不是在接口中配置, 而是在ISIS协议里面配置的, 一个进程可以创建至多三个, 但同一进程上net地址的system-id必须要相同.

  3. 为设备配置全局Level级别:

    [Huawei-isis-1]is-level {level-1 | level-1-2 | level-2}

    缺省情况下level为level-2.

    在网络运行的过程中, 改变ISIS设备的level可能会导致ISIS重启并可能会造成ISIS邻居断连, 建议在配置ISIS时就完成设备level的配置.

  4. 路由汇总(isis视图下)

    summary ip-address mask

    路由汇总的掩码不能用简写.

  5. 进入接口视图, 使能ISIS协议:

    [Huawei-g0/0/1]isis enable [process-id]

    配置后ISIS将通过该接口建立邻居、扩散LSP报文.

  6. 配置接口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级别实现.

  7. 设置接口网络类型为P2P:

    [Huawei-g0/0/1]isis circuit-type p2p

    缺省情况下, 接口网络类型根据物理接口决定.

    使用该命令将广播网接口模拟成P2P接口时,接口发送Hello报文的间隔时间、宣告邻居失效前IS-IS没有收到的邻居Hello报文数目、点到点链路上LSP报文的重传间隔时间以及1S-IS各种认证均恢复为缺省配置,而DIS优先级、DIS名称、 广播网络上发送CSNP报文的间隔时间等配置均失效

  8. 恢复接口的缺省网络类型:

    [Huawei-g0/0/1]undo isis circuit-type

    使用该命令恢复接口的缺省网络类型时,接口发送Hello报文的间隔时间、宣告邻居失效前IS-IS没有收到的邻居Hello报文数目、点到点链路上LSP报文的重传间隔时间、IS-IS各种认证、 DIS 优先级和广播网络上发送CSNP报文的间隔时间均恢复为缺省配置

  9. 修改接口的DIS优先级(需要先配置net地址)

    [Huawei-g0/0/1]isis dis-priority priority [level-1|level-2]

    该命令用来指定挑选对于层次的DIS是的接口优先级.缺省情况下, IS-IS接口DIS优先级为64.

  10. 配置ATT置位(ATT永远只会和L-1的LSP有关系):

    attached-bit advertise always

    无视ATT置位条件, 永远置位ATT

    永不置位ATT:

    attached-bit advertise always
  11. 路由渗透(在L-1-2设备上isis视图下配置):

    import-route isis level-1 into level-2

    命令的形式像ospf的路由引入, 但是这是isis的特殊命令, 表示需要将L2转换成L1进行路由渗透(路由泄露).

  12. 修改设备开销模式:

    isis cost-style [narrow|wide|compatible]

    如果需要修改开销值模式, 需要全网设备都修改.

  13. 修改接口开销值:

    isis cost cost

    注意不同开销模式的开销值取值范围.

  14. 接口认证配置:

    isis authentication-mode simple|md5|hmac|keychain plain|cipher password [level-1|level-2|send-only]

    未在结尾加上层级默认针对L1和L2的IIH报文.

    send-only: 只对发送的报文添加认证信息, 接收时无需认证.

  15. 区域认证配置:

    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不检查.

  16. 路由域认证配置:

    domain-authentication-mode simple|md5|hmac|keychain plain|cipher password []
  17. 快速扩散配置(isis视图下):

    flash-flood

8.2 查看命令

  1. 查看邻居:

    dis isis peer [verbose]

    verbose可以查看详细信息

  2. 查看设备上的LSP信息:

    dis isis lsdb [net]
  3. 查看ISIS进程:

    display current-configuration configuration  isis
  4. 查看接口isis接口运行状态及角色

    display isis interface [verbose]

小问题

  1. OSPF的LSU一定需要LSAck的回复进行确认吗?

    不一定, 当广播里面出现多台设备(DR BDR DRouter), DRouter设备向DR设备发送的LSU更新消息是不需要DR进行回复(LSAck)的, DR后续需要在整个网络中通告自己LSDB的链路状态信息, 若DRouter发现通告的信息没有自己的链路状态信息, 那么DRouter会重新向DR发送LSU.

    ISIS的广播网络LSDB同步类似:

    设备通过DIS发送的CSNP对比自己的LSDB确认DIS是否收到了自己的LSP信息, 不需要额外通过报文进行确认.

HCIP-ICT实战进阶04-ISIS原理与配置的更多相关文章

  1. 【腾讯优测干货分享】如何降低App的待机内存(四)——进阶:内存原理

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/3FTPFvZRqyAQnU047kmWJQ 1.4进阶:内存原理 在 ...

  2. DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一)

    要实现软件设计.软件开发在一个统一的思想.统一的节奏下进行,就应该有一个轻量级的框架对开发过程与代码编写做一定的约束. 虽然DDD是一个软件开发的方法,而不是具体的技术或框架,但拥有一个轻量级的框架仍 ...

  3. DDD实战进阶第一波(五):开发一般业务的大健康行业直销系统(实现产品上下文领域层)

    从这篇文章开始,我们根据前面的DDD理论与DDD框架的约束,正式进入直销系统案例的开发. 本篇文章主要讲产品上下文中的领域层的主要实现,先简单讲下业务方面的需求:产品SPU与产品SKU,产品SPU主要 ...

  4. DDD实战进阶第一波(六):开发一般业务的大健康行业直销系统(实现产品上下文仓储与应用服务层)

    前一篇文章我们完成了产品上下文的领域层,我们已经有了关于产品方面的简单领域逻辑,我们接着来实现产品上下文关于仓储持久化与应用层的用例如何来协调 领域逻辑与仓储持久化. 首先大家需要明确的是,产品上下文 ...

  5. DDD实战进阶第一波(八):开发一般业务的大健康行业直销系统(业务逻辑条件判断最佳实践)

    这篇文章其实是大健康行业直销系统的番外篇,主要给大家讲讲如何在领域逻辑中,有效的处理业务逻辑条件判断的最佳实践问题. 大家都知道,聚合根.实体和值对象这些领域对象都自身处理自己的业务逻辑.在业务处理过 ...

  6. Struts2进阶(一)运行原理及搭建步骤

    Struts2进阶(一)运行原理 Struts2框架 Struts2框架搭建步骤 致力于web服务,不可避免的涉及到编程实现部分功能.考虑使用到SSH框架中的Struts2.本篇文章只为深入理解Str ...

  7. DDD实战进阶第一波(九):开发一般业务的大健康行业直销系统(实现经销商上下文仓储与领域逻辑)

    上篇文章主要讲述了经销商上下文的需求与POCO对象,这篇文章主要讲述该界限上下文的仓储与领域逻辑的实现. 关于界限上下文与EF Core数据访问上下文参考产品上下文相应的实现,这里不再累述. 因为在经 ...

  8. DDD实战进阶第一波(十):开发一般业务的大健康行业直销系统(实现经销商登录仓储与逻辑)

    上一篇文章主要讲了经销商注册的仓储和领域逻辑的实现,我们先把应用服务协调完成经销商注册这部分暂停一下,后面文章统一讲. 这篇文章主要讲讲经销商登录的仓储和相关逻辑的实现. 在现代应用程序前后端分离的实 ...

  9. DDD实战进阶第一波(十一):开发一般业务的大健康行业直销系统(实现经销商代注册用例与登录令牌分发)

    前两篇文章主要实现了经销商代注册的仓储与领域逻辑.经销商登录的仓储与相关逻辑,这篇文章主要讲述经销商代注册的用例与经销商登录的查询功能. 一.经销商代注册用例 在经销商代注册用例中,我们需要传递经销商 ...

  10. DDD实战进阶第一波(一):开发一般业务的大健康行业直销系统(概述)

    本系列文章 DDD实战进阶第一波(一):开发一般业务的大健康行业直销系统(概述) DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一) 近年来,关于如何开发基于 ...

随机推荐

  1. [转载]Linux关于磁盘操作命令

    一.查看篇 1.1.du : 查看文件和 目录的使用空间 语法: du [参数]  [文件或目录] 参数 说明 -a 列出所有的文件与目录容量. -h 以G.M.K为单位,返回容量. -s 列出总量. ...

  2. 在前端js worker里使用dom并且加载jquery

    四个工具: nodejs + npm npm安装的jsdom npm安装的jquery npm安装的browserify 网址: browserify: https://browserify.org/ ...

  3. JAVA的作用

    JAVA的用途广泛:1 .银行系统,政企信息系统,支付系统,大数据平台,网站平台. 2 .Saas云,手机app,云管理系统后台,电商系统后台,桌面工具. JAVA和PYTHON的抉择:JAVA是C语 ...

  4. Account Manager privacy agreement

    Account Manager privacy agreement [Account Manager] (hereinafter referred to as "we") )We ...

  5. SQL Server 2012主从数据库的订阅和发布,实现数据库读写分离(主从备份)

    学习:https://www.bilibili.com/video/BV13B4y1h7Wu?p=12&spm_id_from=pageDriver&vd_source=3f21d2e ...

  6. 字符串内特殊字符的替换处理,如对\n的替换

    一.对于字符串特殊字符的替换 对于字符串内,\n的处理,如何去掉 s='123,456\n' s1=s.strip('\n') s2=s.replace('\n','') print(s) print ...

  7. java8 利用 ConcurrentHashMap list根据 某个属性 去重

    //自定义方法private static <T> Predicate<T> distinctByKey(Function<? super T, Object> k ...

  8. a菜单点击标红,其他标黑代码

    <script> let aList = document.querySelectorAll('a'); console.log(aList); for (let index = 0; i ...

  9. 在windows上搭建spark遇到的问题

    报错如下: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: --------- ...

  10. Q查询和F查询

    F查询与Q查询 F查询 Django 提供 F() 来做这样的比较.F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值. # 查询评论数大于收藏数的书籍 from d ...