OSPF概念
文章目录
一、OSPF是什么
OSPF是一种链路状态路由协议。
在链路状态路由协议中路由器对全网拓扑完全了解。是"传信的路由”,A将信息放在一封信里发给B,B对其不做任何改变,拷贝下来,并将自己的信息放在另一封信里,两封信一起给c,这样,信息没有任何改变和丢失,最后所有路由器都收到相同的一堆信,这一堆信就是LSDB。然后,每个路由器运用相同的SPF算法,以自己为根,计算出SPF Tree(即到达目的地的各个方案),选出最佳路径,放入路由表中。
工作过程
- 建立邻居列表
- 建立链路状态数据库
- 建立路由表
路由器上的OSPF接口通过向其他路由器发送HELLO包,建立邻居关系,然后通过学习链路状态信息(发送LSA 接收LSAACK
)建立链路状态数据库,下一步通过Djkstra算法/SPF算法/最短路径算法来计算最短路径树然后写入路由表
图示解析如下:
二、OSPF区域
1.骨干区域/非骨干区域
为了适应大型的网络,OSPF在AS内划分多个区域,每个OSPF路由器只维护所在区域的完整链路状态信息,然后将一个区域的LSA简化和汇总后由边界路由(ABR 图中与其他区域公用的路由器)转发给另一个区域。
非骨干区域无法直接通信,所有通信必须经过骨干区域
大致图示如下:
2.DR/BDR
为减小多路访问网络中OSPF流量,这时候需要一个路由器和所有的路由器互换LSA,减少LSA的数量。OSPF会选择一个指定路由器(DR)和一个备份指定路由器(BDR)。当多路访问网络发生变化时,DR负责更新其他所有OSPF路由器。BDR会监控DR 的状态,并在当前DR发生故障时接替其角色。DR和BDR是由同一网段中所有的路由器根据路由器优先级、Router ID通过HELLO报文选举出来的,只有优先级大于0的路由器才具有选取资格。进行DR/BDR选举时每台路由器将自己选出的DR写入Hello报文中,发给网段上的每台运行OSPF协议的路由器。当处于同一网段的两台路由器同时宣布自己是DR时,路由器优先级高者胜出。如果优先级相等,则Router ID大者胜出。
DR/BDR选取过程
自动选取:
网段上Router ID最大的路由器将被选举为DR,第二大的将被选举为BDR
手动设置优先级选取
优先级范围是0~255,数值越大,优先级越高,默认为1
PS:将优先级设置为0时 此路由器不参与选举
不过实际环境中,会是另一种方式,因为不能保证所有路由器都是同时开启,因为谁先开机谁是DR(没其他路由器和它比较)相应的第二开机是BDR,而且正常工作情况下,后开机的路由器就算优先级和Router ID比他们大也无法将其替代
选举时,各个路由器都是用组播地址224.0.0.5发送Hello包(都认为自己是DR),当DR和BDR选出来后,DR和BDR使用224.0.0.5发送,其他路由器使用224.0.0.6发送。
Rouder ID:
OSPF区域内唯一表示路由器的IP地址。
选取路由器上的loopback接口上数值最大的IP地址
如没有设置loopback接口,则选取物理端口里IP地址数值最大的
也可使用 router-id命令指定Rouder ID(直接使用 不再比较)
三、 OSPF的度量值(cost)
最短路径是基于接口指定的代价(COST)计算的
计算公式=10^8/BW(带宽)
数值越小越优先(带宽越大,数值越小)
常用的端口cost
四、OSPF数据包
承载在IP数据包内,使用89协议号
1、HELLO数据包:
编号为1的OSPF数据包
用于发现、维持(Neighbors)关系,及DR和BDR选举
2、链路状态数据库描述数据包:DBD(华为DD)
编号为2的OSPF数据包
该数据包在链路状态数据库交换期间产生,向邻居发送大致摘要信息来同步链路状态数据库
3、链路状态请求数据包:LSR编号为3的OSPF数据包
用于请求在DBD交换过程中发现的本路由器中没有的或已过时的LSA包细节
4、链路状态更新数据包:LSU
编号为4的OSPF数据包
用于将多个LSA泛洪,也用于对接收到的链路状态更新进行应答。
5、链路状态确认数据包:LSAck
编号为5的数据包
用于对接收到的LSA进行确认。如果发送确认的路由器的状态是DR或者BDR,
确认数据包将被发送到OSPF路由器的组播地址224.0.0.5
如果发送确认的路由器状态不是DR或者BDR,确认将被发送到OSPF路由器组播地址224.0.0.6
五、OSPF的七个状态
(1) Down:邻居状态机的初始状态,是指在过去的Dead-Interval时间内没有收到对方的Hello报文或OSPF没启动时。
(1-2) Attempt:只适用于NBMA类型的接口,处于本状态时,定期向那些手工配置的邻居发送HELLO报文。
(2) Init:本状态表示已经收到了邻居的HELLO报文,但是该报文中列出的邻居中没有包含我的Router ID(对方并没有收到我发的HELLO报文)。
(3) 2-Way:本状态表示双方互相收到了对端发送的HELLO报文,建立了邻居关系。在广播和NBMA类型的网络中,两个接口状态是DROther的路由器之间将停留在此状态。
其他情况状态机将继续转入高级状态。
(4)ExStart:在此状态下,路由器和它的邻居之间通过互相交换DD报文(该报文并不包含实际的内容,只包含一些标志位)来决定发送时的主/从关系。
建立主/从关系主要是为了保证在后续的DD报文交换中能够有序的发送。
(5) Exchange:路由器将本地的LSDB用DD报文来描述,并发给邻居。
(6) Loading:路由器发送LSR报文向邻居请求对方的DD报文。
(7) Full:在此状态下,邻居路由器的LSDB中所有的LSA本路由器全都有了。即,本路由器和邻居建立了邻接(adjacency)状态。
六、OSPF多区域
1.生成OSPF多区域的原因
- 改善网络的可扩展性
- 快速收敛
划分区域的作用:
OSPF协议划分多个区域后,每一个区域的路由器只需要了解所在区域的网络路由拓扑,并不需要了解整个网络的路由拓扑,这样就减小了路由表,降低了SPF算法的计算量和LSA的开销。
2.OSPF区域类型(细分)
骨干区域Area 0
顾名思义,OSPF区域的骨干,其他区域都要连接到骨干区域
非骨干区域A
–根据能够学习的路由种类来区分
1) 标准区域
2)末梢区域(stub)
3)完全末梢(Totally stubby)区域
4)非纯末梢区域(NSSA)
而末梢区域和完全末梢区域需要满足以下条件:
- 只有一个默认路由作为其区域的出口
- 区域不能作为虚链路的穿越区域
- Stub区域里无自治系统边界路由器ASBR
- 不能使骨干区域Area 0
末梢区域和完全末梢区域的作用:
其主要目的是减少区域内的LSA条目以及路由条目,
减少对设备CPU和内存的占用;末梢区域和完全末梢区域中ABR会自动生成一条默认路由发布到末梢区域或完全末梢区域中。
3.多区域中的路由器类型
除了上文提到的DR/BDR 还有:
- 内部路由器:该设备的所有端口都属于同一个ospf区域,只保存本区域的链路状态信息
- 区域边界路由器(ABR):连接区域与其他区域(骨干区域)的路由器;该路由器可以连接两个以上区域,但必须有一个端口连接骨干路由器。用于连接骨干与非骨干路由器。
- 自治系统边界路由器(ASBR):用来连接OSPF区域和外部的路由器;并将外部路由注入到OSPF网络中
4.链路状态通告
链路状态数据库的组成
每个路由器都创建了由每个接口、对应的相邻节点和接口速度组成的数据库
链路状态数据库中每个条目称为LSA_(链路状态通告),常见的有六种LSA类型
-
类型1,路由器LSA:
·所有路由器都会生成这一类型的链路状态通告
·指明了它们的状态和沿每条链路方向出站的代价,以及该链路上所有已知的 OSPF 邻居
·只在本区域内泛洪
·链路状态ID是源路由器ID(所有类型的LSA都有20字节的LSA头部,LSA头部中的一个字段是链路状态ID) -
类型2,网络LSA:
·由DR生成
·指明了所有与之相连的路由器
·只在本区域内泛洪
·链路状态ID是DR的ip接口地址 -
类型3,汇总LSA
·由ABR生成
·将从一个区域学到的信息发送给其他区域
·在除了绝对末节区域和完全NSSA区域外的所有区域泛洪
·链路状态ID是目的网络地址 -
类型4,ASBR汇总LSA
·由同区域,离ASBR最近的ABR生成
·指明如何到达ASBR
·在除了绝对末节区域和完全NSSA区域外的所有区域泛洪
·链路状态ID是所描述的ASBR的路由器ID -
类型5,自治系统LSA
·由ASBR生成
·指明到达自治系统外部网络的路由
·在除了绝对末节区域和完全NSSA区域外的所有区域泛洪
·链路状态ID是外部网络地址
- 类型7,NSSA区域中对外部路由使用
·由ASBR生成
·指明到达区域外部网络的路由
·在NASS区域内泛洪
5. OSPF多区域的配置
添加端口ip就不赘述了
进入路由器相应的区域宣告直连网段
[R1] ospf 1
[R1-ospf-1] area 1
[R1-ospf-1-area-0.0.0.1]network 11.0.0.0 0.0.0.255(反掩码)
[R1-ospf-1-area-0.0.0.1]network 1.1.1.1 0.0.0.0
其他路由配置同理
PS:边界路由器(ABR)宣告直连网段时要看清端口属于哪个区域;
例如图中的R2 在area 1里宣告11.0.0.0 0.0.0.255 在area 0里宣告22.0.0.0 0.0.0.255
如果需要给area 1 配置末梢网络
先在ABR(图中R2)在宣告直连网段后
配置 Stub
[R2-ospf-1-area-0.0.0.1] stub
区域内的R1配置同样;配置完后 查看路由表
会发现自动生成了一个默认路由
因为末梢区域减少了LSA的数量,减少了路由器资源的浪费,不允许有LSA4、LSA5、LSA7通告,ABR会向末梢区域发送一条默认路由。
配置完全末梢区域:
只需要把ABR里的stub配置更改为
[R2-ospf-1-area-0.0.0.1] stub no-summary
再查询路由表发现:
其他路由宣告的网段没了
只剩下了一条默认路由
这是因为完全末梢区域只接受一条由LSA3提供的默认路由,没有LSA3、LSA4、LSA5、LSA7通告。
这样大大减少了路由器中的路由条目,因此,这些路由器的性能将得到大大的提升,并且内存也得到了节省。
通信状态依旧是通的
七、路由重分发
1. 定义
- 网络协议有很多种,例如isis、rip、ospf、bgp等,在大型公司中经常会出现网络设备之间运行多种网络协议的情况,各种网络协议之间如果不进行一定的配置那么设备之间是不能进行互通信息的,在这种情况下就出现了路由重分发技术,路由重分发的作用就是为了实现多种路由协议之间的协同工作。
路由重分发的工作原理:通过在各种路由协议的配置中添加一定的配置使将路由协议广播到另外的路由协议中,让各个路由协议都能检测到运行其他的路由协议的网段,从而实现数据的传输。 - 在路由重分发中选择路由协议的时候,
除了要看度量值和度量类型(根据协议),还要看管理距离(优先级)
2. 配置命令
[R1]rip 1
[R1-rip-1]import-route ospf 1 cost 3
把ospf协议注入到rip进行路由重分发,路径类型缺省为路径类型2(外部开销),成本开销为3(对于rip的度量值是跳数),rip中重分发ospf要指定cost的值,最大为15跳
[R1-rip-1]ospf 1
[R1-ospf-1]import-route rip 1 type 1 cost 1
把外部rip协议注入到OSPF进行路由重分发,使用路径类型1(内部开销+外部开销),成本开销为1(COST=100M/BW)
PS:OSPF和RIP互相注入是在ASBR路由器上做的
default-route-advertise always ------ OSPF重分发默认路由
import-route direct ---------------------OSPF重分发直连路由
import-route static ----------------------OSPF重分发静态路由
实验拓扑图如下:
添加端口ip和配置路由协议就不赘述了
重分发配置如下:
因为R1只配置一条默认路由 无需配置重分发
R2作为ASBR需要在OSPF里重分发一条静态和直连路由
[R2-ospf-1] import-route direct
[R2-ospf-1] import-route static
R3在OSPF里重分发一条默认路由和直连路由
(此拓扑图有点特殊需求 在R3里设置了指向R5的默认路由)
[R3-ospf-1] import-route direct
[R3-ospf-1] default-route-advertise always
R4也是一个ASBR 连接OSPF和RIP协议区域
需要OSPF和RIP相互注入
[R4-ospf-1]import-route rip 1 type 1 cost 1
[R4-rip-1]import-route ospf 1 cost 3
R5 R6 无需配置重分发
查询R2路由表
已经全部学习到了各个路由(没有R5的回环地址是因为做了双向默认路由)
通信测试: