一.OSPF的概述
1.OSPF全称是(open shortest path first)开放式最短路径优先,顾名思义:开放式表示免费,最短路径优先表示优选最短无环的路由。
2.在常见的IGP(Interior Gateway Protocol,内部网关协议)中RIP(routing information protocol(路由信息协议))是最早的一批动态路由协议,它是一种距离矢量(矢量:有大小、方向的物理量)路由协议。但是它的最大跳数为16注定了它不能成为大型网络的动态路由协议奠定了基础。
3.思科私有的IGRP和EIGRP协议以及后面出现的公有的OSPF协议,加速了RIP协议的淘汰。
4.OSPF不同于RIP,OSPF是一种基于接口的链路状态路由协议。OSPF使用的端口号是89,而RIP使用的端口号是520.
#所谓端口号是表示一台计算机中的特定进程所提供的服务。服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了更好的区分端口,则对其进行排序编号,即所谓的端口号。 --来源知乎
5.OSPF使用SPF算法来计算最短路径树,RIP使用(Distance-Vector)算法来计算路由。一个是在所有邻居的关系中以自己为中心计算最短的路径树;一个是接收邻居传送来的路由。
二.OSPF的网络、接口和链路类型
1.网络类型
1.1 广播型网络
多路访问网络,如以太网,需要DR和BDR的选举,不用手动指邻居
通常以组播发送HELLO报文,LSU报文,和LSACK报文,以单播形式发送DD和LSR报文
DR和BDR给非指定路由器发送消息使用的是组播224.0.0.5
非指定路由器给DR和BDR发送消息使用的是组播224.0.0.6
1.2 NBMA(非广播型网络)
连接的路由器超过两台但是没有广播功能,在帧中继网络和ATM网络中使用
所有数据包均单播发送,有DR/BDR的选举,需要手动指定邻居
1.3 P2P网络
将一对路由器连接起来的网络,使用的是PPP HDLC协议
使用组播224.0.0.5来发送各种数据包
没有DR/BDR的选举,直接形成full邻接关系,不用手动指邻居
1.4 P2MP网络
Hello包以组播形式发送,其他类型数据包由单播发送
不选举DR,不用手动指邻居
2.接口类型
2.1 brocast
以太网默认是广播类型接口
2.2 P2P
P2P网络默认是P2P类型接口
2.3 loopback
环回口默认是loopback类型接口(不会向该接口发送HELLO报文)
2.4 point-to-multicast
非广播网络中默认是该类型接口
3.链路类型
3.1 Transit
描述一个从本路由器到一个Trans网段(例如MA网段或者NBMA网段)的链接,属于拓扑信息。
3.2 Stub
描述一个从本路由器到一个Stub网段(例如Loopback接口)的链接,属于路由信息。
3.3 Point-to-Point
描述一个从本路由器到邻居路由器之间的点到点链接,属于拓扑信息。
3.4 Virtual
虚链路,拓扑信息
4.三者的关系
网络类型决定接口类型,接口类型决定链路类型!!!
三.OSPF的三张表
#对于OSPF的来说,它的工作过程大概分为三大部分:建立邻居、同步LSDB、加表。
首先我们来说一下这个建立邻居:
1.对于OSPF来说,想要交换LSA来同步LSDB的话,需要先建立邻居关系
2.以该图为例,建立OSPF邻居关系:
R1和R2想要建立ospf的邻居关系,以广播网络类型为例:
ospf的邻居状态一共有7种,分别是:down、init、two-way、exstart、exchange、loading、full。
2.1 首先ospf的初始化状态是down,该状态下表示没有收到邻居发来的224.0.0.5的hello组播报文
2.2 R1在down状态下,发送一个组播hello报文,ospfhello报文头部里面包含有自己的router-id、area等信息
2.3 R2收到R1发来的ospfhello组播报文后,因为自己也运行了OSPF协议,所以会接收该报文,并查看里面有没有包含自己的router-id,没有就将邻居关系置位init状态(该状态表示收到邻居的hello报文,但是里面没有包含自己的router-id)
2.4 R2将收到的hello报文重新封装,里面的source OSPF Router变为自己的2.2.2.2 然后将邻居的router-id 1.1.1.1 封装在active neighbor里面表示我收到了你的hello报文,现在给你回个信息。
2.5 R1收到的R2回复的hello报文,查看报文后,发现里面包含自己的router-id,于是将邻居关系置位two-way状态,并重复2.4中R2的操作。
2.6 R2收到R1的hello报文后,查看报文,发现里面包含自己的router-id,将邻居关系置位two-way状态。 --至此双向two-way状态建立完成。
状态图简化版如下:
3.交互LSA,同步LSDB:
3.1 因为是广播网络类型。需要选举DR和BDR,所以在two-way状态下停留40s选举DR和BDR。在40s结束后,如果brocast网络中hello报文中没有包含DR和BDR的的信息,
就会开始选举DR和BDR,这个选举过程简化如下:
首先所有同一广播网络下的OSPF路由器都是DRother,在DRother中先选举BDR,然后推举BDR为DR,然后重新选举BDR。
--为什么要先选举BDR:这是为了防止某些特殊情况下ospf进程卡死、所有状态无法切换。 --来源百度
3.2 选举完DR和BDR后,路由器状态置位exstart状态,在该状态下选举主从关系,选举主从关系要交互DD报文(不包含LSDB的摘要信息)。
主从的选举的话,比较的是router-id的大小,大的为主 ,小的为从。
报文里面包含:I、M、MS以及DD Sequence(序列号)--从设备使用主设备序列号发送报文,从设备必须对主报文回应,即使主设备发送的是空报文。
3.3 主从选举完成后,路由器状态置位为exchange状态,该状态下交互DD报文(包含LSDB的摘要信息),让路由器知道邻居和自己的LSA有什么不一样,方便后面请求缺少的LSA。
3.4 交互完DD报文后,路由器置位为loading状态。在该状态下,路由器发送LSR报文,请求自己缺少的LSA,对方路由器收到该报文后,会回复LSU报文(里面就是对方所请求的LSA),路由器收到LSU报文后,回复LSAck报文(里面包含LSA的头部信息)表示自己收到了该LSU报文。
以R1为例:
R2回复的LSU报文
R1回复的LSAck报文
3.5 至此,LSDB同步完成,路由器的链路进入full状态。
<R1>display ospf peer brief
OSPF Process 1 with Router ID 1.1.1.1
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet0/0/0 2.2.2.2 Full
----------------------------------------------------------------------------
4.运行SPF算法,将路由加入路由表
4.1 构建SPF树。
根据Router-LSA和Network-LSA中的拓普信息,构建SPF树干。
4.2 计算最优路由。
基于SPF树干和Router-LSA、Network-LSA的路由信息,计算最优路由。
4.3 将最优或者负载分担的路由加入路由表中。
四.OSPF的区域
1.为什么要划分区域以及划分的区域种类?
OSPF的区域本来是只有一个,但是因为当ospf路由器越来越多时,LSDB太过于庞大浪费资源以及当出现路由动荡,会造成大规模的SPF 重新计算,造成路由器负荷过重引发更大规模的网络问题。
划分的区域类型一共有六种:骨干区域、普通区域、STUB区域、完全STUB区域、NSSA区域、完全NSSA区域。
2. 四个特殊区域的作用
2.1 stub(末节)区域:
拒绝4/5类LSA进入该区域,且ABR设备下发默认路由,不允许引入外部路由。
2.2 完全stub区域:
拒绝3/4/5类LSA进入该区域,ABR下发默认路由,不允许引入外部路由。
2.3 nssa(次末节)区域:
拒绝4/5类LSA进入该区域,允许引入外部路由。
引入外部路由时,会产生7类LSA。区域内的路由器需要访问其他区域引入的外部路由时,ABR会产生一条7类缺省LSA,通过该缺省LSA访问其他区域的外部路由。当本区域的外部路由向其他区域泛洪时,会在ABR上进行7转5之后,泛洪发送出去。
2.4 完全nssa区域:
拒绝3/4/5类LSA进入该区域,允许引入外部路由。
当本区域中的路由器需要访问其他区域间路由时,需要通过ABR下发的3类LSA缺省访问其他区域间的路由。当本区域路由器需要访问其他区域的外部路由时,通过ABR下发的7类LSA缺省去访问。
为了防环,做了如下规定:
域内:通过SPF算法(无环)
域间:基于3类LSA防环
ABR不会计算从非骨干区域传来的3类LSA
非骨干区域必须与骨干区域相连
只有ABR(连接了多个区域,且在骨干区域有活跃的邻居和接口)可以传递三类LSA
域外: 5类LSA没有防环机制,4类的防环机制类似于3类(因为也是要去找ASBR)
五.OSPF的路由汇总和路由过滤
一.路由汇总
通过ospf的路由汇总,能够减小路由器的路由表,节约设备资源。
1.路由汇总的场景:
当OSPF域内某台ASBR(自治域边界路由器)设备重分布了大量的路由进入OSPF域内,而这些路由条目又是连续的,可以汇总成几条子网掩码更大的路由条目的时候;当OSPF域内某台ABR学习到大量的路由条目且是连续的,可以汇总成几条子网掩码更大的路由条目时。
2.路由汇总的限制:
ospf路由汇总只能在ABR(区域边界路由器)及ASBR(自治系统边界路由器)上进行。
3.区域间汇总:
[R1-ospf-1]asbr-summary 1.1.1.0 2.2.2.0 ?
cost Set cost --定义一个开销
distribute-delay Set distribute delay --设置发布时延
not-advertise Do not advertise --不通告该汇总路由
tag Set tag ---建立标签
4.域内汇总:
[R1-ospf-1-area-0.0.0.0]abr-summary 3.0.0.0 10.0.0.0 ?
advertise Advertise this summary (default)
cost Set cost
not-advertise Do not advertise this summary
<cr> Please press ENTER to execute command
二.路由过滤
作用: 不将不需要的路由传递给某区域。
方法:
六.OSPF的认证
一.ospf的认证方式有接口和区域认证
2.接口认证优先级大于区域认证
3.当路由器配置了区域认证后,如果在本区域加入了其他路由器希望通过空认证或者接入/使用其他密码接口,就可以在路由器上针对新加入的接口配置基于接口的进行空认证/其他密码认证(也就是接口认证>区域认证)
4.认证信息在OSPF的报文头部,所有OSPF报文都需要进行OSPF认证。
5.认证的目的时为了验证报文来源的合法性,加密是保证数据的机密性。(所以认证≠加密,认证就像你登录需要账号密码,账号密码对了,你就可以登录) --誉天胡桑
二.认证的方式
接口下:
[R1-GigabitEthernet0/0/0]ospf authentication-mode ?
hmac-md5 Use HMAC-MD5 algorithm
keychain Keychain authentication mode
md5 Use MD5 algorithm
null Use null authentication
simple Simple authentication mode
区域中:(区域中没有空认证)
[R1-ospf-1-area-0.0.0.0]authentication-mode ?
hmac-md5 Use HMAC-MD5 algorithm
keychain Keychain authentication mode
md5 Use MD5 algorithm
simple Simple authentication mode
七.OSPF的虚连接
一.vlink的作用
1.用于连接没有和骨干区域直接相连的非骨干区域
2.用于没有骨干区域的场景
3.用于骨干区域分割的场景
4.用于骨干区域的备份
5.用于优化OSPF的路径
二.vlink的特点
1、打破了OSPF设计原则,易出现环路的特点
2、虚链路是一种过渡机制,初期设计规划的时候不应该出现
三.防环规则
1、建立虚连接之后产生的ABR不会向虚链路穿越的区域泛洪骨干网的3类LSA
2、建立虚链路后产生的ABR,将骨干区域的3类LSA泛洪进其他区域时,必须在虚链路穿越的区域也学到这条3 类LSA(如果没有的话,area 2访问area 0时,穿过area 1时,area 1中没有该路由,直接丢弃。)
八.OSPF的高级特性
一.PRC
PRC(Partial Route Calculation,部分路由计算):
基于SPF计算出来的最短路径树,更新计算路由,只有叶子变化时使用,不涉及SPF计算。
在华为设备上,OSPF的PRC功能默认开启。
二.I-SPF
I-SPF(增量最短路径优先计算):
基于SPF改进,该算法只会计算受影响的节点的最短路径,不受影响的结点不计算
三.FRR
FRR(快速重路由):
利用LFA(Loop-Free Alternates)算法预先计算出备份路径,保存在转发表中,以备在故障时将流量快速切换到备份链路上,保证流量不中断,从而达到流量保护的目的,该功能可将故障恢复时间降低到50 ms以内。(提前准备好备份链路和备份路径)
计算公式:
链路保护公式:Distance_opt(N,D)<Distance_opt(N,S)+Distance_opt(S,D)
节点保护公式: Distance_opt(N,D)<Distance_opt(N,E)+Distance_opt(E,D)
四.database overflow
1.限制非缺省外部路由数量,避免数据库超限
2.OSPF网络中所有路由器都必须配置相同的上限值,这样,只要路由器上外部路由的数量达到该上限,路由器 就会进入overflow状态,并同时启动超限状态定时器(默认时间位5s),路由器在5s后自动退出超限状态。
3.Stub路由器也可以实现,当过载之后,一段时间内就不学习和计算非自身直连路由了
--誉天胡桑
九.OSPF与IS-IS的双向引入问题
1. 双向引入的问题在与产生次优路由和环路
2. 环路的产生:
当ospf与is-is双向引入时,在ospf中import的路由消失后,is-is会将该路由重传给ospf,形成环路。
解决方案:
通过route-policy打标签,对发布出去的路由打上标签,对接收到的路由进行标签检查,允许则通过,不允许则丢弃。
3.次优路径:
次优路由是由于ospf与is-is的协议优先级不一致导致的
解决方案:
调整ospf的外部路由学习优先级小于IS-IS。
--个人学习资料,仅供参考
by in 100%丢包率