ISIS路由协议

更新时间:2024-03-30 05:21:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

IS-IS 动态路由协议

1. 前言

为什么要学习IS-IS路由协议,这是我们学习一个协议前要了解的。IS-IS路由协议与OSPF路由协议都是链路状态路由协议,他们不但适合应用于LAN的环境,而且更多使用在城域网的环境中,目前城域网技术的发展有三个主流方向,即IP城域网技术、城域以太网技术、 光城域网技术。在IP城域网中关键技术包括路由技术、端到端的QoS管理、接入网技术和用户/业务管理。在路由技术中最常用的就是BGP、OSPF和 IS-IS三种路由协议。如果想了解城域网的知识,所以需要先学习IS-IS路由协议。

2. OSI与CLNS概述

OSI(Open System Interconnect)参考模型是一个国际化标准,用于增强不同厂商设备之间的互操作性。它定义了一个7层的模型,并且详细规定了各层的功能,同时也确定了计算机网络的标准。

制 定OSI七层参考模型的是ISO(International Organization for Standardization,国际标准化组织)。对于数据通信和信息技术的发展来说,OSI参考模型起到了重要的作用。它提供了开放式的标准架构,使 不同厂商生产的通信设备之间可以进行互联和

互操作。ISO七层模型的每一层都定义了单一的功能,可以将相关功能组合成功能层,从而简化和方便了协议的设 计。

OSI参考模型中的网络服务规范定义了网络设备之间使用无连接通信的功能,也就是CLNS(Connectionless Network Service,无连接网络服务)。顾名思义,使用CLNS,无需在发送数据之间建立端到端的路径。下图中展示的是CLNS中所包括的协议组件,这些协议 组件都由ISO所定义。

正 如上图所示,CLNP(Connectionless Network Protocol,无连接网络协议)、IS-IS、ES-IS(End System—Intermediate System,终端系统—中间系统)都是ISO定义的独立的OSI第三层(网络层)的协议,这些协议分别在不同的ISO标准中定义:

? ?

CLNP:在ISO 8473中定义,定义了CLNS所使用的协议。

IS-IS:在ISO 10589中定义,定义了在使用CLNP的网络中,中间系统与中间系统间进行路由信息的交换方式。

? ES-IS:在ISO 9542中定义,定义在使用CLNP的网络中,终端系统与中间系统间进行路由信息交换的方式。

CLNP 这个名词可能很多人都比较陌生,它是一个OSI网络层协议。打个比方来说,它就相当于我们所熟悉的IP协议,而IP定义为用来为TCP/IP协议栈提供网 络层服务。与IP一样,CLNP也是一个无连接的协议,不提供可靠的数据连接,而且也独立于下层(数据链路层)协议。我们都知道,IP是TCP/IP协议 栈中唯一的网络层协议,高层的

协议和数据全都封装在IP数据包中进行传输。这不同于CLNS网络环境,在CLNS中,CLNP、IS-IS、ES-IS都 是独立的网络层协议,它们都直接被封装到数据链路层的帧中进行传输。

如同IP一样,CLNP也有一套自己的寻址体系,我们称之为CLNP地址。CLNP地址的结构和寻址方式与我们熟悉的IP地址有着很大的差别。

在 OSI术语中,主机(例如PC)被称为ES(终端系统),路由器被称为IS(中间系统)。ES-IS可以说是一种终端系统和路由器之间的“语言”或路由协 议。它用来使同一网段或链路的终端系统和路由器之间可以彼此发现对方,并可以让ES能够获悉其网络层地址。总结来说,ES-IS主要有以下几种功能:

? ? ?

使ES获悉其所在的区域,即区域前缀 在ES与IS之间建立邻接关系

建立数据链路层地址到网络层地址(CLNP地址)的映射

可以看出,ES-IS在CLNS网络环境中的作用就好像IP网络中的ICMP、ARP与DHCP协议的协同工作。

在ES-IS工作过程中,终端系统通过发送ESH(ES Hello)报文到特定的地址,目的是向路由器通告自己的存在。路由器通过监听ESH报文,以发现网络中存在的ES,以便后续将到达特定ES地址的数据包转发给ES。

在ES-IS中,路由器通过发送ISH(IS Hello)报文到特定地址,也向ES通告其自身的存在。ES也监听ISH,如果收到多个IS发送的ISH,ES将随即进行选择,并将所有数据都发送给这个IS。

需要注意的是,通常我们的终端系统,例如PC,都不使用ES-IS,因为这些PC都运行的是TCP/IP协议栈,类似ES-IS的工作都由TCP/IP协议栈中的ARP、ICMP、DHCP协议来完成。

下图所示为CLNS中ES-IS的工作机制:

IS- IS是CLNS中一个重要的组成部分,它是一个用来在CLNS网络环境中使路由器与路由器(IS与IS)之间动态的交换路由信息的协议,IS-IS在 ISO 10589中进行了定义。IS与IS,即路由器与路由器之间的通信使用IIH(IS-IS Hello)报文。IS-IS的设计主要是为了满足CLNS网络中的如下需求:

? ? ? ? ? ? ?

在路由域内执行路由选择协议功能 为网络提供最佳路由

当网络出现故障后,能够快速的收敛 提供无环路的网络 提供网络的稳定性 提供网络的可扩展性 合理利用网络资源

为了满足如上需求,IS-IS被设计成一种链路状态路由协议,并且使用SPF最短路径优先算法以实现快速的收敛和无环路网络。

之 前所提到的IS-IS,它仅支持CLNS网络环境,而不支持IP网络环境中的路由信息交换。后来,IETF在RFC 1195中对IS-IS进行了修改和扩展,称之为集成IS-IS(Integrated IS-IS)或双重IS-IS(Dual IS-IS)。集成IS-IS的制定是为了使其能够同时应用在TCP/IP网络和OSI网络中,使其能够为IP网络提供动态的路由信息交换。

集 成IS-IS是一个能够同时处理多个网络层协议(例如IP和CLNP)的路由选择协议。相反,OSPF只支持IP一种网络层协议,即OSPF仅支持IP路 由。而集成IS-IS可以支

持纯CLNP网络或纯IP网络,或者同时支持CLNP和IP两种网络环境,并为其提供路由功能。集成IS-IS协议经过多年的 发展,已经成为一个可扩展的、功能强大的、易用的IGP路由选择协议,并且在运营商网络中得到了更多的应用和部署,主要用来实现域内的IP路由选择。

3. OSI路由选择

OSI规范中定义了四种路由选择级别,分别为L0、L1、L2和L3。

L0路由选择

L0 路由选择是发生在ES与IS之间的,它通过使用ES-IS进行路由信息的交换。正如之前介绍ES-IS那样,ES通过侦听IS发送的ISH报文来获知IS 的存在。当ES要向其他ES发送信息是,它将把数据包发送到IS。同样,IS也侦听ES发送的ESH报文以获知ES的存在,当有数据包要发送个某个ES 时,它便根据通过ESH获取到的信息发送个特定的ES。这个过程就称为L0路由选择。 L1路由选择

从 图中可以看出,L1路由选择发生在同一区域内的IS之间。所谓区域是指在CLNP地址中拥有相同区域前缀的一组ES和IS。这里的区域概念与OSPF中的 区域非常相似。

同一个区域中的IS之间通过交换路由信息后,便得知了本区域内的所有路径。当IS收到一个到目标地址是本区域内地址的数据包后,通过查看数 据包的目的地址以将数据包发往正确的链路或目的地。可以看到,L1路由也就是区域内的路由选择。 L2路由选择

当 IS收到一个目的地址不是本区域的数据包时,数据包将被转发到其他区域的IS,其他区域的IS再将其转发到正确的目的地或者将数据包中继到其他区域,以便 由其他区域的IS转发到正确的目的地。这样的路由被称作L2路由选择,可以看到,L2路由选择是发生在区域之间的,所以也称作区域间路由。 L3路由选择

了 解了L0、L1、L2路由选择后,我们已经可以猜测出L3路由选择的作用了,L3路由选择就是域间的路由。L3路由选择类似与IP路由中的 BGP(Border Gateway Protocol,边界网关协议),它的目的是在不同的路由域或自治系统(AS,Autonomous System)间交换路由信息,并将去往其他自治系统的数据包转发到正确的自治系统以便到达最终目的地。这些自治系统之间可能拥有不同的路由拓扑,所以不 能直接进行路由信息的交换。通常L3路由选择都是由IRDP(Inter-Domain Routing Protocol,域间路由选择协议)来完成的,IRDP的功能类似于IP路由中的BGP路由协议。

4. IS-IS路由选择

IS-IS所完成的路由功能就是L1和L2路由选择,也就是说IS-IS用来在同一个路由域内进行区域内和区域间的路由选择。

IS-IS路由选择分为两个等级,即L1和L2。IS-IS区域中的L1路由选择负责路由到区域内的终端系统(ES)和IS。在同一个路由选择区域中,所有设备的区域地址都相同。区域内的路由选择是通过查看地址中的系统ID后,然后选择最短的路径来完成的。 L2路由选择是在IS-IS区域之间进行的。路由器通过L2路由选择获悉L1路由选择区域的位置信息,并建立一个到达其他区域的路由表。当路由器收到数据包后,通过查看数据包的目标区域地址(非本区域的区域地址),选择一条最短的路径来路由数据包。

由于IS-IS负责L1和L2等级的路由,IS-IS路由器等级(或称IS-IS路由器类型)可以分为三种:L1路由器(Level 1)、L2路由器(Level 2)和L1/2(Level 1/2)路由器。 L1路由器

属 于同一个区域并参与Level 1路由选择的路由器称为L1路由器。L1路由器类似于OSPF中的非骨干内部路由器。在CLNP网络环境中,L1路由选择负责收集本区域内所有主机和路由 器的信息,可以说L1路由器只关心本区域的拓扑结构。L1路由器将去往其他区域的数据包发送到最近的L1/2路由器上。 L2路由器

属 于不同区域的路由器通过实现Level 2路由选择来交换路由信息,这些路由器成为L2路由器或骨干路由器。L2路由器类似于OSPF中的骨干路由器。在CLNP网络环境中,L2路由器与其他 L2或L1/2路由器交换区域前缀信息。对于IP网络环境,在L1路由选择中,仅在区域内交换IP前缀信息,而不同区域的IP前缀信息由连接到骨干区域的 执行L2路由选择的路由器交换。 L1/2路由器

