一. IS-IS简介

IS-IS(Intermediate System-to-Intermediate System intra-domain routing information exchange protocol,中间系统到中间系统的域内路由信息交换协议)最初是国际标准化组织(International Organization for Standardization,ISO)为它的无连接网络协议(ConnectionLess Network Protocol,CLNP)设计的一种动态路由协议。
为了提供对IP的路由支持,IETF(Internet Engineering Task Force,因特网工程任务组)在RFC 1195中对IS-IS进行了扩充和修改,使它能够同时应用在TCP/IP和OSI环境中,称为集成化IS-IS(Integrated IS-IS或Dual IS-IS)。
IS-IS属于内部网关协议(Interior Gateway Protocol,IGP),用于自治系统内部。IS-IS是一种链路状态协议,使用最短路径优先(Shortest Path First,SPF)算法进行路由计算。

1. 基本概念
1) IS-IS路由协议的基本术语
l IS(Intermediate System):中间系统。相当于TCP/IP中的路由器,是IS-IS协议中生成路由和传播路由信息的基本单元。在下文中IS和路由器具有相同的含义。
l ES(End System):终端系统。相当于TCP/IP中的主机系统。ES不参与IS-IS路由协议的处理,ISO使用专门的ES-IS协议定义终端系统与中间系统间的通信。
l RD(Routing Domain):路由域。在一个路由域中多个IS通过相同的路由协议来交换路由信息。
l Area:区域,路由域的细分单元,IS-IS允许将整个路由域分为多个区域。
l LSDB(Link State DataBase):链路状态数据库。网络内所有链路的状态组成了链路状态数据库,在每一个IS中都至少有一个LSDB。IS使用SPF算法,利用LSDB来生成自己的路由。
l LSPDU(Link State Protocol Data Unit):链路状态协议数据单元,简称LSP。在IS-IS中,每一个IS都会生成LSP,此LSP包含了本IS的所有链路状态信息。
l NPDU(Network Protocol Data Unit):网络协议数据单元,是OSI中的网络层协议报文,相当于TCP/IP中的IP报文。
l DIS(Designated IS):广播网络上选举的指定中间系统,也可以称为指定IS。
l NSAP(Network Service Access Point):网络服务接入点,即OSI中网络层的地址,用来标识一个抽象的网络服务访问点,描述OSI模型的网络地址结构。
2) IS-IS地址结构
(1) NSAP
如图所示,NSAP由IDP(Initial Domain Part)和DSP(Domain Specific Part)组成。IDP相当于IP地址中的主网络号,DSP相当于IP地址中的子网号和主机地址。
IDP部分是ISO规定的,它由AFI(Authority and Format Identifier)与IDI(Initial Domain Identifier)组成,AFI表示地址分配机构和地址格式,IDI用来标识域。
DSP由HO-DSP(High Order Part of DSP)、SystemID和SEL三个部分组成。HO-DSP用来分割区域,SystemID用来区分主机,SEL指示服务类型。
IDP和DSP的长度都是可变的,NSAP总长最多是20个字节,最少8个字节。
IS-IS路由协议知识总结

        (2) 区域地址
            IDP和DSP中的HO-DSP一起,既能够标识路由域,也能够标识路由域中的区域,因此,它们一起被称为区域地址(Area Address)。两个不同的路由域中不允许有相同的区域地址。
            一般情况下,一台路由器只需要配置一个区域地址,且同一区域中所有节点的区域地址都要相同。为了支持区域的平滑合并、分割及转换,一台路由器最多可配置3个区域地址。
        (3) System ID
            System ID用来在区域内唯一标识主机或路由器。它的长度固定为48比特。
            在实际应用中,一般使用Router ID与System ID进行对应。假设一台路由器使用接口Loopback0的IP地址168.10.1.1作为Router ID,则它在IS-IS使用的System ID可通过如下方法转换得到:
                 将IP地址168.10.1.1的每一部分都扩展为3位,不足3位的在前面补0;
                 将扩展后的地址168.010.001.001重新划分为3部分,每部分由4位数字组成,得到的1680.1000.1001就是System ID。
            实际System ID的指定可以有不同的方法,但要保证能够唯一标识主机或路由器。
        (4) SEL
            SEL(NSAP Selector,有时也写成N-SEL)的作用类似IP中的“协议标识符”,不同的传输协议对应不同的SEL。在IP中,SEL均为00。
    3) NET
        NET(Network Entity Title,网络实体名称)指示的是IS本身的网络层信息,不包括传输层信息,可以看作是一类特殊的NSAP,即SEL为0的NSAP地址。因此,NET的长度与NSAP的相同,最多为20个字节,最少为8个字节。
        通常情况下,一台路由器配置一个NET即可,当区域需要重新划分时,例如将多个区域合并,或者将一个区域划分为多个区域,这种情况下配置多个NET可以在重新配置时仍然能够保证路由的正确性。由于一台路由器最多可配置3个区域地址,所以最多也只能配置3个NET。在配置多个NET时,必须保证它们的System ID都相同。
        例如NET为:ab.cdef.1234.5678.9abc.00,则其中Area为ab.cdef,System ID为1234.5678.9abc,SEL为00。

