OSPF—开放最短路径优先协议详解---附:OSPF LSA 详解

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


无类别链路状态路由协议---公有协议--组播更新协议:224.0.0.5/6  

触发更新、周期更新(30min);跨层封装到网络层--协议号89

基于LSA更新导致更新量很大-----需要为中大型网络服务---周期的维护---结构化部署

结构化部署--区域划分、地址规划

数据包---5种基本数据包

HELLO -- 邻居的发现、建立、保活

DBD  --数据库描述包 -- 数据库目录信息

LSR   --链路状态请求

LSU  ---链路状态更新---携带各种LSA

LSack ----链路状态确认

OSPF数据包示意图

OSPF的状态机

Down:本地一旦发出hello包,进入下一状态

Init初始化:本地接收到的hello包中若存在本地的RID,进入下一状态

2way双向通信:邻居关系建立标志

条件匹配:点到点网络直接进入下一状态;MA网络将进行DR/BDR选举(40S),非DR/BDR间不能进入下一状态;

Exstart预启动:使用类hello 的DBD包进行主从关系选举,RID数值大为主,主优先进入下一状态

Exchange准交换:使用真正的DBD进行数据库目录的共享,需要ACK;

Loading 加载:使用LSR/LSU/LSack来获取未知的LSA信息;

Full转发:邻接关系建立的标志;


OSPF的工作过程

启动配置完成后,本地收发hello包,建立邻居关系,生成邻居表

再进行条件的匹配,匹配失败将停留于邻居关系,仅hello包周期保活即可;

匹配成功者间可以建立邻接(毗邻)关系,需要DBD共享数据库目录,LSR/LSU/LSack来获取未知的LSA信息,当收集完网络中所有的LSA后,生成数据表--LSDB

LSDB建立完成后,本地基于SPF选路规则,计算本地到达所有未知网段的最短路径,然后将其加载到路由表中;完成收敛

收敛完成后--hello包周期保活  

-- 30min周期的DBD比对,若不一致将使用LSR/LSU/LSack重新获取

结构突变:

  1. 新增网段---直连新增网段的设备使用DBD告知邻居,邻居再使用LSR/LSU/LSack来获取
  2. 断开网段---直连断开网段的设备使用DBD告知邻居,邻居再使用LSR/LSU/LSack来获取
  3. 无法沟通---dead time 计时到后,邻居关系断开,删除所有从该邻接处学习到的所有LSA信息;

名词注解:

LSA:链路状态通告--在不同条件下产生不同的拓扑或路由信息,被分为各种类别;

LSDB:链路状态数据库---所有的LSA的集合

OSPF收敛:LSA洪泛   LSDB同步


配置:

r1(config)#router ospf 1   //启动时需要配置进程号,仅具有本地意义

r1(config-router)#router-id 1.1.1.1 

router-id全网唯一     router-id顺序:手工----环回接口上最大数值的ip地址----物理接口最大数值----无进程

宣告:1、激活   2、拓扑   3、区域划分

r1(config-router)#network 1.1.1.1 0.0.0.0 area 0

r1(config-router)#network 12.1.1.1 0.0.0.0 area 0

在宣告时必须携带反掩码 

区域划分规则:

  1. 星型结构------所有非骨干必须直连到骨干区域  区域0为骨干  大于0为非骨干
  2. ABR--区域边界路由器

 

启动配置完成后,邻居间使用hello包建立邻居关系,生成邻居表

Hello包----用于邻居的发现、关系的建立和保活

邻居间hello包中必须有4个参数完成一致,否则无法建立邻居关系:

  1. hello 和dead time   2、区域ID   3、认证字段  4、末梢区域标记

r2#show ip ospf neighbor 查看邻居表

Neighbor ID     Pri   State           Dead Time   Address         Interface

1.1.1.1           0   FULL/  -        00:00:32    12.1.1.1        Serial1/0

3.3.3.3           0   FULL/  -        00:00:36    23.1.1.2        Serial1/1

                    状态机

邻居关系建立后,进行条件匹配,匹配失败为邻居关系,hello包周期保活即可;

匹配成功将使用DBD/LSR/LSU/LSack获取未知的LSA信息,生成LSDB---数据库表:

