HCIP-Datacom Core Technology V1.0_6 IS-IS原理和配置

IS-IS最初是国际化标准组织为他的无连接网络协议设计的一种动态路由协议,但是当今世界主流协议都是基于TCP/IP协议栈的,于是后期地他进行了修改和扩充。主他支持IP路由,集成化的IS-IS,IS-IS和OSPF有很多相似点,通过对比学习,一方面回顾前面课程所学习的OSPF协议,另一方面帮助更好的去掌握新的协议。

IS-IS的基本概念

OSI和TCP/IP协议栈,IS-IS是由ISO协议栈中为他的CLNP,所定义的一种动态路由协议,一开始只能支持CLNP网络,但是当今主流协议栈是基于TCP/IP协议栈的,所以有什么办法能够让他支持IP路由呢,于是IETF工作组在设计的时候就将它进行了扩展,使它能够支持IP路由,所以会发现集成化的IS-IS不仅能够支持CLNP网络,同是也能支持IP网络,而IS-IS和OSPF有个最大的区别,IS-IS是采用数据链路层封装,也就是说它是工作在数据链路层的,而OSPF它是采用IP报文封装,也就是说它是运行在网络层的,这个是这两个协议最大的特点之一。

在TCP/IP中网络层使用的是IP协议,而一开始最初IS-IS为他的CLNP所设计的时候,所支持的并不是IP协议,那么它的地址格式是怎么的呢。

NSAP(Netwrok Service Access Point)网络服务访问点

网络服务访问点,NSAP地址,这个地址明显比IP地址复杂的多,它主要有两大部分组成,第一个由IDP组成,第二个由DSP组成,那么IDP类似于IP地址中的主网络号,而DSP类似于IP地址中的子网号和主机地址,其中IDP又有两部分组成,分别是 AFI和IDI组成,而DSP是由分隔域标识符,High Order DSP,和System ID和服务类型SEL组成。那么这样一个复杂的地址格式,明显在使用过程中十分不方便去记忆,那么运行在TCP/IP协议栈中,支持IP网络层这样的地址格式,会做出怎么的变化呢。那么最关键的一点就是在于最后的一个SEL,服务类型,因为SEL是根据所定义的服务类型(来变化的),现在在服务于TCP/IP中的这样的一个网络层,所以它的地址格式应该是怎么的呢。

1~13是区域ID号,area id,类似于OSPF中的区域ID,是一个变长的。

SystemID 类似于Router ID,

SEL,服务类型,表示一个协议,一个是TCP/IP,一个是CLNP的。最后两位永远是00。

8-20字节。

这就是所要记住的一种特殊的地址格式,当这样的一个协议服务于TCP/IP协议栈的时候,说明它是基于IP地址进行工作的,也就是说服务类型为SEL固定为00的时候,那么就是代表这样的一个地址,是基于IP的,那么基于IP之后,它的地址格式,只需要记住它是由区域ID,系统ID,和服务类型SEL这三大部分组成。其中区域ID可以看到,按照刚才介绍的 NSAP地址格式,它是由AFI+IDI+分割域标识符HDSP,这三个部分组成,那么系统ID就是System ID,最后有一个服务类型,就也是说当SEL为00的时候,代表它是应用在IP层的,同是只需要关注区域ID和系统ID这两个参数就可以了,下面这个复杂的地址格式在IP应用上面其实是不需要关注的。那么这么一大串的这样一个NET特殊地址,怎么样去识别它,首先服务类型和系统ID它是固定长度的,分别是1字节和6字节。而区域ID是非定长的,它的范围是1~13字节的,所以说这样的一个地址,它最小是8字节,最大是20字节,如果在查看设备相关的这样的一个地址的时候,从右往左看,首先第一字节的SEL代表服务于IP,6字节代表系统ID,剩下的可变长字节就是代表它是属于区域ID,这样就能够快速判断这样的一个地址格式,它分别属于哪一个区域和哪一个系统ID。那么这个区域ID类似于OSPF中区域的概念,而系统ID类似于OSPF中给设备定义的Ruoter ID,在日常工作情况下,一台设备只需要配置一个NET地址,但是有时候在做一些割接的时候,为了使区域更加平滑的(过渡),比如分割,或者说合并,可能要使用多个这样的一个区域地址。那么正常在华为设备上,在一个IS-IS进程下可以配置三个这样的地址,这样就可以达到实现分割区域这样的作用。

那么如何去实现区域的分割,通过这样的地址,和如何去合并。

Area ID跟OSPF不一样,那么拓扑结构也不同吗?不同,有稍微的变化,有相似的地方,不可能相似。

系统ID是6个字节,和Router ID或者Loopback接口的IP地址是不一样的,有没有办法将Router ID或者说一个32位的Loopback接口的地址转化成系统ID,方便管理。

