目录

OSPF邻居关系的建立及握手过程

邻居发现

邻居(Neighbouring)关系的建立过程

邻接(Adjacency)关系建立过程

影响邻居关系及邻接关系建立的问题

OSPF网络类型

OSPF报文与区域

OSPF报文结构

LSA格式及类型

OSPF区域

OSPF协议特性

路由汇总

Virtual Link

默认路由

报文认证

转发地址

OSPF路由防环机制

OSPF路由类型及优先级

内容

OSPF邻居关系的建立及握手过程

邻居发现

OSPF通过Hello报文发现维持邻居关系,邻居关系是指达到2-way状态的路由器之间的关系。

OSPF发送Hello报文方式

在不同网络上,OSPF发送Hello报文方式不同:

时间上,broadcast和P2P网络中,Hello报文10s发送一次; NBMA和P2MP上30s发送一次。

Broadcast、P2P、P2MP,OPSF通过目的地址为244.0.0.5(AllOSPFRouter)来自动发现邻居。而在NBMA网络中需要手动指定邻居。

建立邻居关系时报文字段的检查

在建立邻居关系时,路由器必须对Hello报文中携带的“参数”达成一致,对参数进行检查对比,以下是需要对比的参数:

Hello/Dead Interval:全部一致才能建立邻居关系。

Area ID(在Hello报文头部中):全部一致才能建立邻居关系。

Area Type:参考Hello报文的Option位,全部一致才能建立邻居关系。

Authentication Type和密钥:全部一致才能建立邻居关系

Router ID:不能一样才能建立邻居关系。

邻居(Neighbouring)关系的建立过程

下面以图示来说明邻居(Neighbouring)关系的建立过程:

DOWN

假设两个路由器运行OSPF,正准备建立邻居关系。此时两台路由器在对方眼里都处于DOWN状态。

DOWN -> INIT

路由器A发送了第一个报文,路由器B接收到了,B将会把A加入到邻居列表中,并将A的状态标记为INIT。

DOWN -> Two-Way

B发送Hello报文,并声明看见了邻居A,当A收到该报文后,将B加入邻居列表中,并将其状态转移到Two-Way。

INIT -> Two-Way

此时A发送了一个Hello报文,并声明看见了邻居B,当B收到该报文后,将A的状态转移到Two-Way。

邻接(Adjacency)关系建立过程

邻接(Adjacency)关系建立的对象

在broadcast和NBMA网络上,DROther彼此之间保持在2-way状态,而只与AllDRouter之间形成邻接关系。

在其他OSPF类型网络上,不需要DR,邻接关系发生在2-way状态之后。

邻接关系状态迁移过程如下图所示[3:Page54:Fig14]:

 

信息交换初始状态(ExStart)

动作:路由器之间互相发送空的DD(Database Description)报文。

作用:确定Slave / Master关系、确定DD初始化序列号、比较接口MTU。

信息交换状态(Exchange)

动作:Master和Slave路由器之间互相DD报文。

作用:用于数据库同步的标识信息传递。

信息加载状态(Loading)

动作:Master和Slave之间使用上一状态获取的标识符来向对方索取自己没有的LSDB表元。

作用:同步路由器的LSDB。

完全邻接状态(Full)

动作:当路由器发现自己已经同步LSDB后,将邻居状态更改到Full。

作用:表明自己已经不需要从某个邻居同步LSBD。

影响邻居关系及邻接关系建立的问题

有以下几种原因影响Adjacency关系的建立:

1. 主IP网络和掩码

在broadcast网络中,如果两个路由器发送hell报文源IP地址和hello中的子网掩码确定的子网不一致,则不能建立neigbouring relationship,而P2P和P2MP没有此要求。

2. MTU不一致

由于MTU不一致,如果DD、LSRequest、LSUpdate报文过大,会导致报文被对方忽略,而OSPF没有提供手段自动检测该情况,所以邻居状态可能会一直停留在ExStart、Exchange、loading状态之一。

OSPF网络类型

