HCNP Routing&Switching之IS-IS邻居建立、LSDB同步、拓扑计算和路由形成

  前文我们了解了IS-IS的报文结构和类型相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15260670.html;今天我们来聊一聊IS-IS建立邻居、同步LSDB数据库和拓扑计算及路由形成相关话题;

  IS-IS动态路由协议的工作流程和OSPF工作流程大致一样;都是先发送Hello包,通过hello包建立邻居,在邻居建立完成以后,同步LSDB数据库、计算拓扑和路由;细微的差别在于IS-IS整个建立邻居的过程没有OSPF那么复杂,相对来说IS-IS更为简单,所以IS-IS建立邻居时,速度要比OSPF快很多;其次在同步LSDB数据时,对于IS-IS来说,它没有什么特殊区域,所以IS-IS中同步数据库就发送CSNP、PSNP和LSP这三种包就能把LSDB数据库同步完成;没有OSPF里有123457类LSA复杂;由于采用拓扑与网络分离的算法,路由收敛速度较快;

  IS-IS邻居建立过程

  点到点环境邻居建立过程

  提示:在早期ISO10589标准中,点到点网络环境中,IS-IS建立邻居只需要两次握手,即只要收到对方发送的Hello包,那么对应路由器就会认为对方是自己的邻居;对应邻居状态就会变为up;其实两次握手建立邻居不是很精准,比如A可以向B发送hello包,那么B收到A的hello包以后,对应就会把A当作B的邻居,但是B不能向A发送hello包,同时A也收不到B发送的Hello包,此时就产生了单向邻居;所以为了解决这样的问题,在RFC3373定义P2P三次握手机制;三次握手的机制和OSPF建立邻居的过程一样,只要在对应hello包里看到邻居字段是自己,对应路由器才认为对方才是和自己是邻居;

  提示:在邻居建立初期,RTA发送的hello包里,邻居的字段为空,因为此时RTA没有任何邻居;当RTB收到RTA的hello包以后,对应RTB就会发送hello包,里面邻居字段会置为RTA的mac,对应邻居状态变为init状态,表示我有一个邻居是RTA;此时RTA收到RTB发送的hello包以后,看到里面邻居字段是自己,此时RTA和RTB建立邻居,其邻居状态为up;然后RTA会再次发送hello包,此时的hello包里邻居字段会置为RTB的mac,表示我有一个邻居是RTB,此时RTB收到RTA发送的hello包,它会和RTA建立邻居,并且对应邻居状态为up;经过三次数据包的交互,最终RTA和RTB建立邻居且邻居状态为up状态;对于广播类型网络的邻居关系必须是三次握手;当邻居建立完成以后,后续就是选举DIS(伪节点)类似ospf中的DR;选举DIS会持续两个hello的时间间隔;

  IS-IS邻居hello报文

  提示:IS-IS目前只支持点到点和广播类型网络;对于点到点网络类型,对应hello包类型为p2p IIH,如果在对应接口为PPP封装的点到点环境中,hello包发送没有用到mac地址,其原因是接口为ppp封装的二层不用mac地址;对于接口类型broadcast,在对应接口下把isis链路修改为p2p网络类型环境中,对应hello包目标mac是一个组播mac地址,其地址为09:00:2b:00:00:05;对于广播类型网络中,hello包的类型有两种,分别是L1 LAN IIH 和L2 LAN IIH;对于L1的hello包,其组播mac地址为01:80:C2:00:00:14;L2的hello包,其组播mac地址为01:80:C2:00:00:14;

  实验:如下拓扑,配置isis

  R1的配置

sys
sys R1
int g0/0/0
ip add 12.0.0.1 24

isis 1
net 20.0000.0000.0001.00
is-le level-1
int g0/0/0
isis en 1
isis circuit-type p2p
View Code

  R2的配置

