路由概述
任何一个上网的设备,都必须有 IP 地址。两个通信的设备之间的通信类型分为:交换和路由
所谓的交换,指的是两个设备的 IP 地址属于同一个网段,就得依靠交换设备以及交换技术,此处的交换设备指的就是交换机
交换机,一般称之为二层设备,因为该类型的设备在处理数据的 时候,查看的是数据的 2 层 MAC地址信息。所以交换机的核心工作表叫: MAC 地址表
MAC 地址标的条目重要组成字段:
VLAN ------MAC 地址 ------- 端口号
# vlan 号, 是由 VLAN 技术决定的;
# MAC 地址,是由 ARP 报文的源 MAC地址来决定的 ( 因为每个端口使用时,都会发送无故 ARP,进行地址冲突检测 )
# 端口号, 是由 STP / RSTP / MSTP 协议来决定的,这里的端口肯定是哪些状态为 Forwarding 的 口
关于 VLAN 的配置原则 : 所有的交换机的 vlan 信息,一模一样,结合 “ 交换机之间全是 Trunk ”、" 交换机和非交换机之间全是 access ”
关于 STP / RSTP / MSTP 的配置原则:所有交换机的配置都要一模一样( 除了跟交换机的优先级以外 ),即:
STP 的模式要相同
STP 的域名要相同
STP 的实例数要相同
STP的实例 ID 要相同
STP 的实例后面跟着的 VLAN 号要相同
只要满足上述的 2 个原则,那么:同一个网段内的所有的主机互通,肯定没问题。
===============================================================
每一个交换机在收到一个数据帧以后的处理过程:
- 基于入端口形成 MAC 地址 ( 数据的 VLAN 号 - 数据源的 MAC --- 入端口号 )
- 基于出端口转发数据帧 ( 如何确定出端口 )
# 交换机收到数据以后,首先确定属于哪个 VLAN
# 交换机基于自己的 STP 的配置,确定该 VLAN 属于哪个 instance *
# 交换机本地查看该 STP 实例中每个端口的状态 : display stp instance * brief
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
所谓的路由,指的是两个设备的 IP 地址属于不同的网段。依靠的是路由设备,比如常见的路由器或者是多层交换机。
而这些设备,通常被称之为 3 层设备,因为这些设备在处理数据的时候,主要是查找数据的 3 层 ip 地址 ( 目标 IP 地址 ),主要依靠的是“ 路由表 ”。所以,只要是不同的网段之间不通,那就去查看路由设备的 “ 路由表 ”。我们在学习路由的过程中,就是在学习各种不同类型的路由条目。
所谓的路由条目的“ 不同类型 ”,指的就是路由器学习这个路由条目的方式,有很多:
- 直连路由
- 非直连路由
- 静态路由
- 动态路由
- IGP ( Internal Gateway Protocol - 内部网关协议) - 同一个公司内运行的路由协议
- DV ( distance vector - 距离矢量):路由器之间传递的是“ 路由条目 ”
- RIP ( Routing Information Protocol - 路由信息协议 )仅仅适用于小型规模的企业网络。并且评估一个路由好坏时,维度单一。
- IGRP针对 RIP 做了更改,支持更大规模的网络,但是是思科私有协议
- EIGRP-增强型的 IGRP ,评估路由好坏的标准较为客观,依然是私有的
- LS( Link -State - 链路状态 ):路由器之间传递的是“ 链路状态信息 ”
- ISIS -免费的公有标准协议,理论上支持的网络规模没有限制,仅支持 CLANP协议 ( IP 协议的死对头 )
- OSPF -( Open Shortest Path First --开放式最短路径优先 )工作过程类似于ISIS,支持的是 IP 协议
- DV ( distance vector - 距离矢量):路由器之间传递的是“ 路由条目 ”
- EGP ( External Gaterway Protocol - 外部网关协议 )- 不同公司之间运行的路由协议
- BGP ( Border Gateway Protocol ):边界网关协议
- IGP ( Internal Gateway Protocol - 内部网关协议) - 同一个公司内运行的路由协议
OSPF概述
该协议叫做 Open Shortest Path First ,开放式最短路径优先级协议,通过该协议计算出来的肯定是去往一个目标网络时,所使用得最短的,无环的转发路径
该协议属于 OSI 模型第三层,协议号是 89 。所有的 OSPF 报文,都是包含在 IP 头部的后面,是通过组播的方式发送的 ,组播地址是 224.0.0.5 和 224.0.0.6 。然后在路由器之间来回的发送,从而就可以让路由器互相学习彼此的路由条目。
OSPF工作原理
- 建立邻居表:包含的是成为邻居关系的设备,所有的 OPSF 报文,仅仅在邻居之间发送
- 同步数据库:包含的是自己的以及从邻居学习过来的 “ 链路状态信息 / 通告 ”-LSA ( Advertisement )
- 计算路由表:包含的自己基于 “ 数据库中的 LSA ” 计算出来的最好的路由条目
OSPF报文类型
- hello ,用于邻居表的建立、维护和拆除
- dd , database description ,数据库描述报文,用于实现数据库的快速和可靠的同步
- lsr , link state request ,链路状态请求,用于请求想要的 “ LSA ”的
- lsu , link state update ,链路状态更新 ,用于发送 LSA 包文的
- lsack ,link state acknowledge ,链路状态确认,用于实现 LSR 和 LSU 的可靠传输
OSPF基本配置
拓扑
需求
- 如图配置设备之间的 IP 地址
- 将每个路由器规划进入到 OSPF 区域 0 ,通过 OSPF 互相学习路由
- 确保 PC 1 和 PC 2 互通
配置
首先为三个路由器配上基本配置:
R1:
<Huawei>undo terminal monitor
<Huawei>system-view
[Huawei]sysname R1
[R1]interface gi0/0/2
[R1-GigabitEthernet0/0/2]ip address 192.168.1.254 24
[R1-GigabitEthernet0/0/2]quit
[R1]interface gi0/0/0
[R1-GigabitEthernet0/0/0]ip address 192.168.12.1 24
quit
R2:
<Huawei>undo terminal monitor
<Huawei>system-view
[Huawei]sysname R2
[R2]interface gi0/0/1
[R2-GigabitEthernet0/0/1]ip address 192.168.12.2 24
[R2-GigabitEthernet0/0/1]quit
[R2]interface gi0/0/0
[R2-GigabitEthernet0/0/0]ip address 192.168.23.2 24
quit
R3:
<Huawei>undo terminal monitor
<Huawei>system-view
[Huawei]sysname R3
[R1]interface gi0/0/1
[R1-GigabitEthernet0/0/1]ip address 192.168.23.3 24
[R1-GigabitEthernet0/0/1]quit
[R1]interface gi0/0/0
[R1-GigabitEthernet0/0/0]ip address 192.168.2.254 24
quit
然后将三个路由器加入到 OSPF
R1:
[R1]ospf 1 #开启OSPF 进程号为 1
[R1-ospf-1]area 0 #OSPF 区域为 0
[R1-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255 #将网段192.168.1.1.0 宣告进区域 0中
[R1-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255#将网段192.168.1.12.0 宣告进区域 0中
[R1-ospf-1-area-0.0.0.0]quit
[R1-ospf-1]quit
R2:
[R2]ospf 1
[R2-ospf-1]area 0
[r2-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[r2-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]quit
[R2-ospf-1]quit
R3
[R3]ospf 1
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]network 192.168.2.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]quit
[R3-ospf-1]quit
此时 PC1是可以访问到 PC 2 的:
我们可以 在 R1 上 display ip routing-table 192.168.12.1 查看去 PC2 的路由
[R1]display ip routing-table 192.168.12.1
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
192.168.12.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet 0/0/0
如果中间不通,分别在 R1 / R2 / R3 中 查看 OPSF 邻居关系是否建立成功
display ospf peer brief
此处 必须为 FULL,否则就是没有建立邻居
如果还是不通,建议看下PC 的基本配置,IP地址、网关、掩码、或者路由器的接口 IP 地址是否配错。
display ospf peer brief # 查看 ospf 邻居信息
OSPF Process 1 with Router ID 192.168.23.2 Peer Statistic Information
# OSPF 进程 1 router id 是 192.168.23.2 的邻居链路信息
Area Id :区域 ID
Interface 接口号
Neighbor id :邻居 ID
State :状态
基本配置命令分析
对以下的 OSPF 的基础命令进行分析:
[R1]ospf 1
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255 # --》设备之间的 互联网段
[R1-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255
重要字段解释:
@ ospf 1 ---> 后面的这个 1 ,表示的是 “ ospf 进程号 ” ,作用是用于在路由器本地区分不同的 OSPF 协议的。不同的进程号的 OSPF 协议,相当于完全不同的了两个协议,互相隔离的。如果在运行 OSPF 的时候,不指定进程号,默认是进程 1.取值范围是 1 --65535
@ area 0 ---》 指定接下来宣告的网段,是进入到 opsf 区域 0 ,并且需要了解的是: 运行 ospf 必须指定区域。区域这个概念是 LS 协议玉 DV 协议最大的区别。 LS 协议 ISIS/ OSPF ,通过支持 “ 区域 ” 这个概念,从而可以将整个企业网络的架构分层2层架构。即:骨干区域和非骨干区域 。并且有了这个两个概念以后,整个企业的网络设计的扩展性就回非常强,并且便于后期的网络管理以及故障分析定位和排查,也增加了网络的稳定性。并且在 OSPF 协议种,区域都是通过“ 区域号” 来表示的。区分骨干区域和非骨干区域,也非常简单。只要区域号是 0 的就表示骨干区域;如果不是 0 ,那就是非骨干区域。如果一个网络同时存在多个区域,那么多区域的 OSPF 网络设计/ 互联原则,必须是:所有的非骨干区域,必须连接骨干区域。否则不同区域之间,是不可以互通的 ,如果网络仅仅设计为一个 OSPF 区域,那么这个区域必然是区域 0 .
@ network 192.168.12.0 0.0.0.255 ---》 该命令后面跟的,其实不是网段,而是一个 IP 地址的网络范围,同时后面跟的也不是 “ 通配符 -wild car bits ”,而是“ 反掩码 ” 。其实 network 命令后面跟的仅仅是一个 IP 地址的范围,比如 network 192.168.12.1 0.0.0.0 指的是:当前 OSPF 协议,想要在该设备的所有直连接口中,检查每个端口的 IP 地址的 32 bit ( 因为 network 中写的是 0.0.0.0 ),并且这个 32 bit ,必须和前面的规则 : 192.168.12.1相同,而此时的 R1上,真的存在这样的 一个 IP 地址的接口 - gi 0/0/0.
那么此时我们就可以说: gi0/0/0 这个端口备宣告成功了,或者叫启用了 OSPF 协议,所谓的 “ 一个端口开启了 ospf 协议 ”指的是:
这个端口,可以发送 ,OSPF 报文
这个端口 ,可以接收 ,OSPF 报文
这个端口的 IP 地址中的网络部分,直接通过 OSPF 报文发送出去。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
《 掩码 》
作用-区分 IP 地址的 网络位和主机位;
表示 - 与 IP 地址的网络位对应时,用 1 表示;与 IP 地址的主机位相对应时,用 0 表示
特点--左边永远都是 1 ,右边永远都是 0 ;1 和 0 永远不交叉,关注的时掩码中的 1 位;
场景--配置 IP / 配置路由
《 反掩码 》
表示 --将掩码中的 1 和 0,互相颠倒位置
特点--左边永远都是 0,右边永远都是 1; 0 和 1 永远不交叉,关注的时掩码中的 0,对应的位
场景-- OSPF 协议中通过 network 命令宣告直连网段的时候,才会使用
《 通配符 》
特点-- 1 和 0 的位置 ,没有任何的摆放规则。所以可以像掩码,也可以像反掩码,还可以都不像,比如 0.0.255.0 关注的也是掩码中的 0 ,对应的位;这点和反掩码相同
场景 -- ACL 中
OSPF邻接表分析
重要字段解释:
# ospf 1 ,表示的是 OSPF 进程,在配置 OSPF 的时候,如果不指定,默认就是 1
# router ID ,表示的 是 OSPF 路由器的 名字。即 OSPF 协议为这个路由器起的名字 。
router - id 的格式 ,类似与 IP 地址 ,但是本质它不是 IP 地址
router -id 的确定方式有两种 :
手动指定:
如果是手动指定 ,则需要通过下面的命令配置 :
ospf { 进程号 } router -id { x.x.x.x } ,x 随便写
案例:修改 R1 的 router -id 为 1.1.1.1
首先我们先看下 R1 的 router-id
我们可以看到 R1 的 router-id 是 192.168.1.254
那么我们修改 Router-id 为 1.1.1.1
我们再看一次是否生效
我们可以看到此时的 router-id 还是 192.168.1.254 ,这是为什么呢?好像也没有报错啊?我们看下配置
[R1]display current-configuration
可以看到配置文件亿配置的,但是配置了他就一定执行了嘛?记住一般情况不要看
display current-configuration ,因为它可能会欺骗你,我们可以看到配置文件改了,但是邻居表里面的没有改,为什么呢?
注意噢,不是所有的配置敲了之后不报错就是对的
注意,看这里的提示。这个设置已成功,你需要重启 OSPF 的 进程是它生效成为新的 router-id
到底是不是这样,我们来试一下。
<R1>reset ospf 1 process @ 重启 OSPF 1 进程
Warning: The OSPF process will be reset. Continue? [Y/N]:y # 确定重启嘛? 确定
此时我们再来看下邻居表
display ospf peer brief
此时我们可以看到 router-id 已经修改成 1.1.1.1 了
自动选举
首先会选择设备上的 回环接口 ( lookback )中最大的 IP 地址,作为 router-id
其次会选择设备上的物理接口中的最大的 IP 地址,作为 router-id
-area ID ,表示的是邻居设备所在的区域
-interface ID ,表示的 “ 本地 ” 与邻居连接时,所使用的 “ 接口 ”
- neighbor id ,表示的时 “ 邻居设备 ” 的 router-id
-state ,表示的时 “ 邻居设备的 ” 状态,最终完美状态是 Full ( 完全邻接 ) ,其他的过度状态:
init
attempt 尝试,只有在 NBMA 网络环境下才会出现该状态
two-way
exstart
exchange
loading
full
down
在该表中, R2 知晓了 邻居设备 R1 / R3 的邻居信息。就是因为;设备之间交换了彼此的 OSPF hello 报文。所以我们想要搞清楚 ospf 邻居相关内容,必须详细分析 ospf 的hello 报文
OSPF报文分析之Hello
ospf 报文封装
ospf 报文是封装在 IP 头部的后面,协议号为 89 ,目标 IP 时 224.0.0.5
ospf 报文头部
1、Version : 表示的是 OSPF 的协议版本,默认是 2 。支持的 Ipv4;如果是 3 的话,就是 ipv6。
2、 message type :信息类型,表示的是 OSPF 的报文类型,此时是 hello
3、source ospf router :表示的是发送这个 ospf 的路由器的 router-id
4、packet length : 表示的是后面的这个 OSPF 报文的大小长度
5、 area ID :表示的是该报文是从哪个区域发送出来的
6、packet checksum :表示的报文的校验和,用于检测报文在传输过程中是否出错
7、auth type :表示的认证类型,也就是常说的加密类型,一般都是明文或者密文,默认情况下 ,OSPF 的认证类型是 Null ( 空,也就是没有认证 )
8、 auth date :表示的是加密的密码
OSPF 报文分析之 hello
1、 network mask :表示的是发送这个 hello 报文的出接口掩码
2、 hello interval : 表示的是该端口发送 hello 报文的周期,默认是 10 s
3 、 options : 可选项。也通常被称之为 “ 特殊标记为 ” ,用了表示一个路由器的能力
4、 router priority : 路由优先级 ,默认是 1
5、 router dead interval : 表示得额是 ( 邻居路由器 )的死亡时间,默认是 40 s.
6、 designated router : 指定路由器 ,俗称 DR
7、 back designated router : 备份指定路由器 ,俗称 BDR
8 、active neighbor : 活动邻居,通常称之为 neighbor -list 邻居表。表示的是自己认可、承认的 邻居设备的 router-id
OSPF邻居建立影响因素
- 确保设备之间的 IP 地址互通
- 建立邻居的设备,必须是同一个网段的 ;
- 两个接口的 IP 地址,必须能够互相 ping 通
- 确保设备可以发送 hello 报文
- 接口必须通过 network 命令 ,正确宣告
- 确保接口不能够被配置为 ospf 的静默接口
- 确定设备之间发送报文的方式
- 要么都是组播
- 要么都是单播
- 确保设备之间可以接收 hello 报文
- 接口必须通过 network 命令正确宣告
- 确保接口不能够被配置为 OSPF 的静默接口
将 R1 的 g/0/00 接口配置静默接口 后我们看下邻居可以建立不
- 可以看到无法建立邻居
- 该端口上如果配置了策略 ( ACL ),不能拒绝 OSPF 报文
- 确保设备之间可以比较 hello 报文
- router-id 不能相同
- 首先看下 R2 的router-id 为 2.2.2.2 我们看 ospf 邻居有2个,那么当我们把 router-id 改成 1.1.1.1 我们看下
- [R2]ospf 1 router-id 1.1.1.1
Info: The configuration succeeded. You need to restart the OSPF process to valid
ate the new router ID. - <R2>reset ospf 1 process
Warning: The OSPF process will be reset. Continue? [Y/N]:y -
<R2>display ospf peer brief
OSPF Process 1 with Router ID 1.1.1.1
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet0/0/0 192.168.23.3 Full
----------------------------------------------------------------------------
我们可以看到,此时已经没有了 1.1.1.1 的 邻居表了,那么我们在将 router-id 改回 2.2.2.2 我们再看下结果: -
[R2]display ospf peer brief
OSPF Process 1 with Router ID 2.2.2.2
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet0/0/1 1.1.1.1 Full
0.0.0.0 GigabitEthernet0/0/0 192.168.23.3 Full
----------------------------------------------------------------------------
改回后,可以看到 1.1.1.1的邻居,所以。我们可以确定,router-id 必须相同
- area- id 必须相同
我们将 原先的 OSPF 删除掉,重新建立一个 ospf 1 但是区域是 1 的ospf ,我们可以发现 R1 R2 R3 都无法建立正常 的邻居关系,那我们将其换成区域 0 再看看是否可以重新建立邻居关系
-
-
-
所以我们可以确定,area-id 必须一样,否则无法建立邻居关系
-
- 认证类型必须相同
- 认证密码必须相同
- 掩码必须相同 ( 特殊情况下 )
我们可以看到,改回 24后,立马开始建立邻居了,所以我们可以确定 IP 地址的掩码必须一样,否则无法建立邻居
- 我们可以看到,将 R1 的 gi 0/0/0 接口的 IP 地址的掩码变成 25 后, R1无法建立邻居表,那么我们将其换回 24再看下
- hello 计时器必须相同
我们可以看到,将 hello 时间改成率10 s 后,是可以建立邻居的,所以我们可以确定 hello 时间必须一定,否则无法建立邻居
-
我们可以看到此时的 hello 时间是 10 S ,那我我们修改以下,将其改成5 S,看下是否还可以建立邻居 - 如上图所示,将 hello 时间修改成5s 后 无法建立邻居,那么我们将其改为回 10 s 再看看。
-
- 特殊表计位,必须相同
- 端口优先级 ,不能全为 0 ( 特殊情况下 )
- 我们可以看到优先级都是 1,那么改下优先级,看下结果R1 R2 优先级改成0 我们看下
- 我们可以看到始终处于 2-way 状态无法 Full,但是 23是可以建立邻居的
- 我们将R2 的 gi0/0/1 优先级改回 1再看看
- 所以我们可以确定优先级都不可以为 0
- dead 计时器必须相同
- dead 时间跟 hello时间是对应的,所以也必须相同,可见上图
OSPF常见配置命令和验证命令
- ospf 的 hello 报文中,包含的参数,都是基于“ hello 报文的出端口的参数来形成的 ”
- display ospf peer 查看 ospf 邻居表 没看进程号 、router-id 、区域号、邻居表状态
- display ospf interface gi0/0/* 查看特定端口上的 ospf 参数
interface gi0/0/* ---ospf timer hello * : 修改 hello 计时器
interface gi0/0/* ---ospf timer dead * : 修改 dead 计时器
interface gi0/0/* ---ospf dr-priority * : 修改 dr 的优先级
OSPF网络类型
任何一个启用了 OSPF 协议的 链路 / 端口,都对应着一个磨人的网络类型;每个接口下的 OSPF 网络类型,都是可以基于用户的需要,进行手动修改的,OSPF 在一个接口上的工作模式和接口本身无关,仅仅与接口的 “ 网络类型” 有关系。
-
广播网络类型( Broadcast )-也叫支持广播的多链路访问网络,即 MA
- 对应的链路:以太网接口
- 是否主动收发报文:是
- 发送报文方式: 组播( 224.0.0.5 + 224.0.0.6 )
- hello / dead : 10 / 40
- 是否小选举 DR : 是
-
非广播网络类型 ( NBMA -none broadcast multi-link access )
- 对应的链路:Fram -relay---帧中继 ( FR )
- 是否主动收发报文:否
- hello / dead : 30 / 120
- 是否小选举 DR : 是
- 如果想要在该环境下建立 ospf 邻居关系,必须手动指定邻居设备的 “ 接口 Ip ”
R2
[R2] GigabitEthernet0/0/0
ospf network-type nbma
quit
[R2]ospf 1
peer 192.168.23.3
R3
[R3] GigabitEthernet0/0/1
ospf network-type nbma
quit
[R3]ospf 1
peer 192.168.23.2
注意:
- 只有当设备之间的互连接口的网络类型是 : nbma 的时候,配置的 peer 才有意义
- peer 命令后面跟的是对端设备的 “ 接口 ip地址 ” ,而不是 “ router-id ”
- peer 命令必须和平时的 area 0 *** + network { ip 地址范围 } { 反掩码 } 结合使用
-
点到点网络类型 ( p2p - point to point)
- 对应的链路: ppp/HDLC
- 是否主动收发报文:是
- 发送报文的方式 :组播 ( 224.0.0.5 )
- hello /dead :10/40
- 是否需要选举 DR: 否
-
点到多点网络类型 ( p2mp -point to multi-point )
- 对应的链路 :无
- 是否主动收发报文: 是
- 发送报文的方式:组播 ( 224.0.0.5 )
- hello /dead : 30 /120
- 是否需要选举 DR: 否
- 修改/ 验证 ospf 网络类型
- interface { 接口 }
- ospf network-type { p2p / p2mp /broadcast /nbma }
- quit
- display ospf interface { 接口名字 } ,关注的参数是 : type **
- interface { 接口 }
OSPF的指定路由器和备指定路由器
-
产生背景
- 互相建立 OSPF 邻居关系的路由器,肯定都位于同一个网段。那么同一个 网段中,可能只有2个路由器,也可能同时存在多个路由器。如果同时村咋多个路由器,那么每个端口都运行了 OSPF 协议后,都会发送自己的 hello 报文,然后每两个路由器之间,都会建立OSPF 邻居关系。
- 一旦建立了邻居关系,批次之间都会将自己的数据库同步给另外一个邻居设备,那么此时就会因为“一个网段中的路由器数量太多了 ”,导致后期的 “ 数据同步 ” 效率就会非常的低。
- 为了能够提高“同一个网段中的,多个邻居路由器之间的,数据库同步效率 ”,所以就提出了 “ 指定路由器 ”的概念,即 DR ( designated router ),有了 DR 以后,同网段中的其他的路由器,都永远仅仅和 DR 同步数据库。所以 DR 非常的忠义,为了确保 DR 的安全性和稳定性,我们可以再选举一个 备份的 DR , 即 BDR
- 但是,如果 DR 和 BDR 都在的话,以后其他的所有路由器在同步数据库的时候,都会同时将数据库信息,同步给 DR 和 BDR ,两者之间的数据库永远都是同步的。所以说:任何一个 OSPF 路由器,在同步数据库的 时候,都要将自己的数据库条目信息,同时发给 DR 和 BDR ,一个设备一份吗?
- 当然不是,为了提高其他设备和 DR/ BDR 同步数据库的效率,都是通过组播的方式发送自己的数据库信息的,组播地址是 :224.0.0.6.
- 那么既不是 DR 也不是 BDR 的设备,称之为 DRother 。所有的设备都只是和 DR/ BDR 同步数据库,即他们之间的状态都是 FULL,那么 DRother 之间的状态,永远都为 two-way 状态
- 总结 :
- 224.0.0.5,表示的是所有的 OSPF 路由器
- 224.0.0.6,表示的是所有的 DR/BDR
-
选举原则
- 首先,比较是 hello 报文中的 DR 的优先级 ,数值越大越好。默认是 1
- 其次,比较的是 hello 报文的 router-id ,越大越好
- 最后,既不是 DR也不是 BDR 的设备,就称之为 DRother
注意:
如果 hello 报文中的 DR 优先级是 0 ,那么种类型的设备永远是 DRother ,没有资格参与 DR/ BDR 的选举
-
DR / BDR 的特点
稳定!
即一旦 DR/ BDR 确定了,那么以后即使是来了优先级更高的或者 router-id 更大的路由器,都不会将 DR / BDR 身份抢占过去。
DR /BDR 是一个网段一个;而不是一个区域选举一个
DR/ BDR 是一个接口的概念,而不是一个路由器的概念
OSPF邻居状态详解
-
init
- 初始化状态
- 当收到了对方设备发送过来的 hello 报文,并且参数协商成功,此时就会将该设备的 router-id 放入到自己的邻居表中,状态设置为 init
- 如果邻居卡在了该状态,说明: 设备之间存在单向链路故障
- 初始化状态
-
attempt
- 尝试状态
- 该状态,仅仅出现在 NBMA 网络环境下,两边通过单播建立邻居的时候,每一个 peer 命令配置后,都可以在邻居表中看到一个处于 attmpt 状态的 邻居
- 尝试状态
-
two-way
- 双向通信状态
- 当在对方发送过来的的 hello 报文中,发现自己的 router-id ( active neighbor ),此时邻居的状态就会立刻从 init 过渡到 two-way 状态。
- 如果该网段中,同时存在多个 OSPF 路由器,那么就要在该状态 (two-way )状态,进行 DR / BDR 的选举
- 但是,这个选举过程中,通常会在该状态持续 40 S 的时间,目的就是为了在这个时间段内尽量的收集到更多的同网段设备发送的 OSPF hello 报文,这样一来,竞选出来的 DR / BDR 更加的客观。
- 如此以来,就会导致 OSPF 邻居建立的时间变长
- 如果邻居卡在了该状态,说明:设备之间想选 DR ,但是选不出来,因为优先级全为 0
- 双向通信状态
-
exstart
- 交换初始化状态 ( exchange start )
- 该状态下,两队互相交换的 是第一个 DD 报文,但是此时该 DD 报文中,什么简要的信息都没。因为此时发送的第一个 DD 报文的主要目的,是为了确定两个设备之间的主从关系,为了实现后续的 DD 报文的可靠传输。一旦邻居设备之间的主从关系确定后;从设备发送的 DD 报文的序列号,一定要和主设备发送的 DD 报文序列号一致
- 主设备和从设备的竞选原则 :
- router-id 越大越好
- 在该状态下,有的时候,设备之间是需要检查 DD 报文的 MTU 字段的。如果两个的 MTU 值不同,则邻居状态就会卡在 exstart ,不会继续下去了,
- 但是在华为设备上,默认情况下,关闭了 MTU 检查机制 、
- 但是在思科设备上,默认是开启了 DD 报文中的 MTU 检查机制
- 如果邻居卡在了该状态下:说明两边的 MTU 取值不同
- 交换初始化状态 ( exchange start )
-
exchange
- 交换状态
- 该状态下,设备之间交换的就是大量的 DD 报文了,该报文中包含的是每个 OSPF 路由器的数据库中的 LSA 条目的简要信息。当两边的数据库条目的简要信息都发送完毕后,就开始对比两边的数据库之间的差异了。知道两边的数据库的不同之后,邻居设备之间就开始向对方请求自己没有的那些数据库条目信息 LSA
- 在上述的 DD 报文中,我们可以明确区分出 DD 报文是由主设备发送的 ,还是从设备发送的,可以明确的判断出当前两边的 DD 报文是否传输完毕了,因为在 DD 报文中,包含了以下 3 个重要的字段:
- master / slave :该字段如果取值为 1,说明是 master 设备;如果取值是 0 ,则是 从设备
- more :该字段表示后面还有更多的 DD 报文;如果取值为 1,这说明后续还有,如果是 0,这说明后续没有更多的 DD 报文。即当前这个 DD 报文是最后一个 DD 报文。
- init :该字段表示是不是第一个 DD 报文,如果取值为 1 ,说明是第一个 DD 报文;如果取值为 0 ,则说明不是第一个 DD 报文
- 我们看 DD 报文的对比
- 在上述的 DD 报文中,我们可以明确区分出 DD 报文是由主设备发送的 ,还是从设备发送的,可以明确的判断出当前两边的 DD 报文是否传输完毕了,因为在 DD 报文中,包含了以下 3 个重要的字段:
- 该状态下,设备之间交换的就是大量的 DD 报文了,该报文中包含的是每个 OSPF 路由器的数据库中的 LSA 条目的简要信息。当两边的数据库条目的简要信息都发送完毕后,就开始对比两边的数据库之间的差异了。知道两边的数据库的不同之后,邻居设备之间就开始向对方请求自己没有的那些数据库条目信息 LSA
- 交换状态
-
loading
- 加载状态
- 该状态下,就是通过不断的 发送 LSA 报文和 LSU 报文,实现两边的数据库同步。并且整个过程中,应该确保是安全和稳定的。所以每次发送 LSR 和 LSU ,都会伴随着 LSAck 的发送
- 加载状态
-
full
- 完全邻接状态
- 该状态下,两边的 数据库条目 ( LSA ) 就完全一致了
- 完全邻接状态
-
dwn
- 挂掉了
- 该状态下,表示没有在规定的 dead 时间内,收到对方的任何的 ospf 报文
- 挂掉了
OSPF链路状态数据库
数据库图
<R1>display ospf lsdb
OSPF Process 1 with Router ID 1.1.1.1
Link State Database
Area: 0.0.0.0
Type LinkState ID AdvRouter Age Len Sequence Metric
Router 2.2.2.2 2.2.2.2 553 48 80000008 1
Router 1.1.1.1 1.1.1.1 581 36 80000004 1
Router 3.3.3.3 3.3.3.3 548 48 80000006 1
Network 192.168.23.3 3.3.3.3 548 32 80000002 0
Network 192.168.12.2 2.2.2.2 574 32 80000002 0
重要字段解释:
- type:表示 LSA 的类型
- 在 ospf 中, LSA 分为 :1/2/3/4/5/7
- link state ID : 表示 LSA 的名字
- 在 OSPF 中,不同类型的 LSA 的名字,表示方式不同
- Adv Router :表示 LSA 的产生路由器
- 无论哪种类型的 LSA ,该字段都是 router-id
- Age : 表示 LSA 的存活时间
- 在 OSPF 中,LSA 的存活时间是正计时的,最大存活时间是 3600,达到最大值后,之间删除
- Len :表示 LSA 的长度 ( length )
- Sequence:表示 LSA 的序列号
- 在 OSPF 中,该字段用来体现 LSA 的新旧承担 ,序列号越大,表示越新, LSA 每次变化,序列号都会自动加 1
拓扑图
OSPF LSA详解之1类LSA ( Router )
LSA的作用
每个区域内,每个 OSPF 路由器都会产生 1 个一类 LSA ,用于自我介绍。
包含的内容有: 自己的名字、自己的接口、自己连接的邻居、自己到邻居的距离
LSA 的名字 ( link-state ID )
是每个 OSPF 路由器的 router-id
LSA 的产生路由器
每个 OSPF 路由器都会产生,所以昌盛路由器,也是 OSPF 的 router-id
LSA 的传递特点
1、该类型的 LSA ,只能在一个区域内传输,不能传输到其他区域
2、任何一个 OSPF 路由器会在自己所连接的,任何一个区域,都产生一个 1 类 LSA
3、在广播网络类型和 NBMA 网络类型环境下,每个 OSPF 路由器产生的 1 类 LSA 中,所描述的邻居设备,都是 DR ( 接口 )
4/ 1类 LSA 中携带的网段,都是自己本身的直连接口的网段
LSA 的详细字段展示
<R1>display ospf lsdb router 1.1.1.1
OSPF Process 1 with Router ID 1.1.1.1
Area: 0.0.0.12
Link State Database
Type : Router # LSA 的类型
Ls id : 1.1.1.1 # LSA 的名字
Adv rtr : 1.1.1.1 # LSA 的产生路由器
Ls age : 701
Len : 36
Options : E
seq# : 80000005
chksum : 0x5505
Link count: 1
* Link ID: 192.168.12.1 # 连接一个 邻居设备 192.168.12.1
Data : 192.168.12.1 # 连接一个 邻居设备时,使用的接口地址是 192.168.12.1
Link Type: TransNet
Metric : 1 # 本设备到邻居 192.168.12.1 的距离 ( metric -度量值,和
cost - 开销一个意思 )
OSPF LSA详解之2类LSA ( Network )
LSA 的作用
在一个网段中,表示 DR 的管理范围的
LSA 的名字( link-state ID )
该类型的 LSA 的名字是 DR 的接口 IP 地址
LSA 的产生路由器 ( ADvRouter )
该类型的 LSA ,只有 DR 才可以产生
所以 2 类 LSA 的 AdvRouter 是 DR 接口所在的设备的 router-id
LSA 的传递特点
该类型的 LSA ,只能在一个区域内传输,不能传输到其他的区域
LSA 的详细字段展示
<R3>display ospf lsdb network 192.168.23.3
OSPF Process 1 with Router ID 3.3.3.3
Area: 0.0.0.0
Link State Database
Type : Network # 类型为 network
Ls id : 192.168.23.3 # DR 的接口 IP 地址
Adv rtr : 3.3.3.3 # DR 接口所在的设备的 router-id
Ls age : 1419
Len : 32
Options : E
seq# : 80000002
chksum : 0x2293
Net mask : 255.255.255.0
Priority : Low
Attached Router 3.3.3.3 # 表示的是有资格与 DR 同步数据库的路由器
Attached Router 2.2.2.2 # 表示的是有资格与 DR 同步数据库的路由器
OSPF LSA详解之3类LSA ( Sum-net )
LSA 的作用
用于在不同区域之间传递路由条目信息
LSA 的名字( link-state ID )
区域之间的路由条目的 “ 网段/ 前缀 ”
LSA 的产生路由器 ( ADvRouter )
只有 ARR 才有资格产生 3 类 LSA ,该字段是产生这个 3 类 LSA 的router-id
LSA 的传递特点
1、只能在一个区域内传输
2、该类型 LSA 在传递过程中,每经过 1 个 ABR ,该 LSA 的 AdvRouter 都会变化一次
3、ABR 会将从骨干区域收到的 3 类 LSA ,转发到非骨干区域
4、 ABR 不会将从“ 非骨干区域 ” 收到的 3 类 LSA ,转发到骨干区域
备注: 唯一标识一个独立的 LSA 的三个要素: 类型 、名字、产生路由器
LSA 的详细字段展示
<R3>display ospf lsdb summary 192.168.12.0
OSPF Process 1 with Router ID 3.3.3.3
Area: 0.0.0.0
Link State Database
Type : Sum-Net # 类型
Ls id : 192.168.12.0 # 区域间路由的网段
Adv rtr : 2.2.2.2 # 产生该 3 类 LSA 的 ABR 的router-id
Ls age : 149
Len : 28
Options : E
seq# : 80000002
chksum : 0x1dc
Net mask : 255.255.255.0 # 区域间路由的掩码
Tos 0 metric: 1 # 度量值 ,标识去往一个网段的距离,类似 cost
Priority : Low
OSPF LSA详解之4类LSA ( Sub-asbr )
LSA 的作用
用于在不同区域之间传递 SBR 的 router-id,为了配合 5 类 LSA 一起计算,形成外部路由
LSA 的名字( link-state ID )
ASBR 的router-id
LSA 的产生路由器 ( ADvRouter )
与 ASBR 在同一个区域的 ABR 产生
LSA 的传递特点
1、只能在一个区域内传输
2、在传输过程中,每经过 1 个 ABR , 4 类 LSA 的 advrouter 就会变 1 次,变成所经过这个 ABR 的 router-id
LSA 的详细字段展示
<R1>display ospf lsdb asbr 6.6.6.6
OSPF Process 1 with Router ID 1.1.1.1
Area: 0.0.0.12
Link State Database
Type : Sum-Asbr # 类型
Ls id : 6.6.6.6 # 产生外部路由的 ASBR 的router-id
Adv rtr : 2.2.2.2 # 区域 12 的 ABR 的router-id
Ls age : 4
Len : 28
Options : E
seq# : 80000001
chksum : 0x3404
Tos 0 metric: 4 ABR ( 2.2.2.2 )到达 ASBR ( 6.6.6.6 )的距离
如果想要查看,自己这个设备,去往全网的ABR/ASBR的距离/下一跳IP地址,可以通过 下面的命令:
<R1>display ospf abr-asbr
OSPF Process 1 with Router ID 1.1.1.1
Routing Table to ABR and ASBR
RtType Destination Area Cost Nexthop Type
Intra-area 2.2.2.2 0.0.0.12 1 192.168.12.2 ABR
Inter-area 6.6.6.6 0.0.0.12 5 192.168.12.2 ASBR
OSPF LSA详解之5类LSA ( External )
LSA 的作用
表示 OSPF 的外部路由
LSA 的名字( link-state ID )
OSPF 外部路由的 “ 网段/前缀 ”
LSA 的产生路由器 ( ADvRouter )
该类型的 LSA,只能由 ASBR 产生 ( autonomous stsrem border router ):自治系统边界路由器
LSA 的传递特点
1、该类型的 LSA ,没有任何区域的概念;可以传输到 OSPF 网络的任何地方
2、该类型的 LSA 在传输过程中,不会有任何的变化
LSA 的详细字段展示
<R5>dis ospf lsdb ase 192.168.1.0
OSPF Process 1 with Router ID 5.5.5.5
Link State Database
Type : External # LSA 的类型
Ls id : 192.168.1.0 # 外部路由的网段
Adv rtr : 6.6.6.6
Ls age : 32
Len : 36
Options : E
seq# : 80000001
chksum : 0x8dc0
Net mask : 255.255.255.0 # 外部路由的掩码
TOS 0 Metric: 1 # 去往外部路由的开销/度量值/距离
E type : 2 # 外部路由的“ 类型 ”,默认是 type 2
Forwarding Address : 0.0.0.0 # 去往外部路由的“ 转发地址 ”
Tag : 1 # 外部路由的 “ 标记 ”
Priority : Low
5类 LSA又基于 “ 路由 cost 的计算方式 ” 的不同,细分为两种 :type1 和type 2
1、type 2:这种类型的 5类 LSA ,在计算路由条目中的 cost 的试试,该数值等于 LSA 中的 “ metric ” 字段的取值。该值,默认等于 1。所以路由表中也是1 。
2、type 1 :这种类型的 5类 LSA ,在计算路由条目中的 cost 的时候,该数值等于 LSA 中的
“ metric ” 字段的取值,加上本地设备去往 “ asbr ”的距离。该案例中, R1去往 ASBR -R6 的距离是5,所以我们在 R 6上将外部路由的类型修改为 1 后,在R1 的路由表中,该外部路由信息的开销值是5 ( 5+1)
我们可以看到cost 还是 1,这是为什么呢
此时我们可以看到 R1 到 R6 的开销变成了6
关于 LSA 的讨论
拓扑
- 区域 56中,有没有 4类 LSA ? 没有
- R2 上有几个 4 类的 LSA ? 2个
- 区域 19中的 R9 上,有没有 R6 产生的 5类 LSA ? 有
- 区域 19 的 R9 上,有没有 R6 产生的 5类的 LSA 表示的路由 ? 没有
- 在区域 12 的 R1上,关于 192.168.56.0 /24 这个路由是通过积累 LSA 表示的 ? 3 类
- 在 R 1上有激光割关于 192.168.56.0/24的 3 类 LSA ? 2 个
- 在 R12 上有几个关于 192.168.56.0/24的 3 类 LSA? 3个 { 0区域中 R5发送的、12区域中自己发送的、12区域中另外一个个 ABR-R2 发送的1个 }
5 类 LSA 的 forewording-address ( 转发地址 )
拓扑
配置命令
R1
undo terminal monitor
system-view
sysname R1
interface gi0/0/0
ip address 192.168.12.1 24
ospf network-type p2p
quit
interface gi0/0/2
ip address 192.168.145.1 24
quit
ospf 1 router-id 1.1.1.1
area 0
network 192.168.12.0 0.0.0.255
quit
quit
ip route-static 192.168.1.0 24 192.168.145.5
==========================
R2
undo terminal monitor
system-view
sysname R2
interface gi0/0/0
ip address 192.168.23.2 24
ospf network-type p2p
quit
interface gi0/0/1
ip address 192.168.12.2 24
ospf network-type p2p
ospf 1 router-id 2.2.2.2
area 0
network 192.168.12.0 0.0.0.255
network 192.168.23.0 0.0.0.255
quit
quit
===================
R3
undo terminal monitor
system-view
sysname R3
interface gi0/0/1
ip address 192.168.23.3 24
ospf network-type p2p
quit
interface gi0/0/0
ip address 192.168.34.3 24
ospf network-type p2p
ospf 1 router-id 3.3.3.3
area 0
network 192.168.34.0 0.0.0.255
network 192.168.23.0 0.0.0.255
quit
quit
=======================
R4
undo terminal monitor
system-view
sysname R4
interface gi0/0/1
ip address 192.168.34.4 24
ospf network-type p2p
quit
interface gi0/0/2
ip address 192.168.145.4 24
quit
interface gi0/0/0
ip address 192.168.2.254 24
quit
ospf 1 router-id 4.4.4.4
area 0
network 192.168.34.0 0.0.0.255
network 192.168.2.0 0.0.0.255
quit
quit
R5
undo terminal monitor
system-view
sysname R5
interface gi0/0/2
ip address 192.168.145.5 24
quit
interface gi0/0/0
ip address 192.168.1.254 24
quit
产生的背景
该参数-forwarding-address ,仅仅会出现在 表示外部路由的 LSA中,比如 5类 和 7类,但是,该参数通常情况下,在 5 类 LSA 中,都是 0.0.0.0
在某些情况,该参数是可以用来“ 在广播和非广播 OSPF 网络中,防止数据转发的次优路径 ” 的产生(如上图所示)
解决次优路径的原理
- 当 forwarding address 是 0.0.0.0 的时候,通过这个 LSA 计算外部路由的时候,吓一跳 IP 地址就是去找 该 5 类 LSA 的 ASBR 的时候,需尧使用的下一跳 IP 地址。
- 当 forewording address 不是 0.0.0.0 的时候,该外部路由的下一跳 IP 地址 ,通常都是 这个“ 非0地址 ”
- 但是,想要让 ASBR 产生的外部路由的 Forwarding address 不为 0 ,也是有条件的: 即在 ASBR 设备上,去往外部路由的下一跳 IP 地址时,所使用的接口必须启用 OSPF 协议。同时该端口的网络类型,必须是广播或者非广播。
- 另外,这种类型的 LSA 到了其他设备上,计算路由的时候,就会将下一跳 IP 地址设置为这个 “ 非0 ” IP 地址。但是,如果计算路由的这个设备,去往这个下一跳 IP 地址的时候,使用的是直连网段 / 接口,那么该端口 / 网段,也必须启用 OSPF 协议。才能将这个下一跳 IP 地址真正的放入到自己的路由表,例如拓扑中的 R4 的 gi0/0/02 端口也必须启用 OSPF。
- 在上述的拓扑中,R3上去往 192.168.1.0 /24 的路由,下一跳 IP 地址 是 R 4,不是 R2;
- 在上述的拓扑中,R2去往 192.168.1.0 /24的路由,下一跳 IP 地址是 R1,不是 R3.
如果 R2要去 192.168.1.0的话该怎么去呢?
我们可以看下 在 R4上,去往192.168.1.0网段的下一跳是 192.168.34.3的,R1 上我们可以看到下一跳是 192.168.145.5
所以,路由的走向是下图的 红色线路,而非蓝色线路,这是为什么呢?
我们来R4上看看
我们可以看到 去往 192.168.1.0的 forwarding address 为 0.0.0.0,那如果我们将 forwarding address 改成 192.168.145.5呢?我们试下:
R1 :
ospf 1
area 0
network 192.168.145.0 0.0.0.255
将 R1 的 gi0/0/02接口启用 OSPF
我们可以看到,此时的 Forwarding address 已经变成了 192.168.145.5 ,再看下 R4
我们可以看到 R4 的 Forwarding adress 已经变成了 192.168.145.5 ,那么我们再来看下到达 192.168.1.0网段的路由
我们可以看到,此时 R4中有一条到达1.0网段的外部路由,但是 下一跳是 34.3 ,那么为什么没有变成145.5 呢?
由于,在R4中145.5网段是他的直连,但是接口 GE0/0/2没有启用 ospf,所以在 OSPF 中计算路由的时候,没有计算进去,那么我们将 ge0/0/2 接口加入到 OSPF 再看看
此时我们可以看到 路由的下一跳变成了192.168.145.5。
我们前面说使用的出接口必须是 OSPF 协议,端口必须是 广播或者非广播,那么是这样嘛?我们试下:
在 R1 中修改 ge0/0/2接口的type
此时我们再看下 R4中去往 1.0 的路由
我们可以看到 Forwarding address 又变成了0.0.0.0
改成 broadcast再看看
此时可以看到 Forwarding address 已经变成145.5 。那么再改成 p2mp 试试
我们可以看到又变成0.0.0.0 了,那么再改成 nbma 看看
由此可见:
在 ASBR 设备上,去往外部路由的下一跳 IP 地址时,所使用的接口必须启用 OSPF 协议。同时该端口的网络类型,必须是广播或者非广播。
OSPF LSA详解之7类LSA ( Nssa )
LSA 的作用
在 NSSA 区域内部,表示 OSPF 外部路由
LSA 的名字( link-state ID )
OSPF 外部路由的 “ 网段 ”
LSA 的产生路由器 ( ADvRouter )
NSSA 区域的 ASBR 设备
LSA 的传递特点
1、该类型的 LSA ,只能在 NSSA 区域内传输
2、 类似于 5 类 LSA ,也分为 type 2 和 type 1 ,即计算路由的cost 时,有区别
3、不同于 5 类 LSA, 7 类 LSA 的 forwarding-address 一直都是非 0.0.0.0的 IP 地址
LSA 的详细字段展示
构建了许多区域的 OSPF 网络之后,我们对 OSPF 网络中的路由器,就进行了下面的分类:
骨干区域
该路由器所有的端口,都是属于骨干区域 0 的
非骨干区域
该路由器的所有端口,嗾使属于非骨干区域的( 非0区域)
区域边界路由器(ABR-area border router)
同时连接着 骨干区域和非骨干区域的路由器
自治系统边界路由器
拥有“ 产生外部路由能力 ” 的路由器,凡是能敲 import-route 命令的的路由器,都叫 ASBR
OSPF 的区域类型
骨干区域
所谓的 0 区域,就是骨干区域
非骨干区域
- 所谓的非 0 区域,就是非骨干区域
- 普通区域
- 特殊区域:即不要 5 类 LSA 的区域
- stub区域
- totally stub 区域
- nssa区域
- totally nssa 区域
OSPF 特殊区域
产生背景
在 OSPF 网络中,通常是通过 5 类 LSA 表示外部路由,但是外部路由也非常不稳定。 所以表示外部路由的 5类 LSA ,也就不稳定。
同时 ,5 类 LSA 有一个特点,可以传输到整个IOSPF 网络中,如果 5类 LSA 不稳定, 影响的就是整个 OSPF 网络。,所以通常情况下,为了保护某个重要的区域,避免受到外部路由的影响,将这个区域设置为 " 特殊区域 " ----即不要 5 类 LSA 的区域
特殊区域的拓扑
配置命令
R1
undo terminal monitor
system-view
sysname R1
interface gi0/0/0
ip address 192.168.12.1 24
quit
interface gi0/0/1
ip address 192.168.16.1 24
quit
ospf 1 router-id 1.1.1.1
area 123
network 192.168.12.0 0.0.0.255
quit
quit
ip route-static 192.168.2.0 24 192.168.16.6
==========================
R2
undo terminal monitor
system-view
sysname R2
interface gi0/0/0
ip address 192.168.23.2 24
quit
interface gi0/0/1
ip address 192.168.12.2 24
quit
ospf 1 router-id 2.2.2.2
area 123
network 192.168.12.0 0.0.0.255
network 192.168.23.0 0.0.0.255
quit
quit
===================
R3
undo terminal monitor
system-view
sysname R3
interface gi0/0/1
ip address 192.168.23.3 24
quit
interface gi0/0/0
ip address 192.168.34.3 24
quit
ospf 1 router-id 3.3.3.3
area 123
network 192.168.23.0 0.0.0.255
quit
area 0
network 192.168.34.0 0.0.0.255
quit
=======================
R4
undo terminal monitor
system-view
sysname R4
interface gi0/0/1
ip address 192.168.34.4 24
quit
interface gi0/0/0
ip address 192.168.45.4 24
ospf 1 router-id 4.4.4.4
area 0
network 192.168.34.0 0.0.0.255
quit
import-route static
quit
ip route-static 192.168.0.0 16 192.168.45.5
R5
undo terminal monitor
system-view
sysname R5
interface gi0/0/1
ip address 192.168.45.5 24
quit
interface gi0/0/2
ip address 192.168.1.254 24
quit
ip route-static 0.0.0.0 0 192.168.45.4
R6
undo terminal monitor
system-view
sysname R6
interface gi0/0/2
ip address 192.168.2.254 24
quit
interface gi0/0/0
ip address 192.168.16.6 24
quit
ip route-static 192.168.1.0 24 192.168.16.1
此时我们可以用 R1 ping 通 192.168.1.1的
此时我们在R1 中看下 192.168.1.1的路由可以看到有一条外部的 5类 LSA
类型与特点
- stub 区域 ( 末梢区域 )
此时已经没有去往 192.168.1.0的 5类 LSA 了,只有一条默认的 3 类 LSA那么 ,R1还可以 ping 通 192.168.1.1 吗
- 作用:防止该区域受到不稳定的外部链路的影响
- 配置:在该区域的所有路由器上,都是用下面的命令 : area { 区域号 } ---》 stub
- 特点:
- 该区域不允许接收 4/5类 LSA
- 该区域允许接收1/2/3 类 LSA
- 该区域的 ABR 会自动产生 1 个表示默认路由的 “ 3类 LSA ”
- 配置命令如下
- R1
- [R1]ospf 1
- [R1-ospf-1]area 123
- [R1-ospf-1-area-0.0.0.123]stub
- R2
- [R2]ospf 1
- [R2-ospf-1]area 123
- [R2-ospf-1-area-0.0.0.123]stub
- R3
- [R3]ospf 1
- [R3-ospf-1]area 123
- [R3-ospf-1-area-0.0.0.123]stub
- R1
- 此时我们再来看下 R1/R2/R3的lsdb
再看下 R1 能否继续与 192.168.1.1 通信
可以继续通信的
- totally stub区域 ( 完全末梢区域 )
- 作用:防止区域收到外部链路的影响的同时,还能防止区域之间不稳定得链路的影响
- 配置:仅仅需要在 stub 区域的 ABR上使用下面的命令
- area { 区域号 } ---> stub no-summary
- 特点:
- 该区域不允许接收3/4/5 类 LSA
- 该区域 运行接收 1/2类 LSA ,以及一个默认路由 的 3 类 LSA ( ABR自动产生的)
- 配置如下
- R1
- [R1]ospf 1
- [R1-ospf-1]area 123
- [R1-ospf-1-area-0.0.0.123]stub no-summary
- R2
- [R2]ospf 1
- [R2-ospf-1]area 123
- [R2-ospf-1-area-0.0.0.123]stub no-summary
- R3
- [R3]ospf 1
- [R3-ospf-1]area 123
- [R3-ospf-1-area-0.0.0.123]stub no-summary
- R1
我们在再来看下R1/R2/R3的变化
我们可以看到 此时 area 123只有 1类2 类以及 一天默认的 3 类的 LSA
R1与 192.168.1.1 通信正常
- nssa 区域 ( no so stub area,不那么stub 的区域 )
- 场景:该区域不想收到其他区域发送过来的外部路由的影响,但是自己本区域的设备,依然可以引入外部路由的
- 配置:在该区域的所有路由器上,都使用下面的命令 : area { 区域号 } ---> nssa
- 特点:
- 该区域不允许接收 4/5 类 LSA
- 该区域允许接收1/2/3/7类 LSA
- 该区域的 ABR 会自动的产生 1 个默认路由的 “ 7类 LSA ”
- 该区域的 ABR会自动的将 7 类 LSA ,转换成 5 类 LSA
- 配置命令如下:
- R1
- [R1]ospf 1
- [R1-ospf-1]area 123
- [R1-ospf-1-area-0.0.0.123]undo stub
- [R1-ospf-1-area-0.0.0.123]nssa
- R2
- [R2]ospf 1
- [R2-ospf-1]area 123
- [R2-ospf-1-area-0.0.0.123]undo stub
- [R2-ospf-1-area-0.0.0.123]nssa
- R3
- [R3]ospf 1
- [R3-ospf-1]area 123
- [R3-ospf-1-area-0.0.0.123]undo stub
- [R3-ospf-1-area-0.0.0.123]nssa
- R1
此时我们再来看下 R1/R2/R3的变化
此时 R1/R2/R3 没有5类的 LSA 只有1/2/3/7类的 LSA并且 7 类的是默认 LSA
合作公司的 192.168.2.2 正常访问到 192.168.1.1
- totally nssa 区域 ( 完全 nssa 区域 )
- 场景:既不要受到外部链路影响,也不收到区域之间的影响,同时还能确保自己的区域设备可以引入外部路由
- 配置:仅仅需要在 nssa 区域的 ABR 上,使用下面的命令 : area { 区域号 } --nssa no-summary
- 特点:
- 该区域不允许接收 3/4/5 类 LSA
- 该区域允许接收1/2/7类 LSA
- 该区域的 ABR 会自动的产生 2个默认路由的 “ 7类 LSA ”和“ 3类 LSA ”
- 该区域的 ABR会自动的将 7 类 LSA ,转换成 5 类 LSA
- 配置命令如下
- R1
- [R1]ospf 1
- [R1-ospf-1]area 123
- [R1-ospf-1-area-0.0.0.123]nssa no-summary
- R2
- [R2]ospf 1
- [R2-ospf-1]area 123
- [R2-ospf-1-area-0.0.0.123]nssa no-summary
- R3
- [R3]ospf 1
- [R3-ospf-1]area 123
- [R3-ospf-1-area-0.0.0.123]nssa no-summary
- R1
我们来看下 R1/R2/R3 的变化
此时可以看到 R1/R2/R3上只有1/2/7类 LSA,以及两条默认的 LSA 分别是 3 /7 类 LSA
通信也正常
OSPF的路由类型
内部路由,通过 network 方式宣告的路由( network 后面只能跟直连网段/路由 )
- 区域内路由,在路由表中的类型/协议 字段 : OSPF
- 是通过 1 类表示的:凡是通过 networ 的方式宣告的路由,都会进入到路由器产生的 1 类
LSA 中
计算区域内路由,依靠的是 : 1类和 2 类
- 区域间路由,在路由表中的类型/协议 字段 OSPF
- 通过 3 类 LSA 表示,计算路由的时候,依靠的是 1类 和 2 类( 可选 )、3 类
外部路由,通过 import-route 方式宣告的路由
- 普通区域的外部路由,在路由表中的类型 /协议 字段 : O_ASE
- 通过 5 类 LSA 表示,计算的时候,依靠的是 1 类 2 类 ( 可选 )、4 类 、5类
- 特殊区域的外部路由,在路由表中的类型/协议 字段 : O_NSSA
- 通过 7 类 LSA表示,计算的时候,依靠 的是 1 类 2类 ( 可选 )、7 类
OSPF的路由管理
路由的属性管理
- 路由属性作用
- 用来体现一个路由的好坏
- 路由属性的类型
- 优先级( preference ),表示的是一个路由的稳定性,数值越小,表示路由越稳
- 开销值( cost ),表示的是去往一个路由的距离,数值越小,表示距离越短
- 路由属性的比较
- 首先,我们要统一的认识是:在路由表中,保存的是去往一个路由条目 “ 最好 ”的路由
- 所谓的最好的路由,都是通过比较路由属性,比较出来的
- 首先,要比较路由的优先级,越小越好
- 其次,要比较路由的开销值,越小越好
- 最好,如果上述2 个属性都相同,则一起放入到路由表中,此时称之为:负载均衡
- 路由属性调整之优先级
- OSPF 内部路由 ,优先级默认是 10
- OSPF 外部路由,优先级,默认是 150
- 任何协议的路由条的“ 优先级 ”属性,都是本地有效的。即该属性不会随着路由条目在路由器之间传来传去。所以想要修改某一个路由的优先级,就在该路由所在的路由器上修改就可以了。配置命令如下:
- ospf 1
- preference 19 # 将内部优先级修改为 19
- preference ase 200 # 将外部路由的优先级,修改为 200
- 路由属性调整之开销值
- OSPF 路由表中的路由条目的开销值的计算方法是:沿着路由的传递方向上,所有入端口的开销值的累加和
- 常见的启用了 OSPF 协议的端口,默认开销等于 1
- 每个 OSPF 端口下的默认开销 1 ,是通过固定的公式计算出来的:
R3
- COST = 参考带宽/接口实际带宽【 单位是 Mbit/s 】
- 默认情况下,参考带宽是 100Mbit /s
- 现在的 网络环境中,设备的端口带宽都很大,所以在平时的施工过程中,都会手动的修改每个设备上的 OSPF 协议的“ 参考带宽 ”,并且将参考带宽改成“ 至少不少于 ” 整个OSPF 网络中的互联网端口中的最大带宽。
- 修改命令如下: 并且如果要改,就必须确保全网的所有 OSPF 路由都要改,并且保证该“ 参考带宽 ” 得是一致的,否则会导致数据包环路。
-
ospf 1
-
[R3-ospf-1]bandwidth-reference 10000 # 将参考带宽修改为 10 GMbit /s
-
想要修改某个端口的开销值命令如下:
-
interface gi0/0/0
-
ospf cost *** #将接口的OSPF开销值 ,修改为 **
-
验证命令
-
display ospf interface gi0/0/0
-
-
路由条目过滤
- 针对路由过滤
- 结果是:路由表中没有特定得路由了,但是数据库中依然有表示该路由的 LSA
- 工具
- 路由过滤工具 -filter-policy
- 路由匹配工具 -acl /prefix-list
- 类型:
- 入向过滤:在路由进入到路由表的时候,进行过滤
- 对象:任何一种类型的路由,在进入到 路由表的时候,都可以被过滤掉
- 命令 :ospf 1 ---> filter-policy { acl } import
- 在哪里配置?
- 可以在任何一个想要进行过滤的路由器上,配置:
- 入向过滤:影响的仅仅是 “ 配置过滤策略 ”的“ 这一个 ” 路由器
- 出向过滤:在路由从路由表出去的时候,进行过滤
- 首先,我们需要名曲的是:路由从“ 路由表 ” 出去的时候,是为了进入到“ 数据库 ”的
- 通常,可以将路由“ 从路由表中 ” 骗取到 “ 数据库 ”有两种方法:
- network :仅仅针对直连网段
- import-route:针对所有类型的路由
- 对象:仅仅针对 “ import-route ” 诱骗出路由表的路由,才会起作用
- 命令: ospf 1 filter-policy { acl } export
- 在哪里配置
- 出现的路由过滤,只能在“ 产生被过滤的那个外部路由的 ” ASBR"上配置
- 出向过滤:本质上是过滤了表示这个外部路由的 5 类 / 7 类 LSA,影响了所有的 OSPF 路由器
- OSPF “ 路由过滤 ”示意图
- 入向过滤:在路由进入到路由表的时候,进行过滤
- 针对数据库
- 结果是:数据库中没有对用的 LSA 了,路由表也没有对应的路由条目
- 过滤对象: LSA ( 3/5/7 )
- 达成共识: OSPF 协议中,想要过滤 LSA的话,只有1个路由器可以实施过滤策略:产生这个LSA 的那个路由器
- LSA 过滤之 3类 LSA 过滤
- 配置位置: ABR
- 配置命令:( 在 ABR-R2 过滤1.1/32 和 2.2/32 )
区域 12 中的路由,进入到 区域 0 以后,就会被 R2从 1 类 LSA 变成 3 类 LSA,
想要实现区域 12中的路由过滤,就得过滤 “ 3类 LSA ”
因为, 3 类 LSA在传说的时候,是有区域概念的,所以,我们可以在 ABR-R2上:
路由从区域 12出来的时候,就干掉了 3类 LSA - 10.10.1.1/32
R2:
acl 2001
rule 10 deny source 10.10.1.1 0.0.0.0 规则 10 拒绝源 为10.10.1.1 的路由
rule 20 permit source any 规则 20 允许 源为所有的路由
quit
ospf 1
area 12
filter 2001 export ---》 从区域 12中发送 3 类 LSA 出去的时候,
干掉表示10.10.1.1/32
或者
路由从区域 12 出来,开始进入到区域 0 的时候,干掉 3 类 LSA - 10.10.2.2 /32
R2
acl 2002
rule 10 deny source 10.10.2.2 0.0.0.0
rule 20 permit source any
quit
ospf 1
area 0
filter 2002 import 从区域 0 中接收 3 类 LSA 进来的时候,干掉表示 10.10.2.2
最终结果是:我们在 区域0以及区域 56中,都无法再次看到
10.10.1.1/32和 10.10.2.2/32 的 3 类 LSA了
路由稳定性管理,即路由汇总
- 本质: 将发送出去的很多路由,变成很少的路由
- 好处
- 可以减少设备之间以及对端设备上的资源占用
- 可以提高 OSPF 网络的稳定性
- 汇总是发生在 “ 发 ” 路由的时候,还是“ 收 ” 路由的时候呢? 发的时候,进行汇总
- 汇总对象:其实 是 LSA,不是 “ 路由 ” 。因为 OSPF 属于链路状态协议,邻居之间压根就不发路由,发送的是 LSA。
- 汇总类型: 3 类 LSA 汇总、5/7类 LSA
OSPF的高级特性
不规则的多区域 OSPF 设计解决方案
概述:
- OSPF 和 ISIS ,属于 IGP 协议中的 链路状态路由协议 ( LS ) ,所以支持将整个网络划分为 2层结构:
- 骨干层
- 非骨干层
- 并且,网络的设计原则是: 非骨干层都是通过骨干层进行通信的
- 所以要求:非骨干层必须和骨干层直接相连
问题
- 在某些情况下,可能出现因为历史原因,或者线路故障,到是原有的多区域的 OSPF 网络,变成了不合理的区域设计---即非骨干区域没有和骨干区域,直接相连
- 最终导致的问题是:非骨干区域中的网络设备无法与其他区域的设备通信
- 比如有可能不规则的多区域 OSPF 网络拓扑如下:
此时的区域 123中的 R1 ,就无法与区域 0中的 R6 互通
解决方案
如果想要得到对应的解决方案,我们应该找出 R 1 和 R6 不能互通的根本原因: R1 上没有去往 R6 的路由
所以,接下来我们提出的所有的解决方案的最终目的,就是让 R1 拥有去往 R 6 的路由
基于我们前面的 OSPF 理论的学习,我们知道 : OSPF 裸类型分为两种:
内部路由
- 区域内陆有
- 这种类型的路由,是基于 1 类 LSA 计算出来的。如果让 R 1 获得 去往 R 6的区域内路由,我们应该想尽办法让: R1 加入到 R5 和 R6 所在的区域 0中。
- 所以解决办法是 : 在 R1上想尽办法与 R5或者 R6 通过仙侣建立区域 0中的 邻居关系
- 但是该方案的确定是:成本太高
- 区域间路由
- 在 OSPF 协议中,区域间的路由,是通过 3 类 LSA 表示的,但是 3 类 LSA仅仅只能通过 ABR 产生的。但是 ABR,指的是同时连接着骨干区域和非骨干区域的路由器
- 在 R1 所在的 区域 123中,没有任何一个路由器同时连接着骨干区域和非骨干区域
- 所以,如果我们想让 R1 事宜区域间的路由的方式,获得 R6 的路由,那我们接下来需要做的就是: 让区域 123中出现一个 ABR。
- 而在 OSPF 协议中,有专门的的一个技术,可以用来建立 OSPF 邻居关系,并且这个邻居关系永远是属于 OSPF 区域 0 中的,这个种技术叫做 : OSPF 虚链路。
OSPF 虚链路概述
- OSPF 虚链路在创建的时候,必须穿越一个 “ 非骨干区域 ”
- OSPF 虚链路在创建的时候,穿越的非骨干区域,不能是 “ 特殊区域 ”
- OSPF洗脸路在创建的时候,命令后面跟的不是对端设备的接口 IP 地址,而是 router-id
- OSPF 虚链路一定要在“ 想成为 ABR ”的设备和“ 已经是 ABR ”的设备之间建立
- OSPF 虚链路建立的时候,所配备的两个设备,必须是同一个区域的{ 因为建立虚链路的两个设备,在刚开始建立虚链路的时候,是通过 1类 LSA 通信的 }
- 基础配置
-
R1 undo terminal monitor system-view sysname R1 interface gi0/0/0 ip address 192.168.12.1 24 quit ospf 1 router-id 1.1.1.1 area 123 network 192.168.12.0 0.0.0.255 quit quit R2 undo terminal monitor system-view sysname R2 interface gi0/0/1 ip address 192.168.12.2 24 quit interface gi0/0/0 ip address 192.168.23.2 24 quit router-id 2.2.2.2 area 123 network 192.168.12.0 0.0.0.255 network 192.168.23.0 0.0.0.255 quit quit R3 undo terminal monitor system-view sysname R3 interface gi0/0/1 ip address 192.168.23.3 24 quit interface gi0/0/0 ip address 192.168.34.3 24 quit ospf 1 router-id 3.3.3.3 area 123 network 192.168.23.0 0.0.0.255 quit area 456 network 192.168.34.0 0.0.0.255 quit quit R4 undo terminal monitor system-view sysname R4 interface gi0/0/1 ip address 192.168.34.4 24 quit interface gi0/0/0 ip address 192.168.45.4 24 quit ospf 1 router-id 4.4.4.4 area 456 network 192.168.34.0 0.0.0.255 network 192.168.45.0 0.0.0.255 quit quit R5 undo terminal monitor system-view sysname R5 interface gi0/0/1 ip address 192.168.45.5 24 quit interface gi0/0/0 ip address 192.168.56.5 24 quit ospf 1 router-id 5.5.5.5 area 456 network 192.168.45.0 0.0.0.255 quit area 0 network 192.168.56.0 0.0.0.255 quit quit R6 undo terminal monitor system-view sysname R6 interface gi0/0/1 ip address 192.168.56.6 24 quit ospf 1 router-id 6.6.6.6 area 0 network 192.168.56.0 0.0.0.255 quit quit
OSPF 虚链路配置
-
R3
-
ospf 1
-
area 456
-
vlink-peer 5.5.5.5
-
-
-
R5
-
ospf 1
-
area 456
-
vlink-peer 3.3.3.3
-
-
-
-
-
然后在 R3中查看虚链路是否成功
[R3]display ospf vlink
OSPF Process 1 with Router ID 3.3.3.3
Virtual Links
Virtual-link Neighbor-id -> 5.5.5.5, Neighbor-State: Full
Interface: 192.168.34.3 (GigabitEthernet0/0/0)
Cost: 2 State: P-2-P Type: Virtual
Transit Area: 0.0.1.200
Timers: Hello 10 , Dead 40 , Retransmit 5 , Transmit Delay 1
GR State: Normal
重要字段解释:
Virtual-link Neighbor-id 虚链路 邻居 ID
Neighbor-State: Full 邻居状态
Cost: 2 # 开销值 :2
State: P-2-P # 链路 p2p
Type: Virtual # 类型 :虚链路 该网络类型只有虚链路才会有 { 所以 OSPF 有5中网络类型}
Transit Area: 0.0.1.200 #建立虚链路的时候所穿越的区域
Timers: Hello 10 ,# 在华为设备上,建立虚链路以后,依然也会周期性的发送报文,计时器和广播/点到点类型下都是相同的
Dead 40 , # 死亡时间
接下来我们来验证一下 R3 的身份已变成了 ABR
<R3>display ospf brief
OSPF Process 1 with Router ID 3.3.3.3
OSPF Protocol Information
RouterID: 3.3.3.3 Border Router: AREA 此处可以看到已经是 ABR
Multi-VPN-Instance is not enabled
Global DS-TE Mode: Non-Standard IETF Mode
Graceful-restart capability: disabled
Helper support capability : not configured
Applications Supported: MPLS Traffic-Engineering
Spf-schedule-interval: max 10000ms, start 500ms, hold 1000ms
Default ASE parameters: Metric: 1 Tag: 1 Type: 2
Route Preference: 10
ASE Route Preference: 150
SPF Computation Count: 14
RFC 1583 Compatible
Retransmission limitation is disabled
Area Count: 3 Nssa Area Count: 0
ExChange/Loading Neighbors: 0
Process total up interface count: 3
Process valid up interface count: 2
Area: 0.0.0.0 (MPLS TE not enabled)
Authtype: None Area flag: Normal
SPF scheduled Count: 4
ExChange/Loading Neighbors: 0
Router ID conflict state: Normal
Area interface up count: 1
Area: 0.0.0.123 (MPLS TE not enabled)
Authtype: None Area flag: Normal
SPF scheduled Count: 14
ExChange/Loading Neighbors: 0
Router ID conflict state: Normal
Area interface up count: 1
Interface: 192.168.23.3 (GigabitEthernet0/0/1)
Cost: 1 State: DR Type: Broadcast MTU: 1500
Priority: 1
Designated Router: 192.168.23.3
Backup Designated Router: 192.168.23.2
Timers: Hello 10 , Dead 40 , Poll 120 , Retransmit 5 , Transmit Delay 1
Area: 0.0.1.200 (MPLS TE not enabled)
Authtype: None Area flag: Transit
SPF scheduled Count: 13
ExChange/Loading Neighbors: 0
Router ID conflict state: Normal
Area interface up count: 1
Interface: 192.168.34.3 (GigabitEthernet0/0/0)
Cost: 1 State: BDR Type: Broadcast MTU: 1500
Priority: 1
Designated Router: 192.168.34.4
Backup Designated Router: 192.168.34.3
Timers: Hello 10 , Dead 40 , Poll 120 , Retransmit 5 , Transmit Delay 1
<R3>
同时 R1上也有了 192.168.56.0 /24的 3 类 LSA,以及 路由条目,并且可以与 R6互通
<R1>display ip routing-table 192.168.56.6
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
192.168.56.0/24 OSPF 10 5 D 192.168.12.2 GigabitEthernet0/0/0
<R1>
<R1>ping 192.168.56.6
PING 192.168.56.6: 56 data bytes, press CTRL_C to break
Reply from 192.168.56.6: bytes=56 Sequence=1 ttl=251 time=60 ms
Reply from 192.168.56.6: bytes=56 Sequence=2 ttl=251 time=50 ms
Reply from 192.168.56.6: bytes=56 Sequence=3 ttl=251 time=50 ms
Reply from 192.168.56.6: bytes=56 Sequence=4 ttl=251 time=50 ms
Reply from 192.168.56.6: bytes=56 Sequence=5 ttl=251 time=50 ms
--- 192.168.56.6 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 50/52/60 ms
<R1>
虚链路的不足
- 虚链路如果在网络中部署不当,容易导致 OSPF 环路
- 虚链路,并不是任何情况下都允许被部署的
针对虚链路的不足,我们提出新的解决方案是 : GRE 隧道
在上述的拓扑中,我们可以直接在 R3 上与区域 0中的 R5 或者 R6 ,拉一个真实的物理线缆,然后配置 IP 地址,然后network 宣告到 区域0,这样的话 R3 就可以称为 ABR了,而从R1 和 R6之间就可以互通了
但是,通过一个真实的线路建立邻居关系,无论是前期的建设成本,还是后期的管理成本,都很高,所以我们可以考虑在 R3和 R 5之间,建立一个“ 虚拟 ” 的线缆。然后这个 虚拟的线路:配合 IP 地址,通过 network 的方式 ,宣告进 区域 0.那么。这种“ 虚拟 ” 线缆的建立方式,使用的是 GRE 隧道的形式。
建立GRE 隧道,解决 区域 123与 区域 0互联
在R3 和 R5上,分别建立一个专门的稳定的回环口,用于建立隧道,当然需要两个回环口保持互通:
R3
ospf 1
area 456
network 10.10.3.3 0.0.0.0
quit
quit
然后,在 R3和R5 上,专门通过该 GRE 的方法建立一个隧道,然后为其配置 IP 地址
配置如下:
[R3]interface Tunnel 0/0/35
[R3-Tunnel0/0/35]tunnel-protocol gre # 专属通道协议 GRE
[R3-Tunnel0/0/35]source 10.10.3.3 # 源 10.10.3.3
[R3-Tunnel0/0/35]destination 10.10.5.5 #目的 10.10.5.5
[R3-Tunnel0/0/35]ip address 192.168.35.3 24
Jun 12 2022 21:41:52-08:00 R3 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP
on the interface Tunnel0/0/35 has entered the UP state.
[R3-Tunnel0/0/35]quit
[R3]
[R5]interface Tunnel 0/0/35
[R5-Tunnel0/0/35]tunnel-protocol gre
[R5-Tunnel0/0/35]sou
[R5-Tunnel0/0/35]source 10.10.5.5
[R5-Tunnel0/0/35]destination 10.10.3.3
[R5-Tunnel0/0/35]ip address 192.168.35.5 24
[R5-Tunnel0/0/35]
Jun 12 2022 21:45:00-08:00 R5 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP
on the interface Tunnel0/0/35 has entered the UP state.
[R5-Tunnel0/0/35]quit
此时我们在 R 3上测试 ,应该是互通的
[R3]ping 192.168.35.5
PING 192.168.35.5: 56 data bytes, press CTRL_C to break
Reply from 192.168.35.5: bytes=56 Sequence=1 ttl=255 time=30 ms
Reply from 192.168.35.5: bytes=56 Sequence=2 ttl=255 time=40 ms
Reply from 192.168.35.5: bytes=56 Sequence=3 ttl=255 time=30 ms
Reply from 192.168.35.5: bytes=56 Sequence=4 ttl=255 time=30 ms
Reply from 192.168.35.5: bytes=56 Sequence=5 ttl=255 time=30 ms
--- 192.168.35.5 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 30/32/40 ms
[R3]
然后在 R3 和 R 5 上,分别将 192.168.35.0/24宣告进入到 OSPF 区域0中
[R3]ospf 1
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]network 192.168.35.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]quit
[R3-ospf-1]quit
[R3]
[R5]ospf 1
[R5-ospf-1]area 0
[R5-ospf-1-area-0.0.0.0]network 192.168.35.0 0.0.0.255
[R5-ospf-1-area-0.0.0.0]quit
[R5-ospf-1]quit
[R5]
此时 R3 又称为 ABR,区域123再次学习到了其他区域 的 3 类LSA,以及192.168.56.0/24的路由
并且,R1 可以ping 通 R 6
外部路由
在 OSPF 中,外部路由是通过 5/7 类 LSA 表示的。同时,这两种类型的 LSA 是由 ASBR 产生的,所以,我们只要确保区域123中能够学习到 表示 192.168.56.0/24 路由的 5/7 类 LSA。
如果想要有 5/7 类 LSA 的话,那就必须的使用 import-route 。
所以,为了使用这个命令,我们必须得 在 R3 上,运行多个 OSPF 进行
比如: R 3 通过 OSPF 1 与 R3 建立邻居,学习 192.168.56.0 /24路由
同时 ,R3 通过 OSPF 3 与进程 4 建立邻居,学习192.168.12.0 /24路由
随后,在 R3上,将两个 OSOF 进程互相导入。
配置如下:
[R3]interface Tunnel 0/0/35
[R3-Tunnel0/0/35]undo ip address
quit
[R3]ospf 1
[R3-ospf-1]are
[R3-ospf-1]area 456
[R3-ospf-1-area-0.0.1.200]undo vlink-peer 5.5.5.5
quit
[R5]interface Tunnel 0/0/35
[R5-Tunnel0/0/35]undo ip address
quit
[R5]ospf 1
[R5-ospf-1]are
[R5-ospf-1]area 456
[R5-ospf-1-area-0.0.1.200]undo vlink-peer 3.3.3.3
现在我们看下R1 是无法访问 R 6的
[R3]ospf 1 router-id 3.3.3.3
[R3-ospf-1]area 456
[R3-ospf-1-area-0.0.1.200]network 192.168.34.0 0.0.0.255
[R3-ospf-1-area-0.0.1.200]quit
[R3-ospf-1]quit
[R3]ospf 3 router-id 3.3.3.3
Info: The configuration succeeded. You need to restart the OSPF process to valid
ate the new router ID.
[R3-ospf-3]area 123
[R3-ospf-3-area-0.0.0.123]network 192.168.23.0 0.0.0.255
[R3-ospf-3]quit
此时 R3 可以分别学到 R 1 和 R6 的路由,但是还是需要我们导入
[R3]display ip routing-table 192.168.12.0
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
192.168.12.0/24 OSPF 10 2 D 192.168.23.2 GigabitEthernet
0/0/1
[R3]display ip routing-table 192.168.56.0
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
192.168.56.0/24 OSPF 10 3 D 192.168.34.4 GigabitEthernet
0/0/0
将进程1 导入到进程3 中
[R3]ospf 3
[R3-ospf-3]import-route ospf 1
[R3-ospf-3]quit
[R3]
[R3]ospf 1
[R3-ospf-1]import-route ospf 3
[R3-ospf-1]quit
[R3]display ip routing-table protocol ospf
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : OSPF
Destinations : 4 Routes : 4
OSPF routing table status : <Active>
Destinations : 4 Routes : 4
Destination/Mask Proto Pre Cost Flags NextHop Interface
10.10.5.5/32 OSPF 10 2 D 192.168.34.4 GigabitEthernet0/0/0
192.168.12.0/24 OSPF 10 2 D 192.168.23.2 GigabitEthernet0/0/1
192.168.45.0/24 OSPF 10 2 D 192.168.34.4 GigabitEthernet0/0/0
192.168.56.0/24 OSPF 10 3 D 192.168.34.4 GigabitEthernet0/0/0
OSPF routing table status : <Inactive>
Destinations : 0 Routes : 0
OSPF 的认证
ospf 的认证主要功能就是为了确保 OSPF 邻居关系更加的安全
- 基于认证的配置地方,分配
- 链路认证
- 即:所有的认证相关的配置命令都是在链路/接口上配置的;
- 该认证影响的仅仅是当前配置认证功能的这一个链路上的 OSPF 路由器
- 即:所有的认证相关的配置命令都是在链路/接口上配置的;
- 区域认证:即,所有的认证相关的配置命令,都是在OSPF 进程下的区域中配置的;
- 该认证影响的是该设备属于这个区域的所有的接口/链路上的邻居关系
- 链路认证
- 基于加密类型分为
- 明文认证
- :即密码在传输过程中,是不加密的,非常的不安全
- 密文认证
- 即密码在传输过程中是加密的,非常的安全
- Null 认证( 空认证 )
- 即默认情况下的认证类型就是空认证,即OSPF 报文是不加密的,认证原则是:
- 两边的认证类型,必须相同
- 两边的认证密码,必须相同
- 两边的认证ID ,必须相同( 只有“ 密文 ” 认证,才有该规则 )
- 即默认情况下的认证类型就是空认证,即OSPF 报文是不加密的,认证原则是:
- 明文认证
链路认证配置:
假如,我们仅仅需要对区域 123中的 R1 和 R2 之间的邻居关系进行加密,并且密码铭文的,密码为 :123
[R1]interface g0/0/1
[R1-GigabitEthernet0/0/0]ospf authentication-mode simple cipher 123
[R2]interface g0/0/0
[R2-GigabitEthernet0/0/0]ospf authentication-mode simple cipher 123
经过上面的配置,R1 和 R2 之间有认证,R 2 和 R3 之间没有认证,并且他们之间没有影响。
那么如果我们把 R 2 的密码改成1234呢,还可以建立邻居吗
接下来,我们在 R2 和 R3 之间的链路上,配置密文认证,密码是 hehe.
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ospf authentication-mode md5 100 hehe
[R2-GigabitEthernet0/0/0]quit
[R2]
# 其中的参数 100 ,叫做 key -id ,只有当认证雷士 md5 的时候,才有该参数,只要确保两边的 key-ID 的参数,相同,就可以确保认证成功
总结:针对链路认证,想在那个链路上配置,就在那个链路上配置;各个链路之间互不影响
区域认证配置:
如果想要配置“ 区域认证 ”的话,那就需要在该区域的所有路由器上配置---配置完全相同的命令
比如,我们对区域 456进行MD5认证,命令如下:
R3/R4/R5
ospf 1
area 456
authentication-mode md5 99 HCIE
quit
指的是:对每个设备的所有属于区域 456 的接口,都开启认证功能,并且这些解开了发送和接收的报文,都要进行加密和界面。
但是,如果同时在这个接口上,还启用了链路认证,并且链路认证的类型是明文的,密码是 HAHA123.那么对于这些接口而言。最终使用的还是链路认证的密码
链路认证的优先级要高于区域认证