开放式最短路径优先 (Open Shortest Path First,OSPF) 是一个内部网关协议 (Interior Gateway Protocol,IGP),用于在单一自治系统(Autonomous System,AS) 内决策路由。OSPF 适合小型、中型、较大规模网络。OSPF 采用Dijkstra的最短路径优先算法 (Shortest Path Firs, SPF) 计算最小生成树,确定最短路径。OSPF 基于IP, 协议号为89, 采用组播方式交换OSPF包。OSPF的组播地址为224.0.0.5 (全部OSPF路由器)和224.0.0.6 (指定路由器)。OSPF使用链路状态广播 (LinkState Advertisement,LSA) 传送给某区域内的所有路由器。
一、AS
自治系统 (AS) 是指使用同一个内部路由协议的一组网络。Internet 可以被分割成许多不同的自治系统。换句话说, Internet 是由若干自治系统汇集而成的。每个AS 由一个长度为16位的编码标识,由Internet地址授权机构 (Internet Assigned Numbers Authority,IANA) 负责管理分配。AS编号分为公有AS (编号范围1~64511)和私有AS (编号范围64512~65535),公有AS编号需要向IANA申请。
二、IGP
内部网关协议 (Interior Gateway Protocol,IGP) 在同一个自治系统内交换路由信息。IGP的主要目的是发现和计算自治域内的路由信息。IGP使用的路由协议有RIP、OSPF、IS-IS等。
三、EGP
外部网关协议 (Exterior Gateway Protocol,EGP) 是一种连接不同自治系统的相邻路由器之间交换路由信息的协议。EGP使用的路由协议有BGP。
四、IGP 、EGP、AS三者关系
六、链路状态路由协议
链路状态路由协议基于最短路径优先 (SPF) 算法。该路由协议提供了整网的拓扑视图,根据拓扑图计算到达每个目标的最优路径;当网络变化时触发更新,发送周期性更新链路状态通告,不是相互交换各自的整张路由表。
运行距离矢量路由协议的路由器会将所有它知道的路由信息与邻居共享,当然只是与直连邻居共享。
链路状态和距离矢量路由协议对比:
距离矢量路由协议 | 链路状态路由协议 | |
发布路由触 发条件 | 周期性发布路由信息 | 当网络扑拓变化时,发布路由信息 |
发布路由信 息的路由器 | 所有路由器 | 指定路由器(Designated Router, DR) |
发布方式 | 广播 | 组播 |
应答方式 | 不要求应答 | 要求应答 |
支持协议 | RIP、I GRP、BGP(增 强型距离矢量路由协议) | OSPF、IS-IS |
七、区域 (Area)
OSPF 是分层路由协议,将网络分割成一个“主干”连接的一组相 互独立的部分,这些相互独立的部分称为“区域” (Area), “主 干”部分称为“主干区域”。每个区域可看成一个独立的网络,区 域的OSPF 路由器只保存该区域的链路状态。每个路由器的链路状态数据可以保持合理大小,计算路由时间、报文数量就不会过大。
八、OSPF的5类报文
OSPF 使用IP包头封装5类报文,用来交换链路状态广播 (Link State Advertisement,LSA)。
注意: LSA 本身不是OSPF 的消息,而是一类数据结构,存放在路由器的链路状态库 (Link-State DataBase,LSDB) 中,并可包含在LSU 消息中进行交换。LSA包括有关邻居和通道成本的信息。接收路由器用LSA 维护其路由选择表。
LSA类型 | 产生者 | 传播区域 | 描述 |
LSA1(Router LSA) | 所有路由 器 | 只在所描述的区 域内泛洪 | 描述某区域内路由器端口链 路状态的集合 |
LSA 2(Network LSA) | DR或BDR | 只在DR、BDR所 属的区域内泛洪 | 描述广播型网络和NBMA网 络,包含了该网络上所连接 路由器Route ID列表 |
LSA3(Network summary LSA) | ABR | 通告给其他相关 区域 | 区域内所有网段的路由信息 |
LSA 4(ASBR Summary LSA) | ABR | 通告给除AS BR 所在区域的其他 相关区域 | 描述到ASBR的路由 |
LSA5(Autonomous System External LSA) | ASBR | 通告到所有的区 域(除了Stub区 域和NSSA区域) | 描述到AS外部的路由 |
(1)Hello
Hello 用于发现邻居,保证邻居之间keepalive, 能 在NBMA网络上 选举指定路由器 (DR) 、 备份指定路由器 (BDR) 。 默认Hello 报 文的发送间隔时间是10秒,默认无效时间间隔是Hello时间间隔的4 倍,即如果在40秒内没有从特定的邻居接收到这种分组,路由器就 认为那个邻居不存在了。 Hello 包应该包含:源路由器的RID、源路 由器的Area ID、源路由器接口的掩码、源路由器接口的认证类型和 认证信息、源路由器接口的Hello包发送的时间间隔、源路由器接口的无效时间间隔、优先级、 DR/BDR接口IP 地址、五个标记位、源路由器的所有邻居的RID 。Hello 组播地址为224.0.0.5。
(2)数据库描述 (DD 或DBD) 消息
用来交换每个LSA 的摘要版本, 一般出现在初始拓扑交换中,这样路由器可以获悉邻接路由器的LSA 列表并用于选择主从关系。 LSA描述了路由器的所有链路、接口、路由器的邻居及链路状态信息。
(3)链路状态请求 (LSR) 消息。
请求一个或多个LSA, 告知邻接路由器提供LSA的详细信息给发送路由器。
(4)链路状态更新 (LSU) 消息。
包含LSA 的详细信息, 一般用来响应LSR 消息。
( 5 ) 链 路 状 态 应 答 (LSAck)消 息 。
用来确认已收到LSU 消息。
上述消息可以支持路由器发现邻接路由器 (Hello), 学习其本身链路状态库 (LSDB) 中没有的LSA(DD), 请求并可靠交换LSA(LSR/LSU), 监测邻接路由器是否发生拓扑改变。
LSA每30分钟重传1次。
九、OSPF 工作流程
(1)启动OSPF 进程的接口,发送Hello 消息。
(2)交换Hello 消息建立邻居关系。
(3)每台路由器对所有邻居发送LSA 。
(4)路由器接收邻居发过来的LSA 并保存在LSDB 中,发送一个LSAcopy给其他邻居。
(5)LSA 泛洪扩散到整个区域,区域内所有路由器都会形成相同的LSDB。
(6)当所有路由器的LSDB 完全相同时,每台路由器将以自身为根,使用最短路径算法算出到达每个目的地的最短路径。
(7)每台路由器通过最短路径构建出自己的路由表,包含区域内路由(最优)、区域间路由、 E1外部路由和E2外部路由。
十、BR与BDR选举
在DR 和BDR 出现之前,每一台路由器及其所有邻居成为全连接的OSPF邻接关系,关系数为n×(n-1)/2 。 在多址网络中,路由器发出的LSA从邻居的邻居发回来,导致网络上产生很多LSA的复制,所以基于这种考虑产生了DR 和BDR。 网段中的所有路由器都从DR 和BDR 交换信息,而不是彼此交换信息。 DR 和BDR 将信息转交给其他所有路由器,用DR 和BDR 方式的连接数为2×(n-1)。
DR/BDR的选举过程:
(1)选举路由器必须进入双向会话 (Two-way) 状态,优先级别必须大于0(优先级为0,则不参与选举)。
(2)选举优先级最高的路由器为DR, 次优的为BDR。
(3)如果优先级相同,则选举Router-id 最大的路由器。
(4)如果DR/BDR已经存在,而又有新的OSPF路由器加入,即使该路由器优先级最高,也不剥夺现有DR/BDR 的角色。
(5)如果DR失效,则BDR接管DR, 并重新激活一个新BDR选举进程。
十一、OSPF选举Router-id 的规则
(1)手动配置的Router-id为首选。
(2)用所有loopback 中最大的IP作为Router-id。
(3)用所有活动物理接口中最大的IP作为Router-id (用作Router-id 的接口不一定非要运行OSPF协议)。
十二、OSPF 网络类型
OSPF 网络类型分为点到点网络 (Point-to-Point)、 广播型网络(Broadcast)、 非广播型 (NonBroadcast Multiaccess,NBMA) 网络、点到多点网络 (Point-to-Multicast)、 虚链接 (Virtual Link)。
OSPF网络类型 | 特点 | 数据传输方式 |
点到点网络 (Point-to-Point) | 有效邻居总是可以形成邻居关系 | 组播地址为224.0.0.5,该 地址称为AllSPFRouters |
点到多点网络 (Point-to-Multicast) | 不选举DR/BDR,可看作是多个 Point-to-Point链路的集合 | 单播(Unicast) |
广播型网络 (Broadcast) | 选举DR/BDR,所有路由器和 BR/BDR交换信息。DR/BDR不 能被抢占。广播型网络有:以太 网、Token Ring和FDDI | DR、BDR组播到224.0.0.5 ; DR/BDR侦听224.0.0.6, 该地址称为AllDRouters |
非广播型 (NBMA) | 没有广播,需手动指定邻居, Hello消息单播。NBMA网络有 X.25、Frame Relay和ATM | 单播 |
十三、OSPF网络接口COST值
在OSPF 协议中每个接口根据其速率不同,都有一个默认的公式计算的
cost值。
OSPF 协议中接口的开销计算公式:接口开销=参考带宽/逻辑带宽
注意: OSPF 的接口带宽默认为100Mbps, 因此Ethernet(100Mbit/s)对应的开销的缺省值是1。
十四、OSPF 配置
创建OSPF 进程,指定路由器的RouterID, 启动OSPF 是OSPF 配置的前提。
(1)创建OSPF进程。
system-view //进入系统视图
ospf [process-id|router-id router-id ] //启动OSPF 进程,进入OSPF视图
//process-id为进程号,缺省值为1,这个值只有本地意义; router-id router-id 是路由器的ID号
area area-id //进入OSPF 区域视图
//OSPF区域分为骨干区域 (Area 0) 和非骨干区域。骨干区域负责区域之 间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发
network address wildcard-mask [description text]
//配置区域所包含的网段。其中, description 字段用来为OSPF指定网段配置描述信息
(2)在接口上启动OSPF。
system-view //进入系统视图
interface interface-type interface-number //进入接口视图
ospf enable [process-id ]area area-id //在接口上启动OSPF