开放式最短路径优先OSPF(Open Shortest Path First)协议是一种基于链路状态的内部网关协议,它封装在IP报文中,协议号是89。因为OSPF是由IETF开发的,它的使用不受任何厂商限制,所有人都可以使用,所以称为开放的,而最短路径优先(SPF)只是OSPF的核心思想,其使用的算法是Dijkstra算法
其相对于RIP(一种基于距离矢量算法)协议,有着收敛快、不易产生路由环路、可拓展性好等特点,目前已逐渐取代RIP
特点:
无环路:通过SPF算法,从根本解决环路的问题
收敛快::网络当中,如果一旦发生变化,立即触发更新
OSPF路由的定期更新周期默认为30分钟
拓展性好:相对于RIP来说,没有跳数的限制
支持认证:和RIPv2版本一样支持认证
- OSPF支持认证,并且支持明文和MD5认证;OSPF不可以通过Offset list来改变路由的metric。
OSPF特点
①区域划分:允许AS的网络被划分成区域来管理,区域间传送的路由信息被进一步抽象,从而减少了占用的网络带宽。
②无自环:OSPF根据收集到的链路状态用最短路径树算法来计算路由,从算法本身保证了不会生存自环路由。
③快速收敛:在网络的拓扑结构发生变化后立即发送更新报文,使这一变化在AS中同步。
④试应范围广:支持各种规模的网络,最多可支持几百台路由器。
⑤路由分级划分:使用4类不同的路由,按优先顺序来说分别是区域内路由,区域间路由,第一类外部路由,第二类外部路由。
⑥支持验证:支持基于接口的报文认证,以保证报文交互和路由计算的安全性。
⑦支持组播发送:在某些类型的链路上可以以组播地址发送协议报文,减少对其他设备的干扰。
RIP的缺点:存在最大跳数是15跳,无法应用在大型网络中;周期性的发送自己的全部的路由信息,浪费流量,收敛速度缓慢;本身的算法存在环路的可能性很大
OSPF的特别:采用组播更新的方式进行更新(224.0.0.5、224.0.0.6),增量更新(只发送别人没有的),以cost作为度量值,有效的避免了环路(在单区域中可以完全避免环路,但是在多区域中并不能完全避免环路)。
- OSPF所有路由的管理距离(Ddministrative Distance)为110,OSPF只支持等价负载均衡。
- 距离矢量路由协议的根本特征就是自己的 路由表是完全从其它路由器学来的,并且将收到的路由条目一丝不变地放进自己的路由表,运行距离矢量路由协议的路由器之间交换的是路由表,距离矢量路由协议 是没有大脑的,路由表从来不会自己计算,总是把别人的路由表拿来就用;
- 而OSPF完全抛弃了这种不可靠的算法,OSPF是典型的链路状态路由协议,路由器之间交换的并不是路由表,而是链路状态,OSPF通过获得网络中所有的链路状态信息,从而计算出到达每个目标精确的网络路径。
一.工作原理:
1)路由器之间发现并建立邻居关系
2)每台路由器残生并向邻居泛洪链路状态信息,同时手机来自其他路由器状态信息,完成LSDB(Link State Database)的同步
3)每台路由器基于LSDB通过SPF算法,计算 得到一颗以自己为根的SPT(shortest path tree),再以SPT为基础计算去往各邻居连接网络的最优路由,并形成路由表。
二.OSPF报文类型
三.OSPF常用状态机:
DOWN:在发送hello包之前的关系
INIT:在向对方发送一个hello包之后,状态变为init
2-WAY:在收到包含自己router-id的hello包后,状态机显示为2way,标志着邻居关系的建立
EXSTART:预启动状态,在进入下一步状态之前的准备阶段,路由器开始向邻居发送不包含链路状态的DBD包
EXCHANGE:此状态路由器会互相交换包含链路状态信息的DBD报文,来描述本地LSDB的内容
LOADING:此时,路由器向对方发送LSR,相互请求对方给自己没有的LSA
FULL:标志着邻接关系建立
四.OSPF LSA类型
OSPF由于有着多种区域类型,多种网络类型,多种链路类型,多种路由器身份,所以LSA(Link-State Advertisements)也是多样的。
在详细讲解LSA之前,需要重点说明,只有同一个区域内的LSA,才是精确的,区域外的LSA,并不一定包含所有必备的信息,因此,所有LSA知识信息,并不一定可以套用到每一类LSA。
OSPF中共有11类LSA,而在CCIE的要求中,只需要理解1、2、3、4、5、7共6类即可,这些LSA会因为区域类型,网络类型,链路类型,路由器身份的不同而不同,以下是详细介绍:
类型 1 (Router Link)
类型1的LSA是任何一台OSPF路由器都会产生的,每一台OSPF路由器的每一个OSPF接口都会有自己的链路状态,但是每台OSPF路由器只能产生一条类型1的LSA,即使有多个OSPF接口,也只有一条类型1的LSA,因为所有OSPF接口的链路状态是被打包成一条类型1的LSA发送的。
一个区域正是由于LSA 1的存在,才有精确的路由表,一个区域如果只有LSA 1,同样可以正常通信。LSA 1 只能在单个区域内传递,ABR不能将LSA 1转到发另外一个区域,并且没有任何权利修改LSA 1。
类型 2 (Network Link)
类型2的LSA只有在需要选举DR/BDR的网络类型中才会产生,并且只是DR产生,BDR没有权利产生,LSA 2与LSA 1没有任何关联,没有任何依存关系,是相互独立的。
类型 3 (Summary Link)
类型3的LSA就是将一个区域的LSA发向另一个区域时的汇总和简化,ABR其实就是将LSA 1汇总和简化,变成LSA 3后再发到另一个区域的,如果是详细完整的LSA 1,是绝不允许的,LSA 3是LSA 1的缩略版。
类型 4 (ASBR Summary Link)
对于外部路由,执行重分布的路由器ASBR在LSA中写上自己的Router-ID,然后传递到多个OSPF区域,所以会被多个ABR转发,而ABR在转发外部路由的LSA时,是没有权限修改LSA的Router-ID,这样一来,外部路由的Router-ID在所有OSPF路由器上都不会改变,永远是ASBR的Router-ID,最终造成的结果是只有与ASBR同在一个区域的路由器才能到达外部路由,因为只有与ASBR同在一个区域的路由器才知道如何到达ASBR的Router-ID,而其它区域的路由器对此却无能为力;为了能够让OSPF所有区域都能与外部路由连通,在ABR将外部路由从ASBR所在的区域转发至其它区域时,需要发送单独的LSA来告知如何到达ASBR的Router-ID,因为ABR将外部路由的LSA告诉了其它区域,是有义务让它们与外部路由可达的,所以额外发送了单独的LSA来告知如何到达ASBR的Router-ID;这个单独的LSA就是类型4的LSA,LSA 4是包含的ASBR 的Router-ID,只要不是ASBR所在的区域,都需要ABR发送LSA 4来告知如何去往ASBR。
类型 5 (External Link)
类型5的LSA就是外部路由重分布进OSPF时产生的,并且是由ASBR产生的,LSA中包含ASBR的Router-ID,任何路由器都不允许更改该Router-ID,LSA 5中还包含Forward Address,对于LSA 5 的Metric值计算与选路规则也有所不同,详细信息请见OSPF外部路由部分。
类型 7 (NSSA Link)
因为NSSA区域可以将外部路由重分布进OSPF进程,而NSSA不是一般的常规区域,所以在NSSA将外部路由重分布进OSPF时,路由信息使用类型7来表示,LSA 7由NSSA区域的ASBR产生,LSA 7也只能在NSSA区域内传递,如果要传递到NSSA之外的其它区域,需要同时连接NSSA与其它区域的ABR将LSA 7 转变成LSA 5后再转发。
五.Router ID:作用:用于在自治系统中唯一标识一台运行ospf的路由器,每台运行的ospf的路由器都有一个Router ID 。
32位无符号整数,格式和ip地址的格式是一样的
产生顺序:
1、手动配置(建议使用)
2、自己选举:
(1):看Loopback口(环回口),选择地址最大的那个做自己的Router ID
(2):看物理接口,物理接口最大的那个为自己的Router ID
六.Ospf的 三张表########
邻居表:记录了建立邻居关系的路由器
LSDB(链路状态数据库):包含了本路由器上的区域的所有的链路状态信息,并实时同步
路由表:经过SPF算法计算出的路由存放在OSPF路由表中
七.DR和BDR选举
DR和BDR可以减少邻接关系的数量,(从而减少链路状态信息以及路由信息的交换次数,这样可以节省带宽,降低对路由器处理能力的压力。)一个既不是DR也不是BDR的路由器只与DR和BDR形成邻接关系并交换链路状态信息以及路由信息,这样就大大减少了大型广播型网络和NBMA网络中的邻接关系数量。在没有DR的广播网络上,邻接关系的数量可以根据公式n(n-1)/2计算出,n代表参与OSPF的路由器接口的数量。
选举规则:
1.比较优先级,优先级数值最大的为DR,其次大的为BDR(优先级默认为1,最大为255,当优先级为0时,则说明该路由器没有选举资格)
2.若优先级相同时,则比较路由器的Router id,最大的为DR,其次大的为BDR。
注意:DR和BDR选举的是接口。
八.链路信息主要包括
- 链路的类型
- 接口ip地址及掩码
- 链路上所连接的邻居路由器
- 链路的带宽(开销)
九.OSPF支持的网络类型:
点到点网络:指只把两台路由器直接相连的网络
广播型网络:支持两台以上的路由器,并且具有广播能力的网络
OSPF可以在不支持广播的多路访问网络上运行,此类网络包括在hub-spoke拓扑上运行的帧中继(FR)和异步传输模式(ATM)网络,这些网络的通信依赖于虚电路。OSPF定义了两种支持多路访问的网络类型:非广播多路访问网络(NBMA)和点到多点网络(Point To Multi-Points)。
NBMA:缺省情况下,OSPF认为帧中继、 ATM的网络类型是NBMA。在NBMA网络上,OSPF模拟在广播型网络上的操作,但是每个路由器的邻居需要手动配置。NBMA方式要求网络中的路由器组成全连接。
P2MP(点到多点):将整个网络看成是一组点到点网络。对于不能组成全连接的网络应当使用点到多点方式,例如只使用PVC的不完全连接的帧中继网络。
十.OSPF协议路由器类型
①内部路由器(IR):所有接口都处于一个OSPF区域;
②区域边界路由器(ABR):可以同时属于两个以上的区域,但其中一个必须是骨干区域。ABR用来连接骨干区域和非骨干区域,她与骨干区域之间既可以是物理连接,也可以是逻辑上的链接。
③骨干路由器(BR):该类设备至少有一个接口属于骨干区域所有的ABR和位于Area0的内部设备都是骨干路由器。
④自治系统边界路由器(ASBR),与其他AS交换路由信息的设备称为ASBR,ASBR并不一定位于AS的边界,它可能是区域内设备,也可能是ABR。只要一台OSPF设备引入外部路由的信息,它就成为ASBR. 可以认为是OSPF外部的通信进入区域的网关路由器。
十一.OSPF区域
1.骨干区域必须是保持连通
2.非骨干区域必须与骨干区域连通(可以通过虚链接的方式实现非骨干区域与骨干区域不是物理上的连通)
作用:划分OSPF区域可以缩小路由器的LSDB规模,减少网络流量。
分为骨干区域(Area 0),其他区域都为非骨干区域
Area 0为骨干区域,为了避免区域间路由环路,非骨干区域之间不允许直接相互发布路由信息。因此,每个区域都必须连接到骨干区域。
路由器会为每一个自己所连接到的区域维护一个单独的LSDB。由于详细链路状态信息不会被发布到区域以外,因此LSDB的规模大大缩小了。
在规模较小的企业网络中,可以把所有的路由器划分到同一个区域中,同一个OSPF区域中的路由器中的LSDB是完全一致的。OSPF区域号可以手动配置,为了便于将来的网络扩展,推荐将该区域号设置为0,即骨干区域。
注意:
在一个区域内,OSPF使用的是SPF算法,所以区域内无环。但是区域间,OSPF使用的是距离矢量算法,会出现环路。
解决方法:非骨干区域必须和骨干区域相连,从物理拓扑上防环。
OSPF开销
OSPF基于接口带宽计算开销,计算公式为:接口开销=带宽参考值÷带宽。带宽参考值可配置,缺省为100Mbit/s。以此,一个64kbit/s串口的开销为1562,一个E1接口(2.048 Mbit/s)的开销为48。
命令bandwidth-reference可以用来调整带宽参考值,从而可以改变接口开销,带宽参考值越大,开销越准确。在支持10Gbit/s速率的情况下,推荐将带宽参考值提高到10000Mbit/s来分别为10 Gbit/s、1 Gbit/s和100Mbit/s的链路提供1、10和100的开销。注意,配置带宽参考值时,需要在整个OSPF网络中统一进行调整。
另外,还可以通过ospf cost命令来手动为一个接口调整开销,开销值范围是1~65535,缺省值为1。
OSPF虚链接:解决了骨干区域被分割的问题和非骨干区域和骨干区域无法连通的问题。
命令:在这两个区域的ABR上的中间区域中配置vlink-peer 对方的Router ID
十二.OSPF协议路由扩展特性
①路由器的验证方式
OSPF支持报文验证功能,只有通过验证的OSPF报文才能被接收,否则将不能正常建立邻居。路由器支持两种验证方式,区域验证方式和接口验证方式。当两种验证方式都存在时,优先使用接口验证方式。
②路由聚合
路由聚合是指ABR可以将具有相同前缀的路由信息聚合到一起,只发布一条路由到其他区域。区域间通过路由聚合,可以减少路由信息,从而减少路由表的规模,提高设备的性能。
③虚连接
虚连接是指在两台ABR之间通过一个非骨干区域建立的一条逻辑上的通道,是非骨干区域逻辑上与骨干区域相连。为虚连接两段提供一条非骨干区域内部路由的区域称为传输区域,传输区域不能是末节。
OSPF认证
同RIP和EIGRP一样,出于安全考虑,OSPF也使用了认证,OSPF同时支持明文和MD5认证,在启用OSPF认证后,Hello包中将携带密码,双方Hello包中的密码必须相同,才能建立OSPF邻居关系,需要注意,空密码也是密码的一种。
当OSPF邻居的一方在接口上启用认证后,从该接口发出的Hello包中就会带有密码,双方的Hello包中拥有相同的密码时,邻居方可建立;一台OSPF路由器可能有多个OSPF接口,也可能多个接口在多个OSPF区域,只要在接口上输入OSPF认证的命令后,便表示开启了OSPF认证,可以在每个接口上一个一个启用,也可以一次性开启多个接口的认证,如果需要开启多个接口的认证功能,那么认证的命令就并非直接在接口上输入,而是到OSPF进程模式下输入,并且是对某个区域全局开启的,当在进程下对某个区域开启OSPF认证后,就表示在属于该区域的所有接口上开启了认证。所以,在进程下对区域配置认证,是快速配置多个接口认证的方法,与在多个接口上一个一个开启,没有本质区别。因为OSPF虚链路被认为是骨干区域的一个接口,一条链路,所以在OSPF进程下对骨干区域开启认证后,不仅表示开启了区域0下所有接口的认证,同时也开启了OSPF虚链路的认证,但OSPF虚链路在建立后,并没有Hello包的传递,所以认证在没有重置OSPF进程的情况下,是不会生效的。
OSPF汇总路由
在OSPF同区域内,LSA是绝对不允许以任何形式或任何手段更改的,但在一个区域与另一个区域之间,LSA可以被ABR修改后传递,从而得知,在同一个区域内,OSPF路由是不能被汇总的,而是当路由从一个区域被ABR转发到另外一个区域时,就可以执行路由汇总,并且汇总必须是在ABR上执行的,但该汇总不对OSPF外部路由生效;在将外部路由重分布进OSPF时,也可以执行路由汇总,此时的汇总必须在ASBR上配置。
为了防止路由黑洞,需要在执行路由汇总的路由器上将汇总由指向空接口(null0),在IOS 12.1(6)以后的版本,配置汇总后会自动产生指向空接口的路由,但在IOS 12.1(6)及以前的版本需要手工创建。
OSPF RFC (1583)并没有规定一个区域适合多少台路由器,一个网段多少个邻居,或如何布署网络。