r2#show ip ospf database  查看数据库的目录

r2#show ip ospf database router 1.1.1.1  具体查看某条LSA

                      类别  番号

DBD包:exstart和exchange均出现; exstart状态时,没有携带目录信息,仅用于主从关系选举;

  1. DBD包中携带MTU,强制要求邻接间MTU值必须一致,否则将卡在该状态
  2. 在exstart状态的DBD时,使用隐型确认;---基于序列号

   从使用主的DBD序号来确认主的信息

  1. 标记位  I 为1标识本地发出的第一个DBD 包

          M为0标识本地的发出最后一个DBD包

          MS为1标识主,为0标识从

当LSDB同步完成后,本地基于数据库最短选路规则,计算到达所有未知网段的最短路径,然后将其加载到路由表中:

O - OSPF, IA - OSPF inter area

       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2

       E1 - OSPF external type 1, E2 - OSPF external type 2

使用O标识OSPF本区域内通过拓扑计算所得路由

使用O IA标识其他区域路由器通过ABR导入所得

使用O E1/2标识其他协议或其他进程产生后,通过ASBR重发布进入

使用O N1/2标识其他协议或其他进程产生后,通过ASBR重发布进入,同时本地处于NSSA特殊区域;

 

管理距离为110;度量为cost值;

Cost值=开销值=参考带宽/接口带宽   默认参考带宽为100M;

OSPF优选cost值之和最小的路径;

注:到接口实际带宽大于参考带宽时,度量为1;可能导致选路不佳

   可以修改默认的参考带宽,切记整个网络所有设备参考带宽需一致

r1(config-router)#auto-cost reference-bandwidth ?

  <1-4294967>  The reference bandwidth in terms of Mbits per second

r1(config-router)#auto-cost reference-bandwidth 1000


OSPF的邻居建立成为邻接关系的条件

基于网络类型------点到点     MA多路访问

在点到点网络中,邻居关系必须成为邻接关系,否则无法正常收敛

在MA网络若全网均为邻接关系,那么将可能出现大量重复性的LSA洪泛;

为避免该现象,将进行DR/BDR的选举;所有的非DR/BDR间不得建立成为邻接关系;

选举规则:1、先比较接口优先级----- 默认1;大优;0标识不参选,点到点接口默认为0;

          2、优先级相同,比较设备的RID,数值大优;

干涉选举的方法:

  1. 修改DR最大优先级,BDR次大

r1(config)#interface fastEthernet 0/0

r1(config-if)#ip ospf priority 3

注:DR选举非抢占,故修改优先级后必须重启设备的OSPF进程

r1#clear ip ospf process

Reset ALL OSPF processes? [no]: yes

  1. 修改DR最大优先级,BDR次大;剩余所有设备优先级修改为0;

   不需要重启设备的进程;切记不得将所有设备优先级修改为0,至少必须存在DR;

  • OSPF的接口网络类型----OSPF协议在不同网络类型下的接口上,不同的工作方式;

OSPF接口工作方式

r1#show ip ospf interface lo0  查看OSPF协议在某个接口上的工作方式

网络类型                      OSPF接口工作方式

环回                   LOOPBACK   无hello包      以32位主机掩码发送路由 

点到点(HDLC/PPP)     POINT_TO_POINT   hello time 10s   不选DR   

BMA   (以太网)      BROADCAST         hello time 10s    选DR

NBMA (MGRE)       POINT_TO_POINT    hello time 10s   不选DR

注:点到点的工作方式,仅适用于一个网段两个节点的网络;

   故在MGRE环境下若适用tunnel口默认的工作方式,那么一个网段内若存在两个以上节点将出现邻居关系翻滚;

 

解决方法:

  1. 所有节点修改 BROADCAST
r1(config)#interface tunnel 0

r1(config-if)#ip ospf network broadcast //修改接口工作方式为broadcast 

注:若MGRE环境下,不同接口处于不同的网络类型;若hello time一致将建立邻居关系,当工作机制的不同导致LSA更新出现问题;必须所有节点处于相同的工作方式

 

