路由协议分类

按路由分类

按路由区分.png

按工作机制、算法分类

按工作机制、算法分类.png

按有类、无类分类

有类、无类.png

按工作区域分类

按工作区域分类.png

OSPF简介

无路由自环

支持等价负载

只可能在双向路由引入时成环(用TAG打标签可解决)

可适应大规模网络

无限广大网络协议

一个区域里最大255个路由器,但是可以有2的32次方个区域

路由变化收敛速度快

触发更新

支持区域划分

骨干区域和非骨干区域

骨干区域:Area 0

非骨干区域:除Area 0以外

支持等值路由

支持等价负载均衡 1:1

支持验证

可配置验证

支持以组播地址发送协议报文

Dothers使用:224.0.0.5

DR/BDR使用:224.0.0.6

也会使用单播

支持多种网络类型

1.广播型网络区域(MA)

2.非广播多路访问(NBMA)

3.点到点(P2P)

4.点到多点(P2MP)

两台路由器运行OSPF协议的路由器若希望建立邻居关系,则必须满足的条件:

  1. 区域号要一致

  2. 均不配置验证、若均配置验证,需密钥完全相同

  3. 两端的HelloDead Time时间间隔完全一致

OSPF协议概述

  • OSPF属于【内部网关路由协议】

  • 用于单一自治系统【Autonomous System一AS】内决策路由

自治系统的概念

  1. 运行在同一个AS内用于决策路由的协议称之为内部网关协议

  2. 用来连接不同的AS,使之能够相互通信的协议被称之为外部网关协议

  3. 执行统一路由策略的一组网络设备组成的环境称之为一个自治系统(AS)

  • 为了适应大型的网络,OSPF在AS内划分多个区域,每个OSPF路由器只维护所在区域的完整链路状态信息

  • OSPF是链路状态路由协议,链路状态路由协议中的路由器了解OSPF网络内的链路状态信息

  • 链路状态路由协议中,直连的路由器之间建立邻接关系,互相【交流】链路信息,来【绘制】出完整的网络结构

  • Router ID:在OSPF区域内唯一标识一台路由器的IP地址

Router lD选取规则

  1. 若管理员手工指定,则使用指定的P地址

  2. 若没有手工指定,则路由器选取它所有Loopback接口上数值最高的lP地址

  3. 若不存在Loopback接口,就在所有物理端口中选取一个数值最高的P地址

OSPF建立并维护的3张表项

  1. 邻居表:列出每台路由器全部已建立邻接关系的邻居路由器

  2. 链路状态数据库【LSDB】:列出每台路由器的信息,由此显示了全网的网路拓扑

  3. 路由表:列出通过SPF算法计算出的到达每个相连网络的最佳路径

具体过程

  1. 通过直连链路发送Hello包,建立邻居关系,将邻居的信息放入邻居表中

  2. 再通过直连的邻居学会全网的网络结构,放入LSDB中

  3. 在全网网络结构中通过SPF算法计算出最佳路径

OSPF的关系

  • 邻居关系(2-Way)

  • 邻接关系(Full)

OSPF建立关系需要使用7种状态和五种报文:

  • 7种状态:Down Init 2-Way ExStart Exchange Full(全毗邻)

  • 5种报文:Hello DBD LSR LSU LSAck

报文名称

报文功能

Hello

周期性发送,用来发现和维护OSPF邻居关系

Database Description

描述本地LSDB的摘要信息,用于两台设备进行数据库同步

Link State Request

用于向对方请求所需要的LSA。设备只有在OSPF邻居双方成功交换DD报文 后才会向对方发出LSR报文

Link State Update

用于向对方发送其所需要的LSA

Link State ACK

用来对收到的LSA进行确认

OSPF建立邻接关系的全过程

初始发现与双向通信(Down → Init → 2-Way)​​

  • Down(关闭状态)​​:这是起点,表示尚未与任何邻居进行通信。

