写在前面
跟着上文SONiC路由协议简述, 这篇文章记录一下OSPF协议的学习内容。
这篇文档应当回答以下几个问题。
- 什么是Router ID? 有什么作用?
- 为什么要划分区域?为何需要骨干区域?怎样合理划分区域?
- cost值有什么作用?
- LSA描述的网络类型有哪些?
- 为什么要选举DR/BDR? 它们有什么作用?
OSPF概述
TCP/IP协议中,寻找一台计算机到另一台计算的路由时很重要的,有以下几个考量:
- 要判断是否能找到路由
- 找到路由后找一条最短的路(花费最小)
- 不能自环
- 能动态处理路由的变化
OSPF(open shortest path first,开放最短路径优先)是一种基于链路状态的动态路由协议, 最新的RFC是2328,协议的基本思路如下:在AS中每一台运行OSPF的路由器收集各自的接口/邻接信息称为链路状态,通过Flooding算法在整个系统广播自己的链路状态,使得整个系统内部维护一个同步LSDB,根据这一数据库,路由器计算出以自己为根,其它网络节点为叶的一根最短路径树,从而计算出自己到达系统内部可达的最佳路由。
相较于RIP周期性的洪泛自己的路由表,无法了解网络的拓扑结构,只是通过路由更新以及简单的机制来学习路由(依照传闻的更新), OSPF交互的是链路状态,每台OSPF路由器都知晓网络拓扑。
一句话说明ospf协议, ospf就是寻找去某个终点计算机的最短路径的方法。
ospf协议基本特征
- 适应范围 —— OSPF支持各种规模的网络,最多可以支持几百台路由器
- 快速收敛 —— 当网路拓扑结构发生变化,OSPF立即发送更新报文,使之在AS中同步
- 无自环 —— OSPF通过收集到的链路状态用最短路径树算法计算路由,从算法本身保证了不会生成自环路由
- 子网掩码 —— OSPF在描述路由时携带网段的掩码信息,所以OSPF协议不受自然掩码的限制,对VLSM支持的很好
- 区域划分 —— 允许AS的网络划分成区域来划分,区域间传送的路由信息被进一步抽象,从而减少了占用网络的带宽以及CPU的计算压力
- 等价路由 —— 支持到同一目的地址的多条等价路由,这些等价路由会被同时发现和使用
- 路由分级 —— OSPF使用4类不同的路由,按优先级:区域内路由、区域间路由、第一类外部路由、第二类外部路由
- 支持验证 —— 支持基于接口的报文验证以保证路由计算的安全性
- 组播发送 —— OSPF在有组播发送能力的链路层上以组播地址发送协议报文,既达到了广播的作用,又最大程度的减少了对其它网络设备的干扰
ospf相关术语
- RouterID 是一个32-bits的无符号整数,用于唯一标识AS内的一台路由器,OSPF直接基于IP,协议号是89,对于Router ID:
- Router ID一般需要手工配置
- 如果没有配置,首先选取最大的loopback接口地址,其次选择最大的物理接口地址
- 如果一台路由器的Router ID在运行中改变,则必须重启OSPF协议或重启路由器才能使新的Router ID生效
- Area区域 区域号是一个32bits的整数,一般用十进制整数来标识
ospf引入区域的概念是为了隔离和区分AS内的各部分,并由此减少路由器必须维护的整个AS的信息量(CPU计算和线路传输)。OSPF使用Area实现了分层——两层模式,即transit area和regular areas。transit area(backbone 或 area 0)负责的主要功能是IP包快速和有效的传输,互联OSPF其它区域类型。一般情况下,regular area不允许其他区域的流量通过它到达另外一个区域,必须穿越transit area。regular areas还可有很多子类型,如stub area,not-so-stubby area。- ABR(area border router) 连接不同的area,区域之间通过ABR将一个区域内的已计算出的路由封装成Type3类的LSA发送到另一个区域来传递路由信息。此时LSA中包含的不再是链路状态信息,而是纯粹的路由信息。或者说,此时的OSPF是基于D-V算法而不是链路状态算法。D-V算法无法保证消除路由自环,自环产生的主要是因为生成该条路由信息的路由器没有加入生成者的信息,即每一条路由信息都无法知道最初是由谁所生成。OSPF协议在生成LSA时首先将自己的Router ID加入到LSA中,但是如果该路由信息传递超过两个区域后,就会丧失最初的生成者信息。
解决方法是:所有ABR将本区域内的路由信息封装成LSA,统一的发送给一个特定的区域,再由该区域将这些信息转发给其它区域。在这个特定区域内,每一条LSA都确定的知道生成者信息。在其它区域内所有的到区域外的路由都会发送到这个特定区域中,所以就不会产生自环。 - ASBR(autonomous system border router):一个OSPF路由器,但它连接到另一个AS,或者在同一个AS的网络区域中,但运行不同于OSPF的IGP
- ABR(area border router) 连接不同的area,区域之间通过ABR将一个区域内的已计算出的路由封装成Type3类的LSA发送到另一个区域来传递路由信息。此时LSA中包含的不再是链路状态信息,而是纯粹的路由信息。或者说,此时的OSPF是基于D-V算法而不是链路状态算法。D-V算法无法保证消除路由自环,自环产生的主要是因为生成该条路由信息的路由器没有加入生成者的信息,即每一条路由信息都无法知道最初是由谁所生成。OSPF协议在生成LSA时首先将自己的Router ID加入到LSA中,但是如果该路由信息传递超过两个区域后,就会丧失最初的生成者信息。
- cost值 OSPF选择路径是依靠整个链路cost值的总和。计算方法是:10^8/链路带宽。越小优先级越高。缺省情况下,接口按照当前的波特率自动计算接口运行OSPF协议所需的开销。
- DR/BDR:如果网络上有N台路由器,需要建立n*(n-1)/2个邻接关系,使用DR(designated router)来进行信息传递,所有路由器都只将路由信息发送给DR和BDR,再由DR将路由信息发送给本网段内其它路由器,这样只需要建立(n-2)*2+1个邻接关系。通过hello报文进行选举,priority大于0的进行选举,priority一样,router ID大的当选。DR不可被抢占,除非失效,失效后BDR接替成为DR,同时选举出新的BDR。DR是某个网段中概念,是针对路由器的接口而言的。两台DROther路由器之间不进行路由信息的交换,但仍互相发送HELLO报文,他们之间的邻居状态机停留在2-Way状态。
OSPF网络类型
根据链路层协议类型,OSPF将网络分为四种类型:
- broadcast:链路层协议是Ethernet、FDDI、Token Ring,以组播的方式发送协议报文,选举DR/BDR.
- NBMA(Non broadcast multiaccess):链路层协议是FR、ATM、HDLC或X.25。手工指定邻居。
- p2p(point-to-point):链路层协议是PPP或LAPB
- p2mp(point-to-multipoint):没有一种链路层协议会被缺省的认为是p2mp类型,p2mp必然是由其它网络类型强制更改的,常见的做法是将非全联通的NBMA改为点到多点的网络。
由于现在链路层协议一般就是Ethernet,所以其它类型只做一个简单了解。