OSPF基础与特性

一.OSPF 的技术背景

OSPF出现是因为RIP协议无法满足大型网络的配置

RIP协议中存在的问题

RIP中存在最大跳数为15的限制,不能适应大规模组网

RIP周期性发送全部路由信息,占用大量的带宽资源

路由收敛速度慢

以跳数作为度量衡,选路可能会不优

存在路由环路的可能性

每隔30秒更新

OSPF协议的特点

没有跳数限制,适合大规模组网

使用组播更新变化的路由和网络信息

路由收敛快

以COST作为度量值

采用SPF算法有效避免环路

每隔30分钟更新

在互联网上大量使用,是运用最广泛的路由协议


二.OSPF 的表与数据包

OSPF三张表

邻居表:用来记录邻居状态和关系

拓扑表:包含链路状态数据库(LSDB)

路由表:记录SPF算法计算的路由,存放在OSPF路由表中

LSDB 的更新:

OSPF的数据包

OSPF报文直接封装在IP报文中,协议号为89

头部数据包内容:

|-------------------------------|--------------------------------------------------------------|
| 版本(Version) | 对于OSPFv2,该字段值恒为2----在IPV4中。对于OSPFv3,该字段值恒为3----在IPV6中 |
| 类型(Type) | 该OSPF报文的类型。该字段的值与报文类型的对应关系是:1-Hello;2-DD;3-LSR;4-LSU;5-LSAck |
| Packet Length) | 整个OSPF 报文的长度(字节数) |
| 路由器ID (Router Identification) | 路由器的OSPF Router-ID |
| 区域ID (Area Identification) | 该报文所属的区域ID,这是一个32bit 的数值 |
| 校验和(Checksum) | 用于校验报文有效性的字段 |
| 认证类型(Authentication Type) | 指示该报文使用的认证类型 |
| 认证数据(Authentication Data) | 用于报文认证的内容 |

OSPF工作过程中的数据包
(1)hello

hello包携带自己的router ID、被发现的邻居标识,用来周期保活的,发现,建立邻居关系

|-----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 网络掩码(Network Mask) | 一旦路由器的某个接口激活了OSPF,该接口即开始发送Hello报文,该字段填充的是该接口的网络掩码。两台OSPF 路由器如果通接口直连,那么双方的直连接口必须配置相同的网络掩码,否则影响邻居关系建立 |
| Hello间隔(Hello Interval) | 接口周期性发送Hello报文的时间间隔(单位为s)。两台直连路由器要建立OSPF邻居关系,需确保接口的Hello Interval相同,否则邻居关系无法正常建立 |
| 可选项(Options) | 该字段一共8bit,每个比特位都用于指示该路由器的某个特定的OSPF 特性。Options字段中的某些比特位会被检查,这有可能会直接影响到OSPF邻接关系的建立。(特殊区域的标记) |
| (Router Priority) | 路由器优先级,范围:0-255,默认是1,数字越大,代表路由优先级越高,也叫DR优先级,该字段用于DR、BDR 的选举 |
| 路由器失效时间(Router Dead Interval) | 在邻居路由器被视为无效前,需等待收到对方Hello报文的时间(单位为s)。两台直连路由器要建立OSPF 邻居关系,需确保双方直连接口的Router Dead Interval相同,否则邻居关系无法正常建立。缺省情况下,OSPF路由器接口的Router Dead Interval为该接口的Hello Interval的4倍 |
| 指定路由器(Designated Router) | 网络中DR的接口IP地址。如果该字段值为0.0.0.0,则表示没有DR,或者DR尚未选举出来 |
| 备份指定路由器(Backup Designated Router) | 网络中 BDR的接口IP地址。如果该字段值为0.0.0.0,则表示网络中没有BDR,或者BDR尚未选举出来 |
| 邻居(Neighbor) | 在直连链路上发现的有效邻居,此处填充的是邻居的Router-iD,如果发现了多个邻居,则包含多个邻居字段 |

(2)DBD

数据库描述报文,仅包含LSA摘要

|-----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|
| 接口最大传输单元(Interface Maximum Transmission Unit) | 接口的MTU |
| 可选项(Options) | 路由器支持的OSPF可选项 |
| DD报文置位符 | I:init位,I=1,这是第一个DD报文 M: more位,M=1表示后续还有DD报文 MS:master位,MS=1,表示本端为主 |
| DD序列号(DD Sequence Number) | DD报文的序列号,在DD报文交互的过程中,DD序列号被逐次加1,用于确保DD报文传输的有序和可靠性。值得注意的是,DD序列号必须是由Master路由器来决定的,而Slave路由器只能使用Master路由器发送的DD序列号来发送自己的DD报文。(route id大的设备会成为master) |
| LSA头部(LSA Header) | 当路由器使用DD报文来描述自己的LSDB时,LSA的头部信息被包含在此处。一个DD报文可能包含一条或多条LSA的头部 |

(3)LSR

请求自己没有的或者比自己更新的链路状态更详细的信息

复制代码
链路状态类型,链路状态ID,通告路由器 ---- "LSA三元组" 
通过这三个参数可以唯一的标识出一条LSA
(4)LSU

链路状态更新信息

一个LSU报文可以包含多个LSA

当路由器感知到网络发生变化时,也可以触发LSU报文的泛洪,以便将该变化通知给网络中的其他OSPF 路由器

复制代码
在MA网络中,非 DR、BDR路由器向224.0.0.6这个组播地址发送LSU报文,
而DR及 BDR会侦听这个组播地址,DR在接收LSU报文后向224.0.0.5发送LSU报文,
从而将更新信息泛洪到整个OSPF区域,所有的OSPF 路由器都会侦听224.0.0.5这个组播地址

224.0.0.5所有运行OSPF的接口都会监听
224.0.0.6所有DR/BDR的接口会监听
(5)LSAck

对LSU确认的包

报文中包含着路由器所确认的LSA的头部(每个LSA头部的长度为20byte)


三.OSPF 的工作过程

|----|--------------------------------------------------------|
| 邻居 | 双方通过hello报文,相互认识 |
| 邻接 | 邻居建立后,进行一系列报文交互,当两台路由器LSDB同步完成,开始独立计算路由时,这两台路由器形成了邻接关系 |

(1)确认可达性,建立邻居
复制代码
outer ID :标明的是路由器身份
手工配置:IPV4地址格式
自动选举:
    环回口:IP地址大的优先
    物理口:IP地址大的优先

2-way前,确认DR/BDR

++2-way是OSPF协议中的一中邻居状态,当两台路由器互相收到对方发送的Hello包,并且在Hello包中发现了自己的路由器ID时,他们就会建立双向通信,此时邻居状态就会变成2-way++

选举原因:广播网络中使路由信息交换更加高速有序,可以降低需要维护的邻接关系数量

选举范围:每个网段都需要选出一个DR和BDR(0-255)

选举规则:1.优先级大的优先,默认优先级是1;2.router-id大的优先

DR/BDR的选举没有抢占性

关系状态:DRother与DR建立邻接关系:

DRother与BDR建立邻接关系;

DR /BDR建立邻接关系;

DRother之间保持邻居关系

(2)摘要同步,开始建立邻接关系
复制代码
1.向邻接路由器发送DBD报文,通告本地LSDB中所有LSA的摘要信息
2.收到DBD报文后,与本地LSDB对比,向对方发送LSR报文,请求发送本地所需要的LSA的完整信息
3.收到LSR后,把对方所需的LSA的完整信息打包为一条LSU报文,发送至对方
4.收到LSU后,向对方回复LSAck报文,进行确认

邻接建立的过程:

(3)完整信息同步,完全邻接关系建立

完全邻接关系建立,LSDB表与路由表形成


四.OSPF 的状态机

|-------------|---------------------------------------------------------------------|
| Down | 关闭状态(稳定状态),这种情况处于手动指定邻居的情况下,发送hello包之后进入下一个状态 |
| Init | 初始化状态,收到对方的hello报文,但没有收到对方的hello确认报文 |
| Attempt | 一般不会出现,只出现在NBMA网络中,发出hello,但收不到对方的hello包 |
| 2-way(稳定状态) | 双方互相发现,邻居状态稳定,并确认了DR/BDR的角色; 当选举完毕后,就算出现一台优先级更高的路由器,也不会替换成新的DR\BDR |
| Exstart | 交换开始状态;发送第一个DD报文,但不发送LSA摘要,仅用于确定LSDB协商的主从,ROUTER-ID大的成为master |
| Exchange | 交换状态;发送后续DD报文,用于通告LSDB摘要 |
| Loading | 读取状态,进行LSA的请求(LSR)、加入(LSU)和确认(LSACK) |
| Full | 邻接状态(稳定状态),两端同步LSDB |

2-way 的前提:

  1. 无冲突,修改router-id需要重置ospf进程使生效;
  2. 掩码长度一致(MA网络中);
  3. 区域ID一致;
  4. 验证密码一致;
  5. hello-time一致;
  6. dead-time一致;
  7. 特殊区域类型一致

Full 的前提: 两端MTU一致,否则可能卡在Exstart/Exchange状态

能够计算路由的前提:两端网络类型一致,否则邻居状态full,但无法学习路由


五.OSPF 的区域划分

1.区域产生背景

OSPF路由器在同一个区域中泛洪LSA。为了确保每台路由器都拥有对网络拓扑的一致认知,LSDB需要在区域内进行同步

如果OSPF域仅有一个区域,随着网络规模越来越大,OSPF路由器的数量越来越多,这将导致诸多问题

2.分区的好处

减少LSA泛洪范围

提高网络拓展性,有利于组建大规模网络

3.区域类型
复制代码
骨干区域: area 0
非骨干区域: area 1
特殊区域: 减少邻居关系 

邻居关系过多会造成的影响:

  1. 大量产生hello包,消耗CPU性能
  2. 产生重复路由通告,消耗CPU性能
  3. 任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源

多区互连原则:

  1. 非骨干区域与非骨干区域不能直接相连;
  2. 所有非骨干区域必须与骨干区域相连;
  3. 此设计是为防止区域间环路

六.OSPF的路由器类型

|-----------------|-----------------|
| 区域内路由器(IR) | 所有接口在同一区域 |
| 骨干路由器(BR) | 所有接口都在骨干区域 |
| 区域边界路由器(ABR) | 连接骨干区域和非骨干区域 |
| 自治系统边界路由器(ASBR) | 连接外部自治系统并引入外部路由 |

相关推荐
alien爱吃蛋挞1 小时前
【JavaEE】TCP流套接字编程
java·网络·java-ee
wapicn992 小时前
查看手机在线状态,保障设备安全运行
java·网络·数据库·python·php
qq_485015213 小时前
Java网络编程干货
java·网络·php
无名之逆3 小时前
Hyperlane 文件分块上传服务端
服务器·开发语言·前端·网络·http·rust·php
达斯维达的大眼睛4 小时前
Linux网络多进程并发服务器和多线程并发服务器
linux·服务器·网络
Lilith的AI学习日记4 小时前
LangChain高阶技巧:动态配置Runnable组件的原理剖析与实战应用
大数据·网络·人工智能·架构·langchain
安科瑞刘鸿鹏5 小时前
智能配电保护:公共建筑安全的新 “防火墙”
运维·网络·物联网·算法·安全·能源
czhc11400756635 小时前
网络5 TCP/IP 虚拟机桥接模式、NAT、仅主机模式
网络·tcp/ip·桥接模式
逆水寻舟5 小时前
尚硅谷2019版Java网络编程笔记
java·网络·笔记
邪恶的贝利亚13 小时前
FFMEPG常见命令查询
linux·运维·网络·ffmpeg