协议-ISIS基础知识

来源:互联网 发布:音乐创作软件 编辑:程序博客网 时间:2024/06/06 09:29

ISIS基础知识

作者:Danbo

ISIS属于ISO协议簇
CONS(Connection Network Server)面向连接网络服务
CLNS(Connection Network Server)无连接网络服务


ISIS是ISO定义的OSI协议栈中无连接网络服务CLNS的一部分,用于动态路由数据包


CLNS由以下三个协议构成:
CLNP:类似TCP/IP中的IP协议。IP协议为TCP/IP传输层服务。CLNP为OSI传输层服务。
ISIS:中间系统的路由协议,类似于IP中的OSPF
ES-IS:主机系统与中间系统间的协议,就像IP中的ARP,ICMP等。


我们发现ISIS是封装在二层中的,这点与IP中的协议是不同的。


ES-IS:同一网段或链路的ISO终端系统和路由器之间自动交换信息便于邻接点发现。路由器发送IS报文HELLO包(ISH)
主机发送ES报文HELLO包(ESH)。在直连节点间发送的HELLO报文包含通信节点的网络层地址和数据链路层地址。包
含地址分配,网关选择等功能。


IETF定义了用OSI ISIS实现在TCP/IP和OSI双重环境下的路由选择,也就是集成的ISIS或者双重ISIS。
这样集成的ISIS可以支持纯CLNP网络或者纯IP网络,或者同时运行CLNP和IP的双重网络。
当前的ISIS规范中把网路节点叫做中间系统,其他协议比如OSPF把节点叫做路由器。


关于ISIS的术语
IS:Intermediate System中间系统 (Router路由器)
DIS:Designated Intermediate System (指定中间系统)
ES:End System(Host)
SysID:System ID (RID)
PDU:Protocol Date Unit 协议数据单元(IP Packet)
LSP:Link State Protocol Data Unit (链路状态数据单元)
LSPDB:LSP Database (LSP数据库)
NSAP:Network Service Access Point(CLNP地址+服务端口)
NET:Network Entity Title (网络实体标记)(特殊NSAP,最后一个字节为0,RID+AREA)
ESH:End System Hellos
IIH:Intermediate System to Intermediate System Hello PDU(类似于OSPF的HELLO报文)
PSNP:Partial Sequence Number Protocol Data Unit(部分序列号协议数据单元,类似于OSPF的ACK、Request)
CSNP:Complete Sequence Numbers Protocol Data Unit(全部序列号协议数据单元,类似于DBD报文)


ISIS地址的编码方式:这个地址属于可变长区域空间,还有6字节的SysID,还有1字节的NSEL
我们来将一下NSAP格式:
1.Area Address由AFI,IDI还有DSP的一部分组成,用来标识了组织结构。
2.System ID必须在整个区域和主干(Level2)上保持唯一,用来唯一标识主机或路由器
System ID为6个字节。
3.(NSAP-Selector)NSAP标识,用来指定选定的服务,相当于TCP/IP地址中的端口号,对NET地址来讲,是00


一个中间系统至少有一个NET(最多有254个)且SysID要相同。
通过:max-area-addresses xx来进行更改。
同一中间系统在一个AREA的中间系统必须具有相同的AREA ID
一个domain中的两个Level-2中间系统不能有相同的SysID
Cisco路由器上NSAP至少为8个字节,最多为20个字节。
对于IP应用程序而言,1字节定义AFI(标识二进制DSP语法的地址域),最少2字节定义实际区域信息,6字节定义SysID和1字节的NSEL,故NSAP地址最少为10字节。


ISIS允许将整个路由域分为多个区域,配置不同的区域ID是为了平滑的进行区域合并、分割、转换用。


OSPF不同的是,一个路由器必须整个属于另外一个区域。


节点(Nodes)及层次性(Level)
节点分为三种;而层次分为两种。
Level-1路由器只和本区域的L1路由器形成邻居关系。
通过与自己最近的L-1-2路由器的ATT BIT生成指向此台设备默认路由作为出口路由(L1区域类似于OSPF的Stub区域)
这就造成ISIS次优化路由的问题。
L2路由器有Level2的链路状态数据库,包含了所有区域间的路由信息。


