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之间的区别。
6. IS-IS寻址
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
|
IS-IS PDU可以承载多个TLV字段,只有一个报头,节省带宽
|
1类、2类LSA可以承载多个IP前缀;3类、4类、5类LSA只能承载单个IP前缀,如果需要发送多个IP前缀信息,需要多个LSA
|
IS-IS仅支持广播类型链路与点到点类型链路
|
OSPF可以支持多种网络类型:广播、点到点、NBMA、点到多点和按需电路(Demand Circuit)
|
IS-IS邻接关系建立过程简单,仅3步
|
OSPF需要通过多种状态建立邻接关系
|
数据库同步在建立邻接关系之后
|
数据库同步在邻接关系建立之前
|
IS-IS路由器只属于一个区域,基于节点分配区域
|
OSPF路由器可以属于多个区域,典型的是ABR,OSPF基于接口分配区域
|
IS-IS的区域边界在链路上
|
OSPF的区域边界在路由器上
|
IS-IS的L1区域(非骨干区域)为末节(stub)区域,除非使用路由泄漏(Route Leaking)机制
|
默认情况下,OSPF非骨干区域不是stub区域,但可以配置为stub区域
|
IS-IS仅在点到点链路上的扩散是可靠的,在广播链路中通过DIS周期性的发送CSNP来实现可靠性
|
OSPF在所有链路上的扩散都是可靠的
|
IS-IS中没有备份DIS
|
OSPF中要选举BDR,以接替DR的角色
|
IS-IS中的DIS可以被抢占
|
OSPF中的DR不能被抢占
|
DIS以3倍的频率发送Hello PDU
|
DR以正常的频率发送Hello报文
|
默认情况下,IS-IS的LSP最大生存时间为1200s,刷新间隔为900s,而且定时器的值可调
|
OSPF的LSA的老化时间为3600s,刷新间隔为1800s,而且是固定值
|
默认情况下,IS-IS的接口cost值为10
|
默认情况下,OSPF的接口cost值根据带宽进行计算
|
默认情况下,IS-IS保持时间(holding-time)为30s,而且在建立邻接关系时不需要双方的保持时间匹配
|
默认情况下,OSPF的保持时间(dead-interval)为40s,而且为了建立邻接关系,必须使双方的保持时间一致
|
IS-IS通过将Hello PDU的大小填充至接口MTU大小来检查双方的MTU是否匹配
|
OSPF通过在DBD报文中嵌入接口MTU字段来检查双方的MTU是否匹配
|
虽然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即可。