分类: 系统运维
2008-06-21 14:11:16
链路状态协议主要有两种:OSPF和IS-IS。对大多数人来说,OSPF更常见一些,因为大一些的公司或者企业网络往往采用这种协议,作为IETF的公开协议,不同的厂商产品都可以支持,互通性很好。IS-IS很少能够见到,在Cisco和Juniper的教材里偶有提及。原理上都是一样的,表现形式也有些类似。由于历史的原因,ISIS更多的应用于世界上比较大型的ISP网络上。当然ISIS也同样是公开的协议,标准是由ISO持有的,而现在IETF负责研发和扩展。 OSPF建立在OSI三层上,所以有port number 89,因此只能承载IP。而ISIS直接作用于OSI二层,从原理上可以承载各种不同的三层协议,即多协议。 在扩展性上,OSPF没法与IS-IS相提并论,只是IPv6就迫使OSPF升级到与v2不兼容的version3,在实际操作上增加了许多麻烦。而IS-IS只需增加几个TLV就搞定,软件升级就行了。对于今后的扩展也可以照此办理,脱离了IP协议的束缚。协议设计时的前瞻性真是十分重要,可以今后的发展中逐渐弥补很多内在的缺陷,OSPF相对来说就差了些。 一个很有趣的概念,类似于“严于律己,宽以待人”- Be tolerant of what you receive and strict in what you send! 在网络的融合和分离上,IS-IS也同样显示出了无与伦比的优越。Juniper和Cisco都支持3个不同的Area number,可以无间断的进行,最大程度上减少了对生产业务的影响。 介绍、动机和历史背景。 随着互联网规模的迅速扩展,需要一个规模和扩展性上都能够相适应的网络路由协议。然后就是齐头并进的OSPF/IS-IS,二者互相攻讦也互相促进互相借鉴。 路由器结构 路由和转发的分离。整个路由器的功能分为路由和转发两个部分,各自处理相应的任务。路由部分处理路由协议、更新路由表和路由器的管理。转发部分根据转发表处理packet的传送和封装处理。转发表是从路由表转化过来的,全部意义上的转发表由几部分组成,这样可以单独更新而不影响整个转发。Cisco和 Juniper虽然在这个概念上是相同的,但在具体实施上差别比较大。 Cisco采用CEF的方式,比较折衷,可能是考虑到对以往路由器结构的兼容,路由转发的分离可以基于软件来实现。75系列就是这种做法的典型代表,RSP又要运行路由又要兼顾包转发,这些流量在Cx/y/zBus 上来回折腾,冲突多、效率低。迫使Cisco不断地升级RSP,试图用更强大的计算能力来解决CPU的负担。但由于Bus是公共的,始终也无法解决内部流量拥挤的问题。进一步的方式是加上VIP Card,让VIP来分担RSP的工作,也就是所谓的dCEF。但实际上转发表的生成还是在RSP上进行的,RSP的工作负担依然沉重。 公共的Bus和基于软件的转发显然无法适应日渐增长的流量需要,这就导致了专用内部通道Crossbar Fabric和硬件处理转发ASIC的产生,GSR12000就是这类产品的初期代表。可以明显的看出,从Engine0到Engine4,在GSR上软件到硬件的转化是逐渐进行的。 另外,Cisco的IOS是整体式的,任何一点改动都会牵涉到整个软件的整体结构的改变,这不利于新特性的实施。 虽然Cisco有这样那样的缺陷,但依然无法改变它在网络行业的霸主地位,它的演变也在缓慢但坚定的进行着。实际上Juniper路由器无论在软件还是硬件上,很大程度上都是吸取了Cisco的经验教训而发展出来的,(私下里说一句,包括人员和运营理念、业务范围都是从Cisco“吸取”来的, Juniper就是一个updated的Cisco Clone)现在已经到了二者互相影响的时候了。 有个疑惑,总体来说, Cisco对于Juniper的发展壮大是相当宽容的,虽然二者在市场上竞争的非常激烈,可是都还属于比较友好的竞争。说实话,Juniper从 Cisco挖走了不少相当厉害的人才,而Cisco似乎对此无动于衷。看看Cisco在北美起诉华为就知道了,那大家伙也是相当有脾气的。所以俺一直怀疑 Juniper是Cisco的一个分身,竞争不过是假象,其实是Cisco在发展中遇到了阻碍,传统的东西太多要继承而新的市场和技术需求又与此矛盾。万般无奈之下才弄出个新公司来抛弃传统阻碍,全力发展新技术。哈哈,笑谈,笑谈,某些Juniper Man看到这个还不得万里迢迢飞过来来杀俺。 Juniper 采用比较极端的方式分离路由和转发,实际上除了RE和PFE之间的100M或1000M专用通道fxp1之外,路由和转发设备在物理上都是完全隔离的,每一个都可以独立工作。实际的过路流量根本不会经过RE,RE只专心处理网络管理和路由协议等控制方面的任务。PFE通过专用ASIC来处理转发业务,路由查询由专用芯片负责。通过共享内存,实际流量等于是从进口到出口,延迟很少。 JUNOS是模块化设计的操作系统,也就是说,单独的一个功能用一个单独的软件模块来实现,每个进程都运行在自己的保护空间内,而各个功能(进程)之间的通讯要通过Kernel来进行,一个进程的崩溃不会影响到其他进程和整个系统。 IS-IS运行在OSI参考模型的第二层,不需要接口地址信息(三层)来传送消息,也适于传送多种路由信息。ISIS只能识别两种网络媒介类型:Broadcast和P2P。在Ethernet接口上,ISIS直接被IEEE802.3封装,ISIS使用Multicast传送。在P2P接口上,封装类型是PPP。 ISIS主要通过Level来分级划分网络,而OSPF是通过Area。无论是ISIS的Level还是OSPF的area,目的只有一个,减少链路状态数据库的规模,降低单个链路状态改变对整个网络状态的影响。在这种隔离上,ISIS做的比OSPF彻底,不过也导致了某些非最佳路由的产生,Route leaking就是为了解决这个问题(up/down bit)。 ISIS最令人头疼的恐怕就是它的NET地址。本身很简单,但要是用IP地址来转换,32到48,实在太繁杂,这也是俺最讨厌ISIS的地方。但是现实就是现实,往往是你最讨厌的东西会天天在你面前晃悠,而你最喜欢的东西总是躲在云里雾里。用lo的IP地址转换过来的sysID看起来非常面熟,有利于做Troubleshooting,应用很广;而那种简洁的49.xxxx.0x太过单纯和理想化就只能在实验室里待着。 跟OSPF不同,ISIS有L1、L2、P2P三种Hello(实际上IETF也开始觉得太多Hello种类有点多余,倾向于只用一种)。三次握手(P2P)、BFD(Ethernet)保证正确侦测双向链路状态。一个OSPF路由器能产生很多不同的LSA,而一个ISIS路由器严格的来讲,只产生一个LSP,当然其中包涵了很多TLV。 Overload bit老树开新花为BGP Synchronisation做贡献,mesh-group减少mesh连接下不必要的flooding,P2P LAN上Pseudonode suppression减少不必要的LSP。 SPF 计算要优先考虑Pseudonode,否则会遗失一些equal cost path,Juniper早期吃过这样的亏。Hierarchical forwarding table减少单个或少数链路状态变化对转发表的影响。 IS-IS缺乏对replay attack的防护,脆弱到一个简单的Hello就能让路由器功能紊乱。在实施MD5的时候要注意的JUNOS和IOS的不同。 在网络上同时部署IPv4和IPv6会导致某些意外状况的发生,Multiple Topology应运而生,不过其复杂和繁琐之处令人头疼。MPLS的出现解决了很多问题,甚至可以说再次推迟了IPv6的实施。 Cell based MPLS在许多Cisco教科书上津津乐道,而实际上由于核心带宽的飞速提高,ATM早已被推到网络边缘,所以ATM式的MPLS很少在实际中得到应用。另外由于LDP和RSVP的应用,很大程度上解决了Traffic Engineering中的信令控制问题,Packet based MPLS已经非常成熟。况且,IETF野心勃勃的最终目的应该是控制一切,GMPLS把手伸向光网络就是明证,它已经不仅仅满足于在2层以上的应用。做什么事都要“领会精神”,MPLS的精神就是取代任何繁琐的手工操作信令,也许今后做饭、洗衣服都要用到MPLS去自动处理。 LDP和 RSVP在ISP中都有很广泛的应用,这两种信令协议的功能特性也各有千秋,换句话说,“互补性很强”。唯一有些疑惑的地方是,感觉Juniper在教材中特别强调RSVP,而Cisco则相反,对LDP谈论的比较多些。而实际上这两家基本上把持着世界上所有核心网络,IETF的工作组里全是他们的工程师,协议互通性上毫无问题,理论上不存在谁对哪个协议支持上更强一些。可能是Juniper更愿意突出一些它对信令处理的强大能力方面吧,俺记得有某些人说过在FRR上Juniper神乎其神的表现。LDP可能对中小型ISP来说更适合些,负担不大,实施简洁,维护方便。不过好像也没有哪一家在网络单独应用RSVP,往往是和LDP结合起来。二者并不对立,反而能够互相弥补不足。 |