一台路由器,可以配置三个网络实体名,要求SystemID相同的情况下,可以配置三个NET地址,为了支持区域的平滑的合并,分割和转接。

如果说一个设备它的区域号是49.0001,它的Router ID为10.0.1.1,这样一台设备它所对应的NET地址,应该把它变成多少。

为了方便管理,一般情况下可以根据以下规则,将Router ID 转化成系统ID,然后和区域ID合并在一起,就变成了一个NET地址。

Router ID是10.0.1.1,四个部分组成,然后将每一部分扩展为三位,如果不足三位,会将在原来的这一位上前面加0,比如说10,不足三位,所以会在它前面加上一个0,如果是足三位的话,就不做任何改变。比如说是192,那就不需要添加前导0,那么将这样的一个IP地址,每一位扩展成三位,不足位在前面补上0之事,变变成了010.000.001.001,系统ID是由三部组成,一共是6个字节,所以会将这样的一个数值重新划分为三个部分,变成系统ID,于是就变成了0100.0000.1001,然后在这样的一个系统ID前加上设备所在的区域号49.0001,和SEL服务类型00,最后就转化成了这样的一个特殊的NSAP地址,为什么需要去掌握转化,因为这样的一个系统ID,如果随意设置的话,它可能会导致有重复,所以将Router ID转换成系统ID,便于后期更加高效的去维护识别它。

网络实体名,用于路由计算,由区域地址+system ID组成。十六进制,8-20字节,Area + System id +SEL。支持区域平滑合并,分割,一台设备可以设置3个,但system id 要相同。

为什么要划分区域,划分区域之后,使网络变成了一个多区域的结构,网络架构就非常清晰明了,后期维护起来也非常方便,同时基于链路状态的这样的一个路由协议中,他所扩散的是链路状态 LSA,那么通过划分区域就可以使用单个区域所要维护的LSDB的规模变小,同时这样能够减轻路由器的负荷。提高设备的效率。对于一些低端性能的路由器而言,它的负担就没有那么大。

而在OSPF定义了区域0为骨干区域, 同时不可更改,其他区域为非骨干区域要和骨干区域相连,这是在OSPF中所定义的概念。在IS-IS中它是否是这样定义的呢?

首先在IS-IS中将路由器类型分为三大类,分别是Level-1、Level1-2、Level-2这三种类型的路由器,那么不同类型的路由器,它所维护的LSDB是不一样的。Level1-2这样的一台路由器类似于OSPF中的ABR,像一个桥梁一样连接非骨干区域和骨干区域,同是骨干区域所维护的这样的一个LSDB是Level-2的,那么L2路由器和level1-2路由器就组成了骨干区域,而Level1只维护本区域Level-1的LSDB,所以Level-1和Level1-2路由器就组成了非骨干区域,在IS-IS区域里面,并没有强制规定哪个区域为骨干区域和非骨干区域,而是根据设备所在的类型以及设备所要维护的LSDB去确定它是属于骨干区域和非骨干区域。Level-1路由器部署在非骨干区域,而Level-2路由器和Level1-2路由器部署在骨干区域,实际上Level1-2路由器也要和Level-1路由器作为桥梁连接骨干区域,他也要和Levle-1路由器建立邻居关系,然后要维护Level-1的LSDB,所以Level1-2路由器其实它既属于骨干区域也属于非骨干区域,那么和OSPF一样,每一个非骨干区域都是通过和 Level1-1建立邻接关系和骨干区域相连。

既然在IS-IS中区域的定义根据它的路由器的类型以及它所要维护的 LSDB去确定,在IS-IS中路由器的类型分为哪三大类,其中每一类能够建立怎么的邻居关系和哪些特殊的条件。

Level-1路由器,这个路由器它是IS-IS中是区域内部的一台路由器,他只能和同一区域的Levle-1和Level1-2路由器形成邻接关系。这里有一个非常重要的事情,邻接关系可能第一个想到的是OSPF中数据库同步之后,变成邻接关系,那么在IS-iS中要确定一点,他没有邻居和邻接这一概念。所以无论是邻居还是邻接,对于它的概念都是一样的,所以在其他教材上,如果发现在介绍IS-IS中说他是建立邻居关系的时候,也是没有问题的,表明了Level-1路由器所要建立的条件是必须是属于同一个区域,邻居路由器的类型是同区域的Level-1路由器,要么是Level1-2路由器。只需要维护自己本区域所在的Level-1的LSDB,那么这个LSDB只包含了本区域的路由信息,而去访问骨干区域都要通过Level1-2路由器去实现。

Level-1,区域内部路由器,本区域的路由信息,建立邻接区域号需要相同。

Level-2,骨干路由器,维护所有路由信息,建立邻接区域号可以相同,也可以不同。

Level1-2,默认类型,OSPF的ABR非常相似。

P2P

broadcast,leve-1 hello 0180-c2000,0014

