IS-IS邻接关系建立过程

概述:

路由器的接口一旦启动IS-IS进程,就会发出Hello报文,用以发现邻居并形成邻接关系。Hello 报文中除了包含发送路由器的System-ID之外,还包含了发送端全局和接口的一系列参数,这些参数如果被邻居路由器接受了,那么就能形成邻接关系,否则不建立邻接关系。

在LAN (广播网络)和P2P (点对点网络)中形成邻接关系的过程稍有不同,使用的Hello报文也有些区别,下面是三种IIH(ISIS Hello):

  1. 点到点IIH:用于点到点网络。
  2. L1 LAN IIH:用于广播网络Level-1邻接。
  3. L2 LAN IIH:用于广播网络Level-2邻接。

邻接关系建立前提:

IS-IS协议作为一种链路状态路由协议,每台路由器都会生成LSP,然后将其泛洪到网络中,所有路由器都会将LSP(本地和其他路由器通告的)存放至LSDB,再基于LSDB利用SPF算法计算出最优路由。泛洪LSP之前需要跟相邻路由器形成邻接关系。只有邻接关系形成后,LSP 才能在相邻路由器之间互相交换,进而更新自己的LSDB。

建立邻接关系需要满足如下条件:

  1. 两台L1路由器必须在同一区域才能建立邻接关系。
  2. 两台L2路由器建立L2邻接关系不要求在同一区域。
  3. 一台L1路由器和一台L1/2路由器在相同区域时才能形成L1邻接关系。
  4. 一台L2路由器和一台L1/2路由器不管是同区域还是不同区域,都能形成L2邻接关系。
  5. 两台L1/2路由器,同区域内可形成L1和L2邻接关系,不同区域只能形成L2邻接关系。
  6. 链路两端的IS-IS接口的网络类型必须一样。
  7. 华为设备还要求链路两端的IP地址位于同一个子网,P2P可以配置忽略网段检查,华为设备命令接口下:isis peer-ip-ignore。
  8. IS-IS要求整个域内路由器使用的System-id长度必须一致,在华为的实现中,System-id长度固定使用6Byte;该规则用于P2P邻接。
  9. 两台路由器使用的最大区域地址数要相同,华为默认支持最大区域地址数是3;该规则用于P2P邻接。
  10. 如果配置了认证,要求两台路由器的认证信息要一致(认证类型和密钥信息)。
  11. 要求链路两端的接口MTU值要一致。在华为的实现中,不管是P2P链路还是广播链路,发送的Hello都是填充至接口MTU大小,用以检查链路两端的接口MTU。

整体来说IS-IS邻接关系建立的过程更简单,仅通过IIH报文便可以完成。邻接关系建立完成后,再同步LSDB(链路状态数据库),这里和OSPF的顺序不同。

广播环境下邻接关系建立过程:

在这里插入图片描述
在广播网络中,IS-IS 使用LAN IIH来建立邻接关系,L1的LAN IIH发送到组播地地址:01-80-c2-00-00-14, L2的LAN IIH发送到组播地址: 01-80-c2-00-00-15。 当路由器发送Hello报文时(默认hello时间为10s,保持时间为Hello报文发送时间的3倍),它会根据接口的层级决定发送出的是L1的Hello还是L2的Hello。接口的层级可以在接口下配置,跟全局的层级是没关系的,接口默认的层级是L1/2。

当路由器收到Hello报文后,检查跟发送Hello报文的路由器的邻接情况,如果已经建立好邻接关系,则在邻居表中重置和此邻居关联的保持定时器;如果邻接关系没有建立,则通过发送过来的Hello报文中的参数决定是否建立新的邻接关系。上图所示为在广播链路上L2邻接关系的建立过程(L1类似)。

IS-IS邻接状态机分为down、initiated和established。

