IS-IS地址
 
NET地址 = NSAP + 00(NSEL) 例:49.0000.0000.0001.00(16进制)
 
NESL类似于IP报文中的协议位,标志了不同的协议号,可以说是承载上层信息的字段(因为IS-IS本身不依赖于IP协议,也就不涉及IP相应的服务,只能自己来),目前所学这里就是00。
 
NSAP = Area ID + System ID  
 
Area ID 定义所属区域,System ID 定义区域内每一个节点,其中Area ID 可为1-8 bytes,而System ID 固定为6 bytes。
 
IS-IS是在链路层上直接封装的路由协议,基于CLNS 构架,有节点概念,无接口概念,所以NET地址标志的是一台路由器,也就是名称中提到的IS(Intermediate System 中间系统)。
 
IS-IS在链路层定义了Circuit 和相应的SNAP(subnetwork point of attachment)。SNAP是由OSI 定义的Layer 2地址,针对Circuit 类型各有不同,比如在Ethernet中为Mac地址,在Frame-Relay中为DLCI值。
 
在Ethernet中,System ID (6 Bytes) 与Circuit ID (1 Byte) 连用来标记链路。比如1921.6800.0001.01(16进制表示,最后两位至FF),最后的01就是用来区别Router的各个接口,不过在Cisco路由器中,Circuit ID是与Hostname组合而不是System ID,比如RouterA.01。
 
保证System ID 在区域内唯一的方法是使用接口的Mac 地址或IP 地址,出于可读性的考虑建议使用IP地址,形式为 192.168.0.1  -->  1921.6800.0001。
 
IS-IS 基于CLNS网络设计,后来由于TCP/IP 协议族的兴起发展为集成IS-IS,对IP协议给予支持。不过即使是这样,在IS-IS中给接口配IP地址仍旧像挂一片叶子一样无足轻重,有Circuit ID 和 System ID,网络已经可以组建起来,IP地址本身不参与SPF运算(这里指IS-IS 本身的SPF,分支节点为各路由器,而不是IP网段)。
 
IS-IS链路
 
IS-IS支持的网络类型只有两种:Broadcast  &  Point-to-Point ,没有NBMA的概念。在NBMA主接口,点到多点子接口上IS-IS 都是发送LAN Hello,即当成广播型链路来思考,如果处于同一IP子网的接口没有形成邻接关系,对应的下一跳网络不会装进路由表。
 
在NBMA上部署IS-IS时,注意在广播模式下必须使用CLNS Map,并加上broadcast 关键字,拓扑为Full-Mesh。不过还是强烈建议使用点到点模式,应用子接口使每一条PVC对应一个IP子网,否则可能会有路由丢失。
 
CLNS MAP 命令:   frame-relay  map  clns  105  broadcast
 
Broadcast链路中,Level-1 和Level-2 区域各选举自己的DIS,不像Level-1区域每个Area选举一个DIS,Level-2路由器形成邻接关系并不受Area ID 的影响,所以选举DIS也是如此。Level-1 & 2 的DIS也不一定相同。
 
DIS是路由器的一个接口,没有备份DIS,相应的解决备份问题的机制是DIS抢夺,代价是每抢夺一次会引起一组LSP的泛洪。同时IS-IS LSDB在LAN上不断同步,即CSNP的周期性发送,其实设计成周期性发送还有一个原因,那就是CSNP不要求有确认应答。
 
IS-IS 选举DIS标准:1. 最高接口优先级 (优先级范围0-127,缺省64) 
                                    2. 最高的Mac地址
 
IS只与DIS形成邻接关系,之间的通信不通过IP组播地址,这里依然强调的是不依赖IP协议,相应的解决方案是用二层组播Mac地址,Level-1的通告都发送到0180.c200.0014,Level-2的发送到0180.c200.0015。
 
注意:这样的一个Mac组播地址是所有IS都监听的,不像OSPF中DR/DRother监听不同的组播地址,不过一个IS发出的PSNP请求只有DIS会用相应的LSP给予回应。
 
IS-IS的LSDB同步中,SNP(Sequence Number PDU,序列号报文)分为PSNP和CSNP,这个与OSPF的分组可以形成对应,PSNP对应的OSPF的LSR and LSAck,CSNP对应OSPF的DBD,但是针对不同的链路有细节上的差异。

