前言
由于静态路由由网络管理员手工配置,因此当网络发生变化时,静态路由需要手动调整,这制约了静态路由在现网大规模的应用。
动态路由协议因其灵活性高、可靠性好、易于扩展等特点被广泛应用于现网。在动态路由协议之中,OSPF(Open Shortest Path First,开放式最短路径优先)协议是使用场景非常广泛的动态路由协议之一。
OSPF在RFC2328中定义,是一种基于链路状态算法的路由协议。
静态路由是由工程师手动配置和维护的路由条目,命令行简单明确,适用于小型或稳定的网络。静态路由有以下问题:
- 无法适应规模较大的网络:随着设备数量增加,配置量急剧增加。
- 无法动态响应网络变化:网络发生变化,无法自动收敛网络,需要工程师手动修改。
动态路由分类
按照工作范围来分:
工作在AS之内的路由协议(IGP):
- OSPF
- RIP
- ISIS
工作在AS之间的路由协议(EGP):
- BGP
注:AS:自治系统:一组设备的组合
- 按照算法来分:
链路状态路由协议:
距离矢量路由协议:* 不仅传递路由信息,还传递拓扑信息,统称为链路状态信息 * 代表:OSPF、ISIS
* 只传递路由信息 * 代表:RIP、BGP
- 按照有类无类:
有类路由协议:- 发送路由信息不携带掩码
- 代表:RIPv1
无类路由协议: - 发送路由信息携带掩码
- 代表:OSPF、ripv2、ISIS、BGP
OSPF属于:IGP、链路状态路由协议、无类路由协议
OSPF协议概述
特点:
- 无环路:使用SPF算法
- 收敛快:触发更新机制
- 扩展性好:可以划分区域
- 支持认证
简单的工作原理
邻居建立
泛洪LSA(链路状态通告:路由信息+拓扑信息)
与距离矢量路由协议不同,链路状态路由协议通告的的是链路状态而不是路由表。运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系,然后彼此之间开始交互LSA(Link State Advertisement,链路状态通告)。
- 同步LSDB(同步数据库 Link State DataBase)
每台路由器都会产生LSAs,路由器将接收到的LSAs放入自己的LSDB(Link State DataBase,链路状态数据库)。路由器通过LSDB,掌握了全网的拓扑。
根据收集到的LSDB信息,通过SPF算法计算出最优路由
每台路由器基于LSDB,使用SPF(Shortest Path First,最短路径优先)算法进行计算。每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这棵“树”,路由器就已经知道了到达网络各个角落的优选路径。
路由表生成
最后,路由器将计算出来的优选路径,加载进自己的路由表(Routing Table)。
OSPF基础术语
区域
- OSPF Area用于标识一个OSPF的区域。
- 区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。
划分区域好处:
- 每个区域独立,互不影响
- 缩小LSDB
骨干区域:区域ID为0
非骨干区域:区域ID不为0
所有的非骨干区域想要互通,必须经过骨干区域:
|
Router-id
- Router-ID(Router Identifier,路由器标识符),用于在一个OSPF域中唯一地标识一台路由器。
- Router-ID的设定可以通过手工配置的方式,或使用系统自动配置的方式。
手动配置:
|
自动选举:
- 首选环回接口IP地址大的
- 选择物理接口IP地址大的
度量值
OSPF使用Cost(开销)作为路由的度量值。每一个激活了OSPF的接口都会维护一个接口Cost值
其中100 "Mbit/s"为OSPF指定的缺省参考值,该值是可配置的。笼统地说,一条OSPF路由的Cost值可以理解为是从目的网段到本路由器沿途所有入接口的Cost值累加。
OSPF不同接口因其带宽不同,有不同的Cost。
在R3的路由表中,到达1.1.1.0/24的OSPF路由的Cost值=10+1+64,即75。
|
报文类型
- OSPF报文封装在IP报文中,协议号为89。
- OSPF报文类型有5种:header(头部) + 报文类型
- Hello 报文:以组播的形式发送,用于发现、建立、维护邻居关系
- DD(Database Description)报文:数据库描述报文,用于发送LSA的摘要信息
- LSR(LSA Request)报文:数据库请求报文,用于请求缺少的LSA信息
- LSU(LSA Update)报文:数据库更新报文,用来携带详细的LSA信息,用于更新路由信息
- LSACK(Link State Acknowledgment)报文:确认报文,针对LUS进行确认回应
Dead time是hello时间的4倍
|
注意:邻居之间,hello时间必须一致
OSPF基本配置
配置步骤:
- 启用OSPF
- 进入区域
- 宣告接口地址
|
|
|
|
|
|
OSPF邻居状态机
- down:在该状态,设备刚刚启用OSPF协议,还没收到对方hello报文
- init:初始化状态,在该状态,收到对方的hello报文,但是对方的hello邻居列表是空的
- 2-way:在该状态,收到对方的hello报文,同时对方的hello列表有自己的router id
以上状态叫做邻居的建立,只交互了hello报文
- Exstart:交互DD报文,交互LSA的摘要信息,只是用于选举主从路由器
- Exchange:交互DD报文,交互LSA的摘要信息
- loading:在此状态交互LSR、LSU、LSAck报文
- FULL:邻接完成状态
邻接:在邻居的基础上,进一步交互了其余的OSPF报文
OSPF的网络类型
一、P2P(Point-to-Point,点对点)
- 当物理链路是串行链路(Serial),物理层协议为ppp时,那么网络类型默认为p2p
- 两台设备
- Hello time 为10S
二、BMA(Broadcast Multiple Access,广播式多路访问
- 底层物理链路为以太网链路(g口,e口等),默认情况下网络类型为广播网络类型BMA
- Hello time 为10S
三、NBMA(Non-Broadcast Multiple Access,非广播式多路访问)
- 底层物理介质为串行链路,物理层协议为FR(帧中继),默认情况下为NBMA
- 需要手工建立邻居
- Hello time 为30S
四、P2MP(Point to Multi-Point,点到多点)
- 需要人为的指定
- Hello time 为30S
|
|
P2P网络只有FULL状态
OSPF的DR/BDR:
- 在MA网络(BMA和NBMA)中才有,在P2P网络中没有DR/BDR概念
DR(指定路由器Designated Router):
- 用于减少LSA泛洪
- 收集LSA的信息
- 监听224.0.0.5和224.0.0.6
- 泛洪LSA信息
BDR(备份指定路由器Backup Designated Router):
- 用于减少LSA泛洪
- 收集LSA信息
- 监听224.0.0.5和224.0.0.6
DRrouter选举:
- 首先比较DR优先级,默认为1,范围0-255 ,数值越大越优先
- 如果优先级相同,则比较router id ,数值越大越优先
注意: - DR/BDR的选举是在2-way状态,等待40S选举
- 一旦选举成功,不允许抢占
|
注意:
- 必须有一个DR存在
- DR/BDR与任何设备都是邻接关系,也就FULL关系
- DRrouter与DR/BDR是邻接关系,
- DRrouter与DRrouter之间是2-way 邻居关系
- DR/BDR基于接口选举,一个广播网络选举一个DR
缺省路由:
|
|