注2:MGRE环境下,若构建的OSPF工作环境不是一个全连结构(网段内所有设备间均建立邻居关系),那么一旦使用broadcast工作方式,就必须将DR固定在中心站点位置,否则将出现DR位置混乱,导致网络无法正常收敛;

  1. 所有节点修改为点到多点模式;

点到多点为cisco为OSPF协议额外设置的工作方式

r1(config)#interface tunnel 0

r1(config-if)#ip ospf network point-to-multipoint

点到多点的工作:hello time30;无DR选举;生成访问各个节点的精确路由;


OSPF的不规则区域

【1】远离骨干的非骨干区域 ----ABR必须同时工作于区域0,才能进行区域间的路由共享

【2】不连续骨干---从X区域获取到的路由信息不得发往编号为X的区域;即便X区域连接

了本区域不同的ABR;---水平分割

解决方案:

  1. 普通tunnel---在两台ABR上建立隧道,然后将其宣告于OSPF协议中

缺点:周期的保活和更新,触发的信息均需要通过中间的穿越区域,对中间区域影响较大;

      选路不佳;

      OSPF协议若通过不同的区域学习到的相同的路由,优选区域0;若均为非骨干,比较度量值;  

  1. OSPF虚拟路---非骨干区域间的ABR到骨干区域的ABR处授权--建立一条虚链路
r2(config)#router ospf 1

r2(config-router)#area 1 virtual-link 4.4.4.4

       中间的穿越区域   对端的ABR的RID

因为没有新的网段出现,故选路正常;为了避免周期的信息对中间区域的影响,故停止虚链路间的所有周期行为-----不可靠

  1. 多进程双向重发布

   一台设备上若同时运行多个进程,那么不同进程拥有不同的RID,生成各自的数据库,当数据库不共享;仅将各自计算所得路由加载于同一张路由表内;若多个进程工作于同一个接口上,仅最新启动的进程生效;

在解决不规则区域时,让连接两个非骨干区域的ABR设备,将不同区域宣告到本地的不同进程下,之后使用重发布技术,进行路由共享即可;

r4(config)#router ospf 1

r4(config-router)#redistribute ospf 2 subnets

r4(config-router)#exit

r4(config)#router ospf 2

r4(config-router)#redistribute ospf 1 subnets

OSPF的数据库表  

OSPF协议基于LSU来共享LSA信息;

LSA--链路状态通告----拓扑或者路由信息  

在不同的条件下发出不同类别的LSA;

详细查看某条LSA:

r1#show ip ospf database router 1.1.1.1

                      类别名  link-id

无论哪种类别的LSA均存在以下参数:

  LS age: 142      老化时间,周期1800归0,也可触发归0;最大老化3609s

  Options: (No TOS-capability, DC)

  LS Type: Router Links        类别名,此处为1类

  Link State ID: 1.1.1.1        link-ID,在目录中的编号

  Advertising Router: 1.1.1.1    通告者的RID

  LS Seq Number: 80000004   

  Checksum: 0x65F9

  Length: 60

  Number of Links: 3

                传播范围           通告者               携带信息

LSA1 router      本区域           本地区域所有设备       本地的直连拓扑

LSA2 network    本区域               DR                 MA网段部分的拓扑

LSA3 Summary   整个OSPF域          ABR                O IA 域间路由

LSA4 asbr-summary 除ASBR所在区域外   ABR               ASBR位置

                 的整个OSPF域

LSA5 External    整个OSPF域         ASBR                O E  域外路由

LSA7 nssa-external  NSSA区域内        ASBR               O N  域外路由

                 离开该区域后转换回5类

 

                Link-ID                       通告者

LSA1 router    通告者的RID                本地区域所有设备

LSA2 network   DR的接口IP地址                DR

LSA3 Summary   O IA路由,目标网络号     ABR,在经过下一跳ABR时,修改为本地

LAS4 asbr-summary  ASBR的RID            ABR,在经过下一跳ABR时,修改为本地

LSA5 External   O E 路由,目标网络号             ASBR(不修改)

LSA7 nssa-external  O N路由,目标网络号          ASBR(不修改)

 

 


扩展配置

减少LSA的更新量

【1】手工汇总

  1. 域间路由汇总---只能在ABR上配置