level-2 hello 0180--c200.0015

isis circuit-type p2p

IS-IS的工作原理

邻接关系建立

只有同一层次的相邻路由器才能建立邻接关系,Level-1只能和Level-1建立邻接关系,Level-2只能和Level-2建立邻接关系。同时Level1-2比较特殊,都能和Level1-2(不同区域)建立邻接关系。

对于Level-1的路由器而言,区域ID必须保持一致,Level-1建立邻居关系的条件必须是同一区域的。

IS-IS两端所支持的网络类型必须保持一致。如果一端是点到点的网络类型,一端是广播的网络类型,是无法建立邻接关系的。

默认的情况下,IS-IS的地址必须是处理同一网段,如果在广播型网络里面,正常情况下需要检查IP地址,保持在同一网段,但是如果运行在点到点网络里,可以通过命令,忽略Hello报文中的IP地址检查,仍然可以建立邻居关系。

在实际的部署中,现在IS-IS不在适用于CLNP网络,而是用在IP网络中,也就是说正常情况下是需要检查接口的IP地址,但是在检查IP地址的时候又比较特殊,如果接口配置了从IP地址,那么双方只要有一个,某个Ip地址在同一网段,就能够建立邻接关系,比如说本端的主IP地址和对端接口的从IP地址在同一网段,依然能够建立邻接关系。从IP地址,和设备的接口所在的子接口的IP地址混淆,这两个是不同的概念。从IP地址依然是在主接口下面,只不过在配置IP地址的时候 ,后面加上sub,一个接口最多可以配置31个从IP地址,而子接口就很多了。

建立邻居关系,是通过Hello报文。

Circuit Type,表明路由器的类型,如果是01代表是Level-1,如果是10代表Level-2,如果是11代表是L1/L2,

Source ID,代表的是发送Hello报文的路由器的系统ID,

Holding Time,和OSPF中的路由失效时间是一样的,用来判断邻居是否保持在一个激活的状态。依然维持邻居关系,这个时间是30秒

Priority,在OSPF中,优先级是用来选举DR和BDR的,在IS-IS的Hello报文中的优先级,那是不是意味着在IS-IS上的Hello报文中也有一个类似于DR和BDR这样的概念呢,答案是对的。

虚拟伪节点DIS,优先级主浊用来选举DIS的,DIS就是类似于DR的这样一个概念。取值范围是-~127,默认是64,越大越优。

LAN ID,包含了虚拟伪节点的系统ID,

在广播型网络中,和OSPF是非常相似的,首先初始状态,R1和R2都是Down状态,然后R1发送了自己的Hello报文里面包含了设备类型,是Level-1的,系统ID,区域ID,还有邻居字段,当R2收到R1第一次发过来的IS-IS Hello 报文,发现Neighbor是空的,所将的它的状态从Down转为Initial,然后R2向R1回复了一个IS-IS的Hello报文,这个Hello报文里面的Neighbour 就包含了R1的系统ID,当R1收到了报文里面的Neighbour字段,包含了自己的系统ID,R1会再回复一个Hello报文,同是R2收到Hello里面包含了Neighbour字段,包含了自己的系统ID,表明双方正式建立邻接关系,状态变成up,所以也可以用一句简单的话来概括一下,就是在IS-IS中互相接收的Hello报文里面的Neighbour字段包含了自己系统ID,表明和对方形成邻接关系。和OSPF基本上来说是一模一样的。同时路由器会等待两个Hello报文的时间间隔再再进行DIS的选举。

在IS-IS中需要选一个路由器,作为DIS,这个DIS类似于DR,一样去收集不同路由器的LSP,最后进行一个数据库的同步。DIS负责生成伪节点的LSP,用来描述网络上有哪些网络(设备),什么是伪节点概念呢,这个DIS的选举实际上是基于路由器的某一个接口的优先级进行比较,它首先是比较优先级,如果优先级相同的话,再比较MAC地址的大小,选举出来某个接口,成为了DIS,这个DIS最后会变成一个伪节点,用来更新伪节点的LSP,这个伪节点的概念是如何去理解呢。在一个物理拓扑中,4台路由器通过一个交换机去连,形成了一个广播型网络,DIS承接了伪节点之后,别的路由器认为这个虚拟的伪节点是一台真实的逻辑意义上的设备,认为它是一台路由器,所以在他们的眼中,逻辑拓扑应该是上图右边显示的样子,认为是和一台路由器连接,同这台路由去收集不同设备的LSP,进行更新泛洪,所以在他们眼中,伪节点就成了一个虚拟的路由器这样的一个概念。这就是DIS它的概念。同时和OSPF不同的是,在OSPF中有一个BDR的角色。它是用来承担备份DR这样的一个概念,而在IS-IS中没有备份的这样一个概念。DIS它的选举机制是抢占模式。OSPF是非强占模式,这也是很大的一个区别。