同时 执行L1和L2路由选择功能的路由器为L1/2路由器,L1/2路由器类似于OSPF中的ABR(区域边界路由器),它的主要职责是搜集本区域内的路由信 息,然后将其发送给其他区域的L1/2路由器或L2路由器;同样,它也负责接收从其他区域的L2路由器或L1/2路由器发来的区域外信息。可以说所有L1 /2路由器与L2路由器组成了整个网络的骨干(Backbone)。

此外,需要注意的是,对于IS-IS来说,骨干必须是连续的,也就是说具有L2路由选择功能的路由器(L1路由器或L1/2路由器)必须是物理上相连的。 总结这三种类型的路由器的作用,可以归纳为:

?

L1路由器负责收集区域内的路径信息

? ?

L2路由器负责收集区域间的路径信息

L1/2路由器负责收集区域内和区域间的路径信息,这类似与OSPF中的ABR

5. IS-IS与OSPF对比 1、IS-IS与OSPF的相同点

从IS-IS与OSPF的功能上讲,它们之间存在着这么大的相似之处,虽然它们在结构上有着差异:

?

IS-IS与OSPF同属于链路状态路由协议。作为链路状态路由协议,IS-IS与OSPF都是为了满足加快网络的收敛速度、提高网络的稳定性、灵活性、扩展性等这些需求而开发出来的高性能的路由选择协议。

? IS-IS与OSPF都使用链路状态数据库收集网络中的链路状态信息,链路状态数据库存放的是网络的拓扑结构图,而且区域中的所有路由器都共享一个完全一致的链路状态数据库。

? ?

IS-IS与OSPF都使用泛洪(flooding)的机制来扩散路由器的链路状态信息。 IS-IS与OSPF都使用相同的报文(OSPF中的LSA与IS-IS中的LSP)来承载链路状态信息。

? IS-IS与OSPF都分别定义了不同的网络类型,而且在广播网络中都使用指定路由器(OSPF中的DR,IS-IS中的DIS)来控制和管理广播介质中的链路状态信息的泛洪。

? IS-IS与OSPF同样都是采用SPF算法(Dijkstra算法)来根据链路状态数据库计算最佳路径。

? IS-IS与OSPF同样都采用了分层了区域结构来描述整个路由域,即骨干区域和非骨干区域。

? 基于两层的分级区域结构,所有非骨干区域见的数据流都要通过骨干区域进行传输。

? IS-IS与OSPF都是支持VLSM(Variable Length Subnet Mask,可变长子网掩码)和CIDR(Classless Inter-Domain Routing,无类域间路由)的IP无类别路由选择协议。

? IS-IS与OSPF都是标准协议。

2、IS-IS与OSPF的不同点 区域设计

OSPF 的骨干区域就是区域0(Area 0),是一个实际的区域。IS-IS与OSPF最大的区别就是IS-IS的区域边界位于链路上,OSPF的区域边界位于路由器上,也就是ABR上。ABR 负责维护与其相连的每一个区域各自的数据库,也就是Area 0骨干区域数据库和Area 1非骨干区域数据库。如下图所示

IS- IS的骨干区域是由所有的具有L2路由选择功能的路由器(L2路由器或L1/2路由器)组成的,而且必须是物理上连续的,可以说IS-IS的骨干区域是一 个虚拟的区域。 这点与OSPF不同,虽然IS-IS中的L1/2路由器的功能相似于OSPF中的ABR,但是对于L1/2路由器来说,它只属于某一个区域 中,并且同时维护一个L1的链路状态数据库和一个L2链路状态数据库,而且L1/2路由器不像OSPF中的的ABR,可以同时属于多个区域中。

与OSPF 相同的是,IS-IS区域间的通信都必须经过L2区域(或者骨干区域),以便防止区域间路由选择的环路,这与OSPF非骨干区域间的流量都要经过骨干区域 (Area 0)的操作是一样的。

通过上图所示的IS-IS区域可以看出,由于IS-IS的骨干区域是虚拟的,所以更加利于扩展,灵活性更强。当需要扩展骨干时,只需添加L1/2路由器或L2路由器即可,这比OSPF要灵活的多。

我们在设计IS-IS区域和路由器类型时,可以遵循以下原则:

? ? ?

不与骨干相连的路由器可以配置为L1路由器

与骨干相连的路由器必须配置为L2路由器或L1/2路由器 不与L1路由器相连的骨干路由器可以配置为L2路由器

纵观IS-IS与OSPF大体的功能,包括邻接关系、路由结构、链路状态操作、使用的算法等都存在着许多相似之处。但在这些相似点之中,或者说在这些基础上,IS-IS与OSPF也是存在着很多的不同点。下表中从各个方面列出了IS-IS与OSPF之间的区别。

IS-IS

OSPF

IS-IS可以支持CLNP和IP两种网络环境 OSPF仅支持IP网络环境 IS-IS所使用的数据包被直接封装到数

OSPF数据包被封装在IP报文中

据链路层帧中

IS-IS是ISO CLNS中的一个网络层协议 OSPF不是网络层协议,它运行在IP之上 IS-IS使用LSP承载所有的路由选择信息 OSPF使用不同类型的LSA承载路由选择信息 IS-IS利用TLV可以灵活的对协议进行扩

OSPF很难进行扩展

