动态路由协议按照算法的不同可以分为两类:一类是基于链路状态(典型代表是OSPF、IS-IS),还有一类是距离矢量(典型代表是rip、bgp),和OSPF一样,IS-IS也是一种基于链路状态并使用最短路径优先算法进行路由计算的一种IGP协议。
本次博客主要是介绍ISIS协议原理以及配置。
历史起源
IS-IS(中间系统到中间系统,Intermediate system to intermediate system,意为“中间系统到中间系统”)
IS-IS最初是针对OSI七层模型去设计的路由协议,是国际化标准组织ISO为它的无连接网络协议CLNP(这里的CLNP可以类比TCP/IP五层协议栈里面的ip网络)设计的一种动态路由协议。但是由于CLNP网络现在已经不用了,为了能够让ISIS提供对IP的路由支持,IETF(国际互联网工程任务组)在RFC1195中对IS-IS进行了扩充和修改,使它能够同时应用在TCP/IP和OSI环境中,修订后的IS-IS协议被称为集成化的IS-IS。由于IS-IS的简便性及扩展性强的特点,目前在大型ISP(互联网服务提供商)的网络中被广泛地部署,ISIS工作在数据链路层,不仅支持CLNP网络,还支持IP网络,OSPF工作在IP层,且支持IP网络。
应用场景
网络可以根据不同的客户需求分成园区网和骨干网络,这两种网络的特点,以及采用的协议类型,如下图所示,
路由计算过程
ISIS路由计算的过程:先建立邻居关系,建立起邻居关系之后,进行链路信息交换,接着开始计算路由。
邻居关系建立:邻居关系建立主要是通过HELLO包交互并协商各种参数,包括电路类型(level-1/level-2),Hold time,网络类型,支持协议,区域号,系统ID,PDU长度,接口IP等。
链路信息交换: 与OSPF不同,ISIS交互链路状态的基本载体不是LSA(link state advertisement),而是LSP(link state PDU);交互的过程没有OSPF协议那样经历了多个阶段,主要是通过CSNP和PSNP两种协议报文来同步,请求以及确认链路状态信息(承载的是链路状态信息摘要),而链路状态信息的详细拓扑和路由信息是由LSP报文传递。
路由计算:SPF计算和OSPF基本一样的,但ISIS算法分离了拓扑结构和IP网段,加快了网络收敛速度。
地址结构
先根据比较熟悉的OSPF来类比ISIS 里面会用到的标识符,如下表所示,
TCP/IP协议栈 | IP协议 | IP地址 | OSPF | Area ID+Router ID |
OSI系统 | CLNP协议 | NSAP地址 | IS-IS | NET标识符 |
在OSI里面的NSAP地址可以类比IP地址,作用是差不多的,在OSPF协议里面,在配置的时候,需要划分区域,分配路由器ID,但是在ISIS里面,可以通过一个NET标识符来发挥划分区域和配置路由器id的作用。
首先来看一下NSAP地址的结构,如下图所示,
![](https://i-blog.csdnimg.cn/blog_migrate/113d2f897af2be8096e9c3524ad53e74.png)
路由器分类
HELLO报文
IS-IS支持的网络类型:
点对点网络类型(P2P)。
广播多路访问网络类型(Broadcast Multiple Access)。
在帧中继等特殊环境下,可以通过创建子接口支持P2P的网络类型。
邻接关系建立
在点到点链路上,邻接关系的建立分为两次握手和三次握手,ISO10589使用两次握手,RFC3373定义了P2P三次握手机制。
两次握手只要路由器收到对端发来的Hello报文,就单方面宣布邻居为up状态,建立邻居关系,不过容易存在单通风险。通过三次发送P2P的IS-IS Hello PDU最终建立起邻居关系,与广播链路邻居关系的建立情况相同。
在广播链路上,使用LAN IIH报文执行三次握手建立邻居关系,如下图所示,当收到邻居发送的Hello PDU报文里面没有自己的system ID的时候,状态机进入initialized。只有收到邻居发过来的Hello PDU有自己的system ID才会up,排除了链路单通的风险。广播网络中邻居up后会选举DIS(虚节点),DIS的功能类似OSPF的DR(指定路由器)。
DIS及DIS与DR的类比
在运行ISIS协议的网络里,在中间系统(路由器)里竞选出一个DIS(指定中间系统)的角色,和在运行OSPF协议的网络里会竞选出来的DR有些类似,在广播网络中,DIS会创建一个虚拟路由器,被称之为伪节点,如下图所示,
DIS的特点:在广播网络,需要选举DIS,所以在邻居关系建立后,路由器会等待两个Hello报文间隔再进行DIS的选举。Hello报文中包含Priority 字段,Priority值最大的将被选举为该广播网的DIS。若优先级相同,接口MAC地址较大的被选举为DIS。IS-IS中DIS发送Hello时间间隔默认为10/3秒,而其他非DIS路由器发送Hello间隔为10秒。
DIS与DR的类比:选举时优选级的比较,DIS的优先级为0也可以参与选举。OSPF中优先级为0不参与选举DR。选举的过程需要一定的时间,OSPF选举DR/BDR需要waiting time达40秒,过程也较为复杂,而ISIS选举DIS等待两个Hello报文间隔就可以,简单快捷,DR和DIS的类比如下表所示。
类比点 | ISIS-DIS | OSPF-DR |
选举优先级 | 所有优先级都参与选举 | 0优先级不参与选举 |
选举等待时间 | 2个Hello报文间隔 | 40s |
备份 | 无 | 有(BDR) |
邻接关系 | 所有路由器互相都是邻接关系 | DRother之间是2-way关系 |
抢占性 | 会抢占 | 不会抢占 |
作用 | 周期发送CSNP,保障MA网络LSDB同步 | 主要为了减少LSA泛洪 |
![](https://i-blog.csdnimg.cn/blog_migrate/f627d9f245f91097ac909f2c928257df.png)
在ISIS里面用来承载链路状态信息的是LSP(有点类似OSPF里面LSA的作用),里面包含了拓扑结构和网络号。其中,Level-1 LSP由Level-1 路由器传送;Level-2 LSP由Level-2 路由器传送;Level-1-2 路由器则可传送以上两种LSP。
LSP 报文中包含了两个重要字段是ATT字段、IS-Type字段。其中ATT字段用于标识该路由是L1/L2路由器发送的,IS-Type用来指明生成此LSP的IS-IS类型是Level-1还是Level-2 IS-IS。LSP的刷新间隔为15分钟;老化时间为20分钟。但是一条LSP的老化除了要等待20分钟外,还要等待60秒的零老化时延;LSP重传时间为5秒。
实节点LSP
伪节点LSP(只在广播链路存在)
除了LSP用来承载链路状态信息以外,还有SNP PDU——用于维护LSDB 的完整与同步,且为摘要信息。
SNP PDU(Sequence Number PDU):
CSNP(Complete Sequence Number PDU)包括LSDB中所有LSP的摘要信息,从而可以在相邻路由器间保持LSDB的同步。
PSNP(Partial Sequence Number PDU)包含部分LSDB中的LSP摘要信息,能够对LSP进行请求和确认。
CSNP 类似于OSPF的DD报文,传递的是LSDB里所有链路信息摘要。PSNP类似于OSPF的LSR或LSAck报文用于请求和确认部分链路信息.
注意:协议报文都分为Level-1和Level-2两种,在MA网络中所有协议报文的目的MAC都是组地址:
Level-1地址为:0180-C200-0014
Level-2地址为:0180-C200-0015
链路状态信息的交互
P2P网络LSDB同步过程,如下图所示,
![](https://i-blog.csdnimg.cn/blog_migrate/9f0110844b541d300d915c4f5a34bb47.png)
建立邻居关系之后,RTA与RTB会先发送CSNP给对端设备。如果对端的LSDB与CSNP没有同步,则发送PSNP请求索取相应的LSP。
假定RTB向RTA索取相应的LSP,此时向RTA发送PSNP。RTA发送RTB请求的LSP的同时启动LSP重传定时器,并等待RTB发送PSNP作为收到LSP的确认。如果在接口LSP重传定时器超时后,RTA还没有收到RTB发送的PSNP报文作为应答,则重新发送该LSP直至收到RTB的PSNP报文作为确认。
注意:P2P网络CSNP报文只发送一次,邻居建立后立即发送。
MA网络中新加入的路由器与DIS 的LSDB同步交互过程,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/0b2254650996c154f0ce2d41eeaac7f6.png)
建立邻居关系之后,RTC将自己的LSP发往组播地址(Level-1:01-80-C2-00-00-14;Level-2:01-80-C2-00-00-15)。这样网络上所有的邻居都将收到该LSP。
该网段中的DIS会把收到RTC的LSP加入到LSDB中,并等待CSNP报文定时器超时(DIS每隔10秒发送CSNP报文)并发送CSNP 报文,进行该网络内的LSDB同步。RTC收到DIS发来的CSNP报文,对比自己的LSDB数据库,然后向DIS发送PSNP报文请求自己没有的LSP(如RTA和RTB的LSP就没有)。
RTB作为DIS收到该PSNP报文请求后向RTC发送对应的LSP进行LSDB 的同步。
注意:在MA网络CSNP报文只由DIS组播发送,时间默认为10秒。
路由算法
在OSPF中,每个链路只属于一个区域;而在IS-IS中,每个链路可以属于不同的区域;在IS-IS中,单个区域没有物理的骨干与非骨干区域的概念;而在OSPF中,Area0被定义为骨干区域;在IS-IS中,Level-1和Level-2级别的路由器分别采用SPF算法,分别生成最短路径树SPT;在OSPF中,只有在同一个区域内才使用SPF算法,区域之间的路由需要通过骨干区域来转发。
Level-1路由器的路由特点:
只拥有Level-1的链路状态数据库。
其链路状态数据库中只有本区域路由器LSP。
其路由表里没有其他区域的路由信息。
其路由表里都有一条默认路由,下一条是指向到Level-1-2路由器。
Level-2路由器的路由特点:
Level-2路由器只有Level-2的链路状态数据库。
其LSDB中有骨干区域路由器的LSP,但是没有Level-1路由器产生的LSP。
路由表里面有整个网络的路由信息。
Level-1-2路由器的路由特点:
Level-1-2路由器同时拥有Level-2和Level-1的链路状态数据库。
Level-1数据库包含本区域的LSP,Level-2数据库包含骨干区域LSP。
在自己产生的Level-1的LSP中设置了ATT比特位为1。
路由表里面有整个网络的路由信息。
如上图所示,Level 1路由器和Level 1-2路由器处于同一个area49.0001区域,level 2路由器处在 area 49.0002,很明显不在同一个区域里,但是level 1-2路由器和level 2路由器共同组成了骨干区域。
当区域49.0001访问区域49.0002的时候,L1/2路由器RTA产生ATT置位为1的LSP,L1路由器收到ATT为1的LSP会产生下一跳指向L1/2路由器的默认路由
当区域49.0002访问区域49.0001的时候,L1/2路由器RTA会把区域49.0001的明细路由以叶子节点方式挂载在L2级别的LSP上面并处在Level-2的LSDB中,L2路由器通过自己SPF计算得出访问Area49.0001的明细路由
配置:
实验要求:
如图所示,客户网络所有路由器路由协议要求启用IS-IS,使全网路由可达。全部IS-IS进程号统一为100,其中AR1在Area49.0001区域为DIS,AR4与AR5之间要求采用P2P网络类型,AR5引入直连链路192.168.X.X,要求AR1访问Area49.0002走最优路径。根据上述描述,进行正确配置,使网络路由达到客户需求。
实验步骤:
1.在各个路由器上配置ISIS 100,并配置好规定的NET地址编号,
2.在接口下使能isis 100
3.修改链路类型
4.更改接口开销值,进行最优选路
5.AR1的链路接口修改其DIS的优先级为最高,让其成为DIS。
6.进行路由渗透:如果一个level-1区域有两个以上Level-1-2路由器,则区域内Level-1路由器访问其他区域会选择最近的Level-1-2路由器,但是计算的开销值只计算本区域内的,如果最近的Level-1-2路由器在Level-2区域到达目的网络的开销相对比较大,实际会造成业务次优路径。在这种场景下需要做路由渗透操作,把Level-2区域的明细路由(包括开销)引入到Level-1区域,由Level-1路由器自行计算选择最优的路径访问跨区域网络。
7.进入路由器AR5引入直连链路。
sysname AR1
isis 100 配置ISIS 100
is-level level-1 修改路由器的类型为Leve1 1,如果不做修改则默认为Level 1-2
network-entity 49.0001.0000.0000.0001.00 配置规定的NET地址编号,
#
interface GigabitEthernet0/0/0
ip address 10.0.123.1 255.255.255.0
isis enable 100 在接口下使能isis 100
isis dis-priority 127 配置接口的isis优先级最高,让它成为DIS
其他路由器上的配置如下:(只展示相关配置)
<AR2>
#
sysname AR2
#
isis 100
network-entity 49.0001.0000.0000.0002.00
import-route isis level-2 into level-1 在Level 1中注入Level 2的路由信息,让level 1的路由器能够了解到去往别的网段的明细信息
#
interface GigabitEthernet0/0/0
ip address 10.0.123.2 255.255.255.0
isis enable 100
#
interface GigabitEthernet0/0/1
ip address 10.0.24.2 255.255.255.0
isis enable 100
在没有注入level 2的路由信息的时候,isis的路由表如下图所示
通过缺省路由去访问未知网络,包括访问ISIS里面的Level 2的路由表
注入level 2的路由信息之后,isis路由表就变成了如下图所示,
就有了明细路由,这是注入路由的好处。
<AR3>
sysname AR3
#
isis 100
network-entity 49.0001.0000.0000.0003.00
import-route isis level-2 into level-1 同样的还是注入路由
#
interface Serial4/0/0
link-protocol ppp
ip address 10.0.34.3 255.255.255.0
isis enable 100
isis cost 15 修改开销值,选择最优的路径
#
interface GigabitEthernet0/0/0
ip address 10.0.123.3 255.255.255.0
isis enable 100
<AR4>
#
sysname AR4
#
isis 100
is-level level-2
network-entity 49.0002.0000.0000.0004.00
#
interface Serial4/0/0
link-protocol ppp
ip address 10.0.34.4 255.255.255.0
isis enable 100
#
interface GigabitEthernet0/0/0
ip address 10.0.24.4 255.255.255.0
isis enable 100
#
interface GigabitEthernet0/0/1
ip address 10.0.45.4 255.255.255.0
isis enable 100
isis circuit-type p2p 修改链路类型为点到点
#
<AR5>
#
sysname AR5
#
isis 100
is-level level-2
network-entity 49.0002.0000.0000.0005.00
import-route direct 引入直连路由
#
interface GigabitEthernet0/0/0
ip address 10.0.45.5 255.255.255.0
isis enable 100
isis circuit-type p2p
#
interface LoopBack0
ip address 192.168.25.1 255.255.255.0
#
interface LoopBack1
ip address 192.168.15.1 255.255.255.0