IS-IS基本概念
IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是ISO (International Organization for Standardization,国际标准化组织)为它的CLNP(ConnectionLessNetwork Protocol,无连接网络协议)设计的一种动态路由协议,随着TCP/IP协议的流行,为了提供对IP路由的支持,IETF在RFC1195中对IS-IS进行了扩充和修改,使它能够同时应用在TCP/IP和OSI(Open System Interconnect,开放式系统互联)环境中,我们将扩展后的IS-IS称为集成IS-IS。
1.1 IS-IS概述
IS-IS是ISO定义的OSI协议栈中的CLNS(ConnectionLess Network Service,无连接网络服务)的一部分,IS-IS是一种链路状态路由协议,IS-IS与OSPF在许多方面非常相似,例如运行IS-IS协议的直连设备之间通过发送Hello报文发现彼此,然后建立邻接关系,并交互链路状态信息。
- CLNS由以下三个部分组成:
- CLNP:类似于TCP/IP中的IP协议。
- IS-IS:类似于TCP/IP中的OSPF。
- ES-IS:类似于TCP/IP中的ARP,ICMP等。
- ES:End System,终端系统,类似于IP网络环境中的主机。
- ES-IS:End System to Intermediate System,终端系统到中间系统。
1.2 NSAP
NSAP(Network Service Access Point,网络服务访问点)是OSI协议栈中用于定位资源的地址,主要用于提供网络层和上层应用之间的接口。NSAP包括IDP及DSP,如下图所示:
IDP(Initial Domian Part)相当于IP地址中的主网络号。它是由ISO规定,并由AFI(Authority and Format Identifier)与IDI(Initial Domain Identifier)两部分组成。AFI表示地址分配机构和地址格式,IDI用来标识域。
DSP(Domian Specific Part)相当于IP地址中的子网号和主机地址。它由High Order DSP、System ID和SEL三个部分组成。High Order DSP用来分割区域,System ID用来区分主机,SEL(NSAP Selector)用来指示服务类型。
1.3 NET
NET(Network Entity Title,网络实体名称)是OSI协议栈中设备的网络层信息,主要用于路由计算,由区域地址(Area ID)和System ID组成,可以看作是特殊的NSAP(SEL为00的NSAP),NET的长度与NSAP的相同,最长为20Byte,最短为8Byte,在IP网络中运行IS-IS时,只需配置NET,根据NET地址设备可以获取到Area ID以及System ID。
Area ID由IDP和DSP中的High Order DSP组成,既能够标识路由域,也能够标识路由域中的区域。因此,它们一起被称为区域地址,相当于OSPF中的区域编号,一般情况下,一个路由器只需要配置一个区域地址,且同一区域中所有节点的区域地址都要相同。为了支持区域的平滑合并、分割及转换,缺省情况下,一个IS-IS进程下最多可配置3个区域地址。
System ID用来在区域内唯一标识主机或路由器。在设备的实现中,它的长度固定为6Byte。
1.4 NET的配置举例
每台运行IS-IS的网络设备至少需拥有一个NET,当然,一台设备也可以同时配置多个NET,但是这些NET的System ID必须相同。
在华为的网络设备上,System ID的长度总是固定的6Byte。在一个IS-IS路由域中,设备的System ID必须唯一,为了便于管理,一般根据Router ID配置System ID。
1.5 IS-IS和OSPF区域划分的区别
- IS-IS在自治系统内采用骨干区域与非骨干区域两级的分层结构:
- Level-1路由器部署在非骨干区域。
- Level-2路由器和Level-1-2路由器部署在骨干区域。
- 每一个非骨干区域都通过Level-1-2路由器与骨干区域相连。
如图所示,整个骨干区域不仅包括Area49.0002中的所有路由器,还包括其它区域的Level2和Level-1-2路由器,以上拓扑结构图可以体现IS-IS与OSPF的不同点:
- 在IS-IS中,每个路由器都只属于一个区域;而在OSPF中,一个路由器的不同接口可以属于不同的区域。
- 在IS-IS中,单个区域没有骨干与非骨干区域的概念;而在OSPF中,Area0被定义为骨干区域。
- 在IS-IS中,Level-1和Level-2级别的路由都采用SPF算法,分别生成最短路径树SPT(Shortest Path Tree);而在OSPF中,只有在同一个区域内才使用SPF算法,区域之间的路由需要通过骨干区域来转发。
1.6 IS-IS路由器的分类
- Level-1路由器
- Level-1路由器是一种IS-IS区域内部路由器,它只与属于同一区域的Level-1和Level-1-2路由器形成邻接关系,这种邻接关系称为Level-1邻接关系。Level-1路由器无法与Level-2路由器建立邻接关系。
- Level-1路由器只负责维护Level-1的链路状态数据库LSDB,该LSDB只包含本区域的路由信息。值得一提的是,Level-1路由器必须通过Level-1-2路由器接入IS-IS骨干区域从而访问其他区域。
- Level-2路由器
- Level-2路由器是IS-IS骨干路由器,它可以与同一或者不同区域的Level-2路由器或者Level-1-2路由器形成邻接关系。Level-2路由器维护一个Level-2的LSDB,该LSDB包含整个IS-IS域的所有路由信息。
- 所有Level-2级别(即形成Level-2邻接关系)的路由器组成路由域的骨干网,负责在不同区域间通信。路由域中Level-2级别的路由器必须是物理连续的,以保证骨干网的连续性。
- Level-1-2路由器
- Level-1-2路由器与OSPF中的ABR非常相似,它也是IS-IS骨干网络的组成部分。
- Level-1-2路由器维护两个LSDB,Level-1的LSDB用于区域内路由,Level-2的LSDB用于区域间路由。
- 同时属于Level-1和Level-2的路由器称为Level-1-2路由器,它可以与同一区域的Level-1和Level-1-2路由器形成Level-1邻接关系,也可以与其他区域的Level-2和Level-1-2路由器形成Level-2的邻接关系。
- 在华为路由器上配置IS-IS时,缺省时,路由器全局Level为Level-1-2
1.7 IS-IS支持的网络类型
IS-IS会自动根据接口的数据链路层封装决定该接口的缺省网络类型, IS-IS支持两种类型的网络:
- 广播(Broadcast): 如Ethernet。
- 点到点(P2P): 如PPP、 HDLC等。
1.8 IS-IS开销值
- IS-IS使用Cost(开销)作为路由度量值,Cost值越小,则路径越优。IS-IS链路的Cost与设备的接口有关,与OSPF类似,每一个激活了IS-IS的接口都会维护接口Cost。然而与OSPF不同的是,IS-IS接口的Cost在缺省情况下并不与接口带宽相关(在实际部署时,IS-IS也支持根据带宽调整Cost值),无论接口带宽多大,缺省时Cost为10。
- 一条IS-IS路径的Cost等于本路由器到达目标网段沿途的所有链路的Cost总和。
- IS-IS有三种方式来确定接口的开销,按照优先级由高到低分别是:
- 接口开销:为单个接口设置开销。
- 全局开销:为所有接口设置开销。
- 自动计算开销:根据接口带宽自动计算开销。
- 在早期的ISO10589中,使能IS-IS的接口下最大只能配置值为63的开销值,此时IS-IS的开销类型为narrow。但是在大型网络设计中,较小的度量范围不能满足实际需求。RFC3784中规定,使能IS-IS的接口开销值可以扩展到16777215,此时IS-IS的开销类型为wide。
- 缺省时,华为路由器采用的开销类型是narrow。
- narrow类型下使用的TLV:
- 128号TLV(IP Internal Reachability TLV):用来携带路由域内的IS-IS路由信息。
- 130号TLV(IP External Reachability TLV):用来携带路由域外的IS-IS路由信息。
- 2号TLV(IS Neighbors TLV):用来携带邻居信息。
- wide类型下使用的TLV:
- 135号TLV(Extended IP Reachability TLV):用来替换原有的IP reachability TLV,携带IS-IS路由信息,它扩展了路由开销值的范围,并可以携带sub TLV。
- 22号TLV(IS Extended Neighbors TLV):用来携带邻居信息。
1.9 IS-IS报文格式
- IS-IS报文是直接封装在数据链路层的帧结构中的。
- PDU(Protocol Data Unit,协议数据单元)可以分为两个部分,报文头(IS-IS Header)和变长字段部分(Variable Length Fields )。
- 其中IS-IS Header又可分为通用头部(PDU Common Header)和专用头部(PDU Specific Header)。对于所有PDU来说,通用报头都是相同的,但专用报头根据PDU类型不同而有所差别。
1.10 IS-IS通用头部详解
- 重要字段解释:
- Intradomain Routing Protocol Discriminator:域内路由选择协议鉴别符,固定为0x83。
- Length Indicator:IS-IS头部的长度(包括通用头部和专用头部),以Byte为单位。
- Version/Protocol ID Extension:版本/协议标识扩展,固定为0x01。
- System ID Length:NSAP地址或NET中System ID区域的长度。值为0时,表示System ID区域的长度为6Byte。
- R(Reserved):保留,固定为0。
- Version:固定为0x01。
- Max.Areas:支持的最大区域个数。设置为1~254的整数,表示该IS-IS进程实际所允许的最大区域地址数;设置为0,表示该IS-IS进程最大只支持3个区域地址数。
1.11 IS-IS报文类型概述
IS-IS的PDU有4种类型:IIH(IS-IS Hello),LSP( Link State PDU,链路状态报文),CSNP(Complete Sequence Number PDU,全序列号报文),PSNP(Partial Sequence Number PDU,部分序列号报文)。
- IIH:用于建立和维持邻接关系, 广播网络中的Level-1 IS-IS路由器使用Level-1 LAN IIH; 广播网络中的Level-2 IS-IS路由器使用Level-2 LAN IIH; 点到点网络中则使用P2P IIH。
- LSP:用于交换链路状态信息。LSP分为两种,Level-1 LSP、Level-2 LSP。
- SNP:通过描述全部或部分链路数据库中的LSP来同步各LSDB,从而维护LSDB的完整与同步。SNP包括CSNP和PSNP,进一步又可分为Level-1 CSNP、 Level-2 CSNP、 Level-1 PSNP和Level-2 PSNP。
1.12 IS-IS常见的TLV
TLV的含义是:类型(TYPE),长度(LENGTH),值(VALUE)。实际上是一个数据结构,这个结构包含了这三个字段,使用TLV结构构建报文的好处是灵活性和扩展性好。采用TLV使得报文的整体结构固定,增加新特性只需要增加新TLV即可,不需要改变整个报文的整体结构。
2. IS-IS工作原理
2.1 邻居关系建立
2.1.1 IS-IS邻居建立
IS-IS按如下原则建立邻接关系:
-
- 只有同一层次的相邻路由器才有可能成为邻接。
- 对于Level-1路由器来说,Area ID必须一致。
- 链路两端IS-IS接口的网络类型必须一致。
- 链路两端IS-IS接口的地址必须处于同一网段(默认情况下)。
由于IS-IS是直接运行在数据链路层上的协议,并且最早设计是给CLNP使用的,IS-IS邻接关系的形成与IP地址无关。但在实际的部署中,在IP网络上运行IS-IS时,需要检查对方的IP地址的。如果接口配置了从IP,那么只要双方有某个IP(主IP或者从IP)在同一网段,就能建立邻接,不一定要主IP相同。
通过将以太网接口模拟成点到点接口,可以建立点到点链路邻接关系,当链路两端IS-IS接口的地址不在同一网段时,如果配置接口对接收的Hello报文不作IP地址检查,也可以建立邻接关系。
- 对于点到点接口,可以配置接口忽略IP地址检查。
- 对于以太网接口,需要将以太网接口模拟成点到点接口,然后才可以配置接口忽略IP地址检查。
一般情况下,一个接口只需配置一个主IP地址,但在有些特殊情况下需要配置从IP地址。比如,一台路由器通过一个接口连接了一个物理网络,但该物理网络的计算机分别属于2个不同的网络,为了使路由器与物理网络中的所有计算机通信,就需要在该接口上配置一个主IP地址和一个从IP地址。路由器的每个三层接口可以配置多个IP地址,其中一个为主IP地址,其余为从IP地址,每个三层接口最多可配置31个从IP地址。
2.1.2 IIH
IIH报文用于建立和维持邻接关系,广播网络中的Level-1 IS-IS路由器使用Level-1 LAN IIH;广播网络中的Level-2 IS-IS路由器使用Level-2 LAN IIH;点到点网络中则使用P2P IIH。
2.1.3 广播网络中的邻接关系建立过程
两台运行IS-IS的路由器在交互协议报文实现路由功能之前必须首先建立邻接关系。在不同类型的网络上,IS-IS的邻接建立方式并不相同。在广播网络中,使用三次握手建立邻接关系。
注意:
- Level-1 IIH和Level-2 IIH发送的组播地址分别为01-80-C2-00-00-14、01-80-C2-00-00-15。
- Down:邻接关系的初始状态。
- Initial:收到IIH,但是报文中的邻接列表未包含路由器自身的System ID。
- UP:收到IIS,且邻接列表中包含路由器自身的System ID。
2.1.4 DIS与伪节点
在广播网络中,IS-IS需要在所有的路由器中选举一个路由器作为DIS(Designated Intermediate System)DIS用来创建和更新伪节点(Pseudonodes),并负责生成伪节点的LSP,用来描述这个网络上有哪些网络设备。伪节点是用来模拟广播网络的一个虚拟节点,并非真实的路由器。在IS-IS中,伪节点用DIS的System ID和Circuit ID(非0值)标识。
2.1.5 IS-IS中的DIS与OSPF中的DR
- Level-1和Level-2的DIS是分别选举的,用户可以为不同级别的DIS选举设置不同的优先级。
- DIS的选举规则如下:
- DIS优先级数值最大的被选为DIS。
- 如果优先级数值最大的路由器有多台,则其中MAC地址最大的路由器会成为DIS。
- DIS发送Hello PDU的时间间隔是普通路由器的1/3,这样可以确保DIS出现故障时能够被更快速地被发现。
- IS-IS中DIS与OSPF协议中DR(Designated Router)的区别:
- 在IS-IS广播网中,优先级为0的路由器也参与DIS的选举,而在OSPF中优先级为0的路由器则不参与DR的选举。
- 在IS-IS广播网中,当有新的路由器加入,并符合成为DIS的条件时,这个路由器会被选中成为新的DIS,原有的伪节点被删除。此更改会引起一组新的LSP泛洪。而在OSPF中,当一台新路由器加入后,即使它的DR优先级值最大,也不会立即成为该网段中的DR。
- 在IS-IS广播网中,同一网段上的同一级别的路由器之间都会形成邻接关系,包括所有的非DIS路由器之间也会形成邻接关系。而在OSPF中,路由器只与DR和BDR建立邻接关系。
2.1.6 点到点网络中的邻接关系建立过程
2.2 链路状态数据库同步
2.1.1 LSP( Link State PDU,链路状态报文)
IS-IS链路状态报文LSP用于交换链路状态信息。LSP分为两种:Level–1 LSP和Level–2 LSP。Level–1 LSP由Level-1路由器传送,Level–2 LSP由Level-2路由器传送,Level-1-2路由器则可传送以上两种LSP,两类LSP有相同的报文格式。
2.1.2 IS-IS的LSDB
- 伪节点ID:当该参数不为零时,表示该LSP为伪节点生成。
- 分片号:当IS-IS要发布的链路状态协议数据报文PDU(Protocol Data Unit)中的信息量太大时,IS-IS路由器将会生成多个LSP分片,用来携带更多的IS-IS信息。分片号用来区分不同的LSP分片。
2.1.3 查看非伪节点的LSP
2.1.4 查看伪节点LSP
在伪节点LSP中,只包含邻接信息而不包含路由信息。
2.1.5 CSNP(Complete Sequence Number PDU,全序列号报文)
CSNP包含该设备LSDB中所有的LSP摘要,路由器通过交互 CSNP来判断是否需要同步LSDB。
- 在广播网络上,CSNP由DIS定期发送(缺省的发送周期为10秒)。
- 在点到点网络上,CSNP只在第一次建立邻接关系时发送。
2.1.6 PSNP(Partial Sequence Number PDU,部分序列号报文)
PSNP只包含部分LSP的摘要信息(与CSNP不同):
- 当发现LSDB不同步时,PSNP来请求邻居发送新的LSP。
- 在点到的网络中,当收到LSP时,使用PSNP对收到的LSP进行确认。
2.1.7 广播地址中LSP的同步过程
广播网络中新加入路由器与DIS同步LSDB数据库的过程:
- 新加入的路由器R3首先发送IIH报文,与该广播域中的路由器建立邻接关系。建立邻接关系之后,R3等待LSP刷新定时器超时,然后将自己的LSP发往组播地址(Level-1:01-80-C2-00-00-14;Level-2:01-80-C2-00-00-15)。这样网络上所有的邻接都将收到该LSP。
- 该网段中的DIS会把收到R3的LSP加入到LSDB中,并等待CSNP报文定时器超时并发送CSNP报文。
- R3收到DIS发来的CSNP报文,对比自己的LSDB数据库,然后向DIS发送PSNP报文请求自己没有的LSP。
- DIS收到该PSNP报文请求后向R3发送对应的LSP进行LSDB的同步。
2.1.8 点到点网络中的LSP同步过程
点到点网络上LSDB数据库的同步过程:
- R1先与R2建立邻接关系。
- 建立邻接关系之后,R1与R2会先发送CSNP给对端设备。如果对端的LSDB与CSNP没有同步,则发送PSNP请求索取相应的LSP。
- 假设R2向R1索取相应的LSP。
- R1发送R2请求的LSP的同时启动LSP重传定时器,并等待R2发送的PSNP作为收到LSP的确认。
- 如果在接口LSP重传定时器超时后,R1没有收到R2发送的PSNP报文作为应答。
- 则R1重新发送该LSP。
- R2收到LSP后,发送PSNP进行确认。
2.1.9 LSP的处理机制
LSP产生的原因,IS-IS路由域内的所有路由器都会产生LSP,以下事件会触发一个新的LSP:
- 邻接Up或Down
- IS-IS相关接口Up或Down
- 引入的IP路由发生变化
- 区域间的IP路由发生变化
- 接口被赋了新的metric值
- 周期性更新(刷新间隔15min)
2.3 路由计算
2.3.1 Level-1路由器的路由计算
- R1是Level-1路由器,只维护Level-1 LSDB,该LSDB中包含同属一个区域的R2及R3以及R1自己产生的Level-1 LSP。
- R1根据LSDB中的Level-1 LSP计算出Area 49.0001内的拓扑,以及到达区域内各个网段的路由信息。
- R2及R3作为Area 49.0001内的Level-1-2路由器,会在它们向该区域下发的Level-1 LSP中设置ATT标志位,用于向区域内的Level-1路由器宣布可以通过自己到达其他区域。 R1作为Level-1路由器,会根据该ATT标志位,计算出指向R2或R3的默认路由。
2.3.2 Level-1路由器的次优路径的问题
缺省时, R1只能通过指向R2或R3的默认路由到达区域外部,但是R1距离R2和R3路由器的Cost值相等,那么当R1发送数据包到192.168.20.0/24时,就有可能选择路径2,导致出现次优路径。
2.3.3 路由渗透
缺省情况下,Level-1-2路由器不会将到达其他区域的路由通告本Level-1区域中,通过路由渗透,可以将区域间路由通过Leve-1-2路由器传递到Level-1区域,此时Leve-1路由器可以学习到其他区域的详细路由,从而计算出最优路径。
2.3.4 Level-1-2路由器的路由计算
- R2及R3都维护Level-1 LSDB,它们能够通过这些LSDB中的LSP计算出Area 49.0001的路由。
- R2及R3都维护Level-2 LSDB,它们能够通过这些LSDB中的LSP计算出Area 49.0002的路由。
- R2及R3将到达Area 49.0001的路由以Level-2 LSP的形式发送到Area 49.0002。
2.3.5 Level-2路由器的路由计算
R4及R5作为Level-2路由器,只会维护Level-2 LSDB,它们能够根据该LSDB计算出到达全网各个网段的路由。