IS-IS 网络类型
相比于 OSPF 支持的四种网络类型,IS-IS 仅支持两种网络类型:
-
广播网络;
-
P2P 网络。
默认情况下,物理介质如果是以太网链路,对应的 IS-IS 网络类型为广播网络;物理介质如果是串行链路(比如 PPP、HDLC),对应的 IS-IS 网络类型为 P2P 网络。IS-IS 协议在这两种网络下的工作机制不一样,例如:广播网络中有选举 DIS,而 P2P 网络中不用选举(关于 DIS 的内容下一节会介绍),此外,两种网络的链路状态数据库的同步过程也有些区别。对于 NBMA 网络(比如 ATM,帧中继),需要配置子接口,并且是点对点的子接口才能支持 IS-IS 协议,IS-IS 协议是不支持点对多点子接口的。
IS-IS 路由器角色
IS-IS 路由器有 L1、L2 和 L1/2 三种角色,华为路由器默认情况下是 L1/2。三种路由器的特点如下:
-
L1 路由器的特点
-
只有本区域(L1 区域)的链路状态信息。
-
默认情况下,只能通过离自己最近的 L1/2 路由器访问其他区域。
-
通过接收到带有 ATT 位的 LSP 来生成一条指向离自己最近的 L1/2 路由器的默认路由,用于访问其他区域。
-
-
L2 路由器的特点
-
拥有骨干区域(L2 区域)的链路状态数据库信息。
-
跟其他 L2 或 L1/2 路由器一起构成骨干区域。
-
拥有整个路由域的路由信息。
-
-
L1/2 路由器的特点
-
连接了骨干区域和普通区域,相当于 OSPF 的 ABR,必须维护两张链路状态数据库(L1 和 L2)。
-
与其他的 L2 或 L1/2 路由器构成骨干区域。
-
会在自己生成的 L1 的 LSP 中设置 ATT 位。
-
拥有整个路由域的路由信息。
-
邻接关系的建立
IS-IS 协议作为一种链路状态路由协议,每台路由器都会生成 LSP,然后将其泛洪到网络中,所有路由器都会将 LSP(本地和其他路由器通告的)存放至 LSDB,再基于 LSDB 利用 SPF 算法计算出最优路由。泛洪 LSP 之前需要跟相邻路由器形成邻接关系,只有邻接关系形成后,LSP 才能在相邻路由器之间互相交换,进而更新自己的 LSDB。
对于 L1 和 L2 的路由器,IS-IS 协议可以形成不同层次的邻接关系。这里只需要注意,一台 L1 路由器是不能和 L2 路由器建立邻接关系的。影响两台 IS-IS 路由器建立邻接关系的因素有两方面。
一方面是从路由器层次和区域 ID 上考虑,要建立邻接关系必须满足以下条件:
-
两台 L1 路由器必须在同一区域才能建立邻接关系。
-
两台 L2 路由器建立 L2 邻接关系不要求在同一区域。
-
一台 L1 路由器和一台 L1/2 路由器在相同区域时才能形成 L1 邻接关系。
-
一台 L2 路由器和一台 L1/2 路由器不管是同区域还是不同区域,都能形成 L2 邻接关系。
-
两台 L1/2 路由器,同区域内可形成 L1 和 L2 邻接关系,不同区域只能形成 L2 邻接关系。
表格展示路由器之间建立邻接关系的条件
路由器类型 | 相同区域 | 不同区域 |
---|---|---|
L1 与 L1 | 可建立邻接关系 | 无法建立邻接关系 |
L2 与 L2 | 可建立邻接关系 | 可建立邻接关系 |
L1 与 L1/2 | 可形成 L1 邻接关系 | 无法形成 L1 邻接关系 |
L2 与 L1/2 | 可形成 L2 邻接关系 | 可形成 L2 邻接关系 |
L1/2 与 L1/2 | 可形成 L1 和 L2 邻接关系 | 只能形成 L2 邻接关系 |
从其他因素考虑,有以下条件需要满足。
-
链路两端的 IS-IS 接口的网络类型必须一样。
-
华为还要求链路两端的 IP 地址位于同一个子网。
-
IS-IS 要求整个域内路由器使用的 System-Id 长度必须一致,在华为的实现中,System-Id 长度固定使用 6Byte:该规则用于 P2P 邻接。
-
两台路由器使用的最大区域地址数要相同,华为默认支持最大区域地址数是 3:该规则用于 P2P 邻接。
-
如果配置了认证,要求两台路由器的认证信息要一致(认证类型和密钥信息)。
-
要求链路两端的接口 MTU 值要一致;在华为的实现中,不管是 P2P 链路还是广播链路,发送的 Hello 都是填充至接口 MTU 大小,用以检查链路两端的接口 MTU。
了解了 IS-IS 协议建立邻接关系的条件后,再来看一下邻接关系的建立过程。OSPF 建立邻接关系的过程是比较复杂的,状态机比较多;而 IS-IS 的邻接关系建立过程相对简单,下面讲解一下 IS-IS 分别在广播网络和 P2P 网络中的邻接关系建立过程。
广播网络的邻接关系建立
在广播网络中,IS-IS 使用 LAN IIH 来建立邻接关系,L1 的 LAN IIH 发送到组播地址:01-80-c2-00-00-14,L2 的 LAN IIH 发送到组播地址:01-80-c2-00-00-15。
当路由器发送 Hello 报文时,它会根据接口的层级决定发送出的是 L1 的 Hello 还是 L2 的 Hello。接口的层级可以在接口下配置,跟全局的层级是没关系的,接口默认的层级是 L1/2。
当路由器收到 Hello 报文后,检查跟发送 Hello 报文的路由器的邻接情况,如果已经建立好邻接关系,则在邻居表中重置和此邻居关联的保持定时器;如果邻接关系没有建立,则通过发送过来的 Hello 报文中的参数决定是否建立新的邻接关系。
邻接关系建立过程
广播网络中邻接关系建立
两个 L2 路由器在广播链路上建立 L2 邻接关系的建立过程如下:
具体过程:
-
R1 的接口启动:1S-IS 里程后,发出 L2 LAN IIH,报文中携带了自己的 System-Id。IS Neighbor 列表中没有任何邻居标识。
-
R2 接收 Hello 报文:将自己和 R1 的邻接状态设置为初始化状态,然后向 R1 回复自己的 Hello 报文,报文中携带了自己的 System-ID。同时在 IS Neighbor 列表中携带了 R1。
-
R1 接收 R2 的 Hello 报文:由于在这份 Hello 报文的邻居列表中看到了自己的 System-ID,R1 将 R2 的邻接关系状态设置为 UP。然后在向 R2 发送的 Hello 报文中,也会将 R2 的 System-ID 放到 IS Neighbor 邻居列表中。
-
R2 接收 Hello 报文:也将自己与 R1 的邻接关系状态设置为 UP。至此,两台路由器的邻接关系建立完成。
L1 路由器建立 L1 邻接关系的过程与此类似。
为保证邻接关系建立的可靠性,广播网络中的 Hello 中使用了类型 6 的 IS Neighbor TLV(IIS Neighbors),路由器如果在接收到的 Hello 报文中看到了自己的 System-ID,那么就宣告邻接关系建立起来了,这也叫 “三次握手” 机制。“三次握手” 机制可以避免因单通故障导致邻居之间一边宣告邻接关系 UP 了,另一边还是 Down 的状态。
P2P 网络中邻接关系建立
由于当初在设计 IS-IS 的时候,根据 ISO10589 的定义,点对点 Hello 报文不包括 IS Neighbor TLV (类型 6),因此,在 P2P 网络中无法像广播网络那样使用 “三次握手” 机制来建立邻接关系,而只能使用 “两次握手” 机制,这导致的后果前面已经说过。直到在后来的集成 IS-IS 协议中才支持通过 “三次握手” 机制建立邻接关系。
RouterA 和 RouterB 之间通过 P2P 网络互连
“两次握手”邻接关系建立过程
1.RouterA 接口启动:IS-IS 后,首先向 RouterB 发送一份 P2P IIH,报文中携带了自己的 System-Id 和其他信息,但报文并没有 IS Neighbor 邻居列表。
2.RouterB 接收 Hello 报文:直接将 RouterA 的邻接状态设置为 UP。
3.RouterA 接收 Hello 报文:也在收到 RouterB 的 Hello 报文后将邻接状态直接设置为 UP。
为支持在 P2P 网络中使用 “三次握手” 机制建立邻接关系,集成 IS-IS 协议的 Hello 报文增加了一个新字段,叫 P2P 邻接状态,使用类型 240 的 TLV 携带邻居的信息 (240 P2P 3-Way Adj. State)。考虑到向后兼容性,如果一台比较老的路由器不支持该 TLV,接收到后可以忽略它,按照老的方式 “两次握手” 机制建立邻接关系。华为的实现是在 P2P 网络默认使用 “三次握手” 机制,在说邻接关系建立之前,先来了解一下类型 240 的 TLV 包含的内容:
-
类型:OxFO;
-
长度:5~17Byte;
-
值:1Byte,表示邻接状态,一共有 3 种状态,UP (=0),Initializing (=1),Down (=2);
-
扩展的本地电路 1D:4Byte,本端对点对点网络接口的标识;
-
邻居 System-ID:邻居系统 ID;
-
邻居扩展的本地电路 ID:0 或 4Byte,邻居端对点对点网络接口的标识。
有了类型 240 的 TLV 后,路由器在接收到的 Hello 报文中,通过确认 Neighbor SystemID 字段是否包含自己的 System-ID,从而实现 “三次握手” 机制。同时,本地的邻接状态基于当前状态和收到的类型 240TLV 中显示的邻接状态值进行设置。
“三次握手”邻接关系建立过程
-
RouterA 接口启动:IS-IS 后,首先发出邻接状态为 Down 的 P2P IIH。
-
RouterB 接收 Hello:根据里面邻接状态字段将 RouterA 邻接状态设置为 Initializing,并在回复给 RouterA 的 Hello 报文中将邻接状态字段设置成 Initializing。
-
RouterA 接收 Hello:从 RouterB 接收到的邻接状态为 Initializing,并且 Neighbor SystemID 中包含了自己,立刻将 RouterB 的邻接状态设置为 UP 状态;并且在发给 RouterB 的下一 Hello 报文中,将邻接状态字段设置为 UP。
-
RouterB 接收 Hello:接收到 RouterA 的邻接状态为 UP 的 Hello 报文后,立刻将 RouterA 的邻接状态设置为 UP。至此,RouterA 和 RouterB 的邻接关系建立完成。
DIS
IS-IS 路由器通过 Hello 报文建立邻接关系。两台路由器建立完邻接关系之后,就开始交换链路状态的状态信息(也就是 LSDB 的同步),交换过程是通过泛洪 LSP 来实现的。为保障 LSP 泛洪的准确性和及时性,要求在拓扑发生变化时,立即泛洪新的 LSP,在网络稳定时也要周期性泛洪 LSP,这就提高了带宽和处理资源开销。
在广播型多路访问网络中,IS-IS 协议需要在所有路由器之间建立邻接关系,网络中邻接关系越多,为确保 LSP 泛洪的可靠性而带来的网络资源开销就越大。为降低在多路访问网络中邻接关系的复杂性,提高带宽利用率,IS-IS 协议将整个多路访问网络本身看作一台路由器或一个伪节点。IS-IS 协议在多路访问网络中需要 DIS(Designated IS,指定 IS),由 DIS 来抽象出并发挥伪节点的作用。有了 DIS 后,多路访问网络中的邻居间泛洪 LSP 后,通过 DIS 的 SNP(序列号报文)来确保 LSP 泛洪的可靠。
DIS 选举过程
在广播网络中,必须有一台路由器被推举为 DIS,而 IS-IS 协议选举 DIS 的过程非常简单。在 IS-IS 路由器的接口有 L1 和 L2 两个层级,每一层都有一个优先级 - L1 优先级和 L2 优先级,网络中需要为 L1 和 L2 分别选举对应的 DIS,因为在同一个广播型多路访问网络中可能存在两邻接关系 - L1 和 L2,这两种邻接关系下的 LSDB 同步(泛洪 LSP)过程是相互独立的,所以必须要有相应层级的 DIS。
邻接关系建立后,路由器再等待两个 Hello 报文的时间,才开始选举 DIS。在选举过程中,只有邻接状态为 UP 的路由器才有资格参与选举。
DIS 的选举规则如下:
-
选举基于接口优先级,优先级最高的当选 DIS。
-
如果所有接口的优先级一样,具有最大的 SNPA (Subnetwork Point of Attachment,子网连接点) 的路由器将当选 DIS:
-
在 LAN 中,SNPA 指的是 MAC 地址;
-
在帧中继网络中,SNPA 是 DLCI(Local Data Link Connection Identifier,数据链路连接标识符)。
-
-
如果 SNPA 是一样的,具有最大的 System-ID 的路由器将当选为 DIS。
华为路由器接口的优先级的范围是 0~127,默认的接口的优先级是 64,可以通过 isis dis-priority
命令修改接口的优先级。
与 OSPF 选举 DR 过程不同的是,优先级为 0 的 IS-IS 接口也可以参与选举 DIS,在 OSPF 中就不行。
另外,不论是 L1 还是 L2,DIS 在 LSP 泛洪过程中都很重要,但是都没有选举备份 DIS。这样的话,当网络中的 DIS 发生故障后不会产生什么问题吗?答案是不会的,原因包括以下两个方面。
- 在广播型多路访问网络中,路由器会跟其他所有路由器都建立邻接关系,它们都会定期进行 LSP 的泛洪,即使 DIS 失效了,也不会影响其他所有路由器的 IS-IS 协议的正常运行,这样在没有备份 DIS 的情况下不会产生什么问题。
- 如果当前 DIS 失效,网络中其他路由器检测到该故障,然后重新选举新的 DIS,这个过程所花的时间是非常短的,因为 DIS 发送 Hello 报文的频率是其他路由器的 1/3 倍,DIS 发送 Hello 报文的间隔时间是 3.3333s,其他路由器检测 DIS 失效的时间只需 10s。
对于 IS-IS 协议来说,如果一台优先级高或 Mac 地址高的路由器加入到现有网络中,那么这台新路由器会抢占现有 DIS 而成为新的 DIS,这一点也与 OSPF 的 DR 不同。在 OSPF 中,DR 和 BDR 都是不允许被抢占的。IS-IS 协议这样处理会对网络的稳定性产生影响吗?如前面所讲,在广播多路访问网络中,选举出一台新的 DIS,不会对其他路由器 IS-IS 的正常运行产生影响,只需要路由器泛洪扩散一组新的 LSP 出来就可以了。当初 ISO 在设计 IS-IS 协议时,为什么要这样选择呢?当时是基于以下两方面的考虑:
-
向正在运行的广播型网络中添加路由器的情况是比较少见的,由此带来的影响可以忽略。
-
现在的路由器处理性能很好,即使重新选举和计算也是非常快的。
IS-IS L1 和 L2 的 DIS 功能总结
- 模拟出伪节点,生成伪节点的 LSP,用来描述这个网络上有哪些路由器。
- 确保网络中 LSP 泛洪的可靠性。
- 完成 L1 和 L2 的 LSP 扩散和路由计算。
Loopback 接口因为没有任何邻接,因此不用选举 DIS(在 P2P 网络中也无需选举 DIS)。
网络中伪节点的电路 ID,也叫 LAN ID;LAN ID 是 DIS 用来区分不同局域网的标识符,因为一台路由器可能同时作为多个局域网的 DIS,为了区分不同局域网,DIS 为每个局域网分配一个唯一的 LAN ID。
via:huawei
IS-IS 中 DIS(伪节点)及 DIS 与 OSPF 中 DR 的区别
Mr. Sun_ 于 2021-07-26 13:21:52 发布
DIS 及 DIS 和 DR 的区别
1、DIS 与伪节点:
① DIS 是指指定中间系统(Designated IS,Designated Intermediate System)
② 伪节点是指在广播网络中由 DIS 创建的虚拟路由器
2、DIS 特点:
在广播网络中需要选举 DIS,所以在邻居关系建立后,路由器会等待两个 Hello 报文间隔在进行 DIS 选举。Hello 报文中包含 Priority 字段,Priority 的值最大的将被选举为该广播网中的 DIS,若优先级相同,接口 MAC 地址最大的被选举为 DIS。ISIS 中 DIS 发送 Hello 时间间隔为 10/3 秒。
3、 DIS 和 DR 的区别
(1) 选举条件,选举时间
DR 先比优先级再比 router id
DIS 先比优先级再比 MAC 地址
(2) DIS 支持抢占,DR 不支持
因为 OSPF 需要 DR 同步数据库,所有路由器都需要和 DR 同步数据库,如果 DR 可以被抢占可能会造成网络的震荡,DR 的选举有不确定性
DIS 设备之所以可以被抢占是因为 ISIS 中,只需要 DIS 周期性的发送 CSNP(Complete Sequence Number Protocol Data Unit,全序列号协议数据单元),每一台 路由器都可以实现这个功能
(3) DIS 优先级可以为 0,DR 为 0 时不参与选举
(4) DR 有 BDR 备份
(5) DIS 10/3s hello,DR 10s 或 30s hello
(6) 邻接关系建立方式:OSPF 都和 DR 和 BDR 建立邻接关系,DR others 和 DR others之间都是邻居关系,ISIS 的邻居关系为全邻接.
via:
-
IS-IS 的 DIS (伪节点) 及 DIS 和 OSPF中DR 的区别-CSDN博客 Mr. Sun_ 于 2021-07-26 13:21:52 发布