为什么在IS-IS中可以是抢占模式,而在OSPF中是非抢占模式?

因为在OSPF中,所定义的一个邻居状态机是不是有邻居和邻接的概念,其他DRother,只需要和DR和BDR建立邻接关系,保持同步,一旦将它的模式改成抢占模式之后,整个OSPF网络的这样的一个设备的路由状态会进行变迁,那么全网的拓扑和路由计算要重新进行收敛。这样最后所花费的时间非常大,浪费了链路带宽的效率。而在IS-IS中,没有邻居和邻接概念这一说法,也就是说所有路由器都需要建立起邻接关系,无论是哪一台路由器成为DIS,进行数据库的同步,全网彼此路由器之间依然保持了Up状态,不做任何邻居状态的变迁。所以这并不会引起网络资源过多的消耗,这也就是为什么IS-IS中,它的虚拟伪节点DIS可以是抢占模式,而OSPF中DR是非抢占模式,这是比较重要的一点。

伪节点到邻居的开销为0是由其虚拟属性路径计算逻辑决定的:

  1. 虚拟节点的无实体性

    伪节点本身不存在实际转发行为,它仅用于描述拓扑结构。真实路由器到伪节点的链路开销(如R1→Pseudonode)按实际链路成本计算(例如默认10),但反向链路(Pseudonode→R1)的开销被强制设为0,因为伪节点到真实设备不存在实际传输路径。

  2. 避免重复计算路径成本

    在SPF(最短路径优先)计算时:

    • 当数据包从R1发往R2时,实际路径是:
      R1 → 广播网络(伪节点) → R2

    • 路径总开销 = (R1→Pseudonode) + (Pseudonode→R2)

      若伪节点→R2的开销不为0(例如设为C),则总开销会多出C,导致计算结果错误。

在IS-IS中先比较优先级,然后再比较MAC地址,同是一旦DIS选举完成之后,DIS它发送Hello报文时间的间隔是普通路由器的1/3,也就是10/3秒,因为通过Hello报文维持邻居关系,虚拟伪节点需要更快的发送Hello报文,一旦虚拟伪节点发生故障,整个网络中会重新选举DIS,这个DIS为了更好更快的和其他路由器进行数据库的同步,所以它要进行一个维持活跃性的时间。

DR和DIS它的区别在于,在IS-IS中,如果将设备的优先级设为0, 他依然会参加选举,而在OSPF中将该设备的优先级设为0,他是直接放弃选举。

在广播型网络中,IS-IS的DIS它是一个抢占型的概念,而在OSPF中是非抢占性的概念。

在IS-IS中,所以非DIS的路由器都要形成邻接关系,而在OSPF中,非DR和BDR的路由器只需要和DR以及BDR进行邻接关系。

在点到点的网络类型中,建立邻居关系也分为两种,一种是通过二次握手,一种是通过三次握手,在华为设备上默认情况下用三次握手,因为更加可靠,三次握手的概念和在广播型网络的概念是一样的,收到Hello报文中的Neighbour字段必须包含自己的系统ID,才宣布和你建立起邻接关系状态变为UP。

那么二次握手是什么意思呢?收到对端发送的Hello报文,就单方面把状态变为Up,表明和对方形成邻接关系。但是这个时候有一个问题,如果网络出现单向通信故障,如果单方面宣布状态变为Up,邻居关系建立完成,但是对方没有收到Hello报文,状态依然在Down状态,那么这个时候R1向R2发送数据,因为R2它的状态依然没有变成Up,所以数据流量可能会产生丢失,所以为了保证在点到点的网络中,用户的流量更加可靠,安全的传输,建议将它的邻接关系建立的过程更改为三次握手。在华为设备上默认在点到点的网络类型中,也是通过三握手,建立起邻接关系。

链路状态数据库同步

在IS-IS中用于交换链路状态信息的不再是LSA,叫LSP,其实是一样的概念,是用来交换链路状态信息的,看一下链路状态信息LSP里面包含了哪些重要的字节。

Remaining Lifeteime:LSP在数据库中存活的剩余时间,有点类似于LSA Age一样,那么它生存时间默认是1200s,在IS-IS中LSP是每隔900s泛洪一次。

LSP ID,由三个部分组成,System ID,伪节点和LSP分片后的编号(分片标识符)组成。

Sequence Number,序列号。

Checksum:LSP的检验和。

ATT,在路由器计算过程中所用到的比特位,

OL,过载位,在一个网络里面,将某一台路由器设置为过载,或者说它的内存不够大,自裁变成过载,那么该区域其他设备进行SPF算法的时候,将不考虑从这台路由器进行路由选择,但是这里有一点需要注意的是,仅仅是SPF算法的时候,不考虑这台路由器,但是这台路由器的LDP依然会存放在数据库里面,也就是在特殊条件下,可以通过设置某一台路由器的过载位,业改变在整个区域里面进行进行路径选择时发生一个变化。可以通过命令,设置一个set-overload,过载位。