IS-IS可以忽略不支持的TLV

网络中所有路由器都必须能够识别所有LSA

1类、2类LSA可以承载多个IP前缀;3类、4

IS-IS PDU可以承载多个TLV字段,只有

类、5类LSA只能承载单个IP前缀,如果需要

一个报头,节省带宽

发送多个IP前缀信息,需要多个LSA IS-IS仅支持广播类型链路与点到点类OSPF可以支持多种网络类型:广播、点到点、型链路

NBMA、点到多点和按需电路(Demand Circuit)

IS-IS邻接关系建立过程简单,仅3步 OSPF需要通过多种状态建立邻接关系 数据库同步在建立邻接关系之后

数据库同步在邻接关系建立之前

IS-IS路由器只属于一个区域,基于节点OSPF路由器可以属于多个区域,典型的是ABR,

分配区域

IS-IS的区域边界在链路上

IS-IS的L1区域(非骨干区域)为末节

OSPF基于接口分配区域 OSPF的区域边界在路由器上

默认情况下,OSPF非骨干区域不是stub区域,

(stub)区域,除非使用路由泄漏(Route

但可以配置为stub区域

Leaking)机制

IS-IS仅在点到点链路上的扩散是可靠

的,在广播链路中通过DIS周期性的发OSPF在所有链路上的扩散都是可靠的 送CSNP来实现可靠性 IS-IS中没有备份DIS IS-IS中的DIS可以被抢占 DIS以3倍的频率发送Hello PDU

OSPF中要选举BDR,以接替DR的角色 OSPF中的DR不能被抢占 DR以正常的频率发送Hello报文

默认情况下,IS-IS的LSP最大生存时间

OSPF的LSA的老化时间为3600s,刷新间隔为

为1200s,刷新间隔为900s,而且定时

1800s,而且是固定值

器的值可调

默认情况下,OSPF的接口cost值根据带宽进行

默认情况下,IS-IS的接口cost值为10

计算 默认情况下,IS-IS保持时间

默认情况下,OSPF的保持时间(dead-interval)

(holding-time)为30s,而且在建立邻为40s,而且为了建立邻接关系,必须使双方的接关系时不需要双方的保持时间匹配 保持时间一致

IS-IS通过将Hello PDU的大小填充至接OSPF通过在DBD报文中嵌入接口MTU字段来检口MTU大小来检查双方的MTU是否匹配 查双方的MTU是否匹配

6. IS-IS寻址

虽 然IS-IS(集成IS-IS)可以用来交换IP路由选择信息,但是对于一个运行IS-IS协议的路由器来说,它必须拥有一个CLNP地址,就算只使用 IS-IS进行IP路由选择信息的交换也需要这样做。因为IS-IS在交换IP路由信息时,使用的还是ISO数据包,IP路由选择信息承载在ISO数据包 中,并且使用CLNP地址来标识路由器并建立拓扑表和链路状态数据库。

CLNP地址与我们熟悉的IP地址有着很大的区别。首先,CLNP地 址是一种基于节点的编址方案,也就是说一个节点(路由器)只需要一个CLNP地址,而IP地址是一种基于链路或者说是基于接口的编址方案,路由器中每一个 接口都需要一个IP地址以进行不同子网间的数据包路由。其次,在地址结构上,CLNP地址与IP地址也有着很大的差别。 NSAP地址

IS- IS将CLNP地址称作网络服务访问点(NSAP,Network Service Access Point),也就是常用的CLNP地址。在OSI参考模型中,每一层为高层提供特定的服务。NSAP定义了适当的服务接口,类似于IP路由器为TCP和 UDP定义的协议类型。

在ISO术语中,数据链路层地址(例如LAN MAC地址、Frame-Relay DLCI等)常被称为子网连接点(SNPA,Subnetwork Point of Attachments)。由于一个网络设备可能连接多个链路,所以需要有多个SNPA地址,但是只需要一个CLNP地址。正如之前介绍ES-IS那 样,ES-IS的主要功能之一就是为节点提供NSAP地址到SNPA地址的映射。 NSAP地址主要包含两个内容:

? ?

节点的CLNP地址 高层进程

NSAP地址相当于IP报头中的IP地址和上层协议。NSAP地址最长为20字节,这要比长度为固定4字节的IP地址要长的多。下图所示为一个NSAP地址的地址格式,其中包括很多域:

NSAP地址由两个主要部分组成,IDP(Initial Domain Part,初始域部分)和DSP(Domain-Specific Part,特定域部分)。

? IDP又分为AFI(Authority and Format Identifier,机构和格式标识符)和IDI(Initial Domain Identifier,初始域标识符):

? AFI字段是一个取值范围为0~99的十进制数,它指定该地址的格式和分配给该地址的机构。AFI字段标识与NSAP相关的高层寻址域和DSP部分的语法。下表中列出了一些有效的AFI值。

? 如 下表中所示,AFI值为49时表示此地址为私有地址。这类似于RFC 1918中规定的私有IP地址范围。IS-IS可以对这些地址进行路由,但不应该将这些地址通告给其他CLNP网络。其他使用AFI值为49的网络可能采 用了不同的编址方案,两种不同的编址方案一起使用可能会产生编址问题。