Level 2:骨干Backbone(连续的Level2路由器的集合);Backbone是所有的L2和L-1-2路由器组成,
backbone必须是连续(连通)的。
 
一个isis并不一定需要有两个层次,如果只部署一个区域的话,可能全部是L1或者是L2,推荐使用L2,以得到比较好的扩展性。


DIS指的是“Designated IS”
类似于OSPF中的DR;在广播多路访问网络中,一台路由器会被选举称为DIS;在点到点网络中,不需要选举DIS;
不同层次有不同层次的DIS,选举结果可能不是同一IS;
与OSPF不同,它的选举是抢占式,isis中不存在备份DIS,当一个DIS不能工作时,直接选举另一个
DIS发送HELLO数据包的时间间隔是普通路由的1/3,这个可以保证DIS失效可以被快速被检测到。


DIS的作用:
1.在广播子网中创建并向所有路由器通告伪节点LSP
2.在LAN中通过每10s周期性地发送CSNP来泛洪LSP


在一个LAN中,必须有一个路由器被选举成为DIS、
1.选举基于接口优先级(cisco默认64)
2.如果接口优先级都一样,具有最大SNAP(Subnetwork point of attachment)的路由器将当选DIS
-在LAN中,SNPA指的是MAC地址
-在帧中继网络中,SNPA是local data link connection identifier(DLCI)
DIS的选举是抢占式的,没有规定不能参与选举的机制。


伪节点?(Pseudonode)
伪节点是在广播多路访问网路中的一台虚拟路由
伪节点由DIS创建。
DIS在伪节点LSP中通告LAN中的所有邻居。
LAN中的所有路由在它们的LSP中通告自己与伪节点的连接性。
DIS到其他所有路由器的metric的值都为0


伪节点的作用
1.减少路由器LSP的大小;
2.使路由器LSP更稳定;
3.使SPF计算更快。


邻接体:
路由器在在交互协议报文实现路由器功能之前必须首先建立邻接关系。在不同类型的网络上,ISIS的邻接方式建立并不相同。目前ISIS支持两种
不同的网络:
1.点到点
2.广播网路


ISIS邻居关系建立的基本原则
1.如果建立L1的邻居关系,则他们的AID必须相同。
2.如果建立L2的邻居关系,则他们的AID可以不相同。
3.两台L1-2会互相建立L1和L2的邻居关系。


ISIS使用的链路(links)
点到点的链路(PPP,HDLC)
广播网链路(Broadcast Links):Ethernet
NBMA:Frame-Relay,ATM等。


ISIS PUD
ISIS报文直接封装在数据链路帧中
没有什么CLNS或者IP报文头。
分为:Hello PUD LSP CSNP PSNP
ISIS PDU 封装形式:
数据链路层头:OSI Family 0xFEFE
ISIS固定报文头(0x83)
ISIS TLVs (Type 、Length、Value)


路由器启用ISIS:router isis;然后配置net地址;然后在接口下宣告路由:ip router isis
其中net地址一般分为:AFI+IDI+SysID+NSEL 长度范围为8-20bytes
然后去查看isis的数据库中:show isis database
查看拓扑表:show isis topology
查看路由表:show ip route 
查看邻居关系:show isis neighbors 不过这个并不现实邻居接口优先级
查看接口优先级的命令为:show clns is-neighbors


思科默认路由器类型是L1-2的。我们查看isis数据库的时候发现路由条目有星号,代表这条路由是本地路由器产生的。
如果LSPID路由hostname后的数字为非零,代表是由伪节点产生的路由。
我们查看伪节点路由器产生的isis数据库,show isis database R1.01-00 detail
此时我们发现所有路由条目的metric值全为0.


此时我们可以划分为多个所属区域,最大值为可以为254。
当L1路由器去访问目的地的时候,如果目的区域所属不同的区域,那么这条路由会靠这一条默认路由去访问距自己最近的L1-2路由器。
如果目的区域所属相同的区域,那么就会根据SysID来进行选路。达到目的IS路由器。


ISIS邻接关系建立的基本条件:
只有同一层次的相邻路由器才有可能成为邻接体。
对于L1路由器来说要求区域号一致。
同一网段检查--cisco不检查--
MTU隐含检查--cisco不检查--
这点建立邻接关系的条件比OSPF要求宽松。