​Init(初始化状态)​​:当路由器从其接口收到一个OSPF Hello报文时,会进入此状态。这表示它发现了邻居,但还需要确认对方是否也发现了自己。(自身的Router-ID并不在所收到的Helo报文的邻居列表中)

  • 2-Way(双向通信状态)​​:当路由器在自己收到的Hello报文中,发现邻居的「邻居列表」里包含了自己的Router ID时,就表明双向通信已经建立。此时,双方成为「邻居」(Neighbor)。在广播或NBMA网络中,所有路由器会在此阶段选举DR(指定路由器)​​ 和 ​BDR(备份指定路由器)​,以优化邻接关系数量。之后,只有DRBDRDROther之间才会继续建立更紧密的「邻接」关系。(存在自身的 Router ID)

​数据库同步的核心协商(ExStart → Exchange)​​

  • 2-Way状态开始,需要建立邻接关系的路由器会进入数据库同步过程。

  • ExStart(交换启动状态)​​:双方会像谈判一样,通过交换空的DD(数据库描述)报文来选举一个「主」设备​(Master)。Router ID较大的通常会成为主设备,负责管理后续DD报文的发送序列,确保交换过程有序。(在此状态下发送的DBD报文不包含链路状态描述)

  • Exchange(交换状态)​​:主从关系确定后,双方开始正式交换包含LSA(链路状态通告)头部信息的DD报文。这些摘要就像书籍的目录,让对方快速了解自己数据库里有哪些网络拓扑信息,从而找出彼此缺失的部分。

​最终同步与完全邻接(Loading → Full)​​

  • ​Loading(加载状态)​​:根据交换得到的「目录」,路由器会使用LSR(链路状态请求)​​ 报文向邻居请求自己缺失的、具体的LSA详情。邻居则用LSU(链路状态更新)​​ 报文来回应这些请求,请求方在收到后会回复LSAck(链路状态确认)​​ 进行可靠确认。这个过程会持续到所有缺失的LSA都被补全。

  • Full(完全邻接状态)​​:当双方的链路状态数据库(LSDB)​​ 完全同步一致时,就达到了Full状态。此时,邻居关系正式升级为邻接关系(Adjacency)​。此后,它们就可以基于完全相同的网络拓扑地图,独立地计算出最优的路由路径了。(路由器已经完成了与邻居的LSDB同步,准备进行SPF计算,生成RIB【路由表项】)

「邻居」不等于「邻接」​​

  • 所有达到Full状态的路由器都是「邻接」,但「邻居」可能只停留在2-Way状态(如广播网络中的两台DROther路由器之间)

流程图

时间间隔

网络类型​

Hello间隔​

​Dead间隔​

是否需要选举DR/BDR​

典型建立时间(稳定网络)​​

广播 / 点对点​

10秒

40秒

广播需要,点对点不需要

30 - 40秒​

NBMA / 点对多点​

30秒

120秒

NBMA需要,点对多点不需要

​90 - 120秒

网络类型

对应的二层网络

是否选举DR/BDR

Hello/Dead 时间

Others

广播型网络

以太网

10s / 40s

组播/单播

非广播多路访问网络

Frame Relay

30s / 120s

需手动配置(单播)

点到点网络

PPP

10s / 40s

组播

点到多点网络

Null

30s / 120s

组播/单播

DBD报文部分字段解释

  • I【Init】:当发送连续多个DBD报文时,若这是第一个DBD报文,则置位为1,否则置位为0

  • M【More】:当发送连续多个DBD报文时,若这是最后个DBD报文,则置位为0,否则为1,表示后续还有其它的DBD报文

  • MS【Master/Slave】:当两台OSPF路由器交换DBD报文时,首先需要确定双方的主从关系,Router-lD较大的一方会成为Master;当该值为1时,表示发送方为Master

  • DBD报文序列号(DBD Sequence Number):主/从双方利用序列号来保证DBD报文传输的可靠性与完整性

实验拓扑如图所示:

抓包分析:

备注:

  • 显式确认:会发一种独立的报文用于对接收到的消息做确认

  • 隐式确认:通过发送另一种报文把确认报文包含在其中发送

在OSPF中:

  1. DBD为隐式确认

  2. LSU、LSAck为显式确认

验证:

R2发给R1的报文:

此时的R1和R2在协商主从,R2的Router ID更大,故R2为DR。

R1给R2的回包:

可见,Seq值变为了R2的Seq值,完成了隐式确认,确认R2为DR。

模拟器验证

