ISIS协议原理与配置
前提概要:
- IS-IS(中间系统-中间系统):IS-IS与OSPF一样,也是基于链路状态并且使用SPF算法进行路由计算的一种IGP协议(内部网关路由协议)。IS-IS最初是ISO组织为OSI七层模型中,无连接网络协议CLNP(类似于TCP/IP协议中的IP)设计的动态路由协议。由于IS-IS有OSPF协议没有的特点(简便性以及扩展性强),因此从OSI7层模型中被迁移到TCP/IP中,也就是集成的IS-IS,我们现在所提到的IS-IS大部分所指是集成的IS-IS。(为了提供对IP的路由支持,IETF在RFC1195中对IS-IS进行了扩充和修改,使它能够同时应用在TCP/IP和OSI环境中,修订后的IS-IS协议被称为集成化的IS-IS。由于IS-IS的简便性及扩展性强的特点,目前在大型ISP的网络中被广泛地部署。)
- 园区网中一般情况使用OSPF,但是不是绝对的,也有可能使用IS-IS。对于运营商网络(骨干网)更多采用IS-IS,因为是根据网络的特点进行路由协议的选择的。
园区网特点:
应用型网络,主要面向企业网用户。
路由器数量偏少,动态路由的LSDB库容量相对偏少,三层路由域相对偏少。
有出口路由的概念,对内部外部路由划分敏感。
地域性跨度不大,带宽充足,链路状态协议开销对带宽占用比偏少。
路由策略和策略路由应用频繁多变,需要精细化的路由操作。
OSPF的多路由类型(内部/外部),多区域类型(骨干/普通/特殊),开销规则优良(根据带宽设定),网络类型多样(四种类型)的特点在园区网得到了极大的发挥。
骨干网特点:
服务型网络,由ISP(互联网服务提供商)组建,并为终端用户提供网络互联服务。
路由调度占据绝对统治地位,路由器数量庞大。
架构层面扁平化,要求IGP作为基础路由为上层BGP协议服务。
LSDB规模宏大,对链路收敛极度敏感,线路费用高昂。
追求简单高效,扩展性高,满足各种客户业务需求(IPV6/IPX)。
IS-IS的快速算法(PRC得到加强),简便报文结构(TLV),快速邻居关系建立,大容量路由传递(基于二层开销低)等一系列特点在骨干网有着天然的优势。
IS-IS协议基本原理
- CLNS的组成部分:(CLNS不是具体的一个协议,而是类似一个大架构)
①CLNP(类似于TCP/IP协议栈的IP协议,IP为TCP/IP传输层服务,CLNP为OSI七层模型中的传输层服务)
②IS-IS:中间系统间的路由协议,类似于IP中的OSPF
③ES-IS:主机系统与中间系统间的协议,类似于IP中ARP、ICMP等协议。 - 对于集成的IS-IS来说,既有TCP/IP协议栈的能力,也有在OSI七层模型里面的能力,因此支持CLNP网络、IP网络,以及IP网络与CLNP的双重网络
IS-IS相关术语
缩略语 | OSI术语 | IETF术语 |
---|---|---|
IS | Intermediate System | Router |
ES | End System | Host |
DIS | Designated Intermediate System | OSPF中的DR |
SysID | System ID | OSPF中的Router ID |
LSP | Link State PDU | OSPF中的LSA |
IIH | IS-IS Hello PDU | OSPF中的Hello报文 |
PSNP | Partial Sequence Number PDU | OSPF中的LSR或LSAck报文 |
CSNP | Complete Sequence Number PDU | OSPF中的DD报文 |
缩略语 | OSI术语 | 含义 |
---|---|---|
NSAP | Network Service Access Point | CLNP地址+服务端口 |
NET | Network Entity Title | 网络实体标记(特殊NSAP,最后一个字节为0,Router ID+area) |
·NSAP:网络服务访问点,实际上在TCP/IP里我们需要配IP地址,但是对于我们CLNP来说,我们只需要去创建CLNP地址。因为我们IS-IS是集成的,因此CLNP地址也做了保留
·NET:通常我们在TCP/IP环境下,我们在路由器上去配置集成IS-IS的时候我们需要去配置一个NSAP,那么这个NSAP,这个NSAP是一个特殊的NET地址,叫做网络实体标记,它的特殊在于最后一个字节是0。
IS-IS地址结构
- NSAP是OSI协议中用于定位资源的地址,相当于OSI网络协议CLNP的地址,类似于IP地址的概念
- NET是一类特殊的NSAP,它最后一位S位是0(SEL=00)
- 整体的NET地址就是如图所示,一个叫做IDP,一个叫做DSP
- IDP里面有AFI,IDI。
- 在DSP里面有高位DSP,systemID,以及选择位
- NSAP大小范围是8Bytes-20Bytes
- 这个是针对原来的IS-IS做了非常详细的划分,但是我们现在如果去配置集成的IS-IS,只需要关注区域ID部分(Area ID),system-ID部分以及选择位(SEL)
IS-IS地址示例
- 49.0001代表Area ID; aaaa.bbbb.cccc代表System ID,以及后面是选择位00(IP网络中固定)
- 观察的时候建议倒着观察,因为最后的选择位00是固定的,aaaa.bbbb.cccc代表的SystemID也是固定的,只有Area ID会进行变化,如果从前往后看很有可能看错。
- AFI是有具体的使用规定的,例如有47.48,49我们到底应该使用哪个,建议可以在做实验的使用49,因为49有本地的意义,好比是IPv4的私有地址。
- 涉及到IS-IS里面我们指定路由器的因素,因此我们需要考虑SystemID的命名方式,实际上SystemID由于是48个比特也就是6个字节,作用和OSPF里面的RouterID实际上非常相像,就是用来表示区域内的某一台路由器的,所以我们也可以使用RouterID来应用,但是由于RouterID是4个字节也就是32个比特,所以实际上长度不够48个比特,因此要想办法补齐12个比特,所以有下列操作。
演示:
Router-ID 10.1.1.1
①每组都变成3个数字
010.001.001.001
②将数字进行重组,变为3组,一组是4个数字
0100.0100.1001 每组都为2个字节,一共是6个字节,就是这个设备的System-ID
System-ID和RouterID一样不能冲突,就是我们在IS-IS区域内识别设备的必备参数
网络分层路由域
- 我们把相关设备划入到不同的区域中,这就是一个整体的IS-IS拓扑。
- IS-IS允许将整个路由域分为多个区域
- 一个路由器目前最多有3个Area ID,配置不同的区域ID是为了平滑的进行区域合并、分割以及转换使用,但是路由器的systemID必须是一个。
- 和OSPF不同的是,IS-IS中,一个路由器必须属于某个区域,而不能是某些接口属于一个区域,其他接口属于另外一个区域
- 在OSPF中存在骨干区以及非骨干区,IS-IS也分为骨干区和非骨干区。IS-IS区域中区分骨干区以及非骨干区的方法,不是通过区域去划分的,而是通过路由器的类型去区分的。例如在上图中,骨干区是由L2设备以及L1/2设备组成的区域为骨干区。
IS-IS路由器的类别
-
我们可以定义路由器的种类,不同的路由器形成区域的Area的层次是不一样的。
-
Level-1 Router :位于非骨干区内部
特点:
-L1路由器只和本区域内的有L1功能路由器(包含L1/L2路由器)形成邻居关系。
-L1路由器只有本区域内的Level1的LSDB(L1 LSDB),LSDB里面是本区域内所有L1路由器的路由信息
-L1路由器通过与自己最近的L1/L2路由器的 ATT BIT字段=1生成指向这台L1/L2罗预期的默认路由作为出口路由(L1区域类似于OSPF的stub区域)因此在转发的时候有两种情况,第一种就是在本区域内,那么就直接通过L1 LSDB生成的路由进行转发即可;第二种情况就是不在本区域内,那么直接通过最近的L1/L2路由器作为连接区域外网络的出口设备(需要注意,对于最近的L1/L2路由器来说,可能出现次优路由) -
Level-2 Router:位于骨干区
特点:
-L2路由器只和本区域内的有L2功能路由器(包含L1/L2路由器)形成邻居关系。
-L2路由器只有本区域内的Level2的LSDB(L2 LSDB),LSDB里面是区域间所有路由信息
-接受本区域内其他L2功能路由器的报文,并按照目的地址将报文转发给其他区域的L2路由器(或者是转发到同一区域的L2路由器)。
-接受来自其他区域L2路由器的报文,并且按照目的地址进行转发。
实际上对于L2路由器来说,有点像Transit网段 -
L1/L2 Router:通常位于区域边界
特点:
-可以与所在区域内的任何级别路由器形成邻居关系;并且和其他区域相邻的L2或者L1/L2路由器形成L2邻居关系
-可能存在两个级别的链路状态数据库;L1 LSDB用来区域内进行路由;L2 LSDB用来区域间路由
-对于L1/L2路由器来说,即承担了L1的职责也承担了L2的职责。
-对于L1/L2路由器来说,如果在L1路由器所在区域内,那么需要通告本区域的L1路由器出口点,也就是发送生成L1 LSP的时候把报文中的ATT bit置位为1,发送给L1邻居。 -
对于我们IS-IS来说,骨干区实际上包含了L1/L2的Router以及L2的Router。区域不能决定IS-IS的骨干,而是由路由器类型决定的。
-
默认情况下华为的路由器初始配置是L1/L2路由器
邻居HELLO报文
- HELLO PDU(Hello protocol data unit):
HELLO报文的作用是邻居发现,协商参数并建立邻居关系,后期充当保活报文。
IS-IS建立邻居关系和OSPF一样,通过hello报文的交互来完成。但是会根据场景分为三种类型的hello报文。
广播网中的Level-1 IS-IS使用Level-1 LAN IIH(Level-1 LAN IS-IS Hello),目的组播MAC为:0180-c200-0014。
广播网中的Level-2 IS-IS使用Level-2 LAN IIH(Level-2 LAN IS-IS Hello),目的组播MAC为:0180-c200-0015。
非广播网络中则使用P2P IIH(point to point IS-IS Hello)。但是其没有表示DIS(虚节点)的相关字段。
IIH报文需要通过填充字段用于邻居两端协商发送报文的大小。 - IS-IS支持的网络类型:(目前IS-IS只支持这两种网络类型)
点对点网络类型(P2P)。
广播多路访问网络类型(Broadcast Multiple Access)。(广播链路中存在DIS,也就是指定中间系统,功能实际上就是创建和更新伪节点,在局域网中每10s周期性发送CSNP来泛洪LSP)
在帧中继等特殊环境下,可以通过创建子接口支持P2P的网络类型。 - OSPF支持的网络类型为4种,分别是点到点、点到多点、广播型网络、NBMA网络
邻居关系建立
- 在P2P链路上,分为两次握手机制和三次握手机制。
两次握手只要路由器收到对端发来的Hello报文,就单方面宣布邻居为up状态,建立邻居关系,不过容易存在单通风险。
通过三次发送P2P的IS-IS Hello PDU最终建立起邻居关系,与广播链路邻居关系的建立情况相同。 - 在广播链路上,使用LAN IIH报文执行三次握手建立邻居关系。
当收到邻居发送的Hello PDU报文里面没有自己的system ID的时候,状态机进入initialized。
只有收到邻居发过来的Hello PDU有自己的system ID才会up,排除了链路单通的风险。
广播网络中邻居up后会选举DIS(虚节点),DIS的功能类似OSPF的DR(指定路由器)。
DIS及DIS与DR的类比
-
DIS与伪节点:DIS是指定中间系统(Designated IS)。伪节点是指在广播网络中由DIS创建的虚拟路由器。
-
DIS的特点:
·在广播网络,需要选举DIS,所以在邻居关系建立后,路由器会等待两个Hello报文间隔再进行DIS的选举。Hello报文中包含Priority 字段,Priority值最大的将被选举为该广播网的DIS。若优先级相同,接口MAC地址较大的被选举为DIS。IS-IS中DIS发送Hello时间间隔默认为普通路由器的1/3,而其他非DIS路由器发送Hello间隔为10秒,因此DIS的Hello时延为10/3 -
DIS与DR的类比:
·选举时优选级的比较,DIS的优先级为0也可以参与选举,默认的优先级为64,并且优先级越大越优先,这点和OSPF里面选举DR是类似的。OSPF中优先级为0不参与选举DR,并且默认的优先级为1
·选举的过程需要一定的时间,OSPF选举DR/BDR过程较为复杂,而ISIS选举DIS等待两个Hello报文间隔就可以,简单快捷。选举结果ISIS只有一个DIS,但是OSPF除了有DR,还有一个BDR用做备份。对于ISIS来说,由于没有BDR这种类型的设备,所以需要更快的速度去收敛选举。
·DIS存在抢占关系,选举结束后,后期有新的Router加入到链路进来,如果优先级比DIS高是可抢占的,但是DR是不可抢占的。
·选举完成后,ISIS网络链路内所有的路由器之间都建立的是邻接关系。OSPF中DRothers只与DR/BDR形成full邻接关系, DRothers之间只有2-way的关系。 -
关于DIS和DR的作用:
进行SPF计算时,都把它当成虚节点,简化MA网络的逻辑拓扑(相同点)。
都是为了减少LSP/LSA的泛洪(相同点)。
在ISIS中还可以由DIS发送CSNP来同步链路的LSDB(ISIS扩展作用)。 -
伪节点的含义其实非常的简单,因为在LSP中我们去描述的只是我们的路由信息,在MA网络里面我们没有描述拓扑信息实际上会出现一定的问题,因为在我们LSP里面可能只有接口信息,但是我们没有拓扑信息,就像OSPF里面我们只有一类的LSA实际上在我们的OSPF里面是不够的,那么伪节点的作用实际上是DIS在伪节点的LSP中通告LAN上的所有邻居,与OSPF的二类LSA非常相似,生成的是伪节点LSP
-
有无伪节点实际上会对我们的LSDB里面的开销值造成影响。影响类似于下图
↓没有伪节点
↓有伪节点
链路状态信息的载体 -
ISIS TLV:
TLV的含义是:类型(TYPE),长度(LENGTH),值(VALUE)。实际上是一个数据结构,这个结构包含了这三个字段。
使用TLV结构构建报文的好处是灵活性和扩展性好。采用TLV使得报文的整体结构固定,增加新特点只需要增加新TLV即可。不需要改变整个报文的整体结构。
网络拓扑结构和路由信息用TLV结构表现使得报文的灵活性和扩展性得到了极大的发挥。 -
LSP PDU(Link State Protocol 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秒。 -
SNP PDU(Sequence Number PDU):
CSNP(Complete Sequence Number PDU)包括LSDB中所有LSP的摘要信息,从而可以在相邻路由器间保持LSDB的同步。 -
PSNP(Partial Sequence Number PDU)包含部分LSDB中的LSP摘要信息,能够对LSP进行请求和确认。
-
CSNP 类似于OSPF的DD报文传递的是LSDB里所有链路信息摘要。PSNP类似于OSPF的LSR或LSAck报文用于请求和确认部分链路信息。
链路状态信息的交互
- P2P网络LSDB同步过程:
建立邻居关系之后,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报文作为确认。 - MA网络中新加入的路由器与DIS 的LSDB同步交互过程:
假设新加入的路由器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 的同步。
IS-IS路由算法
- SPF目前被适用于各种基于链路状态的路由协议,它采用Dijkstra算法计算最短路径。其基本思路是根据LSDB里描述的拓扑信息构建SPT(Shortest Path Tree,最短路径生成树),然后将LSDB里描述的路由信息作为树上的叶子生成最终路由。
iSPF(Incremental SPF,增强SPF算法),主要用于部分拓扑发生变化的情况,在这种情况下不需要重新计算整个网络拓扑,而只是将变化了的少量拓扑进行修正,从而大大节约路由计算时间。
PRC(Partial Route Calculate,部分路由计算算法),主要用于只是路由信息发生变化的情况,在这种情况下不需要重新计算网络拓扑,只是根据原有的拓扑生成新的路由信息即可,从而大大节约路由计算时间。
在路由协议中,使用SPF算法的有OSPF、ISIS。OSPF在12.3版本后集成了ispf特性。需要手动打开。ISIS似乎默认有PRC特性(huawei文档上PRC是依赖ISPF计算出来的最短路径树的)。
这两种特性是对SPF算法的一种改进
总的来说,PRC用来处理网络拓扑不变而路由信息发生改变的情况,而iSPF用来处理网络拓扑结构(最短路径树的结构)发生改变的情况
IS-IS与OSPF的差异性
网络类型和开销方式:
IS-IS协议只支持两种网络类型,且所有带宽默认开销值都是一样的,OSPF协议支持四种网络类型,且会根据不同的带宽设定相应的开销值,对帧中继,按需链路等网络类型有很好的支持。
区域类型:
IS-IS协议分L1/L2区域,L2区域是骨干区域有全部明细路由。L1去往L2只有默认路由。OSPF协议分骨干区域,普通区域,特殊区域。普通区域和特殊区域跨区域访问需要经过骨干区域。
报文类型:
IS-IS协议路由承载报文类型只有LSP报文且里面路由信息是不区分内部与外部的,简单高效,无需递归计算。OSPF协议路由承载报文LSA类型多样,有1/2/3/4/5/7类等。路由级别等级森严,且需要递归计算,适合精细化调度计算。
路由算法:
ISIS协议区域内某个节点上的网段发生变化时,触发的是PRC算法,收敛比较快,计算路由的报文开销也比较小。OSPF协议由于网络地址参与了拓扑的构建,在区域内当网段地址改变触发的是i-spf算法,相对来说过程繁琐复杂些。
扩展性:
ISIS协议任何路由信息都使用TLV传递,结构简单,易于扩展,如对IPv6的支持只增加2个TLV就解决了。且ISIS本身对IPX等协议是支持的。OSPF协议本身是为IP特定开发的,支持IPv4和IPv6的OSPF协议是两个独立的版本(OSPFv2和OSPFv3)。
总结:因此对于使用IS-IS还是使用OSPF,实际上要根据具体的网络特性进行选择,没有绝对的说法。