IIH PDU:
Hello数据单元:定期发送,用来确定相邻的其他系统是否在运行ISIS,以建立邻接关系、交换LSP、达到LSDB的同步。
在ISIS里面有三种HEELO包,1.点到点HELLO PDU;2.Level-1 HELLO PDU;3.Level-2 HELLO PDU
show isis hostname 来查看hostname与SysID之间的映射关系。


我们这里再来看一下Overload bit:当ISIS路由器内存不够,不能装在过多的LSDB的时候设置过载位。用来表明自己只有不完整的LSDB,因此警告别的IS路由器,不能相信自己传输的路由信息;当别的路由器收到它的时候,只计算设置过载位的路由器的直接连接的路由信息,而不计算通过它得到的路由信息。即不信任哪些经过设置过在位路由器传输的路由信息。
手工设置过载位的命令为:set-overload-bit
另外还有一条命令:set-overload-bit on-startup wait-for-bgp,参考TCP/IP路由技术卷一


LSP剩余生存时间有2个重要的值,一个是最大生存时间,一个是刷新间隔;剩余生存时间值为20分钟,并且是从1200s开始倒数到0,这点与OSPF不同,OSPF是从0增大到3600s。
我们可以通过命令:max-lsp-lifetime来设置这个时间,并且最大值为65535s
当lsp的生存时间到达最大生存时间之前,该lsp就会被源路由器重新生成,否则直到生存时间为0就会被清楚掉。
刷新间隔被定义为15min(并加上5min中的随机抖动)。这个时间可以更改:lsp-refresh-interval
如果lsp到生存时间都没有新的lsp到达,那么ISIS路由器掉LSP的内容,只保留LSP Header将Lifetime置0洪泛出去,所以收到为0的lsp路由器在60s后将从lspdb中删除次lsp,这个叫做零寿命生存时间。


LSPID由以下几部组成:
1.系统系统标识符:SYSID
2.伪节点标识符:PSN ID
3.LSP编号(LSP Number)
一个伪节点的链路状态数据包与一个多路访问的链路有关,并且由该链路DIS产生。
路由器产生的常规LSP的PSN ID地址段是0,伪节点为非0值。
LSP编号用于指示LSP片段,第一段的编号为0,如果一条较大的lsp的某一段在传输中丢失,那么接收端路由器就会丢弃其他段,整个lsp重传。所有路由信息都被捆绑在一个lsp中,该lsp可以根据需要分成多个片段。当个lsp的最大长度是1492字节(还有8字节的isis包头)


CSNP:完整序列号协议数据单元
分为两种:L1 CSNP;L2 CSNP
CSNP用于数据库同步,描述数据库LSDB中的所有LSP
包含地址范围,各LSP的简要信息:LSPidSequenceNumber,Checksum,remainning lifetime
何时发送:在广播网络上,有DIS定期发送(缺省10s的周期)。在点到点串行线路上,只在第一次邻接时发送CSNP。
如果路由器的LSDB非常大,将分成多个CSNP进行发送。


PSNP:部分序列号协议数据单元。
分为两种:L1 PSNP L2 PSNP
PSNP用于数据库同步,主要有一下功能:
1.在篇p2p链路上路由器用来相互交换作为Ack应答以确认收到的某个LSP;
2.用来请求发送最新的LSP,当路由器从近邻接收到CSNP时,注意到CSNP都市了部分数据库(或者自己的比较久),路由器发送PSNP请求新的LSP。
和CSNP一样,PSNP在头中利用LSPid,SequenceNumber,Remaining lifetime,LSP Checksum来描述LSPs
这个有点类似类似ack和request数据包。我们只需要记住这个四元组。


路由泄漏
RFC1195中规定的集成型ISIS只将L1的Area当做类似OSPF的Stub区域,L2中的路由不能发布到L1中去,L1路由器只能选择最近的L1-2路由器作为本区域所有流量的出口(根据设置的ATT bit产生默认路由),显然很容易造成次优化路由问题。
RFC2966中国定义了路由渗透:可以将L2的IP路由引入到L1中去,这样可以允许L1路由器对某些或全部的L2路由选择出区域的最佳路径
命令:redistribute isis ip level-2 into level-1 distribute-list <100-199> //必须使用扩展的acl
我们可以通过acl去选择那些路由泄漏到L1中,同理也可以调用route-map


