OSPF协议
1. 协议特性
OSPF定义:
OSPF(Open Shortest Path First,开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。采用SPF算法进行路径计算,属于链路状态协议。
特征:
- OSI的层次——传输层协议,基于IP协议,协议号89。
- 运行特征——链路状态协议。
- 运行范围——内部网关协议(Interior Gateway Protocol)
- 有无类——无类路由协议。
- 最佳路径——管理距离(110);度量值(cost)=100M/带宽(m)。
- 分层——通过骨干区域(0区域)和非骨干区域(非0区域)进行分层。可以防止路由环路。
2. 基本概述
2.1 常见的五种数据包
- Hello——功能:用于建立和维持邻居关系。每10s相互发送Hello包,若40s内没有发送,则邻居关系删除。
- DBD(Database Description)——功能:用于对OSPF的网络拓扑进行描述。
- LSR(Link State Request)——功能:用于请求对方的路由信息。
- LSU(Link State Update)——功能:用于存储和传递路由信息。
- LSack——功能:用于对LSU等包进行可靠确认。
建立邻居时使用的是hello包,在hello包里面有一些重要的字段:
- hello时间间隔和死亡时间间隔:在多路访问网络中(以太网)10s和40s
- 认证字段:ospf认证,要求认证的类型和认证的数据(密码)是一样的
- area字段:区域号(需要建立邻居的两个路由器的接口必须在同一个区域中)
- STUB标识(末节标识):特殊区域的标识(区域分为:骨干区域、普通区域、特殊区域)
以上四个字段是建立邻居的四个条件。
2.2 建立邻居过程
-
Down:两边都处于“沉默”状态; -
Init:一边开始发送hello分组; -
2way:两边相互发送hello分组,并且处于“邻居状态”,形成邻居关系后要进行DR/BDR选举; -
Exstart:在执行Master/Slave选举; -
Exchange:交换DBD分组; -
Loading:相互加载对方链路状态信息; -
Full:表示数据库达到一致,此时处于"邻接状态". 【邻居状态+链路状态交互==>邻接状态】
2.3 DR/BDR选举
指定路由器 (designated router,DR) ——作用:描述多路访问网络及与该网络相连的其他路由器。DR只是接口概念,每个网段都会选举DR。 备份路由器(backup designated router,BDR)——作用:当指定路由器无法正常工作时,备份路由器充当指定路由器
选举DR/BDR的作用是为了减少邻接数目,减小链路消耗。
DR/BDR的选举规则:
- 比较优先级,越大越优(默认为1,最大255,0表示不参加选举);
- 比较Router-ID,越大越优。
DR/BDR特征:
- 不抢占DR,DR正常工作时,即使有新的优先级更高的路由器出现,也不能抢占成为DR;
- DR正常工作时,BDR只监听,转发LSA和同步LSBD的任务由DR完成;
- DR只是接口概念,每个网段都会选举DR;不同网段之间分别选举DR/BDR;
- DRother和DR建立邻接关系,和BDR建立邻居关系。
DR/BDR地址:
- DR/BDR对外发送路由条目,以224.0.0.5发送;
- DRother对外发送路由条目,以224.0.0.6发送。
2.4 六种LSA类型
OSPF的6种LSA:
LSA种类 | 传播范围 | ADV router | 内容 |
---|
1型(Router-LSA) | 本区域内 | 区域内每台路由器 | 包含本路由器的直连的邻居,以及直连接口的信息 | 2型(network LSA) | 本区域内 | DR | 标识出本MA网中有哪些路由器以及本网的掩码信息 | 3型(summary LSA) | 整个OSPF区域 | 由ABR发出,每穿越一个ABR,其ADV Router就会变成此ABR的Router-id | 包含本区域中的路由信息,包括网络号和掩码 | 4型(Summary ASBR LSA) | 整个OSPF区域 | 由ABR产生并发出,穿越一个ABR,其ADV Router就会变成此ABR的Router-id | 把ASBR的Router-id传播到其他区域,让其他区域的ABR路由器得知ASBR的位置 | 5型(Type-5 AS External Link States) | 整个OSPF区域 | ASBR产生,泛洪到整个AS。不会改变ADV Router | 域外路由条目,包括网络号和掩码,不属于某个区域 | 7型(Type-7 AS External LSA) | 只存在于NSSA网络中 | ASBR | 域外路由 |
注:①2型LSA只在MA网络中存在;
②5型LSA由重分发产生;
③7型LSA只在NSSA网络中存在。
可以使用命令dispaly ospf lsdb 来查看OSPF的链路状态数据库信息。
2.5 区域划分
OSPF中的常规区域:
- 骨干区域——通常以
area 0 。 - 非骨干区域——除
area 0 以外的区域,非骨干区域之间交换数据需要通过骨干区域进行。
OSPF中的特殊区域:
- 脱节区域(不连续区域)——指某一非骨干区域并未与骨干区域相连,因此无法与其他区域进行数据交换。
- Stub区域——STUB区域是一个末梢区域,当一个OSPF区域处于整个自治系统边界时,而又不含其他路由协议,这时就可以配置为Stub区域。禁止4,5,7类型的LSA。
- totally stub区域——完全末梢区域,不但具有末梢区域的功能且一个完全末梢区域的ABR(边界路由)将不仅阻塞外部的LSA,而是阻塞所有的汇总LSA,除了通告默认路由的那一条类型3的LSA。
- NSSA(not-so-stub area)——允许外部路由通告到ospf自治系统内部,而同时保留自治系统其余部分的末梢区域部分。NSSA区域的边界ABR会将LSA7转成LSA5,传播到其他区域。
- Totally NSSA——cisco私有特性,能阻止LSA3/4/5,并且由ABR产生LSA3默认路由传播到NSSA其他路由器。
解决脱节区域的办法:
- 设置虚链路(virtual-link):虚连接是指在两台ABR之间,穿过一个非骨干区域(转换区域——Transit Area),建立的一条逻辑上的连接通道,可以理解为两台ABR之间存在一个点对点的连接。配置如下。
- 隧道(tunnel)
- 单点双向重发布
模拟脱节区域案例: 从上图中,R1的路由信息可知,R1只学习到了23.1.1.0网段,并未学习到34.1.1.0网段,因为area0和area2存在脱节。
- 使用虚链路解决区域0和区域2脱节问题:通过在转换区域的ospf配置模式下,使用命令
Area 穿越的区域 virtual-link 对方RID 即可。
在R2中配置如下。
R2(config-router)
在R3中配置如下。
R3(config-router)
等待若干秒后,再次查看路由信息,发现新增了34.1.1.0网段。 如果骨干区域做了区域认证,又使用了虚链路,那就必须部署虚链路认证。方法是在设置虚链路时在后面加上认证命令:area 穿越的区域 virtual-link 对方RIP authentication message-digest 、area 穿越的区域 virtual-link 对方RIP message-digest-key 1md5 123 。设置完后可以使用命令clear ip ospf process 清空ospf进程。 两台设置了虚链路的路由器都要做配置,下面只演示R2。
R2(config-router)
R2(config-router)
- 使用隧道技术:
通用路由封装(GRE: Generic Routing Encapsulation)是通用路由封装协议,可以对某些网络层协议的数据报进行封装,使这些被封装的数据报能够在IPv4网络中传输。 在R2进行配置如下。
R2(config)
R2(config-if)
R2(config-if)
R2(config-if)
R2(config)
R2(config-router)
在R3进行配置如下。
R3(config)
R3(config-if)
R3(config-if)
R3(config-if)
R3(config)
R3(config-router)
- 使用单点双向重发布技术:
在R3上起不同的OSPF进程,然后进行OSPF的双向重发布。
R3(config-router)
R3(config-router)
R3(config-router)
R3(config-router)
R3(config-router)
R3(config-router)
R3(config-router)
3. 防环机制
OSPF通过以下两种方式防止环路:
- 分层设计:分为骨干区域和非骨干区域。
- SPF算法:算法计算出来的路由100%无环。
4. 配置方法
5.路由认证
5.1 链路明文认证
R1(config)
R1(config-if)
R1(config-if)
R1(config-if)
5.2 链路密文认证
R2(config)
R2(config-if)
R2(config-if)
R2(config-if)
5.3 区域认证
注:区域认证需在该区域所有的路由上都做
R2(config)
R2(config-router)
//接着需要进入每一个区域0的接口开启密文认证,以下以f0/0实例
R2(config-router)
R2(config-if)
|