OSPF协议基础
OSPF三部曲
-
建立邻居关系,所有一切的开始
router id
- OSPF协议的router id 如何确认
- 默认使用路由器的全局router id 作为OSPF 的router id
- 默认情况下路由器上配置的第一个IP地址为全局router id
- 允许管理员手工配置全局router id
- 当管理员手工配置OSPF进程的router id 时,优先级最高
- 工程项目上的建议
- 一般项目上通常使用loopback接口地址作为全局router id 或者 协议的 router id 方便网络管理
- 协议router id 变更生效,需要重启协议进程,导致邻居关系中断,网络产生震荡 ,一般现网不会频繁更改router id
发现并建立邻居——hello 报文
-
hello 报文如何发送
-
凡是加入到OSPF 协议的物理接口/隧道接口,就会主动发送hello 报文
-
hello 报文的源地址为接口的IP 地址,目的地址为224.0.0.5
@在P2P链路、Broadcast链路中 hello报文每隔10S周期发送
@在NBMA、P2MP链路每个30S周期发送
@邻居失效时间默认为hello间隔时间的4倍,时间到没收到邻居的hello报文,则认为邻居失效,断开 邻居关系并重新计算路由
hello 报文头部携带的主要参数
version: ospf 协议的版本
message type: 1. HELLO 2. DD 3. LSR 4. LSU 5. LSACK
router id: 路由器的OSPF 的router id
area id: 描述发送hello报文的接口所属的区域
auth type: 0 代表无认证, 1 代表明文认证 , 2 代表MD5 认证
auth data: 明文密码/密文MD5 值
hello 报文数据部分携带的主要参数信息
network mask:发送hello报文接口的子网掩码
hello interval: hello报文的发送周期
option:N bit, E bit
router priority:默认是1 用于选举 DR/BDR
dead interval:邻居失效时间
DR:broadcast/nbma链路上DR路由器接口的IP地址
BDR:broadcast/nbma链路上BDR路由器接口的IP地址
如果链路是P2P,P2MA,则DR/BDR 取值为0.0.0.0 即不进行DR/BDR选举
-
-
影响邻居关系建立的因素
- 在一条链路上router id 不能冲突
- 在一条链路上所有接口应加入在同一个area id
- auth type 要一致,auth data 要匹配
- hello 间隔 和dead 间隔 要一致
- N bit 和 E bit 取值要一致
-
建立邻居的过程
- Down:没有收到hello报文,但可以向外发送hello报文
- Init:收到hello报文,但没有看到自己的信息
- 2-Way:收到hello报文,并看到自己是对方的邻居
-
OSPF 邻居建立的可靠性体现
- hello报文之间的3次握手形成 2-way
- DD 报文序列号+1 机制,隐式确认
- LSAck 对LSU 中LSA 信息的确认,显示确认
- OSPF协议的router id 如何确认
-
进行LSDB的同步,即链路信息同步
进入2-Way状态后,开始进行lsdb的同步
-
ExStart:预启动状态,发送不携带LS摘要信息的DD报文,进行主从选举,router id 大的成为Master,小的成为Slave,完成主从选举后进入Exchange 状态
DD 报文中 I M Ms 的含义
I 0 表示不是第一次发送DD 报文 1 表示第一次发送DD报文
M 0 发送的最后一个DD 报文 1 还要继续发送DD 报文
MS 0 我是Slave 从路由器 1 我是Master 主路由器
-
Exchange:将自身LSDB中所有的LSA的摘要信息通过DD报文进行交换,实现LSDB同步
所谓的LSDB同步,就是邻居之间最终拥有相同的LSA信息,以及这些LSA的新旧程度一致
LSA 的摘要信息也称为LSA 的头部信息
摘要信息的用途
- 唯一的标识一条LSA,由type、ls id 、Adv rtr 3个参数唯一的表示一条LSA
- type:描述LSA的种类
- Ls id:LSA的名字,取值由type决定
- Adv rtr:产生这条LSA的路由器的router id
- 用于判断LSA的新旧,由seq、chksum、ls age 3个参数判断新旧程度
- seq越大的越新,起始值0x80000001,最大值 0x7fffffff
- 如果seq相同,则比较chksum,越大越新
- 如果chksum相同,则判断Ls age 是否等于3600,等于3600的最新,如果都不等于3600,则判断ls age 的差值,如果大于900,则Ls age 小的为最新,如果小于等于900,这认为这两条LSA 为相同
- 唯一的标识一条LSA,由type、ls id 、Adv rtr 3个参数唯一的表示一条LSA
-
运行SPF算法进行路由的计算
SPF算法主要使用到一类LSA和二类LSA
- Router-LSA 一类LSA 描述路由器自身加入到OSPF进程的直连链路的链路状态。凡是运行OSPF 的路由器都会产生一条一类LSA
一类LSA的链路状态,有4种link type
stubnet 描述路由器直连的网络信息
- link id 直连链路的网络号
- Data 子网掩码
- Metric 自身到直连网络的开销
P-2-P 描述P2P/P2MP链路上的实节点邻居
- link id 邻居的router id
- Data 与邻居相连的接口IP
- Metric 到邻居的COST
TransNet 描述Broadcast/NBMA链路上的伪节点邻居
link id 伪结点的router id(由该链路上的DR接口地址充当)
Data 和伪结点相连的接口地址
Metric 自身到伪结点的开销
伪节点和DR的关系
伪节点不是DR,伪节点与该链路上所有节点相连,包括DR
伪节点是MA 链路中逻辑上虚拟出来的一台路由器
伪节点的router id 使用的是DR的接口
伪节点到链路上其它节点的开销为 0
virtual 描述vlink 上的实节点邻居
- link id vlink 上的邻居的router id
- Data 和vlink的邻居相连的接口地址
- Metric 自身到vlink上邻居的开销
关于DR/BDR/DRother
- 默认情况下OSPF协议在Broadcast/Nbma类型网络会自动选举DR/BDR
- DR/BDR 选举规则
- 比较接口的优先级,默认为1,取值范围 0 -255 优先级越大越优先,0 表示不参与选举
- 优先级相同则比较 router id ,router id 越大优先成为DR,其次BDR
- DR/BDR 没有抢占性,根据先到先得的原则
- 如果DR失效,则判断是否存在BDR,如果存在BDR,则BDR成为DR,然后重新选举BDR
- 如果BDR失效, 则重新选举BDR
- 每条Broad/Nbma链路上都会存在一个DR,可以没有BDR,链路上的其它路由器为DRother
- DRother之间保持2-Way的关系,不进行LSDB同步
- DR、BDR、DRother 之间需要 保持Full 的关系,需要进行LSDB的同步
- DRother通过组播地址224.0.0.6将LSA更新发送给DR/BDR,然后DR通过组播地址224.0.0.5将更新发送给DRother,也就是说DR/BDR同时监听224.0.0.5、224.0.0.6 而DRother 仅监听224.0.0.5
- DR/BDR/DRother 只是路由器在某条链路上充当的角色,也就说一个路由器可以是多个角色
-
Network LSA 二类LSA 由DR产生 描述伪节点连接着哪些节点
然后在根据这些由二类LSA找出的节点,查找它们的一类LSA即可完整的画出整个拓扑结构
通过一类二类LSA计算出来的路由信息称为区域内路由,即通过SPF算法计算出来的路由,100%无环路!