OSPF基础

OSPF基础

OSPFv2和RIPv2对比

相同点

1、两者都是无类别路由协议 --- 传播时携带真实掩码

2、两者的更新方式相同

OSPFv2和RIPv2都使用组播更新方式,各组播地址如下:

RIPv2 --- 224.0.0.9

OSPFv2 --- 224.0.0.5/224.0.0.6

3、两者均支持等开销负载均衡

不同点

RIPv2只能应用在小型网络中

OSPFv2可以应用在中大型网络环境

OSPF区域划分 --- 结构化部署

OSPF域(Domain)

将一系列的OSPF路由器组成的网络称为OSPF域。

区域ID:32bit,例如0.0.0.0

OSPF多区域划分要求:

1、OSPF要求域中所有的非骨干区域(区域ID不为0的区域)都必须与Area0相连。

2、骨干区域不能被分割

OSPF区域结构部署规则的必要性

假定没有“所有骨干区域都必须与骨干区域相连”这条规则 --- “原理骨干的非骨干”

后果:会出环

定义了ABR(区域边界路由器)设备 --- 确保所有人遵循区域划分要求

ABR定义:
1、至少连接两个区域
2、连接的区域中至少有一个是区域0
3、在区域0中至少有一个活跃的邻居

作用:用于传递区域间路由

为了避免区域间的路由形成环路,非骨干区域之间不允许直接相互发布路由

假定没有“骨干区域不能被分割”这条规则 --- 不连续骨干区域

后果:会出环

OSPF规定:从非骨干区域收到的路由信息,ABR能接收,但不会使用这条路由信息(OSPF水平分割原则)

总结

OSPF有如下规则:
1、对于伪ABR设备不允许转发区域间路由信息
2、对于真实ABR而言
	能够将自己直连的非骨干区域的区域内路由信息传递给骨干区域
	能够将自己直连的骨干区域的区域内路由信息传递给非骨干区域
	能够将自己从骨干区域学习到的区域间路由信息传递给非骨干区域。

OSPF路由器角色

  • 内部路由器(IR)

  • 所有接口都接入同一个区域的路由器

  • 区域边界路由器(ABR)

  • 工作在两个OSPF区域之间的路由器

  • 骨干路由器(BR)

  • 接入Area0的路由器,包括ABR,但不包括ASBR

  • ASBR(AS边界路由器)

  • 工作在OSPF自治系统边界的路由器

  • 并不是同时运行多种路由协议的OSPF路由器就一定是ASBR,ASBR一定是将外部路由引入到OSPF域的设备。

OSPF数据包

Hello

  • 用来周期发现、建立、保活OSPF邻居关系,通过组播224.0.0.5发送。

  • 10S发送一次来确认邻居的存在

  • hold-time --- 4倍hello时间

  • Router-ID(RID)

  • 全域唯一,标识路由器身份

  • 用ip地址形式标识(32bit,点分十进制)

  • 配置方法

  • 手工配置

  • 自动配置

  • 默认最大环回IP地址,若没有最大环回则选择最大的物理IP地址(路由器的RID选择)

  • [r1]display router id //查看路由器全局ID值

  • 注意: 启动OSPF进程前,必须要有接口IP地址,若存在IP地址,则第一次启动OSPF进程时,会选取第一个配置的IP地址为RID。 但是,若删除第一个配置的IP地址后,则恢复为上述规则。 在华为设备中,若没有接口IP地址,则OSPF启动后,RID为0.0.0.0 在思科设备中,若没有接口IP地址,则OSPF启动失败。

  • 无论采用手工还是自动选择,一旦OSPF进程启动,RID被确定,则无法变化,必须重启进程才能生效

  • reset ospf process 重启所有OSPF进程

DBD

  • 数据库描述报文

  • 该报文携带的是路径信息的摘要(为了减少更新量,并不会直接给邻居发送拓扑信息,而是将拓扑信息的目录发送给邻居)

LSR

  • 链路状态请求报文

  • 基于未知的LSA(链路状态通告)信息进行查询

LSU

  • 链路状态更新报文

  • 携带真正的LSA信息的数据包

LSAck

  • 链路状态确认报文

