OSPF开放式最短路径优先
OSPF简介
- OSPF是IETF定义的一种基于链路状态的内部网关路由协议。目前针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。
- OSPF有以下优点:
-
- 基于SPF算法,以“累计链路开销”作为选路参考值(源设备到目的设备的最优路径)
- 采用组播形式收发部分协议报文
- 支持区域划分
- 支持对等价路由进行负载分担
- 支持报文认证
- 属于IGP内部网关路由协议
- 协议基于链路状态算法
- OSPF直接运行于IP协议之上,使用IP协议号89
- 组播地址是224.0.0.5和224.0.0.6
补充:
*距离矢量型路由协议度量值:跳数
*链路状态型路由协议度量值:带宽
OSPF基本特点
- 支持无类域间路由(CIDR)
OSPF是专门为TCP/IP环境开发的路由协议,支持无类域内路由(CIDR)和可变长子网掩码(VLSM)。所以我们在OSPF中通告网段时要注意匹配子网。
可理解为超网
- 支持区域划分
- 无路由自环
因为OSPF路由的计算基于详细链路状态信息(网络拓扑信息),因此不会出现自环。
补充:
“路由自环”是指某个报文从一台路由器发出,经过几次转发之后又回到初始的路由器。原因是其中部分路由器的路由表出现错误。
产生的原因可能是配置静态路由有误,或者是动态路由协议错误地计算路由(虽然这种情况发生地几率很小)。当产生路由自环时,报文会在几个路由器之间循环转发,直到TTL=0时才被丢弃,极大地浪费了网络资源,因此应该尽量避免“路由自环”地产生。
TTL是指该字段指定IP包被路由器丢弃之前允许通过最大网段数量,每经过一个路由器TTL值减一。
- 路由变化收敛速度快
触发式更新(事件发生的时候就更新,比如连到了互联网,就触发了更新这个动作),一旦拓扑结构发生变化,新的链路状态信息立刻泛洪,对拓扑变化敏感。
- 使用IP组播收发协议数据
OSPF路由器使用组播和单播收发协议数据,因此占用的网络流量很小。
- 支持多条等值路由
当到达目的地的等开销路径有多条时,流量被均衡地分担在这些等开销路径上。也可以保证冗余。
- 支持协议报文的认证
OSPF路由器之间交换的所有报文都可以被验证。一定程度上保证了路由的安全。
OSPF基础术语
1、OSPF基础术语:区域
- OSPF Area用于标识一个OSPF的区域。
- 区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。
- OSPF的区域ID是一个32bit的非负整数,按点分十进制的形式(与IPv4地址的格式一样)呈现,例如Area0.0.0.1。为了简便起见,我们也会采用十进制的形式来表示。
(1)骨干区域:Area 0
(2)非骨干区域:Area 1 2 3 4 5 ...
(3)特殊区域:末节区域,次末节区域
非骨干区域必须与骨干区域相连才能传输路由
2、OSPF基础术语:Router-ID
- Router-ID(Router Identifier,路由器标识符),用于在一个OSPF域中唯一地标识一台路由器。
- Router-ID的设定可以通过①手工配置的方式,或使用②系统自动配置的方式。【建议手工配制,自动配制存在Router-ID冲突风险】(自动配置前需要先设置IP地址)【一旦Router-ID冲突,则路由器无法建立邻居关系,无法进行数据通信】
- 在实际项目中,通常会通过手工配置方式为设备指定OSPF Router-ID。请注意必须保证在OSPF域中任意两台设备的Router-ID都不相同。通常的做法是将Router-ID配置为与该设备某个接口(通常为Loopback接口)的IP地址一致。
- Router ID选举规则如下:
-
- 手动配置OSPF路由器的Router ID(建议手动配置)
- 如果没有手动配置Router ID,则路由器使用Loopback接口中最大的IP地址作为Router ID
- 如果没有配置Loopback接口,则路由器使用物理接口中最大的IP地址作为Router ID
3、OSPF的基础术语:度量值
- OSPF使用Cost(开销)作为路由的度量值。每一个激活了OSPF的接口都会维护一个接口Cost值,缺省时接口Cost值=100 Mbit/s /(÷)接口带宽。其中100 Mbit/s为OSPF指定的缺省参考值,该值是可配置的。
- 一条OSPF路由的Cost值可以理解为是从目的网段到本路由器沿途所有出接口的Cost值累加。
串口默认开销为64
默认情况下:
10M链路cost=100M/10M=10
100M链路cost=100M/100M=1
1G链路cost=100M/1000M=1
【cost值不满1的按1表示】
更改带宽参考值为1000M:
10M链路cost=1000M/10M=100
100M链路cost=1000M/100M=10
1G链路cost=1000M/1000M=1
OSPF五种报文类型
OSPF一共定义了5种类型的报文,不同类型的OSPF报文有相同的头部格式。
OSPF报文直接采用IP封装,在报文的IP头部中,协议号为89。
- Hello:发现与维护邻居关系--周期性发送
- DD(Database Description):描述本地LSDB的摘要信息,进行数据库同步
- LSR(Link State Request):请求邻居的LSA的信息
- LSU(Link State Update):发送和更新LSA信息(完整的lsa信息)
- LSACK(Link State ACK):确认收到LSA信息(邻接关系建立成功)
SPF:最短路径优先(源设备到目的设备的最优路径)
LSA:链路状态通告
LSDB:链路状态数据库
Hello报文
- Hello报文的主要作用:
- 邻居发现:自动发现邻居路由器。
- 邻居建立:完成Hello报文中的参数协商,建立邻居关系。
- 邻居保持:通过周期性发送和接收,检测邻居运行状态。
- 重要字段解释
- Network Mask:发送Hello报文的接口的网络掩码。
- HelloInterval:发送Hello报文的时间间隔。通常为10s。
- RouterDeadInterval:失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。通常为40s。
- Neighbor:邻居,以Router ID标识。
- 其它字段解释
- Options:
- E:是否支持外部路由
- MC:是否支持转发组播数据包
- N/P:是否为NSSA区域
- Router Priority:DR优先级。默认为1。如果设置为0,则路由器不能参与DR或BDR的选举。
- Designated Router:DR的接口地址。
- Backup Designated Router:BDR的接口地址。
DD报文
- DD报文包含LSA头部信息,包括LS Type、LS ID、Advertising Router、LS Sequence Number、LS Checksum。(主要是通过这三个字段来LS Type、LS ID、Advertising Router唯一的标识一条lsa信息)
- DD报文部分字段解释
- I:当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0。
- M (More):当发送连续多个DD报文时,如果这是最后一个DD报文,则置为0。否则置为1,表示后面还有其他的DD报文。
- MS (Master/Slave):当两台OSPF路由器交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master。
- DD sequence number:DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。
- 其他字段解释
-
- Interface MTU:指示在不分片的情况下,此接口最大可发出的IP报文长度。在两个邻居发送DD报文中包含MTU参数,如果收到的DD报文中MTU和本端的MTU不相等,则丢弃该DD报文。缺省情况下,华为设备未开启MTU检查。
- Optinons:字段同Hello报文。
OSPF路由器邻接关系建立过程:
- 建立邻居关系
发送Hello包建立邻居关系
- 协商主从
发送DD报文,比较Router-ID(因为ospf是基于IP协议的所以需要确认主从关系,用来保证数据传递的可靠性,Router-ID大的为主)(只要发送DD报文邻居状态就会变成ExStart状态)
- 描述自己的LSDB摘要信息
发送DD报文描述LSDB摘要信息
- 链路状态数据库同步
发送LSR/LSU/LSACK报文进行LSDB数据库同步
OSPF三大表项
1、OSPF三大表项 - 邻居表:存放路由器邻居信息
display ospf peer brief 【查看邻居表信息】
- OSPF在传递链路状态信息之前,需先建立OSPF邻居关系。
- OSPF的邻居关系通过交互Hello报文建立。
- OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer(详细查看)查看。
2、OSPF三大表项 - LSDB表:存放链路状态信息
display ospf lsdb 【查看LSDB表】
- LSDB会保存自己产生的及从邻居收到的LSA信息,本例中R1的LSDB包含了三条LSA。
- Type标识LSA的类型,AdvRouter标识发送LSA的路由器。
- 使用命令行display ospf lsdb查看LSDB表。
3、OSPF三大表项 - OSPF路由表:用来存放OSPF路由信息;最优路由--->IP路由表中
display ospf routing 【查看OSPF路由表】
- OSPF路由表和路由器路由表是两张不同的表项。本例中OSPF路由表有三条路由。
- OSPF路由表包含Destination(目的地址)、Cost(开销值)和NextHop(下一跳IP地址)等指导转发的信息。
- 使用命令display ospf routing查看OSPF路由表。
OSPF与RIP区别
SPF:最短路径优先(源设备到目的设备的最优路径)
LSA:链路状态通告
LSDB:链路状态数据库
OSPF网络类型
点到点网络【用串口(串口上没有Mac地址)】、非广播网络-点到多点 不需要选举
广播型网络、非广播网络-非广播多路访问(NBMA)需要选举
DR:指定路由器
BDR:备份指定路由器
非DR与BDR路由器被称为:Drother
Router-ID:路由标识符
OSPF路由器之间的关系
邻居关系:考虑一种简单的拓扑,两台路由器直连。在双方互联接口上激活OSPF,路由器开始发送及侦听Hello报文。在通过Hello报文发现彼此后,这两台路由器便形成了邻居关系。
邻接关系:邻居关系的建立只是一个开始,后续会进行一系列的报文交互,例如前文提到的DD、LSR、LSU和LS ACK等。当两台路由器LSDB同步完成,并开始独立计算路由时,这两台路由器形成了邻接关系。
补充:
邻居关系:该关系在OSPF状态机里显示的是2-way的状态。
邻接关系:该关系在OSPF状态机里显示的是Full的状态。
DR和BDR选举
DR:指定路由器
BDR:备份指定路由器
非DR与BDR路由器被称为:Drother
选举的依据:路由器的选举依赖于hello消息,建立邻居关系时广播型网络、非广播网络-非广播多路访问(NBMA)需要选举 (选举是基于端口,而不是基于路由器本身,设定优先级是在端口视图模式下设定的)ospf dr-priority XXX(范围0-255) 设置选举DR优先级 做完此操作后该网络参与选举的设备要重启ospf进程 reset ospf 1 process
选举的步骤:
第一步:比较路由器优先级(值越大越优先,范围:0-255,默认为1,如果为0则表示该路由器不参与选举)
第二步:比较路由器的Router-ID(值越大越优先)
Router-ID:手动设定命令 router id 1.1.1.1(router ID 不是IP地址,只是格式一样)
如果没有手动设定,那么以路由器上环回接口 IP地址最大的,作为该路由器的router ID
如果没有环回接口 ,那么以路由器上物理接口IP地址最大的,作为该路由器的router ID
补充:
- MA(多路访问):广播多路访问(广播)、非广播多路访问(NBMA)需要选举
-
- 所有的Drother都要和DR/BDR建立邻居关系和邻接关系
- DR与BDR之间也要建立邻居和邻接关系
- drother之间只需要建立邻居关系,不建立邻接关系
- p2p点到点(如串口),p2mp点到多点 不需要选举
- 所有的路由器建立邻居关系和邻接关系
OSPF工作过程概览
建立邻居关系
- OSPF使用Hello报文发现和建立邻居关系。
- 在以太网链路上,缺省时,OSPF采用组播的形式发送Hello报文(目的地址224.0.0.5)。
- OSPF Hello报文中包含了路由器的Router ID、邻居列表等信息。
邻接关系建立 (1)
OSPF邻居和邻接关系
- OSPF协议中,路由器在泛洪LSA(链路状态信息)之前,必须建立起邻居和邻接关系。
- ospf是使用HELLO报文来建立和维护邻居关系
hello报文里面包含的参数:router-ID、area -ID、认证信息、网络掩码、hello的时间间隔。
- 只有当路由器hello包里的各类参数值一致情况下,邻居关系才会建立起来
- 路由器邻居关系建立起来之后,需要建立邻接关系。(不是所有的路由器都需要建立邻接关系)。取决于OSPF邻居之间的网络类型。
- 点到点 点到多点 不需要选举
- 广播 NBMA 需要选举 :DR BDR之间要形成邻居和邻接关系,Drother之间形成邻居关系,不需要形成邻接关系;DR BDR与Drother形成邻接关系。
- full表示邻接关系已经形成
- 因为配置的先后顺序问题,可能会导致选举结果与所设定的不一致,只需要同时开启进程或同时连线即可 reset ospf 1 process 重启ospf进程
- P-2-P接口与广播型接口的hello时间间隔与dead时间间隔一致
10S 40S
- debugging ospf packet
- down--init --2way(邻居关系确立)
- --ExStart(交换LSA初始)
- --Exchange(信息交换)
- --Loading(信息加载)
- --full(邻接关系)
- P2P网络里面,形成邻接关系后,交互LSA,需要确定一个主路由器进行DD报文交换 (routerID大的)
思考:OSPF 广播型网络里,为什么DR与BDR之间需要建立邻接关系?
注意事项:
1、由于OSPF选举具有不可更新性,所以在配置OSPF需要首先设定路由器的router ID。如果在启用OSPF协议后,再设定路由器的router ID,那么所设定的ID号是不参与到OSPF协议的。
2、OSPF选路 ----通过修改端口开销,来控制路由
例:
ospf cost
源进源出
3、OSPF的被动接口(静默端口)
passive interface 不会发送和接受OSPF报文
命令:silent-interface 端口
4、OSPF认证
在区域视图下 authentication-mode simple plain 123456
同一区域内生效
思考:非骨干区域必须要和骨干区域相连接,也就是去他区域之间的通信,需要经过骨干区域的转发才能实现,为什么要这么设计?
5、OSPF多区域的基本配置
步骤1 sysname 给路由器更名
步骤2 router id X.X.X.X 设置路由器ID号
步骤3 给端口配置IP地址
环回接口 int loopback 0
步骤4 启动OSPF协议
步骤5 设置OSPF区域 area
步骤6 宣告网段(宣告的是路由器在对应区域所连接的网段)
network (可以使用对应端口的IP,也可以使用所连接的网络的网络地址)
network 10.0.12.1 0.0.0.0
network 10.0.12.0 0.0.0.255
命令扩展:
display ospf peer brief 【看邻居、邻接关系】
【Huawei】display ospf interface 【 查看DR BDR的选举状况】
reset ospf 1 process 【重启OSPF进程】
ospf dr-priority 0-255 【修改路由器优先级(端口模式)】
tracort IP地址【跟踪路由】
[r2-ospf-1-area-0.0.0.1]vlink-peer < router id >【设置虚连接】
[r2-ospf-1-area-0.0.0.1]dis ospf vlink 【查看虚连接】
[r2]display current-configuration 【查看所有配置】
路由DR BDR重新选举需要重启ospf进程
OSPF路由器类型
- OSPF路由器根据其位置或功能不同,有这样几种类型:
- 区域内路由器IR(Internal Router)
- 区域边界路由器ABR(Area Border Router)
- 骨干路由器BR(Backbone Router)
- 自治系统边界路由器ASBR(AS Boundary Router)
一网络邻居关系为n-1
dis cu
有向图
Router-LSA
stub网段(末节网络)
Transit网段
点到点网段(不同网段)
点到点网段(同网段)
1类LSA点到点网络它会产生1、p-2-p 2、stubnet
1类LSA MA网络它会产生TransNet但是需要与类型2相结合应用
SPF计算
- 计算过程的两个阶段:
- 第一阶段:计算Transit节点,忽略Stub节点,(计算开销)生成一个最短路径树
- 第二阶段:只计算Stub节点,将Stub网段挂到最短路径树上去
补充:
配置端口开销
- (1)直接修改cost值(常用)
[RTB]interface Ethernet 0/0
[RTB-Ethernet0/0]ospf cost 5
[RTB-Ethernet0/0]quit
[RTB]
- (2)修改默认带宽基数(见ospf基本参数Cost算法)
[RTC]ospf
[RTC-ospf-1]bandwidth-reference 500
Info: OSPF 1 Reference bandwidth is changed
Please ensure reference bandwidth is consistent across all routers.
[RTC-ospf-1]quit
Router-LSA中的重要字段
每个路由器都会产生,用来描述路由器的直连路由状态以及开销值,只能在所在区域内泛洪。
[RTA]display ospf lsdb router self-originate(显示路由器本身的ospf链路状态数据库)
[RTA]display ospf lsdb router (router id)一类
[RTA]display ospf lsdb network (router id)二类
LSA头部:
- type:LSA类型
- Ls id:与路由的router ID相对应(与类型有关)
- Adv rtr:通告路由器(产生LSA的路由信息)
- Ls age:生存周期
- Len:长度
- chksum:检测值
- seq#:序列号
LSA内部(内容):
- Link count:编号
- Link id:链路ID,相当于他所要连接的地址
- Data:自己的地址
- type:所连接的网络类型
- metric:开销
p2p:点到点网络(同网段和不同网段)
trans net(跨网):
stub net:末节网络
LSA概述
OSPF 是一种基于链路状态的动态路由协议,每台 OSPF 路由器都会生成相关的LSA,并将这些 LSA 通告出去。路由器收到LSA 后,会将它们存放在链路状态数据库LSDB 中.
LSA 有多种不同的类型,不同类型的 LSA 的功能和作用是不同的,下面介绍几种常见的 LSA。(LSA传递时不会发生改变,三类LSA在同一区域不会发生改变,但是跨区域后会发生改变,如果想要查看实际开销dis ospf routing)
- 1类LSA(router LSA):
- 产生:每台设备都会产生:
- 作用:携带设备的链路状态以及开销
- 泛洪范围:只在接口所属的区域内泛洪
- 2类LSA(network LSA):
- 产生:DR产生
- 作用:描述该DR连接的所有路由器
- 泛洪范围:只在接口所属的区域内泛洪
- 3类LSA(network summary LSA):
- 产生:ABR产生
- 作用:描述区域内某个网段的路由
- 泛洪范围:可以在区域之间进行传递
- 4类LSA(ASBR summary LSA):
- 产生:ABR产生
- 作用:描述到达ASBR的位置
- 泛洪范围:除ASBR所在区域的其他相关区域
- 5类LSA(AS external LSA)
- 产生:由ASBR产生
- 作用:描述到达ospf外部路由
- 泛洪范围:泛洪到整个OSPF区域
- Type-1 LSA (Router LSA):每台路由器都会产生,用来描述路由器的直连链路状态和开销值。Type-1LSA 只能在所属区域内部泛洪,不能泛洪到其他区域。
display ospf lsdb router查看当前设备的所有1类LSA信息
display ospf lsdb router self-originate只查看自己产生的1类LSA信息
- Type-2 LSA (Network LSA):它是由 DR 产生的,主要用来描述该 DR 所在网段的网络掩码以及该网段内有哪些路由器。Type-2 LSA 只能在所属区域内部泛洪,不能泛洪到其他区域。
- Type-3 LSA (Network Summary LSA):它是由 ABR CArea Boundary Router)产生的,ABR 路由器将所连区域的 Type-1和 Type-2LSA 转换为 Type-3LSA,用来描述区域间的路由信息。Type-3LSA 可以泛洪到整个 AS CAutonomous System,自治域)内部,但不能泛洪到 Totally Stub 区域和 Totally NSSA (Not-So-Stubby Area) 区域。(在多区域才会产生,且类型三之后都是路由信息,不再是链路状态)
- Type-4 LSA (ASBR Summary LSA):它是由 ASBR CAutonomous System BoundaryRouter)所在区域的 ABR (该路由器一定属于ospf区域的)产生的,用来描述到 ASBR 的路由。Type-4 LSA 可以泛洪到整个 AS 内部,但不能泛洪到 Stub 区域、Totally stub 区域、NSSA 区域和 Totally NSSA区域中。
- Type-5 LSA (AS External LSA):它是由 ASBR 产生的,用来描述到 AS 外部网络的路由。Type-5 LSA 可以泛洪到整个 AS 内部,但不能泛洪到Stub 区域、Totally Stub 区域、NSSA 区域和 Totally NSSA 区域中。(在现实中类型五和类型四是伴生的,且先生成类型五再生成类型四)
- Type-6LSA: 用于OSPF 组播。
- Type-7LSA (NSSA LSA):它是由 NSSA 区域或 Totally NSSA 区域的NSSA ASBR产生的,用来描达到 AS 外部的路由。Type-7LSA 只能出现在所属 NSSA 区域或 Totally NSSA 区域内部。
产生类型五一定会产生类型四
(非骨干区域才可以设置末节区域)
特殊区域:
- stub(末节区域)
- 过滤4,5类lsa,ABR会产生缺省(默认)的3类lsa,区域内不能引入外部路由
- total stub(完全末节区域)
- 过滤3,4,5类lsa,ABR会产生缺省(默认)的3类lsa,区域内不能引入外部路由
- nssa
- 过滤4,5类lsa,ABR会产生缺省(默认)的7类lsa,该区域能引入外部路由
- total nssa(完全nssa区域)
- 过滤3,4,5类lsa,ABR会产生缺省(默认)的3类lsa,该区域能引入外部路由
- 重点: nssa和stub根本区别就是nssa可以引入外部路由。而stub区域不可以引入
- nssa网络路由器都需要配置。
ospf路由聚合
路由聚合是为了减少路由表的条目(聚合的一定是路由信息,type3和type5包含的都是路由信息,而type4包含的是asbr到abr的开销)
原因:因为OSPF 不支持自动聚合,所以对其进行优化的时候需要进行手动聚合。
两种聚合:
- 1.区域间的路由聚合
- ABR将区域内的type-1 type-2 LSA转换成type-3LSA进行聚合
- ABR不能对外部路由以及区域间传递的路由进行聚合。ABR不能聚合type-5,以及别的区域ABR发送过来的type-3
abr-summary 聚合后的网络地址+掩码
- 2.外部路由聚合
- ASBR将外部路由引入时,对type-5 LSA进行聚合
- 当使用NSSA区域时,ASBR所在区域的ABR会将ASBR产生的type-7 LSA转换成type-5LSA ,此时ABR可以充当ASBR的角色,对所转换的type-5LSA进行聚合。
- 当NSSA区域中存在多台ABR,会选择router-ID最大的进行转换。
- NSSA区域外部路由引入时,有两种聚合方式:
- 1.在NSSA区域的ASBR上进行聚合。
- 2.在NSSA区域的ABR(router-ID最大)上进行聚合。将type-7 LSA转换成type-5LSA,进行聚合。
- ASBR将外部路由引入时,对type-5 LSA进行聚合
asbr-summary 聚合后的网络地址+掩码