OSPF接口根据链路类型可分为4种网络类型:

1. P2P(Point-to-Point)

这种网络类型工作在只有两个节点的环境中,彼此之间不需要选举DR,建立邻居关系后直接开始同步数据库。链路层运行协议有PPP、HDLC和FrameRelay。

2. broadcast

支持广播的网络环境,该网络允许多台路由器介入,任意两台路由器之间都能直接进行二层通信,一个广播报文能被其他所有路由器接收到。

3. NBMA(Non-broadcast Multi-Access)

不支持广播,该网络允许多台路由器介入,任意两台路由器之间都能直接进行二层通信。

4. P2MP(Point-to-Multipoint)

逻辑上等同于多个P2P网络的组合。

OSPF报文与区域

OSPF报文结构[3]

OSPF通用头部

所有OSPF报文都有一个相同的头部,长度为24byte,如下图所示:

Version

OSPF版本号,在本上下文中为2。

Type

表明该报文的类型,对应关系如下表所示:

Packet length

OSPF报文长度的byte数,包含该头部的长度

Router ID

路由器的OSPF Router-ID。

Area ID

报文所属的Area ID。

Checksum

校验报文是否有效。

Autype

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

Authentication

用于报文认证的内容。

Hello报文

Hello报文是OSPF报文类型1,在所有接口上周期性发送以建立保持邻居关系,报文结构如下所示。

Network mask

发送该报文的接口的网络掩码。

HelloInterval

发送Hello报文的时间间隔。

Options

被发送者用来通告自己具有某种能力。

Rtr Pri

路由优先级,用于DR、BDR的选举。

RouterDeadInterval

在邻居路由器被视为无效之前需要等待对方发送Hello报文的时间。

Designated Router

本网段中DR的接口IP地址。

Backup Designated Router

本网段中DR的接口IP地址。

Neighbor

邻居列表,用Router-ID标识,记录当前路由器已知的链路上所有邻居的RID。

DD(Database Description)报文

Interface MTU

不分片下,此接口最大可发出的IP报文长度。

Options

被发送者用来通告自己具有某种能力。

I(Initialization)

为1时代表这是第一个DD报文,否则为0。

M(More)

为1表示后续DD报文中还有LSA Header,否则为0。

MS(Master / Slave)

当两台OSPF路由器交换DD报文时,要确定双方的主从关系,RouterID大的一方称为Master,为1时表示Master,0表示Slave。

DD Seq NR

DD报文序列号,用以保证DD报文传输的可靠性。

LSA Headers

本LSBD的LSA header。

LSR(Link-State Request)报文

在与OSPF邻居交换DD报文后,路由器知晓了邻居的LSDB摘要,路由器使用该报文来请求所需的LSA,LS type、Link State ID和Advertising Router字段唯一地标识了一个LSA。

LS type

指示LSA的类型,例如Router LSA、Network LSA、Network Summary LSA、ASBR Summary LSA、AS External LSA等。

Link State ID

 LSA的标识。

Advertising Router

产生该LSA的Router-ID。

LSU报文

路由器接收到LSR后,会以LSU回应,在LSU报文中包含着对方请求的LSA。

# LSAs(NR of LSAs)

标识LSU中包含的LSA的个数。

LSAs

LSA的列表。

LSAck报文

为了确保LSA能够可靠送达,当一台路由器收到邻居发来的LSU报文时,需要对报文中包含的LSA进行确认,LSA header唯一地标识了一个LSA。

LSA header

LSA的头部,唯一标识一个LSA。

LSA格式及类型

LSA头部

LS age

LSA产生后所经过的时间,以s计。

Options

宣告自己具有某种能力。

LS Type

代表不同的LSA类型。

Link State ID

与LS Type和Advertising Router一起标识一个LSA,具体的LS Type和Link State ID的对应关系[3 : Page 119 : Table 16]:

Advertising Router

记录产生该LSA的路由器的Router ID。

LS Sequence NR

LSA的序列号。

LS Checksum

