八、OSPF协议的工作原理
1、原理概要
(1)相邻路由器之间周期性发送HELLO报文,以便建立和维护邻居关系
(2)建立邻居关系后,给邻居路由器发送数据库描述报文(DBD),也就是将自己链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器
(3)收到数据库描述报文后,若发现自己缺少其中某些链路状态项目,则会发送链路状态请求报文(LSR)。
(4)对方收到链路状态请求报文后,则会将其所缺少的链路状态项目的详细信息封装在链路状态更新报文(LSU)中发送回去
(5)收到链路状态更新报文后,将这些信息添加到自己的链路状态数据库中,随后发回链路状态确认报文(LSACK)
(1)HELLO协议
1)发现邻居并监测与邻居链路的状态
OSPF路由器定期向所有邻居路由器发送HELLO报文。报文中包含了最近一段时间内发送过HELLO报文的邻居路由器。
发送周期为10秒,40秒未收到来自邻居路由器的 HELLO 报文,则认为该邻居路由器不可达
如果路由器在邻居发送的HELLO报文中发现了自己的标识符,就表明这两个邻居路由器之间建立了双向通信链路。每个路由器都会建立一张邻居表。
HELLO协议在不同类型网络上的工作过程不同:
点到点网络、虚拟链路:路由器向对方发送 HELLO 报文;
点到多点网络:路由器仅向能直接通信的邻居发送 HELLO 报文;
广播网络:每台路由器定期组播发送 HELLO 报文;
NBMA网络:需要配置后 HELLO 协议才能正常工作。
2)DR/BDR 的选举
广播网络或 NBMA 网络上每台路由器都清楚网络的链路状态。
若每台路由器都发送网络的链路状态,会有很多重复发送。OSPF 协议规定:
在广播网络或NBMA网络上选举一个指定路由器(DR)和一个备份指定路由器(BDR);
只有DR能代表该网络发送网络的链路状态;
DR发生故障后,BDR就变成DR。
当路由器连接到广播网络或NBMA网络上的接口启动时:(下左图)
检查该网络上是否已存在DR和BDR:存在就接受;否则,比较自己和其他路由器的优先级:
- 优先级最高的路由器成为DR;优先级次高的路由器成为BDR。优先级:0-255,默认值是1
- 若两个路由器的优先级相同,标识符(ID)更大的胜出。
DR和BDR一旦选定,即使OSPF区域内新增优先级更高的路由器,DR和BDR也不重新选举。(下右图)
(2)链路状态数据库同步
OSPF邻接路由器之间的链路状态数据库同步大体上可分为三步:
双方交换各自的链路状态数据库摘要;
向对方请求链路状态并更新自己的数据库;
若有链路的状态发生变化,更新自己的数据库,并通知对方。
1)交换摘要
OSPF路由器定期与邻接路由器交换链路状态数据库摘要:
数据库摘要用一组数据库描述报文描述;
每个数据库描述报文包含一组链路状态通告(LSA)的首部;
LSA首部有其唯一标识及新旧标记。
2)同步信息
发送和接收数据库描述报文的过程称为“数据库交换过程”,其中:
若路由器发现邻接路由器某些链路的状态更新,或自己没有,就向对方发送链路状态请求报文;
邻接路由器发送链路状态更新报文进行响应。
两个邻接路由器的链路状态数据库达同步后,称它们之间建立了完全邻接关系(fully adjacent)。
3)新情况下的同步
路由器监测其所有链路,若有链路的状态发生改变:
更新自己的链路状态数据库;
向邻接路由器发送链路状态更新报文,通知变化的链路状态。
4)洪泛机制
OSPF协议定义了一种可靠的洪泛(reliable flooding)机制,用于在 OSPF 路由域中快速扩散链路状态的变化。
可靠是指收到链路状态更新报文后要发送确认,收到重复的更新报文无需再次转发,但要发送一次确认。
路由器接收到链路状态更新报文后,逐个检查其中的 LSA:
若LSA的状态更新,或本地不存在,就用LSA更新自己的数据库;
同时,在某些接口上继续发送该LSA,称为“洪泛” 。
注意:路由器并不是直接发送接收的链路状态更新报文,而是发送根据自己的数据库生成的链路状态更新报文。
通过各路由器洪泛法发送封装有自己LSA的LSU报文,各路由器的LSDB最终达到一致。
使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各种到达其他各路由器的最短路径,即构建各自的路由表。
整个华为数通学习笔记系列中,本人是以网络视频与网络文章的方式自学的,并按自己理解的方式总结了学习笔记,某些笔记段落中可能有部分文字或图片与网络中有雷同,并非抄袭。完处于学习态度,觉得这段文字更通俗易懂,融入了自己的学习笔记中。如有相关文字涉及到某个人的版权利益,可以直接联系我,我会把相关文字删除。【VX:czlingyun 暗号:CSDN】