OSPF七种状态机

  • down --- 关闭状态 --- 一旦启动了OSPF协议,则发出hello包,并进入下一状态

  • init --- 初始化状态 --- 收到的hello包中,存在自己的RID值,则进入下一状态

  • 2-way --- 双向通讯状态 --- 邻居关系建立的标志

条件匹配:匹配成功则进入下一阶段,不成功则停留在2-way

  • exstart --- 预启动状态 --- 使用未携带信息的DBD包进行主从关系选举,RID大的为主

  • exchange --- 准交换状态 --- 使用携带目录信息的DBD报文进行目录共享

  • loading --- 加载状态 --- 邻居间使用LSR/LSU/LSAck三种报文来获取完整的拓扑信息

  • full --- 转发状态 --- 标志邻接关系的建立

OSPF条件匹配

  • 设备接口名称

  • DR --- 指定路由器

  • BDR --- 备份路由器

  • DRother --- 其他路由器

  • OSPF称为邻接关系的条件

  • 点到点 --- 不用选举DR和BDR --- 直接开始建立邻接关系(加快收敛的方法)

  • MA网络 --- 在一个网络中,不限制节点数(会选举DR和BDR)

  • 选举规则

  • 接口优先级 --- 0-255 --- 优先级越大,为DR,次一级为BDR(默认为1)

  • RID --- 越大越优先

  • 选举范围 --- 一个广播进行一次条件匹配

  • 角色之间的关系

  • DR和DRother --- 邻接关系

  • DR和BDR --- 邻接关系

  • BDR和DRother --- 邻接关系

  • DRother和DRother邻居关系

  • 非抢占性选举模式

选举过程

1、DR、BDR的选举是通过Hello报文来实现的,选举过程发生在2-way状态之后

2、路由器将自己的接口的DR优先级填写hello报文中的 “DR优先级” 字段

3、在接口视图下可以修改DR优先级(若DR优先级修改为0,则代表不具备DR和BDR的选举资格)

4、当路由器接口激活OSPF后,首先检查网络上是否已经存在DR设备,如果存在则接收DR角色。若不存在,则拥有最高DR优先级的设备称为DR(RID)

5、BDR的选举过程和DR选举过程相同,但是是在DR选举成功之后。

DR设备使用组播224.0.0.5向该MA网络发送消息。
而DR和BDR使用224.0.0.6监听该MA网络的消息
DRother使用224.0.0.6发送自己的LSU报文

在NBMA网络中,也存在OSPF

在NBMA网络类型下,如果需要启动OSPF协议,需要手工指定邻居,否则不会发送hello报文。

若不发送hello报文,则邻居状态处于down状态。

OSPF第一次收敛的全过程

  1. 启动OSFP配置完成后,OSPF将向本地所有运行OSPF协议的接口组播224.0.0.5发送hello报文; hello报文中携带有本地的RID以及本地已知的邻居RID;之后生成邻居表。

  1. 邻居关系建立后,进行条件匹配;匹配失败则停留在邻居关系;仅hello报文保活

  1. 匹配成功的邻居将开始建立邻接关系。

  1. 首先使用未携带数据的DBD报文来进行主从关系选举;之后使用携带数据的DBD报文来共享数据库目录;之后本地使用LSR/LSU/LSACK报文来获取未知的LSA信息;

  1. 完成本地数据库的建立---生成数据库表。

  1. 之后本地基于数据库生成有向图和最短路径树,之后计算本地到达拓扑中所有未知网段的最短路径,并将其添加到路由表中。

  1. 收敛完成,hello报文周期保活。每30min进行一次周期更新。

结构突变

1.新增网段 --- 直接在邻接关系的接口使用LSU进行更新,将内容告诉于邻居。并需要邻居的ACK确认。

2.断开网段 --- 直接在邻接关系的接口使用LSU进行更新,将内容告诉于邻居。并需要邻居的ACK确认。

3.无法沟通 --- 到达dead time后,断开邻居关系 --- 4倍的hello时间。

OSPF基础配置

实例:

OSPF基础_第1张图片

1、启动OSPF进程

[r1]ospf 1 router-id 1.1.1.1	//进程号仅具备本地意义,手工配置RID方法

2、创建区域

[r1-ospf-1]area 0 

3、宣告

