前言
- 路由器根据路由表转发数据包,路由表项可通过手动配置和动态路由协议生成
- 静态路由比动态路由使用更少的带宽,并且不占用CPU资源来计算和分析路由更新。当网络结合比较简单时,只需要配置静态路由就可以使网络正常工作。但是当网络发生故障或者拓扑发生变化后,静态路由不会自动更新,必须手动重新配置
- 相比于静态路由,动态路由协议具有更强的可扩展性,具备更强的应变能力
- OSPF(Open Shortest Path First,开放最短路径优先)具有扩展性强,收敛速度快等特点,作为优秀的内部网关协议被广泛使用。
动态路由协议的分类
按工作区域分类:
IGP(Interior Gateway Protocols,内部网关协议)
EGP(Exterior Gateway Protocols,外部网关协议)
按工作机制及算法分类:
RIP(Distance Vector Routing Protocols,距离矢量路由协议)
OSPF、IS-IS (Link-State Routing Protocols,链路状态路由协议)
距离矢量路由协议
- 运行距离矢量路由协议的路由器周期性地泛洪自己的路由表。通过路由是交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中,然后再通告给其他相邻路由器。
- 相对网络中的所有路由器而言,路由器并不清楚网络的拓扑,只是简单的知道要去往某个目的网段方向在哪里,开销有多大。
链路状态路由协议-LSA泛洪
- 链路状态路由协议通告的是链路状态而不是路由信息
- 运行链路状态路由协议的路由器之间首先会建立邻居关系,然后彼此之间开始交互LSA(Link State Advertisement,链路状态通告)
OSPF概述
OSPF是IETF定义的一种基于链路状态的内部网关路由协议。目前针对IPv4协议使用的是OSPF Version 2;针对IPv6协议使用OSPF Version 3。
OSPF的优点:
- 基于SPF算法,以“累计链路开销”作为选路参考值
- 采用组播形式收发部分协议报文
- 支持区域划分
- 支持对等价路由进行负载分担
- 支持报文认证
OSPF应用场景
大型企业网络中通常部署OSPF实现各个楼宇的网络之间的路由可达。
核心和汇聚层部署在OSPF骨干区域
接入和汇聚层部署在OSPF非骨干区域
(骨干区域是area 0,其余的都是非骨干区域。所有的非骨干区域直接和骨干区域相连接,而非骨干区域之间是不可以相连的)
Router ID
Router ID用于在自治系统中唯一标识一台运行OSPF的路由器,它是一个32位的无符号整数。
Router ID选举规则如下:
- 手动配置OSPF路由器的Router ID(建议手动配置)
- 如果没有手动配置Router ID,则路由器使用Loopback接口中最大的IP地址作为Router ID
- 如果没有配置Loopback接口,则路由器使用物理接口中最大的IP地址作为Router ID
区域
- OSPF Area用于标识一个OSPF的区域
- 区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识
- OSPF的区域ID是一个32bit的非负整数,按点分十进制的形式呈现,例如Area 0.0.0.1.但是为了简便起见,我们也会采用十进制的形式来表示。
度量值
- OSPF使用Cost(开销)作为路由的度量值,每一个激活了OSPF的接口都会维护一个接口Cost值,缺省的接口Cost=(100Mbit/s)/接口带宽。其中100Mbit/s为OSPF指定的缺省参考值,该值是可配置的(修改的时候需要全网的路由器都修改成一样的)
- OSPF以“累计cost”为开销值,也就是流量从源网络到目的网络所经过所有路由器的出接口的cost总和。
(路由器默认的Cost值为1)
邻居表
邻居表对于OSPF来说是非常重要的
- OSPF在传递链路状态信息之前,需先建立OSPF邻居关系
- OSPF的邻居关系通过交互Hello报文建立
- OSPF邻居表显示了OSPF路由器之间是邻居状态,使用display ospf peer查看
OSPF报文格式和类型
1.OSPF一共定义了5种报文,不同类型的OSPF报文有相同的头部格式
2.OSPF报文一直采用IP封装,在报文的IP头部中,协议号为89
OSPF工作过程
建立邻居关系
建立邻接关系
(先建立邻居关系再建立邻接关系)
建立邻居关系
1.OSPF使用Hello报文发现和建立邻居关系
2.在以太网链路上,缺省时,OSPF采用组播的形式发送Hello报文(目的地址224.0.0.5)
3.OSPF Hello报文中包含了路由器的Router ID、邻居列表等信息
在建立邻居关系的时候路由器的邻居状态:
Down——>Init——>2way
Down:这是邻居的初始状态,表示没有从邻居收到任何信息
Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中
2way:在此状态下,路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中
DR与BDR
作用
在MA(多点接入)网络中存在一个这样的问题:
在存在多个路由器中的网络中,需要每个路由器都要与其他的路由器之间建立邻接关系,此时在网络中需要建立n*(n-1)/2个邻接关系,管理复杂,并且重复的LSA泛洪,造成资源浪费。
解决上述问题的方法是在MA(多点接入)网络中选举出DR
DR(Designated Router,指定路由器)负责在MA网络建立和维护邻接关系并负责LSA的同步。
DR与其他所有路由器形成邻接关系并交换链路状态信息,其他路由器之间不直接交换链路状态信息
(当DR建立和维护邻接关系后,会发送一个组播地址224.0.0.5,把建立的邻接关系的一个数据库发出来,此时其他的所有路由器都可以收到)
为了规避单点故障风险,通过选举BDR(Backup Designated Router,备份指定路由器),在DR失效时快速接管DR的工作。
(在一个网络中不管有几个节点,都会选DR和BDR)
选举规则
- DR、BDR的选举是非抢占式的(只要这个路由器是DR了后,就算其他的路由器后面把优先级变的比这个路由器大时,这个路由器依然还是DR。除非这个路由器失效,才会改变,BDR变为DR)
- DR、BDR的选举是基于接口的(接口的DR优先级越打越优先。 接口的DR优先级相等时,Router ID越大越优先)