文章目录
🔥OSPF基本原理
📢OSPF的三张表
- 邻居表:记录邻居状态和关系
- 拓扑表:链路状态数据库
- 路由表:记录由SPF算法计算的路由
📢OSPF的五种报文
- Hello:用于发现、建立和维护邻居关系
- DD:数据库描述,描述LSDB情况,交换链路状态数据库摘要
- LSR:链路状态请求,请求自身缺少的链路状态信息
- LSU:链路状态更新,发送详细的链路状态信息,回应LSR的请求
- LSAck:链路状态确认,收到LSU后进行确认,发送确认报文
🔍OSPF路由器类型
- 区域内路由器:IR,所有接口都在同一区域
- 骨干路由器:BR,有接口在骨干区域
- 区域边界路由器:ABR,连接骨干区域和非骨干区域
- 自治系统边界路由器:ASBR,连接外部自治系统,并引入外部路由
🔍OSPF网络类型
⭐️定义
- 对于不同的二层链路类型的网段,OSPF会生成不同的网络类型
- 不同的网络类型,DR/BDR选举,LSA细节,协议报文发送形式等会有所不同
⭐️类型
1️⃣Broadcast
广播网络,以太网默认的网络类型
组播发送协议报文:
224.0.0.5:所有运行OSPF的接口会监听
224.0.0.6:所有DR/BDR的接口会监听
需要选举DR/BDR
hello-time:10秒
dead-time:40秒
2️⃣NBMA
非广播多点可达,帧中继默认的网络类型
单播发送协议报文,需要手动指定邻居
需要选举DR/BDR
hello-time:30秒
dead-time:120秒
3️⃣P2MP
点到多点网络,由其他网络类型手动更改
模拟组播发送协议报文,可以自动发现邻居
不选举DR/BDR
hello-time:30秒
dead-time:120秒
4️⃣P2P
点到点网络,PPP默认的网络类型
组播发送协议报文
不选举DR/BDR
hello-time:10秒
dead-time:40秒
👀OSPF邻接建立过程
-
Down:关闭状态(稳定状态)
-
Init:单方发现状态,收到了对方的hello报文,但没有收到对方的hello确认报文
-
Attempt:只会出现NBMA网络中,发出了Hello包,但未收到对方的Hello包
-
2-way:邻居状态(稳定状态)
邻居双方互相发现,并确认了DR/BDR角色: 1.当选举完毕,就算出现一台更高优先级的路由器,也不会替换成为新的DR/BDR 2.需要原DR/BDR失效,或者重置OSPF进程才会成为新的DR/BDR 2-way的前提: 1.Router-id无冲突:修改Router-id需要重置OSPF进程使生效 2.掩码长度一致 3.区域id一致 4.验证密码一致 5.hello-time一致 6.dead-time一致 🔥OSPF邻居起不来的原因也可以参考这6个方面
-
Exstart:交换开始状态
发送第一个DD报文: 1.不传送LSDB摘要 2.仅用于确定LSA传递的主从 DD报文置位符: I:Init位,置位则表示此报文是第一个DD报文 M:more位,置位则表示还有后续DD报文 MS:master位,置位则表示本端为主
-
Exchange:交换状态,发送后续DD报文,用于通告LSDB摘要
-
Loading:读取状态,进行LSA的请求、加入和确认
-
Full:邻接状态(稳定状态),两端LSDB同步
Full的前提: 1.两端网络类型一致,否则邻居状态FULL,但无法学习路由 2.两端MTU一致,否则邻居状态卡在Exstart、Exchange
💡LSDB更新
更新流程:
1.收到LSA更新,在本地LSDB中查询此LSA,未查到则加入LSDB
2.查到此LSA,则把收到的LSA和本地LSA进行序列号对比
3.如本地LSA序列号大,则丢弃更新,否则加入LSDB
广播网络中的更新,只由DR发起更新
❤️OSPF开销计算
参考带宽
- 计算开销的基准带宽值
- 默认参考带宽是100M
- 建议把网络中最高的链路带宽设置为参考带宽
计算方法
- 链路带宽大于等于参考带宽,cost=1
- 链路带宽小于参考带宽,cost=参考带宽/链路带宽(Mb)
💘常用命令
[h3c]router id 'router-id'
//配置全局Router-id,对所有协议生效,协议内指定Router-id的优先级更高
[h3c]display ospf interface
//查看OSPF接口信息,网络类型通过此命令查看
[h3c]display ospf routing
//查看OSPF路由信息,可以查看路由所属区域和发布者
[h3c]display ospf statistics error //查看OSPF报错信息
[h3c]display ospf lsdb //查看本地LSDB汇总信息
[h3c-GigabitEthernet0/0]ospf network-type 'broadcast/nmba/p2mp/p2p' //配置接口网络类型
[h3c-GigabitEthernet0/0]ospf timer hello 'seconds' //配置接口HELLO时间
[h3c-GigabitEthernet0/0]ospf timer dead 'seconds' //配置接口DEAD时间
[h3c-ospf-1]Bandwidth-reference 'value' //配置参考带宽
[h3c-ospf-1]default-route-advertise //将已经存在的默认路由引入到OSPF
[h3c-ospf-1]default-route-advertise always //自动产生一条默认路由LSA下发到OSPF
🔥OSPF高级特性
⭐️LSA详解
🍭Type1_LSA
-
定义:Router LSA,描述区域内部与路由器直连的链路的信息,仅在区域内部传输,每台路由器都会产生Type 1Lsa
-
内容:
LS ID:发出该LSA的路由器的Router-id Adv Rtr:始发路由器,产生该LSA的路由器的Router-id Link-Type:链路类型,描述该链路的二层类型 类型: 1.Transnet:广播网络/NBMA Link-id:本网段DR的IP地址 Data:本路由器在该网段的IP地址 2.P2P:PPP Link-id:该网段对端路由器的Router-id Data:本路由器与对端路由器相连的接口的IP地址(指自己) 3.Stubnet:P2P,环回口,末梢网络 Link-id:该网段的网络地址 Data:该网段的子网掩码
🍭Type2_LSA
-
定义:Network LSA,描述区域内的广播网络链路的路由器以及掩码信息,仅在区域内部传输,只有DR会产生Type 2 LSA
-
内容:
LS ID:该网段的DR的IP地址 Adv Rtr:该网段DR的Router-id Attached Router :该网段所有路由器的Router-id
🍭Type3_LSA
-
定义:Summary LSA,描述其他区域的链路信息,以子网形式传播,类似直接传递路由,只有ABR会产生Type 3 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外部引入的路由信息
-
内容:
LS ID:外部某个网段的网络地址 Adv Rtr:引入该网段路由的ASBR的Router-id
🍭Type7_LSA
-
定义:NSSA LSA,描述在NSSA区域引入的AS外部路由信息
-
内容:
LS ID:外部某个网段的网络地址 Adv Rtr:引入该网段路由的ASBR的Router-id
⭐️特殊区域
🍦Stub区域
-
定义:末梢区域,适用于区域中路由器性能较低,不希望接收大量AS外部路由的场景
-
特征:
不接收4类和5类LSA 由ABR发送一条3类默认路由的LSA 不允许出现ASBR 区域0不能被配置为stub区域
🍦Totally Stub区域
-
定义:完全末梢区域,适用于区域中路由器性能较低,不希望接收大量AS外部及其他区域的路由的场景
-
特征:
不接收3类、4类和5类LSA 由ABR发送一条3类默认路由的LSA 不允许出现ASBR 区域0不能被配置为Totally stub区域
🍉NSSA区域
-
定义:非纯末梢区域,适用于区域中路由器性能较低,不希望接收大量AS外部路由,但本区域存在ASBR引入外部路由的场景
-
特征:
不接收4类和5类LSA 本区域引入的外部路由以7类LSA存在 本区域的ABR会把引入的7类LSA转换为5类LSA通告给其他区域 NSSA区域的默认路由需要手动配置下发
🍉Totally NSSA区域
-
定义:完全非纯末梢区域,适用于区域中路由器性能较低,不希望接收大量AS外部和其他区域路由,但本区域存在ASBR引入外部路由的场景
-
特征:
不接收3类、4类和5类LSA 本区域引入的外部路由以7类LSA存在 本区域的ABR会把引入的7类LSA转换为5类LSA通告给其他区域 本区域的默认路由由ABR发送3类LSA产生
💙OSPF选路规则
- 区域内路由
- 区域间路由
- 引入的一类外部路由:计算AS内部cost值
- 引入的二类外部路由:不计算AS内部cost值,默认情况下外部路由以2类引入
- 对比cost
- 跨区域的路由必须经过骨干区域
💜虚连接
-
定义:通过在一个中间区域的2个ABR上配置虚连接来使两端的区域实现逻辑上的连接
-
作用:解决骨干区域分割,解决非骨干区域不能和骨干区域相连
-
特征:在ABR上配置,在中间区域的区域视图下配置
当ASBR引入多条网络ID一致,掩码不一致的外部路由时,会把除第一条以外的外部路由产生的5类LSA的LS ID的主机位做全反操作,来防止LS ID冲突
❤️OSPF路由聚合
-
OSPF只能手动聚合
-
聚合类型
ABR聚合: 1.把一个区域的LSA聚合后发布到相邻区域 2.在传入区域的区域视图配置 3.只能对Type 3类的LSA进行聚合 4.ABR的聚合不会影响本机的路由,只会影响下游路由器的路由 5.ABR聚合后会在ABR本机上产生一条该聚合路由的黑洞路由来防止环路出现 ASBR聚合: 1.把引入的AS外部路由聚合后发布到OSPF内部 2.在协议视图配置 3.只能对Type 5、7类Lsa进行聚合 4.ASBR的聚合不会影响本机的路由,只会影响OSPF内部其他路由器的路由 5.ASBR聚合后会在ABR本机上产生一条该聚合路由的黑洞路由来防止环路出现
使用聚合实现路由过滤:在聚合后加入not-advertise参数 (过滤3类LSA,用了not-advertis后 影响下游)
💚OSPF安全验证
- 接口验证:链路两端的接口必须配置一致的密码才能建立邻居关系
- 区域验证:在区域下配置一致的密码才能加入同一个区域
- 接口验证高于区域验证,只要接口验证通过,哪怕区域验证挂了也能通过
💓OSPF路由过滤
- 对计算出的路由进行过滤,只会影响本路由器的路由学习,在协议视图下配置进方向
- 对3类LSA进行过滤,会影响所有下游路由器,在传入区域的区域视图下配置出方向,必须在ABR上面配置
💗常用命令
[h3c]display ospf lsdb router //查看1类LSA
[h3c]display ospf lsdb network //查看2类LSA
[h3c]display ospf lsdb summary //查看3类LSA
[h3c]display ospf lsdb asbr-summary //查看4类LSA
[h3c]display ospf lsdb ase //查看5类LSA
[h3c]display ospf lsdb nssa //查看7类LSA
[h3c-ospf-1-area-0.0.0.1]stub //配置stub区域
[h3c-ospf-1-area-0.0.0.1]stub no-summary //配置Totally stub区域
[h3c-ospf-1-area-0.0.0.1]nssa 'default-route-advertise' //配置NSSA区域
[h3c-ospf-1-area-0.0.0.1]vlink-peer 'router-id' //配置虚连接
[h3c-ospf-1-area-0.0.0.1]abr-summary 'network' 'mask' 'not-advertise' //配置ABR聚合
[h3c-ospf-1]asbr-summary 'network' 'mask' 'not-advertise' //配置ASBR聚合
[h3c-ospf-1-area-0.0.0.0]authentication-mode 'simple' 'plain' 'key' //配置区域验证
[h3c-GigabitEthernet0/0]ospf authentication-mode 'simple' 'plain' 'key' //配置接口验证
[h3c-ospf-1]filter-policy 'acl-number' import //过滤计算的路由
[h3c-ospf-1-area-0.0.0.0]filter 'acl-number' export //过滤3类LSA