路由协议分类
按路由分类
按工作机制、算法分类
按有类、无类分类
按工作区域分类
OSPF简介
两台路由器运行OSPF协议的路由器若希望建立邻居关系,则必须满足的条件:
-
区域号要一致
-
均不配置验证、若均配置验证,需密钥完全相同
-
两端的
Hello
与Dead Time
时间间隔完全一致
OSPF协议概述
-
OSPF属于【内部网关路由协议】
-
用于单一自治系统【Autonomous System一AS】内决策路由
自治系统的概念
-
运行在同一个
AS
内用于决策路由的协议称之为内部网关协议 -
用来连接不同的
AS
,使之能够相互通信的协议被称之为外部网关协议 -
执行统一路由策略的一组网络设备组成的环境称之为一个自治系统(AS)
-
为了适应大型的网络,OSPF在
AS
内划分多个区域,每个OSPF路由器只维护所在区域的完整链路状态信息 -
OSPF是链路状态路由协议,链路状态路由协议中的路由器了解OSPF网络内的链路状态信息
-
链路状态路由协议中,直连的路由器之间建立邻接关系,互相【交流】链路信息,来【绘制】出完整的网络结构
-
Router ID
:在OSPF区域内唯一标识一台路由器的IP地址
Router lD选取规则
-
若管理员手工指定,则使用指定的P地址
-
若没有手工指定,则路由器选取它所有
Loopback
接口上数值最高的lP地址 -
若不存在L
oopback
接口,就在所有物理端口中选取一个数值最高的P地址
OSPF建立并维护的3张表项
-
邻居表:列出每台路由器全部已建立邻接关系的邻居路由器
-
链路状态数据库【LSDB】:列出每台路由器的信息,由此显示了全网的网路拓扑
-
路由表:列出通过SPF算法计算出的到达每个相连网络的最佳路径
具体过程
-
通过直连链路发送Hello包,建立邻居关系,将邻居的信息放入邻居表中
-
再通过直连的邻居学会全网的网络结构,放入LSDB中
-
在全网网络结构中通过SPF算法计算出最佳路径
OSPF的关系
-
邻居关系(2-Way)
-
邻接关系(Full)
OSPF建立关系需要使用7种状态和五种报文:
-
7种状态:
Down
Init
2-Way
ExStart
Exchange
Full
(全毗邻) -
5种报文:
Hello
DBD
LSR
LSU
LSAck
OSPF建立邻接关系的全过程
初始发现与双向通信(Down → Init → 2-Way)
-
Down
(关闭状态):这是起点,表示尚未与任何邻居进行通信。
Init
(初始化状态):当路由器从其接口收到一个OSPF Hello
报文时,会进入此状态。这表示它发现了邻居,但还需要确认对方是否也发现了自己。(自身的Router-ID并不在所收到的Helo报文的邻居列表中)
-
2-Way
(双向通信状态):当路由器在自己收到的Hello报文中,发现邻居的「邻居列表」里包含了自己的Router ID时,就表明双向通信已经建立。此时,双方成为「邻居」(Neighbor)。在广播或NBMA网络中,所有路由器会在此阶段选举DR(指定路由器) 和 BDR(备份指定路由器),以优化邻接关系数量。之后,只有DR
、BDR
和DROther
之间才会继续建立更紧密的「邻接」关系。(存在自身的 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路由器之间)
流程图
时间间隔
网络类型
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中:
-
DBD为隐式确认
-
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 ]
-
R2开始向R1发送LSR报文,请求那些在Exchange状态下通过DBD报文发现的,且在本地LSDB中没有的链路状态信息
-
R1向R2发送LSU报文,LSU报文中包含了哪些被请求的链路状态的详细信息;R2在完成LSU报文的接收,且没有其它待请求的LSA后,会将邻居状态从Loading转变为Full状态
-
R2向R1发送LSAck报文,作为对LSU报文的显示确认
思考:主从设备谁先发起LSR
-
主从选举的核心目的:在Exchange状态,主设备(Master)负责控制DD(Database Description)报文的序列号,从而管理摘要信息的交换过程,确保其可靠性和有序性。这好比一个会议中需要确定一个主持人来控制发言顺序。需要注意的是,选举主从时比较的是Router ID,而选举DR/BDR时先比较优先级,这是两个独立的过程
-
LSR的触发时机:当双方路由器在Exchange状态完成DBD报文(其中包含LSA的头部摘要信息)的交换后,都会进入Loading状态。此时,每一台路由器都会将收到的对端LSA摘要与自身的LSDB进行对比。一旦发现存在自己数据库中没有的LSA,或者对端的LSA比自己的更新(通过序列号等判断),该路由器就会立即主动向对方发送LSR报文,请求完整的LSA数据
-
关键交互:收到LSR的一方会使用LSU(链路状态更新)报文来回应,携带对方所请求的完整LSA信息。请求方在收到LSU后,会回复LSAck报文进行确认,确保传输的可靠性
Master/Slave角色管的是「目录」(DBD摘要)的交换顺序,而LSR的发起则是每台路由器根据「目录」对比自家「藏书」(LSDB)后,自主决定需要借阅哪本「书」(LSA)的行为。
Options字段中各关键字解析
-
DN:用来避免在MPLS VPN中出现环路;当PE向CE发送3类、5类与7类LSA时需要设置DN位,其它PE路由器从CE接收到该LSA时,不能够在它的OSPF路由计算中使用该LSA
-
O:该字段指出始发路由器支持Ppaque LSA【类型9、类型10与类型11】
-
DC位:当始发路由器支持按需链路上的OSPF的能力时,该位将被设置
-
N位:N=1表明路由器支持7类LSA;N=O表明该路由器将不接收与发送NSSA LSA
-
P位:只用在NSSA LSA;该位将告诉NSSA区域的ABR路由器将7类LSA转换为5类LSA
-
MC位:当始发路由器支持转发组播数据包的能力时,该位将被置位
-
E位:当始发路由器具有接收AS-external-LSA【Type-5LSA】的能力时,该位被置位;在所有5类LSA与始发于骨干区域以及非末节区域的LSA中,该位置为1。而始发于末节区域的SA中,该位置为0。若Hllo报文中该位被置位则表明该接口具有接收与发送5类LSA的能力
-
MT位:表示始发路由器支持多拓扑OSPF
-
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介绍
SPF算法
创建并维护以下3张表项
重复执行以下3步N次
-
从Tentative List的所有路由器中寻找距离自身【根节点】最近的网络节点,并将其从Tentative List中移动至Paths List中
-
发现此节点通告的所有前缀,并将其安装至RB【路由表项】中
-
发现此节点的所有邻居,并将其移动至Tentative Listr中
注:Dijkstra:迪杰斯特拉算法【是由荷兰计算机科学家狄克斯特拉于1959年提出的】
具体计算过程举例
OSPF的区域类型
区域划分
-
骨干区域【Area0】
-
非骨干区域
非骨干区域根据能够学习到的路由种类又可划分为
-
标准区域:学习本区域的内部路由、学习域间路由、学习外部路由。【包含的LSA Type-1、2、3、4、5】
-
未节区域【Stub】:学习本区域的内部路由、学习域间路由,不学习外部路由,不包含ASBR,与外部通讯完全依靠自动创建的缺省路由。【包含的LSA Type-1、2、3】
-
完全末节【Totally Stubby】区域:仅学习本区域内部路由,不学习外部路由,不学习域间路由,与外部通讯完全依靠自动创建的缺省路由。【ABR会下放一条缺省路由】【包含的LSA Type-1、2】
-
非纯末节区域【NSSA】:学习域内路由,学习域间路由,学习本区域自身引入的外部路由【但引入的外部路由的LSA类型为Type-7】,不学习其它区域引入的外部路由。【ABR依然会下放一条缺省路由】【包含的LSA Type-1、2、3、7】
-
非纯完全末节区域:学习域内路由,学习本区域自身引入的外部路由【但引入的外部路由的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下发的缺省路由与外部通信。
辅助实验
DR与BDR选举
-
DR是基于接口的路由器优先级的值进行选举的
-
取值范围:0-255,默认值为1
-
优先级为O表示不参与DR与BDR的选举
-
若优先级相同,则比较各个路由器的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