此时我们在Level-1区域内的路由器发现有一个标识为ia:IS-IS inter area代表isis域间路由。
此时可能会造成路由环路问题:我们可以通过up/down bit位来预防环路的发生


一个L1-2路由器应该手工设置L1区域中可达前缀的聚合,这些聚合路由被注入到L2区域中。
设置了up/down bit的前缀永远不会被L-1-2路由器通告到L2


SysID
1-8字节(通常6字节);十六进制表示;没有符号名字直观。


动态主机名TLV
动态主机名TLV是可选的;
这个TLV可以出现在一个非伪节点LSP的任何分段中
Value字段的内容是产生这个LSP的路由器的名字
这个路由器的SysID可以从LSP的标识符中获得。


数据库交换过程(flooding):
为什么要flooding?
1.所有的路由器都产生LSP。
2.所有的LSP都要复制并发送到网络中的所有其他路由器,如果数据库不同步的话,路由计算就可能错误,可能引起路由环路。
3.ISIS实际由SPF计算和可靠的flooding两个最重要的部分组成。


数据库交换过程(flooding)
什么时候产生新的LSP
1.邻接关系建立起来或down掉。
2.ISIS相关接口的UP/donw
3.引入的IP路由发生变化
4.区域间的IP路由发生变化
5.接口被赋了新的metric值。


收到新的LSP的处理过程?
1.将新的LSP安装到自己的LSPDB数据库中标记为flooding
2.发送新的LSP到所有邻居
3.邻居再扩散到其他邻居。


广播网上数据库的交换
1.DIS周期性的发送CSNP
2.IS收到一个LSP的行为
-中间系统接收到报文,在数据中搜索对应的记录。若记录不存在,则将其加入数据库,并广播新数据库内容。
-否则,若数据库中的序列号小于报文中序列号,就替换为新报文,并广播新数据库内容。
-否则,若数据库中序列号较大,就向如端口发送一个包含本地数据库值的新报文。
-否则,若两个序列号相等,则不做任何事情。


P2P链路上数据库的交换
1.如果收到LSP比已有的序列号大,则将这个新的LSP存入自己的LSDB中,再通过一个PSNP报文来确认收到此LSP,最后将这个新LSP再接收再发送到所有其他邻居。
2.如果收到的LSP和已有的具体相同的序列号,则直接通过一个PSNP报文确收到此LSP
3.如果收到的LSP比已有的序列号更小,则通过一个PSNP报文确认此LSP,再发送给对方我们版本的LSP,然后等等待对方给我一个PSNP报文作为应答确认。
在点到点链路上当邻居关系up的一瞬间会发送一次CSNP,然后就不在发送了。


这个是在P2P网络中如果对方收到LSP后5s之内没有对方对此LSP的PSNP,则本端会在5s之后进行重传。
我们可以通过抓取ISIS邻接关系建立的过程,包括MA和P2P网络类型。


比较OSPF与ISIS协议的不同点?
1.ISIS协议直接在链路层上使用,报文直接封装正在链路层报文中,支持IP、OSI CLNP多种协议;而OSPF封装在IP中,只支持IP协议。
2.ISIS的LSP生存时间是20min往下计算到0来清除久的LSP,而OSPF则是从0到60min来清楚更新旧的LSA的
3.ISIS协议中真个路由器只能全部属于一个区域,路由器的LSDB按Level来维护,而OSPF按接口来,一个路由器可以属于多个区域,为每个区域维护一LSDB数据库。
4.对于骨干区域的类型定义不同:OSPF通过特殊的Area0区域来定义,而ISIS通过连续的L2路由器来组成骨干区
5.ISIS的DIS选举比较家简单,并且是preempt优先级最高的DIS。
6.ISIS支持P2P和Broadcast;OSPF则支持5中网络类型;


ISIS协议的优点:
1.能支持多种网络协议;
2.区域能平滑地平移、分割、合并、流量不中断;
3.邻居之间和HELLO和Dead等间隔不一定必须一样,不想OSPF要求那么严格,配置相对简单。
4.采用TLV方式编码,有较好的扩展性。


