下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 ospf协议

ospf协议.pdf

ospf协议

艾梅达尔
2012-03-21 0人阅读 举报 0 0 暂无简介

简介:本文档为《ospf协议pdf》,可适用于IT/计算机领域

OSPF路由协议概述OSPF路由协议概述内容简介随着Internet技术在全球范围的飞速发展OSPF已成为目前Internet广域网和Intranet企业网采用最多、应用最广泛的路由协议之一。OSPF是OpenShortestPathFirst(开放最短路由优先协议)的缩写。它是IETF组织开发的一个基于链路状态的内部网关协议。目前针对IPv协议使用的是OSPFVersion(RFC)。OSPF协议是由InternetEngineeringTaskForce的OSPF工作组所开发的特别为TCPIP网络而设计包括明确的支持CIDR和标记来源于外部的路由信息。OSPF也提供了对路由更新的验证并在发送接收更新时使用IP多播。此外还作了很多的工作使得协议仅用很少的路由流量就可以快速地响应拓扑改变。本文主要介绍OSPF路由协议的基本原理包括:OSPF的协议报文、邻居状态机、链路状态同步以及DR、BDR选举和OSPF区域的划分。本文来源于HC网络学院教材作为OSPF路由协议实验的主要参考资料。通过这个实验学生应该能掌握OSPF路由协议的基本概念和基本原理OSPF路由计算过程具备规划和配置OSPF路由协议的能力并能处理一般的OSPF故障。说明:若没有特别说明下文中所提到的OSPF均指OSPFv。相关概念回顾在理论课程中我们对距离矢量和链路状态路由协议有了一定的了解。下面我们将会回顾一些相关的概念指出距离矢量算法和链路状态算法的一些区别。路由表路由器转发分组的关键是路由表。每个路由器中都保存着一张路由表表中每条路由项都指明分组到某子网或某主机应通过路由器的哪个物理端口发送然后就可到达该路径的下一个路由器或者不再经过别的路由器而传送到直接相连的网络中的目的主机。根据来源不同路由表中的路由通常可分为以下三类:OSPF路由协议概述链路层协议发现的路由(也称为接口路由或直连路由)由网络管理员手工配置的静态路由动态路由协议发现的路由。路由协议静态路由协议动态路由协议距离矢量路由协议(如RIP)链路状态路由协议(如OSPFISIS)图如图路由协议的分类其中动态路由协议又包括有:TCPIP协议栈的RIP(RoutingInformationProtocol路由信息协议)协议、OSPF(OpenShortestPathFirst开放式最短路径优先)协议OSI参考模型的ISIS(IntermediateSystemtoIntermediateSystem)协议等。如图。距离矢量算法和链路状态算法动态路由协议有很多种分类标准也很多。主要的分类标准是根据算法的不同来划分不同的算法能适应的网络规模也不尽相同。目前常见的动态路由协议根据使用的算法可分为:¾距离矢量协议(DistanceVector):包括RIP和BGP。其中BGP也被称为路径矢量协议(PathVector)。¾链接状态协议(LinkState):包括OSPF和ISIS。以上两种算法的主要区别在于发现路由和计算路由的方法。距离矢量协议(DistanceVector):距离矢量协议也称为BellmanFord协议网络中路由器向相邻的路由器发送它们的整个路由表。路由器在从相邻路由器接收到的信息的基础之上建立自己的路由表。然后将信息传递到它的相邻路由器。这样一级级的传递下去以达到全网同步。也就是说距离矢量路由表中的某些路由项有可能是建立在第手信息的基础之上的每个路由器都不了解整个网络拓OSPF路由协议概述扑它们只知道与自己直接相连的网络情况并根据从邻居得到的路由信息更新自己的路由表进行矢量行叠加后转发给其它的邻居距离矢量算法存在的一个重要的问题就是会产生路由环路。路由环路问题产生的原因和距离矢量算法的原理有关正如前面所讲的每个路由器根据从其它路由器接收到的信息来建立自己的路由表。如果某个路由器出现“故障”或者因为别的原因而无法在网上使用时就会造成路由环路。针对产生回路的问题防止和解决的方法有:¾定义最大路由权值¾水平分割¾毒性逆转¾路由保持法¾触发更新距离矢量协议无论是实现还是管理都比较简单但是它的收敛速度慢报文量大占用较多网络开销并且会产生路由环路为避免路由环路得提供特殊处理。路由环路是DV算法必须要解决的问题只有处理好环路问题的路由协议才能应用在实际的系统中。常见的DV路由协议一般都会采用上述阐述的多种方法解决路由环路的问题。链路状态算法链路状态算法对路由的计算方法和距离矢量算法有本质的差别。距离矢量算法是一个平面式的,所有的路由表项学习完全依靠邻居,交换的是整个路由表项。链路状态是一个层次式的,执行该算法的路由器不是简单的从相邻的路由器学习路由而是把路由器分成区域收集区域内所有路由器的链路状态信息根据链路状态信息生成网络拓扑结构每一个路由器再根据拓扑结构图计算出路由。链路状态路由协议的一些注意事项如下:z网络中的设备并不向邻居传递“路由信息”而是通告给邻居一些链路状态。z网络中的设备(路由器)最终都会得到网络的拓扑结果元素只是详细程度并不相同。z各设备以自身为“树根”根据LSDB中的数据计算到各个网断的“最短生成树”。z由于各设备有义务将网络拓扑信息向下传递而具体的路由信息又是各设备自己计算所得所以链路状态协议中对是否“发出路由”不能进行控制但可以控制路由的某些属性。距离矢量算法和链路状态算法的比较采用链路状态算法的路由器首先要得到整个网络的拓扑结构再根据网络拓扑图计算出路由。这种路由的计算方法对路由器的硬件相对要求较高但它计算准确一般可以确保网络OSPF路由协议概述中没有路由环路存在。由于路由不是在路由器间顺序传递的网络动荡时路由收敛速度较快。而且路由器不需要定期的将路由信息复制到整个网络中网络流量相对较小。表对这两种路由算法作一比较:表距离矢量算法与链路状态算法距离矢量算法链路状态算法是否有环路有无收敛速度慢快对路由器CPU、RAM的要求低高网络流量大小典型协议RIP、BGPOSPF、ISISOSPF的基本概念OSPF是OpenShortestPathFirst(即“开放最短路径优先协议”)的缩写。IETF(InternetEngineeringTaskForce)于年提出的OSPF是一个基于链路状态的动态路由协议。OSPF是一类InteriorGatewayProtocol(内部网关协议IGP)它处理在一个自治系统中的路由表信息。当前OSPF协议使用的是第二版最新的RFC是。OSPF协议是特别为TCPIP网络而设计包括明确的支持CIDR和标记来源于外部的路由信息。OSPF也提供了对路由更新的验证并在发送接收更新时使用IP多播。此外还作了很多的工作使得协议仅用很少的路由流量就可以快速地响应拓扑改变。OSPF用链路状态算法来计算在每个区域中到所有目的的最短路径当一个路由器首先开始工作或者任一个路由变化发生这个配备给OSPF的路由器将LSA扩散到同一级区域内所有路由器这些LSA包含这个路由器的链接状态和它与邻居路由器联系的信息从这些LSA的收集中形成了链路状态数据库在这个区域中的所有路由器都有一个特定的数据库来描述这个区域的拓扑结构。在OSPF路由协议中可以通过划分区域来分割整个自治系统每一个区域都有着该区域独立的网络拓扑数据库及网络拓扑图。对于每一个区域其网络拓扑结构在区域外是不可见的同样在每一个区域中的路由器对其域外的其余网络结构也不了解。这意味着OSPF路由域中的网络链路状态数据广播被区域的边界挡住了这样做有利于减少网络中链路状态数据包在全网范围内的广播也是OSPF将自治系统划分成很多个区域的重要原因。OSPF路由协议概述OSPF仅通过在IP包头中的目标地址来转发IP包。IP包在AS中被转发而没有被其他协议再次封装。OSPF是一种动态路由协议它可以快速地探知AS中拓扑的改变(例如路由器接口的失效)并在一段时间的收敛后计算出无环路的新路径。收敛的时间很短且只使用很小的路由流量。说明:作为一种链路状态的路由协议OSPF将链路状态广播数据包LSA(LinkStateAdvertisement)传送给在某一区域内的所有路由器这一点与距离矢量路由协议不同。运行距离矢量路由协议的路由器是将部分或全部的路由表传递给与其相邻的路由器。OSPF的基本特点OSPF是一种基于链路状态(Linkstate)算法的协议其核心思想是:每一台路由器将自己周边的链路状态(包括接口的直接路由、相连的路由器等信息)描述出来发送给网络中所有的路由器。每台路由器在收到其他所有路由器的发送的链路状态信息之后运行ShortestPathFirst算法计算路由。随着Internet技术在全球范围的飞速发展OSPF已成为目前Internet广域网和Intranet企业网采用最多、应用最广泛的路由协议之一。OSPF协议具有如下特点:z适应范围OSPF支持各种规模的网络最多可支持几百台路由器。z快速收敛如果网络的拓扑结构发生变化OSPF立即发送更新报文使这一变化在自治系统中同步。z无自环由于OSPF通过收集到的链路状态用最短路径树算法计算路由故从算法本身保证了不会生成自环路由。z子网掩码由于OSPF在描述路由时携带网段的掩码信息所以OSPF协议不受自然掩码的限制对VLSM提供很好的支持。z区域划分OSPF协议允许自治系统的网络被划分成区域来管理区域间传送的路由信息被进一步抽象从而减少了占用网络的带宽。z等值路由OSPF支持到同一目的地址的多条等值路由即到达同一个目的地有多个下一跳这些等值路由会被同时发现和使用。z路由分级OSPF使用类不同的路由按优先顺序来说分别是:区域内路由、区域间路由、第一类外部路由、第二类外部路由。OSPF路由协议概述z支持验证它支持基于接口的报文验证以保证路由计算的安全性。z组播发送OSPF在有组播发送能力的链路层上以组播地址发送协议报文不仅达到了广播的作用而且最大程度的减少了对其他网络设备的干扰。RouterIDOSPF协议使用一个被称为RouterID的位无符号整数来唯一标识一台路由器。基于这个目的每一台运行OSPF的路由器都需要一个RouterID。这个RouterID一般需要手工配置一般将其配置为该路由器的某个接口的IP地址。由于IP地址是唯一的所以这样就很容易保证RouterID的唯一性。在没有手工配置RouterID的情况下一些厂家的路由器(包括Quidway系列)支持自动从当前所有接口的IP地址自动选举一个IP地址作为RouterID。RouterID选择注意点:z首先选取最大的loopback接口地址z如果没有配置loopback接口那么就选取最大的物理接口地址z可以通过命令强制改变RouterID:VRP平台系统视图下routerid<ipaddress>z如果一台路由器的RouterID在运行中改变则必须重启OSPF协议或重启路由器才能使新的RouterID生效协议号:OSPF协议用IP报文直接封装协议报文协议号是。说明:通常OSPF的协议报文是不被转发的只能传递一跳即在IP报文头中TTL值被设为(虚连接除外)。为保证OSPF运行的稳定性在进行网络规划时应该确定路由器ID的划分并手工配置。手工配置路由器的ID时必须保证自治系统中任意两台路由器的ID都不相同。通常的做法是将路由器的ID配置为与该路由器某个接口的IP地址一致。VRP平台的OSPF支持多进程在同一台路由器上可以运行多个不同的OSPF进程它们之间互不影响彼此独立。OSPF进程号是本地概念不影响与其它路由器之间的报文交换。因此不同的路由器之间即使进程号不同也可以进行报文交换。不同OSPF进程之OSPF路由协议概述间的路由交互相当于不同路由协议之间的路由交互。路由器的一个接口只能属于某一个OSPF进程。SPF算法和COST值SPF算法SPF算法是OSPF路由协议的基础。SPF算法有时也被称为Dijkstra算法这是因为最短路径优先算法SPF是Dijkstra发明的。SPF算法将每一个路由器作为根(ROOT)来计算其到每一个目的地路由器的距离每一个路由器根据一个统一的数据库会计算出路由域的拓扑结构图该结构图类似于一棵树在SPF算法中被称为最短路径树。Cost值在OSPF路由协议中最短路径树的树干长度即OSPF路由器至每一个目的地路由器的距离称为OSPF的Cost。Cost值应用于每一个启动了OSPF的链路它是一个bit的正数范围是~。Cost值越小说明路径越好。OSPF选择路径是依靠整个链路Cost值的总和。那么Cost值是如何计算的呢?OSPF协议中Cost值的计算方法是用链路带宽。在这里链路带宽以bps来表示。也就是说OSPF的Cost与链路的带宽成反比带宽越高Cost越小表示OSPF到目的地的距离越近。举例来说k的链路花费是M以太网链路花费是k的链路花费是T的链路花费是。缺省情况下接口按照当前的波特率自动计算接口运行OSPF协议所需的开销。OSPF路由的计算过程OSPF是基于链路状态算法的路由协议所有对路由信息的描述都是封装在LSA中发送出去。LSA(LinkStateAdvertisement)用来描述路由器的本地状态LSA包括的信息是关于路由器接口的状态和所形成的邻接状态。每台OSPF路由器都会收集其它路由器发来的LSA所有的LSA放在一起便组成了链路状态数据库LSDB(LinkStateDatabase)。LSDB则是对整个自治系统的网络拓扑结构的描述。到达某个目的网段的最短路径可通过这些信息计算出来。OSPF路由协议概述在图中描述了通过OSPF协议计算路由的过程。一个典型的网络由四台运行OSPF的路由器组成连线旁边的数字表示从一台路由器到另一台路由器所需要的花费。为简化问题我们假定两台路由器相互之间发送报文所需花费是相同的每台路由器都根据自己周围的网络拓扑结构生成一条LSA(LinkStateAdvertisement)并通过相互之间发送协议报文将这条LSA发送给网络中其它的所有路由器。这样每台路由器都收到了其它路由器的LSA所有的LSA放在一起称作LSDB(链路状态数据库)。显然台路由器的LSDB(LinkStateDatabase)都是相同的。图图OSPF协议计算路由的过程由于一条LSA是对一台路由器周围网络拓扑结构的描述那么LSDB则是对整个网络的拓扑结构的描述。路由器很容易将LSDB转换成一张带权的有向图这张图便是对整个网络拓扑结构的真实反映。显然台路由器得到的是一张完全相同的拓扑图。接下来每台路由器在图中以自己为根节点使用SPF算法计算出一棵最短路径树由这棵树得到了到网络中各个节点的路由表。显然台路由器各自得到的路由表是不同的。这样每台路由器都计算出了到其它路由器未知网段的路由。OSPF路由协议概述OSPF报文头OSPF有五种报文类型他们有相同的报文头。如下图所示。AuthenticationVersionRouterIDAreaIDPacketlengthTypeAuTypeChecksum图OSPF报文头格式主要字段的解释如下:zVersion:OSPF的版本号。对于OSPFv来说其值为。zType:OSPF报文的类型。数值从到分别对应Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。zPacketlength:OSPF报文的总长度包括报文头在内单位为字节。zRouterID报文起源的RouterID。zAreaID一个位的数标识报文属于哪个区域所有OSPF报文只属于单个区域且只有一跳。当报文在虚链接上承载时会打上骨干区域的标签。zChecksum包的整个内容的校验从OSPF报文头部开始但是除了位的认证字段。zAuType认证类型包括四种:(无需认证)(明文认证)(密文认证)和其他类型(IANA保留)。当不需要认证时只是通过Checksun检验数据的完整性当使用明文认证时位的认证字段被设置成位的明文密码当使用密文认证时对于每一个OSPF报文共享密钥都会产生一个“消息位”加在OSPF报文的后面由于在网络上从来不以明文的方式发送密钥所以提高了网络安全性。zAuthentication:其数值根据验证类型而定。当验证类型为时未作定义为时此字段为密码信息类型为时此字段包括KeyID、MD验证数据长度和序列号的信息。说明:MD验证数据添加在OSPF报文后面不包含在Authenticaiton字段中。OSPF路由协议概述OSPF的五种报文类型zHELLO报文(HelloPacket):最常用的一种报文周期性的发送给本路由器的邻居使用的组播地址。DR和BDR发送和接收报文使用的组播地址是。HELLO报文内容包括一些定时器的数值DRBDR以及自己已知的邻居。根据RFC的规定要保持网络邻居间的hello时间间隔一致。需要注意的是hello时钟的值与路由收敛速度、网络负荷大小成反比。缺省情况下pp、broadcast类型接口发送Hello报文的时间间隔的值为秒pmp、nbma类型接口发送Hello报文的时间间隔的值为秒。说明:根据路由器使用链路层协议的不同OSPF将网络分为四种类型:点到点PP(pointtopoint)类型、广播(Broadcast)类型、NBMA(NonBroadcastMultiAccess)类型、点到多点PMP(pointtomultipoint)类型。注意:没有一种链路层协议会被缺省的认为是PointtoMultipoint类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。具体内容我们会在OSPF的网络类型章节讲解。zDD报文(DatabaseDescriptionPacket):路由信息(连接状态传送报文)只在形成邻接关系的路由器间传递。首先它们之间互发DD(databasedescription)报文告之对方自己所拥有的路由信息内容包括LSDB中每一条LSA的摘要(摘要是指LSA的HEAD通过该HEAD可以唯一标识一条LSA)。这样做是为了减少路由器之间传递信息的量因为LSA的HEAD只占一条LSA的整个数据量的一小部分根据HEAD对端路由器就可以判断出是否已经有了这条LSA。DD报文有两种一种是空DD报文用来确定MasterSlave关系(避免DD报文的无序发送)。确定MasterSlave关系后才发送有路由信息的DD报文。收到有路由信息的DD报文后比较自己的数据库发现对方的数据库中有自己需要的数据则向对方发送LSR(LinkStateRequest)报文请求对方给自己发送数据。OSPF路由协议概述zLSR报文(LinkStateRequestPacket):两台路由器互相交换过DD报文之后知道对端的路由器有哪些LSA是本地的LSDB所缺少的或是对端更新的LSA这时需要发送LSR报文向对方请求所需的LSA。内容包括所需要的LSA的摘要。zLSU报文(LinkStateUpdatePacket):用来向对端路由器发送所需要的LSA内容是多条LSA(全部内容)的集合。zLSAck报文(LinkStateAcknowledgmentPacket)由于没有使用可靠的TCP协议但是OSPF包又要求可靠的传输所以就有了LSAck包。它用来对接收到的LSU报文进行确认。内容是需要确认的LSA的HEAD(一个报文可对多个LSA进行确认)。DD报文、LSR报文、LSU报文发出后在没有得到应有的对方相应的LSR、LSU、LSAck报文时会重发。(例外:对DD报文若收到后发现没有必要产生连接状态请求报文则不发连接状态请求报文。)同步后数据改变则只向形成Adjacency关系的路由器发LSU报文。LSA头格式所有的LSA都有相同的报文头其格式如下图所示。LSageLinkStateIDOptionsLStypeAdvertisingRouterLSsequencenumberLSchecksumlength图LSA的头格式首先我们分析一下LSA报文头:LSA头部都是个字节它包含了足够的信息来唯一标识一条LSA(LStypeLinkStateIDandAdvertisingRouter)。LSA多实例在同一时候可以存在于路由域中它被用来决定哪一个实例是最新的。LSA头部还包括LS老化、LS序列号和LS校验和等字段。OSPF路由协议概述主要字段的解释如下:LSage用来标识LS产生的时间。生成LSA的路由器将LS时域初始化为在洪泛过程中每经过一个路由器要按InfTransDelay的量增加这个量表示传输LSA到下一个跳所需要的时间。当该时间达到所设定的MaxAge参数时要撤消该LSA。Options用来描述支持的路由域主要包括DC、EA、NP、MC、E、T等选项。DC指的是始发路由器支持DemandCircuits(按需拨号等)EA指的是始发路由器支持ExternalAttributesLSAs(现在未推广)NP只用在Hello中N=说明支持NSSAP只用在NSSA中通知ABR把type的LSA翻译成type的LSAMC只在MOSPF中用到E表示可以接受外部路由(不是stub区)在一个area中的所有router此位必须一致(Hello中体现)否则邻接关系无法建立T表示始发路由器支持TOS。LStype链路类型。每种类型的LSA都有唯一的通告格式。LinkStateID这个字段标识被描述的网络环境的一部分LinkStateID的内容取决于LSA的类型即不同类型的LSA其LinkStateID也是不同的。比如当LSA的类型是Type时LinkStateID是始发路由器的RouterID当LSA的类型是Type时LinkStateID是DR在该网段上接口的IP地址当LSA的类型是Type时LinkStateID是被通告的网络子网的IP地址当LSA的类型是Type时LinkStateID是被通告ASBR的RouterID当LSA的类型是Type时LinkStateID是目的地的IP地址。AdvertisingRouter指始发此LSA的路由器的RouterID。比如在NetworkLSAs中这个字段就是DR在该网段上接口的IP地址。LSsequencenumber用于识别LSA包是否是一个最新包。路由器每生成一个新的LSA时将该序列号加。LSchecksum用来检查LSA的完整性包括除了LSage之外的LSA头部的内容。LengthLSA的长度用bytes表示。LSA的头部包括字节。LSA头中的链路类型、链路状态ID和通告路由器的RouterID是一个LSA的唯一标识。一个LSA将有多个实例不同的实例通过LS的序列号、LS的校验和及LS的Age字段来描述。因此必须要决定其实例是否是最近的这要通过检查LS的序列号、LS的校验和及LS的Age字段内容。OSPF路由协议概述LSA的类型OSPF是基于链路状态算法的路由协议所有对路由信息的描述都是封装在LSA中发送出去。当路由器初始化或当网络结构发生变化(例如增减路由器链路状态发生变化等)时路由器会产生链路状态广播数据包LSA(LinkStateAdvertisement)该数据包里包含路由器上所有相连的链路也即为所有端口的状态信息。LSA根据不同的用途分为不同的种类主要有如下类型的LSA:zRouterLSA(Type=):是最基本的LSA类型所有运行OSPF的路由器都会生成这种LSA。主要描述本路由器运行OSPF的接口的连接状况花费等信息。对于ABR它会为每个区域生成一条RouterLSA。这种类型的LSA传递的范围是它所属的整个区域。zNetwrokLSA(Type=):本类型的LSA由DR生成。对于广播和NBMA类型的网络为了减少该网段中路由器之间交换报文的次数而提出了DR的概念。一个网段中有了DR之后不仅发送报文的方式有所改变链路状态的描述也发生了变化。在DROther和BDR的RouterLSA中只描述到DR的连接而DR则通过NetworkLSA来描述本网段中所有已经同其建立了邻接关系的路由器。(分别列出它们RouterID)。同样这种类型的LSA传递的范围是它所属的整个区域。zNetworkSummaryLSA(Type=):本类型的LSA由ABR生成。当ABR完成它所属一个区域中的区域内路由计算之后查询路由表将本区域内的每一条OSPF路由封装成NetworkSummaryLSA发送到区域外。LSA中描述了某条路由的目的地址、掩码、花费值等信息。这种类型的LSA传递的范围是ABR中除了该LSA生成区域之外的其他区域。zASBRSummaryLSA(Type=):本类型的LSA同样是由ABR生成。内容主要是描述到达本区域内部的ASBR的路由。这种LSA与Type类型的LSA内容基本一样只是Type的LSA描述的目的地址是ASBR是主机路由所以掩码为。这种类型的LSA传递的范围与Type的LSA相同。OSPF路由协议概述zASExternalLSA(Type=):本类型的LSA由ASBR生成。主要描述了到自治系统外部路由的信息LSA中包含某条路由的目的地址、掩码、花费值等信息。本类型的LSA是唯一一种与区域无关的LSA类型它并不与某一个特定的区域相关。这种类型的LSA传递的范围整个自治系统(STUB区域除外)。zMulticastOSPFLSA(Type=):使用在OSPF多播应用程序里。zNotSoStubbyArea(Type=):本类型的LSA由NotSoStubbyarea(NSSA)区域中ASBR生成。为了解决ASE路由(自治系统外部路由)单向传递的问题NotSoStubbyarea(NSSA)中重新定义了一种LSAType类型的LSA作为区域内的路由器引入外部路由时使用。该类型的LSA除了类型标识与Type不相同之外其它内容基本一样。这样区域内的路由器就可以通过LSA的类型来判断是否该路由来自本区域内。但由于Type类的LSA是新定义的对于不支持NSSA属性的路由器无法识别所以协议规定:在NSSA的ABR上将NSSA内部产生的Type类型的LSA转化为Type类型的LSA再发布出去并同时更改LSA的发布者为ABR自己。这样NSSA区域外的路由器就可以完全不用支持该属性。在NSSA区域内的所有路由器必须支持该属性(包括NSSA的ABR)而自治系统中的其他路由器则不需要。zExternalAttributesLSA(Type=):特殊的LSA还没有实现。当BGP信息需要在OSPF上承载时需要用到此LSA。zopaqueLSA(Type=~):用于MPLS流量工程有关此LSA的详细应用请参考网络学院MPLS流量工程培训教材或RFC文档。当一台路由器向它的邻居发送一条LSA后需要等到对方的确认报文。若在重传间隔时间内没有收到对方的确认报文就会向邻居重传这条LSA。OSPF路由协议概述邻居和邻接在OSPF中邻居(Neighbors)和邻接(Adjacencies)是两个不同的概念。OSPF路由器启动后便会通过OSPF接口向外发送Hello报文。收到Hello报文的OSPF路由器会检查报文中所定义的一些参数如果双方一致就会形成邻居关系。形成邻居关系的双方不一定都能形成邻接关系这要根据网络类型而定。只有当双方成功交换DD报文并能交换LSA之后才形成真正意义上的邻接关系。为了交换路由信息邻居路由器之间首先要建立邻接关系并不是每两个邻居路由器之间都能建立邻接关系。HELLOInterval:接口上发送报文的时间间隔以秒为单位。OSPF邻居之间的Hello定时器的时间间隔要保持一致。Hello定时器的值与路由收敛速度、网络负荷大小成反比。如果两路由器不具有相同的呼叫周期则不能成为邻接关系。DEADInterval:如果在DEADTIME指定的秒数内没有从已建立的邻居处收到报文那么邻居被宣布为故障状态。如果Hello报文中的DeadInterval与接收端口所设置的DeadInterval值不相同则丢弃该报文。因此要确保两邻居路由器具有相同的参数。在同一接口上失效时间应至少为Hello间隔时间的倍。说明:Hello报文主要负责建立和维护邻接关系周期性的在路由器的接口上发送。当路由器发现自己被列在邻居路由器的hello报文中双向通信就建立起来。在不同类型的链路上hello报文工作的方式也不同。邻居建立后还需要通过HELLO报文进行邻居关系的维持有两个定时器来进行这项工作: HELLOTIME:缺省为秒(对于NBMA网络为秒) DEADTIME:缺省为倍的HELLOTIME邻接关系形成之后接下来就是同步链路状态数据库。OSPF路由协议概述OSPF的邻居状态机图OSPF的邻居状态机zDown:邻居状态机的初始状态是指在过去的DeadInterval时间内没有收到对方的Hello报文。zAttempt:只适用于NBMA类型的接口处于本状态时定期向那些手工配置的邻居发送HELLO报文。zInit:本状态表示已经收到了邻居的HELLO报文但是该报文中列出的邻居中没有包含我的RouterID(对方并没有收到我发的HELLO报文)。zWay:本状态表示双方互相收到了对端发送的HELLO报文建立了邻居关系。在广播和NBMA类型的网络中两个接口状态是DROther的路由器之间将停留在此状态。其他情况状态机将继续转入高级状态。zExStart:在此状态下路由器和它的邻居之间通过互相交换DD报文(该报文并不包含实际的内容只包含一些标志位)来决定发送时的主从关系。建立主从关系主要是为了保证在后续的DD报文交换中能够有序的发送。OSPF路由协议概述zExchange:路由器将本地的LSDB用DD报文来描述并发给邻居。zLoading:路由器发送LSR报文向邻居请求对方的LSU报文。zFull:在此状态下邻居路由器的LSDB中所有的LSA本路由器全都有了。即本路由器和邻居建立了邻接(adjacency)状态。说明:Down、Way、Full的状态是指稳定的状态其他状态则是在转换过程中瞬间(一般不会超过几分钟)存在的状态。本路由器和状态可能与对端路由器的状态不相同。例如本路由器的邻居状态是Full对端的邻居状态可能是Loading。链路状态数据库的同步过程 链路状态数据库同步过程的主要步骤:zHELLO报文发现邻居z主从关系协商zDD报文交换zLSA请求zLSA更新()LSA应答如图显示了两台路由器之间如何通过发送种协议报文来建立邻接关系以及邻居状态机的迁移。zRT的一个连接到广播类型网络的接口上激活了OSPF协议并发送了一个HELLO报文(使用组播地址)。由于此时RT在该网段中还未发现任何邻居所以HELLO报文中的Neighbor字段为空。zRT收到RT发送的HELLO报文后为RT创建一个邻居的数据结构。RT发送一个HELLO报文回应RT并且在报文中的Neighbor字段中填入RT的RouterID表示已收到RT的HELLO报文并且将RT的邻居状态机置为Init。OSPF路由协议概述zRT收到RT回应的HELLO报文后为RT创建一个邻居的数据结构并将邻居状态机置为Exstart状态。下一步双方开始发送各自的链路状态数据库。图两台路由器之间建立邻接关系的过程为了提高发送的效率双方需先了解一下对端数据库中那些LSA是自己所需要的(如果某一条LSA自己已经有了就不再需要请求了)。方法是先发送DD报文DD报文中包含了对本地数据库中LSA的摘要描述(每一条摘要可以唯一标识一条LSA但所占的空间要少得多)。由于OSPF直接用IP报文来封装自己的协议报文所以在传输的过程中必须考虑到报文传输的可靠性。为了做到这一点在DD报文的发送过程中需要确定双方的主从关系。作为Master的一方定义一个序列号seq每发送一个新的DD报文将seq加一。作为Slave的一方每次发送DD报文时使用接收到的上一个Master的DD报文中的seq。实际上这种序列号机制是一种隐含的确认方法。如果再加上每个报文都有超时重传就可以保证这种传输是可靠的。RT首先发送一个DD报文宣称自己是Master(MS=)并规定序列号为x。I=表示这是第一个DD报文报文中并不包含LSA的摘要只是为了协商主从关系。M=说明这不是最后一个报文。zRT在收到RT的DD报文后将RT的邻居状态机改为Exstart并且回应了一个DD报文(该报文中同样不包含LSA的摘要信息)。由于RT的RouterID较大所以在报文中RT认为自己是Master并且重新规定了序列号为y。OSPF路由协议概述zRT收到报文后同意了RT为Master并将RT的邻居状态机改为Exchange。RT使用RT的序列号y来发送新的DD报文该报文开始正式地传送LSA的摘要。在报文中RT将MS=说明自己是Slave。zRT收到报文后将RT的邻居状态机改为Exchange并发送新的DD报文来描述自己的LSA摘要需要注意的是:此时RT已将报文的序列号改为y了。z上述过程持续进行RT通过重复RT的序列号来确认已收到RT的报文。RT通过将序列号加来确认已收到RT的报文。当RT发送最后一个DD报文时将报文中的M=表示这是最后一个DD报文了。zRT收到最后一个DD报文后发现RT的数据库中有许多LSA是自己没有的将邻居状态机改为Loading状态。此时RT也收到了RT的最后一个DD报文但RT的LSART都已经有了不需要再请求所以直接将RT的邻居状态机改为Full状态。zRT发送LSRequest报文向RT请求所需要的LSA。RT用LSUpdate报文来回应RT的请求。RT收到之后需要发送LSAck报文来确认。上述过程持续到RT中的LSA与RT的LSA完全同步为止。此时RT将RT的邻居状态机改为Full状态。说明:以上过程是两台路由器由相互没有发现对方的存在到建立邻接关系的过程。或者可以理解为网络中新加入一台路由器时的处理情况。当两台路由器之间的状态机都已经达到Full状态之后如果此时网络中再有路由变化时就无须重复以上的所有步骤。只由一方发送LSUpdate报文通知需要更新的内容另一方发送LSAck报文予以回应即可。双方的邻居状态机在此过程中不再发生变化。OSPF路由协议概述OSPF的四种网络类型OSPF协议计算路由是以本路由器周边网络的拓扑结构为基础的。每台OSPF路由器根据自己周围的网络拓扑结构生成链路状态通告LSA(LinkStateAdvertisement)并通过更新报文将LSA发送给网络中的其它OSPF路由器。根据路由器使用链路层协议的不同OSPF将网络分为四种类型:z广播(Broadcast)类型:当链路层协议是Ethernet、FDDI时OSPF缺省认为网络类型是Broadcast。在该类型的网络中通常以组播形式(和)发送协议报文选举DRBDR。图OSPF的四种网络类型zNBMA(NonBroadcastMultiAccess)类型:当链路层协议是帧中继、ATM或X时OSPF缺省认为网络类型是NBMA。在该类型的网络中以单播形式发送协议报文。手工指定邻居选举DRBDRDRBDR要求和DROTHER完全互连。z点到多点PMP(pointtomultipoint)类型:没有一种链路层协议会被缺省的认为是PointtoMultipoint类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。在该类型的网络中以组播形式()发送协议报文。多播hello包自动发现邻居不要求DRBDR的选举。OSPF路由协议概述z点到点PP(pointtopoint)类型:当链路层协议是PPP、HDLC和LAPB时OSPF缺省认为网络类型是PP。在该类型的网络中以组播形式()发送协议报文。无需选举DRBDR当只有两个路由器的接口要形成邻接关系的时候才使用。说明:在OSPF协议中NBMA和点到多点都是指非广播多点可达的网络但NBMA网络必须满足全连通(fullmeshed)的要求即任意两点都可以不经转发而使报文直达对端。否则我们称该网络是点到多点网络。DR(DesignatedRouter)和BDR(BackupDesignatedRouter)广播及NBMA网段中的N连接问题图广播及NBMA网段中的N连接问题在广播和NBMA类型的网络上任意两台路由器之间都需要传递路由信息(flood)如果网络中有N台路由器则需要建立N*(N)个邻接关系。任何一台路由器的路由变化都需要在网段中进行N*(N)次的传递。这些邻居关系要定期更新链路状态数据库LSDB不仅浪费了宝贵的带宽也会消耗大量的系统资源。应该怎么处理呢?OSPF路由协议概述DR(DesignatedRouter)概念的提出:为了解决这个问题OSPF协议指定一台路由器DR(DesignatedRouter)来负责传递信息。所有的路由器都只将路由信息发送给DR再由DR将路由信息发送给本网段内的其他路由器。两台不是DR的路由器(DROther)之间不再建立邻接关系也不再交换任何路由信息。这样在同一网段内的路由器直谏只需建立N个邻接关系每次路由变化只需进行N次的传递即可。图 DR(DesignatedRouter)概念的提出如上图在一个广播的网段中存在N=台路由器则需要建立M=n(n)=个邻接关系。网络中有每台路由器则需要建立个邻接关系。选举DR后两台不是DR的路由器(DROther)之间不再建立邻接关系也不再交换任何路由信息。这样在同一网段内的路由器之间只需建立个邻接关系每次路由变化只需进行次的传递即可。OSPF路由协议概述DR(DesignatedRouter)的选举过程:通过Hello报文的所带priority位和DR、BDR信息可以选出该网段的DR。所有路由器认可一个优先级最高的路由器作为DR优先级次高的作为BDR所有这个网段的路由器与DRBDR构成邻接关系。哪台路由器会成为本网段内的DR并不是人为指定的而是由本网段中所有的路由器共同选举出来的。DR的选举过程如下:z登记选民本网段内的运行OSPF的路由器(本村内的岁以上公民)z登记候选人本网段内的Priority>的OSPF路由器Priority是接口上的参数可以配置缺省值是(本村内的岁以上公民且在本村居住年以上)z竞选演说一部分Priority>的OSPF路由器自己是DR(所有的候选人都自认为应该当村长)z投票Priority大于的路由器都可作为“候选者”选票就是Hello报文。每台路由器将自己选出的DR写

VIP免券下载文档

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/46

ospf协议

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利