** 2. IS-IS区域 **
    1) 两级结构
        为了支持大规模的路由网络,IS-IS在路由域内采用两级的分层结构。一个大的路由域通常被分成多个区域(Areas)。区域内的路由通过Level-1路由器管理,区域间的路由通过Level-2路由器管理。
    2) Level-1与Level-2
         Level-1路由器
            Level-1路由器负责区域内的路由,它只与属于同一区域的Level-1和Level-1-2路由器形成邻居关系,维护一个Level-1的LSDB,该LSDB包含本区域的路由信息,到区域外的报文转发给最近的Level-1-2路由器。
         Level-2路由器
            Level-2路由器负责区域间的路由,可以与同一区域或者其它区域的Level-2和Level-1-2路由器形成邻居关系,维护一个Level-2的LSDB,该LSDB包含区域间的路由信息。所有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路由器必须通过Level-1-2路由器才能连接至其他区域。Level-1-2路由器维护两个LSDB,Level-1的LSDB用于区域内路由,Level-2的LSDB用于区域间路由。
         属于不同区域的Level-1路由器不能形成邻居关系。
         Level-2路由器是否形成邻居关系则与区域无关。
        为一个运行IS-IS协议的网络,其中Area 1是骨干区域,该区域中的所有路由器均是Level-2路由器。另外4个区域为非骨干区域,它们都通过Level-1-2路由器与骨干路由器相连。

IS-IS路由协议知识总结
图是IS-IS的另外一种拓扑结构图。其中Level-1-2路由器不仅仅用来连接Level-1和Level-2路由器,而且还与其它Level-2路由器一起构成了IS-IS的骨干网。在这个拓扑中,并没有规定哪个区域是骨干区域。所有Level-2路由器和Level-1-2路由器构成了IS-IS的骨干网,他们可以属于不同的区域,但必须是物理连续的。
IS-IS路由协议知识总结

            IS-IS的骨干网(Backbone)指的不是一个特定的区域。
            IS-IS不论是Level-1还是Level-2路由,都采用SPF算法,分别生成最短路径树(Shortest Path Tree,SPT)。
    3) 路由方式
        Level-1路由器利用System ID进行区域内的路由,如果发现报文的目的地址不属于自己所在的区域,就将报文转发给最近的Level-1-2路由器。
        Level-2路由器根据区域地址进行区域间的路由。
    4) 路由***
        通常情况下,区域内的路由通过Level-1的路由器进行管理。所有的Level-2路由器和Level-1-2路由器构成一个Level-2区域。因此,一个IS-IS的路由域可以包含多个Level-1区域,但只有一个Level-2区域。
        Level-1区域必须且只能与Level-2区域相连,不同的Level-1区域之间并不相连。
        Level-1区域内的路由信息通过Level-1-2路由器发布到Level-2区域,因此,Level-2路由器知道整个IS-IS路由域的路由信息。但是,在缺省情况下,Level-2路由器并不将自己知道的其它Level-1区域以及Level-2区域的路由信息发布到Level-1区域。这样,Level-1路由器将不了解本区域以外的路由信息,Level-1路由器只将去往其它区域的报文发送到最近的Level-1-2路由器,所以可能导致对本区域之外的目的地址无法选择最佳的路由。
        为解决上述问题,IS-IS提供了路由***功能,使Level-1-2路由器可以将己知的其它Level-1区域以及Level-2区域的路由信息发布到指定的Level-1区域。