IS Type,最后是代表生成该LSP的路由类型.

LSP ID,系统ID,伪节点标识,分片号,不一定会在LSP ID中出现的星号

系统ID,

伪节点标识符,伪节点标识符表明该条LSP是否是由伪节点DIS产生的,如果是00的的话,代表它是一个实节点,或者称它为非伪节点产生的。什么叫实节点或非伪节点,也就是它是一台真实的路由器生成的,如果是非0的情况下,表明它是由DIS产生的。那么通过图中这个IS-IS的数据库,能看到下面这一条,它的伪节点标识符是01,代表非0,由DIS产生的。

分片号,在发送链路状态信息时包含的PDU,它的信息量太大了,一条LSP无法承载,所以会用多条LSP去描述该PDU,所以简单的概括一下分片号,也就是说当PDU承载信息过大,用多条LSP来描述一条PDU。

星号代表该LSP是自己本身所产生的。

通过LSP ID能够判断出很多我们所需要的知道的内容,也就是说必须掌握LSP ID的组成。

非伪节点,也就是实节点,实节点也就是一台真实设备的LSP,查看一个非伪节点的LSP信息,display isis lsdb 0100.000.1001.00-00 verbose

INTF ADDR,接口地址,代表描述接口IP地址是多少。

NBR ID,邻接信息,代表连接着哪台设备,和他之间的开销是多少,

IP-Internal,路由信息,和邻居所在的网段之间是多少,包括网段,子网掩码和开销。

如果是一个广播网络中,代表所有IS-IS连接的路由器,以及到达其他路由器的开销,开销为什么为0。

注意在伪节点中,只包含邻接信息而不包含路由信息,只有邻接信息。

CSNP报文它是描述数据库中的摘要信息,来帮助实现在IS-IS中完成数据库同步,怎么去发送呢?每隔10s,由虚拟伪节点DIS进行定期发送。

Source ID,发出CSNP报文的路由器的System ID.

Start LSP:CSNP报文中第一个LSP的ID值

End LSP ID:CSNP报文中最后一个LSP的ID值。

PSNP它描述的是部分摘要信息,也就是说当某台路由器发现和DIS数据库不同步,那么就用PSNP进行一个请示。同是还有第二个作用,当收到LSP之后,使用PSNP对收到的LSP进行确认。

PSNP类似于OSPF报文中的LSR和LSACK,请求和确认(报文),怎么判断该路由器发送的PSNP报文是请求报文还是确认报文。如果PSNP的序列号为0的时候,代表的是请求报文。如果PSNP报文所描述的LSP的序列号为非0的时候,代表它是确认报文。

假设现在路由顺路R1、R2已经选举完成,R2为DIS,现在新加入一台路由器R3,R3会发送自己的LSP,通过组播的形式,然后虚拟伪节点,R2上的DIS就会收集R1的LSP,然后周期性的发送CSNP进行同步,当R3收到DIS发送的CSNP之后,发现时面缺少了很多自己所没有的LSP,就会发送相应的PSNP进行一个请求,然后虚拟伪节点就会把R3所缺少的LSP的明细信息发送给R3,这个时候R3其实还会回复一个PSNP报文,完成一个确认。至此完成一个数据库的同步。同时通过LSP时面的一些重要的字节能够判断出伪节点和实节点的概念,以及该LSP是否为分片LSP,这就是广播型网络LSP的同步过程。

第一步是R1和R2之间通过Hello报文建立邻接关系,建立邻接关系之后,这个时候R1和R2会互相发送CNSP,进行同步,为什么在点到点网络中,R1和R2会互相发送CNSP报文给对端呢,因为在点到点网络中是不需要选举DIS的,需要互相发送自己数据库存的CSNP报文,如果发现自己对端的这样的一个数据库里面有自己本地所没有的的,这个时候,就会发送一个请求,进行一个索取相应的LSP。

现在R2发现R1数据库里面所没有的LSP,那么现在开始请求,已经请求完成了,那么R1发送LSP,代表把R2所没有的LSP发送给R2,这个时候R2发送PSNP报文是一种确认,类似于ACK,如果R2给R1发送的代表确认的PSNP报文,R1没有收到,这个时候R1会自动启动一个重传定时器,认为之前发送的LSP没有收到进行重传。那么这个重传定时器是多长时间呢,是5秒,也就是说我只要没有收到你回复的ACK,就一直重传该条LSP,直到收到PSNP为止。这个时候R1重传LSP给R2之后,R2这时候就知道,之前给R1发送的PSNP报文没有收到,这个时候重传。当R1收到R2回复的PSNP报文,那么到此就停止发送,双方数据库完成一个同步。

