OSPF
由于静态路由由网络管理员手工配置,因此当网络发生变化时,静态路由需要手动调整,这制约了静态路由在现网大规模的应用。
动态路由协议因其灵活性高、可靠性好、易于扩展等特点被广泛应用于现网。在动态路由协议之中,0SPF( Open Shortest Path First,开放式最短路径优先 )协议是使用场景非常广泛的动态路由协议之一。
OSPF在RFC2328中定义,是一种基于链路状态算法的路由协议。
为什么需要动态路由协议?
静态路由是由工程师手动配置和维护的路由条目,命令行简单明确,适用于小型或稳定的网络
静态路由有以下问题:
无法适应规模较大的网络:随着设备数量增加,配置量急剧增加。
无法动态响应网络变化:网络发生变化,无法自动收敛网络,需要工程师手动修改。
简单说就是静态路由需要管理员确定目的地和下一站,如果中间链路故障则无法通信。因此出现了动态路由协议,动态路由协议是路由器之间用来交换路由信息并自动学习路由的协议。通过在路由器上运行动态路由协议,路由器可以学习路由信息并最终生成路由转发表。当网络拓扑结构发生变化时,动态路由协议可以自动更新路由表,并负责决定数据传输的最佳路径。
简单讲就是动态路由运行在路由器等三层设备上可以自动优选转发路径以及故障触发路径变化,不需要手动干预。
动态路由协议的分类
距离矢量路由协议
运行距离矢量路由协议的路由器周期性的泛洪自己的路由表。通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中。对于网络中的所有路由器而言,路由器并不清楚网络的拓扑,只是简单的知道要去往某个目的方向在哪里,距离有多远。这即是距离矢量算法的本质。常见的就是RIP,现在已经用得比较少了,不会重点学习了。
链路状态路由协议
链路状态路由协议通告的的是链路状态而不是路由表。运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系,然后彼此之间开始交互LSA(Link State Advertisement,链路状态通告)。这类路由协议主要有OSPF和ISIS,今天就是学习的OSPF。
总结就是距离矢量路由只能从邻居路由器学习到目的地还有多少跳,链路状态路由是所有路由器组成一个组,成员公开自己的接口链路状态,每个需要的成员自己组装。
OSPF概述
OSPF(Open Shortest Path First,开放式最短路径优先)是典型的链路状态路由协议,是目前业内使用非常广泛的IGP协议之一。目前针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。
简单总结如下:
运行OSPF路由器之间交互的是LS(Link State,链路状态)信息,而不是直接交互路由。LS信息是OSPF能够正常进行拓扑及路由计算的关键信息。
OSPF路由器将网络中的LS信息收集起来,存储在LSDB中。路由器都清楚区域内的网络拓扑结构,这有助于路由器计算无环路径。
每台OSPF路由器都采用SPF算法计算达到目的地的最短路径。路由器依据这些路径形成路由加载到路由表中。
OSPF支持VLSM(Variable Length Subnet Mask,可变长子网掩码),支持手工路由汇总。
多区域的设计使得OSPF能够支持更大规模的网络。
OSPF基础术语
区域:OSPF Area用于标识一个OSPF的区域。区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。
Router-ID:Router-ID(Router Identifier,路由器标识符),用于在一个OSPF域中唯一地标识一台路由器。Router-ID的设定可以通过手工配置的方式,或使用系统自动配置的方式。就是在一个OSPF网络中的唯一身份证。
度量值:OSPF使用Cost(开销)作为路由的度量值。概况地说,一条OSPF路由的Cost值可以理解为是从目的网段到本路由器沿途所有入接口的Cost值累加。
OSPF协议报文类型
OSPF有五种类型的协议报文。这些报文在OSPF路由器之间交互中起不同的作用。
Hello报文用来确定邻居存活,DD报文用来描述自己的数据库,LSR请求别人的数据,LSU发送端,LS ACK相当于回复"收到"。
OSPF的三大表项
OSPF有三张重要的表项,OSPF邻居表、LSDB表和OSPF路由表。
OSPF邻居表
对于OSPF的邻居表,需要了解:
OSPF在传递链路状态信息之前,需先建立OSPF邻居关系。
OSPF的邻居关系通过交互Hello报文建立。
OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer查看。
OSPF首先要建立邻居才能进行链路状态信息的传递,就像谈恋爱先确定关系才能继续发展约会。
LSDB表项
存储LSA(Link State Advertisement,链路状态通告)信息。就是正式确定关系之后可以互相交互对方的信息了,姓名、年龄、家庭住址什么的了,这些存储在LSDB表项中。
LSDB会保存自己产生的及从邻居收到的LSA信息,本例中R1的LSDB包含了三条LSA。
Type标识LSA的类型,AdvRouter标识发送LSA的路由器。
使用命令行display ospf lsdb查看LSDB表。
OSPF路由表
对于OSPF的路由表,需要了解:
OSPF路由表和全局路由器路由表是两张不同的表项。OSPF是通过OSPF协议生成的表项,全局路由表是最优的路由表项。
OSPF路由表包含Destination、Cost和NextHop等指导转发的信息。
使用命令display ospf routing查看OSPF路由表。
OSPF工作原理
链路状态路由协议的工作原理
LSA链路状态通告,可以简单的理解为每台路由器都产生一个描述自己直连接口状态(包括接口的开销、与邻居路由器之间的关系等)的通告。
每个OSPF路由接收LSA组成自己的LSDB数据库。
每台路由器基于LSDB,使用SPF(Shortest Path First,最短路径优先)算法进行计算。每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这棵“树”,路由器就已经知道了到达网络各个角落的优选路径。
最后,路由器将计算出来的优选路径,加载进自己的路由表(Routing Table)。
OSPF邻接关系与邻居关系
OSPF路由器之间的关系有两个重要的概念,邻居关系和邻接关系。先有邻居,然后在邻居关系上建立邻接关系,类似你搬到一个地方就有邻居了,然后你们互相走动熟悉了有接触关系了才是邻接关系。
双方互联接口上激活OSPF,路由器开始发送及侦听Hello报文。在通过Hello报文发现彼此后,这两台路由器便形成了邻居关系。邻居关系的建立只是一个开始,后续会进行一系列的报文交互,例如前文提到的DD、LSR、LSU和LS ACK等。当两台路由器LSDB同步完成,并开始独立计算路由时,这两台路由器形成了邻接关系。
邻接关系建立过程:
OSPF邻接状态:
在下一个阶段还会继续深入了解OSPF,这个阶段先学习基础,完成单区域配置实现路由通信。
OSPF网络类型
一般情况下双方接口网络类型需要一致,否则无法建立邻居关系。
OSPF网络类型有以下几种:
Broadcast:广播式多路访问
NBMA:非广播式多路访问
P2MP:点到多点
P2P:点对点
一般情况下是Broadcast,如果发现地址、链路、ospf配置都正常但是无法建立邻居就有可能是网络类型不一致,以后会继续深入学习。
DR与BDR
以太网(Ethernet)是一种典型的广播型多路访问网络。在MA网络中,如果每台OSPF路由器都与其他的所有路由器建立OSPF邻接关系,便会导致网络中存在过多的OSPF邻接关系,增加设备负担,也增加了网络中泛洪的OSPF报文数量。当拓扑出现变更,网络中的LSA泛洪可能会造成带宽的浪费和设备资源的损耗。
OSPF指定了三种OSPF路由器身份,DR(Designated Router,指定路由器)、BDR(Backup Designated Router,备用指定路由器)和DRother路由器。
只允许DR、BDR与其他OSPF路由器建立邻接关系。
DRother之间不会建立全毗邻的OSPF邻接关系,双方停滞在2-way状态。
BDR会监控DR的状态,并在当前DR发生故障时接替其角色。
就是如果10个人互相建立邻接关系太消耗资源了,指定了一个组长和副组长,只有两位组长可以和其它成员建立邻接关系,减少资源占用。
OSPF区域
OSPF域(Domain):一系列使用相同策略的连续OSPF网络设备所构成的网络。
OSPF路由器在同一个区域(Area)内网络中泛洪LSA。为了确保每台路由器都拥有对网络拓扑的一致认知,LSDB需要在区域内进行同步。
如果OSPF域仅有一个区域,随着网络规模越来越大,OSPF路由器的数量越来越多,这将导致诸多问题:
LSDB越来越庞大,同时导致OSPF路由表规模增加。路由器资源消耗多,设备性能下降,影响数据转发。
基于庞大的LSDB进行路由计算变得困难。
当网络拓扑变更时,LSA全域泛洪和全网SPF重计算带来巨大负担。
因此出现了多区域概念。现在基础阶段只需要知道单区域配置即可。
OSPF路由器角色
OSPF进行多区域划分之后相应的也产生了不同的路由器角色了。
OSPF路由器根据其位置或功能不同,有这样几种类型:
区域内路由器(Internal Router)
区域边界路由器ABR(Area Border Router)
骨干路由器(Backbone Router)
自治系统边界路由器ASBR(AS Boundary Router)
OSPF基础配置
OSPF基础配置简介:
步骤概述:
规划网络
启动OSPF进程并进入OSPF视图
配置区域,OSPF支持多区域,现在只使用单区域0
通告运行ospf的接口的网段,使用网段和反掩码
# (系统视图)创建并运行OSPF进程,配置进程ID和Router-id,如果不知道路由器ID则系统自动生成,之前讲过路由器ID是OSPF中的唯一标识,建议提前规划,格式与IP地址一样:如1.1.1.1、12.1.1.1
[Huawei] ospf [ process-id | router-id router-id ]
# 创建并进入OSPF区域,区域0是OSPF中最核心的区域,区域ID可以是数字也可以是点分十进制
[Huawei-ospf-1]area 0
# 指定运行OSPF的接口,通告自己运行OSPF协议的接口
# network命令用来指定运行OSPF协议的接口和接口所属的区域。network-address为接口所在的网段地址。
# wildcard-mask为IP地址的反码,相当于将IP地址的掩码反转(0变1,1变0),例如0.0.0.255表示掩码长度24 bit。
[Huawei-ospf-1-area-0.0.0.0] network network-address wildcard-mask
# 配置OSPF接口开销(可选),cost取值范围是1~65535
[Huawei-GE1/0/1] ospf cost cost
# 设置OSPF带宽参考值
[Huawei-ospf-1] bandwidth-reference value
# 设置接口在选举DR时的优先级,priority值越大,优先级越高,取值范围是0~255。
[Huawei-GigabitEthernet0/0/0] ospf dr-priority priority
今日总结
路由有静态路由和动态路由,静态路由需要管理员手动配置不够灵活,动态路由有灵活自行择优选路等特点。动态路由有两类:距离矢量路由协议(RIP)和链路状态路由协议(OSPF、ISI)。OSPF是一种链路状态路由协议,通过在OSPF区域内交互LSA实现LSDB同步获取路由信息,需要先建立邻居关系,然后交互DD报文等然后形成邻接关系才能开始交互LSA,OSPF支持多区域,为了减少邻接关系大量占用资源产生了DR和BDR两个组长和其它成员建立关系,通过OSPF的多区域设计可以实现灵活、动态、大规模的网络架构,后面还会继续深入学习。