前文我们了解了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

  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

  在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

  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

  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

  在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用来处理网络拓扑结构(最短路径树的结构)发生改变的情况;由于采用拓扑与网络分离的算法,路由收敛速度较快;

HCNP Routing&Switching之IS-IS邻居建立、LSDB同步、拓扑计算和路由形成的更多相关文章

  1. HCNP Routing&Switching之IS-IS路由渗透和开销

    前文我们了解了IS-IS邻居建立过程.LSDB同步.拓扑计算和路由的形成:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15265698.html:今天我们来聊 ...

  2. HCNP Routing&Switching之BGP邻居建立条件、优化和认证

    前文我们了解了BGP相关概念.AS相关概念以及BGP邻居类型.基础配置等,相关回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15370838.html:今天我们 ...

  3. HCNA Routing&Switching之动态路由协议OSPF建立邻居的条件

    前文我们了解了OSPF的router id.数据包结构.类型.不同类型的数据包作用以及OSPF状态机制,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15027 ...

  4. HCNP Routing&Switching之OSPF虚连接

    前文我们了解了OSPF的网络类型.帧中继交换机映射以及路由器帧中继映射相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15195762.html:今天我 ...

  5. HCNP Routing&Switching之OSPF LSA类型

    前文我们了解了OSPF中的虚连接相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15202348.html:今天我们来聊一聊OSPF数据包中LSA类型相 ...

  6. HCNP Routing&Switching之BGP基础

    前文我们了解了路由注入带来的问题以及解决方案相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15362604.html:今天我们来学习下新的路由协议BG ...

  7. HCNP Routing&Switching之BGP报文结构、类型和状态

    前文我们了解了BGP的邻居建立条件.优化以及BGP认证相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15395723.html:今天我们来聊一聊BGP ...

  8. HCNP Routing&Switching之BGP路由宣告

    前文我们了解了BGP报文结构.类型以及邻居状态相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15422924.html:今天我们来聊一聊BGP路由宣告 ...

  9. HCNP Routing&Switching之BGP防环机制和路由聚合

    前文我们了解了BGP路由宣告相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15440860.html:今天我们来聊一聊BGP防环机制和路由聚合相关话题 ...

随机推荐

  1. 安卓安装https证书

    前置条件 1 手机要设置密码 然后安装charles 证书 2 赋予 adb shell root权限(安装magisk就行) adb shell # 连接手机进入shell模式 su root # ...

  2. 面试官疯狂问我:char和varchar的区别 怎么办?愣着干嘛?进来白嫖啊!

    MySQL的修仙之路,图文谈谈如何学MySQL.如何进阶!(已发布) 面前突击!33道数据库高频面试题,你值得拥有!(已发布) 大家常说的基数是什么?(已发布) 讲讲什么是慢查!如何监控?如何排查?( ...

  3. 【PTA|Python】浙大版《Python 程序设计》题目集:第二章

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...

  4. 优化SQL 查询性能

    为什么查询会很慢 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.要优化查询,实际上是要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数,要么让子任务运 ...

  5. Python入门:ChainMap 有效管理多个上下文

    摘要: Python的ChainMap从collections模块提供用于管理多个词典作为单个的有效工具. 本文分享自华为云社区<从零开始学python | ChainMap 有效管理多个上下文 ...

  6. JVM学习笔记-第六章-类文件结构

    JVM学习笔记-第六章-类文件结构 6.3 Class类文件的结构 本章中,笔者只是通俗地将任意一个有效的类或接口锁应当满足的格式称为"Class文件格式",实际上它完全不需要以磁 ...

  7. Run Clojure Script with External Dependencies without leiningen

    The normal way of deploy clojure files is using leiningen. But if we have no leiningen, or the scrip ...

  8. 基于ScheduledExecutorService的并发定时任务处理能力测试

    测试代码 定时器类 package business.util; import java.util.concurrent.Executors; import java.util.concurrent. ...

  9. 【笔记】浅谈支持向量机(SVM)

    SVM支持向量机 支持向量机的思想原理 使用支持向量机的思想,既可以解决回归问题,又可以解决分类问题 那么支持向量机的思想是什么? 已经知道逻辑回归这种算法的本质就是在一个平面中寻找决策边界,而分类算 ...

  10. [11 Go语言基础-可变参数函数]

    [11 Go语言基础-可变参数函数] 可变参数函数 什么是可变参数函数 可变参数函数是一种参数个数可变的函数. 语法 如果函数最后一个参数被记作 ...T ,这时函数可以接受任意个 T 类型参数作为最 ...