**3. IS-IS的网络类型**
    1.  网络类型
        IS-IS只支持两种类型的网络,根据物理链路不同可分为:
             广播链路:如Ethernet、Token-Ring等。
             点到点链路:如PPP、HDLC等。
             对于NBMA(Non-Broadcast Multi-Access)网络,如ATM,需对其配置子接口,并将子接口类型配置为点到点网络或广播网络。IS-IS不能在点到多点(Point to MultiPoint,P2MP)链路上运行。

    2.  DIS和伪节点
        在广播网络中,IS-IS需要在所有的路由器中选举一个路由器作为DIS。
        Level-1和Level-2的DIS是分别选举的,用户可以为不同级别的DIS选举设置不同的优先级。DIS优先级数值越高,被选中的可能性就越大。如果优先级最高的路由器有多台,则其中SNPA(Subnetwork Point of Attachment,子网连接点)地址(广播网络中的SNPA地址是MAC地址)最大的路由器会被选中。不同级别的DIS可以是同一台路由器,也可以是不同的路由器。
        在IS-IS广播网中,同一网段上的同一级别的路由器之间都会形成邻接关系,包括所有的非DIS路由器之间也会形成邻接关系。如图所示。

IS-IS路由协议知识总结

            DIS用来创建和更新伪节点(Pseudonodes),并负责生成伪节点的LSP,用来描述这个网络上有哪些路由器。
            伪节点是用来模拟广播网络的一个虚拟节点,并非真实的路由器。在IS-IS中,伪节点用DIS的System ID和一个字节的Circuit ID(非0值)标识。
            使用伪节点可以简化网络拓扑,减少SPF的资源消耗。
            IS-IS广播网络上所有的路由器之间都形成邻接关系,但LSDB的同步仍然依靠DIS来保证。

**4. IS-IS的PDU格式**
    1) PDU头格式
        IS-IS报文是直接封装在数据链路层的帧结构中的。PDU(Protocol Data Unit,协议数据单元)可以分为两个部分,报文头和变长字段部分。其中报文头又可分为通用报头和专用报头。对于所有PDU来说,通用报头都是相同的,但专用报头根据PDU类型不同而有所差别,如图所示。

IS-IS路由协议知识总结
2) 通用报头格式
所有的PDU都有相同的通用报头格式,如图所示。
IS-IS路由协议知识总结
主要字段的解释如下:
Intradomain Routing Protocol Discriminator(域内路由协议鉴别符):设置为0x83。
Length Indicator(长度标识符):PDU头部的长度(包括通用报头和专用报头),以字节为单位。
Version/Protocol ID Extension(版本/协议标识扩展):设置为1(0x01)。
ID Length(标识长度):NSAP地址和NET的ID长度。
R(Reserved,保留):设置为0。
PDU Type(PDU类型):详细信息请参考下表。
Version(版本):设置为1(0x01)。
Maximum Area Address(最大区域地址数):支持的最大区域个数。
PDU类型对应关系表
类型值 PDU类型 简称
类型值 PDU类型 简称

IS-IS路由协议知识总结
3) Hello
Hello报文用于建立和维持邻居关系,也称为IIH(IS-to-IS Hello PDUs)。其中,广播网中的Level-1路由器使用Level-1 LAN IIH,广播网中的Level-2路由器使用Level-2 LAN IIH,点到点网络中的路由器则使用P2P IIH。
它们的报文格式有所不同。广播网中的Hello报文格式如图所示(浅蓝色部分是通用报文头)。
IS-IS路由协议知识总结

            主要字段的解释如下:
                 Reserved/Circuit Type:高位的6比特保留,值为0。低位的2比特表示路由器的类型(00保留,01表示L1,10表示L2,11表示L1/2)。
                 Source ID:发送Hello报文的路由器的System ID。
                 Holding Time:保持时间。在此时间内如果没有收到邻居发来的Hello报文,则中止已建立的邻居关系。
                 PDU Length:PDU的总长度,以字节为单位。
                 Priority:选举DIS的优先级。
                 LAN ID:包括System ID和一字节的伪节点ID。
        点到点网络中的Hello报文格式如图所示(浅蓝色部分是通用报文头)。