? IDI用来标识AFI下的子域。例如ISO 6523 ICD地址域有一个4位格式,而ISO DCC用3为格式标识数据国家代码。美国政府使用的ISO 6523 ICD子域的IDI值为0005和0006,即47.0005分配给美国政府的公民组织,47.0006分配给美国国防部。

AFI 地址域 37 X.121 39 ISO数据国家代码(DCC) 41 F.69 43 E.163 45 E.164 47 ISO 6523国际代码指示符(ICD) 49 本地管理(私有) DSP由HODSP(High Order DSP,高序DSP)、ID和SEL(选择符)组成:

? ? ?

HODSP将域划分为多个区域。HODSP大致相当于IP子网。 ID表示系统ID(SysID),SysID用来唯一标识OSI设备。

SEL表示NSAP选择符号(NSEL),用来标识设备中的进程,它大致相当于IP中的端口或套接字。在IS-IS路由选择过程中,没有使用NSEL,所以NSEL始终保持为00。

如下所示为一个完成的20字节的NSAP地址:

在 NSAP地址格式中介绍过,NSAP地址中包含了很多不同的字段,看起来有些复杂。可以将NSAP地址进行简化,其中各种字段可以归类为3个部分:区域 ID、SysID和NSEL。这样解释NSAP格式就显得清晰得多了,这样的结构也称为简化的NSAP格式,如下图所示。

如 上图所示,简化的NSAP地址格式中的区域ID字段包括AFI(第一个字节)和ID(SysID)前面的字段,组成了可变长度的区域地址。虽然SysID 长度为1~8个字节,但是目前实现的IS-IS中,都采用了定长的6字节表示SysID。SEL(NSEL)为1字节。简化的NSAP地址最长也为20字 节。

由于SysID为6字节,NSEL为1字节,那么区域地址部分可为1~13字节不等。由于1字节足够用于定义区域ID,所以在大多数的IS-IS实现中NSAP地址最小长度为8字节。 对 于IP应用程序而言,在NSAP地址中,1字节定义AFI,最少2字节定义实际的区域信息,6字节定义SysID,1字节定义NSEL,所以NSAP地址 最少为10字节。NSAP使用16进制格式进行配置,以AFI(十进制数值)字节开始,NSEL字节(00)结束,用点进行分隔。AFI和NSEL之间的 每隔字段是4个数字(16进制中的2字节)组,用点进行分隔。相反,IP地址使用点分十进制表示法。 如下所示为在路由器中配置的NSAP地址:

NET地址

在 IS-IS路由选择过程中,没有使用NSAP地址中的NSEL,所以NSEL始终保持为00。当NSEL为00时,我们就称这个NSAP地址为 NET(Network Entity Titile,网络实体名)地址,NET地址用来唯一地表示IS-IS路由选择域中的OSI主机。路由器使用NET地址来标识自己。

路由器在发送的链路状态数据包(LSP)中用NET来标识自己,这类似于OSPF发送的LSA中的路由器ID(Router ID)。

在NET地址中,还有三个与其相关的术语:SNPA、电路ID(Circuit ID)和链路。之前已经提到过,在ISO术语中,数据链路层地址常被称为子网连接点(SNPA,Subnetwork Point of Attachments)。

SNPA通常为:

? ? ?

LAN接口的MAC地址。

X.25、或ATM的虚电路(VC)ID,或Frame-Relay中的DLCI(数据链路标识符)。 对于HDLC(高级数据链路控制)接口,SNPA被设置为“HDLC”。

术语电路相当于接口。由于NET地址用来标识整个设备(路由器),所以Circuit ID用来表示不同的接口。路由器按照如下方式为接口指定1字节的Circuit ID。

?

对于点到点接口,SNPA是电路的唯一标识符。例如在HDLC点到点链路上,电路ID为0x00。

NSEL 定义了网络层服务的用户,路由层是特殊的网络层服务用户,它的NSEL值为0。之前多次提到,在IS-IS路由器上配置的NSAP地址采用00作为 NSEL,这时NSAP地址被称为NET。NSEL的值与IP报头中的协议类型或TCP/UDP报头中的TCP、UDP端口号类似,NSEL帮助网络层把 数据发送到适当的应用程序或服务。在OSI分层模型中,网络层服务的是传输层。目标不是路由进程的CLNP数据包具有非0的NSEL值的NSAP地址,表 示节点需要将数据发送到传输层。我们在使用IS-IS进行IP路由选择中,只要记住始终保持NSEL为00即可。

1. IS-IS报文结构

与 OSPF一样,运行IS-IS路由选择协议的路由器也是通过收集其他路由器泛洪的链路状态信息来构建自己的链路状态数据库。在OSPF中,OSPF路由器 通告链路状态信息是通过LSA(Link State Advertisment),在IS-IS中,与LSA具有同样功能的包含链路状态信息的报文称为LSP(Link State Packets,链路状态数据包)。LSP包含了由IS-IS路由器产生的描述其周围环境的路由选择信息。

在IS-IS中,路由协议使用的 三大类报文:Hello报文、链路状态数据包(LSP)和序列号数据包(SNP),Hello报文用来建立和维持IS-IS路由器之间的邻接关系;LSP 用来承载和泛洪路由器的链路状态信息,并且LSP(确切的说应该是链路状态数据库)是

路由器进行SPF计算的依据;SNP用来进行链路状态数据库的同步, 并且用来对LSP进行请求和确认。

