OSPF详解

OSPF

概念

OSPF:open shortest path first,开放式最短路径优先

是一种链路状态协议,不向邻居通告路由项,通告的是链路状态信息,由接受到链路状态信息的路由器根据链路状态数据库与SPF算法自行计算生成路由表。

优点

由于基于距离矢量算法的RIP协议存在着收敛慢,路由环路,扩展性差的问题,所以逐渐被OSPF取代。

OSPF优点:

  • 采用组播形式发送报文,可以减少对其他不运行OSPF路由器的影响。
  • 支持报文加密
  • 支持对等价路由进行负载均衡

报文类型

image-20200825235716096

image-20200826111015332

  • HELLO包:周期性发送,用来发现和维持邻居关系。
  • DD包:描述本地LSDB的摘要信息,用于同步链路状态数据库
  • LSR包:用来向对方请求所需要的LSA,设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文
  • LSU包:对LSR进行回应,或者定时发送LSU来更新区域中的LSDB
  • LSAck:收到LSU之后的确认报文

HELLO包

建立邻居关系,根据包中的内容来协商邻居关系。

建立邻居的必要条件:

  • hello和dead时间

  • area ID

  • 认证

  • 末节标签

  • 掩码

  • MTU值

DBD包

在邻居关系建立以后,DBD包负责描述本地LSDB信息,路由器通过接受到的DBD包与自己的LSDB做对比,进而同步区域中的LSDB。

特殊字段:

I(init):1表示发送的第一个DBD包

M(more):1表示后面还要DBD包

MS(Master/Slave):1表示Master

Sequence Number:序列号。保证数据传输的完整性和可靠性

LSA Headers:LSA头部信息,头部包含足够的信息以唯一确认一个LSA实例。

image-20200826112046498

LSR

用来向邻居请求自己需要的LSA。

特殊字段:

LS Type:请求的LSA类型

Link State ID:根据LSA中的LS Type和LSA description在路由域中描述一个LSA。

Advertising Router:产生此LSA的路由器的RID

image-20200826113101821

报文示例。

image-20200826113128449

LS Type,Link State ID和Advertising Router可以唯一标识出一个LSA,当两个LSA一样时,需要根据LSA中的LS sequence number,LS checksum和LS age来判断所需LSA的新旧。

LSU

对LSR进行回应,或网络有变动时发送LSU来更新区域中的LSDB。

image-20200826114529118

LSAck

在收到LSU之后返回的确认报文。

image-20200826114807085

邻居建立过程

邻居与邻接是两个不同的状态。

down—>init—>2-way(邻居)—>exstart—>exchange—>loading—>full(邻接)

  • down:没有检测到邻居
  • init:收到了hello包,但是包中的邻居信息没有自己的RID
  • 2-way:收到了hello包,包中的邻居信息有自己的RID
  • exstart:表示正在协商主从关系,即谁先发送DBD包
  • exchange:在主路由器的带领下,开始交换DBD包
  • loading:请求更详细的信息, 即交换LSU
  • full:表示已完全建立邻接关系,LSDB已与邻居完全一致

(1)邻居建立过程(down—>init—>2-way)

多路访问链路中,OSPF首先选举DR与BDR,在2-way之后进行DR与BDR的选举

(2)交换LSDB过程(exstart—>exchange)

路由器在交换LSDB之前,会选举一台主路由器来主导整个交换过程,这是在exstart阶段。

选举主从关系是为了保证DBD报文有序可靠的传输

exstart:

所有人都默认自己是主路由器,发送空的DBD包(不含有LSA索引,含有RID,MS位,M位,I位都会置为1)。收到对方的空DBD包后,比较RID,谁大就能够成为主路由器。从路由器需要发送一个DBD包对主路由器进行响应。然后进入exchange阶段。

exchange:

在主路由器的带领下开始交换LSDB,主路由器发送DBD包,从路由器总是要响应。从路由器发送的DBD包全部是对主路由器发送的DBD包的响应。

(3)同步链路状态数据库(loading—>full)

DBD交换完毕之后,路由器就有了邻居的LSA索引,路由器进入loading状态,开始请求自己没有的LSA,路由器会发送一个LSR来请求多个LSA,对端回复LSU包告诉自己需要的信息,再给对端回复LSAck包来确认收到了LSU。若两端不在发送LSU和LSR则LSDB同步完成,进入full状态。

DR与BDR的选举过程

当多台OSPF路由器连到同一个多路访问网络中时,如果每两台路由器之间都互换LSA,那么整个网段中将充斥众多的LSA,为了减少流量与同步,需要选举出一个核心路由器DR。所有的OSPF路由器都与DR交换LSA,这样DR就拥有了该网段所有的LSA,并把所有的LSA转发给其他路由器。BDR为DR的备份路由器,在DR不可用时替代DR的工作。其他路由器称为Dother,Dother除了和DR交换LSA之外,同时还会和BDR交换LSA。但DR与BDR不会互换LSA。

