OSPF基础
动态路由协议的评判标准----收敛速度、选路、占用资源
OSPF特性:
- IGP
- 链路状态型协议
- SPF算法
- 组播224.0.0.5/224.0.0.6
- 10/150
OSPFv2与RIPv2对比
- 相同点
- 无类别路由协议
- 均采用组播通讯
- 均支持等开销负载均衡
- 不同点
- OSPF可以工作在大型网络中
OSPF结构化部署
区域内部传递拓扑信息,区域间传递路由信息。---链路状态型协议的距离矢量特征。
多区域提高了网络的扩展性,有利于组件更大规模的网络。
区域ID(Area-ID):32位bit组成的非负整数,按点分十进制表示。
OSPF多区域划分要求
- OSPF要求域中的所有非骨干区域(区域ID不为0的区域)都必须与骨干区域直接相连。
- 骨干区域不能被分割。
假定没有“所有非骨干区域都必须连接骨干区域”这条规则
OSPF定义了ABR(区域边界路由器)来确保遵循这条规则。----只有真正的ARP设备才可以转发区域间路由信息。
1.至少连接两个区域
2.连接的区域中至少有一个接口连接区域0
3.在区域0中至少有一个活跃的邻居
非骨干区域之间不允许直接相互发布区域间路由信息。----因为非骨干区域之间的边界设备不是ARP。
假定没有“骨干区域不能被分割”
OSPF规定:从非骨干区域收到的路由信息,ABR能接收到不会使用这条路由信息(这条规则,被称为OSPF的区域水平分割机制)。----从一个区域学习到的路由信息,不能再传递回该区域。
总结:
OSPF有如下规定:
1、伪ABR设备不允许转发区域间路由信息
2、对于真实ABR设备
能够将自己直连的非骨干区域的路由信息传递给骨干区域
能够将自己直连的骨干区域路由信息传递给非骨干区域
能够将自己从骨干区域学习到的非骨干区域路由信息传递给直连的非骨干区域。
OSPF路由器角色
- 内部路由器---IR
- 所有接口都接入同一个OSPF区域的路由器
- 区域边界路由器---ABR
- R2、R3
- 骨干路由器----BR
- 接入Area0的路由器
- 自治系统边界路由器---ASBR
- 工作在OSPF自治系统边界的路由器,负责将OSPF域外的路由引入本域。
- 并不是所有运行了多种路由协议的OSPF路由器就一定是ASBR;必须执行了重发布操作的路由器才会被称为ASBR
OSPF数据包
hello包
用来发现、建立并周期保活OSPF邻居关系,通过组播224.0.0.5发送。
10S发送一次用以确认邻居存在。
hold-time----死亡时间----hello-time*4
- Router-ID(RID)---全域唯一,标识路由器身份。IP地址形式 配置方式
- 自动配置默认优选最大环回IP地址,没有环回就选择最大物理IP地址
- 手工配置
在华为设备中,若没有接口IP,则OSPF启动后,RID为0.0.0.0
在思科设备中,若没有接口IP,则OSPF无法启动。
华为标准:状态最先UP的接口的IP地址作为Router id
FRC标准:
1、取loopback接口IP中最大的作为Router id
2、若没有loopback接口,则选择物理接口IP地址中最大的作为Router id
无论采用手工还是自动选取的方式,一旦OSPF确定了RID,则之后不会改变。---重启OSPF进程。
- DBD报文
- 数据库描述报文
- 该报文中携带的是路径信息的摘要。---避免重复更新,减少更新量的一种做法。
- LSR报文
- 链路状态请求报文----用以获取未知的LSA(链路状态通告)信息。
- LSU报文
- 链路状态更新报文
- 携带真实的LSA信息的数据包
- LSAck报文
- 链路状态确认报文
OSPF七种状态机(重点)
- down---关闭-----一旦启动了OSPF协议,则发出hello报文进入下一个状态
- init----初始化----收到的hello报文中存在本地RID值,进入下一个状态
- 2-way----双向通讯----邻居关系建立的标志。---稳定态。
条件匹配:匹配成功则进入下一个状态,匹配失败则停留在邻居状态。
- exstart----预启动----使用未携带信息的DBD报文进行主从关系选举,RID大的为主。
- exchange----准交换-----使用携带目录信息的DBD报文进行目录共享
- loading----加载----邻居间使用LSR/LSU/LSACK报文来获取完整的LSA信息
- full---转发----拓扑交换完成后,根据算法计算出路由进入该状态,标志着邻接关系的建立。---稳定态。
条件匹配
决定了谁给谁传递拓扑信息。
DR、BDR、DRother----接口角色。
- 选举规则
- 优先级,0-255;选择优先级大的为DR设备,默认为1。若优先级为0则代表放弃选举
- 若优先级相同,则比较RID值,越大越优先。
- 选取范围---一个广播域
- 非抢占模式----重选则需要重启OSPF进程。
- 在一个MA网络中,可以没有BDR,但是必须存在DR。
条件匹配的选举过程
- DR、BDR的选举是通过Hello报文实现的,时间发生在2-way状态之后。
- 路由器将自己的接口的DR优先级填写在hello报文的“DR优先级字段”。
- 华为数通产品的接口DR优先级默认1,该参数值可以通过
- [Huawei-GigabitEthernet0/0/0]ospf dr-priority ? INTEGER<0-255> Router priority value DR优先级为0则代表该接口不具备选举DR和BDR的资格。
- 当接口激活OSPF后,设备首先会检查网络上是否已经存在DR,如果存在则接收已经存在的DR设备。否则优先级最大的设备成为DR,若优先级相同,则拥有最大RID的路由器成为DR设备。
- BDR选举过程与DR相同,但是是在DR选举之后进行。
OSPF工作过程
- 启动OSPF配置后,OSPF向本地所有运行了OSPF协议的接口以组播224.0.0.5发出hello报文;hello报文中携带了本地的RID参数以及本地已知的邻居RID值。
- 邻居的RID获取方式:通过接收其他邻居的hello报文来获取本地邻居
- 建立邻居关系,并生成邻居表。
- 邻居关系建立后,进行条件匹配;匹配失败则停留在邻居关系,即2-way状态,仅使用hello报文保活。该状态为稳定态。
- 匹配成功的邻居开始建立邻接关系。
- 首先使用未携带数据的DBD报文进行主从关系选举,之后使用携带信息的DBD报文来共享数据库目录;
- 然后本地通过对方共享的目录信息与本地数据库进行对比,通过使用LSR报文请求未知的LSA信息。
- 对端使用LSU报文回复完整LSA信息
- 本端使用LSAck报文确认回复。
- 当本地接收到所有的未知LSA信息后,将信息存放在LSDB中。
- 之后基于本地数据库生成有向图和最短路径树。
- 根据最短路径树计算本地到达拓扑中所有未知网段的最短路径,并将其加入到OSPF路由表中。
- 从OSPF路由表中选择最优路由加载入本地全局路由表。
- 收敛完成后,hello报文周期保活。每30min进行一次周期链路刷新。
结构突变
- 新增网段-----直接使用LSU报文告知邻居,邻居使用ACK进行确认。
- 断开网段-----直接使用LSU报文告知邻居,邻居使用ACK进行确认。
- 无法沟通-----dead time----4*hello time,状态为down,删除信息。
OSPF基本配置
- 启动OSPF协议
- [r1]ospf 1 router-id 1.1.1.1
- 创建区域
- [r1-ospf-1]area 0
- 宣告
- [r1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0 ----精准宣告
- [r1-ospf-1-area-0.0.0.0]network 12.0.0.0 0.0.0.255 ----范围宣告
反掩码:32位二进制,点分十进制表示;由连续的0和连续的1组成;其中0表示IP对应位不变,1代表IP对应位可变。
bandwidth-reference ?-------修改参考带宽
the reference bandwidth (Mbits/s)
一条OSPF路径的cost等于从目的地到本地路由器沿途的所有入接口cost的总和。
OSPF报文格式
OSPF协议号---89
OSPF报文头部
24字节
版本---恒为2
- 类型----描述OSPF数据包类型 hello---1
- dbd-----2
- lsr------3
- lsu----4
- lsack----5
- 报文长度
- 路由器ID----RID
- 区域ID---发出该报文的接口所属区域的ID值。
- 校验和----完整数据包
- 验证类型
- 指示该数据报文使用的认证类型
- 不认证--0;简单认证---1;MD5认证---2。
- 验证数据
- 用于报文认证的内容
- 若认证类型为不认证,则该字段全为0;
Hello包
抓包内容
- 网络掩码
- 两台OSPF路由器如果通过以太网接口直连,那么双方的直连接口必须配置相同的网络掩码。
- 如果一方在接口上收到的hello报文中,网络掩码字段与本地接口配置的掩码不同,则该路由器忽略该hello报文,此时邻居关系无法建立。
- 注意:只有在华为设备中会检查网络掩码信息。
- Hello间隔
- 如果两台路由器的hello时间间隔不同,则不会建立邻居关系。
- 在Broadcast类型和P2P网络类型中hello时间间隔为10S;而在NBMA或P2MP网络类型中,Hello时间为30S。
- 可选项
- 有8个标记位,每一个标记位为1,则代表其符合OSPF的某种特性。
- 特殊区域标记。
- 路由器优先级
- 用于选举DR和BDR。
- 路由器失效时间
- 两台设备建立OSPF邻居需要确保死亡时间相同。
- 默认情况下是hello间隔的4倍。
- 若修改hello时间,则死亡时间随之改变;若修改死亡时间,则hello时间不变。
- 指定路由器---DR
- 该参数为网络中DR的接口IP地址。
- 若没有选举出DR,则使用0.0.0.0来占位
- 备份指定路由器---BDR
- 该参数为网络中DR的接口IP地址。
- 若没有选举出BDR,则使用0.0.0.0来占位
- 邻居
- 在直连链路上发现的有效邻居,此处填充的是邻居的RID值。
所有224.0.0.X格式的组播地址称为本地链路组播地址,目标IP是本地链路组播的数据包的TTL值被设定为1。所有本地链路组播都存在对应的组播MAC地址,01-00-5e-0后23位,后23位为组播IP地址的后23位。
限制邻居关系建立的参数
hello时间
[r1-GigabitEthernet0/0/0]ospf timer hello 20
双方经过死亡时间后,状态发生改变。
dead时间
[r1-GigabitEthernet0/0/0]ospf timer dead 80
结果与修改hello时间一致。
认证
[r2-GigabitEthernet0/0/0]ospf authentication-mode simple plain 123456 ----接口认证
[r2-ospf-1-area-0.0.0.0]authentication-mode simple plain 123456 ----区域认证
可选项
与修改掩码信息结果相同。
DBD包
- 使用未携带数据的DBD报文进行主从关系选举
- 使用携带数据的DBD报文进行拓扑目录共享
- 使用未携带数据的DBD报文进行确认
接口最大传输单元----MTU
- 在华为AR系列路由器上,该参数值默认为0。
- 该字段是用于进行OSPF的MTU检测,而华为默认不开启MTU检测机制。
- [r1-GigabitEthernet0/0/0]ospf mtu-enable ----开启OSPF的MTU检测机制
[r2-GigabitEthernet0/0/0]mtu ? ----修改MTU参数
<46-1600> MTU value
LSR包
链路状态类型、链路状态ID、通告路由器----LSA的三元组信息。---通过这三个参数可以唯一标识出一条LSA信息。
- 如果设备两端开启了OSPF的MTU检测机制,则进行MTU检测,若双方的MTU参数相同,则正常进行邻接关系建立。若不同,则双方卡在exstart状态。
- 可选项---与Hello报文内容中的可选项字段一致。
- I------主从关系选举
- 如果该为为1,则代表该数据报文是用于进行主从关系选举。且此时的数据包中不会携带真实的数据库目录信息。
- M
- 若为1,则代表后续还存在DD报文
- 若为0,则代表后续没有DD报文
- MS----代表是否为主设备
- 若为1,则代表本设备为Master设备
- 若为0,则代表本设备为Slave设备
- DD序列号
- 用于确保DD报文传输的有序性和可靠性。
- 在DD报文交互的过程中,DD序列号被逐次加1。且DD序列号必须由Master路由器来决定,而Slave路由器只能使用Master路由器发送的DD序列号来发送自己的DD报文。
- 隐形确认机制----通过对方发送的数据包中的DD序列号,起到确认的效果。
- 而主从关系选举就是为了完成隐形确认。
LSU包
LSAck包
完成显式确认机制。
OSPF的接口网络类型
P2P----P2MP
MA
BMA
NBMA
OSPF的接口网络类型,实际上是说OSPF的接口在某种网络类型下的一种工作方式或特征。
网络类型 | OSPF接口工作方式--接口类型 |
BMA | Broadcast,可以建立多个邻居关系,需要进行DR和BDR的选举,hello 10S,dead 40S。 |
P2P | P2P,只能建立一个邻居关系,不需要进行DR和BDR选举,Hello 10S;dead 40S |
环回接口(虚拟接口) | 华为定义为P2P,但是实际上无数据转发。环回接口默认学习32位主机路由。不需要进行DR和BDR选举。hello 10S;dead 40S。 |
P2MP,可以建立多个邻居,不需要DR选举,hello 30S;dead 120S。会学习邻居的接口主机路由。 | |
NBMA | NBMA,可以建立多个邻居,需要DR选举,hello 30S;dead 120S。无法自动建立邻居关系。 |
Vlink | Vlink,只能建立一个邻居,不需要DR选举,Hello 10S;dead 40S。以单播形式发送hello报文。 |
广播型多路访问类型---BMA
[r3]display ospf interface GigabitEthernet 0/0/0 ---查看OSPF网络接口类型
OSPF在BMA类型的接口上通常以组播的方式发送hello报文、LSU及LSACK报文;以单播的形式发送DD报文和LSR报文。
点到点类型---P2P
OSPF在网络类型为P2P的接口上以组播的方式发送所有数据报文。----不以单播形式发送的原因在于点到点网络可以不需要IP地址。
OSPF在点到点网络中不会选举DR和BDR。
开销值----在华为设备中,P2P网络的参考实际带宽默认为2.048(E1标准)
环回接口
[r1-LoopBack0]ospf network-type broadcast ---修改接口网络类型为broadcast
开销值恒定为0,这样的结果就是修改参考带宽不会影响到环回接口的开销值。
type----华为使用P2P来填充,而cisco使用loopback填充。
所有通过OSPF学习到的环回接口的路由掩码都是32位,因为该接口是一个模拟的接口,实际没有连接用户,所以并没有其他IP地址存在与该接口之下,只有一个可用IP。----如果使用其他掩码,可能会导致环路或者路由黑洞。
witing----该字段代表正在进行条件匹配,当该计时器超时后,接口会认为自己为DR设备,且将接口的状态切换为exstart状态。
华为将tunnel接口的传输速率定为了64Kbps。
Hub节点此时属于P2P类型,只能建立一个邻居,无法建立多个邻居,故修改Tunnel接口的网络类型为Broadcast类型。
不同的网络类型,可以建立邻居关系,但是可能会造成不同的问题。故修改接口网络类型时,全网保持一致。
如果链路两端,一端需要选举DR,另一端不需要,可能会成功建立full状态,也可能有一个卡在exstart或2-way状态。
让分支节点放弃DR选举,在MGRE环境下,hub节点必须成为DR设备。否则网络路由信息无法学习全面。必须修改分支节点的接口优先级为0。
点到多点类型---P2MP
只能手工修改。
[r7-Tunnel0/0/0]ospf network-type p2mp
在P2MP环境下,设备会学习所有邻居的接口IP地址,形成主机路由。
在P2MP环境下,只有hello报文是以组播形式发送,其他所有报文以单播形式发送数据。
非广播型多路访问类型----NBMA
在NBMA网络中,所有数据包以单播数据通讯。
在NBMA网络中,所有的OSPF路由器都需要使用peer命令单播指定邻居,该命令是双向的。
OSPF的不规则区域划分
- 非骨干区域必须与区域0直接相连
- 骨干区域不能被分割
不规则区域
- 远离骨干的非骨干区域
- 不连续骨干区域
根本解决方案:对OSPF网络重新规划与配置,满足OSPF区域划分规则。
使用tunnel隧道
使用vpn隧道解决不规则区域的问题
- 可能产生选路不佳。
- 造成重复更新。
- 资源消耗
这种方法问题太多,所以在工程中几乎见不到。仅作了解。
Vlink---虚链路
vlink是专门为了解决OSPF不规则区域所诞生的技术,是一种虚拟的、逻辑的链路。
vlink必须找到一个真实的ABR设备建立虚拟链路。
[r2-ospf-1-area-0.0.0.1]vlink-peer 3.3.3.3
[r3-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2
注意:配置位置在需要vlink穿越的区域中,且配置的是RID,而非邻居IP地址。
虚链路的配置条件---->只能穿越一个区域。
Vlink被视为骨干区域的一段延伸--->Vlink永远属于Area 0。
使用Vlink解决不规则区域的问题
- 资源消耗
- 虚链路只能穿越1个区域