当路由器收到某一条LSP的时候,和自己的数据库进行对比,是否需要更新呢?

首先看一下序列号,序列号是否相同,如果不同的话,序列号越大越优,进行更新。如果相同,去判断剩余保存时间,看保活时间是否为0,如果为0的话代表最优。如果不为0代表是一样的,最后判断校验和,看校验和哪一个更大,越大越优。如果校验和一样,那么不处理该LSP, 认为是一样的。如果路由器收到比自己本地数据库更优的LSP之后,他该如何处理。

在广播型网络里面直接将该LSP加到数据库里面,然后周期性的通过DIS,泛洪出去。如果在点到点的网络中会加到数据库里面,同时会回复PSNP报文,代表确认收到此条LSP,最后也会将这条新的LSP发送给邻居路由器。至此完成数据库同步。

路由计算

IS-IS和OSPF一样,也是通过SPF算法进行计算,添加路由,但在非骨干区域中它有不同点。

现在R1去连接R2和R3,R2和R3分别属于Level1-2,R1属于非骨干区域Level1,他通过SPF计算生成自己本区域的拓扑,然后添加本区域的路由信息,但是它要访问其他区域,这个时候,他没有其他区域的路由信息,Level1-2能做些什么呢?Level1-2作为桥梁连接非骨干和骨干区域,因为Level1-2它所需要维护的L2的LSDB,包含了所有IS-IS路由域的拓扑和路由信息,所以Level1-2路由器是可以实现一个数据正常的转发。帮助Level-1路由器转发数据流量到其他区域,所以Level1-2就会下发一个(给)Level-1中ATT置位的这样的一条LSP。一发这样的一条LSP有什么好处呢?他就会生成一条指向自己的缺省路由给非骨干区域里面的其他路由器,非骨干区域里面的其他路由器只要想要访问别的区域,都会通过这条缺省的0.0.0.0的默认路由,交给Level1-2路由器,由Level1-2帮助他去实现数据的转发,这一点是不是似曾相识,有点类似于OSPF中的Stu区域,完全Stub区域是将5类4类以及区域间的3类LSA全部用1条缺省的3类LSA代替,下发给Totally Stub区域,然后下发一条缺省的路由。而ATT比特位的LSP的下发,同样能够生成一条缺省的路由指导非骨干区域访问别的区域,交由Level1-2进行数据的转发。所以和Totally Stub区域有异典同工之妙,这就是ATT比特位的作用。

但是在一些特殊的应用场景下,它又会存在什么问题呢?

因为R2和R3都是Level1-2,他们都会向R1下发ATT比特位的LSP,那么就会同时生成缺省的0.0.0.0的路由,分别指向自己,这个时候,R1就会有两条缺省的静态路由,分别指向R2和R3.假设R1要去访问R5上面的192.168.20.0的这样一个网段,因为R1有两条缺省的路由,在实现流量负载分担的时候,就有可以选择从下面这条路径中。但是在该案例中,通过两条路径访问该网段的开销分别是多少?上面路径开销的累计开销值为40,下面的这条路径累计开销值是30,也就是说从下面这条路通过R3去访问该网段更优。但是R1有两条缺省的静态路由,就有可能导致R1通过R2去访问该网段,最后产生一条欠优路径。为了解决次优路径,在IS-IS中,又衍生出了一个新的技术。

将骨干区域的明细路由,通过路由渗透引入的方式,引进到非骨干区域,这个时候非骨干区域就会有骨干区域所在的明细路由去计算开销。而R1就不再用缺省的0.0.0.0去计算想要去访问的这样的一个目的网段。从而计算出从R1访问R5从哪条路径走更优。图中的案例就是R2和R3将192.168.10.0和192.168.20.0这两个网段通过路由渗透的方式分别引到非骨干区域49.0001中,让Level-1学习到去去往明细路由的这样一条路径的开销。那么在他最终选择的时候,R1就会选择最优的路径,根据开销取值,去计算。这里可能大家就有一个疑惑,说缺省的静态路由不能够计算出开销吗。 这里有个重要的问题需要注意一下,在没有做路由渗透之前,通过缺省的形式下发的静态路由,R1去往R2和R3,只能够计算出自己本身去往R2和R3这一段的开销,这是无法计算到它想要访问的20.0该网段的明细的路径的总开销。也就是说后半段R1的路由表里面是不知道的。它的路由表里面只有自己到Level1-2的R2和R3,这一段10的开销。而做完路由渗透之后,就相当于明细路由引进到R1,R1就知道如何去往R4或R5上面这些网段具体明细的路由。包括沿途所经过接口的开销值。这样通过累计计算开销的方式能够计算出去往目的的开销的值。最后选择一条最优路由,避免了次优路由的产生。