1)Point-to-Point 链路上的LSDB 同步,CSNP只在点到点链路激活时发送一次,PSNP担当LSR和LSAck的职责,既作为链路信息查询,又用来确认每一个LSP数据包是否收到。
 
2)Broadcast 链路上的LSDB 同步,LSP不需要每一台接收它的路由器确认,DIS周期性的发送CSNP(间隔为10s),PSNP只相当于LSR。
 
思科对于IS-IS的度量值处理十分简单,默认接口度量(单链路开销)Cost=10,可设置为0~63之间的数值(2^6),路径度量(路由总开销)为0~1023(2^10),不过这是以前的窄带度量值,新版本的IOS已经扩展到24位的接口度量和32位的路径度量。
 
IS-IS通过Hello来形成邻接关系,针对链路类型的不同,IIH可以分为3种,点到点IIH(周期为10s),Level-1 LAN的IIH,Level-2 LAN的IIH(DIS发送Hello周期为3.3s)。而Hello还可以分为ESH(ES之间的Hello),ISH(IS与ES之间的Hello)以及IIH(IS间的Hello)。
 
IS-IS路由
 
OSI定义的IS-IS路由等级:
 
Level-0     ES与IS之间的路由,协议为ES-IS,类似于IP网络中的IRDP 协议。
 
Level-1 & Level-2     协议为IS-IS,Level-1为Area内路由,Level-2为Area间路由。
 
Level-3    在Domian 之间进行的路由,一般不涉及。  
 
 
IS-IS 路由器类型3种:Level-1 路由器    Level-1-2 路由器    Level-2 路由器
 
IS-IS 邻接关系3种:    Level-1 邻接       Level-1-2 邻接        Level-2 邻接
 
形成邻接关系的规则:
 
Level-1 和 Level-2 路由器       一定不能形成邻居关系
 
如果邻居是Level-2路由器       不管Area ID是否相同都能形成Level-2邻接关系
 
如果邻居是Level-1路由器       只有Area ID相同才能形成Level-1邻接关系
 
两台Level-1-2路由器之间        Area ID相同则为Level-1邻接;不同则为Level-2邻接关系
 
 
IS-IS 的LSP类型2种: LSP 1 &  LSP 2
 
LSP 1通告相连的Level-1 和Level-1-2 链路信息  LSP 1  -->  Level-1 LSDB --> Area内 路由
 
LSP 2通告相连的Level-2 和Level-1-2 链路信息  LSP 2  -->  Level-2 LSDB --> Area间 路由
 
IS-IS 链路类型(Circuit-Type)定义了该链路的等级和允许处理和泛洪的PDU类型,有3种:
 
Level-1 (只允许LSP 1通告) Level-1-2  (允许LSP 1 & 2通告) Level-2-only  (只允许LSP 2通告)
 
同一Area内的路由器Area ID必须相同,ES与所连路由器用相同的Area ID。Area ID用于Level-2路由(区域间路由),System ID用于Level-1路由(区域内路由)所以Area内必须唯一。具体来讲,Area间路由的时候,只考虑Area ID 不考虑System ID,Area内路由的时候,只考虑System ID 不考虑Area ID。
 
IS-IS在设计时应先定义好区域,骨干区域全为Level-2 Router,边界为Level-1-2 Router(最好规划到Level-1区域),末节区域为Level-1 Router。
 
当一个Level-2 或者Level-1-2路由器与其他Area的路由器相连时,它所发的LSP的ATT位为会设为1。Level-1区域作为末节会因此有默认路由注入,并选择最近的L1/2路由器作为本区域的出口。
 
IS-IS的路由优先级为:当去往同一目的地有多条路由可选时,L1路由优于L2路由。IS-IS外部路由默认以L2方式传播,因此在L1区域不会有外部路由,在Level-1路由器上执行的重发布也是无效的,就好象在OSPF的Stub区域做重发布一样。如果L1路由器一定要将外部路由重发布进来的话,可以用命令来实现:(config-router)# redistribute  connected  level-1 。
 
L2路由可能是Area间路由,也可能是外部路由,在IS-IS数据库里可以识别出来。如果达到某一目的地,同时存在L2外部路由和域间路由,那么IS-IS会根据最短路径来选择,而到达外部路由的路径以到达ASBR为准,因此可能会出现安装外部路由而没有安装域间路由的情况。这和OSPF明显区分内部路由和外部路由不同,在OSPF中如果已存在域间路由,外部路由在重发布进的时候会被过滤掉。 
 
