单区域OSPF
OSPF的特征
OSPF是一种流行的、多厂商开放标准的无类链路状态路由协议
- 一种链路状态路由协议
- 无类路由协议
- 开放最短路径优先
功能:
- 无类
OSPFv2被设计为无类方式;因此,可支持IPv4 VLSM和CIDR
- 高效
路由变化会触发路由更新(非指定更新)
使用SPF算法选择最优路径
- 快速收敛
能够迅速传播网络变化
- 可扩展
在小型和大型网络中都能够良好运行
路由器可以分为多个区域,以支持分层结构
- 安全
启用身份验证时,OSPF路由器只接受来自对等设备中具有相同与共享密钥的加密路由更新
OSPFv2支持消息摘要5(MD5)和安全散列算法(SHA)身份验证
OSPFv3使用互联网协议安全性(IPsec)添加OSPFv3数据包的身份验证
管理距离表示路由器来源的可信度(即优先级)OSPF的默认管理距离为110
管理距离
路由源 | 管理距离 |
---|---|
已连接路由 | 0 |
静态路由 | 1 |
EIGRP汇总路由 | 5 |
外部BGP | 20 |
内部EIGRP | 90 |
IGRP | 100 |
OSPF | 110 |
IS-IS | 115 |
RIP | 120 |
外部EIGRP | 170 |
内部BGP | 200 |
ospf的组件
-
数据结构
-
路由协议消息
-
算法
OSPF的数据结构
数据库 | 表 | 说明 | |
---|---|---|---|
邻接数据库 | 邻居表 | 路由器已建立双向通信的所有邻居路由器的列表、该表对于每一个路由器都是唯一的 | show ip ospf neighour |
链路状态数据库(LSDB) | 拓扑表 | 列出网络中所有的其他路由器的相关信息、该数据库显示了为了与拓扑、某个区域内的所有路由器都有相同的LSDB | show ip ospf database |
转发数据库 | 路由表 | 在链路状态数据库上运行算法时生成的路由表、每台路由器的路由器的路由表都是唯一的,都包含向其他路由器发送数据包的方式和位置 | show ip route |
OSPF使用路由协议消息来传递路由信息。这样的数据包用于发现相邻的路由器,并交换路由信息以保持相关网络的准确信息
OSPF使用5种类型的数据包:
- Hello数据包
- 数据库描述数据包
- 链路状态请求数据包
- 链路状态更新包
- 链路状态确认包
路由器根据SPF算法计算结果创建拓扑表
SPF算法将每台路由器置于树的根部并计算到达每个节点的最短路径,从而创建SPF树,然后使用SPF树计算最佳路由。OSPF将最佳路由放入转发数据库,用于创建路由表
链路状态工作原理
(1)建立邻居邻接关系:
启用OSPF的路由器将Hello数据包从所有启用OSPF的接口发出,以确定这些链路上是否存在邻居。如果存在邻居,启用OSPF的路由器将尝试与邻居建立邻接关系
(2)交换链路状态通告
建立邻接关系之后,路由器会交换链路状态通告(LSA)
LSA包含每条直连链路的状态和开销。路由器将其LSA泛红到邻居,收到LSA的邻接邻居立即将LSA泛红到其他直接连接的邻居,直到区域中的所有路由器收到所有的LSA。
(3)建立拓扑
收到LSA后,启用OSPF的路由器根据收到的LSA构建拓扑表(LSDB)此数据库最终负责维护有关网络拓扑的信息
(4)执行SPF算法
路由器将执行SPF算法,创建一颗SPF树。
在SPF树中,把最佳路径插入到IP路由表中,除非路由来自管理距离较近的相同网络,例如静态路由,否则会将路由插入到路由表中。系统根据路由表中的条目做出路由决策。
单区域OSPF和多区域OSPF
为使OSPF跟高效且可扩展,OSPF使用多个区域支持分层路由。
OSPF区域是在共享相同链路状态信息的一组路由器
当部署单区域OSPF时,所有的路由器都位于主干区域(area 0)
当部署为多区域OSPF时,多区域OSPF以分层方式实施
-
ABR:互联各个区域的路由器称为区域边界路由器
多区域OSPF的优势
优势 | 描述 |
---|---|
路由表减少 | 路由表条目减少,因为区域之间的网络地址可以汇总,默认情况下不启用路由汇总。 |
链路状态更新开销减少 | 设计包含更小区域的多区域OSPF,将处理和内存要求降低到最低。 |
SPF计算频率降低 | 使拓扑变化仅影响区域内部/例如由于LSA泛红在区域边界终止,因此使路由器更新的影响降到最小。 |
OSPF消息
ospfv2数据包类型
数据包类型 | 描述 |
---|---|
第一类:Hello数据包 | 用于建立和维护与其他OSPF路由器的邻接关系 |
第二类:数据库描述(DBD)数据包 | 发送路由器的LSDB的简略列表,用于让接收路由器检查本地LSDB、LSDB必须在同一区域内的所有链路状态路由器上保持一致,以构建准确的SPF树 |
第三类:链路状态请求(LSR)数据包 | 接收路由器可以通过发送LSR来请求DBD中任意条目的详细信息 |
第四类:链路状态更新(LSU)数据包 | 用于回复LSR和通告新信息,LSU包含7种不同类型的LSA |
第五类:链路状态确认(LSAck)数据包 | 当路由器收到LSU后,会发送LSAck来接收到LSU,LSAck数据字段为空 |
Hello数据包
- 用于建立邻接关系
- 通告两台路由器成为邻接关系所必须的参数
- 指定路由器(DR)和备份指定路由器(BDR)
Hello数据包间隔
- 10s:多接入网络和点对点网络上的默认设置
- 30s:非广播多接入[NBMA]网络的默认设置,如帧中继
- 40s:多接入网络和点对点网络上的默认设置
- 120s:NBMA网络的默认设置
链路状态更新
第四类LSU数据包用于回复LSR数据包。第五类数据包用于确认收到第四类LSU数据包
LSU也用于转发OSPF路由更新,例如链路更改。一个LSU数据包可能包含11种不同类型的LSA
LSA |
---|
路由器LSA、网络LSA、汇总LSA、自治系统外部LSA、组播OSPFLSA、用于边界网关协议(BGP)的外部属性LSA、不透明LSA |
OSPF的运行
-
与邻居建立邻接关系
-
交换路由信息
-
计算最佳路由
-
实现收敛
OSPF状态及描述
OSPF 描述 Down状态 没有接收到Hello数据包=Down、路由器发送Hello数据包、过度到init状态 init状态 Hello数据包已从邻居接收、包含发送方路由器的路由器ID、过度到Two-way状态 Two-way状态 在以太网链路上选DR和BDR、过度到Exstart状态、 EXStart状态 协商主从关系和DBD数据包序列号、主设备启动DBD数据包交换 Exchange状态 路由器交换DBD数据包、需要其他路由器信息才能渡过Loading状态,否则会过度到Full状态 loading状态 LSR和LSU用于获取更多路由信息、路由使用SPF算法进行处理、过度到Full状态 Full状态 路由器已收验
OSPF开销
开销 = 参考带宽/接口带宽
调整带宽:
- 要调整千兆以太网的开销:
auto-cost reference-bandwidth 1000
- 要调整万兆以太网的开销:
auto-cost reference-bandwidth 10000
- 要恢复默认参考带宽:
auto-cost reference-bandwidth 100
配置
(1)进入OSPF配置模式
R1(config)#router ospf xx
xx为process-id取值范围1~65535.在本地有效,不需要与其他OSPF路由器采用相同的值,也能与邻居建立邻接关系
(2)路由器ID
每台路由器需要一个路由器ID来参与OSPF域
唯一标识路由器:其他路由器使用路由器ID来唯一标识OSPF域中的每一台路由器以及来自这些路由器的所有数据包
参与DR的选择:初步建立OSPF网络时会进行DR的选择。配置为最高优先级的路由器设备选作DR。假设没有配置优先级,或者优先级相等,则具有最高路由器ID的路由器被选为DR。第二高的被选为BDR。
思科路由器根据3个条件的其中一个获取路由器ID:
- 使用OSPF路由器配置明确的路由器ID
- 路由器将选择任意环回接口的最高IPv4地址
- 路由器会选择其所有物理接口的最高活动IPv4地址
R1(config)#router ospf x
R1(config-router)#router-id x.x.x.x
//show ip protocols来验证路由器ID
//重置路由器ID的首选方式是清除OSPF进程clear ip ospf process
(3)宣告接口地址
network intf-ip-address widcard-mask area area-id
宣告默认路由:default-information originate always
被动接口
默认情况下,OSPF消息通过所有启用OSPF的接口转发出去。但实际上不需要那么多
使用路由器配置被动接口能够防止通过路由器接口传输路由消息,但是仍然允许向其他路由器通告该网络
R1(config)#router ospf x
R1(config-router)#passive-interface Gi x/x
//也可以先配置所有的接口为被动接口,在开启需要转发OSPF的消息
R1(config-router)#passive-interface default
R1(config-router)#no passive-interface s x/x/x
//show ip protocols验证被动接口
调整接口带宽
R1(config)#int s x/x/x
R1(config-if)#bandwidth xx
手动修改OSPF开销
R1(config)#int s x/x/x
R1(config-if)#no bandwidth xx
R1(config-if)#ip ospf cost xx
检验链路的OSPF接口开销:show ip ospf interface s x/x/x
验证度量值:show ip route | include x.x.x.x
验证带宽:show interface s x/x/x | include BW
查看OSPF:show ip ospf neighour
OSPFv3和OSPFv2
特性 | OSPFv2 | OSPFv3 |
---|---|---|
通告 | IPv4 | IPv6 |
源地址 | OSPFv2消息从送出接口的二IPv4地址发出 | OSPFv3消息使用送出接口的本地链路地址发送 |
通告网络 | network | ipv6 ospf process-id area area-id 接口配置命令 |
IP单播路由 | 单播路由默认情况下已启动 | 单播路由必须使用ipv6 unicast-routing 全局配置命令启用 |
配置(用到的时候在补充……)