下面所示为IS-IS中所使用的PDU数据包类型,使用这些数据包,IS-IS可以完成从邻接关系的建 立、链路状态信息的扩散和链路状态数据库的同步的操作。每种PDU都有一个特定的类型号,在IS-IS的PDU报文头中,有一个PDU类型字段,此字段中 所包含的信息就是PDU的类型号,路由器就是通过类型号来识别所收到的PDU报文类型。 Hello数据包分为三种类型:

? ? ?

L1 LAN IS-IS Hello PDU(类型号15) L2 LAN IS-IS Hello PDU(类型号16) 点到点IS-IS Hello PDU(类型号17)

链路状态数据包LSP分为两种类型:

? ?

L1 LSP(类型号18) L2 LSP(类型号20)

序列号数据包SNP分为四种类型:

? ? ? ?

L1完全序列号数据包(CSNP,Complete SNP)(类型号24) L2完全序列号数据包(CSNP)(类型号25)

L1部分序列号数据包(PSNP,Partial SNP)(类型号26) L2部分序列号数据包(PSNP)(类型号27)

a) IS-IS PDU报头格式

在所有IS-IS PDU起始的8个字节都是该数据包的头部字段,并且对于所有的PDU数据包类型(包括Hello报文、LSP和SNP)都是公用的、相同的。 下图所示为IS-IS PDU数据包起始的8个字节:

Figure . IS-IS header fields

?

Intradomain Routing Protocol Discriminator:域内路由选择协议鉴别符。这是ISO 9577分配给IS-IS的一个固定的值,用于标识网络层PDU的类型,对于IS-IS PDU,该字段的值永远都为0x83。

? ? ?

Length Indicator:长度标识符。标识该固定头部字段的长度。 Version/Protocol ID Extension:版本/协议ID扩展。当前始终为1。

ID Length:ID长度。用于表示源ID(SysID)的长度。值为0表示长度为6字节;值为255表示长度为0,即为空;1~8的整数,表示SysID具有相同长度的字节数。

? PDU Type:PDU 类型。这是一个5bit的字段,用于标识IS-IS数据包的类型。值为15表示L1 LAN IIH;值为16表示L2 LAN IIH;值为18表示L1 LSP;值为20表示L2 LSP;值为24表示L1 CSNP;值为25表示L2 CSNP;值为26表示L1 PSNP;值为27表示L2 CSNP。

? Version:版本。当前为1。

? ?

Reserved:保留位。没有使用的bit位,始终为0。

Maximum Area Addresses:最多区域地址。表示我们可以为一个路由器配置多少个不同的区域前缀。值为0表示最多支持3个区域地址数,默认情况下值为0。

? Additional Header Fields:附加报头字段。至此字段之前的8个字节对于所有的IS-IS PDU都是相同的。附加报头字段将根据不同的PDU类型而不同。

? TLV Fields:TLV字段。用于承载IS-IS TLV。

如下图采集到PDU报头。

b) IS-IS Hello PDU格式

对于L1 LAN IIH PDU和L2 LAN IIH PDU,它们有着相同的报文格式和功能:

Figure 3-5. IS-IS LAN Hello (PDU Types 15, 16).

? ?

Reserved:保留的6bit位。当前没有使用,始终为0。

Circuit Type:电路类型。01表示L1路由器,10表示L2路由器,11表示L1/2路由器。

? ?

Source ID:源ID。发送该PDU的路由器的SysID。

Holding Time:保 持时间。用来通知它的邻居路由器在认为这台路由器失效之前应该等该的时间。如果在保持时间内收到邻居发送的Hello PDU,将认为邻居依然处于存活状态。这个保持时间就相当于OSPF中的dead interval(死亡间隔)。在IS-IS中,默认情况下保持时间是发送Hello PDU间隔的3倍,但是在配置保持时间时,是通过指定一个Hello报文乘数(hello-multiplier)进行配置的。例如,

如果Hello PDU的间隔为10s,Hello报文乘数为3,那么保持时间就是30s(10s x 3)。

? ?

PDU Length:PDU长度。整个PDU报文的长度。包括固定报头和TLV字段。 Priority:优先级。接口的DIS优先级,用来在广播LAN中选举DIS。优先级数值越高,路由器成为DIS的可能性越大。

? LAN ID:局域网ID。由DIS的SysID与1字节的伪节点ID组成,LAN ID用来区分同一台DIS上的不同LAN。

如下图采集到的报文格式。

下图所示为点到点IIH PDU的报文格式:

从 点到点IIH PDU的格式可以看出,大部分字段与L1/L2 LAN IIH PDU的报文格式相同。但是在点到点IIH PDU中没有“Priority”字段,因为在点到点网络上不需要选举DIS。而且使用“Local Circuit ID”代替了LAN IIH PDU中的“LAN ID”字段。

Local Circuit ID(本地电路ID)由发送Hello PDU的路由器分配给这条电路的标识,并且在路由器的接口上是唯一的。在点到点链路的另一端,Hello报文中的本地电路ID可能或也可能不为同样的值。

Figure 3-4. Point-to-Point Hello Packet (PDU Type 17).

c) IS-IS LSP PDU格式

