1. 链路状态数据库(LSDB)
IS-IS路由器在区域内交换LSP的过程成为链路状态扩散或链路状态泛洪(flooding)。泛洪是网络中实现链路状态数据库复制与分发的操作方式,它是链路状态路由选择协议所表现的一种重要现象。IS-IS路由器生成本地的LSP,该LSP通过启用了IS-IS协议的接口发送到所有的邻接路由器。同样,这台路由器也接收并处理其他路由器生成的LSP。如果一台路由器从邻接路由器中收到一个LSP,它将在本地链路状态数据库中保留一份该LSP的备份。之后它再把收到的这个LSP从除接收接口之外的其他运行IS-IS协议的接口泛洪出去,以便其他接口上的邻居可以收到这个LSP。在IS-IS中,点到点链路的LSP扩散与广播网络中的是不同的。
IS-IS支持两个层次的分层路由选择,层1(Level 1)路由选择和层2(Level 2)路由选择。对于这两个层次的路由选择,分别维护着不同的链路状态数据库。Level 1链路状态数据库支持对区域内的路由,Level 2链路状态数据库支持对区域间的路由。可以说,Level 1链路状态数据库是区域内所有路由器泛洪的L1 LSP的集合,Level 2链路状态数据库是整个路由域中所有L1/2路由器和L2路由器扩散到骨干区域的L2 LSP的集合。如下图所示
在一个典型的多区域IS-IS路由域中,同时存在着Level 1链路状态数据库和Level 2链路状态数据库。区域内的L1路由器维护着各自区域的Level 1链路状态数据库,Level 2链路状态数据库由具有L2路由选择功能的路由器(L2路由器和L1/2路由器)进行维护,而且所有具有L2路由选择功能的路由器都拥有一个相同的Level 2链路状态数据库。对于L1/2路由器,它同时维护着两个链路状态数据库,Level 1链路状态数据库和Level 2链路状态数据库。Level 1链路状态数据库中存放的是它所连接的非骨干区域的链路状态信息的集合,Level 2链路状态数据库中存放的是骨干区域的链路状态信息的集合。下图所示为一个典型的IS-IS多区域的拓扑中的链路状态数据库:
从上图中可以看出L1路由器只维护着一个Level 1链路状态数据库,L1/2路由器维护着两个(Level 1和Level 2)链路状态数据库。默认情况下路由器同时支持L1路由选择和L2路由选择,即L1/2类型的路由器。如果某台路由器无需参与到骨干区域的路由选择时,可以将其设置为L1路由器,这样可以节省路由器的CPU与内存资源。
当路由域中只需要采用非层次化结构就可以满足网络需求时,可以将所有路由器都部署在一个单一的区域中,这样将无需采用骨干区域以对区域间的数据流进行中转。如下图所示为采用单一L1区域的拓扑:
从上图中可以看出,单个L1区域中的路由器都只维护一个Level 1链路状态数据库,但这前提是这些路由器都是L1类型的路由器。如果按照默认情况的L1/2路由器,这些路由器之间还将建立L2邻接,并同时维护一个Level 2链路状态数据库。对于这种不需要骨干区域的拓扑,为了节省路由器的CPU和内存资源,可以将其都设置为L1路由器。
对于之前的单区域拓扑,我们也可以将所有路由器设置为L2路由器,这样所有路由器之间将建立L2邻接关系,并只维护相同的Level 2链路状态数据库。这时所有的路由器将组成了一个仅存在骨干区域的但区域拓扑。这种拓扑的优点主要是利于后续的网络扩展,很多运营商的单区域网络中都使用了全L2路由器的拓扑,以便后续区域的添加和骨干区域的扩充。如下图所示为采用单一L2骨干区域的拓扑:
运行IS-IS的路由器通过泛洪和接收链路状态数据包(LSP)进行路由选择信息的扩散和链路状态数据库的构建。LSP也是IS-IS所使用的三种报文类型之一。LSP包括两种类型,L1 LSP与L2 LSP。L1 LSP用于承载区域内路由器(L1路由器)的链路状态信息,L2 LSP用于承载区域间(骨干区域)的链路状态信息。L1 LSP只会在单个区域内进行扩散,L2 LSP将在L2骨干区域中进行扩散。
虽然L1 LSP和L2 LSP各自承载了IS-IS不同层次的路由选择信息,但是它们之间有着相似的数据包格式和功能。对于L1 LSP和L2 LSP,PDU类型分别为18和20。如下图所示。
在PDU长度(PDU Length)之前的字段,对于所有IS-IS PDU都是相同的,PDU长度之后的字段是LSP数据包所特有的。跟随在LSP报文后面的TLV字段,用来通告各种不同的路由选择信息。每个LSP都包含着如下重要的信息:LSP ID、LSP序列号、LSP校验和、剩余时间、区域关联状态、超载状态以及区域划分。如下图所示,在路由器使用show isis database命令获得的详细信息。
1.
LSP
剩余时间(
Remaining Lifetime
)
对于运行IS-IS的路由器发送的每个LSP,都有一个定时器用来跟踪LSP的生存时间。这样可以保证链路状态数据库及时的清除旧的或无效的链路状态信息。这与OSPF中的操作机制是一样的。在OSPF中,每个LSA也都有一个老化时间(age-time),默认情况下为3600s。如果一个LSA在链路状态数据库中保留的时间超过了3600s,那么此LSA将被从链路状态数据库中清除。
每个LSP都有一个最大生存时间,它是每个LSP在被从链路状态数据库中删除前可以保留的最长时间。ISO 10589中定义LSP的最大生存时间为1200s(20分钟)。当路由器一生成LSP时,便将剩余时间设置为最大生存时间,然后泛洪到所有的邻接路由器,并在本区域内进行扩散。LSP的剩余时间随着时间的推移而减少。
在IS-IS中,还存在另外一个定时器,就是LSP刷新间隔定时器。当路由器生成一个LSP后,便启动这个定时器。当刷新间隔定时器到期后,路由器将重新生成(刷新)这个LSP,并泛洪到本区域内的所有路由器。每当路由器重新生成新的LSP后,便将LSP的剩余时间重置为最大生存时间。如果某条LSP的剩余时间达到0时还没有收到生成这个LSP的路由器的刷新LSP后,这个LSP将被从链路状态数据库中清除。ISO 10589中定义LSP刷新间隔为900s(15分钟)。
可以通过调整LSP的最大生存时间和刷新间隔来影响LSP的泛洪。更大的LSP生存时间意味着路由器在其链路状态数据库中将保留LSP更长的时间,但这可能会造成过于陈旧的路由选择信息被保留更长的时间。调整LSP的最大生存时间时,也要根据实际情况相应的调整LSP刷新间隔。如果LSP刷新间隔过长,那么可能也会增加其他路由器保留陈旧路由信息的时间,但是增大LSP刷新间隔可以减少网络资源的开销。如果LSP刷新间隔过短,将增大网络资源的利用率,而且增加了路由器系统资源的开销。此外,在调整这两个定时器时,要保证LSP最大生存时间大于LSP刷新间隔,以便让路由器在将LSP清除出链路状态数据库之前有足够的时间可以接收到其他路由器重新生成的LSP。对于这两个定时器的值,推荐使用其默认值,如果不是特殊需求,可以不对其进行修改。只有在非常稳定的网络环境中才推荐使用比默认值大的LSP刷新间隔。在OSPF中,这两个定时器的值为3600s和1800s。但这里IS-IS与OSPF有一点不同的是,对于剩余时间(OSPF中的age-time),IS-IS的定时器是从最大生存时间(1200s)递减至0,而OSPF而是从0递加到最大生存时间(3600s),两个定时器在计数方法上略有不同。
2.
LSP
标识符(
LSP ID
)
路由器生成的每个LSP都有一个LSP标识符(LSP ID),LSP主要用来标识不同的LSP和生成LSP的源路由器。就像OSPF中一样,每个LSA都使用通告路由器(通告此LSA的路由器的Router ID)进行标识。每个LSP ID都包括三个部分:
l SysID
l 伪节点标识符(Pseudonode ID)
l LSP编号(LSP number)
其中SysID为路由器的系统ID,6字节长,用于标识生成此LSP的源路由器,与OSPF中的Router ID相似。
Pseudonode ID长度为1字节,用于标识此LSP是否是由网络中的指定中间系统(DIS,Designated Intermediate System)为网络产生的伪节点LSP。当LSP ID的Pseudonode ID不为0时,则表示此LSP是由DIS为网络产生的伪节点LSP,如果Pseudonode ID为0,则表示这是路由器产生的一个常规LSP。
LSP编号长度也为1字节,用于标识此LSP是否被分片。在OSPF中,使用了多种类型的LSA来通告路由信息,而在IS-IS中,路由器并不是用多种类型的LSP来通告路由信息,而是将所有路由信息都封装到一个LSP中进行传输。当LSP多大时,也就是包含的路由信息过多时,数据包将被进行分段,这与我们熟悉的IP分段是一样的。对于任何的分片操作,都是由路由器的CPU进行处理的,也就是执行进程交换,如果有过多的报文需要进行分片,那么将消耗大量的CPU资源,影响路由器的正常运行。对于分片的重组也是一样,也是要通过CPU进行处理,这样也会对接收分片的路由器造成严重的后果。IS-IS为了避免这样的问题产生,采取了一种对LSP预分段的操作机制。路由器将较大的LSP预先拆分成很多更小的LSP后再扩散出去,而无需路由器在底层对其进行分片,这样可以降低由于分片产生的负面影响。当LSP编号为0时,表示这是LSP的一个分段,编号为1时,表示这是LSP的第二个分段,以此类推。
1图是常规LSP的伪节点ID为0,并且这是LSP的第一个分段,或者未分段。2图是伪节点LSP的伪节点ID不为0。3图LSP ID的伪节点ID为0,并且LSP编号为1,表示这是一个常规LSP的第二个分段。如下图所示:
3.
LSP
序列号(
Sequence Number
)
LSP序列号是一个用4字节(32bit)进行表示的无符号整数。它的取值从0开始,每次递增1,所以取值范围为0~4294967295。当一台运行IS-IS的路由器接入到网络中后,它产生的第一个LSP的序号为1。当网络环境发生变化时,路由器将重新生成LSP,并将LSP序列号加1。同样,当到达LSP的刷新间隔后,路由器将刷新此LSP并扩散到网络中,这时LSP序列号也同样加1。可以看出,LSP序列号主要用于使路由器能够识别一个LSP的新旧版本,这也与OSPF的LSA中携带的序列号是相同的作用。
当一个路由器从故障中恢复并重新接入到了网络中,这时它也将生成一个序列号为1的LSP报文。这时区域内的其他路由器将收到这个序列号为1的LSP。如果其他路由器还未将链路状态数据库中之前由故障路由器产生的序列号较大的LSP清除,并且LSP中的内容都是相同的,这时它将认为本地链路数据库中的LSP具有更新的版本,便将扩散这个序列号较大的LSP。当恢复故障的路由器收到这个LSP后,发现自己的LSP与收到的LSP的序列号不匹配,那么它将产生一个比收到的LSP的序列号大1的LSP的副本,这样可以是LSP序列号接近于出故障前的LSP序列号的值。
4.
LSP
校验和(
Checksum
)
当路由器生成一个LSP后,为了保证LSP中信息的完整性,它将对LSP进行校验和计算,然后封装进LSP的LSP校验和字段(checksum)。校验和的计算包括从LSP中的剩余时间字段之后的字段一直到数据包的末尾,由于剩余时间是一个不断变化的字段,所以校验和计算将不包括这部分内容。校验和主要用于检查被破坏的LSP或者还没有从网络中清除的过期LSP。当一台路由器收到一个LSP,在将该LSP放入到本地链路数据库和将其再泛洪给其他邻接路由器之前,会重新计算LSP的校验和,如果校验和与LSP中携带的校验和不一致,则说明此LSP传输过程中已经被破坏。
当路由器收到了一个被破坏的LSP后,会采取一个清除的操作。它将该LSP的剩余时间设置为0然后再泛洪到网络中。当网络中的其他路由器收到这个剩余时间被置为0的LSP后,会将其本地链路状态数据库中相应的LSP清除。当产生这个被破坏的LSP的源路由器收到这个剩余时间被置为0的LSP并发现这个LSP是自己生成的后,会重新生成一个正确的LSP然后泛洪到网络中。
IS-IS的这种LSP清除操作虽然可以有效的清除网络中被破坏的LSP,给运行IS-IS路由协议的网络提供了一种自动修复的能力,但是它也带来了一种负面的影响。如果网络中的介质存在问题,就有可能产生LSP被连续破坏的现象。这些被破坏的LSP会被路由器不断的清除,同时源路由器也会不断的重新生成新的LSP,这种现象被称为LSP破坏风暴。LSP破坏风暴将消耗大量的网络资源。我们可以对路由器进行配置,使其在收到被破坏的LSP后忽略它,即丢弃被破坏的LSP,从而启动清除操作。在后续IS-IS配置章节中将介绍具体的配置方法。
5.
区域修复(
Partition
)
在LSP报头中最后一个字节的P(Partition)位占1bit,表示区域划分或者分段区域的修复位。当P位被设置为1时,表明始发路由器支持自动修复区域的分段情况。ISO10589中描述了如何通过建立一条穿过L2骨干网的L1路由来修复一个被隔离的L1区域。这种方式利用了每个区域与骨干网之间的连通性以及骨干网的连接性在骨干网中重新连接区域从而建立一条修复路径。这主要通过在每个区域中选举出一个具有L2路由功能的路由器作为区域指定的L2中间系统并在区域间建立一个被称作虚链路或虚连接的特殊邻接关系来实现。虚链路实现了穿过骨干网的L1修复路径。但是目前大多数的实现都不支持此区域修复功能。
如上图所示,区域2中,由于最下方的两个L1路由器间的链路故障,导致了整个L1区域被分离,使得路由信息不能正常交换。通过在骨干区域(Backbone)区域中建立一条虚链路(粗线表示)来连接两个被分离的L1区域,逻辑上修复了被分离的L1区域,使得区域内信息可以正常交换。
6.
区域关联(
Attached
)
在LSP报头中最后一个字节的ATT(Attached)位占4bit,表示区域关联位。L1/2路由器在其生成的L1 LSP中设置该字段以通知同一区域中的L1路由器自己与其他区域相连。通常来说,这就意味着这个路由器与L2骨干区域相连。ATT位中的4bit用来表明相连的区域是使用哪一种度量方式。如下图所示。
? 第4位:默认度量
? 第5位:延迟度量
? 第6位:开销度量
? 第7位:差错度量
在IS-IS与OSPF中,将骨干区域的路由(OSPF中的Area 0,IS-IS中的L2区域)通告到非骨干区域(OSPF中的非Area 0区域,IS-IS中的L1区域)的方式是不同。在OSPF中,连接Area 0和非骨干区域的ABR通过3类LSA(Network Sumary LSA,网络汇总LSA)将路由器从骨干区域通告到非骨干区域。但对于IS-IS来说,L1/2路由器从来不会将路由从L2骨干区域通告到L1区域。如果是这样,那L1区域中的路由器是如何得知区域外的路由器信息?如何将数据发送到其他区域?
在ISO 10589中,定义IS-IS的非骨干区域为末节区域(Stub Area),我们可以把IS-IS的L1区域想象成OSPF中的完全末节区域。OSPF的完全末节区域不允许区域外路由和外部路由(来自其他路由域)的进入,完全末节区域中的路由器通过ABR通告的一条默认路由作为外出区域的路径。同样,IS-IS的L1区域中的路由也是通过一条指向L1/2路由器的默认路由将数据路由到其他区域。当L1区域中的路由器收到L1/2路由器发送的ATT位被置位的L1 LSP后,便知道生成此LSP的路由器与其他区域(L2骨干区域)相连,即一个L1/2路由器,这时它将创建一条指向L1/2路由器的默认路由,以便数据可以被路由到其他区域。
对于上述的这种操作方式,非骨干区域中的路由器对区域外的拓扑一无所知,只是单纯的依靠默认路由将数据转发到其他区域,在通向区域外有多个出口时,这可能会产生次优路径的选择。在RFC 2966中定义了一种可以将L2路由通告到L1区域的操作方式,术语称之为“路由泄漏(Route Leaking)”。使用路由泄漏机制,可以使L1/2路由器以受控的方式将特定的L2路由通告到L1区域中,以避免次优路径的选择。
虽然ATT位同时在L1 LSP和L2 LSP中进行了定义,但是它只会在L1 LSP中被置位,并且只有L1/2路由器会设置这个字段。
7.
超载(
Overload
)
在LSP报头中最后一个字节的OL(Overload)位占1bit,表示超载位。此位用来表示路由器的资源状态。如果该bit被置位,就表示路由器发生了超载。超载是指路由器没有足够的系统资源(CPU资源和内存资源)用来处理路由选择交换信息。被设置了超载位的LSP不会在网络中进行泛洪,并且当其他路由器收到设置了超载位的LSP后,在计算路径信息时不会考虑此LSP,因此最终计算出来的到达目的地的路径将绕过超载的路由器。设置超载位还可以使数据的传输路径绕过某个特定的路由器。
当路由器的系统资源不足时将会自动在发送的LSP中设置超载位,或者可以通过特定的命令可以手工设置超载位。
8.
中间系统类型(
IS Type
)
在LSP报头中最后一个字节的中间系统类型(IS Type)位占2bit,路由器的类型。该字段表示了此LSP是来自L1路由器还是L2路由器。这也表示了收到此LSP的路由器将把这个LSP放到L1链路状态数据库还是L2链路状态数据库。该2bit中01表示L1;11表示L2;00与10未使用。
2. DIS和伪节点
LSP ID中包括一部分称为伪节点标识符(Pseudonode ID),用来标识此LSP是否是由网络中的指定中间系统(DIS,Designated Intermediate System)为网络产生的伪节点LSP。
在广播类型的网络(LAN)中,IS-IS需要为每个网段选择一个指定中间系统DIS,这里的指定中间系统DIS的作用与OSPF中的指定路由器DR的非常相似。在OSPF网络中,DR用来负责将链路状态信息泛洪到每个非DR路由器,并且帮助其进行链路状态数据库的同步。在IS-IS中也是如此,为了使链路状态信息更加准确和实时的同步给网络中的所有路由器,并且要减小带宽的利用率和路由器的处理开销,IS-IS也要在广播网络中选举出一个路由器(DIS)来达到这个目的。
在IS-IS中选举DIS的过程也是非常简单的。每个运行IS-IS协议的路由器的接口都拥有一个优先级(Priority),默认的优先级为64,同样也可以通过命令手工修改默认的优先级。路由器之间发送的Hello PDU中将携带接口的优先级信息。每个路由器收到网络中其他路由器发送的Hello PDU后,通过比较优先级来进行DIS的选举。优先级数值越大的路由器将被选举为此网段的DIS。这里与OSPF不同的是,在OSPF中,如果接口的优先级为0,那么这台路由器将被认为没有资格成为此网段的DR。在IS-IS中,如果接口的优先级为0,这仅仅表示最低的优先级,但是此路由器还拥有成为DIS的资格。当两台路由器的接口优先级相同时,那么拥有更大的SNPA(在LAN中通常为MAC地址)的接口的路由器将成为DIS。在OSPF中如果优先级相同将比较Router ID 。
在OSPF中,选举完DR后,还将选举出一个备份DR,BDR(Backup DR),以用来在原先DR出现故障时接替新的DR角色,并重新选举出BDR。但在IS-IS中,将不进行备份DIS的选举。如果DIS出现故障了,其他路由器将会重新选举出一个DIS。其次,在OSPF中,DR和BDR的选举是非抢占模式的,也就是说当有更优优先级的路由器加入到现有网络中后,也不会抢占原先DR和BDR的角色。从某种意义上来讲,在OSPF网络中,第一台启动的路由器将成为网络的DR,第二台启动的路由器将将成为BDR。与OSPF相比,DIS的选举是抢占的,即当有更优DIS资格路由器加入网络后,它会成为网络中新的DIS。这样,每次DIS的变更必须泛洪一组新的LSP。
默认情况下,运行IS-IS的路由器将以每10s的间隔发送Hello PDU。但是对于一个DIS来说,由于它在网络中起到重要的作用,所以它发送Hello PDU的间隔的频率将是其他路由器的3倍,也就是说DIS以每3.3s的间隔发送Hello PDU。这样其他路由器可以迅速检测出DIS出现故障并开始新的选举过程,增加了网络的收敛速度。
另外,在OSPF中,非DR和非BDR(DROTHER)路由器只与DR与BDR建立邻接关系(FULL关系)。但在IS-IS中,所有的路由器之间都会建立邻接关系,而不仅仅是DIS。在IS-IS网络中,每一台路由器都已组播方式发送它们的LSP数据包给所有的邻居路由器。DIS通过使用序列号数据包(SNP)来确保LSP泛洪的可靠性。关于序列号数据包的详细信息将在下面章节中进行介绍。
在ISO 10589中定义了3种类型的DIS:
? L1 DIS
? L2 DIS
? 部分指定的L2 DIS
部分指定的L2 DIS用于区域修复中,由于多数实现不支持区域修复,所以不对部分指定的L2 DIS进行介绍。
对于IS-IS来说,需要在一个网络上分别为L1和L2选举出单独的DIS,即L1 DIS和L2 DIS。对于一个接口上的优先级也分为L1优先级与L2优先级,而且这两个优先级可以不同。网络中的L1 DIS和L2 DIS可以是相同的路由器也可以是不同的路由器,即某台路由器可能是L1的DIS,但是它可能不是L2的DIS。我们可以通过命令调整接口默认的L1优先级和L2优先级来影响DIS的选举结果。
L1 DIS和L2 DIS需要为网络生成伪节点LSP,向广播网络中的所有路由器通告链路状态信息。同时L1 DIS和L2 DIS也要负责网络中的链路状态数据库的同步工作,保证网络中所有路由器都拥有一致的链路状态数据库。
在IS-IS中,整个网络被视为一个伪节点,伪节点是一个虚拟的节点,由选举出的DIS代表。使用DIS主要是为了减少广播网络中需要管理许多邻接关系的复杂性,同时利用高效的LSP扩散最小化带宽占用。伪节点是一个虚拟的节点。DIS作为伪节点的代表通过发送伪节点LSP会通告与之相连的所有路由器。伪节点LSP相当于OSPF中的2类LSA(Network LSA,网络LSA)。伪节点LSP中只包含关于邻接路由器的信息,用于建立网络拓扑图和SPF计算。
在IS-IS中,点到点类型的链路上上无需选举DIS,因为链路两端只连接两个路由器。这也与OSPF中一样,对于OSPF的点到点链路,也无需选举DR和BDR。
下表中所示为IS-IS在广播类型链路与点到点类型链路上之间操作的比较:
|
广播链路
|
点到点链路
|
适用的网络类型
|
LAN(Ethernet等)、全互联WAN
|
PPP、HDCL、部分互联WAN
|
Hello PDU定时器
|
10s,DIS为3.3s
|
10s
|
Hello PDU类型
|
L1 IIH、L2 IIH
|
点到点IIH
|
是否使用DIS
|
是
|
否
|
邻接关系数
|
n(n-1)/2
|
n-1
|
3. 路由选择信息扩散
SNP通过描述链路状态数据库中部分或全部的LSP信息来保证路由器之间链路状态数据库的同步。此外,SNP还可以用来进行LSP的请求和确认。因此,SNP也具有类似OSPF中的LSR(Link State Request,链路状态请求)、LSAck(Link State Acknowledgement,链路状态确认)和DBD(Database Description,数据库描述)报文的作用。
SNP分为两种类型:
? 完全序列号数据包(CSNP,Complete Sequence Number Packets)
? 部分序列号数据包(PSNP,Partial Sequence Number Packets)
CSNP与PSNP具有相似的数据包格式,并且都携带了链路状态数据库中的LSP摘要信息。对于CSNP,数据包中携带了路由器链路状态数据库中所有LSP的摘要信息,而PSNP顾名思义,只携带了一部分LSP的摘要信息,CSNP和PSNP分别用于不同的操作机制中。路由器为L1和L2分别产生CSNP和PSNP,其中CSNP包含L1 CSNP和L2 CSNP,同样PSNP包含L1 PSNP和L2 PSNP。例如,L1 CSNP中包含路由器L1链路状态数据库中所有LSP的摘要信息,L2 CSNP中则包含路由器L2链路状态数据库中所有LSP的摘要信息。
所谓LSP的摘要信息,并不是某个LSP的所有内容,摘要信息只是包含了能够唯一标识某个LSP的必要的信息,这些信息是从LSP报头中提取出来的。LSP摘要信息包括:
? LSP ID
? 剩余时间
? 序列号
? 校验和
这些字段之前都已经在介绍LSP报文结构时进行了详细的介绍。使用这些字段,路由器就可以唯一的标识出一个LSP。注意,LSP摘要信息并不包括LSP承载的具体的地址、掩码等信息,这些信息都是由TLV字段进行承载。
在广播网络中,路由器使用CSNP来保证链路状态数据库的完整性,并且只有DIS才会发送CSNP报文,DIS发送CSNP报文的间隔为10s。CSNP报文中描述了DIS的链路状态数据库中所有LSP的摘要信息。当其他路由器收到DIS发送的CSNP后,会使用CSNP中的LSP摘要信息与与本地的链路状态数据库中的LSP进行比较,进行比较的目的是确定本地链路状态数据库中的信息是否已经同步和完整。如果路由器发现本地数据库中缺少某个LSP条目,那么它将使用PSNP向DIS请求这个缺少的LSP条目。这个PSNP报文中包含就是请求的LSP条目的摘要信息。当DIS收到其他路由器发送的PSNP报文后,将会发送一个完整的LSP报文,这个LSP就是其他路由器所缺少的LSP条目。在广播网络中,DIS使用周期性的CSNP报文向网络中发送同步链路状态数据库的信号,而其他路由器使用PSNP报文来请求缺少的LSP条目。
在IS-IS的点到点类型的网络中,链路状态数据库同步的操作与广播网络中略有不同,而且路由器发送CSNP与PSNP报文的方式和其作用也有一些差别。
在点到点网络中不存在DIS,路由器不会周期性的发送CSNP报文,CSNP报文只在链路链路被激活时发送一次,而且链路两端的路由器都会发送CSNP报文以描述本地链路状态数据库中所有LSP的摘要信息。当路由器发送对端发送的CSNP中含有本地缺少的LSP信息时,也会使用PSNP报文向对端请求LSP。当对端收到PSNP报文后,将向请求方发送包含完整LSP信息的LSP报文,这点上与广播网络中的操作是相同的。但是在点到点链路上,收到LSP报文的路由器还会向对方再次发送一个PSNP报文以对之前收到的LSP进行确认。可以说,在点到点网络中的LSP交换是可靠的。这点与广播网络不同,在广播网络中路由器不使用PSNP报文对收到的LSP进行确认,而是通过DIS周期性地发送CSNP报文以弥补广播网络中不可靠的LSP交换。
在点到点链路上,路由器使用PSNP对收到的LSP报文进行确认,所以在点到点链路上是可靠的泛洪机制。
IS-IS路由协议支持两种网络类型:广播链路和点到点链路。默认情况下,IS-IS将广播网络和NBMA网络看作是广播类型。对于封装了PPP或HDCL等协议的链路看作是点到点类型。对于NBMA网络中的主接口和点到多点子接口,IS-IS将其看作是广播类型;对于NBMA网络中的点到点子接口,将其看作是点到点类型。 IS-IS不像OSPF那样,提供了对NBMA网络(例如Frame-Relay、ATM)的专门支持。对于NBMA网络,IS-IS认为其网络拓扑是PVC全互联(mesh)的,就是把它看作广播网络。但如果实际网络拓扑中并不是PVC全互联的结构时,例如部分互联的结构和Hub-Spoke结构,推荐使用点到点类型网络,即使用点到点子接口,以免造成NBMA网络中的链路状态数据库同步出现问题。
当我们使用点到点子接口将NBMA网络转化为点到点的链路时,整个NBMA网络将产生过多的PVC部分互联或全互联的网状结构,但这将产生一定的负面影响,会使网络中产生大量的LSP泛洪流量。我们都知道,运行IS-IS的路由器当接收到一个LSP报文后,会将此LSP从除接收接口以外的所有启用了IS-IS协议的接口泛洪出去,以使网络中的其他路由器都可以接收到此LSP。但是这种泛洪机制对于存在大量部分互联或全互联的网络将产生过多冗余的LSP扩散。
所谓全互联或全网状网络拓扑,是指所有路由器都与其他路由器向连接(通常是点到点子接口)。在这样的一个网络中,当一台路由器从某接口收到邻居泛洪过来的LSP后,由于它并不知道这个LSP是否已经被其他邻居路由器收到,所以会再从其他接口泛洪出去,即使其他路由器的链路状态数据库中已经存在这个LSP。如果网络中有n个路由器的话,那么网络中的每台路由器都会扩散n-2条冗余的LSP,这样总共被泛洪的多余的LSP将为(n-1)x(n-2),条而这些LSP的扩散是多余。如果每台路由器都刷新一条LSP的话,那么这个数量还将会成倍数的增长,导致了大量带宽资源的浪费。
为了解这种在全互联或高度互联的网络中出现的LSP泛洪的冗余现象,IS-IS提供了一种解决方案――IS-IS全通组,也称作Mesh组。IS-IS全通组在RFC 2973中进行了定义。所谓全通组,就是假设所有路由器之间都是完全互联的,每个路由器都会直接收到其他路由器泛洪的原始的LSP的拷贝。
可以将路由器的接口加入到某个全通组中,一个路由器上可以存在多个全通组,全通组内接口之间的LSP泛洪是受限制的,全通组之间的LSP泛洪是正常的操作,未加入全通组的接口与全通组之间也是正常的LSP泛洪操作。
以下为使用了IS-IS全通组后路由器对LSP的处理方式:
? 如果路由器从一个接口收到LSP后,路由器将不会把它再从与接收接口属于同一个全通组的接口泛洪出去,但路由器将向其他全通组内的接口和其他不属于全通组的接口泛洪LSP。
? 如果接收接口不属于任何全通组,那路由器也将向其他全通组内的接口和其他不属于全通组的接口泛洪LSP。
使用IS-IS全通组来解决高度互联的网络中的冗余LSP扩散的问题时需要注意一下几点:
? 全通组只是一个路由器本地的概念,接口加入的全通组也只是本地有意义的,不同路由器的mesh group编号无需保持一致,但通常推荐的做法是为全互联的一组设备使用同一个mesh group编号。
? 全通组的操作方式只是对于路由器收到的LSP有效,对于由路由器本地生成的LSP将按照正常的操作方式,被泛洪到所有启用了IS-IS协议的接口。
? 通常全互联或高度互联的网络拓扑的设计的初衷是为了提供链路的冗余性,使得当某条链路出现故障时路由器仍然可以收到泛洪的LSP。使用全通组会在一定程度上破坏了网络的健壮性,所以在部署全通组技术时应该慎重的设计全通组的结构。
4. IS-IS度量与扩展度量
1.
IS-IS
度量
每一种路由协议都使用度量值来衡量到达某个目的地所经路径的优劣。在RIP路由协议中,使用跳数(hop)作为路由的度量值,即到达目的地所经过的路由器的数目;在OSPF路由协议中,使用花费(cost)作为路由的度量值。而且在OSPF中,接口的花费值是通过接口的带宽计算出来的,接口带宽越大,花费值越小,也就是更有可能被选为最佳路径,OSPF的花费值与带宽是成反比的。
在IS-IS标准中,定义了四种类型的度量值:
? 默认度量――默认的度量类型。
? 延迟度量――表示链路的传输延迟。
? 开销度量――表示链路的开销。
? 差错度量――表示链路的出错概率。
虽然IS-IS定义了四种类型的度量,可以通过多种不同的方式衡量链路的可靠性,但是多数实现中,包括在锐捷路由器中,只支持默认度量。默认度量就相当于OSPF中花费(cost)值。默认度量是域中所有路由器都必须支持的。延迟度量、开销度量和差错度量都是可选类型,它们主要是为支持QoS(Quality of Service,服务质量)的路由选择而定义的。与OSPF的自动计算cost值不同(通过带宽进行计算),默认情况下,IS-IS的所有接口的cost值都为10,它不是通过带宽进行计算的。所以如果使用接口默认的cost值的话,IS-IS的度量就相当于RIP中的条数,这在包含不同链路类型和链路速度的网络中会造成次优路径的选择。
在实际网络环境中,强烈推荐根据接口的带宽修改默认的接口cost值,以避免次优路径的选择。
2.
IS-IS
扩展度量(宽度量)
默认情况下,IS-IS接口的cost值为10,而且在不使用扩展度量(或称窄度量)的情况下,接口的cost值的取值范围只能为0~63,即在TLV字段中(TLV类型2和TLV类型128)只能够使用6bit来表示接口度量值。显然最大值为63的接口cost将带来很大的局限性。IETF通过定义扩展的TLV类型(TLV类型22和TLV类型135)来增大度量值的取值范围。在TLV类型22中提供了24bit的度量值字段,TLV类型135提供了32bit的度量值字段。