[R1]dis ospf peer 

	 OSPF Process 1 with Router ID 10.1.1.1
		 Neighbors 

 Area 0.0.0.0 interface 10.1.1.1(GigabitEthernet0/0/0)'s neighbors
 Router ID: 10.1.1.2         Address: 10.1.1.2        
   State: Full  Mode:Nbr is  Master  Priority: 1
   DR: 10.1.1.2  BDR: 10.1.1.1  MTU: 0    
   Dead timer due in 31  sec 
   Retrans timer interval: 5 
   Neighbor is up for 00:03:08     
   Authentication Sequence: [ 0 ] 
  1. R2开始向R1发送LSR报文,请求那些在Exchange状态下通过DBD报文发现的,且在本地LSDB中没有的链路状态信息

  2. R1向R2发送LSU报文,LSU报文中包含了哪些被请求的链路状态的详细信息;R2在完成LSU报文的接收,且没有其它待请求的LSA后,会将邻居状态从Loading转变为Full状态

  3. R2向R1发送LSAck报文,作为对LSU报文的显示确认

思考:主从设备谁先发起LSR

  1. 主从选举的核心目的​:在Exchange状态,主设备(Master)负责控制DD(Database Description)报文的序列号,从而管理摘要信息的交换过程,确保其可靠性和有序性​。这好比一个会议中需要确定一个主持人来控制发言顺序。需要注意的是,选举主从时比较的是Router ID,而选举DR/BDR时先比较优先级,这是两个独立的过程

  2. ​LSR的触发时机​:当双方路由器在Exchange状态完成DBD报文(其中包含LSA的头部摘要信息)的交换后,都会进入Loading状态。此时,​每一台路由器都会将收到的对端LSA摘要与自身的LSDB进行对比​。一旦发现存在自己数据库中没有的LSA,或者对端的LSA比自己的更新(通过序列号等判断),该路由器就会立即主动向对方发送LSR报文,请求完整的LSA数据

  3. ​关键交互​:收到LSR的一方会使用LSU(链路状态更新)报文来回应,携带对方所请求的完整LSA信息。请求方在收到LSU后,会回复LSAck报文进行确认,确保传输的可靠性

​Master/Slave角色管的是「目录」(DBD摘要)的交换顺序,而LSR的发起则是每台路由器根据「目录」对比自家「藏书」(LSDB)后,自主决定需要借阅哪本「书」(LSA)的行为。

Options字段中各关键字解析

  1. DN:用来避免在MPLS VPN中出现环路;当PE向CE发送3类、5类与7类LSA时需要设置DN位,其它PE路由器从CE接收到该LSA时,不能够在它的OSPF路由计算中使用该LSA

  2. O:该字段指出始发路由器支持Ppaque LSA【类型9、类型10与类型11】

  3. DC位:当始发路由器支持按需链路上的OSPF的能力时,该位将被设置

  4. N位:N=1表明路由器支持7类LSA;N=O表明该路由器将不接收与发送NSSA LSA

  5. P位:只用在NSSA LSA;该位将告诉NSSA区域的ABR路由器将7类LSA转换为5类LSA

  6. MC位:当始发路由器支持转发组播数据包的能力时,该位将被置位

  7. E位:当始发路由器具有接收AS-external-LSA【Type-5LSA】的能力时,该位被置位;在所有5类LSA与始发于骨干区域以及非末节区域的LSA中,该位置为1。而始发于末节区域的SA中,该位置为0。若Hllo报文中该位被置位则表明该接口具有接收与发送5类LSA的能力

  8. MT位:表示始发路由器支持多拓扑OSPF

  9. Do Not Age Flag:LSA不老化标志位,该置于1,则表示该LSA不老化,此情况只在DC【虚电路】中应用

备注:华为设备默认是不开启端口MTU检测的,故抓包中MTU值为0。

但是在接口中可以查看,MTU为默认值1500。

[R1]dis ip interface 
GigabitEthernet0/0/0 current state : UP 
Line protocol current state : UP
The Maximum Transmit Unit : 1500 bytes
input packets : 230, bytes : 15776, multicasts : 225
output packets : 226, bytes : 15412, multicasts : 219
Directed-broadcast packets:
 received packets:            0, sent packets:            0 
 forwarded packets:           0, dropped packets:           0 
ARP packet input number:           3
  Request packet:                  2
  Reply packet:                    1
  Unknown packet:                  0