具体步骤:

  1. 双方路由器首先都使能IS-IS,此时处于down状态,假设都是L2类型的路由器,RouterA广播发送Level-2 LAN IIH,此报文中包含一个LAN ID,也就是DIS,另外报文中的IS Neighbors TLV字段没有邻居的SNPA地址,因此还没有收到邻居的Hello报文。
  2. RouterB收到此报文后首先会进行系列的校验动作,如System长度是否匹配、Max Area Address是否匹配、验证密码是否正确等,通过验证(或者双方没有配置验证),将自己和RouterA的邻居状态标识为Initialized。然后,从获得的Hello报文中Source字段中获取Router A的System ID,添加到邻居表中,RouterB再向RouterA回复Level-2 LAN IIH,此报文中标识RouterA为RouterB的邻居。
  3. RouterA收到此报文后,发现有自己的SNPA地址,于是将自己将自己与RouterB的邻居状态标识为Up,将Router B的system ID天交到自己的邻居表中,标识RouterB为自己的邻居。然后RouterA再向RouterB发送一个标识RouterB为RouterA邻居的Level-2 LAN IIH。
  4. RouterB收到此报文后,发现有自己的SNAP地址,将自己与RouterA的邻居状态标识为Up。这样,两个路由器成功建立了邻居关系。

DIS(指定IS):
为保障LSP泛洪的准确性和及时性,要求在拓扑发生变化时,立即泛洪新的LSP,在网络稳定时也要周期性泛洪LSP, 这就提高了带宽和处理资源开销。

在广播型多路访问网络中,IS-IS协议需要在所有路由器之间建立邻接关系,网络中邻接关系越多,为确保LSP泛洪的可靠性而带来的网络资源开销就越大。为降低在多路访问网络中邻接关系的复杂性,提高带宽利用率,IS-IS协议将整个多路访问网络本身看作一台路由器或一个伪节点。IS-IS协议在多路访问网络中需要DIS(指定IS),由DIS来抽象出并发挥伪节点的作用。有了DIS后,多路访问网络中的邻居间泛洪LSP后,通过DIS的SNP (序列号报文)来确保LSP泛洪的可靠。LSP 泛洪过程会在后续笔记中分析。

所以在邻居关系建立后,路由器会等待两个Hello报文间隔,再进行DIS的选举。Hello报文中包含Priority字段,Priority值最大的将被选举为该广播网的DIS。若优先级相同,具有最大的Subnetwork Point of Attachment(SNPA)的路由器将当选DIS:

  1. 在LAN中,SNPA指的是MAC地址。
  2. 在帧中继网络中,SNPA 是Local Data Link Connection Identifier (DLCI)。

如果SNPA是一样的,具有最大的System-ID的路由器将当选为DIS。

注意点:

  1. Level-1和Level-2的DIS是分别选举的。
  2. 同一台路由器在不同level的DIS选举中可以设置不同的优先级。
  3. 优先级为0的路由器也参与DIS的选举,且DIS选举支持抢占。
  4. 同一网段上的同一级别的路由器之间都会形成邻接关系,包括所有的非DIS路由器之间也会形成邻接关系,但LSDB的同步仍然依靠DIS来保证。
  5. DIS用来创建和更新伪节点,并负责生成伪节点的LSP,用来描述这个网络上有哪些网络设备。
  6. 华为路由器接口的优先级的范围是0~127,默认的接口的优先级是64, 可以通过isis dis-priority命令修改接口的优先级。
  7. 没有备份的DIS。

IS-IS协议中DIS与OSPF协议中DR(Designated Router)的区别:

  1. 在IS-IS广播网中,优先级为0的路由器也参与DIS的选举,而在OSPF中优先级为0的路由器则不参与DR的选举。
  2. 在IS-IS广播网中,当有新的路由器加入,并符合成为DIS的条件时,这个路由器会被选中成为新的DIS,原有的伪节点被删除。此更改会引起一组新的LSP泛洪。而在OSPF中,当一台新路由器加入后,即使它的DR优先级值最大,也不会立即成为该网段中的DR。
  3. 在IS-IS广播网中,同一网段上的同一级别的路由器之间都会形成邻接关系,包括所有的非DIS路由器之间也会形成邻接关系。而在OSPF中,路由器只与DR和BDR建立邻接关系。
  4. IS-IS广播网上所有的路由器之间都形成邻接关系,但LSDB的同步仍然依靠DIS来保证。在OSPF中只需要和DR建立邻居关系,邻居对减少。
  5. OSPF中有备用的BDR,而IS-IS网络中没有DIS的备用设备。

另外,不论是L1还是L2,DIS在LSP泛洪过程中都很重要,但是都没有选举备份DIS。 这样的话,当网络中的DIS发生故障后不会产生什么问题吗?答案是不会的,原因包括以下两个方面:

  1. 在广播型多路访问网络中,路由器会跟其他所有路由器都建立邻接关系,它们都会定期进行LSP的泛洪,即使DIS失效了,也不会影响其他所有路由器的IS-IS协议的正常运行,这样在没有备份DIS的情况下不会产生什么问题。
  2. 如果当前DIS失效,网络中其他路由器检测到该故障,然后重新选举新的DIS,这个过程所花的时间是非常短的,因为DIS发送Hello报文的频率是其他路由器的1/3倍,DIS发送Hello报文的间隔时间是3.3333s, 其他路由器检测DIS失效的时间只需10s,相比于OSPF更快。