过载位,如果把Level1-2不小心设置成了过载,或者说Level1-2路由器它的内存不足,这个时候就需要注意了,哪怕做了路由渗透,因为过载位的设置是该路由器,不参加SPF的计算,所以是不能够帮助实现路径的转发。也就是说Level1-2只要设置了过载位,R1依然不能通过该台路由器进行数据转发去访问他所引入的明细路由。

Level1-2路由器类似于ABR,既要维护非骨干区域Level-1的LSDB,也要维护骨干区域Level-2的LSDB,也就是说它的数据库里面所维护的LSDB是全网路由域里面完整的一个信息。所以去往任何一节点他都能够自己计算得出去往目的网段的开销。

Level-2路由器所要维护的数据库是Level-2的LSDB,Level-2的LSDB比较特殊,它不仅包含了骨干区域里面的路由信息,也包含了非骨干区域的路由信息,因为Level1-2会将非骨干区域里面的路由信息转化成Level-2传给骨干区域。那么骨干区域Level-2的路由器就能够自己计算去往非骨干区域某一台路由器的开销,最后选择最优路径。这就是整个IS-IS中路由计算的一个方式。

IS-IS基本配置

首先需要在全局视力下创建isis进程中,后面可以跟上进程ID号,如果不指定,默认ID为1,接着就会进到ISIS的进程视图下,在ISIS的进程视图下,通过命令network-entity net,指定它的网络实体名。一般网络实体名有三个部分组成,第一个部分是它的area ID,区域ID,第二个是系统ID,system ID,系统ID要求每台设备是唯一的,因为它是用来标识每台ISIS路由器的。后面是全0,

第三步,配置IS-IS级别,那么在IS-IS路由器当中,有三种级别,level1、level1-2和level2。默认情况下,如果不调整它的level,它就会运行在一个level1-2的一个级别下。

下一步,进行到接口视图下,使能ISIS的路由协议,进入到每个相关的物理接口,以及逻辑接口视图下,通过命令interface后面跟上接口类型,比如说以太口Ethernet,比如说GE口,接口加上接口号,这样就进入到一个具体的接口视图下,在这个具体的接口视图下面通过命令isis enable,后面跟上具体的isis进程后,不然路由器不知道你是将这个接口使能在哪个IS-IS的进程中。

下一步,调整接口的level级别。

下一步,调整接口的网络类型,默认的以太接口它的网络类型是广播的类型,而广播的类型会产生dis的选举,一般现网中为了优化网络的配置,会通过命令isis circuit-type ,强行调整成p2p类型,用此来减少dis这边选举带来的一些损耗。如果要恢复接口的缺省配置,可以通过undo isis circuit-type,让接口还原成原来的网络类型。同时在广播型的网络里面,因为它会产生一次dis的选举,可以通过isis dis-priority的命令去指定他的选举的优先级,默认情况下优先级是64,优先级是配置在相应的接口下面。

拓扑图里面一共有5台路由器,客户通过5台路由器实现网络互联,并且因为R1的性能比较低,所以还要使这台路由器处理相对较少的数据信息,希望通过最优的路径,去访问192.168.10.0的网段和192.168.20.0的网段。整个的配置思路是需要在这5台路由上都配置isis的基本功能。其中R1作为level1路由器,R2和R3作为level1-2的路由器,R4,R5作为level-2路由器.

在R1这台设备上,首先创建进程isis 1,配置它的级别为level1,配置它的network-entify ,配置为区域ID,49.0001,系统ID为0010.0100.1001,后面为全0,进入到接口视图下,通过isis enable命令,使能这个接口,同时对于这台R1设备来说,它有两个物理接口,同时使能两个接口,isis enable 1,R2这台设备,因为它要涉及到level1-2级别,所以需要设置它的级别为level1-2,配置它的network-entity为49.0001,后面跟上系统ID,同时在相应的接口下使能isis.那么R3的配置跟R2的也是类似的,无非就是它的系统ID号会不一样。

下一步需要配置R4和R5这两台设备,R4这台设备它是运行在level2的级别之下的,需要配置isis-level level-2,同时指定它的网络实体名,下一步将它的各个接口使能isis,下一步需要在R5这台设备上配置ISIS,同时创建isis进程,使用同样的进程ID号1,也是运行在level2上,同时最后配置它的network-entity 系统id是跟其他设备不一样,下一步进行到具体的接口视图下,使能对应的isis进程就可以了。

可以通过display isis peer去查看邻居是否建立起来了,只要看到对应的邻居,他的状态是up的状态,那就说明忆经成功的建立了邻居的关系,R4这台设备一共有两个邻居,R2和R5,可以看到,R2和R5两台设备分别已经是up的状态,R1这台设备也是有两个邻居,最终也是up的状态。