[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代表 不可变;1代表 可变。

华为体系中,优先级为10;

OSPF的COST = 参考带宽(100Mbps)/ 实际带宽

[r1-ospf-1]bandwidth-reference 1000 // 修改参考带宽 --- 所有设备均需修改

一条OSPF路径的COST等于从目的地到本地路由器沿途的所有设备的 入接口 Cost值的总和。

OSPF报文格式

OSPF报文头部

OSPF基础_第2张图片
  • 版本(version)

  • 对于OSPFv2而言,该字段恒为2

  • 类型(Type)

  • 描述OSPF数据包的类型

  • hello --- 1

  • DBD --- 2

  • LSR --- 3

  • LSU --- 4

  • LSACK --- 5

  • 报文长度(Packet Length)

  • 整个OSPF报文的长度 --- 单位字节

  • 路由器ID

  • 发出该报文的路由器的RID值

  • 区域ID

  • 发出该报文的接口所属于的区域的ID值

  • 校验和

  • 验证OSPF整体数据报文的有效性

  • 验证类型

  • 指示该报文使用的认证类型

  • 不认证 --- 0;简单认证 --- 1;MD5认证 --- 2;

  • 认证数据

  • 用于报文认证所对比的内容

  • 若认证类型为不认证,则该字段全部用0填充。

OSPF的认证功能是存在于所有的数据交互过程中,对于任何一种数据报文,都需要进行认证。

在认证的过程中,需要对比两个字段,首先对比认证类型字段。
	若相同,才会对比认证数据字段

Hello包

OSPF基础_第3张图片
  • 网络掩码(Network Mask)

  • 该字段填充的是发送该报文的网络掩码

  • 两台OSPF路由器如果通过以太网接口直连,那么双方的直连接口必须配置相同的网络掩码。(点到点网络不需要对比该参数)

  • 注意:OSPF建立邻居关系需要对比子网掩码信息是华为独有,别的厂商没有这个要求

  • Hello间隔

  • 两台直连路由器需要确保直连接口的Hello时间间隔相同,否则邻居关系无法建立。

  • 缺省情况下,P2P和BMA类型下,为10S;P2MP和NBMA为30S。

  • 可选项(Options)

  • 该字段一共8bit,每个比特位都用于指示该路由器的某个特定的OSPF特性。

  • 而OSPF邻居关系建立过程中,该字段中的某些比特位将会被检查,可能影响OSPF邻居关系建立。(特殊区域的标记)

  • 路由器优先级

  • 【接口视角】ospf dr-priority <0-255> //修改OSPF*接口*的DR优先级

  • 路由器失效时间

  • 两台直连路由器要建立OSPF邻居关系,需要保证双方接口的dead time时间相同,否则邻居关系无法正常建立

  • 缺省时间为hello的4倍

  • 指定路由器

  • 网络中DR设备的接口IP地址。

  • 若没有DR或DR没有选举出来,则填充0.0.0.0

  • 备份指定路由器

  • 网络中BDR设备的接口IP地址。

  • 若没有BDR或BDR没有选举出来,则填充0.0.0.0

  • 邻居

  • 在直连链路上发现的有效邻居,此处填充的是邻居的RID值,如果发现多个邻居,则包含多个邻居字段。

所有224.0.0.X格式的组播地址称为本地链路组播,目的IP地址是本地链路组播的数据包中的TTL值被设定为1。

所有的本地链路组播都会存在对应的组播MAC地址,01-00-5e-后24位(组播IP地址的后24位)。

限制邻居关系建立的参数

网络掩码

OSPF基础_第4张图片
OSPF基础_第5张图片

在R2上修改网络掩码后,

R2会将与R3的状态立即修改为Down状态。而R3会在40S死亡时间之后进行状态切换。

原因在于,R2在修改IP地址的掩码后,会认为之前的连接中断,需要重新建立连接,所以重置状态机。

而R3则认为是无法沟通的。故会等待死亡时间超时后才会切换状态。

并且,该情况,在R3等待40S周期内,还是可以向R2转发数据,R2可以接收到数据包,但无法回复。

Hello间隔

[r1-GigabitEthernet0/0/0]ospf timer hello 5
修改时间后,等待死亡时间,然后就会断开
OSPF基础_第6张图片

你可能感兴趣的:(网络)