对于IS-IS协议来说,如果一台优先级高或Mac地址高的路由器加入到现有网络中,那么这台新路由器会抢占现有DIS而成为新的DIS,这一点也与OSPF的DR不同。在OSPF中,DR和BDR都是不允许被抢占的。IS-IS 协议这样处理会对网络的稳定性产生影响吗?

如前面所讲,在广播多路访问网络中,选举出一台新的DIS, 不会对其他路由器IS-IS的正常运行产生影响,只需要路由器泛洪扩散一组新的LSP出来就可以了。当初ISO在设计IS-IS 协议时,为什么要这样选择呢?当时是基于以下两方面的考虑:

  1. 向正在运行的广播型网络中添加路由器的情况是比较少见的,由此带来的影响可以忽略。
  2. 现在的路由器处理性能很好,即使重新选举和计算也是非常快的。

伪节点:
在这里插入图片描述

  1. 伪节点是用来模拟广播网络的一个虚拟节点,并非真实的路由器。在IS-IS中,伪节点用DIS的System ID和一个字节的Circuit ID(非0值)标识。
  2. 使用伪节点可以简化网络拓扑,方便利用SPF算法进行拓扑计算。
  3. 当网络发生变化时,需要产生的LSP数量较少,减少进行SPF运算时的资源消耗。

如下是广播网络中一台IS-IS路由器的邻居表(华为设备):

在这里插入图片描述

  1. 表中第一列显示了邻居路由器的System-ID。
  2. 第二列表示本地到邻居路由器的接口。
  3. 第三列标识了邻居路由器的电路ID,电路ID用于唯一标识一个IS-IS接口,如果该接口是和一个广播网络相连的,那么这个电路ID是该广播网络上的DIS设置的,000.00000020是DIS的System-ID,01 表示伪节点ID,这时电路ID也称作LAN ID。
  4. 第四列表示邻接关系状态,正常状态为UP。
  5. 第五列表示对邻居的保持时间,如果该邻居是DIS,那么保持时间为10秒,否则为30s(默认)。
  6. 第六列表示邻接类型。
  7. 最后一列表示邻居接口的DIS优先级。

P2P环境下邻接关系建立过程:

由于当初在设计IS-IS的时候,根据ISO10589的定义,点对点Hello报文不包括ISNeighbor TLV (类型6),因此,在P2P网络中无法像广播网络那样使用“三次握手”机制来建立邻接关系,而只能使用“两次握手”机制,这导致的后果前面已经说过。直到在后来的集成IS-IS协议中才支持通过“三次握手”机制建立邻接关系。

无论是P2P还是广播环境下,L1和L2邻接关系区分,都是在Hello报文中通过通用报头所带有字段circuit type确定的,0x01–L1、0x02–L2、0x03–L1/2。

两次握手机制:
在这里插入图片描述

  1. RouterA接口启动IS-IS后,首先向RouterB发送一份P2P IIH,报文中携带了自己的System-Id和其他信息,但报文并没有IS Neighbor邻居列表。
  2. RouterB 接收到Hello报文后,直接将RouterA的邻接状态设置为UP。
  3. 同第2步,RouterA也在收到RouterB的Hello报文后将邻接状态直接设置为UP。

两次握手机制存在明显的缺陷。当路由器间存在两条及以上的链路时,如果某个接口收到对端的IIH报文,本端变为UP状态,而对端没有收到本端的IIH报文,仍为Down状态。SPF在计算时会使用状态为UP的链路上的参数,这就导致没有检测到故障的路由器在转发报文时仍然试图通过状态为Down的链路。三次握手机制解决了上述不可靠点到点链路中存在的问题。这种方式下,路由器只有在知道邻居路由器也接收到它的报文时,才宣布邻居路由器处于Up状态,从而建立邻居关系。