除了LS age以外其他域的校验和。

Length

LSA的总长度,包含LSA header,以byte计。

LSA类型

Router-LSA(Type 1)

产生设备:每个Router。

作用:描述该路由器所有OSPF直连接口的状况和Cost值。

报文传播范围:所属Area。

报文格式:

V(Virtual):

如果为1表示该路由器为Virtual Link的端点。

E(External):

如果为1表示该路由器为ASBR(Autonomous Systen Border Router)。

B(Border):

如果为1表示该路由器为ABR(Area Border Router)。

# links:

该Router LSA描述的链路(Link)数量,每个Link在逻辑上是一个4元组(link type,link ID,link data,metric)。

Link ID:

该路由器连接到的对象的标识符。

Link Data:

链路数据。

Link Type:

链路类型(并非OSPF网络类型!),如下表所示:

链路类型 描述 Link ID Link Data
1 点到点(P2P)连接到另一台路由器 邻居的Router-ID 产生该LSA的路由器的接口IP地址
2 连接到一个传输网络(Transit) DR的接口IP地址 产生该LSA的路由器的接口IP地址
3 连接到一个末梢网络(Stub) 网络IP地址 网络掩码
4 虚链路(Virtual) 邻居的Router-ID 产生该LSA的路由器的接口IP地址

 

metric:

Cost的值。

Network-LSA(Type 2)

产生设备:DR。

作用:描述该MA网络的子网掩码和邻居Router-ID

报文传播范围:所属Area。

报文格式(简洁起见,除去了LSA Header):

network mask

该MA网络的网络掩码。

Attached Router

介入到该MA网络的路由器的Router-ID。

Network-Summary-LSA(Type 3)

产生设备:ABR。

作用:描述了到达某个区域的目标网段路由

报文传播范围:所属Area。

报文格式(简洁起见,除去了LSA Header):

Network mask:

被通告的网络的子网掩码(The subnet mask of an advertised network)。

metric:

路由的cost。

TOS、TOS metric:

REF [3]

ASBR-Summary-LSA(Type 4)

产生设备:ABR。

作用:描述了到达某个ASBR的主机路由

报文传播范围:所属Area。

报文格式:

同Network-Summary LSA报文格式一致。

Network mask:

恒为0.0.0.0,LSA header中的LSID为该ASBR的Router-ID。

metric:

路由的cost。

TOS、TOS metric:

REF [3]

AS-External-LSA(Type 5)

产生设备:ASBR。

作用:描述了OSPF domain外部的目标网段路由

报文传播范围:OSPF domain。

报文格式(简洁起见,除去了LSA Header):

Network Mask:

 外部路由的目的网络掩码。

E:

1表示Metric-Type-2类型度量值类型,否则为Metric-Type-1。

metric:

该外部路由的cost。

Forwarding address:

若该字段为0.0.0.0时,到达该外部网段的流量会被发往引入该条路由的ASBR,否则转发到该地址。

External Route Tag:

外部路由才能携带的标记,用于部署路由策略。

其他不重要字段:

REF [3]

NSSA LSA(Type 7)

产生设备:ASBR。

作用:描述了OSPF domain外部的目标网段路由

报文传播范围:所属NSSA。

报文格式:同ASE LSA。

OSPF区域

骨干区域(Backbone Area)

角色:OSPF domain的核心即Area0,所有域间路由必须通过它来中转。

允许泛洪的LSA:RouterNetworkNetwork SummaryASBR SummaryASE

常规区域(Normal Area)

角色:OSPF domain的非核心区域,知晓本域内所有路由信息(包括引入的路由)。

 

允许泛洪的LSA:RouterNetworkNetwork SummaryASBR SummaryASE

末梢区域(Stub Area)

角色:相当于阻挡ASE LSANormal Area,区域内部路由器不需要根据特定外部路由来选择特定出口的区域。ABR下发一个Network Summary默认路由,表明可以到达OSPF domain外的目的网段。

 