如果要查询路由表,可以通过display isis route,专门查询isi相关路由,可以看到这个例子当中,由于R4这一侧是来自外部区域的l2的一些路由,传递经过l1-2路由器,到达l1的设备,所以在这边的话,会在R1本地自动生成一条默认路由,网关有两个,12.2和13.3,形成负载均衡的转发效果。通过这样的形式可以看到,在R1这台设备上,不需要再保存过多的明细路由上,对外部的一些路由信息,只需要通过默认路由转发即可。

在R1这台设备上,因为它会存在默认路由,但是有些时候想让他能够学习到明细的路由信息,这个时候可以通过路由渗透的配置来实现。路由渗透的配置需要通过命令import route isis level-2 into level-1,这条命令会所有的level2的路由都注入到level1里面去,所以这个时候一般会加一个过滤的策略。专门通过ip-prefix限制想要的网段。限制是192.168.10.0这个网段才能被注入进去,R3上也是类似的操作,注入的是20.0的网段,使得R1这边能够渗透学习到一条通往一条192.168.10.0的明细路由,也能通过下面的R3设备学习到192.168.20.0的一条明细路由。

通过display ip routing-table protocol isis可以查询到R1这边已经有了两条路由,10.0网段和20.0网段,分别有两个不同的下一跳,说明去往具体的网段它的路径都是最优的。

在一些场景里面,想要提升路由协议的安全性,那么ISIS它也提供认证的一个手段,isis可以分成三种类型的认证,接口认证和区域认证以及路由域认证。接口认证主要针对hello报文,分别针对level1和level2的hello报文进行认证,区域认证针对level1的CSNP、PSNP和LSP报文进行认证,路由域认证的话针对一些level2,CSNP、PSNP和LSP报文进行认证。

如果根据报文的认证方式的话,又可以分为简单认证,MD5认证,Keychain认证和HMAC-SH256认证方式。

当配置接口认证的时候,hello报文使用的认证密码会保存在接口下,发送带认证的TLVB的认证报文,互相连接的路由器接口必须配置相同的口令。如果是区域认证,每一台level1路由器都必须使用相同的认证模式,而且使用共同的钥匙串。对于路由域认证的配置方式需要要求每一台level2或者level1-2路由器都必须使用相同的认证模式,也使用共同的钥匙串。也可以通过配置实现设置SNP和LSP分开的认证。

区域认证,进行到isis的系统视图下配置area-authenticatioin-mode,如果是路由域认证,檲 domain-authentication-mode

IS-IS配置实验

希望R1这边的路由器能够访问到R5这一侧引用的外部路由,同时希望R1的G0/0/1接口是作为DIS,R1和R5之间的双向流量,要求沿着R3,R4这条路径转发。也就是从R1去往R5的流量是通过下面这条路径,从R5去往R1的流量也是走下面这条路径,通过路由的开销,cost值设置,以及路由渗透,来控制路径的选择。

配置思路。

第一步,先按照需求,把ip地址给它配置上去。

第二步,需要配置isis,根据规划的区域id,以有根据规划的level,来配置isis的基础相关内容,

第三步,在完成上一步骤的配置之后,需要进行检查相关的配置结果,通过一些display的命令,

第四步,手动修改R1,G0/0/1上的接口的DIS的优先级。让他成为选举中的DIS,在R5中,让他选举为DIS,

第五步,需要在R5这台设备上,去创建一个loopback接口1,同是将loopback接口的一些路由信息引入到isis当中,实际成为一条外部路由。分别观察在R4这台设备和R1这台设备上isis路由表,并且检测从R1ping这条外部路由是否能够ping通,

第六步,需要修改在R4上的isis的cost值,去影响路由选路。

第七步,在R3设备上配置isis路由渗透,使得R1根据最长匹配原则,优先选择R3作为下一跳去前往L2的区域,

相关推荐
EveryPossible几秒前
提示练习内容2
服务器
123过去几秒前
sucrack使用教程
linux·网络·测试工具·安全
姚永强5 分钟前
在虚拟机添加磁盘和自动挂载
运维
弘毅 失败的 mian13 分钟前
Linux 进程属性详解
linux·运维·服务器·经验分享·笔记
AI成长日志17 分钟前
【实用工具教程专栏】GitHub Actions自动化工作流入门(基础篇)
运维·自动化·github
jnrjian20 分钟前
restore archivelog RAC thread from sequence logseq
服务器·数据库
IAUTOMOBILE22 分钟前
Ubuntu 22.04 下 NVIDIA H100 服务器完整部署攻略:驱动、Fabric Manager 与 Container Toolkit 配置
服务器·ubuntu·fabric
三万棵雪松23 分钟前
【Linux 物联网网关主控系统-感知层部分(一)】
linux·单片机·物联网·嵌入式linux
三万棵雪松23 分钟前
【Linux 物联网网关主控系统-感知层部分(二)】
linux·物联网·嵌入式linux
淼淼爱喝水26 分钟前
openEuler 下 Ansible 基础命令详解与实操演示1
linux·服务器·ansible