路由泄露
 
上述的次优选路IS-IS可以通过路由泄漏来解决,即让L1路由器知道L2路由。配置在Leve-1区域出口上完成,在L1路由器的路由表泄漏的条目一“i ia” 表示,Metric会额外加上128:
 
(config)# access-list 101 permit ip host 1.1.10 any
 
(config-router)# redistribute  isis ip level-2 into level-1 distribute-list 101
 
在IOS操作中,IS-IS重发布进其他IGP(比如OSPF)时并不包含自己的直接接口,目前版本依然没有解决,处理这种状况又2种方案,要么将IS-IS的接口同时运行OSPF,要么在ABR上做重发布直连的配置:
 
(config)# route-map  from-isis
 
(config-route-map)# match  interface  loopback0  s1/0
 
(config)# router  ospf  10
 
(config-router)# redistribute  connected  subnets  route-map  from-isis
 
 
IS-IS特性
 
强扩展性:第一点,以路由器等级(Level)来划分骨干区域,没有实际上地理位置的制约,但设计时应该考虑。
 
第二点,IS-IS的边界在链路上,不像OSPF那样以ABR作为边界,这样每个Router只属于一个Area,而且可以通过设置使一个IS属于多个Area(默认最多为3个),这样在区域过度的时候不必中断,像ISP中的IS-IS往往就是一个单一的L2区域,仅提供区域的外部出口,这样新的Area可以作为L1类型直接连接到已经存在的L2区域。
 
第三点,IS-IS应用TLV来进行通告,TLV可以扩展出很多信息,格式无穷无尽(TLV是Type,Length,Value的缩写,更厂商自行设计,在编程时被翻译为“元组”,指的是大小固定的异构对象的集合)。
 
OL位设置:IS-IS有一个有趣的特性,如果它的设备由于内存不足无法记录完整的链路状态数据库时,它具有通知其他路由器的能力,其动作是在所发送的LSP数据包中设置OL位(Overload),表明自己可能不能进行正确的路由选择,所以在该路由器没有清除OL位之前,其他路由器不会通过这台路由器来转发,不过需要注意的是,由于LSDB可以针对L1或者L2,所以路由器可能只是在其中一层过载,而其他层内存还正常。
 
OL位目前最常用的地方是在BGP网络中,当一台新的路由器添加进网络,IGP会比BGP先收敛,如果另一台路由器根据收敛的IGP路由确认这台新添加进来的路由器是BGP路径的下一跳,而这时新路由器的BGP还没有完成收敛,就会造成路由黑洞。
 
在BGP收敛之前通过设置IS-IS的OL位,可以避免这个问题,其他路由器会绕过这台新的路由器进行选路,一旦BGP收敛,OL位将被清除。建议使用 set-overload .-startup 指定一个秒数说明IS-IS启动后需要设置OL位的时间(可设为300~500s),也可以加关键字 wait-for-bgp 使其在BGP完成收敛的时候清除OL位(不过一旦BGP由于某些原因没有起来,OL位就永远不会清除,所以还是设置时间为好)。
 
PS:IS-IS路由器的Level,决定了所发PDU的类型,只有PDU类型匹配才可以形成邻居,而且L1类型的邻居还要求必须有一样的AREA ID。
 
L2路由器不能和L1路由器形成邻居,因为PDU类型不同,AREA也肯定不同,L2区域也不允许存在L1路由器,
处于其它AREA的L1-2虽然能发L1类型的PDU,但是由于和L1路由器的AREA ID不同,所以不能形成邻接关系。

一个L1 AREA必须要至少有一个处于本AREA的L1-2,作为ABR,但L1-2路由器并不一定只位于L1 AREA。所以当L1和L2路由器之间只有一台L1-2路由器时,这台L1-2必然和L1路由器处于同一AREA,因为要两边都形成邻居,L1邻接条件更为严格,需要AREA ID相同。
 
一般来讲,L2区域应该都是L2路由器,L1-2路由器要发挥其作用就应该分放在各自的L1区域,作为该区域的ABR,虽然L1-2放在L2区域不会有大问题,但是不是很好的设计。
 
当一个Level-2 或者Level-1-2路由器与其他Area的路由器相连时,它所发的LSP的ATT位为会设为1。Level-1区域收到这样的LSP不会放进路由表,只是会装入默认路由,并选择最近的L1/2路由器作为本区域的出口。
   
