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
IS-IS所使用的数据包被直接封装到数据链路层帧中
IS-IS是ISO CLNS中的一个网络层协议
OSPF
IS-IS可以支持CLNP和IP两种网络环境 OSPF仅支持IP网络环境
OSPF数据包被封装在IP报文中
OSPF不是网络层协议,它运行在IP之上
IS-IS使用LSP承载所有的路由选择信息 OSPF使用不同类型的LSA承载路由选择信息 IS-IS利用TLV可以灵活的对协议进行扩展 OSPF很难进行扩展 IS-IS可以忽略不支持的TLV
IS-IS PDU可以承载多个TLV字段,只有一个报头,节省带宽
网络中所有路由器都必须能够识别所有LSA 1类、2类LSA可以承载多个IP前缀;3类、4类、5类LSA只能承载单个IP前缀,如果需要发送多个IP前缀信息,需要多个LSA
点到多点和按需电路(Demand Circuit) OSPF需要通过多种状态建立邻接关系 数据库同步在邻接关系建立之前 OSPF基于接口分配区域 OSPF的区域边界在路由器上
IS-IS仅支持广播类型链路与点到点类型链OSPF可以支持多种网络类型:广播、点到点、NBMA、路
IS-IS邻接关系建立过程简单,仅3步 数据库同步在建立邻接关系之后 区域
IS-IS的区域边界在链路上
IS-IS路由器只属于一个区域,基于节点分配OSPF路由器可以属于多个区域,典型的是ABR,
IS-IS的L1区域(非骨干区域)为末节(stub)
默认情况下,OSPF非骨干区域不是stub区域,但可
区域,除非使用路由泄漏(Route Leaking)
以配置为stub区域
机制
IS-IS仅在点到点链路上的扩散是可靠的,在
广播链路中通过DIS周期性的发送CSNP来OSPF在所有链路上的扩散都是可靠的 实现可靠性
IS-IS中没有备份DIS IS-IS中的DIS可以被抢占 DIS以3倍的频率发送Hello PDU 默认情况下,IS-IS的LSP最大生存时间为1200s,刷新间隔为900s,而且定时器的值可调
默认情况下,IS-IS的接口cost值为10
OSPF中要选举BDR,以接替DR的角色 OSPF中的DR不能被抢占 DR以正常的频率发送Hello报文
OSPF的LSA的老化时间为3600s,刷新间隔为1800s,而且是固定值
默认情况下,OSPF的接口cost值根据带宽进行计算
默认情况下,IS-IS保持时间(holding-time)
默认情况下,OSPF的保持时间(dead-interval)为40s,
为30s,而且在建立邻接关系时不需要双方
而且为了建立邻接关系,必须使双方的保持时间一致
的保持时间匹配
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。
对于LAN接口,将1字节的电路ID附加到6字节的指定中间系统(DIS)的SysID的后面,例如aabb.ccdd.eeff.01。
术语链路是位于两个IS(路由器)之间的路径,当两个相邻的SNPA可以通信是,链路就处于UP状态。 系统ID(SysID)
已 经了解到SysID是NSAP地址的三个重要组成部分之一,另外两个部分是区域地址和NSEL。根据ISO 10589中的规定,SysID长度可以为1~8个字节。但是目前实现的IS-IS中,都遵循GOSIP2.0标准采用了定长的6字节表示SysID。6 字节的长度也与LAN MAC地址的长度一致。所以在配置路由器的NET地址时,可以使用路由器上某个LAN接口的MAC地址作为SysID,也就是在三层的NSAP地址中嵌入 一个二层的MAC地址。但SysID也可以不为MAC地址,也可以取其他的任意值,但要满足6个字节的长度。
定义SysID时,需要注意以下几点:
•
IS-IS路由域中的每个节点的SysID必须唯一。
精选模板
可编辑 可修改
• •
IS-IS路由域的所有节点的SysID长度必须一致,通常都为6个字节。 在同一区域中的每个节点的SysID必须唯一。
如 果两台路由器属于不同的区域,并且都没有参与到L2的路由选择中,那么就不需要SysID唯一。但如果这两台路由器都连接到L2骨干区域中,即参与L2路 由选择,那么就需要保持SysID唯一。但是推荐按照第一条中描述的,保证IS-IS路由域中的每个节点的SysID都唯一。以免产生路由信息计算问题。
在配置路由器NET地址中的SysID时,有几种方法可行。
• •
第一就是使用LAN接口的MAC地址作为SysID,由于MAC地址是唯一的,所以这样设置可以保证SysID在整个域中都唯一。
第 二种方法就是将IP地址转化成SysID,使用这种方式时通常都使用Loopback接口的地址。具体方法是将带0的淀粉十进制环回IP地址转换成12字 符的地址,然后吧12个字符4个数字为一组,分为3组,以点隔开,以十六进制形式表示6字节的SysID。以下是一个将IP地址转换为SysID的例子。
假设路由器有一个Loopback接口,IP地址为192.168.1.11,转换步骤如下:
对于点分十进制环回IP地址的每一个字节不够3为数字的,使用0在前面进行填充,以补足3为,也就是将192.168.1.11转换为192.168.001.011。
此时IP地址变为了12个数字,然后按照每4个数字一组分为3组,192.168.001.011转换为1921.6800.1011。
1921.6800.1011就作为NET地址中的SysID字段,再加上区域地址和NSEL(00)后便形成了NET地址。
假设区域地址为49.0001,那么使用IP地址转换为SysID的完整NET地址就为: 49.0001.1921.6800.1011.00
由于同一区域内的所有路由器的区域地址是相同的,NSEL为00也是相同的,所以SysID成为区别路由器间不同NET地址的关键,也就是必须要保证SysID唯一。 使用多个NET地址
在ISO 10589中规定,一个节点最多可以拥有3个NSAP地址,但每个地址的SysID必须一致,不同的是区域地址。当一个运行IS-IS的路由器上具有多个 NET地址时,被称为多宿主(Multihoming)。需要注意的是,多宿主并不代表路由器连接到多个区域,而是在一台路由器上配置多个具有不同区域地 址的NET地址,这主要用于区域合、区域分离、重编址。
精选模板
可编辑 可修改
区域合并
使用多宿主功能,可以将不同区域合并到一个区域。一台L1路由器只在本区域内扩散链路状态信息,如果这台路由器连接了两个区域,那么可以实现在多个区域内扩散链路状态信息,使用这个机制,可以有效的完成区域的合并。
如 下图所示,R1与R2都为L1/2路由器。R1与R2分别属于不同的区域49.0001和49.0002,之间建立了L2邻接关系,R1与R2都向L2骨 干区域通告链路状态信息。现在需要将这两个区域合并为一个区域。这时可以为R1赋予两个NET地址,这两个NET地址包含不同的区域地址,分别为 49.0001和49.0002,但是SysID是相同的。由于R1也具有了区域地址为49.0002的NET地址,与R2的区域地址相同,这时根据 IS-IS建立邻接关系的规则,R1与R2之间也建立了一个L1邻接关系,并且拥有一个合并的L1链路数据库。最后可以将R1原先的49.0001的 NET地址删除,这样就完成了区域的合并。
区域分离
区 域分离的操作与区域合并的正好相反。区域分离可以将原有的一个区域分离为两个不同的区域。如下图所示,R1与R2都为L1/2路由器。起初R1和R2属于 同一个区域中,都拥有相同的区域地址49.0001,之间形成了L1和L2邻接关系,共享相同的L1和L2链路状态数据库。现在需要将这两个区域分离开。 与区域合并一样,可以先赋予R2两个NET地址,区域地址分别为49.0001和49.0002。之后再将R2原先区域地址为49.0001的NET地址 删除,这时由于R1和R2处于不同的区域,L1邻接关系将不存在,但L2邻接关系和L2链路状态数据将保留,此时便完成了区域分离。
精选模板
可编辑 可修改
重编址
重 编址过程与区域合并、区域分离相似,重编址可能需要清除一些或者全部路由器的区域前缀,用新的区域前缀代替。如下图所示,现在希望将原先的49.0001 区域迁移到49.0002区域,这就需要更改路由器上的区域地址。R1和R2属于同一个区域49.0001中,要将R1和R2迁移到49.0002区域 中,可以为R1和R2都赋予两个NET地址,两个NET地址包含不同的区域地址,49.0001和49.0002,然后依次删除R1和R2的包含 49.0001区域地址的NET地址,这样就实现了路由器新的NSAP地址的无缝、无冲突的重新配置。
注意,IS-IS多宿主与IP中的辅助地址(secondanary IP)是不同的,辅助地址可以在同一条链路上创建多个隔离的逻辑子网。另外,辅助IP地址是在一条链路上配置多个子网。
精选模板
可编辑 可修改
NSEL
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的报文格式。
精选模板
可编辑 可修改
Level 1/2 Complete Sequence Numbers PDU
• • • •
PDU Length:PDU长度。整个PDU报文的长度。包括固定报头和TLV字段。 Source ID:源ID。发送该PDU的路由器的SysID。
Start LSP ID:起始LSP ID。表示TLV字段中描述的LSP范围的第一个LSP ID。 End LSP ID:结束LSP ID。表示TLV字段中描述的LSP范围的最后一个LSP ID。
如下图所示,是采集到的报文。
精选模板
可编辑 可修改
下图所示为PSNP的报文格式。
精选模板
可编辑 可修改
Level 1/2 Partial Sequence Numbers PDU
通过上图可以看出,PSNP报文的格式与CSNP的相似,只不过没有Start LSP ID和End LSP ID两个字段。由于PSNP携带的只是部分LSP的摘要信息,所以不需要起始和结束字段。 如下图是采集到的报文。
e) IS-IS TLV
根 据不同的IS-IS PDU类型和特定的网络环境,紧跟在各种类型IS-IS PDU之后的是TLV(Type/Length/Value)字段,PDU报头与TLV字段构成了一个完整的IS-IS PDU。在ISO10589和RFC1195这二种当前IS-IS标准中,使用代码(code)这个词,而不是类型(type),但由于TLV用于其他协 议标准中,故TLV比CLV在网络文献中使用的多,在这里我们也使用TVL代替CLV。在IS-IS PDU所使用的各种TLV中,既有ISO 10589中定义的,也有RFC 1195中定义的。ISO中定义的TLV用于CLNP网络环境,但是其中的大多数也用于IP网络环境。RFC中定义的TLV只用于IP环境。对于一个 IS-IS PDU,后面既可以携带支持CLNP协议的TLV,又可以携带支持IP协议的TLV。如果一个路由器不能识别一个TLV,那么将忽略它。
Encoding of Variable Length Fields
如上图中所示,TLV中包括Type、Length和Value三个字段:
精选模板
可编辑 可修改
• • •
Code(Type):表示TLV的类型,不同的TLV使用不同的类型号来区别,Type长度为1字节。
Length:表示TLV中Value字段的长度,长度为1字节,所以这意味着Value字段长度的最大值为255字节。
Value:表示实际承载的值,长度是可变的,最大为255字节。
下表中列出了IS-IS中所使用的各种TLV,以及这种TLV由哪种标准进行定义:
类型 1 2 3 5 6 8 9 10 14 128 129 130 132 133 TLV 区域地址 中间系统邻居(LSP) 终端系统邻居 前缀邻居 中间系统邻居(Hello) 填充 LSP条目 验证信息 LSP缓存 IP内部可达性信息 支持的协议 IP外部可达性信息 IP接口地址 验证信息 ISO 10589 RFC 1195 X X X X X X X X X X X X X X X X
4 区域分段指定L2中间系统 131 域间路由选择协议信息 对于TLV 4,它用于之前我们介绍的区域修复功能;TLV 133是IETF为IP验证而定义的TLV,但是大多数实现中都使用TLV 10来支持验证。
使用TLV的最大优点就是增强了协议的扩展性,当需要扩展协议的功能时,只需要定义新的TLV就可以。下表中列出了部分IETF为增强IS-IS协议的功能所定义的一些新的TLV。 类型 12 TLV RFC 作用 为SNP增加校验和 增加流量工程特性,替代TLV 2 增加流量工程特性 增加节点标识能力,使用主机名代替SysID的显示 增加温和重启动(Graceful Restart)的特性 可选的校验和 3358 22 扩展的IS可达性 3784 134 流量工程路由器ID 3784 137 211 动态主机名 温和重启动 2763 3847 135 扩展的IP可达性 3784 增加流量工程特性和扩展度量,替代TLV 128和TLV 130 精选模板
可编辑 可修改
每种IS-IS PDU都使用特定的TLV,但是有一些TLV也被多种类型的IS-IS PDU所共享,下表中列出了各种IS-IS PDU所使用的TLV:
精选模板
可编辑 可修改
TLV 类型 L1 LAN IIH L2 LAN IIH 点到点IIH L1 LSP L2 LSP L1 CSNP L2 CSNP L1 PSNP L2 PSNP 1 2 3 4 5 6 8 9 10 128 129 130 131 132 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 从上表可以看出,唯一一个被所有IS-IS都使用的是TLV 10,验证信息。下面我们将对这些TLV中一些常用的和重要的TLV进行介绍,关于其他的TLV和扩展的TLV可以参见相应的标准文档。
1. 区域地址TLV(TLV 1)
区域地址TLV列出了始发路由器上配置的区域地址。它只出现在非伪节点LSP中。当一台路由器配置了多个区域前缀时,此TLV将携带多个区域地址。
• • •
类型——1 长度——1字节
值——nx(1字节的地址长度+可变的区域地址)
如下图所示:从采集到数据的代码中可以看到其值为十六进制01,如红框中所示。
精选模板
可编辑 可修改
2. 中间系统邻居TLV(LSP)(TLV 2)
中间系统邻居TLV(LSP)用于LSP PDU中,它列出了始发路由器的IS-IS邻居(包括伪节点)和到达每个邻居的链路的度量值。
• • •
类型——2 长度——1字节 值——1字节
精选模板
可编辑 可修改
3. 终端系统邻居TLV(TLV 3)
终端系统邻居TLV只用于L1 LSP中,它列出邻接的L1路由器和ES。例如通过ES-IS协议发现运行CLNP协议的工作站。
• • •
类型——3 长度——1字节 值——可变
4. 中间系统邻居TLV(Hello)(TLV 6)
中 间系统邻居TLV用于Hello PDU中,它列出了本地路由器所有邻居的SysID。与OSPF中Hello报文中的邻居列表一样,当IS-IS路由器收到其他路由器的Hello PDU后,便将其SysID加入到自己发送的Hello PDU中。在点到点Hello PDU中不使用此TLV,因为在点到点链路中不需要选举DIS。在L1 LAN IIH中只列出L1邻居,同样在L2 LAN IIH中也只列出L2邻居。
• • •
类型——6 长度——1字节 值——可变
精选模板
可编辑 可修改
5. 填充TLV(TLV 8)
填 充TLV用于所有Hello PDU中。为了建立邻接关系,IS-IS协议与OSPF协议一样都需要双方具有同样的接口MTU(Maximum Transmission Unit,最大传输单元)。这种保持两个邻接的路由器具有同样的MTU的机制是必需的。这样就不会产生由于双方的MTU值不匹配而导致一方不能接收另一方 发送的报文。OSPF与IS-IS使用了不同的机制来检查MTU不匹配的情况。在OSPF中,通过在DBD报文中嵌入接口MTU字段使路由器检查MTU是 否匹配。在IS-IS中,路由器将Hello PDU的大小填充至接口MTU的大小。由于一个TLV的长度最长为255字节,所以通常会使用多个填充TLV。
• • •
类型——8 长度——1字节 值——可变
6. LSP条目TLV(TLV 9)
LSP条目TLV只用于CSNP和PSNP报文中。它列出了每个LSP的LSP ID、剩余时间、序列号和校验和。这些字段可以唯一的标识出一个LSP的实例。
• • •
类型——9 长度——1字节 值——可变
精选模板
可编辑 可修改
7. 验证信息TLV(TLV 10)
验证信息TLV是唯一一个用于所有IS-IS PDU的TLV。验证信息TLV只有在配置了验证时才会使用。路由器通过将密码或者密文插入到IS-IS的PDU中实现路由选择信息交互的安全性。
• • •
类型——10 长度——1字节 值——可变
8. IP内部可达性信息TLV(TLV 128)
IP内部可达性信息TLV用于LSP PDU中。它列出了与始发LSP的路由器相直连的IP地址及掩码信息。每个IP前缀都被分配了一个度量值,这个度量值表示该IP前缀对应的链路度量值。该TLV不会出现在伪节点LSP中。
精选模板
可编辑 可修改
9. 支持的协议TLV(TLV 129)
支持的协议TLV用来标识始发路由器所支持的第三层网络层协议,例如仅支持CLNP、仅支持IP或同时支持CLNP和IP。
精选模板
可编辑 可修改
10. IP外部可达性信息TLV(TLV 130)
与IP内部可达性信息TLV一样,这类TLV也只用于LSP PDU中。它列出了IS-IS路由选择域外部的IP地址和掩码信息。这类路由信息通常都是通过路由重分发引入到IS-IS路由域中的外部路由信息。
11. 域间路由选择协议信息TLV(TLV 131)
域间路由选择协议(IRDP)信息TLV只用于L2 LSP中。IETF定义此TLV用于支持在IS-IS路由域边界上与其他域间路由选择协议的交互,用来透传来自外部路由选择协议的信息。
12. IP接口地址TLV(TLV 132)
IP接口地址TLV用于列出始发IS-IS PDU的接口的地址(IP地址)。
13. 扩展的IS可达性TLV(TLV 22)
IETF 后来定义扩展的IS可达性TLV用来代替类型2的中间系统邻居TLV(LSP)。不使用IS-IS扩展度量(使用窄度量)时,只有6bit(0~63)可 以用来表示度量值;当使用IS-IS扩展度量(或称作宽度量)时,这个TLV就用来代替类型2的TLV。扩展的IS可达性TLV使用24bit表示度量 值,扩大了度量的取值范围。
精选模板
可编辑 可修改
14. 扩展的IP可达性TLV(TLV 135)
与 扩展的IS可达性TLV一样,IETF定义扩展的IP可达性TLV用来代替类型128(IP内部可达性TLV)和类型130(IP外部可达性TLV)的 TLV。当使用IS-IS扩展度量(宽度量)时,这个TLV就用来代替类型128和类型130的TLV。扩展的IP可达性TLV使用32bit表示度量 值。 1. 链路状态数据库(LSDB)
IS-IS路由器在区域内交换LSP的过程成为链路状态扩散或链路状态泛洪 (flooding)。泛洪是网络中实现链路状态数据库复制与分发的操作方式,它是链路状态路由选择协议所表现的一种重要现象。IS-IS路由器生成本地 的LSP,该LSP通过启用了IS-IS协议的接口发送到所有的邻接路由器。同样,这台路由器也接收并处理其他路由器生成的LSP。如果一台路由器从邻接 路由器中收到一个LSP,它将在本地链路状态数据库中保留一份该LSP的备份。之后它再把收到的这个LSP从除接收接口之外的其他运行IS-IS协议的接 口泛洪出去,以便其他接口上的邻居可以收到这个LSP。在IS-IS中,点到点链路的LSP扩散与广播网络中的是不同的。
IS-IS支持两 个层次的分层路由选择,层1(Level 1)路由选择和层2(Level 2)路由选择。对于这两个层次的路由选择,分别维护着不同的链路状态数据库。Level 1链路状态数据库支持对区域内的路由,Level 2链路状态数据库支持对区域间的路由。可以说,Level 1链路状态数据库是区域内所有路由器泛洪的L1 LSP的集合,Level 2链路状态数据库是整个路由域中所有L1/2路由器和L2路由器扩散到骨干区域的L2 LSP的集合。如下图所示
在 一个典型的多区域IS-IS路由域中,同时存在着Level 1链路状态数据库和Level 2链路状态数据库。区域内的L1路由器维护着各自区域的Level 1链路状态数据库,Level 2链路状态数据库由具有L2路由选择功能的路由器(L2路由器和L1/2路由器)进行维护,而且所有具有L2路由选择功能的路由器都拥有一个相同的 Level 2链路状态数据库。对于L1/2路由器,它同时维护着两个链路状态数据库,Level 1链路状态数据库和Level 2链路状态数据库。Level 1链路状态数据库中存放的是它所连接的非骨干区域的链路状态信息的集合,Level 2链路状态数据库中存放的是骨干区域的链路状态信息的集合。下图所示为一个典型的IS-IS多区域的拓扑中的链路状态数据库:
精选模板
可编辑 可修改
从 上图中可以看出L1路由器只维护着一个Level 1链路状态数据库,L1/2路由器维护着两个(Level 1和Level 2)链路状态数据库。默认情况下路由器同时支持L1路由选择和L2路由选择,即L1/2类型的路由器。如果某台路由器无需参与到骨干区域的路由选择时,可 以将其设置为L1路由器,这样可以节省路由器的CPU与内存资源。
当路由域中只需要采用非层次化结构就可以满足网络需求时,可以将所有路由器都部署在一个单一的区域中,这样将无需采用骨干区域以对区域间的数据流进行中转。如下图所示为采用单一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的第二个分段,以此类推。
1图是常规LSP的伪节点ID为0,并且这是LSP的第一个分段,或者未分段。2图是伪节点LSP的伪节点ID不为0。3图LSP ID的伪节点ID为0,并且LSP编号为1,表示这是一个常规LSP的第二个分段。如下图所示:
精选模板
可编辑 可修改
3. LSP序列号(Sequence Number)
LSP 序列号是一个用4字节(32bit)进行表示的无符号整数。它的取值从0开始,每次递增1,所以取值范围为0~4294967295。当一台运行IS- IS的路由器接入到网络中后,它产生的第一个LSP的序号为1。当网络环境发生变化时,路由器将重新生成LSP,并将LSP序列号加1。同样,当到达 LSP的刷新间隔后,路由器将刷新此LSP并扩散到网络中,这时LSP序列号也同样加1。可以看出,LSP序列号主要用于使路由器能够识别一个LSP的新 旧版本,这也与OSPF的LSA中携带的序列号是相同的作用。
当一个路由器从故障中恢复并重新接入到了网络中,这时它也将生成一个序列号为 1的LSP报文。这时区域内的其他路由器将收到这个序列号为1的LSP。如果其他路由器还未将链路状态数据库中之前由故障路由器产生的序列号较大的LSP 清除,并且LSP中的内容都是相同的,这时它将认为本地链路数据库中的LSP具有更新的版本,便将扩散这个序列号较大的LSP。当恢复故障的路由器收到这 个LSP后,发现自己的LSP与收到的LSP的序列号不匹配,那么它将产生一个比收到的LSP的序列号大1的LSP的副本,这样可以是LSP序列号接近于 出故障前的LSP序列号的值。
4. LSP校验和(Checksum)
当 路由器生成一个LSP后,为了保证LSP中信息的完整性,它将对LSP进行校验和计算,然后封装进LSP的LSP校验和字段(checksum)。校验和 的计算包括从LSP中的剩余时间字段之后的字段一直到数据包的末尾,由于剩余时间是一个不断变化的字段,所以校验和计算将不包括这部分内容。校验和主要用 于检查被破坏的LSP或者还没有从网络中清除的过期LSP。当一台路由器收到一个LSP,在将该LSP放入到本地链路数据库和将其再泛洪给其他邻接路由器 之前,会重新计算LSP的校验和,如果校验和与LSP中携带的校验和不一致,则说明此LSP传输过程中已经被破坏。
精选模板
可编辑 可修改
当路由器收到了一个被破 坏的LSP后,会采取一个清除的操作。它将该LSP的剩余时间设置为0然后再泛洪到网络中。当网络中的其他路由器收到这个剩余时间被置为0的LSP后,会 将其本地链路状态数据库中相应的LSP清除。当产生这个被破坏的LSP的源路由器收到这个剩余时间被置为0的LSP并发现这个LSP是自己生成的后,会重 新生成一个正确的LSP然后泛洪到网络中。
IS-IS的这种LSP清除操作虽然可以有效的清除网络中被破坏的LSP,给运行IS-IS路由 协议的网络提供了一种自动修复的能力,但是它也带来了一种负面的影响。如果网络中的介质存在问题,就有可能产生LSP被连续破坏的现象。这些被破坏的 LSP会被路由器不断的清除,同时源路由器也会不断的重新生成新的LSP,这种现象被称为LSP破坏风暴。LSP破坏风暴将消耗大量的网络资源。我们可以 对路由器进行配置,使其在收到被破坏的LSP后忽略它,即丢弃被破坏的LSP,从而启动清除操作。在后续IS-IS配置章节中将介绍具体的配置方法。
5. 区域修复(Partition)
在 LSP报头中最后一个字节的P(Partition)位占1bit,表示区域划分或者分段区域的修复位。当P位被设置为1时,表明始发路由器支持自动修复 区域的分段情况。ISO10589中描述了如何通过建立一条穿过L2骨干网的L1路由来修复一个被隔离的L1区域。这种方式利用了每个区域与骨干网之间的 连通性以及骨干网的连接性在骨干网中重新连接区域从而建立一条修复路径。这主要通过在每个区域中选举出一个具有L2路由功能的路由器作为区域指定的L2中 间系统并在区域间建立一个被称作虚链路或虚连接的特殊邻接关系来实现。虚链路实现了穿过骨干网的L1修复路径。但是目前大多数的实现都不支持此区域修复功 能。
精选模板
可编辑 可修改
如 上图所示,区域2中,由于最下方的两个L1路由器间的链路故障,导致了整个L1区域被分离,使得路由信息不能正常交换。通过在骨干区域 (Backbone)区域中建立一条虚链路(粗线表示)来连接两个被分离的L1区域,逻辑上修复了被分离的L1区域,使得区域内信息可以正常交换。
6. 区域关联(Attached)
在 LSP报头中最后一个字节的ATT(Attached)位占4bit,表示区域关联位。L1/2路由器在其生成的L1 LSP中设置该字段以通知同一区域中的L1路由器自己与其他区域相连。通常来说,这就意味着这个路由器与L2骨干区域相连。ATT位中的4bit用来表明 相连的区域是使用哪一种度量方式。如下图所示。
精选模板
可编辑 可修改
• • • •
第4位:默认度量 第5位:延迟度量 第6位:开销度量 第7位:差错度量
在 IS-IS与OSPF中,将骨干区域的路由(OSPF中的Area 0,IS-IS中的L2区域)通告到非骨干区域(OSPF中的非Area 0区域,IS-IS中的L1区域)的方式是不同。在OSPF中,连接Area 0和非骨干区域的ABR通过3类LSA(Network Sumary LSA,网络汇总LSA)将路由器从骨干区域通告到非骨干区域。但对于IS-IS来说,L1/2路由器从来不会将路由从L2骨干区域通告到L1区域。如果 是这样,那L1区域中的路由器是如何得知区域外的路由器信息?如何将数据发送到其他区域?
在ISO 10589中,定义IS-IS的非骨干区域为末节区域(Stub Area),我们可以把IS-IS的L1区域想象成OSPF中的完全末节区域。OSPF的完全末节区域不允许区域外路由和外部路由(来自其他路由域)的进 入,完全末节区域中的路由器通过ABR通告的一条默认路由作为外出区域的路径。同样,IS-IS的L1区域中的路由也是通过一条指向L1/2路由器的默认 路由将数据路由到其他区域。当L1区域中的路由器收到L1/2路由器发送的ATT位被置位的L1 LSP后,便知道生成此LSP的路由器与其他区域(L2骨干区域)相连,即一个L1/2路由器,这时它将创建一条指向L1/2路由器的默认路由,以便数据 可以被路由到其他区域。
对于上述的这种操作方式,非骨干区域中的路由器对区域外的拓扑一无所知,只是单纯的依靠默认路由将数据转发到其他区 域,在通向区域外有多个出口时,这可能会产生次优路径的选择。在RFC 2966中定义了一种可以将L2路由通告到L1区域的操作方式,术语称之为“路由泄漏(Route Leaking)”。使用路由泄漏机制,可以使L1/2路由器以受控的方式将特定的L2路由通告到L1区域中,以避免次优路径的选择。
虽然ATT位同时在L1 LSP和L2 LSP中进行了定义,但是它只会在L1 LSP中被置位,并且只有L1/2路由器会设置这个字段。
精选模板
可编辑 可修改
7. 超载(Overload)
在 LSP报头中最后一个字节的OL(Overload)位占1bit,表示超载位。此位用来表示路由器的资源状态。如果该bit被置位,就表示路由器发生了 超载。超载是指路由器没有足够的系统资源(CPU资源和内存资源)用来处理路由选择交换信息。被设置了超载位的LSP不会在网络中进行泛洪,并且当其他路 由器收到设置了超载位的LSP后,在计算路径信息时不会考虑此LSP,因此最终计算出来的到达目的地的路径将绕过超载的路由器。设置超载位还可以使数据的 传输路径绕过某个特定的路由器。
当路由器的系统资源不足时将会自动在发送的LSP中设置超载位,或者可以通过特定的命令可以手工设置超载位。
8. 中间系统类型(IS Type)
在 LSP报头中最后一个字节的中间系统类型(IS Type)位占2bit,路由器的类型。该字段表示了此LSP是来自L1路由器还是L2路由器。这也表示了收到此LSP的路由器将把这个LSP放到L1链 路状态数据库还是L2链路状态数据库。该2bit中01表示L1;11表示L2;00与10未使用。
2. DIS和伪节点
LSP ID中包括一部分称为伪节点标识符(Pseudonode ID),用来标识此LSP是否是由网络中的指定中间系统(DIS,Designated Intermediate System)为网络产生的伪节点LSP。
在 广播类型的网络(LAN)中,IS-IS需要为每个网段选择一个指定中间系统DIS,这里的指定中间系统DIS的作用与OSPF中的指定路由器DR的非常 相似。在OSPF网络中,DR用来负责将链路状态信息泛洪到每个非DR路由器,并且帮助其进行链路状态数据库的同步。在IS-IS中也是如此,为了使链路 状态信息更加准确和实时的同步给网络中的所有路由器,并且要减小带宽的利用率和路由器的处理开销,IS-IS也要在广播网络中选举出一个路由器(DIS) 来达到这个目的。
在IS-IS中选举DIS的过程也是非常简单的。每个运行IS-IS协议的路由器的接口都拥有一个优先级 (Priority),默认的优先级为64,同样也可以通过命令手工修改默认的优先级。路由器之间发送的Hello PDU中将携带接口的优先级信息。每个路由器收到网络中其他路由器发送的Hello PDU后,通过比较优先级来进行DIS的选举。优先级数值越大的路由器将被选举为此网段的DIS。这里与OSPF不同的是,在OSPF中,如果接口的优先 级为0,那么这台路由器将被认为没有资格成为此网段的DR。在IS-IS中,如果接口的优先级为0,这仅仅表示最低的优先级,但是此路由器还拥有成为 DIS的资格。当两台路由器的接口优先级相同时,那么拥有更大的SNPA(在LAN中通常为MAC地址)的接口的路由器将成为DIS。在OSPF中如果优 先级相同将比较Router ID 。
在OSPF中,选举完DR后,还将选举出一个备份DR,BDR(Backup DR),以用来在原先DR出现故障时接替新的DR角色,并重新选举出BDR。但在IS-IS中,将不进行备份DIS的选举。如果DIS出现故障了,其他路 由器将会重新选举出一个DIS。其次,在OSPF中,DR和BDR
精选模板
可编辑 可修改
的选举是非抢占模式的,也就是说当有更优优先级的路由器加入到现有网络中后,也不会抢占 原先DR和BDR的角色。从某种意义上来讲,在OSPF网络中,第一台启动的路由器将成为网络的DR,第二台启动的路由器将将成为BDR。与OSPF相 比,DIS的选举是抢占的,即当有更优DIS资格路由器加入网络后,它会成为网络中新的DIS。这样,每次DIS的变更必须泛洪一组新的LSP。
精选模板
可编辑 可修改
默 认情况下,运行IS-IS的路由器将以每10s的间隔发送Hello PDU。但是对于一个DIS来说,由于它在网络中起到重要的作用,所以它发送Hello PDU的间隔的频率将是其他路由器的3倍,也就是说DIS以每3.3s的间隔发送Hello PDU。这样其他路由器可以迅速检测出DIS出现故障并开始新的选举过程,增加了网络的收敛速度。
另外,在OSPF中,非DR和非 BDR(DROTHER)路由器只与DR与BDR建立邻接关系(FULL关系)。但在IS-IS中,所有的路由器之间都会建立邻接关系,而不仅仅是 DIS。在IS-IS网络中,每一台路由器都已组播方式发送它们的LSP数据包给所有的邻居路由器。DIS通过使用序列号数据包(SNP)来确保LSP泛 洪的可靠性。关于序列号数据包的详细信息将在下面章节中进行介绍。
在ISO 10589中定义了3种类型的DIS:
• • •
L1 DIS L2 DIS
部分指定的L2 DIS
部分指定的L2 DIS用于区域修复中,由于多数实现不支持区域修复,所以不对部分指定的L2 DIS进行介绍。
对 于IS-IS来说,需要在一个网络上分别为L1和L2选举出单独的DIS,即L1 DIS和L2 DIS。对于一个接口上的优先级也分为L1优先级与L2优先级,而且这两个优先级可以不同。网络中的L1 DIS和L2 DIS可以是相同的路由器也可以是不同的路由器,即某台路由器可能是L1的DIS,但是它可能不是L2的DIS。我们可以通过命令调整接口默认的L1优先 级和L2优先级来影响DIS的选举结果。
L1 DIS和L2 DIS需要为网络生成伪节点LSP,向广播网络中的所有路由器通告链路状态信息。同时L1 DIS和L2 DIS也要负责网络中的链路状态数据库的同步工作,保证网络中所有路由器都拥有一致的链路状态数据库。
在 IS-IS中,整个网络被视为一个伪节点,伪节点是一个虚拟的节点,由选举出的DIS代表。使用DIS主要是为了减少广播网络中需要管理许多邻接关系的复 杂性,同时利用高效的LSP扩散最小化带宽占用。伪节点是一个虚拟的节点。DIS作为伪节点的代表通过发送伪节点LSP会通告与之相连的所有路由器。伪节 点LSP相当于OSPF中的2类LSA(Network LSA,网络LSA)。伪节点LSP中只包含关于邻接路由器的信息,用于建立网络拓扑图和SPF计算。
在IS-IS中,点到点类型的链路上上无需选举DIS,因为链路两端只连接两个路由器。这也与OSPF中一样,对于OSPF的点到点链路,也无需选举DR和BDR。
精选模板
可编辑 可修改
下表中所示为IS-IS在广播类型链路与点到点类型链路上之间操作的比较:
广播链路 点到点链路 适用的网络类型 LAN(Ethernet等)、全互联WAN PPP、HDCL、部分互联WAN Hello PDU定时器 Hello PDU类型 是否使用DIS 邻接关系数 10s,DIS为3.3s L1 IIH、L2 IIH 是 n(n-1)/2 10s 点到点IIH 否 n-1 3. 路由选择信息扩散
SNP 通过描述链路状态数据库中部分或全部的LSP信息来保证路由器之间链路状态数据库的同步。此外,SNP还可以用来进行LSP的请求和确认。因此,SNP也 具有类似OSPF中的LSR(Link State Request,链路状态请求)、LSAck(Link State Acknowledgement,链路状态确认)和DBD(Database Description,数据库描述)报文的作用。 SNP分为两种类型:
• •
完全序列号数据包(CSNP,Complete Sequence Number Packets) 部分序列号数据包(PSNP,Partial Sequence Number Packets)
CSNP 与PSNP具有相似的数据包格式,并且都携带了链路状态数据库中的LSP摘要信息。对于CSNP,数据包中携带了路由器链路状态数据库中所有LSP的摘要 信息,而PSNP顾名思义,只携带了一部分LSP的摘要信息,CSNP和PSNP分别用于不同的操作机制中。路由器为L1和L2分别产生CSNP和 PSNP,其中CSNP包含L1 CSNP和L2 CSNP,同样PSNP包含L1 PSNP和L2 PSNP。例如,L1 CSNP中包含路由器L1链路状态数据库中所有LSP的摘要信息,L2 CSNP中则包含路由器L2链路状态数据库中所有LSP的摘要信息。
所谓LSP的摘要信息,并不是某个LSP的所有内容,摘要信息只是包含了能够唯一标识某个LSP的必要的信息,这些信息是从LSP报头中提取出来的。LSP摘要信息包括:
• • • •
LSP ID 剩余时间 序列号 校验和
这些字段之前都已经在介绍LSP报文结构时进行了详细的介绍。使用这些字段,路由器就可以唯一的标识出一个LSP。注意,LSP摘要信息并不包括LSP承载的具体的地址、掩码等信息,这些信息都是由TLV字段进行承载。
在 广播网络中,路由器使用CSNP来保证链路状态数据库的完整性,并且只有DIS才会发送CSNP报文,DIS发送CSNP报文的间隔为10s。CSNP报 文中描述了DIS的链路状态数据库中所有LSP的摘要信息。当其他路由器收到DIS发送的CSNP后,会使用CSNP中的LSP摘要信
精选模板
可编辑 可修改
息与与本地的链路状 态数据库中的LSP进行比较,进行比较的目的是确定本地链路状态数据库中的信息是否已经同步和完整。如果路由器发现本地数据库中缺少某个LSP条目,那么 它将使用PSNP向DIS请求这个缺少的LSP条目。这个PSNP报文中包含就是请求的LSP条目的摘要信息。当DIS收到其他路由器发送的PSNP报文 后,将会发送一个完整的LSP报文,这个LSP就是其他路由器所缺少的LSP条目。在广播网络中,DIS使用周期性的CSNP报文向网络中发送同步链路状 态数据库的信号,而其他路由器使用PSNP报文来请求缺少的LSP条目。
精选模板
可编辑 可修改
在IS-IS的点到点类型的网络中,链路状态数据库同步的操作与广播网络中略有不同,而且路由器发送CSNP与PSNP报文的方式和其作用也有一些差别。
在 点到点网络中不存在DIS,路由器不会周期性的发送CSNP报文,CSNP报文只在链路链路被激活时发送一次,而且链路两端的路由器都会发送CSNP报文 以描述本地链路状态数据库中所有LSP的摘要信息。当路由器发送对端发送的CSNP中含有本地缺少的LSP信息时,也会使用PSNP报文向对端请求 LSP。当对端收到PSNP报文后,将向请求方发送包含完整LSP信息的LSP报文,这点上与广播网络中的操作是相同的。但是在点到点链路上,收到LSP 报文的路由器还会向对方再次发送一个PSNP报文以对之前收到的LSP进行确认。可以说,在点到点网络中的LSP交换是可靠的。这点与广播网络不同,在广 播网络中路由器不使用PSNP报文对收到的LSP进行确认,而是通过DIS周期性地发送CSNP报文以弥补广播网络中不可靠的LSP交换。 在点到点链路上,路由器使用PSNP对收到的LSP报文进行确认,所以在点到点链路上是可靠的泛洪机制。
IS- IS路由协议支持两种网络类型:广播链路和点到点链路。默认情况下,IS-IS将广播网络和NBMA网络看作是广播类型。对于封装了PPP或HDCL等协 议的链路看作是点到点类型。对于NBMA网络中的主接口和点到多点子接口,IS-IS将其看作是广播类型;对于NBMA网络中的点到点子接口,将其看作是 点到点类型。 IS-IS不像OSPF那样,提供了对NBMA网络(例如Frame-Relay、ATM)的专门支持。对于NBMA网络,IS-IS认为其网络拓扑是 PVC全互联(mesh)的,就是把它看作广播网络。但如果实际网络拓扑中并不是PVC全互联的结构时,例如部分互联的结构和Hub-Spoke结构,推 荐使用点到点类型网络,即使用点到点子接口,以免造成NBMA网络中的链路状态数据库同步出现问题。
当我们使用点到点子接口将NBMA网络 转化为点到点的链路时,整个NBMA网络将产生过多的PVC部分互联或全互联的网状结构,但这将产生一定的负面影响,会使网络中产生大量的LSP泛洪流 量。我们都知道,运行IS-IS的路由器当接收到一个LSP报文后,会将此LSP从除接收接口以外的所有启用了IS-IS协议的接口泛洪出去,以使网络中 的其他路由器都可以接收到此LSP。但是这种泛洪机制对于存在大量部分互联或全互联的网络将产生过多冗余的LSP扩散。 所谓全互联或全网状 网络拓扑,是指所有路由器都与其他路由器向连接(通常是点到点子接口)。在这样的一个网络中,当一台路由器从某接口收到邻居泛洪过来的LSP后,由于它并 不知道这个LSP是否已经被其他邻居路由器收到,所以会再从其他接口泛洪出去,即使其他路由器的链路状态数据库中已经存在这个LSP。如果网络中有n个路 由器的话,那么网络中的每台路由器都会扩散n-2条冗余的LSP,这样总共被泛洪的多余的LSP将为(n-1)x(n-2),条而这些LSP的扩散是多 余。如果每台路由器都刷新一条LSP的话,那么这个数量还将会成倍数的增长,导致了大量带宽资源的浪费。
精选模板
可编辑 可修改
为了解这种在全互联或高度互联的网 络中出现的LSP泛洪的冗余现象,IS-IS提供了一种解决方案——IS-IS全通组,也称作Mesh组。IS-IS全通组在RFC 2973中进行了定义。所谓全通组,就是假设所有路由器之间都是完全互联的,每个路由器都会直接收到其他路由器泛洪的原始的LSP的拷贝。
可以将路由器的接口加入到某个全通组中,一个路由器上可以存在多个全通组,全通组内接口之间的LSP泛洪是受限制的,全通组之间的LSP泛洪是正常的操作,未加入全通组的接口与全通组之间也是正常的LSP泛洪操作。
以下为使用了IS-IS全通组后路由器对LSP的处理方式:
•
如果路由器从一个接口收到LSP后,路由器将不会把它再从与接收接口属于同一个全通组的接口泛洪出去,但路由器将向其他全通组内的接口和其他不属于全通组的接口泛洪LSP。 • • •
如果接收接口不属于任何全通组,那路由器也将向其他全通组内的接口和其他不属于全通组的接口泛洪LSP。
使用IS-IS全通组来解决高度互联的网络中的冗余LSP扩散的问题时需要注意一下几点: 全通组只是一个路由器本地的概念,接口加入的全通组也只是本地有意义的,不同路由器的mesh group编号无需保持一致,但通常推荐的做法是为全互联的一组设备使用同一个mesh group编号。 • •
全通组的操作方式只是对于路由器收到的LSP有效,对于由路由器本地生成的LSP将按照正常的操作方式,被泛洪到所有启用了IS-IS协议的接口。
通常全互联或高度互联的网络拓扑的设计的初衷是为了提供链路的冗余性,使得当某条链路出现故障时路由器仍然可以收到泛洪的LSP。使用全通组会在一定程度上破坏了网络的健壮性,所以在部署全通组技术时应该慎重的设计全通组的结构。
精选模板
可编辑 可修改
4. IS-IS度量与扩展度量 1. IS-IS度量
每 一种路由协议都使用度量值来衡量到达某个目的地所经路径的优劣。在RIP路由协议中,使用跳数(hop)作为路由的度量值,即到达目的地所经过的路由器的 数目;在OSPF路由协议中,使用花费(cost)作为路由的度量值。而且在OSPF中,接口的花费值是通过接口的带宽计算出来的,接口带宽越大,花费值 越小,也就是更有可能被选为最佳路径,OSPF的花费值与带宽是成反比的。
在IS-IS标准中,定义了四种类型的度量值:
• • • •
默认度量——默认的度量类型。 延迟度量——表示链路的传输延迟。 开销度量——表示链路的开销。 差错度量——表示链路的出错概率。
虽 然IS-IS定义了四种类型的度量,可以通过多种不同的方式衡量链路的可靠性,但是多数实现中,包括在锐捷路由器中,只支持默认度量。默认度量就相当于 OSPF中花费(cost)值。默认度量是域中所有路由器都必须支持的。延迟度量、开销度量和差错度量都是可选类型,它们主要是为支持 QoS(Quality of Service,服务质量)的路由选择而定义的。与OSPF的自动计算cost值不同(通过带宽进行计算),默认情况下,IS-IS的所有接口的cost 值都为10,它不是通过带宽进行计算的。所以如果使用接口默认的cost值的话,IS-IS的度量就相当于RIP中的条数,这在包含不同链路类型和链路速 度的网络中会造成次优路径的选择。
在实际网络环境中,强烈推荐根据接口的带宽修改默认的接口cost值,以避免次优路径的选择。 2. IS-IS扩展度量(宽度量)
默 认情况下,IS-IS接口的cost值为10,而且在不使用扩展度量(或称窄度量)的情况下,接口的cost值的取值范围只能为0~63,即在TLV字段 中(TLV类型2和TLV类型128)只能够使用6bit来表示接口度量值。显然最大值为63的接口cost将带来很大的局限性。IETF通过定义扩展的 TLV类型(TLV类型22和TLV类型135)来增大度量值的取值范围。在TLV类型22中提供了24bit的度量值字段,TLV类型135提供了 32bit的度量值字段。
(责任编辑:admin)
. .
精选模板
因篇幅问题不能全部显示,请点此查看更多更全内容