OSPF——开放式最短路径优先协议

OSPF基础
IETE——国际互联网工程任务组——RFC2328

OSPFV2和RIPV2对比
相同点

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

2、两者的更新方式相同——组播

RIPV2——224.0.0.9

OSPFV2——224.0.0、224.0.06

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

不同点

RIPV2只能应用在小型网络中,OSPFV2可以应用在中大型网络环境

OSPF区域划分——结构化部署
OSPF域(Domain)——将一系列的OSPF路由器组成的网络成为OSPF域。

ospf的非骨干区域 ospf非骨干区域链型组网_ospf的非骨干区域

区域ID:32bit

OSPF多区域划分要求

  1. OSPF要求域中所有的非骨干区域(区域ID部位0的区域)都必须与Area0相连。
  2. 骨干区域不能被分割

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

假定没有“所有非骨干区域都必须与骨干区域相连”这条规则——“远离骨干的非骨干”

ospf的非骨干区域 ospf非骨干区域链型组网_OSPF_02

 

定义了ABR(区域边界路由器)设备——确保所有人遵循上述规则

1、至少连接两个区域
2、连接的区域中至少有一个是区域0
3、在区域0中至少有一个活跃的邻居
作用:用于传递区域间路由

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

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

 

ospf的非骨干区域 ospf非骨干区域链型组网_运维_03

 

总结

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

OSPF路由器角色
内部路由器(IR)

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

区域边界路由器(ABR)

骨干路由器(BR)

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

ASBR(AS边界路由器)

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

        并不是同时运行多种路由协议的ospf路由器就一定是ASBR,ASBR一定是将外部路由

OSPF数据包

ospf的非骨干区域 ospf非骨干区域链型组网_网络_04

 

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

10S发送一次来曲儿邻居的存在

hold--time——四倍的hello时间

Router-ID (RID)

        全域唯一,便是路由器身份

        用IP地址形式表示(32bit,点分十进制)

        配置方法

        手工配置

        自动配置

                默认最大环回IP地址, ,若没有最大环回则选择最大物理IP地址。

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

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

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

DBD
数据库描述报文

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

LSR
链路状态请求报文

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

LSU
链路状态更新报文

携带真正的L SA信息的数据包

LSAck
链路状态确认报文

OSPF七种状态机

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

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

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

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

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

exchange——准交换状态——使用携带目录信息的DBD保卫呢进行目录共享

loading——加载状态:邻居间使用LSR/LSU/LSAck来获取完整的TOPO信息

full——转发状态:修成正果——标志邻接关系的建立

ospf的非骨干区域 ospf非骨干区域链型组网_OSPF_05


 

ospf的非骨干区域 ospf非骨干区域链型组网_网络_06

 

 

ospf的非骨干区域 ospf非骨干区域链型组网_运维_07

条件匹配
决定了谁给谁传拓扑

设备接口名称

        DR:指定路由器

        BDR:备份指定路由器

        DRother:其他路由器

OSPF称为邻接关系的条件

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

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

选举规则

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

        RID:越大越优先

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

角色之间的关系

        DR和DRother——邻接关系

        DR和BDR——邻接关系

        BDR和DRother——邻接关系

        DRother和DRother——邻居关系

非抢占性选举模式

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

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

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

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

e.BDR的选举过程和DR选举过程相同,但是在DR选举成功之后。(DR和BDR指的是接口)

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

ospf的非骨干区域 ospf非骨干区域链型组网_OSPF_08

 

NBMA网络类型中存在。

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

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

OSPF工作状态

ospf的非骨干区域 ospf非骨干区域链型组网_网络_09

 

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

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

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

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

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

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

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

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

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

3.无法沟通----dead time----四倍的hello时间。

OSPF基础配置

ospf的非骨干区域 ospf非骨干区域链型组网_服务器_10

 

启动OSPF进程

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

创建区域

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

 

ospf的非骨干区域 ospf非骨干区域链型组网_服务器_11

华为体系中,优先级为10;OSPF的COST====参考带宽(100Mbps)/实际带宽[r1-ospf-1]bandwidth-reference 1000 //修改参考带宽-----所有设备均需修改一条OSPF路径的Cost等于从目的地到本地路由器沿途的所有设备的入接口Cost值的总和。


OSPF报文格式

 

ospf的非骨干区域 ospf非骨干区域链型组网_网络_12

 