isis默认的接口metric为10,我们可以通过isis metric 进行更改(0-63)。默认的情况下会更改所有区域的metric,我们可以加上level-1 后者level-2用来仅更改相应的metric


路由汇总,在L1路由进入L2的时候进行路由汇总。缺省汇总路由命令是:summary-address 10.2.2.0 255.255.255.0 level1-2
还有一点此时会产生一个指向空接口的路由,以防止空路由的问题。
以上的几个简单的命令一定要记住,并且了解其输出的结果,并等读懂各字段的意义。


优化ISIS扩展部分:
解释如何重分发,路由汇总,如何去配置缺省路由,认证方法。
重发布:redistribute protocol [process-id] metric [metric] match [internal|external] metric-type[value] level-1 level-2 level-1-2 route-map [map-name]
还可以重分布静态路由:redistribute static [clns|ip] route-map [map-name]


路由汇总:对于Level-1
重分布前缀;L2前缀泄漏到L1中;
对于Level-2
重分布前缀;重分布直连L2前缀(仅针对L2区域)


SPF算法
-也叫Dijkstra算法(Shorttest Path Frist)
-目的在于计算到达网络拓扑中其它路由器的最短路径
-通过计算得到的最短路径数SPT,我们可以建立路由表(RIB)
-通过顶点集和边线集的有向图的方法表示-把图命名为G,表示G=(N,L)N比顶点,L表边线集。


我们要理解顶点集的问题。
SPF算法创建并维护三张表
1.Unkonwn list
开始所有节点都属于这个列表(还没考虑顶点集)
2.Tentative list(Candidate list):正在计算的列表。
当前考虑的所有节点属于这个列表(正在考虑的顶点集)即包含去往目的地的所有录路径
3.Path List(Known list)
已经计算出最短路径的节点属于这个列表(计算好的顶点集)即去往目的地的最佳路径


SPF算法执行过程:
1.从tentative list的所有路由器中找出离自己(根)最近的节点,并把它从tentative list移到paths list。
2.发现此节点通告的所有前缀并安装到RIB中。
3.发现此节点的所有邻居并把这些邻居移动到tentative list中。


在ISIS中,IP前缀是最短路径数上的叶子。//这点是与OSPF最大的不同点。
-不使用IP前缀来计算和建立SPT。
-使用CLNS SysID来标记路由器。


当Tentative list表为空的时候,所有SPF计算结束。


i-SPF(Incremental SPF)
算法
-树中不改变的部分保持原样(比如变化的链路不在某些根的最短路径树上)
-重新计算树中受影响的部分
-把受影响的部分和保持原样的部分整合到一起
iSPF的计算时间不可预测的,但是iSPF比完全SPF要快


iSPF算法的特点:
1.发生改变的地方离根越远,执行i-SPF来更新SPF所需的时间越短。
2.如果发生变化的地方离执行SPF计算的很近,那么i-SPF算法那不会带来太多的好处。


PRC(Partial Route Calculation)部分路由计算
-如果仅仅是IP前缀发生改变,不需要重新建立SPF,只需要重新把前缀安装到路由表中即可。


ISIS timer ISIS计时器总结:
10s   IIH timer for non-DIS ISs on a LAN
30s   IIH holdtime for non-DIS ISs on a LAN
3.3s  IIH timer for the DIS on a LAN
10s   IIH holdtime for DIS ISs on a LAN
10s   IIH timer for p2p links
30s   IIH holdtime on p2p links
10s   CSNP timer for the DIS to keep the LSDBs sync
33ms   Minimum interval between transmitting two LSPs
5s     LSP retransmission timer while flooding
100ms   Delay between any retranmitted LSPs
10s    Minimum time between 2 SPF runs
5s      Minimum time between regenerating one LSP
60s    Time to keep an expired LSP in the LSDB during pruge
15m   Periodic regeneration of LSP
20m   Maximum lifetime of an LSP
以上的计时器要非常熟悉,并且要理解其含义和修改的命令。
并且知道如何去优化这些计时器。我们要记住一些常用到的计时器。
某些可能是在路由器上修改,而某些则是在接口下进行修改。
ISIS的一些基本概念结束了,我们要非常熟悉其基础知识。

0 0