OSPF协议基本原理
RIP和OSPF区别
- RIP是基于距离矢量算法的路由协议,OSPF是基于链路状态(基于最短路径优先算法)的路由协议;
- RIP路由器所有的路由信息都是邻居路由器通告给它的,OSPF路由器的路由信息是它通过邻居通告的链路状态信息自己计算出来的;
- RIPv2是无类路由协议,RIPv3是有类路由协议,OSPF是有类路由协议;
- RIP收敛较慢,易于出现环路,OSPF收敛较快,不易出现环路;
- RIP原理比OSPF简单;
- RIP适合小型网络,OSPF适合中大型网络 。。。 。。。
OSPF的特点
适应范围广、支持掩码、快速收敛、无自环、区域划分、支持等价路由、路由分级、支持验证、以组播地址发送协议报文
OSPF三张表作用
- 邻居表(neighbor table): OSPF用邻居机制来发现和维持路由的存在,邻居表存储了双向通信的OSPF路由器列表。
- 拓扑表 : OSPF用LSA来描述网络拓扑信息, LSA存储在LSDB中。
- 路由表 对链路状态数据库进行SPF( Dijkstra)计算,然后OSPF会把它计算出来的路由安装到全局路由表,用于数据包转发。
OSPF划分区域的优势
区域间传送的路由信息被进一步抽象,从而减少了占用的网络带宽
OSPF路由类型
区域内路由、区域间路由、Type1外部路由、Type2外部路由
routerid定义及选举实例
Router ID是一个32比特无符号整数,是一台路由器在自治系统中的唯一标识
如果没有手动配置Router ID,路由器会从当前接口的IP地址中自动选取一个作为Router ID。其选择顺序是:
- 优先从Loopback地址中选择最大的IP地址作为Router ID。
- 如果没有配置Loopback接口,则在接口地址中选取最大的IP地址作为Router ID。
OSPF网络类型、每类区别
- 广播类型
- 链路层协议是Ethernet
- 以组播方式发送Hello报文、LSU报文和LSACK报文,以单播形式发送DD报文和LSR报文
- 组播地址:
- 224.0.0.5 :所有OSPF路由器
- 224.0.0.6 :DR/BDR
- NBMA类型(非广播且多点可达)
- 链路层协议是帧中继、ATM
- 以单播方式发送所有协议报文
- 点到多点P2MP类型
- 以组播方式(224.0.0.5)发送Hello报文,以单播方式发送其他协议报文
- 点到点P2P类型
- 链路层协议是PPP、HDLC以及帧中继的P2P类型子接口
- 以组播方式(224.0.0.5)发送所有协议报文
OSPF报文类型、报文及协议号
OSPF用IP报文直接封装协议报文,协议号为89
报文类型 | 报文作用 |
---|---|
Hello报文 | 周期性发送,用来发现和维持OSPF邻居关系。 |
DD报文(Database Description packet) | 描述本地LSDB的摘要信息,用于两台路由器进行数据库同步。 |
LSR报文(Link State Request packet) | 用于向对方请求所需的LSA。路由器只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。 |
LSU报文(Link State Update packet) | 用于向对方发送其所需要的LSA。 |
LSAck报文(Link State Acknowledgment packet) | 用来对收到的LSA进行确认。 |
OSPF如何建立邻居关系、以及选举的过程
1. 邻居发现
比较 Hello报文中的参数:
Hello/Dead发送时间间隔、区域ID、区域类型、验证等
参数一致才能开始建立邻居关系
2. 邻居关系建立
三步握手
Down
初始状态
此时邻居的Router ID还没有出现在本地OSPF邻居列表
Init
收到的邻居的Hello报文内Active Neighbour字域内没有包含当前路由器的Router ID,该邻居状态为Init
此时已建立好单向邻居,即邻居的Router ID出现在本地OSPF邻居列表,本地发出的Hello报文内Active Neighbour字域内包含邻居的Router ID
2-way
收到的邻居的Hello报文内Active Neighbour字域内包含当前路由器的Router ID,此时进入2-way状态,邻居关系建立完成
3. 邻接关系建立(选举)
DR/BDR的选举
先比较hello报文中的优先级priority,优先级最高的为DR,次高的为BDR。不作修改默认端口上的优先级都为1,在优先级相同的情况下比较Router ID,RID最高者为DR,次高者为BDR,当你把相应端口优先级设为0时,OSPF路由器将不能再成为DR/BDR,只能为DR Other。
ROUTER-ID可以手工指定,如果没有手工指定ROUTER-ID的话,那么路由器会先看自己有没有环回接口(Loopback),如果有环回接口,则使用环回接口上的IP地址作为自己的ROUTER-ID。如果没有环回接口的话,则会去比较自己所有物理接口上的IP地址,并从中选择最大的一个IP地址作为自己的ROUTER-ID来参与DR的选举。
在广播网络中,DR&BDR和网段内的每一台路由器都继续协商形成邻接关系,但DR other之间只形成邻居关系(保持在2-way状态)。
Exstart
协商主从关系
某路由器发送本链路第一个DD报文(不包含LSA摘要),宣称自己是Master(MS=1),并规定序列号Seq=x
邻居收到该路由器的DD报文后,将该路由器的邻居状态机改为Exstart,并且回应了一个DD报文(也不包含LSA摘要),假设邻居的Router ID较大,所以在报文中邻居认为自己是Master,并且重新规定了序列号Seq=y。
路由器收到报文后,同意了邻居为Master,并将邻居的邻居状态机改为Exchange。该路由器使用邻居的序列号Seq=y来发送新的DD报文,该报文开始正式地传送LSA的摘要。在报文中该路由器将MS=0,说明自己是Slave。
邻居收到报文后,将该路由器的邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,此时邻居将报文的序列号改为Seq=y+1
Exchange
该路由器通过重复邻居的序列号来确认已收到邻居的报文。邻居通过将序列号Seq加1来确认已收到该路由器的报文。当邻居发送最后一个DD报文时,在报文中写上M=0
OSPF的状态机
状态机 | 含义 |
---|---|
Down | 邻居会话的初始阶段。表明没有在邻居失效时间间隔内收到来自邻居设备的Hello报文。 |
Attempt | 处于本状态时,定期向手工配置的邻居发送Hello报文。 说明:Attempt状态只适用于NBMA类型的接口。 |
Init | 本状态表示已经收到了邻居的Hello报文,但是对端并没有收到本端发送的Hello报文。 |
2-way | 互为邻居。本状态表示双方互相收到了对端发送的Hello报文,建立了邻居关系。如果不形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态。 |
Exstart | 协商主/从关系。建立主/从关系主要是为了保证在后续的DD报文交换中能够有序的发送。 |
Exchange | 交换DD报文。本端设备将本地的LSDB用DD报文来描述,并发给邻居设备。 |
Loading | 正在同步LSDB。两端设备发送LSR报文向邻居请求对方的LSA,同步LSDB。 |
Full | 建立邻接。两端设备的LSDB已同步,本端设备和邻居设备建立了邻接状态。 |
LSDB更新流程
某路由器收到最后一个DD报文后,发现邻居的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。此时邻居也收到了该路由器的最后一个DD报文,但某路由器的LSA,邻居都已经有了,不需要再请求,所以直接将某路由器的邻居状态机改为Full状态。
该路由器发送LSR报文向邻居请求更新LSA。邻居用LSU报文来回应某路由器的请求。该路由器收到后,发送LSAck报文确认。
OSPF高级特性
为什么会出现虚连接的定义
vlink 是工作在Tranist Area上的连接两个ABR的虚拟链路
在实际应用中,可能会因为各方面条件的限制,无法满足所有非骨干区域与骨干区域保持连通的要求
为了修复断开的骨干区域
LSA的报文头格式
LSA类型,每一类的定义
LSA7/5转换规则
OSPF的选路原则
FA对外部路由选路的影响
OSPF常见的特殊区域定义
OSPF路由聚合定义
路由聚合是指将多条具有相同IP前缀的路由聚合成一条路由
OSPF都有哪些安全特性
支持区域/接口认证? 。。。