LSP PDU分为L1 LSP和L2 LSP。L1 LSP和L2 LSP各自承载了IS-IS不同层次的路由选择信息,但是它们有着相同的报文格式。

Figure. LSP format

每个LSP都包含着这些重要的信息:LSP ID、LSP序列号、LSP校验和、剩余时间、区域关联状态、超载状态以及区域划分。

? ?

PDU Length:PDU长度。整个PDU报文的长度。包括固定报头和TLV字段。 Remaining Lifetime:剩余时间。此LSP到期前的生存时间。当生存时间为0时,LSP将被从链路状态数据库中清除。

? LSP ID:LSP标识符。用来标识不同的LSP和生成LSP的源路由器。LSP ID包括三个部分:SysID、伪节点标识符(Pseudonode ID)和LSP编号。

? Sequence Number:序列号。LSP序列号主要用于使路由器能够识别一个LSP的新旧版本,这也与OSPF的LSA中携带的序列号是相同的作用。

? Checksum:校 验和。校验和主要用于检查被破坏的LSP或者还没有从网络中清除的过期LSP。当一台路由器收到一个LSP,在将该LSP放入到本地链路数据库和将其再泛 洪给其他邻接路由器之前,会重新计算LSP的校验和,如果校验和与LSP中携带的校验和不一致,则说明此LSP传输过程中已经被破坏。

? P:Partition,分区。表示区域划分或者分段区域的修复位。当P位被设置为1时,表明始发路由器支持自动修复区域的分段情况。

? ATT:Attached, 区域关联。L1/L2路由器在其生成的L1 LSP中设置该字段以通知同一区域中的L1路由器自己与其他区域相连。通常来说就是L2骨干区域相连。当L1区域中的路由器收到L1/2路由器发送的 ATT位被置位的L1 LSP后,它将创建一条指向L1/2路由器的默认路由,以便数据可以被路由到其他区域。虽然ATT位同时在L1 LSP和L2 LSP中进行了定义,但是它只会在L1 LSP中被置位,并且只有L1/2路由器会设置这个字段。

? OL:Overload, 超载。表示路由器的资源状态。如果该bit被置位,就表示路由器发生了超载。超载是指路由器没有足够的系统资源(CPU资源和内存资源)用来处理路由选择 交换信息。被设置了超载位的LSP不会在网络中进行泛洪,并且当其他路由器收到设置了超载位的LSP后,在计算路径信息时不会考虑此LSP,因此最终计算 出来的到达目的地的路径将绕过超载的路由器。设置超载位还可以使数据的传输路径绕过某个特定的路由器。

? IS Type:中间系统类型。该字段表示了此LSP是来自L1路由器还是L2路由器。这也表示了收到此LSP的路由器将把这个LSP放到L1链路状态数据库还是L2链路状态数据库。01表示L1,11表示L2,00与10未使用。

下图是采集到报文。

d) IS-IS SNP PDU格式

SNP PDU分为CSNP和PSNP。其中CSNP包含L1 CSNP和L2 CSNP;PSNP包含L1 PSNP和L2 PSNP。CSNP与PSNP都包含了路由器本地链路状态数据库中LSP的摘要信息。其中CSNP包含的是所有LSP的摘要信息,PSNP包含的是部分 LSP的摘要信息。下图所示为CSNP的报文格式。

当路由域中只需要采用非层次化结构就可以满足网络需求时,可以将所有路由器都部署在一个单一的区域中,这样将无需采用骨干区域以对区域间的数据流进行中转。如下图所示为采用单一L1区域的拓扑:

从 上图中可以看出,单个L1区域中的路由器都只维护一个Level 1链路状态数据库,但这前提是这些路由器都是L1类型的路由器。如果按照默认情况的L1/2路由器,这些路由器之间还将建立L2邻接,并同时维护一个 Level 2链路状态数据库。对于这种不需要骨干区域的拓扑,为了节省路由器的CPU和内存资源,可以将其都设置为L1路由器。

对于之前 的单区域拓扑,我们也可以将所有路由器设置为L2路由器,这样所有路由器之间将建立L2邻接关系,并只维护相同的Level 2链路状态数据库。这时所有的路由器将组成了一个仅存在骨干区域的但区域拓扑。这种拓扑的优点主要是利于后续的网络扩展,很多运营商的单区域网络中都使用 了全L2路由器的拓扑,以便后续区域的添加和骨干区域的扩充。如下图所示为采用单一L2骨干区域的拓扑:

运 行IS-IS的路由器通过泛洪和接收链路状态数据包(LSP)进行路由选择信息的扩散和链路状态数据库的构建。LSP也是IS-IS所使用的三种报文类型 之一。LSP包括两种类型,L1 LSP与L2 LSP。L1 LSP用于承载区域内路由器(L1路由器)的链路状态信息,L2 LSP用于承载区域间(骨干区域)的链路状态信息。L1 LSP只会在单个区域内进行扩散,L2 LSP将在L2骨干区域中进行扩散。

虽然L1 LSP和L2 LSP各自承载了IS-IS不同层次的路由选择信息,但是它们之间有着相似的数据包格式和功能。对于L1 LSP和L2 LSP,PDU类型分别为18和20。如下图所示。

在 PDU长度(PDU Length)之前的字段,对于所有IS-IS PDU都是相同的,PDU长度之后的字段是LSP数据包所特有的。跟随在LSP报文后面的TLV字段,用来通告各种不同的路由选择信息。每个LSP都包含 着如下重要的信息:LSP ID、LSP序列号、LSP校验和、剩余时间、区域关联状态、超载状态以及区域划分。如下图所示,在路由器使用show isis database命令获得的详细信息。

1. LSP剩余时间(Remaining Lifetime)

对 于运行IS-IS的路由器发送的每个LSP,都有一个定时器用来跟踪LSP的生存时间。这样可以保证链路状态数据库及时的清除旧的或无效的链路状态信息。 这与OSPF中的操作机制是一样的。在OSPF中,每个LSA也都有一个老化时间(age-time),默认情况下为3600s。如果一个LSA在链路状 态数据库中保留的时间超过了3600s,那么此LSA将被从链路状态数据库中清除。

每个LSP都有一个最大生存时间,它是每个LSP在被从 链路状态数据库中删除前可以保留的最长时间。ISO 10589中定义LSP的最大生存时间为1200s(20分钟)。当路由

器一生成LSP时,便将剩余时间设置为最大生存时间,然后泛洪到所有的邻接路由 器,并在本区域内进行扩散。LSP的剩余时间随着时间的推移而减少。

在IS-IS中,还存在另外一个定时器,就是LSP刷新间隔定时器。当 路由器生成一个LSP后,便启动这个定时器。当刷新间隔定时器到期后,路由器将重新生成(刷新)这个LSP,并泛洪到本区域内的所有路由器。每当路由器重 新生成新的LSP后,便将LSP的剩余时间重置为最大生存时间。如果某条LSP的剩余时间达到0时还没有收到生成这个LSP的路由器的刷新LSP后,这个 LSP将被从链路状态数据库中清除。ISO 10589中定义LSP刷新间隔为900s(15分钟)。

可以通过调整LSP的最大生存时间和 刷新间隔来影响LSP的泛洪。更大的LSP生存时间意味着路由器在其链路状态数据库中将保留LSP更长的时间,但这可能会造成过于陈旧的路由选择信息被保 留更长的时间。调整LSP的最大生存时间时,也要根据实际情况相应的调整LSP刷新间隔。如果LSP刷新间隔过长,那么可能也会增加其他路由器保留陈旧路 由信息的时间,但是增大LSP刷新间隔可以减少网络资源的开销。如果LSP刷新间隔过短,将增大网络资源的利用率,而且增加了路由器系统资源的开销。此 外,在调整这两个定时器时,要保证LSP最大生存时间大于LSP刷新间隔,以便让路由器在将LSP清除出链路状态数据库之前有足够的时间可以接收到其他路 由器重新生成的LSP。对于这两个定时器的值,推荐使用其默认值,如果不是特殊需求,可以不对其进行修改。只有在非常稳定的网络环境中才推荐使用比默认值 大的LSP刷新间隔。在OSPF中,这两个定时器的值为3600s和1800s。但这里IS-IS与OSPF有一点不同的是,对于剩余时间(OSPF中的 age-time),IS-IS的定时器是从最大生存时间(1200s)递减至0,而OSPF而是从0递加到最大生存时间(3600s),两个定时器在计 数方法上略有不同。

2. LSP标识符(LSP ID)

路由器生成的每个LSP都有一个LSP标识符(LSP ID),LSP主要用来标识不同的LSP和生成LSP的源路由器。就像OSPF中一样,每个LSA都使用通告路由器(通告此LSA的路由器的Router ID)进行标识。每个LSP ID都包括三个部分:

?

SysID

? ?

伪节点标识符(Pseudonode ID) LSP编号(LSP number)

其中SysID为路由器的系统ID,6字节长,用于标识生成此LSP的源路由器,与OSPF中的Router ID相似。

Pseudonode ID长度为1字节,用于标识此LSP是否是由网络中的指定中间系统(DIS,Designated Intermediate System)为网络产生的伪节点LSP。当LSP ID的Pseudonode ID不为0时,则表示此LSP是由DIS为网络产生的伪节点LSP,如果Pseudonode ID为0,则表示这是路由器产生的一个常规LSP。

LSP 编号长度也为1字节,用于标识此LSP是否被分片。在OSPF中,使用了多种类型的LSA来通告路由信息,而在IS-IS中,路由器并不是用多种类型的 LSP来通告路由信息,而是将所有路由信息都封装到一个LSP中进行传输。当LSP多大时,也就是包含的路由信息过多时,数据包将被进行分段,这与我们熟 悉的IP分段是一样的。对于任何的分片操作,都是由路由器的CPU进行处理的,也就是执行进程交换,如果有过多的报文需要进行分片,那么将消耗大量的 CPU资源,影响路由器的正常运行。对于分片的重组也是一样,也是要通过CPU进行处理,这样也会对接收分片的路由器造成严重的后果。IS-IS为了避免 这样的问题产生,采取了一种对LSP预分段的操作机制。路由器将较大的LSP预先拆分成很多更小的LSP后再扩散出去,而无需路由器在底层对其进行分片, 这样可以降低由于分片产生的负面影响。当LSP编号为0时,表示这是LSP的一个分段,编号为1时,表示这是LSP的第二个分段,以此类推。

本文来源:https://www.bwwdw.com/article/uhqr.html

Top