前言
ISIS是国际标准化组织ISO为他的网络层协议CLNP设计的一个动态路由协议,最初是用在OSI七层网络模型架构之中,而后为了适应TCP/IP网络架构对IS-IS进行的扩充和修改,使得IS-IS协议能同时适应TCP/IP和OSI的网络架构,修订后的IS-IS被称为集成化IS-IS,我们后续说的IS-IS都指的是集成化的IS-IS。
和OSPF一样,IS-IS也是基于链路状态使用最短路径算法进行路由计算的一种IGP协议,因此我们不可避免的将OSPF和IS-IS产生比较。这两者最大的不同或者说特点就是OSPF适用于园区网,或者说是局域网。而IS-IS更使用于骨干网,或者说是广域网。当然你说局域网能用IS-IS嘛?肯定是可以的,同样广域网或者说骨干网也同样可以使用OSPF,但是可以用不代表合适,那么怎么使用OSPF和ISIS才合适呢我们来接着往下看。
ISIS工作原理
IS-IS的工作过程与我们的OSPF很相似,如下图所示:
同样也是建立邻居关系,然后同步各自的一个链路信息数据库,根据数据库里的信息通过SFP算法计算出路由,然后填入我们的IP路由表中。
由于我们的IS-IS是基于OSI模型设计的,因此IS-IS配置时得需要OSI的网络层地址结构中的NSAP地址
NSAP地址
我们上图也用了一张表格来表示IS-IS与OSPF大体上的区别,虽然都是路由协议,不过ISIS基于OSI架构所设计,对应了我们TCP/IP中的OSPF路由协议,而同样的OSPF使用的是TCP/IP中的IP协议,而IS-IS使用的却是OSI中的CLNP协议,这里的CLNP类似于IP协议,是属于OSI架构中的网络层协议,而IP协议使用的IP地址在OSI中也有对应的NSAP地址。所以我们在学习ISIS之前先简单来看下NSAP地址的结构。
整个NSAP地址的结构可以大体上分为两部分:
IDP(类似IP地址中的网络号) | AFI | 表示地址分配机构和地址的格式,需要付费使用49为私有 |
---|---|---|
IDI | 用来标识域 | |
DSP(类似IP地址中的子网号和主机号) | High Order DSP | 用来分割区域 |
System ID | 用来标识区域中的设备 | |
SEL | 类似协议标识符,不同协议对应不同的SEL |
而在我们以太网环境中使用ISIS更多的是使用的NET类型NSAP,所谓的NET类型指的是NSAP的SEL字段为00,如:
其中AFI+IDI+High Order DSP组成了Area ID,类似我们OSPF中的区域,而System ID就类似我们OSPF中的router ID用来标识设备在ISIS中的身份,最后的SEL默认为00.
一个设备最多可以配置三个区域地址(area ID)
在实际应用中,一般使用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。重新组合 的 1680.1000.1001 就是 System ID。
实际 System ID 的指定可以有不同的方法,但要保证能够唯一标识主机或路由器。
路由器的分类
ISIS有三种路由器类似我们OSPF中的IR,ABR,ASBR
Level-1路由器 | 只能创建Level-1的LSDB |
---|---|
Level-2路由器 | 只能创建Level-2的LSDB |
Level-1-2路由器 | 配置ISIS时默认使用的路由器类型,能同时创建Level-1和Level-2的LSDB |
Level-1类似我么OSPF中的IR,只维护本区域内的LSDB,它只与属于同一区域的 Level-1 和 Level-1-2 路由器形成邻居关系,想要去往其他区域就得通过我们的Level-1-2,Level-1-2类似我们OSFP中的ABR,作为区域间访问的关键。Level-2类似我们OSPF中骨干网络中的IR,不同的是在ISIS中给这类设备新定义一个类型Level-2用作传输其他区域的路由信息,它可以与同一或者不同区域的 Level-2 路由器或者其它区 域的 Level-1-2 路由器形成邻居关系,Level-2维护一个Level-2的LSDB包含了区域间的路由信息,同时属于 Level-1 和 Level-2 的路由器称为 Level-1-2 路由器,它可以与同一区域的 Level-1 和 Level-1-2 路由器形成 Level-1 邻居关系,也可以与其他区域的 Level-2 和 Level-1-2 路由器形 成 Level-2 的邻居关系。Level-1-2路由器维护两个LSDB,Level-1的LSDB用于区域内路由,Level-2的LSDB用于区域间路由。
IS-IS支持的网络类型
广播链路 | 以太网 |
---|---|
点到点链路 | PPP、HDLC等 |
而我们OSPF支持的网络类型有P2P,P2MP,NBMA,广播,从这一点看出我们的OSPF支持的网络类型复杂,而ISIS支持的网络类型偏少。
ISIS的报文类型
ISIS有HELLO PDU、LSA PDU和 SNP PDU三种报文类型。在ISIS中链路状态信息被称为LSP,而在OSPF中链路状态信息被称为LSA。
HELLO PDU | IIH(IS-to-IS Hello PDUs) | 用于建立和维持邻居关系,类似OSPF中的HELLO报文 |
---|---|---|
LSP PDU | LSP(Link State PDUs) | 链路状态信息,类似OSPF中的LSU报文 |
SNP PDU | SNP(Sequence Number PDUs) | 通过描述全部或部分数据库中的LSP来同步LSDB,SNP包括了CSNP和PSNP。CSNP类似OSPF中的DD报文,PSNP类似OSPF中的LSR,LSAck的集合。 |
HELLO报文根据不同的网络类型,格式也不同
ISIS邻居关系的建立
在邻居的建立中要遵循下列规则:
1、只有同一层次的相邻路由器才有可能成为邻居。
2、对于 Level-1 路由器来说,区域号必须一致。
3、链路两端 IS-IS 接口的网络类型必须一致。
在ISIS中邻居关系的建立按网络环境来区分
在P2P网络环境中ISIS邻居建立可以使用两次握手和三次握手
两次握手只要路由器收到对端发来的Hello报文,就单方面宣布邻居为up状态,建立邻居关系,不过容易存在单通风险。通过三次发送P2P的IS-IS Hello PDU最终建立起邻居关系,与广播链路邻居关系的建立情况相同。
三次握手跟我们的OSPF的建立邻居关系类似,当设备收到对方发来的HELLO报文发现邻居字段中没有自己的ID,那么设备只进入initialized状态,只有收到对端发来的HELLO报文中邻居字段有自己的ID时才会进入UP状态,以防止链路单通的情况。
MA网络环境中必须使用三次握手建立邻居关系,建立过程与P2P三次握手类似。
DIS的选举
当建立完邻居关系后,可以进行DIS的选举,DIS类似我们OSPF中的DR
DIS是指指定中间系统(Designated IS),伪节点指的是在广播网络中由DIS创建的虚拟路由器。
在广播网络中建立完邻居关系后就开始选定DIS,路由器会先等待两个 Hello 报文间隔, 再进行 DIS 的选举。Hello 报文中包含 Priority 字段,Priority 值最大的将被选举为该广播网的 DIS。若优先级相同,接口 MAC 地址较大的被选举为 DIS。
ISIS的LSP交互过程
LSP产生的原因
ISIS域内的所有路由器都会产生LSP,当网络情况发生变化时会触发新的LSP
所谓的网络情况发生变化有一下几种:
1.邻居up或者down
2.相关接口的up或者down
3.引入的IP路由发生变化
4.区域间的IP路由发生变化
5.接口被赋了新的metric值
6.周期性的更新
当路由器收到邻居发来的更新LSP会将新的LSP放入自己的LSDB中并标记为flooding,然后泛洪该新的LSP到其他的邻居,其他邻居也同样操作。
广播网络中ISIS同步LSDB的过程
建立邻居关系之后,RouterC 等待 LSP 刷新定时器超时,然后将自己的 LSP 发往组播地址 (Level-1:01-80-C2-00-00-14;Level-2:01-80-C2-00-00-15)。这样网络上所有的邻居都将 收到该 LSP。该网段中的 DIS 会把收到 RouterC 的 LSP 加入到 LSDB 中,并等待 CSNP 报文定时器超时 并发送 CSNP 报文,进行该网络内的 LSDB 同步。 RouterC 收到 DIS 发来的 CSNP 报文,对比自己的 LSDB 数据库,然后向 DIS 发送 PSNP 报 文请求自己没有的 LSP。DIS 收到该 PSNP 报文请求后向 RouterC 发送对应的 LSP 进行 LSDB 的同步。
P2P网络中的LSDB同步
当邻居关系建立后,RTA与RTB会立刻发送CSNP给对方,如果发现有没同步的LSP条目则发起PSNP请求,而对端则回应LSP,收到LSP更新后要回PSNP作为收到LSP的回应,RTA在发送LSP时会启动重传定时器,一旦定时器归零后没收到PSNP回应则会重新发送LSP并重新设定定时器。知道收到对端的PSNP回应。
ISIS路由计算的方式
ISIS路由计算的方式与OSPF类似,在区域内的LSDB同步完成后,以设备自己为根生成全网的拓扑结构,然后通过路由信息计算最短的路径到达区域内其他设备。默认跨越每个节点的开销为10,可修改。
ISIS路由计算的开销方式有两种:
Narrow | 设备默认模式开销都是10,手工配置接口开销取值范围为1~63 |
---|---|
Wide | 设备默认模式开销都是10,手工配置接口开销取值范围是1~16777215 |
在ISIS进程下加入auto-cost enable命令,Narrow模式和Wide模式都会参考接口带宽大小计算开销值,只是参考准则有少许差异。
ISIS的计算特点:
在本区域内路由器第一次启动时执行full-SPF算法,后续收到的LSP更新,如果是部分拓扑的变化就执行iSPF算法,iSPF算法:除了第一次计算时需要计算全部节点外,每次只计算受到影响的节点,而最后生成的最短路径树SPT与原来的算法所计算的结果相同,大大降低了CPU的占用率,提高了网络收敛速度。而如果只是路由信息的变化,就执行PRC算法,PRC的原理与I-SPF相同,都是只对发生变化的路由进行重新计算。不同的是,PRC不需要计算节点路径,而是根据I-SPF算出来的SPT来更新路由。采用了局部更新的算法方式使得我们ISIS在收敛速度上更快于我们的OSPF。
ISIS区域的划分
与我们的OSPF类似,ISIS也划分了骨干区域与非骨干区域。但不同的是OSPF对区域的划分是针对接口的。也就是在OSPF中一个设备即可以属于骨干区域又可以属于非骨干区域,但是在ISIS中却不同,ISIS对区域的划分是针对设备本身的,一个设备仅只属于一个区域。
一个简单的ISIS区域如下图所示:
L2路由器处于骨干区域,而L1处于非骨干区域,同时L1/2也处于了非骨干区域,而图中的虚线圈起来的源表示L2与L1/2共同组成了逻辑上的骨干区域。如下图所示
在这个拓扑中,Level-2 级别的路由器没有在同一个区 域,而是分别属于不同的区域。此时所有物理连续的 Level-1-2 和 Level-2 路由器就构成了 IS-IS 的 骨干区域。
因此我们可以总结OSPF与ISIS在区域上的不通点:1.在OSPF中每个接口属于一个区域,而在ISIS中每个设备属于一个区域
2.在OSPF中area 0被定义为骨干区域,而在ISIS中单个区域没有骨干与非骨干的概念。所有L2与L1/2设备组成的区域即为骨干区域
3.在 IS-IS中,Level-1 和 Level-2 级别的路由都采用 SPF算法,分别生成最短路径树 SPT(Shortest Path Tree);而在 OSPF 中,只有在同一个区域内才使用 SPF 算法,区域之间的路由需要通 过骨干区域来转发。
OSPF与ISIS的差异性:
差异性 | IS-IS | OSPF |
---|---|---|
网络类型 | 少 | 多 |
开销方式 | 复杂 | 简便 |
区域类型 | 少 | 多 |
路由报文类型 | 简单 | 多样 |
路由收敛速度 | 很快 | 快 |
扩展性 | 强 | 一般 |
路由负载能力 | 超强 | 强 |
OSPF与ISIS术语对照表:
缩略语 | OSI术语 | IETF术语 |
---|---|---|
IS | Intermediate System | Router |
ES | End System | Host |
DIS | Designated Intermediate System | OSPF中的DR |
SysID | System ID | OSPF中的Router ID |
LSP | Link State PDU | OSPF中的LSA |
IIH | IS-IS Hello PDU | OSPF中的Hello报文 |
PSNP | Partial Sequence Number PDU | OSPF中的LSR或LSAck报文 |
CSNP | Complete Sequence Number PDU | OSPF中的DD报文 |