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
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同步、拓扑计算和路由形成的更多相关文章
- HCNP Routing&Switching之IS-IS路由渗透和开销
前文我们了解了IS-IS邻居建立过程.LSDB同步.拓扑计算和路由的形成:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15265698.html:今天我们来聊 ...
- HCNP Routing&Switching之BGP邻居建立条件、优化和认证
前文我们了解了BGP相关概念.AS相关概念以及BGP邻居类型.基础配置等,相关回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15370838.html:今天我们 ...
- HCNA Routing&Switching之动态路由协议OSPF建立邻居的条件
前文我们了解了OSPF的router id.数据包结构.类型.不同类型的数据包作用以及OSPF状态机制,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15027 ...
- HCNP Routing&Switching之OSPF虚连接
前文我们了解了OSPF的网络类型.帧中继交换机映射以及路由器帧中继映射相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15195762.html:今天我 ...
- HCNP Routing&Switching之OSPF LSA类型
前文我们了解了OSPF中的虚连接相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15202348.html:今天我们来聊一聊OSPF数据包中LSA类型相 ...
- HCNP Routing&Switching之BGP基础
前文我们了解了路由注入带来的问题以及解决方案相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15362604.html:今天我们来学习下新的路由协议BG ...
- HCNP Routing&Switching之BGP报文结构、类型和状态
前文我们了解了BGP的邻居建立条件.优化以及BGP认证相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15395723.html:今天我们来聊一聊BGP ...
- HCNP Routing&Switching之BGP路由宣告
前文我们了解了BGP报文结构.类型以及邻居状态相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15422924.html:今天我们来聊一聊BGP路由宣告 ...
- HCNP Routing&Switching之BGP防环机制和路由聚合
前文我们了解了BGP路由宣告相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15440860.html:今天我们来聊一聊BGP防环机制和路由聚合相关话题 ...
随机推荐
- 安卓安装https证书
前置条件 1 手机要设置密码 然后安装charles 证书 2 赋予 adb shell root权限(安装magisk就行) adb shell # 连接手机进入shell模式 su root # ...
- 面试官疯狂问我:char和varchar的区别 怎么办?愣着干嘛?进来白嫖啊!
MySQL的修仙之路,图文谈谈如何学MySQL.如何进阶!(已发布) 面前突击!33道数据库高频面试题,你值得拥有!(已发布) 大家常说的基数是什么?(已发布) 讲讲什么是慢查!如何监控?如何排查?( ...
- 【PTA|Python】浙大版《Python 程序设计》题目集:第二章
前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...
- 优化SQL 查询性能
为什么查询会很慢 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.要优化查询,实际上是要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数,要么让子任务运 ...
- Python入门:ChainMap 有效管理多个上下文
摘要: Python的ChainMap从collections模块提供用于管理多个词典作为单个的有效工具. 本文分享自华为云社区<从零开始学python | ChainMap 有效管理多个上下文 ...
- JVM学习笔记-第六章-类文件结构
JVM学习笔记-第六章-类文件结构 6.3 Class类文件的结构 本章中,笔者只是通俗地将任意一个有效的类或接口锁应当满足的格式称为"Class文件格式",实际上它完全不需要以磁 ...
- 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 ...
- 基于ScheduledExecutorService的并发定时任务处理能力测试
测试代码 定时器类 package business.util; import java.util.concurrent.Executors; import java.util.concurrent. ...
- 【笔记】浅谈支持向量机(SVM)
SVM支持向量机 支持向量机的思想原理 使用支持向量机的思想,既可以解决回归问题,又可以解决分类问题 那么支持向量机的思想是什么? 已经知道逻辑回归这种算法的本质就是在一个平面中寻找决策边界,而分类算 ...
- [11 Go语言基础-可变参数函数]
[11 Go语言基础-可变参数函数] 可变参数函数 什么是可变参数函数 可变参数函数是一种参数个数可变的函数. 语法 如果函数最后一个参数被记作 ...T ,这时函数可以接受任意个 T 类型参数作为最 ...