Internet Address is 10.1.1.1/24 
Broadcast address : 10.1.1.255
TTL being 1 packet number:       230
TTL invalid packet number:         0
ICMP packet input number:          0
  Echo reply:                      0
  Unreachable:                     0
  Source quench:                   0
  Routing redirect:                0
  Echo request:                    0
  Router advert:                   0
  Router solicit:                  0
  Time exceed:                     0
  IP header bad:                   0
  Timestamp request:               0
  Timestamp reply:                 0
  Information request:             0
  Information reply:               0
  Netmask request:                 0
  Netmask reply:                   0
  Unknown type:                    0

扩展

  • 选举时是先选BDR

  • 从设备先向主设备要LSA

  • 只有DR,没有BDR,可以正常通信

  • 若无SPF算法,路由器和路由条目的数量应该为:路由条目数= [n*(n-1)]/2,其中n为路由器数量,默认全连接

  • 若两个路由器同时启动OSPF,则会在2Way状态下卡40s,此时在选举DR/BDR

OSPF的LSA介绍

LSA类型

名称

产生者

泛洪范围

核心功能描述

Type 1

Router LSA(路由器LSA)

所有 OSPF 路由器

本区域内

描述路由器自身的直连链路状态、接口开销和邻居关系。每个路由器都会为它所在的每个区域产生一条Type-1 LSA。

Type 2

Network LSA(网络LSA)

指定路由器(DR)

本区域内

描述广播或NBMA等多路访问网络中所连接的所有路由器(包括DR自身)。减少了网络中路由器两两通告邻接关系的开销。

Type 3

Network Summary LSA(网络汇总LSA)

区域边界路由器(ABR)

区域间(整个OSPF自治系统)

ABR将某个区域内的网段路由信息进行汇总后,以Type-3 LSA的形式通告到其他区域,实现区域间路由。

Type 4

ASBR Summary LSA(ASBR汇总LSA)

区域边界路由器(ABR)

区域间(整个OSPF自治系统,除ASBR所在区域)

它不描述路由,而是描述ASBR的位置。当ASBR不在某个区域时,该区域的ABR会产生Type-4 LSA,告知本区域内的路由器如何到达那个ASBR。

Type 5

AS External LSA(自治系统外部LSA)

自治系统边界路由器(ASBR)

整个OSPF自治系统(Stub/NSSA等特殊区域除外)

用于通告到达OSPF自治系统外部的路由(例如,从RIP或BGP学习到的路由)。这是实现跨协议路由引入的关键。

Type 7

NSSA External LSA(NSSA外部LSA)

NSSA区域内的ASBR

仅在始发的NSSA区域内

用于在NSSA(非完全末梢区域)这种不允许Type-5 LSA存在的特殊区域内通告外部路由。NSSA的ABR会将其转换为Type-5 LSA再注入骨干区域。

SPF算法

创建并维护以下3张表项

UnKnown List

Tentative List [Candidate List]

Paths List 【Known List]

开始所有节点均属于该列表

当前考虑的所有节点均属于该列表

已经计算出最短路径的节点属于该列表

重复执行以下3步N次

  1. 从Tentative List的所有路由器中寻找距离自身【根节点】最近的网络节点,并将其从Tentative List中移动至Paths List中

  2. 发现此节点通告的所有前缀,并将其安装至RB【路由表项】中

  3. 发现此节点的所有邻居,并将其移动至Tentative Listr中

注:Dijkstra:迪杰斯特拉算法【是由荷兰计算机科学家狄克斯特拉于1959年提出的】

具体计算过程举例

OSPF的区域类型

区域类型

定义与核心特点

允许的LSA类型

不允许的LSA类型

默认路由来源

典型应用场景

骨干区域 (Backbone Area)

区域ID为Area 0,是所有非骨干区域互联的中心枢纽,负责区域间路由信息的交换。

1, 2, 3, 4, 5

7(通常)

不自动生成

网络核心,连接所有其他区域。

标准区域 (Standard Area)

默认的区域类型,没有特殊限制。

1, 2, 3, 4, 5

7(通常)

不自动生成

需要学习全部OSPF路由(域内、域间、外部)的网络部分。

末梢区域 (Stub Area)

不接收来自其他自治系统(AS)的外部路由,以减小路由表规模。

1, 2, 3

