IS-IS路由配置与管理
IS-IS(中间系统到中间系统)也是链路状态的IGP路由协议,采用的也是SPF路由算法,划分区域,可以在一台路由器上运行多个路由进程,主要应用于大型网络,甚至互联网。
在OSPF路由协议中,一个路由器可以同时位于多个区域中,但在IS-IS中,一个路由器只能位于一个区域中,而且OSPF中规定区域0是骨干区域,而在IS-IS中骨干区域是不固定的,它是与Level-2路由器一起组成的区域;OSPF中的指定路由器(DR)一经配置就是固定的,而IS-IS中的指定路由器(DIS)却要经过选举,随时可能改变,并且没有备份指定路由器。
IS-IS基础
IS-IS(IntermediateSystem-to-Intermediate System,中间系统到中间系统)最初是ISO为它定义的OSI(Open System Interconnection,开放系统互连)网络中的CLNP(ConnectionLessNetwork Protocol,无连接网络协议)设计的一种动态路由协议。随着TCP/IP的流行,提供了对IP路由的支持,使它能够同时应用在TCP/IP和OSI网络环境中,称为集成IS-IS(Integrated IS-IS或Dual IS-IS)。
一、OSI网络基础
在OSI网络中定义了两类网络层服务:CLNS(ConnectionLess Network Service,无连接网络服务)和CONS(Connection-orientedNetwork Service,面向连接的网络服务)。其中,提供CLNS服务的协议主要包括CLNP(ConnectionLess Network Protocol,无连接网络协议)、IS-IS和ES-IS(End Systemto Intermediate System,终端系统到中间系统)。CLNS类似于TCP/IP中的IP协议簇,都是无连接服务;而CONS类似于TCP/IP网络中的TCP,都是面向连接的服务。
1、CLNP
CLNP是OSI网络的网络层数据报协议,提供了与TCP/IP网络中IP类似的功能,因此CLNP又称为ISO-IP。与IP一样,CLNP也是一个无连接的网络层协议,提供无连接的网络层服务。但是,IP是TCP/IP协议栈中唯一的网络层协议,来自高层的协议和数据绝大多数需要封装在IP协议报文中,然后再传输到数据链路层,重新封装在帧中进行传输。而在OSI网络环境中,CLNP、IS-IS、ES-IS都是独立的网络层协议,都是直接被封装到数据链路层的帧中进行传输。CLNP使用NSAP(网络服务访问协议)地址来识别网络设备。
2、IS-IS
IS-IS协议是一种动态路由协议。IS-IS最初仅用于在使用CLNP的OSI网络中实现各路由器间路由信息交换。后来提供了对TCP/IP的支持,能够同时应用在TCP/IP和OSI网络环境中,叫做“集成IS-IS”(Integrated IS-IS或Dual IS-IS)。
IS-IS是一个能够同时处理多个网络层协议的路由选择协议。
3、ES-IS
ES-IS也是OSI开发的,用来允许终端系统(如PC)和中间系统(指路由器)进行路由信息的交换(也就是通常所说的PC主机与路由器之间的路由),以推动OSI网络环境下网络层的路由选择和中继功能的操作。ES-IS在CLNP网络中就像IP网络中的ARP、ICMP一样,为用户主机与路由器间提供路由信息交换功能。
二、IS-IS基本术语
1、IS(IntermediateSystem,中间系统)
IS是指运行IS-IS协议的路由设备。它是IS-IS协议中生成路由和传播路由信息的基本单元。(IS和路由器具有相同含义)。
2、ES(End System,终端系统)
ES相当于通常所说的主机系统。ES不参与IS-IS路由协议的处理,在OSI网络环境中使用专门的ES-IS协议定义ES与IS间的路由通信。
3、RD(RoutingDomain,路由域)
RD是指多个使用IS-IS协议的路由器所组成的范围。
4、Area(区域)
Area是IS-IS路由域的细分单元,IS-IS与OSPF一样,允许将整个路由域分为多个区域,且总体上也分为普通区域和骨干区域两类,但IS-IS的普通区域必须与骨干区域直接连接(没有OSPF中的“虚连接”),普通区域之间不能直接连接。Area又可根据网络中路由器的类型划分为Level-1区域(全由Level-1路由器组成)和Level-2区域(由Level-2和Level-1-2路由器组成)。
5、Sys ID(System ID,系统ID)
在IS-IS协议中使用SysID唯一标识一台路由器,必须保证在整个IS-IS路由域中每台路由器的系统ID都是唯一的,与OSPF中的路由器ID(RouterID)一样。
6、LSP(Link-StatePacket,链路状态报文)
LSP是IS-IS网络中的设备用来通过泛洪方式向所有邻居通告自己的链路状态信息的报文,类似于OSPF中的LSA(链路状态通告)。网络中每台路由器都会产生带有自己系统ID标识的LSP报文,可以通过发送LSP不断更新自己的链路状态信息。
7、LSDB(Link-StateDateBase,链路状态数据库)
路由器的每个区域都有一个专门存放该区域所接收的所有LSP报文的数据库,这就是LSDB。通过LSP的泛洪,最终使整个区域内的所有路由器拥有相同的LSDB。在每一个IS中都至少有一个LSDB,那就是Level-2 LSDB。IS-IS路由器利用各个区域的LSDB,通过SPF算法计算生成自己的IS-IS路由表。
8、DIS(DesignatedIS,指定IS)
在IS-IS广播网络类型中需要选举一个指定IS(DIS),以便周期性的向区域内其他路由器进行区域LSDB数据库的泛洪(区域内的非DIS仅与DIS之间进行LSDB交互,非DIS之间不能直接进行LSDB交互),使整个区域中各路由器的LSDB同步。DIS类似OSPF中的DR,但OSPF中有备份BDR的概念,IS-IS中没有备份的DIS概念。
三、IS-IS路由器类型
与OSPF协议根据路由器所处的网络位置以及作用不同,把网络中的路由器划分为区域内部路由器、骨干路由器、区域边界路由器、自治系统边界路由器类似,IS-IS协议也根据各路由器所处的网络位置不同,或者作用不同分成了三类:Level-1(简称L1)、Level-2(简称L2)和Level-1-2(简称L1/2)。所有IS-IS路由器缺省都是L1/2类型的。
IS-IS路由器类型与所处的区域类型有关,IS-IS区域分为普通区域和骨干区域两大类,但IS-IS中的骨干区域不固定区域ID(可任意),且可以有多个区域ID不同的骨干区域,这点与OSPF是完全不同的(OSPF中的骨干区域ID总为0,且如果有多个分离的骨干区域,它们的ID都是0)。
1、L1路由器
L1路由器是一个IS-IS普通区域内部的路由器,类似于OSPF网络中的普通区域内部路由器(IR),只能在非骨干区域中存在。而且L1路由器只能与属于同一区域的L1和L1/2路由器建立L1邻接关系(不能与L2路由器建立邻接关系),交换路由信息,并维护和管理本区域内部的一个L1 LSDB。
L1路由器的邻居都在同一个区域中,其LSDB包含本区域的路由信息以及到达同一区域中最近L1/2路由器(相当于OSPF中的ABR)的缺省路由,但到区域外的数据需由最近的L1/2路由器进行转发。L1路由器只能转发区域内的报文,或者将到达其他区域的报文转发到距离它最近,且在同一区域的L1/2路由器。
2、L2路由器
L2路由器是骨干区域中的路由器,主要用于通过与普通区域中的L1/2路由器连接,连接骨干区域和非骨干区域,类似OSPF网络中的BR(骨干路由器),并负责在不同区域间的通信。
L2路由器只能与其他L2路由器共处一个区域,L2路由器可与本区域中的其他L2路由器,以及其他区域中的L1/2路由器建立L2邻接关系,交换路由信息,维护一个L2的LSDB。网络中的所有L2路由器和所有L1/2路由器连接在一起共同构成IS-IS网络的骨干网(注意,不是骨干区域),也称为L2区域。IS-IS中的L2区域不是一个特定的区域,是由连接网络中各个区域的一部分路由器组成的,但必须物理是连续。而IS-IS网络中所有L1路由器与L1/2路由器连接所形成的区域统称为L1区域。L1区域是分散的,不是连续的。
如上图网络中,一般都认为用箭头标注的那台IS-IS路由器应该是L1路由器,因为它是在一个普通区域之内。但事实上是错误的,因为这样一来,整个网络中由L2路由器和L1/2路由器形成的骨干网(彩线部分)在物理上就是断开的,不连续,最终导致的结果就是不同区域间的L2路由无法传递。所以图中用箭头标注的这台路由器必须是L1/2类型的,不能是L2类型的,因为Area2是非骨干区域。
3、L1/2路由器
L1/2路由器类似OSPF网络中的ABR(区域边界路由器),用于区域间的连接,缺省所有IS-IS路由器都是L1/2类型的。L1/2路由器既可以与同一普通区域的L1路由器以及其他L1/2路由器建立L1邻接关系,也可与骨干区域L2路由器建立L2邻接关系。L1路由器必须通过L1/2路由器才能与其他区域通信。L1/2路由器必须维护以下两个LSDB:L1 LSDB用于区域内部路由,L2 LSDB用于区域间路由。但要注意,L1/2路由器不一定要位于区域边界,在区域内部也有可能存在L1/2路由器,如上图箭头标注的那台路由器那样。
四、OSI网络/IS-IS路由类型
在整个OSI网络中,包括4个路由级别(或称4种路由类型):L0(Level-0)、L1(Level-1)、L2(Level-2)和L3(Level-3)。IS-IS所能提供的路由仅包括L1、L2这两个级别。
1、L0路由
L0路由是OSI网络中ES与IS之间的路由(不属于IS-IS协议所提供的路由功能),使用ES-IS协议进行路由信息交换。在ES-IS协议中,ES通过侦听IS发送的IIH报文(IS到IS的Hello报文)来获知IS的存在。当ES要向其他ES发送ESH报文(ES到ES的Hello报文)时,将同时把报文发送到IS。同样,IS也会侦听ES发送的ESH报文以获知ES的存在,当有数据要发送到某个ES时,会根据所获取的ESH信息进行发送。这个过程就称为L0路由选择过程。
2、L1路由
L1路由是OSI或者TCP/IP网络中在同一普通区域内各IS之间的路由,即普通区域内路由,是IS-IS协议提供的路由功能。同一个普通区域中的IS之间通过交换路由信息后,得知本区域内的所有路径。当IS收到一个到目标地址是本区域内地址的报文后,通过查看包的目的地址即可将报文发送正确的链路或目的节点。提供L1路由的IS-IS路由器类型有L1路由器和L1/2路由器。
3、L2路由
L2路由是OSI或者TCP/IP网络中不同区域间各IS之间的路由,即区域间路由,也是IS-IS协议提供的路由功能。当一个IS收到一个目的地址不是本区域CLNP地址的报文时,便将其转发到正确的目的地或者将报文转发到其他区域,以便其他区域中的IS转发到正确的目的地。能提供L2路由的IS-IS路由器类型有L2路由器和L1/2路由器。
4、L3路由
L3路由是OSI网络中不同IS-IS路由域间的路由,不属于IS-IS提供的路由功能。L3路由类似于TCP/IP网络中的BGP(Border GatewayProtocol,边界网关协议),其目的是在不同的路由域或自治域系统(AS)间交换路由信息,并将去往其他AS的包转发到正确的AS,以便到达最终目的地。这些AS之间可能拥有不同的路由拓扑,所以不能直接进行路由信息的交换。通常L3路由是由IRDP(Inter-Domain Routing Protocol,域间路由选择协议)来完成的。
五、IS-IS区域与OSPF区域的比较
IS-IS网络与OSPF网络一样可划分多个区域,但是IS-IS是工作在数据链路层的,其报文直接以帧格式封装;而OSPF是工作在应用层的,其报文需要由网络IP报文格式进行封装。所以两者划分区域的方法是不一样的。
1、IS-IS可以有多个骨干区域
OSPF的设计基于骨干区域,而且只有一个骨干区域(区域号固定为0),所有的非骨干区域(通过ABR)必须直接与骨干相连(非骨干区域与骨干区域之间没有直接物理连接的话,则要通过虚链路连接)。而IS-IS可以有多个骨干区域,且骨干区域ID不固定,即任意,但它与OSPF一样要求所有的非骨干区域(通过L1/2路由器)必须直接与骨干相连,普通区域之间不能直接连接。IS-IS中的骨干区域全由L2路由器构成,在骨干区域内部必须与其他L2路由器直连,在与普通区域之间,必须与L1/2路由器相连,不能与L1路由器相连。
如上图为一个运行IS-IS协议的典型网络结构。Area1是骨干区域(可以是其他区域号),该区域中的所有路由器均是L2路由器。另外4个区域为非骨干区域,它们都是通过L1/2路由器与L2路由器相连。
下图所示为IS-IS网络的另外一种拓扑结构图,其中有两个骨干区域(Area 1和Area 3)。非骨干区域中的L1/2路由器同时与两个骨干区域的L2路由器连接,同时两个骨干区域之间也彼此连接(可以把它们看成一个大的虚拟骨干区域),这两部分共同构成了一个IS-IS骨干网(也称L2区域)。即IS-IS骨干网是由所有的L2路由器和各区域边界的L1/2路由器构成,他们可以属于不同的区域,但必须是物理连续,即中间不能为L1路由器。
2、区域边界不同
OSPF的区域边界在设备接口上,OSPF的每条链路的两端接口都必须属于同一个区域,如13-4图,这样在OSPF中,一台路由器的不同接口可以属于多个不同区域。而在IS-IS的区域边界在链路上,即同一链路的两端接口分属不同区域,不同区域的边界仅体现在不同区域间连接的链路上,而不是像OSPF那样体现在不同路由器接口上。这样一来,一台IS-IS路由器的各个接口都必须同属于一个区域。
3、不同区域间路由器的邻接关系不同
OSPF协议使用路由器接口来划分区域,一台路由器可能同时属于多个区域,并可以与多个区域的路由器形成邻接关系。而IS-IS协议规定路由器整体属于某个特定的区域,L1路由器只能建立L1级邻接关系;L2路由器只能建立L2级邻接关系;L1/2既可以与L1路由器建立L1级邻接关系,又可以与L2或者其他L1/2路由器建立L2级邻接关系。即在IS-IS路由协议中,只有同一层次的相邻路由器才可能成为邻接体。具体邻接关系的建立规则如下:
①同一区域的L1路由器间可以建立L1级邻接,不同区域的L1路由器间不可能建立任何邻接关系。
②同一区域的L1路由器和L1/2路由器间可以建立L1级邻接,但不能与不同区域的L1/2路由器和L2路由器间建立任何邻接关系。
③同一区域的L1/2路由器间可以建立L1和L2级邻接关系,但不同区域的L1/2路由器间可以建立L2级邻接关系。
④同一骨干区域的L2路由器间可以建立L2级邻接关系。
⑤骨干区域的L2路由器与普通区域中的L1/2路由器间可以建立L2级邻接关系。
4、SPF路由算法的使用不同
在IS-IS中,普通区域内的L1路由、区域间和骨干区域内部的L2路由都是采用SPF算法进行计算的,分别生成各自的SPT(Shortest Path Tree,最短路径树);而在OSPF中只有在同一个区域内才使用SPF算法,区域之间的路由需要通过骨干区域来转发。
六、IS-IS的两种地址格式
在IS-IS协议中有两种地址:一种是用来标识网络层服务的NSAP(Network Service Access Point,网络服务访问点)地址,另一种是用来标识设备的NET(Network Entity Title,网络实体名称)地址。
1、NSAP地址格式
NSAP地址仅适用于OSI网络,用来标识CLNS网络层地址,每个通信进程(不是每个接口)对应一个NSAP地址,类似于TCP/IP网络中的Socket套接字服务。
NSAP地址由两个主要部分组成,IDP(Inter-DomainPortion,域间部分)和DSP(Domain Service Portion,域服务部分),与IP地址中由网络ID和主机ID两部分组成类似:其中的IDP部分相当于TCP/IP网络IP地址中的主网络ID部分,而DSP部分则相当于TCP/IP网络IP地址中的子网ID、主机ID和端口号总和。
IDP由以下这两个子部分组成:
①AFI(Authorityand Format ID,颁发机构与格式ID):用来标识NSAP地址格式和对应地址的分配机构,占1个字节。AFI等于49的地址是私有地址,就像IP地址中的局域网地址一样,而AFI等于39或47的地址属于ISO注册地址,相当于IP地址的公网地址。
②IDI(Inter-DomainID,域间ID):用来标识、区分AFI字段下不同的IS-IS路由域,最长可达10字节。
DSP由以下三个子部分组成:
①HODSP(High OrderDSP,DSP高位):用来在一个IS-IS路由域中分割多个区域,相当于IP地址中的子网ID部分
②SID(System ID,系统ID):占6个字节,用来区分主机,通常以MAC地址进行标识,类似于OSPF协议中的路由器ID,相当于IP地址中的主机ID部分。LSP的识别就是依据路由器NSAP地址中的系统ID。当IS工作在L1时,则在所有同区域中的L1路由器的系统ID必须唯一;当IS工作在L2时,则在同一个路由域中所有路由器的系统ID必须唯一。
③NSEL(Network-Selector,网络选择器):占1个字节,用来指示选定的服务,相当于TCP协议中的端口号。在IS-IS路由选择过程中没有使用NSEL,所以NSEL始终保持为00。
NSAP地址中包含了很多不同的字段,看起来很复杂。实际可以将NSAP地址进行简化,各种字段可以归类为3个部分:区域地址(Area address)、System ID和NSEL。如下图:
“Area Address”(区域地址)包括了13-5图中的AFI、IDI和HODSP三个字段,长度可变,在1~13个字节之间。System ID和NSEL这两部分与图13-5中对应字段一样。
由于一般情况下1字节(2个十六进制数字)的长度足够定义Area Address,所以在大多数的IS-IS实现中NSAP地址最小长度为8字节。对于IP应用程序而言,在NSAP地址中,1字节定义AFI(也是2个数字),最少2字节定义实际的区域信息(IDI),6字节定义System ID,1字节定义NSEL,所以此种情况下的NSAP地址最少为10字节。
2、NET地址格式
在IP网络的IS-IS协议中,IS-IS路由器是以NET(NetworkEntity Title,网络实体名称)地址进行标识的。NET也是一种NSAP地址,只是没有使用OSI网络中NSAP地址的NSEL部分,所以NSEL始终保持为00。
路由器在发送的LSP报文中用NET来标识自己,这类似OSPF发送的LSA中的路由器ID(Router ID)。通常情况下,一台路由器只需配置一个NET即可,当区域需要重新划分时,由于最多可配置3个区域,所以NET最多也只能配置3个。
NET地址的整个长度范围与NSAP一样,也是8~20个字节,分三个部分。与13-6图类似。
①区域地址(Area Address):是整个地址的最高字节序列,长度范围为1~13个字节,相当于OSPF网络中的“区域ID”。一个IS-IS路由进程示例可以配置多个区域地址,此时所有区域地址都具有相同含义,主要用于区域合并或者区域划分。可以简单的配置成0000.0000.0001、0000.0000.0002和0000.0000.0003格式。
②系统ID(System ID):它是继“区域地址”字段后的6个字节,并且是以数字开始的。当路由器为L1 IS时,则该IS的系统ID必须在同一区域中的所有L1 IS中唯一;当路由器为L2 IS时,则该IS的系统ID必须在整个IS-IS路由域中唯一。
可以把路由器环路接口IP地址转换为系统ID,只需把每个字节都用3个数字来表示,然后再转换成三段(原来IP地址是四段)即可。这样就可用作系统ID了。如先将192.31.231.16转换成192.031.231.016,在转换成三段得到1920.3123.1016即可,这样就可用作系统ID。
③NSEL(网络选择器):在“系统ID”字段之后的1个字节,其值总为“00”。
如果一个NSAP地址为49.0001.aaaa.bbbb.cccc.00,根据13-6图可得出,代表的“区域地址”为49.0001(因AFI=49,所以它是一个私有地址),系统ID为aaaa.bbbb.cccc,NSEL为00。如果另一个NSAP地址为39.0f01.0002.0000.0c00.1111.00,则可以得出“区域地址”为39.0f01.0002(因AFI=39,所以它是一个公有地址),系统ID为0000.0c00.1111,NSEL为00。
IS-IS PDU报文格式
IS-IS路由协议和其他路由协议不同,它直接运行在数据链路层之上,对等路由器间通过PDU(协议数据单元)来传递链路状态信息,完成链路状态PDU数据库(LSPDB)的同步。
一、IS-IS主要PDU类型
IS-IS网络中使用的PDU类型主要有:HelloPDU、LSP(Link-State PDU,链路状态PDU)和SNP(Sequence Number PDU,序列号PDU)这三种。
1、Hello PDU
与OSPF的Hello报文一样,IS-IS的Hello PDU也是周期性的向邻居路由器发送的,也用于建立和维持邻居关系,称为IIH(IS-to-IS Hello)。其中,广播网中L1邻居关系的建立和维护使用的是L1 LAN IIH(类型号为15);广播网中L2邻居关系的建立和维护使用的是L2 LAN IIH(类型号为16);非广播网络中则使用P2P IIH(类型号为17)。它们的报文格式有所不同。
2、LSP PDU
LSP PDU是包含IS-IS路由器链路状态信息的PDU,用于与其他IS-IS路由器交换链路状态信息,类似于OSPF中的LSA报文。每个IS-IS路由器都会产生自己的LSP,并向邻居路由器进行泛洪,同时又可以学习由邻居路由器泛洪而来的其他IS-IS路由器的LSP。
LSP也分为两种:L1 LSP(类型号为18)和L2 LSP(类型号为20)。L1 LSP可由L1或者L1/2 IS-IS路由器产生,L2 LSP可由L2或者L1/2 IS-IS路由器产生。这些LSP是建立对应级别LSDB的依据。同一区域中各路由器上同级别的LSDB是完全同步的,而各级LSDB又是路由器通过SPF算法计算SPT、最终得出路由表的依据。
3、SNP PDU
SNP PDU通过描述全部或部分数据库中的LSP来同步各LSDB,从而维护相同区域中同级别LSDB的完整与同步,类似于OSPF中的DD报文。
SNP又包括CSNP(Complete SNP,完全序列号PDU)和PSNP(Partial SNP,部分序列号PDU)。PSNP只列举最近收到的一个或多个LSP的序号,能一次对多个LSP进行确认。同时,当发现自己的LSDB与对端邻居,或广播网络中的DIS的LSDB不同步时,也是用PSNP来请求邻居或DIS发送新的LSP。CSNP包括本地某个级别LSDB中所有LSP的摘要信息,从而可以在相邻路由器间保持同级别LSDB同步。在广播网络上,CSNP由DIS定期发送(缺省的发送周期为10s);在点对点线路上,CSNP只在第一次建立邻接关系时发送。
CSNP和PSNP分别也可分为L1 CSNP(类型号为24)、L2 CSNP(类型号为25)、L1 PSNP(类型号为26)和L2 PSNP(类型号为27)。
二、IS-IS PDU报头格式
IS-IS PDU都包括一个报头和可变长字段两部分。报头又包括“通用报头”和“专用报头”。对所有PDU来说,通用报头是相同的,专用报头根据不同PDU类型而不同。总体的IS-IS PDU结构如图13-7所示:
IS-IS PDU通用报头格式:
①IntradomainRouting Protocol Discriminator:域内路由协议标识符,占1个字节,用于标识网络层PDU的类型,IS-IS PDU的固定值为0x83。
②LengthIndicator:长度指示器,占1个字节,用于标识报头部分(包括通用报头和各种PDU的专用报头两部分)长度,以字节为单位。
③Version/ProtocolID Extension:版本/协议ID扩展,占1个字节,当前值固定为0x01。
④ID Length:ID长度,占1个字节,用于标识系统ID长度。
⑤PDU Type:PDU类型,占5位,用于标识IS-ISPDU的类型。值为15表示L1 LAN IIH;值为16表示L2 LAN IIH;值为18表示L1 LSP;值为20表示L2 LSP;值为24表示L1 CSNP;值为25表示L2 CSNP;值为26表示L1 PSNP;值为27表示L2 CSNP。
⑥Version:IS-IS协议版本号,占1个字节,当前值为0x01。
⑦Reserved:保留位,占1个字节,当前值固定为0。
⑧Maximum AreaAddresses:最多区域地址,占1个字节,标识支持的最大区域数,表示可以为一个路由器配置多个不同的区域前缀。缺省值为0,表示最多支持3个区域地址数。
三、IIH PDU报文格式
IIH(IS-IS Hello)PDU用来建立和维持IS-IS路由器之间的邻接关系。IIHPDU包括IS-IS PDU通报报头、IIH专用报头和可变长字段三部分。在IIH专用报头部分包括了发送者的系统ID、分配的区域地址和发送路由器已知的链路上邻居标识。IIH有以下三种类型:
①L1 LAN IS-IS HelloPDU(类型号为15):广播网中L1路由器发送的IIH。
②L2 LAN IS-IS HelloPDU(类型号为16):广播网中L2路由器发送的IIH。
③点对点IS-IS Hello PDU(类型号为17):在点对点网络上路由器发送的IIH。
前两种统称为广播LAN IIH,后面一种称为P2PIIH。这些不同类型的IIH的PDU报文格式不完全一样,如下图
P2PIIH中相对于LAN IIH多了一个表示本地链路ID的Local CircuitID字段,少了表示广播网中DIS的优先级的Priority字段以及表示DIS和伪节点System ID的LAN ID字段。
IIH PDU专用报头部分的各个字段:
①Reserved:保留字段,占6位。当前没有使用,始终为0。
②Circuit Type:电路类型字段,占2位。0x01表示L1路由器,0x10表示L2路由器,0x11表示L1/2路由器。
③SourceID:源ID字段,占1个字节,标识发送该IIH PDU报文的源路由器系统ID。
④Holding Time:保持时间,占2个字节,用来通知它的邻居路由器在认为这台路由器失效之前应该等待的时间。如果在保持时间内收到邻居发送的下一个IIH PDU,将认为邻居依然处于存活状态。这个保持时间就相当于OSPF中的DeadInterval(死亡时间间隔)。在IS-IS中,缺省情况下保持时间是发送IIH PDU间隔的3倍,但是在配置保持时间时,是通过指定一个IIH PDU乘数(Hello-Multiplier)进行配置的。
⑤PDU Length:IIH PDU长度字段,占2个字节,标识整个IIH PDU报文(包括IS-IS PDU报头)的长度(以字节为单位)。
⑥Priority:优先级字段(仅在LAN IIH中有此字段),占7位,标识本路由器在DIS选举中的优先级。值越大,优先级越高,该路由器成为DIS的可能性越大。
⑦LAN ID:局域网ID字段(仅在LAN IIH中有此字段),由DIS路由器的系统ID+1个字节的伪节点ID组成,用来区分同一台DIS上的不同LAN。
⑧Local Circuit ID:本地电路ID(仅在P2P IIH中有此字段),占1个字节,用来标识本地链路ID。
四、LSP PDU报文格式
一个LSP包含了一个路由器的所有基本信息,如邻接关系、连接的IP地址前缀、OSI终端系统、区域地址等。LSP PDU共分为两种类型。
1、L1 LSP(类型号为18)
L1 LSP是由支持L1路由的L1或L1/2路由器产生的,会在本区域内部邻居路由器上泛洪。本区域中的所有L1 LSP交换完成后会在所有本区域L1或者L1/2路由器上形成完全一致的L1 LSPDB。
2、L2 LSP(类型号为20)
L2 LSP是由支持L2路由的L2或L1/2路由器产生的,在位于不同区域中的邻居路由器上泛洪。当整个网络中所有L2 LSP交换完成后,在各支持L2路由的路由器上会形成完全一致的L2 LSPDB。
这两种LSP PDU具有相同的格式:
LSP专用报头部分各字段:
①PDU Length:LSP PDU长度字段,占2个字节,标识整个LSP PDU报文的长度(包括通用报头)。
②Remaining Lifetime:剩余生存时间字段,占2个字节,标识此LSP PDU所剩的生存时间,单位为秒。当生存时间为0时,LSP将被从链路状态数据库中清除。
③LSP ID:LSP标识符字段,占“系统ID长度+2”个字节,用来标识不同的LSP PDU和生成LSP的源路由器。它包括三部分:Source ID(源ID,也即System ID)、Pseudonode ID(伪节点ID,简称“PN-ID”,普通路由器LSP的伪节点ID为0,伪节点LSP的伪节点ID不为0)和LSP Number(LSP 序列号,即LSP的分片号,简称“Frag-Nr”)。如下图所示一个LSP ID示例:
④Sequence Number:序列号字段,占4个字节,标识每个LSP PDU的序列号。每一个LSP都拥有一个标识自己的4字节的序列号。它是针对本地路由器发送的LSP而言的。在路由器启动时所发送的第一个LSP报文中的序列号为1,以后当需要生成新的LSP时,新LSP的序列号在前一个LSP序列号的基础上加1.更高的系列号意味着更新的LSP。
⑤Checksum:校验和字段,占2个字节,用于接收端校验传送的LSP PDU的完整性和正确性。当一台路由器收到一个LSP时,在将该LSP放入本地链路数据库和将其再泛洪给其他邻接路由器之前,会重新计算LSP的校验和,如果校验和与LSP中携带的校验和不一致,则说明此LSP传输过程中已经被破坏,不再泛洪。
⑥P(Partition):分区字段,占1位,表示区域划分或者分段区域的修复位,仅与L2 LSP
有关。当P位被设置为1时,表明始发路由器支持自动修复区域的分段情况。
⑦ATT(Attached):区域关联字段,占4位,表示产生此LSP PDU的路由器与多个区域相连。虽然ATT位同时在L1 LSP和L2 LSP中进行了定义,但是它只会在L1/2路由器的L1 LSP中被设置。当L1/2路由器在L1区域内传送L1 LSP时,如果L1 LSP中设置了ATT位,则表示该区域中的L1路由器可以通过此L1/2路由器通往外部区域。
⑧OL(Overload):过载字段,占1位,置1时表示本路由器因内存不足而导致LSDB不完整。设置了过载标志位的LSP虽然还会在网络中扩散,但是在计算通过过载路由器的路由时不会被采用。即对路由器设置过载位后,其他路由器在进行SPF计算时不会使用这台路由器做转发,只计算该节点上的直连路由。
如上图,RouterA到1.1.1.0/24网段的报文由RouterB转发,但如果RouterB所发的LSP报文中过载标识位置1,RouterA会认为RouterB的LSDB不完整,于是将报文通过RouterD、RouterE转发到1.1.1.0/24网段,转发到RouterB直连网段的报文则不受影响。
当系统因为各种原因无法保存新的LSP,以致无法维持正常的LSDB同步时,该系统计算出的路由信息将出现错误。在这种情况下,系统就可以自动进入过载状态,即通过该设备到达的路由不计算,但该设备的直连路由不会被忽略。
除设备异常可导致自动进入过载状态外,也可以通过手动配置使系统进入过载状态。当网络中的某些IS-IS设备需要升级或维护时,需要暂时将该设备从网络中隔离。此时可以给该设备设置过载标志位,这样可避免其他设备通过该节点来转发流量。
如因设备进入异常状态导致系统进入过载状态,此时系统将删除全部引入或渗透的路由信息;而如果因为用户配置导致系统进入过载状态,此时会根据用户的配置决定是否删除全部引入或渗透路由。
⑨IS Type:路由器类型字段,占2位,用来指明生成此LSP的路由器类型是L1路由器还是L2路由器,也表示了收到此LSP的路由器将把这个LSP放在L1 LSPDB中还是放在L2 LSPDB中。01表示L1,11表示L2。
五、SNP PDU报文格式
SNP分为CSNP和PSNP:
①PDU Length:SNP PDU长度字段,占2个字节,标识整个SNP PDU报文的长度(包括通用报头)。
②Source ID:源ID字段,占“系统ID长度+1”个字节,标识发送该SNP PDU的路由器的SystemID。
③Start LSP ID:起始LSP ID(仅CSNP PDU中有此字段),占“系统ID长度+2”个字节,表示在下面的可变字段中描述的LSP范围中的第一个LSP ID。
④End LSP ID:结束LSP ID字段(仅CSNP PDU中有此字段),占“系统ID长度+2”个字节,表示在下面的可变字段中描述的LSP范围中的最后一个LSP ID号。
六、IS-IS PDU可变字段格式
PDU报文,除了报头(包括通用报头和专用报头)部分之外,最后还有一部分,就是“可变长字段”(Variable length fields)部分。这个“可变长字段”部分就是各种PDU报文的真正内容部分,是整个PDU报文的核心部分。因为这部分内容都是以“Type-Length-Value”(类型-长度-值)格式列出的,所以也称为“TLV”部分。
TLV编址方式由三大部分组成:T(Type),即PDU报文类型,不同类型由不同的值定义;L(Length),即Value字段的长度,以字节为单位;V(Value),即包的真正内容,是最重要的部分。但在ISO10589和RFC1195这两种当前IS-IS标准中,使用“code”(代码)替换了“Type”部分,所以这种报文编址方式通常也称为CLV(Code-Length-Value),如下图:
①Code:代码字段,占1个字节,表示PDU类型,不同的IS-IS PDU使用不同的类型。
②Length:长度字段,占1个字节,表示Value字段的长度,最大值为255字节。
③Value:值字段,长度是可变的,表示实际承载的PDU内容,最大为255字节。
在IS-ISPDU使用的各种TLV中,既有ISO 10589中定义的,也有RFC1195中定义的。ISO中定义的TLV用于CLNP网络环境,但是其中的大多数也用于IP网络环境。RFC中定义的TLV只用于IP环境。
Type值从1到10的TLV在ISO10589中定义,其他在RFC1195中定义。
IS-IS基本原理
IS-IS是一种链路状态路由协议,每一台路由器都会生产自己的LSP,它包含了该路由器所有使能IS-IS协议接口的链路状态信息。通过跟相邻设备建立IS-IS邻接关系,互相更新本地设备的LSDB,可以使得LSDB与整个网络的其他设备的LSDB实现同步。然后根据LSDB运用SPF算法计算出IS-IS路由。
一、IS-IS邻居关系的建立
OSPF协议支持Broadcast(广播)、P2P(点对点)、NBMA(非广播多路访问)、P2MP(点对多点)这4种主要网络类型,但IS-IS仅支持Broadcast(如以太网、令牌环网、FDDI)和P2P(链路封装PPP或者HDLC协议的网络)这两种网络类型。若要在NBMA网络中使用(如X.25、FR和ATM网络),需要配置子接口,并配置子接口的类型为P2P。IS-IS不能在P2MP网络上运行。
1、IS-IS邻居建立原则
①只有同一层次的相邻路由器才有可能成为邻居,即只能建立单跳的邻居关系,不能跨路由器建立邻居关系。
②对于L1路由器来说,区域号必须一致。
③链路两端IS-IS接口的网络类型必须一致。通过将以太网接口模拟成P2P接口,可以建立P2P链路邻居关系。
④链路两端IS-IS接口的IP地址必须处于同一网段。
因为IS-IS是直接运行在数据链路层上的协议,并且最早设计是给CLNP使用的,因此IS-IS邻居关系的形成与IP地址无关。但在IP网络桑运行IS-IS时,是需要检查对方的IP地址的。如果接口配置了从IP,那么只要双方有某个IP(主IP或从IP)在同一网段,就能建立邻居,不一定要与主IP相同。
两台运行IS-IS的路由器在交互协议报文实现路由功能之前必须首先建立邻居关系。在不同类型的网络上,IS-IS的邻居建立方式不相同。
2、在广播链路上建立邻居关系
IS-IS在广播链路上是采用二层组播方式发送Hello报文的,L1 IIH报文发送到01-80-C2-00-00-14组播MAC地址,L2 IIH发送到01-80-C2-00-00-14组播MAC地址。当邻居双方都收到了Hello报文后,它们之间的邻居关系就建立了。
IS-IS在广播链路上需要进行三次握手验证,邻居关系才可以建立。与OSPF广播类型网络邻居的建立一致。但要注意,OSPF是以IP协议封装的,所以组播是以组播IP地址发送Hello报文,而IS-IS是链路层协议,直接以帧发送,是通过组播MAC地址发送的,里面封装的是邻居的SNPA(Subnetwork Point of Attachment,子网连接点)地址。
L2路由器广播链路中建立邻居关系的过程如下(假设A的IS-IS接口先使能IS-IS):
①在RouterA连接RouterB的接口使能IS-IS协议后,立即以组播方式发送L2 LAN IIH(因此处假设RouterA和RouterB均为L2路由器),此时报文中包含一个LAN ID,那就是DIS,另外报文中的IS Neighbors(SNPA Address)TLV字段没有邻居的SNPA地址(通常是映射成路由器的主机名),因为还没有收到邻居的Hello报文。
②RouterB收到此报文后会进行系列的校验动作,如SystemID长度是否匹配、Max Area Address是否匹配、验证密码(配置报文验证时)是否正确等。通过验证后,将自己和RouterA的邻居状态标识为Initial(初始化)状态。然后,从IIH报文中SourceID字段中获取RouterA的SystemID,添加到邻居表中。再向RouterA回复L2 LAN IIH报文,报文中的IS Neighbors(SNPA Address)TLV字段为RouterA的SNPA地址,标识RouterA为自己的邻居。
③在RouterA收到此报文后,发现报文中有自己的SNPA地址,于是将自己与RouterB的邻居状态标识为Up,将RouterB的SystemID添加到自己的邻居表中,标识RouterB为自己的邻居。然后RouterA再向RouterB发送一个在IS Neighbors(SNPA Address)TLV字段中标识RouterB的SNPA地址的L2 LAN IIH报文。
④在RouterB收到此报文后,发现有自己的SNPA地址,于是将自己与RouterA的邻居状态标识为Up。这样两个路由器成功建立了邻居关系。
因为是广播网络,需要选举DIS,所以在邻居关系建立后,路由器会等待两个Hello报文间隔,再进行DIS的选举。Hello报文中包含Priority字段,Priority值最大的将被选举为该广播网的DIS。如优先级相同,接口MAC地址较大的被选举为DIS。
3、P2P链路邻居关系的建立
在P2P链路上,邻居关系的建立不同于广播链路,分为两次握手机制和三次握手机制。在两次握手机制中,只有路由器收到对端发来的在IS Neighbors(SNPA Address)TLV字段中包含自己SNPA地址的Hello报文,就单方面宣布邻居为Up状态,建立邻居关系,类似广播链路上邻居关系的建立,不同的只是在P2P链路上发送的是P2P IIH报文,而不是LAN IIH报文。
两次握手机制存在明显的缺陷。当路由器间存在两条及以上的链路时,如果某条链路上到达对端的单向状态为Down,而另一条链路同方向的状态为Up,路由器之间还是能建立起邻接关系。SPF在计算时会使用状态为Up的链路上的参数,这就导致没有检测到故障的路由器在转发报文时仍然试图通过状态为Down的链路。三次握手机制能解决上述不可靠点到点链路中存在的问题。路由器只有在知道邻居路由器也接收到它的报文时,才宣布邻居路由器处于Up状态,从而建立邻居关系。
二、IS-IS的LSP交互过程
IS-IS路由域内的所有路由器都会产生自己的LSP,当发生以下事件时会触发一个新的LSP。
①邻居Up或Down。
②IS-IS相关接口Up或Down。
③引入的IP路由发生变化。
④区域间的IP路由发生变化。
⑤接口被赋了新的Metric值。
⑥周期性更新。
在收到邻居新的LSP后,将接收的新的LSP合并到自己的LSDB中,并标记为flooding(泛洪),发送新的LSP到除了收到该LSP的接口之外的接口。邻居收到后再扩散到它们的邻居,一级级的扩散,最终实现整个IS-IS网络中各路由器的LSDB同步。
LSP报文的“泛洪”(flooding)是指当一个路由器向相邻路由器通告自己的LSP后,相邻路由器再将同样的LSP报文传送到除发送该LSP的路由器外的其他邻居,并这样逐级将LSP传送到整个层次内所有路由器的一种方式。
每一个LSP都拥有一个标识自己的4字节的序列号。在路由器启动时所发送的第一个LSP报文中的序列号为1,以后当需要生成新的LSP时,新LSP的序列号在前一个LSP序列号的基础上加1。更高的序列号意味着更新的LSP。
1、广播链路中新加入路由器与DIS同步LSDB的过程
假设RouterC是新加入的。
①新加入的路由器RouterC首先发送Hello报文,与该广播域中的路由器建立邻居关系。
②建立邻居关系后,RouterC等待LSP刷新定时器超时,然后将自己的LSP发往组播地址(L1 LSP发送到01-80-C2-00-00-14组播地址;L2 LSP发送到01-80-C2-00-00-15组播地址),这样网络上的所有邻居都将收到该LSP。
③该网段中的DIS会把收到RouterC的LSP加入LSDB中,并等待CSNP报文定时器超时并向网络内广播CSNP报文,进行该网络内的LSDB同步。而其他邻居在收到RouterC发来的LSP时会直接丢弃,因为在广播网络中,区域内的路由器只能与DIS进行LSP交互。
④RouterC收到DIS发来的CSNP报文,对比自己的LSDB数据库,发现有许多LSP在本地数据库中没有,于是向DIS发送PSNP报文请求自己没有的LSP。
⑤DIS收到该PSNP报文请求后向RouterC发送对应的LSP进行LSDB的同步。
如果不是新路由器加入,在正常的LSP更新中,DIS的LSDB更新过程如下:
①DIS接收到LSP后在自己的LSDB中搜索对应的记录。如果没有该LSP(每个IS-IS路由器都有自己的LSP,通过LSP ID中的SystemID部分进行区分,每个路由器的SystemID是唯一的),则将其加入数据库,并在网络内广播新的LSP。
②如果收到的LSP序列号大于本地已有的对应路由器的LSP的序列号,就替换为新的LSP报文,并在网络中泛洪新的LSP报文;如果收到的LSP序号小于本地已有的对应路由器的LSP的序列号,则向入端接口发送本地已有的对应路由器的LSP报文,使对端更新LSDB。
③如果新接收的LSP与本地已有对应的路由器的LSP序列号相等,则比较两LSP报文中的Remaining Lifetime(存活时间)字段值。如果新收到的LSP的Remaining Lifetime大于本地已有对应路由器的LSP的Remaining Lifetime,就替换为新报文,并广播新数据库内容,否则就向入端口发送本地已有的对应路由器的LSP报文,使对端更新LSDB。
④如果新接收的LSP与本地已有对应的路由器的LSP的序列号和Remaining Lifetime都相等,则比较两个LSP的Checksum字段值。如果新收到的LSP的Checksum大于本地已有对应的路由器的LSP的Checksum,就替换为新的LSP报文,并在网络泛洪新的LSP,否则就向入端接口发送本地已有的对应路由器的LSP报文,使对端更新LSDB。
⑤如果两个LSP的序列号、Remaining Lifetime和Checksum都相等,则不转发该报文。
2、P2P链路上LSDB数据库的同步过程
在P2P链路中不存在DIS,LSDB的同步更新是在链路两端的路由器上进行的。
LSDB的同步流程:
①RouterA先与RouterB建立邻居关系。
②建立邻居关系后,RouterA与RouterB会先发送各自的CSNP给对端设备。如果一方发现自己的LSDB没有与接收到的CSNP同步(里面的数据库内容存在不一致的地方),则该方向另一方发送PSNP报文,请求索取相应的LSP。
③现假定RouterB通过PSNP报文向RouterA索取某些所需的LSP,RouterA在收到该PSNP报文后,向RouterB发送所请求的LSP,同时启动LSP重传定时器,并等待RouterB发来用作收到确认的PSNP报文。
④如果在LSP重传定时器超时后,RouterA还没有收到RouterB发送的PSNP报文作为应答,则重新发送原来已发送的对应LSP,直至收到了来自RouterA的PSNP报文。
从以上过程可见,在P2P链路上的PSNP报文有两种作用:一是用来向对方请求所需的LSP,二是作为Ack应答以确认收到的LSP。
在网络稳定时,在P2P链路中设备的LSDB更新过程如下:
①如果新收到的LSP序列号比本地已有的对应路由器的LSP序列号更小,则直接给对方发送本地已有的对应路由器的LSP,然后等待对方给自己一个PSNP报文作为确认;如果新收到的LSP比本地已有的对应路由器的LSP序列号更大,则将这个新的LSP存入自己的LSDB,再通过一个PSNP报文来确认收到此LSP,最后将这个新LSP以广播方式发送给除了发送该LSP的邻居以外的邻居。
②如果收到的LSP序列号和本地已有的对应路由器LSP序列号相同,则比较他们的Remaining Lifetime字段值。如果新收到的LSP的Remaining Lifetime小于本地已有的对应路由器的LSP的Remaining Lifetime,则将新收到的LSP存入LSDB中,并发送PSNP报文来确认收到此LSP,然后将该LSP发送给除了发送该LSP的邻居以外的邻居;如果新收到LSP的Remaining Lifetime大于本地已有的对应路由器的LSP的Remaining Lifetime,则直接给对方发送本地已有的LSP,然后等待对方给自己一个PSNP报文作为确认。
③如果新收到的LSP和本地已有的对应路由器的LSP的序列号和Remaining Lifetime都相同,则比较它们的Checksum字段值,如果收到LSP的Checksum大于本地已有的对应路由器的LSP的Checksum,则将新收到的LSP存入LSDB中,并发送PSNP报文来确认收到此LSP,然后将该LSP发送给除了发送该LSP的邻居以外的邻居;如果收到LSP的Checksum小于本地LSP的Checksum,则直接给对方发送本地已有的对应路由器的LSP,然后等待对方给自己一个PSNP报文作为确认。
④如果收到的LSP和本地已有的对应路由器的LSP的序列号、Remaining Lifetime和Checksum都相同,则不转发该报文。
三、IS-IS报文验证
IS-IS验证是基于网络安全性的要求而实现的一种验证手段,通过在IS-IS报文中增加验证字段对报文进行验证。当本地路由器接收到远端路由器发送过来的IS-IS报文时,如果发现验证密码不匹配,则将收到的报文丢弃,达到自我保护的目的。
1、IS-IS验证的分类
根据报文的种类,IS-IS验证可以分为以下三类:
①接口验证:是指使能IS-IS协议的接口以指定方式和密码对L1和L2的Hello报文进行验证。对于IS-IS接口验证,有以下两种设置。
●发送带验证TLV的验证报文,本地对收到的报文也进行验证检查。
●发送带验证TLV的验证报文,但是本地对收到的报文不进行验证检查。
②区域验证:是指在运行IS-IS的区域内部以指定方式和密码对L1的SNP和LSP报文进行验证。
③路由域验证:是指在运行IS-IS的路由域内部不同区域间以指定方式和密码对L2的SNP和LSP报文进行验证。
对于区域和路由域验证,可以设置为SNP和LSP分开验证。
①本地发送的LSP报文和SNP报文都携带验证TLV,对收到的LSP报文和SNP报文都进行验证检查。
②本地发送的LSP报文携带验证TLV,对收到的LSP报文进行验证检查;发送的SNP报文携带验证TLV,但不对收到的SNP报文进行检查。
③本地发送的LSP报文携带验证TLV,对收到的LSP报文进行验证检查;发送的SNP报文不携带验证TLV,也不对收到的SNP报文进行验证检查。
④本地发送的LSP报文和SNP报文都携带验证TLV,对收到的LSP报文和SNP报文都不进行验证检查。
根据报文的验证方式,可以分为以下三类:
①明文验证:一种简单的验证方式,将配置的密码直接加入报文中,这种验证方式安全性不够。
②MD5验证:通过将配置的密码进行MD5算法摘要之后再加入报文中,这样提高了密码的安全性。
③Keychain验证:通过配置随时间变化的密码链表来进一步提升网络的安全性。
2、验证信息的携带形式
IS-IS是通过TLV的形式携带验证信息,验证TLV的类型为10,具体格式如下:
①Type:ISO定义验证报文的类型值为10,长度为1字节。
②Length:指定验证TLV值的长度,长度1字节。0为保留的类型,1为明文验证,54为MD5验证,255为路由域私有验证方式。
③Value:指定验证的类型和密码,长度为1~254字节。
四、IS-IS路由渗透
在IS-IS协议中规定,L1区域必须且只能与L2区域相连,不同的L1区域之间不直接相连。L1区域内的路由信息可通过L1/2路由器发布到L2区域,因此,L2路由器知道整个IS-IS路由域的路由信息。但在缺省情况下,L2路由器并不将自己知道的其他L1区域以及L2区域的路由信息发布到自己所连接的L1区域。这样该L1区域中的路由器将不了解本区域以外的路由信息,只将去往其他区域的报文发送到最近的L1/2路由器,可能导致对本区域之外的目的地址无法选择最佳的路由。另外,不同的L1/2到达目的的开销又可能相差很大,而L1路由器在选择L1/2路由器时仅考虑他们之间的链路开销。
为了解决上述问题,IS-IS提供了路由渗透(RouteLeaking)功能,人为地把骨干网(即L2区域)的路由信息注入到普通的L1区域,保证普通区域也拥有整个IS-IS路由域的路由信息。路由渗透特性可以将L2的IP路由引入到L1路由器中,这样可以允许L1路由器对某些或全部的L2路由选择出区域的最佳路径。当然也增加可区域内路由器的路由表规模。
IS-IS路由渗透功能是通过在L1/2路由器上定义ACL、路由策略、Tag标记等方式,将符合条件的路由筛选出来,来实现将其他L1区域和L2区域的部分路由信息通报给自己所在L1区域的目的。
如上图,RouterA发送报文给RouterF,选择的最佳路径应该是A——>B——>D——>E——>F,因为这条链路上的cost值为10+10+10+10=40,但在RouterA上查看发送到RouterF的报文选择的路径是:A——>C——>E——>F,其cost值为10+50+10=70,不是RouterA到RouterF的最优路由。
RouterA作为L1路由器并不知道本区域外部的路由,那么发往区域外的报文都会选择由最近的L1/2路由器产生的缺省路由发送,所以会出现RouterA选择次最优路由转发报文的情况。
如果分别在L1/2路由器RouterC和RouterD上使能路由渗透功能,Area10中的L1路由器就会拥有经过这两个L1/2路由器通向区域外的路由信息。经过路由计算,选择的转发路径为A——>B——>D——>E——>F,即RouterA到RouterF的最优路由。
五、IS-IS网络收敛
在IS-IS网络收敛方面,有快速收敛和按优先级收敛两种方式。快速收敛侧重于从路由的计算角度加快收敛速度;按优先级收敛侧重于从路由优先级角度提高网络性能。
1、快速收敛
IS-IS快速收敛是为了提高路由的收敛速度而提出的扩展特性,包括以下几个功能:
(1)I-SPF
I-SPF(Incremental SPF,增量最短路径优先算法)是指当网络拓扑改变时,只对受影响的节点进行路由计算,不对全部节点重新进行路由计算,从而加快路由的计算。
(2)PRC
PRC(Partial Route Calculation,部分路由计算)是指当网络上路由发生变化的时候,只对发生变化的路由进行重新计算。
在路由计算中,叶子代表路由,节点则代表路由器。如果I-SPF计算后的SPT改变,PRC会只处理那个变化的节点上的所有叶子;如果经过I-SPF计算后的SPT并没有变化,则PRC只处理变化的叶子信息。比如一个节点使能一个IS-IS接口,则整个网络拓扑的SPT是不变的,这时PRC只更新这个节点的接口路由,从而降低CPU占用率。
(3)智能定时器
是在进行SPF计算和产生LSP的时候用到的一种智能定时器。该定时器的首次超时时间是一个固定的时间。如果在定时器超时前,又有触发定时器的事件发生,则该定时器下一次的超时时间会增加。
(4)LSP快速扩散
此特性可以加快LSP的扩散速度。正常情况下,当IS-IS收到其他路由器发来的LSP时,如果此LSP比本地LSDB中相应的LSP要新,则更新LSDB中的LSP,并用一个定时器定期将LSDB内已更新的LSP扩散出去。
LSP快速扩散特性改进了这种方式,使能了此特性的设备收到一个或多个较新的LSP时,在路由计算之前,先将小于指定数目的LSP扩散出去,加快LSDB的同步过程。
2、按优先级收敛
IS-IS按优先级收敛是指在大量路由情况下,能够让某些特定的路由(例如匹配指定IP前缀的路由)优先收敛的一种技术。可以把和关键业务相关的路由配置成相对较高的优先级。