选举规则

选举最高接口优先级的为DR,优先级数字越大,优先级越高。如果优先级相等(默认为1),RID大的成为DR。若优先级为0则表示不参加选举。

在一个多路访问网络中,选举DR和BDR是有时间限制的,该时间为Wait时间,默认为4倍的Hello时间,即与Dead时间相同,如果OSPF路由器在超过Wait时间后也没有其它路由器与自己竞争DR与BDR的选举,那么就选自己为DR;当一个多路访问网络中选举出DR与BDR之后,在DR与BDR没有失效的情况下,不会进行重新选举,也就是在选举出DR与BDR之后,即使有更高优先级的路由器加入网络,也不会影响DR与BDR的角色,在越出选举时间(Wait时间)后,只有DR与BDR失效后,才会重新选举。DR失效后,会同时重新选举DR与BDR,而在BDR失效后,只会重新选举BDR。

组播地址

DR,BDR ---------向224.0.0.5发送-----------------> Dother

Dother ----------向224.0.0.6发送------------------>DR,BDR

所有人都能监听224.0.0.5,而DR,BDR同时还监听224.0.0.6

路由器类型

  • 区域内路由器–IR:所有接口都属于同一个OSPF区域
  • 区域边界路由器–ABR:同时属于两个或以上区域,其中一个是骨干区域
  • 骨干路由器:至少有一个接口属于骨干区域,ABR与area 0内部设备都是骨干路由器
  • 自治系统边界路由器–ASBR:引入了外部路由信息的设备

image-20200826162118877

LSA类型

LSA概念

LSA是路由器建立的用来描述链路状态信息的一种数据结构,保存在LSDB中,承载在LSU中发出,描述的是链路状态或接口的状态及每条链路的成本。

LSA序列号

image-20200831174617754

image-20200827105132388

类型1:路由器LSA,Router LSA

  • 产生者:所有路由器

  • 作用:通告自身直连接口的信息(包括链路类型,cost等)

  • 范围:只允许在本区域内泛洪,不允许跨越ABR。

  • Link ID是通告该LSA的路由器RID。

  • 需要选举DR的网络中1类LSA不包含掩码

类型2:网络LSA,Network LSA

  • 产生者:DR
  • 作用:通告链路上的路由器和网段掩码信息
  • 范围:只在本区域内泛洪,不允许跨越ABR
  • Link ID是DR进行宣告的那个接口的IP地址。

类型3:网络汇总LSA,Summary Net LSA

  • 产生者:ABR
  • 作用:汇总本区域内类型1,2类LSA通告给其他区域
  • 范围:整个OSPF网络
  • Link ID是域间路由的路由前缀,一条域间路由对应一条3类LSA
  • ABR收到来自同区域其他ABR的3类LSA,会重新生成3类LSA,然后将Advertising Router改为自己,然后继续在整个OSPF网络内扩散。

类型5:自治系统外LSA,AS External LSA

  • 产生者:ASBR

  • 作用:通告外部路由信息

  • 范围:整个OSPF网络

  • Link ID是域外路由的路由前缀,一条域外路由对应一条5类LSA

  • ADV Router在传递过程中不变

  • 外部路由通过重分布引入OSPF,路由条目由ASBR以5类LSA的形式生成然后进入OSPF路由域

image-20200827112857680

类型4:ASBR Summary LSA

  • 产生者:ABR
  • 作用:通告ASBR的位置
  • 范围:整个OSPF网络
  • Link ID为目的ASBR的RID
  • ADV Router在经过ABR时会改变

image-20200827114340425

类型7:NSSA中的外部LSA,NSSA External LSA

  • 产生者:ASBR
  • 作用:通告外部路由信息
  • 范围:NSSA区域

image-20200827114726921

路由标识符

O:Type1、2,在区域内泛洪,区域内路由

O IA:Type3,区域间路由

O E2,O E1:Type5,OE2 开销=外部开销=20(默认)

​ OE1开销=外部开销+内部开销

O N2, O N1:Type7,与OE2,OE1相似

优先级:O>O IA>O E1>O E2

LSA类型图

image-20200827115859334

OSPF区域类型

分类:

  • 骨干区域
  • 普通(标准)区域
  • 末节区域
  • 完全末节区域
  • NSSA区域
  • 完全NSSA区域

1. 骨干区域

所有区域必须连接骨干区域

在ABR上做汇总的好处是减少进出不必要的路由

2. 标准区域

接受所有内部和外部的路由信息,默认情况下就是标准区域

3. 末节区域-Stub Area

不接受自治系统的外部路由信息进入,不接受4类和5类LSA。

ABR会生成默认路由(LSA 3 )通告进入stub区域,metric值为1

4.完全末节区域-Totally Stub Area