IS-IS路由协议知识总结

            从图中可以看出,P2P IIH中的多数字段与LAN IIH相同。不同的是没有Priority和LAN ID字段,而多了一个Local Circuit ID字段,表示本地链路ID。
    4) LSP报文格式
        LSP用于交换链路状态信息。LSP分为两种:Level-1 LSP和Level-2 LSP。Level-1路由器传送Level-1 LSP,Level-2路由器传送Level-2 LSP,Level-1-2路由器则可传送以上两种LSP。
        两类LSP有相同的报文格式,如图所示(浅蓝色部分是通用报文头)。

IS-IS路由协议知识总结

        主要字段的解释如下:
             PDU Length:PDU的总长度,以字节为单位。
             Remaining Lifetime:LSP的存活时间,以秒为单位。
             LSP ID:由三部分组成,System ID、伪节点ID(一字节)和LSP的分片号(一字节)。
             Sequence Number:LSP的序列号。
             Checksum:LSP的校验和。
             P(Partition Repair):仅与L2 LSP有关,表示路由器是否支持自动修复区域分割。
             ATT(Attachment):由L1/L2路由器产生,但仅与L1 LSP有关,表示产生此LSP的路由器(L1/L2路由器)与多个区域相连接。
             OL(LSDB Overload):表示本路由器因内存不足而导致LSDB不完整。其它路由器在得知这一信息后,就不会再利用这台路由器转发需要经过它传送的数据流,但到此路由器直连地址的报文仍然可以被转发。如下图所示,假设正常情况下Router A到Router C的报文都是经过Router B转发,但如果Router B的OL位置1,则Router A会认为Router B的路由不完整,从而将报文通过Router D、Router E转发给Router C,但到Router B直连地址的报文不受影响。

IS-IS路由协议知识总结

                     IS Type:生成LSP的路由器的类型。
    5) SNP格式 
        时序报文SNP(Sequence Number PDUs)用于确认邻居之间最新接收的LSP,作用类似于确认(Acknowledge)报文,但更有效。
        SNP包括CSNP(Complete SNP,全时序报文)和PSNP(Partial SNP,部分时序报文),进一步又可分为Level-1 CSNP、Level-2 CSNP、Level-1 PSNP和Level-2 PSNP。
        CSNP包括LSDB中所有LSP的摘要信息,从而可以在相邻路由器间保持LSDB的同步。在广播网络上,CSNP由DIS定期发送(缺省的发送周期为10秒);在点到点链路上,CSNP只在第一次建立邻接关系时发送。
        CSNP的报文格式如图所示(浅蓝色部分是通用报文头)。

IS-IS路由协议知识总结

        PSNP只列举最近收到的一个或多个LSP的序号,它能够一次对多个LSP进行确认。当发现LSDB不同步时,也用PSNP来请求邻居发送新的LSP。
        PSNP的报文格式如图所示:

IS-IS路由协议知识总结

    6) CLV
        PDU中的变长字段部分是多个CLV(Code-Length-Value)三元组。其格式如图1-13所示:

IS-IS路由协议知识总结

        不同PDU类型所包含的CLV是不同的,如表1-2所示。
         PDU类型和包含的CLV名称
        CLV Code    名称  所应用的PDU类型

IS-IS路由协议知识总结

