ISIS路由协议

1/23/2008来源:网络协议人气:22981

ISIS是一个分级的链接状态路由协议,基于DECnet PhaseV 路由算法。ISIS可以在不同的子网上操作,包括广播型的LAN、WAN和点到点链路。ISIS是一个链接状态协议,实际上与OSPF非常相似,它也使用Hello协议寻找毗邻节点,使用一个传播协议发送链接信息。
ISIS消息使用序列号,但它只是一个简单的加法计数器。当计数器计到最大值时,一个ISIS路由器没有别的选择,只能伪造一个错误触发对所有旧信息的刷新。然而,因为序列号有3 2 比特长,使得到达最大值之前有很大的序列号空间,所以这不是什么问题。但是,至少存在两个技术问题:ISIS使用一个小的度量值(6 比特),严重限制了能与它进行转换的信息;而且链接状态也只有8 比特长,路由器能通告的记录只有256个。一个非技术问题是ISIS受OSI约束,使得与OSPF相比它的发展比较缓慢。这个限制的原因是由于SPF的要求;但现在的Wide-metric使这个范围变成24位的扩展解决了这个问题。
  一个非技术问题是ISIS受OSI约束,使得以前与OSPF相比它的发展比较缓慢。但现在的ISIS在非OSI即RFC方面(Integrated)ISIS有了很多的扩展使得他的发展比OSPF更轻易实现对新的要求的支持如ipV6或者TE而且更简单易实现
  
  一个路由器是intermediate system(IS),一个主机就是end system(ES),在一个主机和路由器之间运行的协议叫ES-IS,路由器与路由器之间运行的协议是IS-IS
  
  一个subnetwork属下的接口叫:subnetwork point of attachment(SNPA),它只是一个概念上的东西,实际上它是一个subnetwork提供的服务点,由SPNA定义的,不是实际的物理界面,SNPA的概念特性对应于子网的概念特性。
  
  PDU:就是一个OSI层上的一个节点到它的另一端(peer)的对应层上的节点,所以一个帧也叫做Date Link PDU(DLPDU),也因此一个网络层的packet也叫做network PDU(NPDU),这个date unit功能类拟于OSPF的LSA,我们称它为Link State PDU(LSP),与LSA不同的是它封装在OSPF报头之后,然后才到IP数据包。
  
  an LSP is itself a packet.
  
  =====================
  ISIS AREAS
  =====================
  ISIS和OSPF一样建立一个双层分级结构拓扑,但和OSPF不同的是ISIS划分area是连接中,也就是说两台路由器中间来划分area
  
  L1_Router-------------------L2_Router
  
  以上的竖线就是ISIS划分的area的地方,而OSPF则不是,它是在一个路由器当中划分的,一个路由器中只要有两个接口接到不同的area,这个路由器就叫做ABR
  
  area0-------ABR_Router------area1
  
  ISIS中对路由器的称呼又和OSPF又所不同,它只有三类,一个是完全在一个area内的,OSPF叫内部路由器,ISIS叫L1,而OSPF的ABR在ISIS中叫做L1/L2,还有一类是backbone里的路由器,全都叫做L2,这样,L1/L2路由器就会维护两个line state datebase,而与ABR不同的是,L1/L2路由器不通告L2的路由给L1,因此所有的L1路由器永远不会知道area外的路由,这种情况和OSPF的tutally stubby area是非常像的,假如L1内的路由目的地是在自已的area以外,这个L1路由将被转发到一个L1/L2路由器上,而L1/L2路由器传送一个L1的路由到另一个area时,它在LSP设置一个bit叫Attached(ATT) bit9来告诉别的L1路由器这条路由可以到达。
  
  OSPF用spf算法来计算一个area内的路由器,而ISIS在这一点上也是不同的,它在内部area (inter-area) 时所使用的方法是distance vector算法。
  
  ISIS中L1/L2路由器维护两个分离的L1和L2的link state datebase,将计算完全独立的L1和L2拓扑自已SPF tree。
  
  ISO 10589 中说ISIS路由器可以使用virtual link来连接物理分离的area到backbone,这和OSPF是一样的,但是这个功能CISCO就做不到的,反而别的路由器生产商可以做到。
  
  =================
  AREA ID
  =================
  一个L1,也就是说完全在一个area内的路由器,它的area ID或者说area address是与该路由器的全部参数有关,也就是说不是什么一个接口的最高IP地址就能决定一个area ID,这和OSPF又是大大的不同。ISIS可以有上限为三个的area address,这在area transitions的是候是很有用的。
  在一个domain中,一个ISIS的路由器一定要有一个唯一标识,这可以用system ID来完成,这个system ID与OSPF的router ID是一样的,area ID和sytem ID可以用一个地址,==========both the area ID and the system ID are defined on an ISIS router by a single address the network entrigy title。
  
  注:system ID就是router ID,在area内的时候做识别用,area ID则在area之间做识别用。
  
  =================
  Network Entity Titles

  =================
  虽然ISIS使用TCP/IP,但它仍然是CLNP协议,因而ISIS中跑的数据包叫CLNS PDUs,这样子就算一个完全是IP环境,一个ISIS的路由器也一定有ISO地址,ISO地址就是一个network address,ISO 8348.10 描述network entity titles,长度可以是8-20 字节(octetes)它描述该设备area ID and system ID,
  
  注:NET是为一个ISIS路由进程指定的区域地址和系统标识。该参数可以是一个地址,也可以是一个名字。
  
  ISO为不同的系统设计了很多东西给Network entity titles,这个NET的地址格式可以有很大的灵活性和扩展性。NET可长可短,包含的信息可多可少,这要视忽你的需要,但是有一点要记住,在一个routing domain里,system ID的长度一点一样!一般来说是6个字节,也一般使用标识的接口的MAC的地址。当然,system ID在一个routing domain一定要是是独一无二的。
  
  ==================
  ISIS Functionla Organization
  ==================
  OSI model 中的network layer是由两小layer组成的,一个是subnetwork independetn sublayer, 下面的半层是subnetwork dependent sublayer,根据名字来看就知道dependent sublayer与下面的date link layer有着莫大的关系,而independent layer则独立的layer。当然,network layer要再细分会分成更复杂,但这时太不细讲了。
  
  subnetwork dependent functions
  它把不同类型的date link的帧规律化,再上交给dependent layer
  下面是它的具体功能:
  -从指定的不同的subnetwork接收或者发送PDUs。
  -在subnetwork交换ISIS的hellp PDUs来发现邻居和建立adjacentcies,
  -维护adjacencies
  -链路信号分离,或者说传送OSI的PDUs的过程和传送IP数据包的过程
  
  OSPF中定义了四种网络类型,而ISIS中只有两个,呵呵,这就太好了,总算看到比OSPF简单的东西了,以前在看OSPF四种拓扑时曾晕倒数次,这下对这里应该快速浏览一下就行了吧。
  ISIS只有两种类型,一种是broadcast subnetwork 和 point to point 或者说是 general topology subnetworks,
  broadcast subnetwork 就算于OSPF的multi-access
  p to p 就是nonbroadcast, subnewwork 可以是 PVC,像T1,又或者用动态来建立,如x.25的SVCs。
  好了,这里拓扑就已经讲完了
  
  ======================
  neighbors and adjacencies
  ======================
  ISIS用交换ISIS hello PDUs发现邻居,10秒发一次,这和OSPF又是一样的 ,改这个参数用 isis hello-interval 命令
  虽然这个hello PDUs在broadcast和p to p 这两种拓扑中略有一点不同,但是本质信息却是相同的,如自已的识别,能力,发heloo的接口参数。假如两个邻居各自能力和接口参数协商好了,那他们就成为adjacent了。
  
  ISIS的L1和L2的邻居是分开来========isis froms separate adjacencies for L1 and L2 neighbors. L1 router from L1 adjacencies with L1 and L1/L2 neighbors, and L2 router from L2 adjacencies with L2 and L1/L2 neighbors. neighboring L1/L2 router from both an L1 adjcacnecy and an L2 adjacency. 一个L1和L2路由器不会adjacent关系
  
  一旦adjacency的关系建立后,hello PDUs就扮演keepalive的角色,呵呵,好熟悉喔
  关于hold time 的概念下面举一个例子,A路由器在hello中还有一个hold time的参数,通知它的邻居B在宣告A路由器完蛋前需要等等下一个hello的时间有多久,假如我没记错的话OSPF似乎是4次。这么说他比OSPF收敛要快10秒了。改这个参数用 isis hello-multiplier,呵呵,命令太多,比较难记,不过很多命令都有规律,一般改OSPF的东西前面的命令是 ip ospf,不懂时打个?号就行了,而改ISIS的东西用 isis ? 试试
  
  假如想看ISIS的neighbor表可以用:show clns is-neighbors
  在这个命令中
  system id 和 interface就不说了,state 可以是 init 表明邻居是adjacent,PRiority参数是选DR时用的(broadcast network)
  circuit ID的意思是这样的,它的第一个字节说的是ISIS接口的唯一标识,假如这个接口是在一个broadcast multiacess network里,那ciscuit ID 将与DR的system ID并置,就是接在一起的意思。和这个全部东西加起来就是大家所知的LAN ID,(又来一个新的ID,faint)或者叫它pseudonde(匿名)ID更好一些,下面兴个例子
  circuit ID是0000.0c76.5b7c.02
  system ID是0000.0c76.5b7c
  pseudonode ID是02
  
  最后一个是adjacency的格式:

  intergrated ISIS的格式永远是phase v
  OSI/DECnet phase V.
  indicating OSI/DECnet phase v. the only other adjacency FORMat is DECnet phase IV.
  
  今天状态不错,看了好多,虽然ISIS看过一次,但是这样细看时才发现,原来很多好东西都漏掉了,这样看真是很慢,但是很扎实,以后只要略复习一两次就可以记得很牢,看来磨刀不误砍柴功是有点道理的,cisco的东西似乎很多,多得不可能看完,但其实很多东西都是重复的,只是高级的东西往往要把初级的先讲一次,所以厚厚的资料往往令人心底发寒,还加上网络的东西不是独立的,所以讲某些知识点的时候常要涉及到别的知识,虽然这些别的知识可能已经讲过,但为了能完整的介绍该知识点,只好把所有涉及的东西都讲一遍,所以这也是造成书厚的原因,所以学一个就要吃掉一个,这样以后就可以跳跳跳了。否则基础不好,以后动则牵动你那不牢的根基,学习来会倍感无趣,最终变成为了该死的前钱途而学,这样本来看书的享受时间会变成强迫式的恶性循环,那你的路就难走了。不过我觉得我说的比转适合有一定路由器操作经验的人,没有这类经验的人最需要的就是实验环境,否则很难吃掉知识点,就算是吃了也消化不了,所以转化知识成为身体的一部份,这才是最最最紧迫的。
  
  
  ========================
  Designated Routers
  ========================
  在broadcast multi-access中,ISIS选举一个DR,这和OSPF是一样的,ISIS定义一个路由器为一个虚的点(pseudonode), 这个虚的点和OSPF的DR是一样的,所二的路由器都向这个点发送通告,也就是说所有的路由器都是隶属于虚点的。
  
  ISIS在broadcast multiaccess里和所有的neighbor 建立adjacendies关系(不止和DR)。每一个路由器multicasts它LSPs给自已的所有的neighbor,DR使用一个叫做Sequence number PDUs (SNPs)的PUDs系统来确保LSPs的flooding的可靠传达。
  
  ISIS的DR选择很简单,接口有一个L1的priority和L2的priority,范围是从0到127,cisco的缺省是64,要改这个参数用 isis priority 命令
  路由器在它的hello里塞入priority,L1的塞进给L1 hello,L2的塞给L2的hello,假如priority设置为0,那这个路由器永远不能成为DR,又因为一个接口有两个priority,所以他可能成为L1的DR,而在L2只是普通角色,又或者成为L2的DR,在L1只是普通角色。
  
  把circuit ID附到system ID上是很有必要的,因为一个路由器可以做为几个area内的DR,加上这个后才能保证到LAN ID是网络内唯一标识。
  ISIS的DR选择非常简单,比OSPF要简单得多,首先,ISIS没有BDR,假如DR完蛋,新的DR会马上选举,而且OSPF中DR一旦产生就不会更改(failed除外),就算是后加的路由器的优先权比原来的DR要高,也不能篡位,但是ISIS就不同了,只要加一个优先权更高的,甚至优先权一样,但是system ID高一点点,都将夺取DR的位置,随着这个新的DR的产生,新的LSPs就会flooded,这就是所谓的一朝君主一朝臣了。
  
  ========================
  subnetwork independent functions
  ========================
  这个层定义一个CLNS如何传送数据包贯穿CLNP的网络和这些服务是如何被提交到传输层的。这一共是四个过程,update,decision,forwarding和receive process
  forwarding 和 receice process 没有什么好说的了,只是转发和接收PDUs而已,没有什么希罕的。
  
  the update process
  ------------------------
  update负责建立最新的L1和L2 link state datebase,L1 LSPs flooded到整个area,L2 LSPs flooded给所有的L2的adjacencies,这个范围在 IS-IS PDU FORMats 里有描述的。
  每一个LSP包括一个 remaining lifetime, a sequence number and Checksum. remaining lieftime和OSPF中有所不同的是,LSA是从0开始增加到最大的数,而LSP是从最大的数减少到0,ISIS的最大数为1200,也就是20分钟,这个数字放在link state datebase,这个值会周期性更新,refresh时间是15分种,在lifetime还没有eXPire就Refresh,前后约25%左右的lifetime就reflesh,假如两个时间相差太大,LSP的lifetime到了0,还没有reflesh,那LSP在link state datebase中会保持到60秒,这中做ZeroAgeLifetime.
  
  这段话说当一个router收到的LSP的Checksun是错误的时候,他会更新/清除这条他的datebase中的LSP-通过把这个LSP的Remain Lifetime值设置为0并把这条LSP flooding出去。 这个purge的行为使得产生这个LSP的Router收到这条remain-lifetime 置0的LSP后发出一条新的LSP。 这是ISIS与OSPF Purge的一个区别,在OSPF中只有产生这条LSA的Router才能Purge这个LSA, 而在ISIS中任何收到这个checkSum错误的router都可以Purge 这个错误的LSA by set remain-lifetime=0(这一段是playfair翻译的,在我学ISIS的过程中,得过他很多帮助)
  
  a error-prone subnetwork, 答应接收的路由器开启清洗这个动作会大大增加越LSP traffic,为了克服这种事,加入ignore-lsp-error命令,这样接收的路由器就会忽视这个错误的LSP,而不是take the action of purge。因为LSP中有SNP(Sequence Number)所以接收路由器知道有一个LSP没有收到。

  
  sequence number是一个无符号的,32 bit 线性号码,当一个路由器开始启动一个LSP,一个sequence number设成 1 , 同时,每一个随后的LSP都以加 1 来增长,当增长到最大的时候(0xFFFFFFFF),ISIS 会关闭它最少21分钟(maxage+ZeroAgeLifetime),这样来冼掉在datebase里的旧的LSP。
  
  p to p 时,路由器直接传L1和L2 LSPs到邻居,broadcast subnetwork, LSPs使用multiast到所有的邻居,frame 携带的L1 LSPs有一个MAC目标地址0180.c200.0014,叫做All1ISs,L2的是0180.c200.0015,叫做All2ISs.
  
  ISIS使用SNPs来承认和接收LSPs来维护link state datebase的同步。一共有两类SNPs,一个叫partial SNPs(PSNPs), 另一个叫 complete SNP(CSNPs).点对点使用PSNPs来明确(explicitly)承认收到LSPs,这包括下面内容:
  The LSPs ID
  The LSP's Sequence Number
  The LSP's Checksum
  The LSP's Remaining Lifetime
  
  在p to p subnetwork, 当一个路由器传送一个LSP时,它设置一个周期性的timer叫minimum LSP Transmission intervval. 如要在路由器接收到一个PSNP的承认之前timer expire,一个新的LSP将被送出,CISCO的这个timer缺省值是5秒,更改这个timer用: isis retrnsmit-interval。
  
  在broadcast subnetworks, 路由器不会对LSPs发送承认包,只是周期性multicasts一个CSNP来描述每一个在link state datebase 的LSP. 缺省的CSNP周期性间隔为10秒,更改这个timer用:isis csnp-interval, L1 CSNPs multicast 到 allL1lSs(0180.c200.0014), L2 CSNPs multicast 到 AllL2lSs(0180.c200.0015)
  
  当一个路由器收到一个CSNP,它比较PDU里面的LSPs summarized,假如路由器有一个LSP和CSNP不匹配或者一个更新的LSP,路由器multicasts这个LSP到网络,假如另一个路由器先传送一个LSP,那它就不会发送和这个(收到)LSP一样的LSP出去了,假如一个路由器的datebase没有包括所有的CSNP内的LSP列表,或者假如datebase的LSP比较老,路由器multicase一个PSNP,列出它需要的LSPs,虽然PSNP是multiaccess, 却只有DR才会回复。
  
  ISIS有一项有趣的能力,假如它的内存不足或者不能继续记录完全的link state base,它会发出信号通知别的路由器,这种内存超载的情况也许是因为area答应的网络过大的结果,假如一个路由器不能完成全部的link state datebase,它将设置一个自已的LSP的bit来标示,这就叫做OverLoad(OL)bit
  The OL bit 告诉路由器可能无法做出正确的路由决定,因为它的datebase还没有完成,而别的路由器仍然传输数据包给这个路由器,但是不使用它来传输数据,除非这个OL的bit被清除掉,因为OL bit令到路由器的hop along不能继续,也就是说被标识为OL的路由器不能做为下一跳,因此这个OL bit经常被人叫做hippiby bit.
  
  内存的分配应该够L1和L2的datebase用,但是一个路由器可以一层(L1或者L2)在超载环境,而正另一层在正常的环境,假如你想设置ISIS为一个终端节点,你可以手动设置手动设置OL,命令是:set-overload-bit
  
  show isis database 显示ISIS的link state database汇总
  
  ===========================
  The Decision Process
  ===========================
  一旦update process建立了link state database, decision process就使用datebase里的信息来计算shortest path tree, 然后这条最短路径树来建立一个forwarding database(route table). L1路由和L2路由在这里是分开来计算的。
  
  
  ===========================
  ISIS metrics
  ===========================
  ISO 10589指定下列metrics(一个是必需的,三个是可选的)做为ISIS来计算最短路径
  
  Default: 这个metric一定要被所有的ISIS支持和明白
  
  Delay: 这个可选的metric显示一个subnetwork的通过延迟
  
  Expense:这个可选metric显示一个subnetwork的代价
  
  Error: 这个可选metric显示subnetwork的剩余错误问题,这有点像IGRP/EIGRP的reliability metric
  
  每一个metric用0-63来表达,每一种metric都是用分开的单独路由来计算的,因此,假如一个系统支持所有的四种metrics,SPF就要L1和L2计算四次,每一个到目的地的路由器SPF可能被反复计算,cisco只支持defualt metric。
  
  cisco分配一个default metric 10 到所有的接口,不管是哪一类的接口,isis metric可以更改这个值,L1和L2可以分别被更改。
  
  全部的路由代价是一个outgoing接口的各个metric的总和,最大可设为1023, this small maximum is frequently pointed out as a limitation of ISIS because it leave little room for metric granularity in largo internetworks. the flip side of this criticism, however, is that limiting the metric to 1023 makes the SPF algorithm more efficient

  
  ISIS不止把路由器分成L1和L2,还分成internal or external。 内部路由的意思是目标在同一个ISIS routing domain内,外部路由的意思就是目标在ISIS routing domain以外,所以L2路由器总可以做internal or external,而L1只能永远做interna.
  
  假如有多个到某个目的地的可行性路由,L1路径优先于L2的路径,假如路径支持可选的metric,则优先于缺省metric,(记住,cisco只支持缺省metric,因此这一条对CISCO不适用),在metric 支持的level,最低的优先,假如有多个同等cost的路径在route table,CISCO的ISIS可以使用load balancing,最多可以是六条。
  
  在刚才update process提到的LSP ID的最后一个octet,叫做LSP number,用来跟踪LSP的碎块,decision process之所以要留意LSP number主要是因为以下几点
  首先,假如一个datebase中没有描述带有LSP number 为0 的LSP 和一个非0的lifetime,decision process将不会处理任何从相同系统来的,带有非0的LSP number,以下举个例子,假如一个LSP ID是0000.0c76.5b7c.00-01,和0000.0c76.5b7c.00-02存在datebase中,但是datebase没有LSP ID 为0000.0c76.5b7c.00-00的LSP,那前面的两个LSPs就不会被处理,这个方法确保残缺不全的LSP破坏routing decision的精确性。
  
  decision 只接受那些来自带有LSP number 为 0 的LSP,如下面的信息可被接受
  datebase Overload bit的设置
  IS type field的设置
  area address option field的设置
  
  就是说假如收到的LSP的第一个包假如不是第一个FRAGMENT的话,就会被忽略, 例如 49.0001.0010.0100.1001.02-00 (01,02....ff) 这个LSP就是被Fragment的因为这个LSP里的内容大于MTU的话就会被fragment. 只有第一个即最后一位是-00的LSP的fragment的setting才被接受(this section from playfair)
  
  
  ISIS supports VLSM