阻挡3、4、5类LSA,同时向内部传递一条默认路由(LSA3的形式)

配置注意点:

区域内不能用ASBR和虚链路,

特殊区域内所有路由器都需要配置成Stub,

有多个ABR时,到其他区域可能有次优路径,需要注意选路(修改cost):area 1 default-cost 10

5.NSSA-Not-so-Stub-Area

Stub区域的变种,既想阻挡5类LSA,又想引入外部路由.

ABR上会过滤4\5类LSA,默认不会向内部传递默认路由,使用default-information-originate命令产生默认路由(7类LSA的形式),但是允许引入外部路由。

LSA7在NSSA内泛洪,通过ABR时转换为5类LSA。

6.Totally-NSSA

进一步阻挡3、4、5类LSA进入,同时向内部传递一条默认路由(LSA3的形式),允许引入外部路由

7.特殊区域的应用

image-20200831163946958

OSPF网络类型

  • 点到点
  • 点到多点
  • 广播
  • 点到多点非广播
  • 非广播

OSPF是一个考虑周全的路由协议,并不像RIP和EIGRP那样在运行时不考虑OSI模型在二层定义的内容。OSPF在运行时必须考虑链路的类型,称为OSPF网络类型。对于不同的二层介质类型,OSPF有不同的运行过程和操作。

image-20200831165223715

设置DR选举的优先级:

int f0/x

ip ospf priority [number]

默认优先级为1,范围0-255

修改OSPF网络类型

int f0/x

ip ospf network [network_type]

OSPF认证

出于安全考虑,OSPF使用了认证。OSPF同时支持明文和MD5认证。在启用OSPF认证后,Hello包中将携带密码,双方Hello包中的密码须相同才能建立邻居关系。空密码也是密码的一种。

认证可以在接口上认证,也可以在区域中认证。

区域认证与多个接口上一个一个开启认证没有本质区别。

接口认证是在接口模式下进行,区域认证是在OSPF进程下进行。

明文

  • 接口

接口下:

ip ospf authentication-key [password]

ip ospf authentication

  • 区域

接口下:

ip ospf authentication-key [password]

进程下:

area [area-id] authentication

密文

  • 接口

接口下:

ip ospf message-digest-key [key-id] md5 [key]

ip ospf authentication message-digest

  • 区域

接口下:

ip ospf message-digest-key [key-id] md5 [key]

进程下:

area 0 authentication message-digest

区域认证和接口认证冲突时,以接口为准。

区域0启用认证后,同时也开启了虚链路认证。

虚链路-Virtual Link

image-20200831172003240

虚链路被用于一个不连接的区域连接到区域0。

虚链路一般用于备份或临时连接。

虚链路属于区域0

image-20200831172040231

image-20200831172718316

image-20200831172741643

路由汇总

路由汇总的好处:

最小化路由条目的数量

局部拓扑变化的影响

减少3、5类LSA泛洪并节省CPU资源。

OSPF汇总特点

无自动汇总,只有手动汇总

汇总方式:域间汇总,域外汇总

配置路由汇总后,邻居将学到汇总后的路由,而配置路由汇总的路由器本身将创建一条指向null 0 接口的汇总路由,防止环路。

配置

image-20200831175659316

域间汇总

image-20200831175555036

域外汇总

image-20200831175735624

默认路由

面对ISP的出口路由器下发默认路由(以5类LSA向OSPF中注入默认路由):

默认不开启,使用default-information originate 开启。

只有当默认路由已经存在路由表中才会通告默认路由。

ospf 进程下:

default-information originate always :强制下发默认路由。

default-information originate metric 100:可以修改cost

配置命令:

单区域配置:

router ospf 100

​ router-id 1.1.1.1

​ network 10.1.1.1 0.0.0.255 area 0

RID用于标识路由器。可以手动设置,也可以自动选举。

若存在loop back接口,则RID是活跃loopback接口上最大的IP地址。若不存在loopback接口,则RID是活跃的物理接口中最大的IP地址。

重新设置RID

clear ip ospf process:需重启路由器或OSPF进程

show命令:

show ip ospf

show ip route ospf 100

show ip ospf int f0/x

show ip ospf int brief

show ip ospf nei

show ip ospf database

show ip ospf database router

show ip ospf database network

show ip ospf database summary

show ip ospf database asbr-summary

debug ip ospf adj

修改接口cost:

int f0/x

k接口上最大的IP地址。若不存在loopback接口,则RID是活跃的物理接口中最大的IP地址。

重新设置RID

clear ip ospf process:需重启路由器或OSPF进程

show命令:

show ip ospf

show ip route ospf 100

show ip ospf int f0/x

show ip ospf int brief

show ip ospf nei

show ip ospf database

show ip ospf database router

show ip ospf database network

show ip ospf database summary

show ip ospf database asbr-summary

debug ip ospf adj

修改接口cost:

int f0/x

ip ospf cost 10