IS-IS协议的路由计算过程与OSPF非常相似,只是在细节上有所不同。
OSPF的路由计算过程可参考以前的文章:OSPF(一)OSPF协议简介
邻居关系建立:
邻居关系建立主要是通过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网段,加快了网络收敛速度。
IS-IS目前只支持点对点(P2P)和广播多路访问网络(Broadcast Multiple Access)。
其他的网络中需要进行额外的配置才能支持,如:在帧中继等特殊环境下,可以通过创建子接口支持P2P的网络类型。
HELLO报文的作用是邻居发现,协商参数并建立邻居关系,后期充当保活报文。
IS-IS建立邻居关系和OSPF一样,通过hello报文的交互来完成。但是会根据场景分为三种类型的hello报文。
HELLO报文在IS-IS中叫做:IIH(IS-IS Hello)
在P2P网络中
使用P2P IIH(point to point IS-IS Hello)。但是其没有表示DIS(虚节点)的相关字段。
在广播多路访问网络中
广播网中的Level-1 IS-IS使用L1 LAN IIH(Level-1 LAN IS-IS Hello),目的组播MAC为:0180-c200-0014。
广播网中的Level-2 IS-IS使用L2 LAN IIH(Level-2 LAN IS-IS Hello),目的组播MAC为:0180-c200-0015。
IIH报文需要通过填充字段用于邻居两端协商发送报文的大小。
同样,在邻居建立关系的过程中,我们还是分P2P网络和广播多路访问网络来讲。
P2P网络
在P2P网络中,路由器建立邻居关系步骤非常简单,只需要进行两次的报文交互即可(两次握手),两次握手只要路由器收到对端发来的Hello报文,就单方面宣布邻居为up状态,建立邻居关系,不过容易存在单通风险。
在RFC3373中,P2P采用了三次握手的方式。通过三次发送P2P的IS-IS Hello PDU最终建立起邻居关系,与广播链路邻居关系的建立情况相同。
在广播链路上,使用LAN IIH报文执行三次握手建立邻居关系。
如下图:RTA发送IIH报文,报文中包含自己的系统ID,邻居状态为:null(不知道邻居是谁),RTB接收到了报文之后,发现RTA发送过来的报文里面没有自己的系统ID,RTB进入initialized(初始化状态),然后给RTA发送自己IIH报文,里面包含了自己的系统ID,并宣告邻居是RTA,RTA收到之后进入UP状态,并回复IIH报文,RTB收到之后进入UP状态,此时邻居关系建立完成。然后进行DIS选举。
只有收到邻居发过来的Hello PDU有自己的system ID才会up,排除了链路单通的风险。
DIS(Designated IS):指定中间系统。又叫虚节点
伪节点是指在广播网络中由DIS创建的虚拟路由器。
广播网络中邻居up后会选举DIS(虚节点),DIS的功能类似OSPF的DR(指定路由器)。
OSPF中DR的选举课参考DR与BDR选举
在广播网络,需要选举DIS,所以在邻居关系建立后,路由器会等待两个Hello报文间隔再进行DIS的选举。
选举依据
Hello报文中包含Priority 字段,Priority值最大的将被选举为该广播网的DIS。若优先级相同,接口MAC地址较大的被选举为DIS。
IS-IS中DIS发送Hello时间间隔默认为10/3秒,而其他非DIS路由器发送Hello间隔为10秒。
类比点 | ISIS-DIS | OSPF-DR |
---|---|---|
选举优先级 | 所有优先级都参与选举 | 0优先级不参与选举 |
选举等待时间 | 2个Hello报文间隔 | 40s |
备份 | 无 | 有(BDR) |
邻接关系 | 所有路由器互相都是邻接关系 | DRother之间是2-way关系 |
抢占性 | 会抢占 | 不会抢占 |
作用 | 周期发送CSNP,保障MA网络LSDB同步 | 主要为了减少LSA泛洪 |
注意:
选举等待时间:DIS选举时间只有两个HELLO报文间隔,时间短,所以不需要备份。而OSPF的DR选举间隔为40S,时间长,重新选举造成网络瘫痪时间多长,所以有BDR的存在。
TLV实际上是一个数据结构,这个结构包含了这三个字段:
类型(TYPE),长度(LENGTH),值(VALUE)
许多报文都采用TLV,使用TLV结构构建报文的好处是灵活性和扩展性好。采用TLV使得报文的整体结构固定,增加新特点只需要增加新TLV即可。不需要改变整个报文的整体结构。
网络拓扑结构和路由信息用TLV结构表现使得报文的灵活性和扩展性得到了极大的发挥。
IS-IS中链路状态信息的载体分为两类:
LSP PDU(Link State Protocol PDU):(PDU就是报文的意思)
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(只在广播链路存在,DIS发出)
SNP报文中又分两种:
CSNP(Complete Sequence Number PDU)包括LSDB中所有LSP的摘要信息,从而可以在相邻路由器间保持LSDB的同步。
CSNP可理解为OSPF中的DD报文,传递的是LSDB里所有的链路信息摘要
lPSNP(Partial Sequence Number PDU)包含部分LSDB中的LSP摘要信息,能够对LSP进行请求和确认。
PSNP类似于OSPF的LSR或LSAck报文用于请求和确认部分链路信息。
注意:以上协议报文都分为Level-1、Level-2两种,在MA网络中所有协议报文的目的MAC都是组地址:
Level-1地址:0180-c200-0014
Level-2地址:0180-c200-0015
可以结合OSPF链路状态信息的交互来理解。OSPF(一)OSPF协议简介
举例说明步骤:
A、B两个图书馆(RTA、RTB)建立了友好的合作关系(建立邻居),两个图书管商量着合作,A图书馆历史书较多,B图书馆小说较多。两家想要互相补充一下各自所缺的书籍。这时,A图书馆首先发送给B图书馆一份书籍清单,清单上包含了A图书馆所有的书籍名称(CSNP:摘要信息),告诉B,我图书馆所有的书都在这份清单上,你没有的向我拿我再给你寄过来实体书。图书馆B收到之后,列出了B没有的书,然后发送请求告诉图书馆A这些书是我没有的(PSNP:请求)。图书馆A知道之后,就按照B发送过来的清单拿来实体书,然后打包发送给图书馆B(LSP:全部信息),图书馆B收到实体书之后,非常的开心,发送了一份感谢信给图书馆A(PSNP:确认),但是由于某些原因,感谢信丢失了。图书馆A没有收到。过了一段时间之后(LSP重传定时器超时),图书馆A认为B没有收到A送出去的实体书,出于担心,A又重新寄了一份实体书过去(重新发送LSP),图书馆B又收到了一份实体书,再次很感谢,这时他也明白了上次的感谢信A应该是没有收到,于是重新发送了一份感谢信给A(重传PSNP:确认)
对应的OSPF中也可拿这个举例,原理不变,只是报文变了一下而已
正经步骤:
建立邻居关系之后,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同步交互过程:
举例说明步骤
A、B图书馆的合作越来越大,并确立了以图书馆B为老大的联盟(DIS)老大负责维护发送书籍清单等任务,这时C图书馆也加入了进来(MA网络)。这时图书馆A和B的图书数据库已经同步(LSDB同步),图书馆C加进来之后,为了表达诚意,直接给老成员A和B送了自己独有的实体书(LSP),老大B收到了书之后,将书籍加入到联盟的图书数据库中(将RTC的LSP信息加入到LSDB中),然后围为了联盟的共同稳定发展,老大定期(10s)在联盟内部发送书籍清单(CSNP),来保证三家图书馆的书籍都是全的。由于图书馆C是刚加入进来的,他还没有A、B的书籍,当收到老大B发送的书籍清单之后(CSNP),C看了清单,列举了C没有的书籍,然后给老大发送请求(PSNP),老大知道了之后,就给C寄出实体书籍(LSP:注意:这里的是伪节点LSP)
正经步骤
假设新加入的路由器RTC已经与RTB(DIS)和RTA建立了邻居关系。
建立邻居关系之后,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 的同步。
注意:lMA网络CSNP报文只由DIS组播发送,时间默认为10秒。
IS-IS的计算特点:
在本区域内路由器第一次启动的时候执行的是Full-SPF算法。
后续收到的LSP更新,如果是部分拓扑的变化执行的iSPF计算。
如果只是路由信息的变化,执行的就是PRC计算。
由于采用拓扑与网络分离的算法,路由收敛速度得到了加强。
ISIS路由计算的开销方式:
Narrow模式(设备默认模式开销都是10,手工配置接口开销取值范围为1~63)。
Wide模式(设备默认模式开销都是10,手工配置接口开销取值范围是1~16777215)。
进程下加入auto-cost enable
命令,Narrow模式和Wide模式都会参考接口带宽大小计算开销值,只 是参考准则有少许差异。