5. 支持的IS-IS特性
1) 多实例和多进程
为了方便管理,提高控制效率,IS-IS支持多进程和多实例特性。多进程允许为一个指定的IS-IS进程关联一组接口,从而保证该进程进行的所有协议操作都仅限于这一组接口。这样,就可以实现一台路由器有多个IS-IS协议进程,每个进程负责唯一的一组接口。
对于支持***的路由器,每个IS-IS进程都与一个指定的***实例相关联。这样,所有附加到该进程的接口都应与该进程相关联的***实例相关联。
2) 热备份
具有分布式结构的路由器可支持IS-IS热备份(Hot Standby,HSB)特性。IS-IS将需要备份的数据从主用主控板(Active Main Board,AMB)备份到备用主控板(Standby Main Board,SMB)。无论何时主用主控板出现故障,备用主控板都会变成激活状态,接替工作,从而保证IS-IS不受影响,保持正常工作。
IS-IS支持两种类型的HSB。一种HSB的所有IS-IS数据都是同步备份的,AMB和SMB切换后,IS-IS可以立即工作,保持平稳运行。另一种HSB是在AMB和SMB的切换过程中只备份IS-IS配置信息,IS-IS进行GR,重新向邻居发送邻接请求,同步LSDB数据库。
3) IS-IS GR
基于IS-IS的GR Restarter进行协议重启后,为了与其IS-IS邻居重新同步链路状态数据库,它必须完成下列两项任务:
在不改变邻接关系的前提下,重新获取网络中的有效IS-IS邻居信息;
重新获取网络链路状态数据库的内容。
IS-IS协议重启完毕后,GR Restarter会立即向邻接的GR Helper发送一个IS-IS GR信号。这样,IS-IS邻居就不会复位与其的邻居关系。在收到其IS-IS邻居的响应后,GR Restarter会重新恢复与其的邻居关系列表。
邻居关系重新建立后,GR Restarter与其所有具备GR感知能力的IS-IS邻居之间同步数据库,并交换路由信息。交换完成后,GR Restarter根据新的路由转发信息更新路由表和转发表,删除失效的路由,完成IS-IS协议收敛。
4) IS-IS TE
IS-IS TE(Traffic Engineering,流量工程)支持建立和维护TE的LSP(Label Switched Path,标签交换路径)。
MPLS在构建CR LSP(Constraint-based Routed LSP,基于约束路由的LSP)时,需要了解本区域中所有链路的流量属性信息。它可以通过IS-IS来获取链路的流量工程信息。
5) 管理标记
管理标记简化了对路由信息的管理,该标记用来携带关于IP地址前缀的管理信息,利用它可以控制对各种外部路由协议的引入,以及承载BGP的标准或扩展团体属性。
6) LSP分片扩展
IS-IS通过泛洪LSP来宣告链路状态信息,由于一个LSP能够承载的信息量有限,IS-IS将对LSP进行分片。每个LSP分片由产生该LSP的结点或伪结点的SystemID、PseudnodeID(普通LSP为0,Pseudonode LSP为非0)、LSPNumber(LSP分片号)组合起来唯一标识,由于LSPNumber字段的长度是1字节,因此,IS-IS路由器可产生的分片数最大为256,限制了IS-IS路由器可以发布的链路信息量。
IS-IS LSP分片扩展特性可使IS-IS路由器生成更多的LSP分片,通过为路由器配置附加的虚拟系统、每个虚拟系统都可生成256个LSP分片(最多可配置50个虚拟系统),使得IS-IS路由器可最多生成13056个LSP分片。
常用术语
初始系统(Originating System):实际运行IS-IS协议的路由器。使能IS-IS LSP分片扩展功能后,可以为路由器配置附加的虚拟系统,“Originating System”指的是原来运行的、“真正”的IS-IS进程。
系统ID(System ID):初始系统的系统ID。
附加系统ID(Additional System ID):使能IS-IS LSP分片扩展功能后,为IS-IS路由器配置的附加的虚拟SystemID。每个附加系统ID都可以生成256个额外扩展的LSP分片。附加系统ID和系统ID一样,在整个路由域中必须唯一。
虚拟系统(Virtual System):由附加系统ID标识的系统,用来生成扩展LSP分片。
原始LSP(Original LSP):由初始系统生成的LSP,在其LSP ID中指定的System ID为初始系统的系统ID。
扩展LSP(Extended LSP):由虚拟系统生成的LSP,在其LSP ID中指定的System ID为附加系统ID。
通过配置附加系统ID,IS-IS路由器可以在扩展分片LSP中宣告更多的链路状态信息,可以把虚拟系统看作一个虚拟的路由器,扩展分片LSP就是由附加系统ID标识的虚拟系统发布的。
操作模式
IS-IS路由器运行LSP分片扩展特性的操作模式有两种:
Mode-1:当网络中的部分路由器不支持LSP分片扩展特性时,使用工作模式1。在该模式下,初始系统与每个虚拟系统都建立邻居关系,且初始系统到虚拟系统的链路开销为0,因此,虚拟系统就好像网络中与初始系统相连的路由器,但只能通过初始系统才能到达虚拟系统,因此,不支持分片扩展特性的IS-IS路由器收到扩展分片LSP时无需做任何修改也能够正常工作,但是对通过虚拟系统发布的扩展LSP分片中的链路状态信息有所限制。
Mode-2:当网络中所有路由器都支持LSP分片扩展特性时,推荐使用工作模式2。在该模式下,网络中所有IS-IS路由器都知道虚拟系统生成的LSP属于的初始系统,对虚拟系统发布的LSP扩展分片的链路状态信息没有限制。
LSP分片扩展特性的操作模式基于区域和路由层次配置,mode-1可以向前兼容,支持分片扩展特性的路由器能够与不支持分片扩展特性的路由器协同工作;mode-2要求处在同一区域且Level相同的路由器都支持分片扩展特性。
7) 动态主机名交换机制
动态主机名交换机制是为了方便对IS-IS网络的维护和管理而引入的,它为IS-IS路由器提供了一种从主机名到System ID映射的服务。这个动态的主机名信息在LSP中以一个动态主机名CLV的形式发布。
这个机制同时还提供将主机名与广播网中的DIS相关联的服务,并将此信息通过伪节点的LSP以动态主机名CLV的形式发布出去。
在维护和管理中,使用主机名比使用System ID会更直观,也更容易记忆。配置此功能后,当在路由器上使用display命令显示IS-IS相关信息时,看到的是路由器的主机名,而不再是System ID。