4, 5

ABR自动生成一条Type 3 LSA描述的默认路由。

网络边缘,只有一个出口通往其他区域,不需要了解具体外部拓扑。

完全末梢区域 (Totally Stub Area)

在Stub区域基础上,进一步阻挡其他区域的汇总路由(Type 3 LSA)。

1, 2

3, 4, 5

ABR自动生成一条Type 3 LSA描述的默认路由。

对路由表精简要求极高的边缘区域,只需默认路由访问外部。

非纯末梢区域 (NSSA)

类似Stub区域,但允许在本区域内引入外部路由(产生Type 7 LSA),同时拒绝来自其他区域的外部路由(Type 5 LSA)。

1, 2, 3, 7

4, 5

ABR会生成一条Type 7 LSA的默认路由(某些厂商实现可能需要手动配置)。

需要引入外部路由(如连接RIP网络)但又希望减少LSA的Stub-like区域。

完全NSSA区域 (Totally NSSA)

在NSSA区域基础上,阻挡其他区域的汇总路由(Type 3 LSA)。

1, 2, 7

3, 4, 5

ABR会同时生成Type 3和Type 7默认路由(通常优选Type 3)。

既需要引入外部路由,又希望最大程度减少来自其他区域路由信息的边缘区域。

区域划分

  1. 骨干区域【Area0】

  2. 非骨干区域

非骨干区域根据能够学习到的路由种类又可划分为

  1. 标准区域:学习本区域的内部路由、学习域间路由、学习外部路由。【包含的LSA Type-1、2、3、4、5】

  2. 未节区域【Stub】:学习本区域的内部路由、学习域间路由,不学习外部路由,不包含ASBR,与外部通讯完全依靠自动创建的缺省路由。【包含的LSA Type-1、2、3】

  3. 完全末节【Totally Stubby】区域:仅学习本区域内部路由,不学习外部路由,不学习域间路由,与外部通讯完全依靠自动创建的缺省路由。【ABR会下放一条缺省路由】【包含的LSA Type-1、2】

  4. 非纯末节区域【NSSA】:学习域内路由,学习域间路由,学习本区域自身引入的外部路由【但引入的外部路由的LSA类型为Type-7】,不学习其它区域引入的外部路由。【ABR依然会下放一条缺省路由】【包含的LSA Type-1、2、3、7】

  5. 非纯完全末节区域:学习域内路由,学习本区域自身引入的外部路由【但引入的外部路由的LSA类型为Type-7】,不学习域间路由,不学习其它区域引入的外部路由。【ABR依然会下放一条缺省路由】【包含的LSA Type-1、2、7】

注:NSSA区域是OSPF RFC的补遗,定义了特殊的LSA类型7;提供类似以Stub Area与Totally Stubby Area的优点,可以包含ASBR

Q:有些特殊区域不学习外部路由,故没有外部的明细路由,那还能与外部通信吗?

A:ASBR不能将外部路由注入到OSPF的网络中;ABR不会将其它区域的路由发送到Area1中,而是使用一条缺省路由。故这些特殊区域会通过ABR下发的缺省路由与外部通信。

辅助实验

https://www.iiisle.com/archives/8BVHRiOJ

DR与BDR选举

  1. DR是基于接口的路由器优先级的值进行选举的

  2. 取值范围:0-255,默认值为1

  3. 优先级为O表示不参与DR与BDR的选举

  4. 若优先级相同,则比较各个路由器的Router-ID

注:先选BDR,再选DR

流程图示

最终:(从下到上选)

  • DR是AR5

  • BDR是AR3

  • Drothers 是AR1

扩展

前提是两套设备已经先选举完,后并在一起

Q:假设左右半拓扑分别选举完成后,用一个交换机连接两端设备,最终的DR和BDR是哪些设备?

A:此时的两套设备会在分别在当前已有的DR与BDR候选者中选举,DR中AR6的Router-ID更大,故AR6成为最终的DR。同理,AR4成为最终的BDR。Drothers为AR1/AR2/AR3/AR5。

交换机连接前:

  • DR是AR5 AR6

  • BDR是AR3 AR4

  • Drothers 是AR1 AR2

交换机连接后:

  • DR是AR6

  • BDR是AR4

  • Drothers 是AR1 AR2 AR3 AR5