版本(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的非骨干区域 ospf非骨干区域链型组网_OSPF_13

 

网络掩码(Network Mask)

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

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

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

Hello间隔

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

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

可选项(Options)

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

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

路由器优先级

[r2-GigabitEthernet0/0/0]ospf dr-priority ? //修改OSPF接口的DR优先级
INTEGER<0-255> Router priority value

路由器失效时间

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

        缺省时间为hello的4倍。

指定路由器

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

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

备份指定路由器

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

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

邻居

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

所有224.0.0.X格式的组播地址称为本地链路组播,目的IP地址是本地链路组播的数据包中的TTL值被设定为1。所有的本地链路组播都会存在对应的组播MAC地址,01-00-5e-后24位(组播IP地址的后24位)。

限制邻居关系建立的参数

ospf的非骨干区域 ospf非骨干区域链型组网_运维_14

 子网掩码

ospf的非骨干区域 ospf非骨干区域链型组网_运维_15

 在R2上修改网络掩码后,
R2会将与R3的状态立即修改为Down状态。而R3会在40S死亡时间之后进行状态切换。
原因在于,R2在修改IP地址的掩码后,会认为之前的连接中断,需要重新建立连接,所以重置状态机。
而R3则认为是无法沟通。故会等待死亡时间超时后才切换状态。
并且,该情况,在R3等待40S周期内,还是可以向R2转发数据,R2可以接收到该数据包,但无法回复。
 

影响建立连接方式

Hello时间

[r1-GigabitEthernetoro/0]ospf timer hello 20

Dead时间

[r1-GigabitEtherneto/0/0]ospf timer dead 120

注意:修改hello时间,则死亡时间随之改变,而仅修改死亡时间,hello间隔时间不变。

OSPF特殊区域标记

跟修改掩码效果相同。

认证字段

两者均需要等待死亡时间超时,才会从full状态切换到down状态。

DBD包

  • 使用未携带数据的DBD报文进行主从关系选举
  • 使用携带数据的DBD报文进行目录信息共享
  • 使用未携带数据的DBD报文进行确认

 

 

ospf的非骨干区域 ospf非骨干区域链型组网_OSPF_16

 

接口最大传输单元(接口的MTU)

        华为将该值设置为0

        华为默认不对MTU值进行检测

[r1-GigabitEtherneto/0/0]ospf mtu-enable

        如果两边均开启该功能,则会进行MTU检测,若两边不同,则状态卡在exstart状态。

I位——主从关系选举

        如果该位置为1,则不会携带LSA头部。

M位——代表后续是否有多个DD报文

        置为1,则代表后续还有DD报文

        置为0,则代表该报文为最后一个DD报文

MS位——代表主设备

        该比特位置为1,则代表Master

        在主从关系选举完成之前,各个设备均会认为自己的master。

  • DD序列号
  • 用于确保DD报文传输的有序和可靠性——DD序列号逐次加1(与TCP序列号效果相同)
  • DD序列号必须是由Master路由器决定,而从设备只能使用Master设备发送来的DD序列号来发送自己的DD报文。(隐性确认机制——通过对方发送序列号来起到确认机制)
  • LSA头部
  • 当路由器使用DD报文来描述自己的LSDB时,LSA的头部信息被包含在内。
  • 一个DD报文可以包含—
  • LSR包:链路状态请求报文
  •         基于DBD报文请求本地未知LSA信息
  •         LSR使用单播:修复重复更新

 

ospf的非骨干区域 ospf非骨干区域链型组网_服务器_17

 

 LSU包:链路状态通告——携带LSA具体信息

ospf的非骨干区域 ospf非骨干区域链型组网_服务器_18

 

  • LSACK包——确认报文(显性确认机制:由LSA头部信息确认)

ospf的非骨干区域 ospf非骨干区域链型组网_运维_19

 

 

LSA头部:20字节——每添加一个LSA头部信息,就增加20字节

  1. 主从选举——邻居关系的路由器都进行主从选举过程(单播方式)

如果用广播,会出现多个“主”

LSR使用单播:修复重复更新

  1. 主从关系确立后,‘主’先发LSR,从先发自己的数据库

 OSPF的接口网络类型

ospf的非骨干区域 ospf非骨干区域链型组网_运维_20

 

ospf的非骨干区域 ospf非骨干区域链型组网_运维_21

 

ospf的非骨干区域 ospf非骨干区域链型组网_ospf的非骨干区域_22