sys
sys R2
int g0/0/0
ip add 12.0.0.2 24
isis 1
net 20.0000.0000.0002.00
is-le level-1
int g0/0/0
isis en 1
isis circuit-type p2p
View Code

  在R1或R2上抓包,看看对应hello包类型以及对应hello包发送的目标mac地址是多少?

  提示:可以看到链路类型为p2p网络环境中,对应hello包类型为P2P HELLO,对应hello包发送的目标mac地址为09:00:2b:00:00:05;

  更改R1链路类型为broadcast

  提示:接口为broadcast类型默认链路类型为广播网络,所以我们直接删除更改链路为p2p的配置即可;可以看到当我们把R1的更改链路为p2p的配置删除以后,对应R1和R2的邻居就down了;原因是此时R1和R2发送的hello包类型不同,hello包类型不同是不能建立邻居的;

  在R1上抓包,看看此时R1发送的hello包类型以及目标mac地址?

  提示:可以看到R1发送的hello包类型为L1 hello,因为R1此时的路由器类型为L1;对应R2还是发送的P2P hello,所以R1和R2此时hello包类型不同,不能建立邻居关系;对应R1发送hello包的目标mac地址为01:80:C2:00:00:14;

  更改R1的路由器类型为L2,看看对应hello包类型和目标mac会变成什么?

  在R1上抓包,看看对应hello包类型和目标mac地址

  提示:可以看到此时R1发送的hello包类型为L2 HELLO,对应目标mac为01:80:C2:00:00:15;

  更改R1路由器类型为L1-2,看看对应hello包的类型以及目标mac地址

  提示:华为路由器默认路由器类型为L1-2,所以我们配置路由器类型为L1-2在对应进程下是看不到配置,一般情况看不我们配置的内容,表示配置的配置是默认配置;

  在R1上抓包,看看对应R1会这样发送hello包?对应目标mac会是多少呢?

  提示:更改R1路由器类型为L1-2以后,对应R1会同时发送L1 和L2的hello包,对应L1类型hello包的目标mac地址为01:80:C2:00:00:14,对应L2类型的hello包目标mac地址为01:80:C2:00:00:15;

  更改R2的链路类型为broadcast,看看和R1是否能建立邻居?

  验证:在R2上查看邻居关系

  提示:可以看到,此时R2和R1建立起L1类型邻居;

  抓包查看对应邻居建立过程

  提示:可以看到在开始R2发送的hello包和R1发送的hello里对应都没有邻居字段,表示邻居为空;后续当R1收到R2发送的L1 hello包以后,对应R1再次发送的hello包里就有了邻居字段,对应值为R2的mac地址;当R2收到R1发送邻居是自己的hello包以后,对应R2发送的hello包,对应邻居字段信息就置为R1的mac,此时R1收到R2发送hello包里看到对应邻居是自己,所以R1和R2建立起L1的邻居,并且对应邻居状态都为Up;这里需要注意一点,邻居字段只有在广播网络类型的环境中才有的字段,p2p环境中是没有邻居字段的,抓包看不到;

  IS-IS邻居建立条件

  1、只有同一层次的相邻路由器才有可能成为邻居;所谓同一层次是指L1和L1是同一层次;L2和L2是同一层次;L1-2和L1-2是一个层次;不同层次出L1-2以外,L1和L2是不能建立邻居;

  2、对于L1的路由器来说,区域号必须一致;即必须在同一个区域的L1或L1-2的路由器才能建立L1类型的邻居;

  3、链路两端IS-IS接口的网络类型必须一致;这个我们在上面的实验中也看到了,对应接口网络类型不一致,对应hello包类型就不一致,hello包类型不一致,对应邻居就建立不起来;

  4、链路两端IS-IS接口的地址必须处于同一网段;这个要求只是针对广播网络环境,对于P2P网络环境没有要求,但一般情况下不管在广播网络环境还是p2p网络环境,建议接口地址都配置为同一网段;

  IS-IS同步LSDB数据库

  P2P网络环境LSDB同步过程

  提示:在P2P链路上,链锯建立完成以后,对应就是同步LSDB数据库;首先RTA或RTB都会发送一条CSNP包,这个包的主要作用是描述对应路由器上的路由信息,类似OSPF里的DD包(数据库摘要信息);对应数据库收到对端发送的csnp包以后,就会和自身LSDB进行对比,如果对应CSNP包里的描述和自己的LSDB一样,此时RTB或RTA不会发送psnp,psnp类似ospf里的LSR和LSACK的作用;如果对应和自己LSDB数据不一样,此时RTA或RTB就会像对放发送PSNP,意思就是告诉对方把自己没有的链路状况发送过来;当对方收到对应路由器发送的PSNP包以后,对应路由器会发送LSP,LSP就类似ospf里的LSU,此时发送LSP包的路由器就会等待对方发送PSNP包来确认,如果在5秒钟对应路由器没有收到PSNP包,此时对应路由器会认为对方没有收到它发送的LSP,此时原发送LSP路由器会重新向对应路由器发送LSP,直到收到对应路由器回应psnp包;在点到点的网络中CSNP报文只会发送一次,即邻居建立后立即发送,后续不会再发送CSNP,只会发送LSP和PSNP;如下

  提示:可以看到CSNP包在点到点网络中,只有在邻居建立以后发送一次,后续就没有CSNP包;

  广播网络环境LSDB同步过程

  提示:在广播网络环境中,首先个路由器会发送LSP包向DIS请求CSNP包;DIS收到各路由器的LSP包以后,会发送CSNP包,对应各路由器收到CSNP包以后,会对应自己的LSDB数据库,然后根据差别请求发送PSNP包进行向dis请求差别部分链路状态信息;DIS收到PSNP包以后,发送LSP包给对应路由器;当所有路由器都同步网LSDB数据库以后,dis会周期性的发送CSNP,默认时间是10秒;

  实验:如下拓扑,配置IS-IS

  R1的配置

sys
sys R1
int g0/0/0
ip add 172.16.11.1 24
int lo 1
ip add 1.1.1.1 32

isis 1
net 11.0000.0000.0001.00
is-le level-1

int g0/0/0
isis en 1
int lo 1
isis en 1
View Code

  R2的配置

sys
sys R2
int g0/0/0
ip add 172.16.11.2 24
int lo 1
ip add 2.2.2.2 32

