HCIA-OSPF
OSPF
OSPF基础
距离矢量路由协议(RIP)
运行距离矢量路由协议的路由器周期性的泛洪自己的路由表。通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中。
对于网络中的所有的路由器而言,路由器并不清楚网络的拓扑,只是简单的知道要去往某个目的方向在哪里,距离有多远,这就是距离矢量算法的本质。
链路状态路由协议-LSA泛洪
与距离矢量路由协议不同,链路状态路由协议通告的时链路状态而不是路由表。运行链路状态路由协议的路由器之间首先会加你了一个协议的邻居关系,然后彼此之间开始交互LSA(Link State Advertisement,链路状态通告)

链路状态路由协议-LSDB组建
每台路由器豆花产生LSAs,路由器将接收到的LSAs放入自己的LSDB(Link State DataBase,链路状态数据库)。路由器通过LSDB掌握了全网的拓扑。

链路状态路由协议-SPF计算
每台路由器基于LSDB,使用SPF(Shortest Path First最短路径优先)算法进行计算。每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这颗“树”路由器就已经知道了到达网络各个角落的优选路径。

链路状态路由协议-路由表生成
路由器将计算出来的优选路径,加载进自己的路由表(Routing Table)。

链路状态路由协议总结

OSPF简介
OSPF是典型的链路状态路由协议,是目前业内使用非常广泛的IGP协议之一。
目前针对IPv4协议使用的是OSPF Version 2 (RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。如无特殊说明后边都使用OSPF Version 2。
运行OSPF路由器之间交互的是LS(Link State,链路状态)信息,而不是直接交互路由。LS信息是OSPF能够正常进行拓扑及路由计算的关键信息。
OSPF路由器将网络中的LS信息收集起来,存储在LSDB中。路由器都清楚区域内的网络拓扑结构,这有助于路由器计算无环路径。
每台OSPF路由器都采用SPF算法计算达到目的地的最短路径。路由器依据这些路径形成路由加载到路由表中。
OSPF支持VLSM(Variable Length Subnet Mask,可变长子网掩码),支持手工路由汇总。
多区域的设计使得OSPF能够支持更大规模的网络。
OSPF在园区网络中的应用

OSPF基础术语:区域
OSPF Area用于标识一个OSPF的区域。
区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。
Area 0为骨干区域,其余区域为非骨干区域。
所有的非骨干区域必须和骨干区域相连。

OSPF基础术语:Router-ID
Router-ID(Router Identifier,路由器标识符),用于在一个OSPF域中唯一地标识一台路由器。
Router-ID的设定可以通过手工配置的方式或使用系统自动配置的方式。
理论上没有手工配置的Router-ID,优先环回地址再物理地址。
实际实验时,是第一条生成的IP作为Router-ID。

OSPF基础术语:度量值
OSPF使用Cost(开销)作为路由的度量值。每一个激活了OSPF的接口都会维护一个接口Cost值,缺省时接口Cost值=100 Mbit/s /接口带宽。其中100 Mbit/s为OSPF指定的缺省参考值,该值可以进行配置。Cost值不足1时会补到1,超过1的小数值会被省略。
笼统来说,一条OSPF路由的Cost值可以理解为是从目的网段到本路由器沿途所有入接口的Cost值累加。

OSPF协议报文类型
OSPF有五种类型的协议报文,这些报文在OSPF路由器之间交互中起不同的作用。
| 报文名称 | 报文功能 |
|---|---|
| Hello | 周期性发送,用来发现和维护OSPF邻居关系。 |
| Database Description | 描述本地LSDB的摘要信息,用于两台设备进行数据库同步。 |
| Link State Request | 用于向对方请求所需要的LSA。设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。 |
| Link State Update | 用于向对方发送其所需要的LSA。 |
| Link State ACK | 用来对收到的LSA进行确认。 |
相当于你去餐厅坐下后,服务员来向你询问是否点餐(Hello),你要点餐就接过他手中的菜单(Database Description),把你想吃的菜告诉他(Link State Request),点完菜之后,他将你点的菜上上来(Link State Update),上完之后,你觉得菜上齐了就跟他确认(Link State ACK),没上齐就不对他进行确认,然后他再看什么菜上漏了再给你上。
OSPF三大表项
OSPF有三张重要的表项,OSPF邻居表、LSDB表和OSPF路由表。
邻居表
- OSPF在传递链路状态信息之前,需要先建立邻居关系。
- OSPF的邻居关系通过交互Hello报文建立。
- OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer查看。

LSDB表
对于OSPF的LSDB表需要了解:
LSDB会保存自己产生的及从邻居收到的LSA信息,本例中R1的LSDB包含了三条LSA。
Type标识LSA的类型,AdvRouter标识发送LSA的路由器。
使用命令行display ospf lsdb查看LSDB表。

路由表
对于OSPF的路由表,需要了解:
OSPF路由表和路由器路由表是两张不同的表项。
OSPF路由表中包含Destination、Cost和NextHop等指导转发的信息。
使用命令display ospf routing可查看OSPF路由表。

OSPF协议工作原理
OSPF路由器之间的关系
关于OSPF路由器之间的关系有两个重要的概念,邻居和邻接关系。
考虑一种简单的拓扑,两台路由器直连。在双方互联接口上激活OSPF,路由器开始发送及侦听Hello报文。在通过Hello报文发现彼此之后,这两台路由器便形成了邻居关系。
邻居关系的建立只是一个开始,后续会进行一系列的报文交互,例如前边提到的DD、LSR、LSDB和LS ACK等。当两台路由器LSDB同步完成,并开始独立计算路由时,这两台路由器形成了邻接关系。
初识OSPF邻接关系建立过程
OSPF完成邻接关系的建立有四个步骤,建立邻居关系、协商主从、交互LSDB信息,同步LSDB。

OSPF邻接关系建立流程



DR:指定路由器。BDR:备份指定路由器。
OSPF网络类型简介
在学习DR和BDR的概念之前,需要首先了解OSPF的网络类型。
OSPF网络类型是一个非常重要的接口变量,这个变量将影响OSPF在接口上的操作,例如采用什么方式发送OSPF协议报文以及是否需要选举DR、BDR等。
接口默认的OSPF网络类型取决于接口所使用的数据链路层封装。
OSPF有四种网络类型,Broadcast、NBMA、P2MP和P2P。
- Broadcast:Specify OSPF broadcast network,广播式多路访问。
- nbma:Specify OSPF NBMA network,非广播式多路访问。
- p2mp:Specify OSPF point-to-multipoint network,点到多点。
- p2p:Specify OSPF point-to-point network,点到点。
一般情况下,链路两端的OSPF接口网络类型必须一致,否则双方无法建立邻居关系。
OSPF网络类型可以在接口下通过命令手动修改以适应不同网络场景,例如可以将BMA网络类型修改为P2P。


DR与BDR的背景
MA(Multi-Access)多路访问网络有两种类型,广播型多路访问网络(BMA)及非广播型多路访问网络(NNMA)。以太网(Ethernet)是一种典型的广播型多路访问网络。
在MA网络中,如果每台OSPF路由器都与其他的所有路由器建立OSPF邻接关系,便会导致网络中存在过多的OSPF邻接关系,增加设备负担,也增加了网络中泛洪的OSPF报文数量。
当拓扑出现变更,网络中的LSA泛红可能会造成带宽的浪费和设备资源的损耗。

为优化MA网络中OSPF邻接关系,OSPF指定了三种OSPF路由器身份,DR(Designated Router,指定路由器)、BDR(Backup Designated Router,备份指定路由器)和DRouter路由器。
只允许DR、BDR与其他OSPF路由器建立邻接关系。DRouter之间不会建立全毗邻的OSPF邻接关系,双方停滞在2-way状态。
BDR会监控DR状态,并在当前DR发生故障时接替其角色。

OSPF域
单区域
OSPF域(Domain):一系列使用相同策略的连续OSPF网络设备所构成的网络。
OSPF路由器在同一个区域(Area)内网络中泛洪LSA。为了确保每台路由器都拥有对网络拓扑的一致认知,LSDB需要在区域内进行同步。
如果OSPF域仅有一个区域,随着网络规模越来越大,OSPF路由器的数量越来越多,这将导致诸多问题:
- LSDB越来越庞大,同时导致OSPF路由表规模增加,路由器资源消耗多,设备性能下降,影响数据转发。
- 基于庞大的LSDB进行路由计算变得困难。
- 当网络拓扑变更时,LSA全域泛洪和全网SPF重计算带来巨大负担。
多区域
OSPF引入区域(Area)的概念,将一个OSPF域划分为多个区域,可以使OSPF支撑更大规模组网。
OSPF多区域的设计减小了LSA泛洪的范围,有效的把拓扑变化的影响控制在区域内,达到网络优化的目的。
在区域边界可以做路由汇总,减小了路由表规模。
多区域提高了网络扩展性,有利于组建大规模的网络。

OSPF路由器类型
OSPF路由器根据其位置或功能不同,有这样几种类型:
区域内路由器(Internal Router)
区域边界路由器ABR(Area Border Router)
骨干路由器(Backbone Router)
自治系统边界路由器ASBR(AS Boundary Router)

OSPF基础配置命令
(系统视图)创建并运行OSPF进程
1 | [Hauwei]ospf [process-id] | router-id [router-id] |
process-id用于标识OSPF进程,默认进程号为1。OSPF支持多进程,在同一台设备上可以运行多个不同的OSPF进程,它们之间互不影响,彼此独立。router-id用于手工指定设备的ID号。如果没有通过命令指定id号,系统会从当前接口的ip地址中自动选取一个作为设备的id号,一般为最先启用的ip。
(ospf视图)创建并进入ospf区域
1 | [Huawei-ospf-1]area area-id |
area命令用来创建OSPF区域,并进入OSPF区域试图。
area-id可以是十进制整数或者点分十进制格式。采取整数形式时,取值范围是0~4294967295。
(OSPF区域视图)指定运行OSPF的接口
1 | [Huawei-ospf-1-area-0.0.0.0]network network-address wildcard-mask |
network命令用来指定运行OSPF协议的接口和接口所属的区域。network-address为接口所在的网段地址。wildcard-mask为ip地址的反码,相当于将IP地址的掩码反转(0变1,1变0),例如0.0.0.255表示掩码长度24bit。
(接口视图)配置OSPF接口开销
1 | [Huawei-GigabitEthernet0/0/0]ospf cost cost-value |
ospf cost命令用来配置接口运行OSPF协议所需的开销。缺省情况下,OSPF会根据该接口的带宽自动计算其开销值cost取值范围是1~65535。
(OSPF视图)设置OSPF带宽参考值
1 | [Huawei-ospf-1]bandwidth-reference value |
bandwidth-reference命令用来设置通过公式计算接口开销所依据的带宽参考值。value取值范围是1~2147483648,单位是Mbit/s,缺省值是100Mbit/s。
(接口视图)设置接口在选举DR时的优先级
1 | [Huawei-GigabitEthernet0/0/0]ospf dr-priority priority-value |
ospf dr-priority命令用来设置接口在选举DR时的优先级。priority值越大,优先级越高,取值范围是0~255。
OSPF实验
实验1-单区域OSPF配置

AR1配置
1 | sys |
AR2配置
1 | sys |
AR3配置
1 | sys |
联通性测试


实验2-多区域OSPF

AR1配置
1 | sys |
AR2配置
1 | sys |
AR3配置
1 | sys |
AR4配置
1 | sys |
联通性测试


认证
ospf邻居关系的认证,保证邻居建立的安全性。有两种方式建立认证,一种是接口认证另一种是区域认证。
接口认证
1 | int s4/0/0 |
设置了接口认证一段时间后,就会提示邻居down掉的信息。

对AR2进行接口认证配置后,就会重新建立邻接关系。
1 | ospf authentication-mode md5 1 passwd |

区域认证
1 | 进入区域中 |

对AR3和AR4进行区域认证配置,一段时间后就会重新建立起邻接关系。
1 | [AR3]ospf 1 |