r1(config)#router ospf 1

r1(config-router)#area 2 range 5.5.4.0 255.255.252.0

              通过该区域的1/2类LSA计算所得路由才能汇总成功

  1. 域外路由汇总---ASBR上配置

r4(config)#router ospf 1

r4(config-router)#summary-address 99.1.0.0 255.255.252.0

 

注:以上汇总均会自动生成空接口防环路由;

 

 

【2】特殊区域--不能为骨干区域、不能存在虚链路

不能存在ASBR

  1. 末梢区域---拒绝4/5的LSA,ABR自动产生3类缺省发向该区域

r5(config)#router ospf 1

r5(config-router)#area 1 stub 该区域所有的设备均需要配置

 

  1. 完全末梢区域--在末梢区域的基础上进一步拒绝3的LSA,仅保留一条3类的缺省

  先将该区域配置为末梢区域,然后仅在ABR上定义完全即可

r1(config-router)#area 2 stub no-summary

存在ASBR

NSSA--非完全末梢区域--该区域拒绝4/5类LSA;不自动产生3类缺省;本地的5类LSA基于7类转发,通过NSSA区域后转回5类;

该特殊区域的意义在于拒绝其他区域的ASBR产生的4/5数据,又为了避免环路的出现,默认不自动产生缺省路由,导致无法访问其他的域外网段;故在管理员确定无环的情况下,可以手工添加缺省路由

r4(config)#router ospf 1

r4(config-router)#area 1 nssa   该区域所有设备配置

完全NSSA--在NSSA的基础上进一步拒绝3的LSA,自动产生3类缺省

先将该区域配置为NSSA,然后仅在ABR上定义完全即可

r3(config)#router ospf 1

r3(config-router)#area 1 nssa no-summary

切记:ISP所在位置的非骨干区域不得配置为任何的特殊区域;

      若ISP连接在其他的协议时,连接该协议的非骨干区域也不得配置为任何特殊区域;

接口认证

接口明文

r1(config)#interface s1/1  //连接邻居的接口上配置

r1(config-if)#ip ospf authentication   //开启接口明文认证需要,开启后本地hello包中认证类型字段被修改,若邻居间不一致,将无法建立邻居关系

r1(config-if)#ip ospf authentication-key cisco  //定义明文认证的秘钥

接口密文

r2(config)#interface s1/1

r2(config-if)#ip ospf authentication message-digest // 开启密文认证需要

r2(config-if)#ip ospf message-digest-key 1 md5 cisco123 // 配置秘钥及编号

 

 

 

区域认证:

例:在R1上开启关于区域0的明文或密文认证;实际就是在R1上所有的区域0接口配置了明文或密文的认证需求,修改了认证类型字段而已

接口的秘钥还需要到各个接口上逐一匹配

r2(config)#router ospf 1

r2(config-router)#area 1 authentication  //区域明文

r2(config-router)#area 1 authentication  message-digest //区域密文

 

虚链路认证

明文认证

r2(config-router)#area 1 virtual-link 4.4.4.4 authentication  //先开启明文认证需求

r2(config-router)#area 1 virtual-link 4.4.4.4 authentication-key cisco //在配明文认证密码

密文认证

r2(config-router)#area 1 virtual-link 4.4.4.4 authentication message-digest

r2(config-router)#area 1 virtual-link 4.4.4.4 message-digest-key 1 md5 cisco123 

 

被动接口---只接收不发送路由协议信息,仅用于连接用户的接口,不得用于连接邻居的接口

r2(config)#router ospf 1

r2(config-router)#passive-interface fastEthernet 0/0 //把接口改为被动

加快收敛

r2(config)#interface s1/1

r2(config-if)#ip ospf hello-interval 10  //修改hello time

r2(config-if)#ip ospf dead-interval 40  //修改dead time

切记:修改本端的hello time,本端的dead time将自动4倍关系匹配;

     邻居间hello 和 dead time必须一致;

OSPF-LSA详解:https://blog.csdn.net/weixin_42767604/article/details/85159109

posted @ 2018-12-21 11:31  ASQW234  阅读(585)  评论(0编辑  收藏  举报