L2路由器只有L2数据库,但是有全部的链路信息,L1只有L1数据库,只有本AREA的链路信息。
 
L2只有L2 LSDB,但是有全部路由,这类似于OSPF,L2作为骨干区域,得到的是L1-2路由器通告的“路由”,而不是“链路”,同样具有距离矢量的行为特征,即只是知道通过哪个L1-2可以到达相应的L1 区域。
 
L1只有L1 LSDB,只有本区域的路由,L1-2作为该AREA的出口,虽然有L1 & L2 LSDB,但是L1-2不会将L2 LSDB的内容通告给L1路由器。
 
LSP2 形成 L2 LSDB,LSP1聚在一起形成L1 LSDB
 
路由器类型 -> 链路类型 -> PDU类型 -> 邻接关系
 
Level-2路由器  -> 链路类型都是Level-2-only  ->  只能发L2的PDU  ->  只能形成Level-2邻接关系
 
Level-1路由器  -> 链路类型都是Level-1  ->  只能发L1的PDU  ->  只能形成Level-1邻接关系(且要求Area ID相同)
 
Level-1-2路由器  -> 链路类型都是Level-1-2(缺省)  ->  L1和L2的PDU都发  ->  可能L1和L2邻接同时形成
 
记住,没有什么所谓的L1-2邻接关系,实际上是处于一个Area的两台L1-2路由器同时形成L1和L2的邻接关系,因为默认的链路类型是L1-2,即L1和L2类型的PDU都会发,而且L1邻接条件满足,所以都形成,当Area ID不同,就只能形成L2邻接了。
 
LSP的类型取决于始发该LSP的路由器是L1还是L2,L1路由器发出的LSP,在IS Type字段中会写着01,代表是L1,相应的L2发出的LSP会写着11,L1-2路由器就是依据这个字段判别是LSP1还是LSP2。
 
不过L1-2路由器在发自身所知道的信息时会有所动作,那就是虽然他会把信息分别形成LSP1和LSP2信息通告出去,发LSP1就写的01,发LSP2就写11,但要注意LSP1的信息已经将Level-2链路过滤掉了,而且ATT位会设为1,也就是告诉其L1 Area的路由器自己和外界连通良好,可以注入默认路由。
 
记住,ATT位只和L1-2始发的LSP1数据包有关,其L1区域路由器一旦核实该LSP1的始发L1-2路由器确实同属一个Area,就会向自己的路由表中注入默认路由。
 
关键:Level1-2路由器通过向L1区域发送ATT比特位为1的LSP让L1区域的路由器生成一条指向Level1-2路由器的ISIS默认路由。

要明确OSPF中的LSA是针对一条链路的,LSU才等于IS-IS中的LSP,LSP中的内容都是通过一个个TLV填充的,L1-2路由器在形成LSP1的时候SPF运算在每个Level中进行,即一个Level-2 & N个Level-1 AREA。
 
L2路由前缀不允许注入L1区域。
 
L1路由 > L2路由 > L1 ia路由 (Lab-Result)
 
IS-IS对损坏的LSP态度就是直接丢弃
 
L1区域的每一条路由在始发时因为设置了TLV 128中的U/D比特位为0,即为Up,意味着能向上层Level2区域注入,但是不能像其他Level1区域注入。
 
ATT位只在L1-2路由器发送LSP1会设置,仅限这种情况。
 
OL位:当IS-IS内存过载,不足以完整记录某一层的LSDB时,它会在自己发送的LSP中设置OL位,声明自己不保证正确路由,这样其他路由器都不会通过它转发数据。
 
OL位主要用于配合BGP,路由器可在自己的BGP收敛之前,将自己IS-IS的LSP设置OL位,防止自己成为BGP下一跳,避免了路由黑洞的产生。

TLV 128针对路由前缀设置了U/D位,来避免路由泄漏引起的环路问题,首先记住缺省情况下,L2路由前缀禁止通告进L1 AREA。
 
U位:缺省为U位,即数值为0,Up意味着该路由前缀能够 <Up进L2区域> 但是不能 <Down进L1区域> 
 
所以一般情形下L2区域拥有全路由,但是各个L1区域都只有本区域的路由
 
D位:设置为D位,即数值为1,Down意味着该路由前缀能够 <Down进L1区域> 但是不能 <Up进L2区域>
 
这种情形下L1能知道L2路由,选路可以实现最优,但是学到的路由不能再通告出去,这样可以避免环路。