二. 配置IS-IS

1. IS-IS 基本配置
    1) 创建IS-IS进程,并进入IS-IS视图
        [RTA] isis [ process-id ] 
    2) 配置IS-IS进程的网络实体名称
        [RTA] network-entity net
    3) 在指定接口上使能IS-IS进程
        [RTA-Ethernet0/0] isis enable [process-id]
    4) 配置IS-IS接口邻接关系类型 
        [RTA-Ethernet0/0] isis circuit-level [ level-1 | level-1-2 | level-2 ]
    5) 配置IS-IS路由器类型
        [RTA-isis-1] is-level { level-1 | level-1-2 | level-2 }
    6) 配置IS-IS开销值的类型
        [RTA-isis-1] cost-style { narrow | wide | wide-compatible | { compatible | narrow-compatible }}
    7) 配置IS-IS接口的链路开销值 
        [RTA-Ethernet0/0] isis cost value [ level-1 | level-2 ]
    8) 使能自动计算接口链路开销值功能 
        [RTA-isis-1] auto-cost enable
2. IS-IS 高级配置
    1) 配置IS-IS邻居关系验证方式和验证密码
        [RTA-Ethernet0/0] isis authentication-mode { md5 | simple } password [ level-1 | level-2 ] [ ip | osi ]
    2) 配置IS-IS区域验证方式和验证密码
        [RTA-isis-1] area-authentication-mode { md5 | simple } password [ ip | osi ]
    3) 配置IS-IS路由域验证方式和验证密码
        [RTA-isis-1] domain-authentication-mode { md5 | simple } password [ ip | osi ]
    4) IS-IS聚合配置
        [RTA-isis-1]summary ip-address { mask | mask-length } [ avoid-feedback | generate_null0_route | [ level-1 | level-1-2 | level-2 ] | tag tag ] 
3. IS-IS 显示和维护
    1) 显示IS-IS的摘要信息 
        [Router] display isis brief [ process-id ] 
    2) 显示IS-IS的邻居信息 
        [Router] display isis peer [ process-id ] 
    3) 显示IS-IS的IPv4路由信息 
        [Router] display isis route [ process-id ] 
    4) 显示IS-IS的链路状态数据库 
        [Router] display isis lsdb [ [ l1 | l2 | level-1 | level-2 ] | [ lsp-id LSPID | lsp-name lspname ] | local | verbose ] [ process-id ]