动态路由协议因其灵活性高、可靠性好、易于扩展等特点被广泛应用于现网。在动态路由协议之中,OSPF(OpenShortestPathFirst,开放式最短路径优先)协议是使用场景非常广泛的动态路由协议之一。
OSPF 是一种基于链路状态算法的路由协议。
动态路由
为什么我们需要动态路由协议,我们在配置静态路由的时候如果设备很多会导致配置的工作量急剧增加。没有办法适应大型的网络
如果配置的静态路由没有做浮动路由的话在链路发生了故障时网络会无法通信
动态路由协议的分类
我们根据工作的区域可以分为 IGP 内部网关协议 和 EGP 外部网关协议
按工作机制及算法分类 可以分为 距离矢量路由协议 和 链路状态路由协议
距离矢量路由协议
运行距离矢量路由协议的路由器周期性的泛洪自己的路由表。通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中。
对于网络中的所有路由器而言,路由器并不清楚网络的拓扑,只是简单的知道要去往某个目的方向在哪里,距离有多远。这即是距离矢量算法的本质。
链路状态路由协议
与距离矢量路由协议不同,链路状态路由协议通告的的是链路状态而不是路由表。运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系,然后彼此之间开始交互LSA(LinkStateAdvertisement,链路状态通告
LSA描述了路由器接口的状态信息,例如接口的开销、连接的对象等。
lSDB组建
路由器会把自己产生的LSA和其他设备发过来的LSA放进LSDB (链路状态路数据库中)路由器通过LSDB,掌握了全网的拓扑。LSDB包含全网拓扑的描述
图为ospf的LSDB
SPF计算
每台路由器基于LSDB,使用SPF(ShortestPathFirst,最短路径优先)算法进行计算。每台
路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这棵“树”,路由器
就已经知道了到达网络各个角落的优选路径。
OSPF
OSPF基础术语:区域
区域是从逻辑上将设备划分为不同的组,每个组用区域号(AreaID)来标识。
•区域分为骨干区域和标准区域
•骨干区域的区域号为0,通常用Area0表示
•标准区域的区域号为其他任意整数数值
区域的边界是路由器,不是链路。
为了防止环路ospf规定 跨区域交互必须经过骨干区域,一个路由器可以有多个区域,一个链路只可以有一个区域
区域间环路问题
OSPF区域间路由的传播过程与距离矢量路由协议的路由传播过程非常相似。
对于区域间路由的传递,OSPF也需要一定的防环机制。
区域间防环机制
OSPF要求所有的非骨干区域必须与Area0直接相连,区域间路由需经由Area0中转。
1、区域间的路由传递不能发生在两个非骨干区域之间,这使得OSPF的区域架构在逻辑上形成了一个类似星型的拓扑。
2、ABR不会将描述到达某个区域内网段路由的3类LSA再注入回该区域。
ABR从非骨干区域收到的3类LSA不能用于区域间路由的计算。
单区域存在的问题
OSPF要求网络内的路由器同步LSDB,实现对于网络的一致认知。
当网络规模越来越大时,LSDB将变得非常臃肿,设备基于该LSDB进行路由计算,其负担也极大地增加了,此外路由器的路由表规模也变大了,这些无疑都将加大路由器的性能损耗。
当网络拓扑发生变更时,这些变更需要被扩散到整个网络,并可能引发整网的路由重计算。
单区域的设计,使得OSPF无法部署路由汇总。
如何解决单区域存在的问题
即网络中存在过多的一二类LSA,那么我们可以使用关于一类与二类只可以在本区域泛洪的特性依靠分割区域来减少过多的一二类LSA
划分区域后,路由器可以分为两种角色:
区域内部路由器(Internal Router):该类设备的所有接口都属于同一个OSPF区域。如R1、R4、R5。
区域边界路由器(Area Border Router):该类设备接口分别连接两个及两个以上的不同区域。如R2、R3。
虚链路
为了解决骨干区域不连续的问题,或者是拓扑设计失误的问题,导致区域没有围绕骨干区域,比如
OSPF要求骨干区域必须是连续的,但是并不要求物理上连续,可以使用虚连接使骨干区域在逻辑上连续。虚连接可以在任意两个ABR上建立,但是要求这两个ABR都有端口连接到一个相同的非骨干区域。
此时就可以解决骨干区域分割、或者区域规划问题,导致的无法互通
这也是OSPF的一个修复手段,更加适合园区网的原因,因为园区网较大,是根据企业内部用户的方便程度来制定,可以更灵活的去设计拓扑
ospf接口认证与区域认证
OSPF基础术语:Router-ID
router id 用于在一个ospf域中标识一台路由器
Router-ID的设定可以通过手工配置的方式,或使用系统自动配置的方式。
在华为的配置上
如果没有手动配置routerid 那么会采用最大的环回接口的ip地址 如果没有配置环回接口则会采用最大的以被通告的ip地址
设备会采用最先UP的loopback口,如果没有loopback口采用最先UP的物理接口(华为特性)
思科和锐捷使用最大ip地址
这是天机
但是现在华为设备和模拟器基本会选择最先UP的接口(最先配置的接口)(???)
OSPF的基础术语:度量值
OSPF 使用了cost(开销)作为路由的度量值 每一个激活ospf的接口都会维护一个cost值 默认情况下为 接口开销=参考带宽/逻辑带宽 接口带宽默认为100Mbps
OSPF的总开销是 从源网段开始到目的网段所有设备的入接口的cost进行累加
OSPF协议报文类型
OSPF有五种类型的协议报文。这些报文在OSPF路由器之间交互中起不同的作用
hello报文
周期性发送,用来发现和维护OSPF邻居关系。
在OSPF中 如果设备的 hello 或 dead (死亡) 发送的时间不一致,,会导致邻居关系无法建立
报文结构
Network Mask 描述发送者的子网掩码
Hello interval [sel] SEL表示hello包多久发送一次 默认为10s
Options 可选项
- E:允许Flood AS-External-LSAs
- MC:转发IP组播报文
- N/P:处理Type-7 LSAs
- DC:处理按需链路
Router Priority DR优先级。默认为20。如果设置为0,则路由器不能参与DR或BDR的选举。
Router Dead Interval [sec] sec 表示 失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。默认为 hello 发送时间的4倍
Designated Router 与 Backup Designated Router 表示DR与BDR的ip地址
Active Neighbor 表示邻居 Router id
DatabaseDescription(DD/DBD)报文
描述本地LSDB的摘要信息,用于两台设备进行数据库同步
DBD报文结构
我们先从描述(Description)开始吧
(I)表示在发送了多个DD报文的情况下它是第一个报文
(M) 如果这个参数数值为 1 表示后面还有 LSA summary (摘要) 只有这个参数为 0 时 Exchange 状态 结束 切换到下一个状态
(MS) 表示当两台OSPF路由器交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master
DD sequence number DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。
LSA Headers 该DD报文中所包含的LSA的头部信息 在图中表示为有一个一类LSA
Link State Request (LSR)
两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已经失效的,这时需要发送LSR报文(Link State Request Packet)向对方请求所需的LSA。内容包括所需要的LSA的摘要
LSR报文结构
LS type 表示请求LSA的类型
Link State 描述产生这个LSA的源设备的信息
Advertising Router 描述通告这个设备的 routerID
LinkStateUpdate(LSU)
用于向对方发送其所需要的LSA。
LSU 报文结构
Number of LSAs LSA的数量
以及各个LSA的详细参数 LSA的信息在后面介绍
LinkState ACK
用来对收到的LSA进行确认。
用来对接收到的LSU报文进行确认。内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。LSAck(Link State Acknowledgment Packet)报文根据不同的链路以单播或组播的形式发送。
LSA 报文结构
LSAs Headers 通过LSA的头部信息确认收到该LSA。
OSPF三大表项
邻居表
•OSPF在传递链路状态信息之前,需先建立OSPF邻居关系。
•OSPF的邻居关系通过交互Hello报文建立。
•OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer 查看
邻居表