三次握手机制:
在这里插入图片描述
为支持在P2P网络中使用“三次握手”机制建立邻接关系,集成IS-IS协议的Hello报文增加了一个新字段,叫P2P邻接状态(也就是类型240的TLV),使用该TLV携带邻居的信息。考虑到向后兼容性,如果一台比较老的路由器不支持该TLV,接收到后可以忽略它,按照老的方式一“两次握手”机制建立邻接关系。华为的实现是在P2P网络默认使用“三次握手”机制,在说邻接关系建立之前,先来了解一下类型240的TLV包含的内容:

  1. 类型:OxF0。
  2. 长度:5~ 17Byte。
  3. 值:1Byte, 表示邻接状态,一共有3种状态,UP (=0), Initializing (=1), Down(=2)。
  4. 扩展的本地电路ID: 4Byte, 本端对点对点网络接口的标识。
  5. 邻居System-ID:邻居系统ID。
  6. 邻居扩展的本地电路ID:0或4Byte,邻居端对点对点网络接口的标识。
    在这里插入图片描述

有了类型240的TLV后,路由器在接收到的Hello 报文中,通过确认NeighborSystemID字段是否包含自己的System-ID, 从而实现“三次握手”机制。同时,本地的邻接状态基于当前状态和收到的类型240TLV中显示的邻接状态值进行设置。具体步骤如下:

  1. RouterA接口启动IS-IS后,首先发出邻接状态为Down的P2P IIH。
  2. RouterB 接收到Hello后,根据里面邻接状态字段将RouterA邻接状态设置为Initializing, 并在回复给RouterA的Hello报文中将邻接状态字段设置成Initializing。
  3. RouterA 从RouterB 接收到的邻接状态为Initializing, 并且NeighborSystemID中包含了自己,立刻将RouterB 的邻接状态设置为UP状态;并且在发给RouterB的下一Hello 报文中,将邻接状态字段设置为UP。
  4. RouterB 接收到RouterA 的邻接状态为UP的Hello 报文后,立刻将RouterA的邻接状态设置为UP。至此,RouterA 和RouterB的邻接关系建立完成。

P2P三次握手和广播网络三次握手的区别在于,P2P三次握手在交互的报文中携带了邻接状态,而广播环境中则是通过机制完成。

握手方式配置:(华为设备)
在PPP接口下执行命令:isis ppp-negotiation { 2-way | 3-way [ only ] },指定接口使用的协商模型。
缺省情况下,使用3-way协商模式。

整理资料来源:《HCIE路由交换学习指南》、华为hedex文档

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,我明白了。以下是使用dis bgp peer ipv4命令查看R1~R6路由器上的邻居并记录,其中State字段为Established的为已经建立邻接关系的: 在R1上: BGP local router ID is 1.1.1.1 Local AS number : 65001 Total number of peers : 3 Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 2.2.2.2 4 65002 167 166 0 02:34:01 Established 3 3.3.3.3 4 65003 166 167 0 02:34:00 Established 3 4.4.4.4 4 65004 167 166 0 02:34:00 Established 3 在R2上: BGP local router ID is 2.2.2.2 Local AS number : 65002 Total number of peers : 3 Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 1.1.1.1 4 65001 166 167 0 02:34:01 Established 3 3.3.3.3 4 65003 167 166 0 02:34:00 Established 3 4.4.4.4 4 65004 166 167 0 02:34:00 Established 3 在R3上: BGP local router ID is 3.3.3.3 Local AS number : 65003 Total number of peers : 3 Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 1.1.1.1 4 65001 167 166 0 02:34:00 Established 3 2.2.2.2 4 65002 167 166 0 02:34:00 Established 3 4.4.4.4 4 65004 167 166 0 02:34:01 Established 3 在R4上: BGP local router ID is 4.4.4.4 Local AS number : 65004 Total number of peers : 3 Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 1.1.1.1 4 65001 166 167 0 02:34:00 Established 3 2.2.2.2 4 65002 166 167 0 02:34:00 Established 3 3.3.3.3 4 65003 166 167 0 02:34:01 Established 3 在R5上: BGP local router ID is 5.5.5.5 Local AS number : 65005 Total number of peers : 2 Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 6.6.6.6 4 65006 167 166 0 00:22:16 Established 3 7.7.7.7 4 65007 167 166 0 00:22:15 Established 3 在R6上: BGP local router ID is 6.6.6.6 Local AS number : 65006 Total number of peers : 2 Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 5.5.5.5 4 65005 166 167 0 00:22:16 Established 3 7.7.7.7 4 65007 166 167 0 00:22:15 Established 3 注意:以上信息仅供参考,实际情况可能有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格洛米爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值