相同点:
IS-IS和OSPF是链路状态路由协议的典型代表,都维护一个LSBD,以Dijkstra算法为核心计算出SPF树来进行路由。
由于具有快速收敛、无环路,支持VLSM,触发更新等特点,IS-IS和OSPF都能很好地支持大型网络,但从全球部署来看,还是采用OSPF的多些,IS-IS主要应用在ISP网络中。
IS-IS和OSPF一样采用Hello协议来维护邻居关系,不过IS-IS的Hello协议和OSPF比起来要简单的多。
IS-IS和OSPF都采用两级层次化的拓扑结构,设有骨干区域,并且在区域之间提供地址汇总的能力,为网络规划提供了灵活且实际的设计方案。
为了控制链路状态数据库的规模和复杂度,IS-IS和OSPF在广播型链路上都选举DR(DIS)来担任数据同步的指挥者,但在细节处理上还有较大差别。
对协议报文的验证能力是所有高级路由协议所必须具备的功能,IS-IS对于协议报文的验证处理有些特别,它按照Level和PDU类型来处理。
IS-IS和OSPF对路由开销的度量(Metric)都采用接口可配置的Cost,能够比较正确地反映网络的实际情况。
对于每个LSP(LSA)都有一个记时器相关联,正常情况下会通过泛洪(周期较长)刷新计时器,如果在老化时间内没有收到新的更新,将从数据库中清除该LSP(LSA),不再用做路由计算。
处于边缘区域中的路由器,一是通过区域划分,二是通过设置区域类型来减少对路由器资源的需求。IS-IS可以将区域中的路由器设置为 Level-1类型,OSPF可以将整个区域设置为stub、total-stub或NSSA来减少数据库的大小,同时保证路由的可达性。
IS-IS和OSPF是链路状态路由协议的典型代表,都维护一个LSBD,以Dijkstra算法为核心计算出SPF树来进行路由。
由于具有快速收敛、无环路,支持VLSM,触发更新等特点,IS-IS和OSPF都能很好地支持大型网络,但从全球部署来看,还是采用OSPF的多些,IS-IS主要应用在ISP网络中。
IS-IS和OSPF一样采用Hello协议来维护邻居关系,不过IS-IS的Hello协议和OSPF比起来要简单的多。
IS-IS和OSPF都采用两级层次化的拓扑结构,设有骨干区域,并且在区域之间提供地址汇总的能力,为网络规划提供了灵活且实际的设计方案。
为了控制链路状态数据库的规模和复杂度,IS-IS和OSPF在广播型链路上都选举DR(DIS)来担任数据同步的指挥者,但在细节处理上还有较大差别。
对协议报文的验证能力是所有高级路由协议所必须具备的功能,IS-IS对于协议报文的验证处理有些特别,它按照Level和PDU类型来处理。
IS-IS和OSPF对路由开销的度量(Metric)都采用接口可配置的Cost,能够比较正确地反映网络的实际情况。
对于每个LSP(LSA)都有一个记时器相关联,正常情况下会通过泛洪(周期较长)刷新计时器,如果在老化时间内没有收到新的更新,将从数据库中清除该LSP(LSA),不再用做路由计算。
处于边缘区域中的路由器,一是通过区域划分,二是通过设置区域类型来减少对路由器资源的需求。IS-IS可以将区域中的路由器设置为 Level-1类型,OSPF可以将整个区域设置为stub、total-stub或NSSA来减少数据库的大小,同时保证路由的可达性。
不同点:
IS-IS最初是为ISO的标准协议,基于CLNS网络设计的,后来发展为集成IS-IS增加了对IP的支持;而OSPF一开始就是IETF为纯IP网络设计的。
IS-IS协议直接在链路层上运行,报文直接封装在链路层报文中,支持CLNS和IP协议;OSPF报文封装在IP报文中,协议运作以IP地址为基础。
LSA和LSP同为链路状态PDU,但有所不同的是,LSA是封装OSPF头部之后,再被封装进一个IP数据包中,而一个LSP本身就是一个数据包。
OSPF通过特殊的区域ID Area0区来定义骨干区,而IS-IS是通过连续的L2路由器来组成骨干区。IS-IS协议中一台路由器只能属于一个区域,区域边界在链路上,路由器的LSDB按Level-1和Level-2分别维护;而OSPF按接口来分区域,这样一个路由器可以属于多个区域,为每个区域维护一个LSDB数据库,区域边界称为ABR。
IS-IS的采用的Hello协议比较简单,OSPF相对复杂;在IS-IS中邻居之间的Hello和Dead间隔不必一样,像Hold Time(也就是Dead-interval)是以对方通告的为准,不像OSPF要求必须一致才能形成邻居关系。而且通过Hello的交流,IS-IS已经能形成完全的邻接关系而OSPF只能形成Two-Way。
OSPF通过特殊的区域ID Area0区来定义骨干区,而IS-IS是通过连续的L2路由器来组成骨干区。IS-IS协议中一台路由器只能属于一个区域,区域边界在链路上,路由器的LSDB按Level-1和Level-2分别维护;而OSPF按接口来分区域,这样一个路由器可以属于多个区域,为每个区域维护一个LSDB数据库,区域边界称为ABR。
IS-IS的采用的Hello协议比较简单,OSPF相对复杂;在IS-IS中邻居之间的Hello和Dead间隔不必一样,像Hold Time(也就是Dead-interval)是以对方通告的为准,不像OSPF要求必须一致才能形成邻居关系。而且通过Hello的交流,IS-IS已经能形成完全的邻接关系而OSPF只能形成Two-Way。
在OSPF中LSA的老化从0开始正计时到1h(该时间不可配置),刷新时间为30mins;而IS-IS的老化时间是从20mins倒计时(该时间可以配置),刷新时间为15mins,实际为15mins减去 <=25% 的随机时间。
OSPF中LSA只有始发路由器才能进行清除(提前将该LSA的老化时间设为最大并泛洪出去),而IS-IS中LSP的清除是接收到LSP发现校验和错误,就会将该条LSP的剩余生存时间设置为0并重新扩散出去来加以清除,始发路由器接收到以后会重新发出该条LSP的实例,这样一来会显著的增加LSP的流量,所以12.0以后的版本都默认启用ignore-lsp-errors来忽略这个行为。
IS-IS协议的DIS选举比较简单,且抢占结果可预见,接口优先级最高的即为DIS,优先级别为0也可能成为DIS;而为了保证较小的变动,OSPF协议DR选举机制复杂且不可预见,优先级最高的不一定是DR(因为不可抢占,新添加进网络的接口即使优先级高也只能等待机会),优先级为0的不可能成为DR,设有BDR,DR失效后BDR立即变为DR,而IS- IS没有备份DIS,DIS失败,重新选举DIS。
IS-IS不支持Point-to-MultiPoint类型的网络,并且NBMA网络都只能设置为子接口模拟成来模拟Point-to-Point的运行模式;而OSPF可以很好地支持多种网络类型,像是Broadcast,NBMA,P-2-P,P-2-MP。
标准的IS-IS 接口Cost取值为0 ~ 63,对链路层区分度不够,而且一个网络的metric达到1024就认为不可达;而OSPF接口Cost取值范围为0 ~ 1024,一个网络的metric达到65535才认为不可达。IEFT在 draf-ietf-isis-traffic-02中扩大了IS-IS的Cost的取值范围(2^24)和最大有效路径Metric(2^32)。
IS-IS的Level-1区域只能对应OSPF中Total Stub区域,依赖最近的Level-1-2路由器作为该区域的出口,有可能造成次优路由;而OSPF非常灵活,普通区域既可保持原状,选择最优路由,也可以设置为Stub,Total Stub,NSSA和Total NSSA;不过IETF对IS-IS已经提供了一个改进方案,就是将Level-2的路由注入到Level-1区域中去。
IS-IS协议的DIS选举比较简单,且抢占结果可预见,接口优先级最高的即为DIS,优先级别为0也可能成为DIS;而为了保证较小的变动,OSPF协议DR选举机制复杂且不可预见,优先级最高的不一定是DR(因为不可抢占,新添加进网络的接口即使优先级高也只能等待机会),优先级为0的不可能成为DR,设有BDR,DR失效后BDR立即变为DR,而IS- IS没有备份DIS,DIS失败,重新选举DIS。
IS-IS不支持Point-to-MultiPoint类型的网络,并且NBMA网络都只能设置为子接口模拟成来模拟Point-to-Point的运行模式;而OSPF可以很好地支持多种网络类型,像是Broadcast,NBMA,P-2-P,P-2-MP。
标准的IS-IS 接口Cost取值为0 ~ 63,对链路层区分度不够,而且一个网络的metric达到1024就认为不可达;而OSPF接口Cost取值范围为0 ~ 1024,一个网络的metric达到65535才认为不可达。IEFT在 draf-ietf-isis-traffic-02中扩大了IS-IS的Cost的取值范围(2^24)和最大有效路径Metric(2^32)。
IS-IS的Level-1区域只能对应OSPF中Total Stub区域,依赖最近的Level-1-2路由器作为该区域的出口,有可能造成次优路由;而OSPF非常灵活,普通区域既可保持原状,选择最优路由,也可以设置为Stub,Total Stub,NSSA和Total NSSA;不过IETF对IS-IS已经提供了一个改进方案,就是将Level-2的路由注入到Level-1区域中去。
IS-IS中虽然每个IS只属于一个Area,但是可以通过设置使一个IS同时属于多个Area(默认最多为3个),在网络区域过渡的时候可以避免中断,这也是ISP最为钟意的地方;而OSPF网络在做割接的时候就必须考虑中断的时间了。
IS-IS路由器在1个协议报文中插入所有它发布的IP前缀信息,如果大于发布链路MTU,将进行分片,当前一个IS-IS LSP最多分为255片,限制到大约只有3000个IP地址前缀; IETF对IS-IS提供一个改进解决方法,详见draft:draft-isis-lsp-fragmets-04.txt。
IS-IS路由器在1个协议报文中插入所有它发布的IP前缀信息,如果大于发布链路MTU,将进行分片,当前一个IS-IS LSP最多分为255片,限制到大约只有3000个IP地址前缀; IETF对IS-IS提供一个改进解决方法,详见draft:draft-isis-lsp-fragmets-04.txt。
IS-IS虽然在《ISO 10589》中虽然提出了virtual-link来修复分开的骨干区域,但目前厂商基本没有实现,在RFC 1195中也没有提出。OSPF可以很好地支持virtual-link来修复分开的骨干区域或让隔离开的普通区域连接到骨干区。
RFC 1195中对于Level-1引入的外部可达信息,没有以Code 130的TLV作为IP External Reachability Information加入到LSP中,与区域内的路由信息无法区分开;而OSPF对于引入的外部路由统一以Type 5(NSSA的话是先Type 7再转换成Type 5,转换原理就是P-bit位的标记与否)的LSA来区分处理。
(该问题已经在RFC 2966: Domain-wide Prefix Distribution with Two-Level IS-IS中解决)
IS-IS历史上为CLNS网络而制定的,发展比较缓慢,对于IP的支持很多地方需要改进,虽然已经提出draft,但大部分还没有形成RFC,CNLP和IP双环境使用的优势也并不明显,不过就ISP而言还是个简单好用的协议; OSPF专门为IP网络设计,更适合IP路由,发展成熟,标准化程度高,厂商支持,使用广泛所以发现不少缺点,相应的改进也就比较多。
在IS-IS中L2路由可能是Area间路由,也可能是外部路由,在IS-IS数据库里可以识别出来。如果达到某一目的地,同时存在L2外部路由和域间路由,那么IS-IS会根据最短路径来选择,而到达外部路由的路径以到达ASBR为准,因此可能会出现安装外部路由而没有安装域间路由的情况。这和OSPF明显区分内部路由和外部路由不同,在OSPF中如果已存在域间路由,外部路由在重发布进的时候会被过滤掉。 在IS-IS这样的情况使用路由泄漏来解决。
在IS-IS中只要存在Level-2 路由器的Area 就是Transmit Area,没有Area ID 的限制,即两个Level-2的Router 即使不在同一Area也能形成邻居,这一点与OSPF严格的Transmit Area & Regular Area 划分不同。
关于拓扑变动(原创)
1台OSPF路由器每条链路都有1条LSA,该链路变化了,只需要重新泛洪该条LSA。而1台ISIS路由器,所有链路都在1个LSP里,1条链路变化了,需要泛洪所有链路的信息(即使其它链路无变化),引起的计算量也是针对该路由器全部的链路。
就网络拓扑而言,如果是前缀的改变,对ISIS有利,如果是链路的改变,则对OSPF有利,而实际中,链路不变,只改地址前缀的情况并不多。像100台路由器组成的网络,OSPF、ISIS都可以用,ISIS从理论上只是支持前缀数大,不是支持链路数大,而一个网络的规模其实很大程度是由链路数来决定的。
PS:前缀改变是三层的概念,比如修改接口上的IP地址或者子网掩码,因为IP地址不参与IS-IS的SPF运算所以前缀变化对IS-IS的影响小。链路改变是二层的概念,比如接口Down掉。
OSPF和IS-IS对于网络变动之所以表现出不同的优势,关键在于SPF算法。OSPF的SPF算法以IP地址为基础,每一条最优路径关心的都是途径的IP地址是什么;而集成IS-IS由于以CLNS为基础又支持IP,所以SPF分为ISO和IP SPF,有Area ID,System ID ,Circuit ID以及链路开销作为价值观,IS-IS网络已经可以构建起来,所以ISO SPF树在乎的不是到达某一IP目的网段,而是怎样以最短路径到达每一个IS,既然IP地址是附属品,那么我一个IS发一个LSP就可以通告出很多这样的东东,你既然能找到我,自然就能到达这些网段了。所以可以认为IP SPF是在ISO SPF基础上的特性。
正是由于这一点上的差异,在前缀变化时(就Area内路由而言),OSPF就要根据这个IP地址的变化重新泛洪LSA,并默认进行整个Area的SPF运算(若想改为部分有针对性的SPF需要用命令),而且结果还是选的相同的链路,但是就得这么折腾折腾;而IS-IS就不是很Care这种事情,有变化在LSP里说一声就行了,反正发这个LSP的IS没有变,然后进行部分的IP SPF计算。
而在链路变化时,比如一条链路Down掉,虽然是很惨烈的事情,但是OSPF就要好一些。对于OSPF路由器来讲就是失去个邻居,而且以这条链路为传输路径的那些目的网段我都要重新进行SPF计算来确定最优路径。IS-IS就不一样了,伤筋又动骨,一个中途的IS牺牲了,影响了后续N个IS的可达,每个IS又能通告N个IP网段,这样对于一个IP网络而言,N^2个IP网段的变动(最坏加夸张的考虑),无疑是比OSPF倒霉多了。
正是由于这一点上的差异,在前缀变化时(就Area内路由而言),OSPF就要根据这个IP地址的变化重新泛洪LSA,并默认进行整个Area的SPF运算(若想改为部分有针对性的SPF需要用命令),而且结果还是选的相同的链路,但是就得这么折腾折腾;而IS-IS就不是很Care这种事情,有变化在LSP里说一声就行了,反正发这个LSP的IS没有变,然后进行部分的IP SPF计算。
而在链路变化时,比如一条链路Down掉,虽然是很惨烈的事情,但是OSPF就要好一些。对于OSPF路由器来讲就是失去个邻居,而且以这条链路为传输路径的那些目的网段我都要重新进行SPF计算来确定最优路径。IS-IS就不一样了,伤筋又动骨,一个中途的IS牺牲了,影响了后续N个IS的可达,每个IS又能通告N个IP网段,这样对于一个IP网络而言,N^2个IP网段的变动(最坏加夸张的考虑),无疑是比OSPF倒霉多了。