isis 1
net 11.0000.0000.0002.00
is-le level-1

int g0/0/0
isis en 1
int lo 1
isis en 1
View Code

  R3的配置

sys
sys R3
int g0/0/0
ip add 172.16.11.3 24
int lo 1
ip add 3.3.3.3 32

isis 1
net 11.0000.0000.0003.00
is-le level-1

int g0/0/0
isis en 1
int lo 1
isis en 1
View Code

  在R1或R2或R3上抓包,看看对应LSDB同步过程

 

  提示:我们在R1的g0/0/0接口抓包,首先看到各路由器先各自发送自己的更新LSP包,随后R3发送了一条CSNP包(从这里可以知道对应dis是R3的g0/0/0口),随后再是由R2发送PSNP包向R3请求R1和R3上的链路状态;随后R3发送相应链路状态的LSP包给R2;对应R3发送R1的LSP包里可以看到对应ip地址为1.1.1.1;对应R3发送R3的LSP包里可以看到对应ip地址为3.3.3.3;通过上述过程R2就把R1和R3的LSDB同步到自己的LSDB数据库中,后续就根据同步后的LSDB计算拓扑和路由;

  验证:在R2上查看lsdb数据,看看对应是否同步了R1和R3上的链路状态信息?

  提示:可以看到对应R2的LSDB中同步了R1和R3的相关LSP;

  验证:在R3上查看g0/0/0是否是DIS?

  提示:可以看到在对应R3的g0/0/0口就是对应L1类型的DIS(伪节点);从上面的实验可以看到,CSNP都是由DIS发出;其他非DIS都是向DIS发送LSP更新和PSNP请求,然后由DIS在向其他非DIS发送LSP更新;即LSDB数据库同步都是和DIS进行同步,所以对于不同类型的路由器,对应建立LSDB数据库也有所不同;原因是DIS分L1类型DIS和L2类型DIS;

  验证:在R1上抓包看看对应CSNP包是否是每10秒发送一次?

  提示:可以看到对应PSNP包默认会每10秒由DIS发送一次;

  IS-IS LSP比较规则

  提示:在路由器收到一条LSP更新以后,首先它会对比和自己LSDB中对应LSP的序列号,如果收到的序列号大,此时路由器会将对应LSP更新到自己的LSDB数据库,然后再向其他邻居发送LSP更新;如果收到的LSP序列号小,此时收到LSP包的路由器会把自己对应LSP发送给对方;如果收到的LSP序列号和自己LSDB中对应LSP序列号一样,此时路由器会对比LSP中Remaining Lifetime字段的大小,还是遵循上述原则,如果收到的LSP中Remaining Lifetime字段比自己LSDB中Remaining Lifetime字段要大,此时路由器会把对应LSP更新到自己的lsdb中,然后再向其他邻居发送LSP更新;如果收到LSP包中Remaining Lifetime字段要比自己LSDB中对应LSP中Remaining Lifetime的值要小,此时收到LSP更新的路由器会将自己lsdb中对应LSP发送给对方;如果Remaining Lifetime相同,此时路由器会对比对应LSP中checksum字段的值;还是遵循上述规则,如果比自己大就更新到自己LSDB数据库中,如果比自己小,就把自己的LSP发送给对方,如果LSP的序列号,Remaining Lifetime,checksum都和自己LSDB中对应LSP一样,此时路由器会丢弃该LSP,它会认为两个LSP一模一样,没有必要更新;

  IS-IS拓扑计算与路由的形成

  提示:IS-IS拓扑计算和路由的形成过程和ospf一样,都是先通过hello包建立邻居,然后同步LSDB数据库,最后计算拓扑和路由;在IS-IS中邻居关系建立主要通过Hello包交互并协商各种参数,包括链路类型(L1或者L2),hold time,网络类型,支持协议,区域号,系统ID, PDU长度接口ip等;在同步LSDB数据库时,与ospf不同,ISIS交互链路状态的基本载体不是LSA,而是LSP;交互过程没有OSPF协议那样经历多个阶段,主要是通过CSNP和PSNP两种报文来同步,请求和确认链路状态信息(承载链路状态信息摘要);而链路状态信息的详细拓扑和路由信息由LSP报文传递;路由计算和OSPF一样,都是通过LSDB数据库中的内容结合SPF算法进行计算;当ISIS算法分离了拓扑结构和ip网段,加快了网络收敛速度;

  IS-IS路由算法

  提示:IS-IS在本区域内路由器第一次启动的时候执行的是Full-SPF算法;后续收到LSP更新,如果是部分拓扑的变化执行的是iSPF(Incremental SPF,增强SPF算法)计算;如果只是路由信息变化,执行的就是PRC(Partial Route Calculate,部分路由计算算法)计算,PRC用来处理网络拓扑不变而路由信息发生改变的情况,而ISPF用来处理网络拓扑结构(最短路径树的结构)发生改变的情况;由于采用拓扑与网络分离的算法,路由收敛速度较快;

posted @ 2021-09-14 02:40  Linux-1874  阅读(1617)  评论(0编辑  收藏  举报