OSPF是Open Shortest Path First(开放最短路径优先)
RIP协议存在的问题:
- 存在最大15跳的限制,不能适用大规模组网的需求
- 周期性发送全部路由信息,占用大量的带宽资源
- 路由收敛速度慢
- 以跳数作为度量值
- 存在路由环路可能性
OSPF协议特点:
- 没有路由跳数的限制
- 使用组播更新变化的路由和网络信息
- 路由收敛速度较快
- 以开销(Cost)作为度量值
- 采用的SPF算法可以有效的避免环路
- 在互联网上大量使用,是运用最广泛的路由协议
邻居关系、LSDB和路由表:
- 邻居表记录了建立了邻居关系的路由器
- LSDB中包含了所有的链路状态信息,并需要实时同步
- 经过SPF算法计算出的路由存放在OSPF路由表中
骨干区域与非骨干区域:
- 骨干区域负责转发非骨干区域之间的路由
- 非骨干区域不能从其他非骨干区域获取路由,只能从骨干区域获取路由
划分区域的优势:
- 减少了区域内LSDB中链路状态信息的数量,降低了运行OSPF协议对路由器性能的要求
- 可以将相同功能性或者地理位置的路由器划分在一个区域内,以便于管理
- 隔离拓扑变化,减少路由震荡对整个自治系统的影响
OSPF路由器类型:
- 区域内路由器(Internal Router)
- 区域边界路由器(ABR,Area Border Router)
- 骨干路由器(Backbone Router)
- 自治系统边界路由器(ASBR,Autonomous System Border Router)
Router ID:
- 一台路由器如果要运行OSPF协议,则必须存在Router ID(RID)。RID是一个32比特无符号整数,可以在一个自治系统中唯一的标识一台路由器
- RID可以手工配置,也可以自动生成
- 如果没有通过命令指定RID,将按照如下顺序自动生成一个RID:
- 如果存在配置IP地址的Loopback接口,则选择Lookback接口地址中最大的作为Router ID;
- 如果没有配置IP地址的Lookback接口,则从其他接口的IP地址中选择最大的作为Router ID(不考虑接口的up/down状态)
OSPF网络类型:
- Broadcast
- 组播发送报文
- 所有运行OSPF的接口会监听224.0.0.5的组播
- 所有DR/BDR的接口会监听224.0.0.6的组播
- 组播MAC地址:01:00:5e:xx:xx:xx
- 组播发送报文
- NBMA(Non-Broadcast Multi-Access,非广播多点可达网络)
- 指那些全连通的、非广播、多点可达网络
- 是一种缺省的网络类型
- 采用单播发送报文,需要手工配置邻居
- P2MP(Point-to-MultiPoint,点到多点)
- 不需要一定是全连通的
- 必须是由其它的网络强制更改的
- 采用组播方式发送报文
- P2P(Point-to-Point,点到点)
两边网络类型不同也可以建立邻居关系(NBMA除外),但是无法学习路由
双方建立邻居关系需要时间间隔保持一致
OSPF报文类型与封装:
OSPF报文类型 | 作用 |
Hello | 建立并维护邻居关系 |
Database Description(DD) | 数据库内容的汇总(仅包含LSA摘要) |
Link State Request(LSR) | 请求自己没有的或者比自己更新的链路状态详细信息 |
Link State Update(LSU) | 链路状态更新信息 |
Link State Acknowledge(LSAck) | 对LSU的确认 |
OSPF报文直接封装在IP报文中,协议号为89
链路层帧头 | IP Header | OSPF Packet | 链路层帧尾 |
隐式确认:在DD报文交互过程中,从方将序列号改为主方的序列号,表示隐式确认(最多确认4个报文,再多的显式确认)
显式确认:发送LSAck报文
维持邻居关系:
- 邻居之间通过交换Hello报文,确认邻居是否工作正常
- 如果在一定的时间间隔内,收不到邻居发来的Hello报文,就认为邻居已经失效,从邻居表中删除
OSPF邻居状态机:
Down:在上一个邻居失效时间内,在当前的接口没有收到任何Hello报文。这个状态是状态机的第一个稳定状态。
Attempt:这个状态只存在于NBMA网络中。当一台设备试图通过Hello报文去联系自己的邻居,但是还没有收到回应的报文时,就将它的邻居设置为Attempt状态。
Init:一台路由器收到了其他路由器发送的Hello报文,但是在Hello中的邻居列表中没有看到自己的Router ID。
2-way:一台路由器收到了其他路由器发送的Hello报文,并且在Hello中的邻居列表中已经看到自己的Router ID 。这是状态机的第二个稳定状态。
ExStart:一台路由器和它的邻居在这个状态协商主从关系,并且由Master路由器决定DD交换的序列号。
Exchange:在这个状态时,路由器邻居之间交换DD报文。
Loading:路由器比较DD报文和LSDB,如果发现DD存在LSDB中不具有的LSA,向邻居发送LSU请求LSA。
Full:在这个状态,路由器结束更新自己的LSDB,具有完整的LSDB。这是状态机的第三个稳定状态。
在这些状态机中,只有Down、2-way、Full状态才是稳定的状态,其他状态都是瞬时的中间状态。正常情况下,DR/BDR和DRother路由器的邻居状态应该稳定在Full状态,而DRother路由器之间的邻居状态应该稳定在2-way状态。
DR/BDR的选举与选举规则:
- 采用DR/BDR建立邻接关系,可以降低需要维护的邻接关系数量
- 首先比较Hello报文中携带的优先级
- 优先级最高的被选举为DR,优先级次高的被选举为BDR(优先级范围:0-255)
- 优先级为0的不参与选举
- 优先级一致的情况下,比较Router ID
- Router ID越大越优先
- 保持稳定原则(不支持抢占)
- 当DR/BDR已经选举完毕,就算一台具有更高优先级的路由器变为有效,也不会替换该网段中已经选举的DR/BDR成为新的DR/BDR
广播和NBMA网络中LSDB更新:
- 在广播和NBMA网络中,链路状态发生变化时,主要是通过DR路由器发送更新报文
配置和优化OSPF协议、配置OSPF高级特性
配置和优化OSPF协议:
报文定时器默认值:
网络类型 | Hello定时器(s) | 邻居失效时间(s) |
Broadcast | 10 | 40 |
P2P | 10 | 40 |
NBMA | 30 | 120 |
P2MP | 30 | 120 |
OSPF开销计算:
-
- 参考带宽
- 计算开销的基准带宽值
- 默认参考带宽是100M
- 建议把网络中最高的链路带宽设置为参考带宽
- 计算方法
- 链路带宽大于等于参考带宽,cost=1
- 链路带宽小于参考带宽,cost=参考带宽/链路带宽(Mb)
- 参考带宽
两个路由器之间OSPF进程号不同也可以建立关系并且传递路由;
同区域直连设备RID相同不能建立邻居关系。
链路状态数据库中的路由失效时间:3600s,在1800s会刷新一次链路状态数据库信息(组播泛洪所有链路数据信息)
配置OSPF高级特性:
区域划分时存在的问题:
-
- 骨干区域被分割
- 非骨干区域无法和骨干区域保持连通
虚连接(Virtual Link):
-
- 解决骨干区域被分割的问题
- 解决非骨干区域无法和骨干区域保持连通的问题
LSA报文头格式:
-
- LS Type:标识LSA的类型(Type1-Type11)
- Link State ID:具体数值根据LSA的类型而定
- Advertising Router:始发LSA的路由器的Router ID
- LS age:LSA产生后所经过的时间,以秒为单位(老化时间)LSA在本路由器的链路状态数据库(LSDB)中会随时间老化(每秒钟加1),但在网络的传输过程中却不会
- LS sequence number:LSA的序列号,其他路由器根据这个值可以判断哪个LSA是最新的
- LS checksum:除了LS age字段外,关于LSA的全部信息的校验和
- length:LSA的总长度,包括LSA Header,以字节为单位
LSA类型:
LSA Type | LSA名称 | Advertising Router | 说明 |
1 | Router LSA | All Routers | Intra-Area Link |
2 | Network LSA | DR | Network Link |
3 | Network Summary LSA | ABR | Inter-Area Link |
4 | ASBR Summary LSA | ABR | ASBR Summary Link |
5 | AS External LSA | ASBR | AS External Link |
6 | All Routers | Group Membership Link | |
7 | NSSA External LSA | ASBR | NSSA AS External Link |
8 | External Attributes LSA | ||
9 | Opaque LSA(Link-Local) | ||
10 | Opaque LSA(Area-Local) | ||
11 | Opaque LSA(AS-Local) |
Type1 LSA(Router LSA)
-
- 描述区域内部与路由器直连的链路的信息(包括链路类型,开销等),仅在区域内传播
Type2 LSA(Network LSA)
-
- 由DR生成,描述其在该网络上连接的所有路由器以及网段掩码信息,只在区域内传播
Type3 LSA(Summary LSA)
-
- 由ABR生成,将所连接区域内部的链路信息以子网的形式传播到相邻区域
Type4 LSA(ASBR Summary LSA)
-
- 由ABR生成,格式与Type3相同,描述的目标网络是ASBR的Router ID
Type5 LSA(AS External LSA)
-
- 由ASBR产生,描述到AS外部的路由信息
- 携带的外部路由信息可以分为两种:
- 第一类外部路由
- 第二类外部路由
Type1 LSA:
-
- 定义:
- Router LSA
- 描述区域内与路由器直连的链路信息
- 仅在区域内部传输
- 每台路由器都会产生Type1 LSA
- 内容:
- LS ID
- 发出该LSA的路由器的Router-ID
- Adv Rtr
- 始发路由器
- 产生该LSA的路由器的Router-ID
- Link-Type
- 定义
- 链路类型
- 描述该链路的二层类型
- 类型
- Transnet
- 类型:广播网络/NBMA
- Link-id:本网段DR的IP地址
- Data:本路由器在该网段的IP地址
- P2P
- 链路类型:PPP
- Link-id:该网段对端路由器的Router-id
- Data:本路由器与对端路由器相连的接口的IP地址(指自己)
- Stubnet
- 链路类型
- P2P
- 环回口
- 末梢网络
- Link-id:该网段的网络地址
- Data:该网段的子网掩码
- 链路类型
- Transnet
- 定义
- LS ID
- 定义:
Type2 LSA:
-
- 定义
- Network LSA
- 描述区域内的广播网络链路的路由器以及掩码信息
- 仅在区域内部传输
- 只有DR会产生Type2 LSA
- 内容
- LS ID:该网络的DR的IP地址
- Adv Rtr:该网段DR的Router-ID
- Attached Router:该网段所有路由器的Router-ID
- net mask:该网段的子网掩码
- 定义
Type3 LSA:
-
- 定义:
- Summary LSA
- 描述其他区域的链路信息
- 以子网形式传播(类似直接传递路由)
- 只有ABR会产生Type3 LSA
- 内容:
- LS ID:其他区域某个网段的网络地址
- Adv Rtr:通告该LSA的ABR的Router-ID
- Next mask:该网段的子网掩码
- 定义:
Type4 LSA:
-
- 定义:
- ASbr-summary LSA
- 描述ASBR的信息
- 内容:
- LS ID:ASBR的Router-ID
- Adv Rtr:通告该ASBR的ABR的Router-ID
- 4类LSA由本区域的ABR产生
- 在ASBR本区域的内部路由器,不会产生到达ASBR的4类LSA
- 定义:
Type5 LSA:
-
- 定义
- AS-extenal LSA
- 描述AS外部引入的路由信息,默认是类型2,链路开销默认为1
- 内容
- LS ID:外部某个网段的网络地址
- Adv Rtr:引入该网段路由的ASBR的Router-ID
- net mask:子网掩码信息
- Forwarding Address(转发地址,FA)
- 默认是0.0.0.0
- 想要到达这条外部路由,就要先考虑如何到达ASBR
- 以下三种情况不是0.0.0.0
- OSPF在ASBR的下一跳接口被启动
- ASBR的下一跳接口没有被设置为静默接口
- ASBR的下一跳接口不是OSPF,P2P或P2MP类型
- 默认是0.0.0.0
- 外部路由
- 第一类外部路由
- 表示外部的路由开销和OSPF路由域内的链路开销是同等的,所以在OSPF路由域内的路由器计算到达外部路由的开销时会累计OSPF路由域内的链路开销
- 第二类外部路由(默认)
- 表示外部的路由开销远远大于OSPF路由域内的链路开销,所以在OSPF路由域内的路由计算到达外部路由的开销时不会累计OSPF路由域内的链路开销
- 第一类外部路由
- 定义
Type7 LSA:
-
- 定义
- NSSA LSA
- 描述NSSA区域引入的AS外部路由信息
- 内容
- LS ID:外部某个网段的网络地址
- Adv Rtr:引入该网段路由的ASBR的Route ID
- net mask:子网掩码信息
- FA地址(转发地址)
- 不为0.0.0.0
- ASBR上的地址
- 如果有loopback接口就写最后一个宣告到OSPF中的loopback接口地址
- 如果没有配置loopback接口,就写其他接口上最后一个宣告到OSPF中的接口地址
- 定义
OSPF选路原则:
-
- 按照路由类型的优先级选择
- 区域内路由(Intra Area)
- 区域间路由(Inter Area)
- 第一类外部路由(Type1 External)
- 计算AS内部Cost,开销等于本路由器到相应的ASBR的开销与ASBR到该路由器目的地址的开销之和
- 第二类外部路由(Type2 External)
- 不计算AS内部Cost,开销等于ASBR到该路由目的地址的开销
- 默认情况下外部路由以2类引入
- 在类型相同的情况下,选择路由开销(Cost)较小的路由
- 如果路由类型和链路开销都相等,那么这两条或者多条路由就形成等价路由
- 跨区域的路由必须经过骨干区域
- 按照路由类型的优先级选择
当ASBR(自治系统边界路由器)引入多条网络ID一致,掩码不一致的外部路由时,会把掩码长的外部路由产生的5类LSA的LS ID的主机位做全反操作,来防止LS ID冲突。
OSPF特殊区域:
-
- 特殊区域是指人为定义的一些区域,它们在逻辑中一般位于OSPF区域的边缘,只与骨干区域相连
- 常见的特殊区域有以下几类:
- Stub区域(末梢区域)
- Totally Stub区域(完全末梢区域)
- NSSA区域(非纯末梢区域)
- Totally NSSA区域(完全非纯末梢区域)
Stub区域:
-
- Stub区域是一些特定的区域,目的是为了减少区域中路由器的路由表规模以及路由信息传递的数量
- Stub区域内不能存在ASBR
- 定义
- 末梢区域
- 适用于区域中路由器性能较低,不希望接收大量AS外部路由的场景
- 特征
- 不接收4类和5类LSA
- 由ABR发送一条3类默认路由的LSA
- 不允许出现ASBR
- 区域0不能被配置为Stub区域
- Stub区域不能作为虚连接的传输区域
Totally Stub区域:
-
- 定义
- 完全末梢区域
- 适用于区域中路由器性能较低,不希望接收大量AS外部及其他区域的路由的场景
- 特征
- 不接收3类、4类和5类LSA
- 由ABR发送一条3类默认路由的LSA
- 不允许出现ASBR
- 区域0不能被配置为Totally Stub区域
- 完全Stub区域不能作为虚连接的传输区域
- 定义
NSSA区域:
-
- NSSA(Not-So-Stubby Area)区域是Stub区域的变形,也不允许Type5 LSA注入,但可以允许Type7 LSA注入
- 定义
- 非纯末梢区域
- 适用于区域中路由器性能较低,不希望接收大量AS外部路由,但本区域存在ASBR引入外部路由的场景
- 特征
- 不接收4类和5类LSA
- 本区域引入的外部路由以7类LSA存在
- 本区域的ABR会把引入的7类LSA转换为5类LSA通告给其他区域,如果存在多个ABR则由Router-ID大的ABR进行转换
- 本区域的ABR扮演的角色既为ABR也是ASBR
Totally NSSA区域:
-
- 定义
- 完全非纯末梢区域
- 适用于区域中路由器性能较低,不希望接收大量AS外部和其他区域路由,但本区域存在ASBR引入外部路由的场景
- 特征
- 不接收3类、4类和5类LSA
- 本区域引入的外部路由以7类LSA存在
- 本区域的ABR会把引入的7类LSA转换为5类LSA通告给其他区域
- 本区域的默认路由由ABR发送3类LSA产生
- 本区域的ABR扮演的角色既是ABR也是ASBR
- NSSA LSA中的P位是置位的,为1
- 定义
OSPF路由聚合:
-
- OSPF只能手动聚合
- 聚合类型
- ABR聚合
- 把一个区域的LSA聚合后发布到相邻区域
- 在传入区域的区域视图配置
- 只能对Type3类的LSA进行聚合
- ABR的聚合不会影响本机的路由,只会影响下游路由器的路由
- ABR聚合后会在ABR本机上产生一条该聚合路由的黑洞路由来防止环路出现
- ASBR聚合
- 把引入的AS外部路由聚合后发布到OSPF内部
- 在协议视图配置
- 只能对Type5、7类LSA进行聚合
- ASBR的聚合不会影响本机的路由,只会影响OSPF内部其他路由器的路由
- ASBR聚合后会在ABR本机上产生一条该聚合路由的黑洞路由来防止环路出现
- ABR聚合
- 使用聚合实现路由过滤
- 在聚合后加入not-advertise参数(理解为路由过滤)
OSPF安全特性:
-
- OSPF协议报文验证
- 禁止端口发送OSPF报文
- 过滤计算出的路由
- 过滤Type3 LSA
OSPF报文验证:
-
- 区域中路由器的验证模式
- Simple
- MD5
- 接口验证模式
- Simple
- MD5
- 区域中路由器的验证模式
接口验证高于区域验证,只要接口验证通过,哪怕区域验证挂了也能通过
路由过滤:
-
- 对计算出的路由进行过滤,只会影响本路由器的路由学习,在协议视图下配置进方向
- 对3类LSA进行过滤,会影响所有下游路由器,在传入区域的区域视图下配置出方向,必须在ABR上配置
OSPF基本配置命令:
配置Router ID:[Router]router id router-id
启动OSPF进程:[Router]ospf [process-id]
重启OSPF进程:<Router>reset ospf [process-id] process
配置OSPF区域:[Router-ospf-100]area area-id
在指定的接口上启动OSPF:
[Router-ospf-1-area-0.0.0.0]network ip-address wildcard-mask
配置OSPF接口优先级:
[Router-Ethernet0/0]ospf dr-priority priority
配置OSPF接口Cost:
[Router-Ethernet0/0]ospf cost value
显示OSPF邻居信息:[H3C]display ospf peer
显示OSPF的链路状态数据库:[H3C]display ospf lsdb
显示OSPF路由信息:<H3C>display ospf routing
显示OSPF摘要信息:
[Router]display ospf [process-id] [verbose]
显示启动OSPF的接口信息:
[Router]display ospf [process-id] interface [interface-type interface-number | verbose]
调试OSPF:
OSPF事件调试信息:
<Router>debugging ospf event
OSPF链路状态通告调试信息:
<Router>debugging ospf lsa
OSPF包调试信息:
<Router>debugging ospf packet
OSPF路由计算调试信息:
<Router>debugging ospf spf
OSPF进程调试信息:
<Router>debugging ospf process-id