允许泛洪的LSA:RouterNetworkNetwork Summary

 

Totally Stub Area

 

角色:相当于阻挡Network SummaryStub AreaABR下发一个Network Summary 默认路由,表明可以到达本Area外的目的网段。

允许泛洪的LSA:RouterNetworkNetwork Summary(默认路由)

 

非完全末梢区域(Not-So-Stubby Area)

角色:相当于引入了一些ASE路由的Stub Area

允许泛洪的LSA:RouterNetworkNetwork Summary,NSSA Externel(外部路由,默认路由)

 

Totally NSSA

 

角色:相当于引入了一些ASE路由的Totally Stub Area

允许泛洪的LSA:RouterNetworkNetwork Summary(默认路由),NSSA Externel

OSPF协议特性

路由汇总

OSPF支持两种路由汇总,一种部署在ABR上,另一种部署在ASBR上:

 1. ABR上部署路由汇总。

只能在ABR上完成路由汇总,并且只能汇总ABR直连区域内部路由。

2. 在ASBR上部署路由汇总。

只能在ASBR上完成路由汇总,并且只能汇总ASBR引入的外部路由。

Virtual Link

一条在路由器之间建立的逻辑通路。

默认路由

Normal Area中发布默认路由

OSPF认为在执行路由重分发时,如果把默认路由引入OSPF存在引发环路的风险,所以不能通过引入静态路由来发布默认路由,以防止失误。

Stub Area中发布默认路由

Stub Area中的ABR会在区域内下发一个Network Summary LSA来使Stub Area内部流量能够通过ABR到达OSPF domain外部。

Totally Stub Area中发布默认路由

Totally Stub Area中的ABR会在区域内下发一个Network Summary LSA来使Totally Stub Area内部流量能够通过ABR到达该区域外部。

NSSA中发布默认路由

NSSA只能学习到自己引入的外部路由,而OSPF domain外其他的外部路由不能被学习到。因此,NSSA ABR将会分发一个默认路由来引导到OSPF domain外部的流 量。

Totally NSSA中发布默认路由

NSSA只能学习到自己引入的外部路由,而该区域外的其他路由不能被学习到。因 此,NSSA ABR将会分发一个默认路由来引导到该区域外部的流量。

报文认证

空认证

简单口令认证

密文认证

转发地址

一种防止次优化的手段,见实验。

OSPF路由防环机制

区域内部防环

由于区域内部的lsdb的同步机制,在同一个域中的路由器将会拥有一致的Area-Intra (Type1和Type2 LSA)lsdb,根据生成树算法会得到一个无环图。

区域间防环

网络结构防环

所有非backbone area必须与backbone area相连接,Area-inter路由需要经过Area0中转。

Network Summary LSA防环机制

1. ABR从Non-backbone area收到的Network Summary LSA不能用于Area-Inter路由的计算。

2. ABR只能把自己到达所连接区域的Area-Intra路由注入Area0。另外,可以将所到达的Area-Intra路由和到达其他区域的Area-Inter路由注入Non-backbone Area。

3. 水平分割:ABR不会将到达某个区域内的网段路由的Network Summary LSA再次通告回去。

MPLS VPN防环

HCNP R&S 不做要求,略去。

外部路由防环

外部路由由ASE LSA和ASBR LSA描述,根据Router LSA、Network LSA、Network Summary LSA可以保证到达ASBR无环路,ASBR再将流量送出OSPF domain。

OSPF路由类型及优先级

以下按照优先顺序枚举OSPF路由类型:

Area-Intra Route

Area-Inter Route

Metric-Type 1 Route

Metric-Type 2 Route

 

参考文献

[1] HCNP 路由交换学习指南

[2] HCIE 路由交换学习指南 //这本书有点鸡肋,叙述协议不如看RFC文档,概念顺序安排不当,有价值的可能就是一些配置实例。

[3] RFC 2328,OSPF version2 official standard

posted on 2019-06-04 21:07  ycc_job  阅读(1364)  评论(0编辑  收藏  举报