路由类型
距离矢量动态路由协议
RIP、EIGRP
把自己的路由条目传递出去
典型的距离矢量动态路由
以讹传讹、道听途说
链路状态动态路由协议
OSPF(开放最短路径优先)
典型的链路状态动态路由协议
与距离矢量动态路由协议完全不同
OSPF介绍
OSPF作为典型的链路状态动态路由协议
放到数据库(LSDB)当中的不是自己的路由条目了,而是链路信息(LSA)
链路信息包含(连接的端口的IP、来自哪个网段、链路的状态、来源路由、开销…..)
他们会互相交换自己的数据库条目。最终所有的设备都会拥有全网的所有设备的链路状态信息、数据库也会完全的一致。这些被称之为“链路状态数据库同步”
这里与距离矢量的区别就是
距离矢量:
我只会让你看到我想让你看到的。
链路状态:
我会给你我的全部,毫无保留
这个区别怎么有点像windows与linux
所以,我们的链路状态协议被称之为(地图协议),因为每一个路由器都可以通过自己的数据库计算出网络的拓扑图。
OSPF的路由计算算法
我们的OSPF基于我们的SPF算法(链路树状态路由算法)
链路状态信息算法优势
拥有完整的链路状态信息
可以感知完整的网络拓扑
可以进行更精确的路由选路
链路状态信息算法劣势
拥有完整的链路状态信息,当设备太多的时候LSDB会多到爆!!!
当设备多起来的时候,更新慢,收敛慢,容易导致路由抖动
不方便汇总
OSPF三张表
邻居表:邻居表包含了OSPF邻居的信息以及对应的状态
拓扑表/LSDB:存放链路状态信息
路由表
OSPF的分区域设计
使用32个bits的十进制数字表示OSPF接口的运行区域
area0(骨干区域)
area*(非骨干区域)
普通区域
stub area
totally stub area
特殊区域
nssa area
totally nssa area
OSPF的链路状态更新只会被泛洪到OSPF区域的边界
只会保证同area的设备LSDB同步,每一个区域的设备 只会存放自己区域的数据库条目
所以OSPF引入了一个机制,·边界路由(Area Border Router),简称为ABR
只需要满足至少有一个接口运行在 Area0 一个接口运行在 非area0
ABR会生成摘要路由,就相当于他有一个别的区域的目录
ABR会取其头部通告到别的区域
所有 非区域0 之间访问的数据流量都要通过 区域0 进行转发
OSPF的DR、BDR选举

假如我们有这样的一个拓扑
这里我们需要建立5*4/2一共十组邻居关系
在同一个链路上,我们要建立OSPF邻居,则我们邻居的数量容易过多,并且两两交换LSDB效率低下
因此我们可以在链路上选举DR BDR
DR : Designed Router
BDR : Backup Designed Router
在一段链路上一旦选取了DR BDR,则所有的端口都只于DR BDR建立邻居关系进行LSDB的交换
DR:可以将收集到的链路上的所有数据打包下发给所有的设备
BDR:只负责收集到的链路上所有数据,但不下发给别的设备
其他的设备全部变成D other:Dother之间也能收到hello报文,但是他们不建立邻居关系,只会保存在初始状态
DR BDR的选举是基于接口所在的链路,于区域无关
注意!!!
在OSPF当中show ip ospf nei
看到的信息,全部为对方的状态信息!!!
在show ip ospf database
这里看到的ospf信息都是我们自己的信息
选举过程:
在进入two-way状态下时候,我们的路由器会开始选举DR/BDR
- 在初始状态下,设备的ospf hello包当中,DR BDR的地址都为0.0.0.0的缺省地址
- 进入Two-way时候,将会在网络当中等待DR/BDR发送消息,等待的时间会等于你配置的DeadTime(def 40s)
- 如果等待了DeadTime的时间,依然发现任何的DR/BDR
- 这是将会优先选举一个BDR,然后将BDR转换为DR
- 最优再重新选举一个BDR
- 所有设备与DR/BDR建立邻居关系
调整DR/BDR生成参数:
调整deadtime
默认情况下,ospf默认发送hello时间10s,deadtime时间40s
R1(config-if)#ip ospf dead-interval ? //在接口视图下,设置ospf的deadtime <1-65535> Seconds minimal Set to 1 second R1(config-if)#ip ospf hello-interval ? //在接口视图下,设置ospf的Hellotime 注意!!!在CISCO IOS当中,当你修改了ospf的hello时间,你的deadtime也会变成hellotime的4倍 <1-65535> Seconds R1(config-if)#ip ospf dead-interval minimal hello-multiplier ? //在接口视图下,设置ospf的dead时间变为1,并且deadtime为后面设置num的倍数,所以hellotime=deadtime(1)/number <3-20> Number of Hellos sent within 1 second
调整优先级
R1(config-if)#ip ospf priority ? //调整接口的优先据,如果变成0,这样的话,当前接口不参与选举 <0-255> Priority
正常情况下OSPF的DR/BDR不处于抢占模式,哪怕设备router-id更大
只有DR/BDR挂了他才会重新选举BDR,当DR挂了的时候优先让BDR上位
Router-id 路由器的身份标识
Router-id 是用来标记路由来源,区分表示链路状态信息的
更主要是用来区分
OSPF设备的数据库条目,相当于路由器的姓名
router-id怎么选举的呢?
1.手动指定router-id
2.如果设备上设有loopback接口,就会选取最大的loopback接口作为我们的router-id
3.如果设备上没有loopback接口,就会选取最大的ip地址作为我们的router-id
***这里的最大是最大的地址,并不是接口编号!
router-id 必须是IPv4地址格式,它可以是不存在的IP地址
注意!!!
如果设备已经选取了Router-id并且已经建立了邻居关系,则需要重启OSPF进程才能够生效
清除邻居:clear ip ospf proess
运行OSPF
创建OSPF进程,并且宣告

R1(config)#router ospf 1
R1(config-router)#network 10.10.1.1 0.0.0.0 area 0
R1(config-router)#network 172.16.12.1 0.0.0.0 area 0
//network <IP addr> <wildcard bit> area <area id>
//我们也可以暴力点(新手别学)
R2(config-router)#network 0.0.0.0 0.0.0.0 area 0 //直接匹配所有接口
我们在Cisco IOS当中,ospf的network控制台 可以接受 正掩码 通配符 精确宣布
在Cisco IOS 12.4版本之后,我们有了个新的激活方式
//在接口视图下面 R3(config)#router ospf 1 R3(config-router)#exit R3(config)#int lo0 R3(config-if)#ip ospf 1 area 0 R3(config-if)#int g0/1 R3(config-if)#ip ospf 1 area 0 //直接激活接口宣告
这样我们有了个很方便的方式
别忘了我们网工与range的羁绊啊!!!!
R3(config)#int range lo0,g0/1 R3(config-if-range)#ip ospf 1 area 0
直接激活接口还有一个好处,你改了接口就不需要重新network,她会自动变更的
真是 遥遥领先!!!
查看OSPF信息
这样你show run | s ospf
你是看不到network宣告的
我们记住一个命令
show ip ospf interface brief
这个命令行也可以看到network宣告的接口
我们要查看OSPF的数据库就要使用命令
show ip ospf database
后面还可以加参数哦
show ip ospf database route //查看我们数据库的一类LC
再次说明
在OSPF当中show ip ospf nei
看到的信息,全部为对方的状态信息!!!
在show ip ospf database
这里看到的ospf信息都是我们自己的信息
OSPF的邻居关系状态&邻居关系建立状态过程
邻居关系状态
Init:
设备开始发送hello报文 此时Hello报文中不含有active neighbour,不认识对端接口的信息,如果此时
收到了邻居同样没有active neighbour的hello数据包的时候,将会在下一个hello报文中添加上对方的
router-id。如果收到hello包当中,带有自己的router-id,则会单独给对方单薄一个hello报文
Two-way:
如果双向奔赴了(双方的Hello包都含有router-id了)就会转到Two-way状态,这个时候我们会开始选举DR BDR
###如果不选则DR BDR就可以跳过当前状态###
有三种情况下,我们会跳过选举(先挖坑)
Exstart:
双方开始交换第一个DBD(数据库头部描述数据包),第一个数据包不包含数据库头部描述,用于选举主从关系,他们会开始同步OSPF的序列号(DD sequence)将会同步,优先选取router-id大的成为主
Exchange:
一旦主从选取完毕,将会进入Exchange状态。交换双方链路数据库头部信息(通过DBD进行交换)
通过DBD数据库交换双方链路状态信息,相当于数据库目录,通过对比DBD数据库头部描述,路由器将会得知自己的数据库中缺少了什么信息
确认完成之后将会把DBD数据包的More位置零
Loading:
知道自己缺少了什么信息之后,路由器将会发送LSR,请求自己所缺少的数据库条目详细消息,对方就会通过LSU进行数据库条目更新,当收到了对方的LSU之后将会放松LSACK进行回复确认,加载对方发送到数据库条目发送到自己的数据库当中
Full:代表着我们的邻居关系建立成功
OSPF的数据包类型
Hello:发现建立维持维护我们邻居建立关系
只要激活接口运行OSPF,则接口将会自动加入OSPF的组播地址:224.0.0.5 224.0.0.6
接口将会周期性的像组播地址发送ospf Hello数据包(每个10s发送数据包,Hold数据包为40S)
DR BDR 发送组播数据包使用224.0.0.5
D other 发送数组播数据包使用224.0.0.6
DBD(Database Description—数据库头部描述数据包): 数据库头部描述包
数据包内部:
OOB:如果这个置为1 表示我们需要重新交换数据库条目
I(Init):这个数值置为1 表示现在是否在进行主从的选举
M(More):表示是否还是DBD数据包:1为是0为不是
MS(Master):表示自己是否为Master,原则同上
LSR(Link-state Request): 链路状态数据库条目请求消息
LSU(Link-state Update):链路数据库条目请求更新消息
LSACK(Link-state Acknowledge):链路状态数据库条目恢复消息
数据包交换流程图链接:
OSPF 邻居关系建立全过程(含状态与数据包)
影响OSPF建立邻居的条件
Area ID
如果OSPF设备的接口不在同一个区域,他就会无法建立邻居
但是注意!!!进程ID不一致的时候,是可以建立邻居的!进程ID只有本地有效!

Q:这种情况下,我们的R1 area1的lsdb能否被拉入R3的lsdb呢?
A:不会,因为不是一个area
HELLO TIME不一致
Q:我们的Hello time一致Dead time时间不一致 是否能建立ospf邻居
A:不能!他们会断掉邻居关系,因为OSPF是链路状态动态路由协议,对链路要求高
DEAD TIME不一致
Q:我们的dead time 不一致,是否可以建立ospf邻居
A:不能!他们会断掉邻居关系,因为OSPF是链路状态动态路由协议,对链路要求高
判断一下:
Q:OSPF的 Hello-interval和dead-interval 不一致,无法建立邻居关系
A:可以建立!但是是一种特殊情况下。
在我们Cisco IOS里面,我们有一个命令行。
R1(config-if)#ip ospf dead-interval minimal hello-multiplier ? //在接口视图下,设置ospf的dead时间变为1,并且deadtime为后面设置num的倍数,所以hellotime=deadtime(1)/number <3-20> Number of Hellos sent within 1 second
这里我们可以设置我们的Dead-interval为1s
我们调整后面最后的number hello-interval为250s与200ms
可是,我们上面才说过是不能起邻居的啊!
这里有个小小的细节!
在Hello packet 里面,我们的hello-interval 与 dead-interval的最小单位是秒。
我们的hello-interval小于1的时候,我们会把他发包的时候当作0
所以在这种情况下我们还是可以正常建立邻居关系的
DR/BDR优先级都为0
当DR BDR的优先级为0,都不参与DR BDR的选举全部作为DRother,这个时候我们会卡在two-way状态,也是无法建立邻居关系的
Router-id重复
当我们的ospf Router-id重复了,我们无法建立邻居,而且路由器会开始狂叫
router-id全网唯一

Q:在这种情况下,VR2 VR5的router-id相同,VR4的router-id不同,我们的哪些路由的邻居能够建立
A:我们的VR4-VR2 VR4-VR5可以建立邻居,我们只能看到VR2与VR5当中一个路由器的LSDB,因为VR4看到的条目来源都是5.5.5.5他无法分清谁是谁,VR2为什么看不到VR5的条目,因为VR4发送LSA的时候,router-id为5.5.5.5的VR2收到了来自VR5 5.5.5.5的条目,但是他觉得自己也是5.5.5.5,没有通告这条路由,所以就不认为自己缺失这个条目。
所以,我们的router-id相同,如果不是邻接关系,我们可以正常建立但是会导致我们的路由条目丢失,如果是邻居关系,那我们直接就无法建立邻居
MTU不一致
如果两个设备接口的MTU不一致,我们也无法建立OSPF邻居,会卡在Exstart状态
因为我们在Exstart状态下,我们会开始交换我们的DBD数据包,我们的选举主从的DBD数据包当中会含有我们的MTU值,路由器会比较我们的MTU,如果不一致,我们就无法开始选举,路由无法建立
如果我们想要MTU不一致,还是需要建立邻居
我们使用命令
config-if# ip ospf mtu-ignore //忽略MTU检查(对于某些厂商不做检查使用的)
认证不一致
我们的端口key不一致或者我们key chain Key值不一致
MA网络下掩码一致
就是我们的网络接口是需要选取DR/BDR的网络类型,我们的网络掩码不一致,我们也是无法建立邻居关系的
STUB/NSSA标识
这是我们的OSPF特殊区域,特殊区域标识需要一致我们才能建立邻居,否则我们的邻居也是无法建立的
OSPF的版本一致
我们OSPF的版本需要一致,不同的OSPF版本无法起邻居
需要注意,OSPFv3是可以跑IPv4协议的,所以这个也是需要注意的(防人之心不可无)
网络类型不一致不能建立OSPF邻居关系(遥遥领先才有的)
OSPF的网络类型
ospf在设计的时候想要根据我们的二层链路类型来自动匹配我们不同的网络类型
因此,在OSPF不同网络类型之下,OSPF的工作方式也不同
但是OSPF网络类型不一定需要按照二层链路类型来使用,可以将他当作我们OSPF的一种功能,可以自由的选择让接口使用哪一种链路类型
重点子啊与了解不同的网络类型接口下OSPF的工作方式
默认情况下,我们的rj45以太网接口类型为broadcast;serial口默认类型为p2p

| 网络类型 | 默认适用于 | 是否需要选举DR/BDR? | Hello / Dead 计时器 | 是否自动建立邻居? | 特点与常见场景 |
|---|---|---|---|---|---|
| 广播多路访问 (Broadcast Multi-Access) | 以太网、令牌环网 | 是 | 10秒 / 40秒 | 是 | • 选举DR/BDR以减少LSA泛洪。 • 所有路由器与DR/BDR建立全毗邻关系。 • 最常见的局域网类型。 |
| 非广播多路访问 (NBMA, Non-Broadcast Multi-Access) | 帧中继、X.25、ATM | 是 | 30秒 / 120秒 | 否,需手动指定邻居 | • 无广播能力,需手动配置邻居IP。 • 仍需选举DR/BDR,且DR必须与所有路由器连通。 • 配置复杂,现网较少见。 |
| 点到点 (Point-to-Point, P2P) | PPP、HDLC、GRE隧道 | 否 | 10秒 / 40秒 | 是 | • 不选举DR/BDR,两端直接建立全毗邻关系。 • 使用组播地址 224.0.0.5 通信。 • 是串行链路和大多数隧道的理想类型。 |
| 点到多点 (Point-to-Multipoint, P2MP) | 无默认,需手动配置 | 否 | 30秒 / 120秒 | 是 | • 将NBMA网络模拟为多个P2P链路集合。 • 不选举DR/BDR。 • 适用于中心到多点的星型拓扑,简化配置。 |
| 点到多点非广播 (P2MP Non-Broadcast) | 无默认,需手动配置 | 否 | 30秒 / 120秒 | 否,需手动指定邻居 | • P2MP的变体,用于不支持组播的NBMA网络。 • 需静态指定所有邻居。 |
如果我们一端为broadcast一端为ptp我们是一样可以建立邻居的,而且我们不用选举DR/BDR会直接到Exchange阶段
p2p是指端到端关系,如果中间多了个横插一脚的。那我们的路由就会开始反复横跳。
NBMA(non-broadcast) 我知道我对面是谁,那我就直接和他单播,就类似于EIGRP的默认情况,但是他默认不会发送hello包去主动建立邻居
在这种情况下,我们单播玩查看我们的邻居会看到“N/A” 指定了之后我们只知道我们对面的接口地址,但是不知道对面的router-id.这个状态要持续到他们互相发送hello包之后才能知道,我们要full状态还要等待她们的two-way,才能开始选举
这个过程将会非常漫长
点到多点,组播交互 在这种情况下,我们的设备是不需要选举DR/BDR的 在这种情况下,我们会产生一个/32掩码的OSPF路由
这个设计挖坑这是来源于我们DM VPN的hub-spoke模型这是专家级的考试内容
点到非多点广播 同上,但是不会向组播地址发送数据包
loopback 我们loopback接口有自己的网络类型,就是loopback,只要网络类型是这个,不管你的网络类型是多少,产生的路由都是/32的
如果你想看到别的掩码的条目,只能改为p2p,别的类型全都不可以!!!
为什么网络类型不是影响建立邻居关系的条件
p2p broadcast可以建立
点到多点于nbma可以建立
网络类型并不是影响到OSPF建立邻居关系的条件,更改网络类型,导致hello-interval与dead-interval不一致才是导致无法建立邻居的关键
网络类型不一致,虽然可以起邻居,但是路由条目的计算能否成功是问题
点对多点组播 和 NBMA 无法计算路由 //有对应数据库条目但是无法计算
p2p 和 点对多点组播 可以计算路由
p2p 和 broadcast 无法计算路由
所以不同类型可以建立邻居,但是
需要选举DR/BDR的网络类型之间建立的OSPF类型可以计算路由
不需要选举DR/BDR的网络类型建立的邻居关系可以计算路由
需要选举DR/BDR的网络类型与需要选举DR/BDR的网络类型之间建立的邻居关系不可以计算路由
这个的原因是什么?
因为我们这里两种网络类型的 LSA 需求不同,他们根本互相不认可对方
OSPF的metric数值计算方式
我们的OSPF作为动态路由协议,可以说是看着地图找路
所以我们是看着地图找路的本地起源,到目的地点的出方向的Cost值的和
Cost = 参考带宽(def=100Mbps) / 接口带宽
如果Cost有小数,向下取整,但是作为0.1的时候 不可能为0 所以Cisco默认接口带宽为1
show ip ospf int g*/* //查看OSPF端口的详细参数 auto-cost reference-bandwidth 100 //参考带宽设置数值 show ip ospf int brief //查看接口基本信息 这里可以查看接口类型与Cost
一般情况下,我们更推荐手动修改接口的Cost开销值
在接口视图下:
ip ospf cost <cost_num>
这个东西无法使用偏移列表更改(offset-list)
因为偏移列表修改的是我们传递路由条目时候的metric
而我们的OSPF是传递的LSA信息,所以无法通过偏移列表修改
OSPF的LSA Type计算
LSA(链路状态信息)
| Type | 功能 |
| 1 (OSPFv2) | Router LSA (路由器通告的链路状态接口信息) |
| 2 (OSPFv2) | Network (由DR通告的链路上的设备以及掩码) |
| 3 | Summary(由ABR通告) |
| 4 | Asbr-Summary |
| 5 | External (外部路由) |
| 6 | Cisco 不支持 |
| 7 | Nssa External |
| 8 | OSPFv3类型,保留到OSPFv3 |
| 9 | OSPFv3类型,保留到OSPFv3 |
学习LSA Type的时候要想,这个LSA是有谁来通告的?关于谁的内容?通告的范围多大?
OSPF通告一类二类LSA计算本区域内的内部数据库路由条目,一类二类LSA只在本区域传递
OSPF通告的三类LSA转化区域的一类二类LSA转换为条目头部,在整个OSPF传递
OSPF通过四类五类LSA计算得出OSPF外部路由
如果五类LSA Metric-type = 2 那么就是OE2路由直接提交seed metric
如果五类LSA Metric-type = 1 那么就是OE1路由要种子Metric + Forward Metric
关于P2P网络类型的LSA Type1:
在这个时候我们的LSDB当中不会有Network类型的条目(不会有DR/BDR通告的,因为P2P不选举主备)
R4(config)#do show ip ospf 1 database router
OSPF Router with ID (10.10.4.4) (Process ID 1)
Router Link States (Area 0)
LS age: 51 //存活时长
Options: (No TOS-capability, DC)
LS Type: Router Links //链路的LSA类型
Link State ID: 10.10.4.4 //表示通告关于哪一个路由起router-id对应的LSA
Advertising Router: 10.10.4.4 //通告LSA的router-id 一类LSA由自己通告
LS Seq Number: 80000002 //lsa序列号
Checksum: 0xD33 //校验位
Length: 60 //长度
Number of Links: 3
Link connected to: a Stub Network //我接口所在的接口类型 (这里是接口运行了OSPF但没有建立邻居关系,那么就是Stub network)
(Link ID) Network/subnet number: 10.10.4.0
(Link Data) Network Mask: 255.255.255.0
Number of MTID metrics: 0
TOS 0 Metrics: 1
Link connected to: another Router (point-to-point) //如果是P2P网络类型,一类LSA可以写明对面接口是什么设备
(Link ID) Neighboring Router ID: 10.10.5.5 //对端接口的router-id
(Link Data) Router Interface address: 1.1.45.4 //设备本端接口的地址
Number of MTID metrics: 0
TOS 0 Metrics: 1
Link connected to: a Stub Network //接口运行了OSPF但没有建立邻居关系,那么就是Stub network 这条是P2P网络送的)
(Link ID) Network/subnet number: 1.1.45.0
(Link Data) Network Mask: 255.255.255.0
Number of MTID metrics: 0
TOS 0 Metrics: 1
OSPF的一类LSA 只能在区域内传递,无法传递到其他区域
一类LSA只能有路由器自己通告,通告关于本路由器的设备接口状态信息,包含接口地址、掩码、对端设备
MA网络下的LSA Type1:
R4(config-if)#do show ip ospf dat rou
OSPF Router with ID (10.10.4.4) (Process ID 1)
Router Link States (Area 0)
LS age: 43
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 10.10.4.4
Advertising Router: 10.10.4.4
LS Seq Number: 80000007
Checksum: 0x4B16
Length: 48
Number of Links: 2
Link connected to: a Stub Network
(Link ID) Network/subnet number: 10.10.4.4
(Link Data) Network Mask: 255.255.255.255
Number of MTID metrics: 0
TOS 0 Metrics: 1
Link connected to: a Transit Network //在一个多接入网络当中会有这个
(Link ID) Designated Router address: 1.1.45.4
(Link Data) Router Interface address: 1.1.45.4
Number of MTID metrics: 0
TOS 0 Metrics: 1
Broadcast的一类LSA由路由器自己通告,关于路由器自己的接口链路状态数据信息,包含了接口的地址以及链路上DR的IP
没有接口地址所在的掩码,没有接口链路上接入的接口设备信息
在MA网络类型,不能只通过lsa type 1计算路由
LSA Type 2:
R4#show ip ospf database network //查看lsa type2
OSPF Router with ID (10.10.4.4) (Process ID 1)
Net Link States (Area 0)
LS age: 963
Options: (No TOS-capability, DC)
LS Type: Network Links
Link State ID: 1.1.45.4 (address of Designated Router) //关于DR所在链路的IPv4地址
Advertising Router: 10.10.4.4 //由DR通告
LS Seq Number: 80000001
Checksum: 0xDFD0
Length: 32
Network Mask: /24 //网段
Attached Router: 10.10.4.4 //链路上的邻居
Attached Router: 10.10.5.5
由DR通告,将会通告DR所在链路上的情况,包含了链路的掩码是多少,以及接入了哪些设备
LSA Type 3:
三类LSA是由ABR(跨区域路由产生的)
将非区域0的一类二类LSA转换为三类LSA通告到AREA ZERO
将区域0的一类二类LSA转换为三类LSA通告到别的区域
可以将区域0的三类LSA转化成非区域0的三类LSA(非区域零中没有这个三类LSA对应的一类二类LSA)
注意 ABR不会将非区域0的三类LSA通道到区域0(所有非区域0的三类LSA都来源于区域0)
在华为课表当中讲述的是,ABR通告的是路由(对一般)
所以我们要记住,他产生的是一个LSA!!!ABR通告的是一个关于路由条目的LSA信息
R2(config)#do show ip ospf da sum
OSPF Router with ID (10.10.2.2) (Process ID 1)
Summary Net Link States (Area 0)
LS age: 640
Options: (No TOS-capability, DC, Upward)
LS Type: Summary Links(Network)
Link State ID: 1.1.45.0 (summary Network Number)
Advertising Router: 10.10.4.4 //通告条目的ABR的router-id
LS Seq Number: 80000001
Checksum: 0xAA46
Length: 28
Network Mask: /24 //掩码
MTID: 0 Metric: 1 //标目ABR去往目的的开销
LS age: 624
Options: (No TOS-capability, DC, Upward)
LS Type: Summary Links(Network)
Link State ID: 10.10.5.5 (summary Network Number)
Advertising Router: 10.10.4.4
LS Seq Number: 80000001
Checksum: 0x5AA6
Length: 28
Network Mask: /32
MTID: 0 Metric: 2
LSA Type 4 :
由ABR引入 告诉其他区域的路由器ASBR怎么走
当ABR将LSA Type5通告到别的区域的时候,会向别的区域注入一条LSA Type4告诉别的路由器,ASBR怎么走
R1#show ip ospf database asbr-summary //查看四类LSA
OSPF Router with ID (10.10.1.1) (Process ID 1)
Summary ASB Link States (Area 0)
LS age: 1661
Options: (No TOS-capability, DC, Upward)
LS Type: Summary Links(AS Boundary Router)
Link State ID: 10.10.5.5 (AS Boundary Router address) //ASBR的ID
Advertising Router: 10.10.4.4 //我是谁(通告四类LSA的Router-id)
LS Seq Number: 80000001
Checksum: 0x42BE
Length: 28
Network Mask: /0
MTID: 0 Metric: 1 //ABR到ASBR的router-id
LSA Type 5 :
R5(config-router)#redistribute connected subnets //重分布直连路由并且携带掩码
OSPF中重分发引入的外部路由,引入之后是LSA type5 默认情况下seed metric 为20
R5#show ip ospf database external
OSPF Router with ID (10.10.5.5) (Process ID 1)
Type-5 AS External Link States
LS age: 417
Options: (No TOS-capability, DC, Upward)
LS Type: AS External Link
Link State ID: 10.10.5.0 (External Network Number ) //引入的外部路由网络号
Advertising Router: 10.10.5.5 //ASBR的Router-id
LS Seq Number: 80000001
Checksum: 0xC99F
Length: 36
Network Mask: /24
Metric Type: 2 (Larger than any link state path)
MTID: 0 //拓扑编号(多进程OSPF基本不用了)
Metric: 20 //seed metric
Forward Address: 0.0.0.0 //计算路由的时候,如果forward address=0 则OSPF的Metric = seed_Metric + 去往ASBR的cost
External Route Tag: 0
这里要引入一个新的概念ASBR(Autonomous System Border Router):自治系统边界路由
谁把鬼子带进村,谁就是ASBR()
谁引入了外部路由谁就是ASBR
LSA Type5的ASBR router-id 不会根据区域的信息传递而改变
OSPF的五类LSA 有两种 metric type
当Metric Type 为2 的时候(默认情况)
计算路由条目的Metric时候,直接调教种子Metric 进入路由表
当Metric Type 为1 的时候
计算路由条目的Metric时候,需要种子Metric + Forward Metric
Forward Metric
当Forward address = 0 的时候,forward metric = 本路由器去往ASBR的开销
当Forward address != 0的时候,forward metric = 本路由去往forward address的开销(挖坑)

Virtual link(虚链路)
解决非区域0未接壤在区域0上,导致没有ABR的路由无法计算路由的问题
配置virtual link 双端配置
R4(config)#router ospf 1 *Dec 29 13:28:03.654: %OSPF-4-ERRRCV: Received invalid packet: mismatched area ID from backbone area from 1.1.34.2, GigabitEthernet0/2 R4(config-router)#area 1 virtual-link 10.10.2.2 //area <area_num> virtual-link <对端router-id > R4(config-router)# R4(config-router)#do show ip ospf int b Interface PID Area IP Address/Mask Cost State Nbrs F/C VL0 1 0 1.1.34.4/24 1 P2P 1/1 //可以看到我们自动配置了,而且虚拟端口也加入运行了OSPF Lo0 1 0 10.10.4.4/24 1 LOOP 0/0 Gi0/1 1 0 1.1.45.4/24 1 DR 1/1 Gi0/0 1 1 1.1.24.4/24 1 DR 1/1 Gi0/2 1 1 1.1.34.4/24 1 DR 1/1
OSPF的LSA过滤
在EIGRP当中我们由 分发列表 用来过滤路由
那么我们的OSPF能不能用分发列表过滤?
答案是 可以的
理论上来说 分发列表只能过滤我们的路由条目
在OSPF当中,分发列表只能被应用在入方向
分发列表在OSPF的用途:
当路由器通过LSDB的LSA成功计算成为路由,即将提交到路由表的时候,可以使用分发列表过滤,不让路由提交到路由表
分发列表在出方向也可以使用,但是只有重发布的时候基于协议的过滤
注意 : 这里只能过滤 LSA Type3 计算得出的路由 , 无法过滤LSA
这个方法无法过滤LSA Type 1 Type 2 Type 5
这下真来过滤LSA了
当ABR将一类二类转换为三类LSA的时候才能使用分发列表过滤LSA
我们过滤LSA使用到的工具就是我们的前缀列表(prefix-list)
Router(config-router)#area <area id> filter-list prefix <prefix_name> <in/out> //过滤命令行如下
in :当需要把LSA引入对应区域的时候调用prefix过滤
out :把来自于某个区域转换过来的LSA通告到其他区域的时候过滤
ABR都能过滤三类LSA
这个跟ACL一样,但是 同一个区域的同一个方向只能被调用一次
OSPF的汇总
区域间汇总
在ABR上针对于LSA Type3的汇总
当ABR将一类二类LSA转换为三类LSA通告到别的区域时候做汇总
Router(config-router)#area <被汇总的区域ID> ? authentication Enable authentication capability Enable area specific capability default-cost Set the summary default-cost of a NSSA/stub area filter-list Filter networks between OSPF areas nssa Specify a NSSA area range Summarize routes matching address/mask (border routers only) //手动汇总选项(只有边界路由有效) sham-link Define a sham link and its parameters stub Specify a stub area virtual-link Define a virtual link and its parameters Router(config-router)#area 2 range 100.0.0.0 255.255.252.0 //输入汇总的网段与掩码,将区域2的一类二类LSA转换为三类LSA的时候做汇总
注意:写命令的时候需要填写的是被汇总的区域
*汇总的特点
1.汇总会抑制明细路由
2.至少存在一条明细路由汇总才会生效
3.汇总会产生一条指向Null0的防环路由
只有ABR将一类二类LSA转换为三类LSA时候才可以汇总与过滤LSA不同
区域外汇总
在ASBR上针对于LSA Type5的汇总
我们的五类LSA汇总,只能在引入的ASBR上面做汇总
Router(config-router)#summary-address <汇总网段> <汇总掩码> //只用于过滤五类LSA,且只能在ASBR上 A.B.C.D IP summary address
OSPF注入默认路由
我们在EIGRP当中 我们使用过Network宣告默认路由到路由表
但是这个方法在我们的OSPF当中不可用
这OSPF当中network 0.0.0.0 0.0.0.0会变成0.0.0.0 255.255.255.255 激活所有端口运行OSPF
重分布默认路由呢?
很遗憾
也不行,我们的OSPF不接受默认路由的重分发
手动汇总呢?我们把他汇总成区域外路由
很遗憾也不行哦~
汇总成默认他会送你个not-advantce,不允许你通告
有条件 注入默认路由
路由器的路由表当中,必须存在有一条默认路由(可以是任何协议的默认路由)
默认情况下,路由器将会使用五类LSA发布默认路由metric-type2(只调用seed metric = 1)
五类LSA默认情况下会带有TAG数值,TAG值等于OSPF的进程号
Router(config-router)#default-information originate //有条件下发默认路由
可以修改有条件注入默认路由的条件是什么
使用router-map工具匹配路由
无条件 注入默认路由
路由器本身没有默认路由,但是需要给OSPF注入一条默认路由
Router(config-router)#default-information originate always //无条件注入默认路由
OSPF的路由选路
OSPF O路由选路(区域内路由选路)
来自相同区域的一类二类LSA得出的O路由:
比较去往目的地址的COST值,谁小走谁
来源不同区域的一类二类LSA计算得出的O路由:
在Metric数值相同情况下,优先选择Area ID更大的路径
O路由永远优先于O IA路由,并且不考虑外部
OIA路由的选路
比较去往目的地址的COST值,谁小走谁
在Metric数值相同情况下,优先选择Area ID更大的路径
当收到来自于不同区域的OIA路由时候,Cost小的优先,如果相同那就变成等价路由
当有区域0的时候无论别的区域Cost多小,我们优先走区域0
OE路由的选路
O E2路由的选路
当收到来自不同ASBR的O E2路由时
优先比较路由条目的seed metric(def=20)
如果seed metric的数值相同,就比较沿途开销(forward metric)
O E1路由的选路
**注意Metric type为2的路径有一句话metric永远最大
所有不管什么时候OE1 永远大于OE2
当收到来自不同区域的OE1时候,不考虑seed metric直接比较总metric
O > OIA > OE
intra area > inter area > exchange type1 > exchang type2
ON路由的选路
ON2路由的选路
当收到来自不同ASBR的路由,优先比较seed metric小的优先
如果forward metric不同选小的
ON1路由的选路
seed metric + forward metric 计算 总metric
小的优先,相同则等价
O > OIA > OE1 > ON1 > OE2 > ON2
在一般情况下按照RFC 1587五类LSA永远大于七类LSA
OSPF 特殊区域
一般来说边界区域的设备一般的性能都不是那么的好
所以我们的特殊区域给设备尽可能的减少LSA,让他少算点路由
尽可能减少LSA,但不影响路由的转发
虚链路区域无法变为特殊区域 骨干区域无法成为特殊区域
Stub area
在OSPF当中,我们的STUB区域默认不会向他传递四类五类LSA
router ospf <OSPF_AS_ID>
area 2 stub
设定之后,你会发现,路由器的OSPF Peer全部down了
因为,我们的Hello包当中会有个Stub/nssa标识,标识他的区域是否支持五类四类 LSA的外部路由(External Routing = 0)
一旦区域内某个路由器指定本区域为特殊区域,则本区域所有路由器都需要指定,否则不能建立邻居
ABR在过滤四类五类LSA进入stub区域的时候仍可以访问外部路由,会主动下发一条三类LSA的默认路由而且 seed metric 为 1
注意:
我们不能用修改五类LSA默认路由的命令来修改我们stub注入的默认
ospf <area id> default-cost <metric>
这条命令可以修改我们stub区域的引入的默认路由的seed metric
Totally Stub
可以在Stub区域过滤掉四类五类LSA的基础上,同时过滤掉了三类LSA不允许三类LSA进入Totally Stub
但是过滤掉三类LSA,不代表这个特殊区域没有三类LSA
还是会存在一个默认路由的三类LSA
在配置的时候,要配置totally stub只需要在ABR上面配置
area <area_id> no-summary
NSSA (Not So Stub Area)
NSSA特殊区域可以禁止其他区域的四类五类LSA进入到NSSA特殊区域,但是NSSA特殊区域当中可以引入外部路由
area <area_id> nssa //设定区域为nssa
在NSSA当中我们的External routing也会变成0
ABR不会自动向NSSA区域注入默认路由
L3-3560x(config-router)#area 1 nssa default-information-originate //无状态注入默认路由而且不需要always
七类LSA引入的默认路由默认metric type 2
默认seed metric 1
这里需要注意的是,我们虽然是使用注入五类LSA的默认路由,但他实际上不是五类lsa 而是七类LSA
在NSSA区域当中,我们可以存在“ASBR”但是因为NSSA当中不能存在四类五类LSA,所有外部路由将会存在七类LSA路由的方式引入
在OSPF NSSA特殊区域当中通告七类LSA计算得出的路由如果metric-type1 则为ON1 如果为2则为ON2
我们的的七类LSA只能在于NSSA特殊区域,当我们的七类LSA重分布进入其他区域的时候,将会被转化为四类五类LSA
ABR会将NSSA特殊区域中的七类LSA转换为五类LSA通告到别的区域,如果有多个ABR,则由router-id大的负责转换
metric-type 2 seed metric直接提交到路由表
metric-type 1 seed metric提交metric+forward metric
Forward-metric:
如果Forward Address = 0.0.0.0,则Forward-Metric =本路由器到达ASBR的开销.
如果Forward Address不是0.0.0.0,则Forward-metric =本路由器中路由表去往Forward-address的开销.
Totally NSSA
在NSSA基础上,在ABR上配置,再过滤掉三类LSA
但是我们这里跟NSSA有点区别,我们会自动引入三类LSA的默认路由的
LSA type 7 Forward Address
如果在NSSA区域重分布直连路由进入OSPF
情况一:
如果路由器当中没有Loopback接口
最新加入运行OSPF的接口地址就会成为Forward-address
情况二:
如果路由器当中有loopback接口
最早加入OSPF的Loopback接口将会成为forward address
如果在NSSA重分布另一个动态路由协议的路由条目进入OSPF
情况一:
如果路由器运行另一个动态路由的端口没有运行OSPF
FA的地址选举与上一种情况一致
情况二:
如果路由器运行另一个动态路由的端口也有运行OSPF
FA的地址将会变成被重分布路由条目的下一跳地址
普通区域重发布动态路由协议加入OSPF
情况一:
如果运行另一个动态路由协议的端口没有运行OSPF
FA=0.0.0.0
情况二:
如果运行另一个动态路由协议的端口也有运行OSPF
FA的地址将会变成被重分布路由条目的下一跳地址
OSPF汇总的防环路由可以被取消
R2(config-router)#no discard-route ?
external Discard route for redistributed summarised routes //取消外部路由的防环路
internal Discard route for summarised internal routes //取消区域间汇总产生的防环
//不管什么防环路由默认都是O路由管理距离254
R2(config-router)#discard-route ? <0-254>
external Discard route for redistributed summarised routes
internal Discard route for summarised internal routes
<cr>
//调整管理距离
OSPF的TAG
可以给条目打上tag后续针对来过滤和筛选
(深夜,机房角落,一名网络工程师盯着EIGRP配置界面,手指颤抖)
网工(对着思科路由器屏幕喃喃自语):
“你为啥直接宣告主网啊?!😨 思科文档里不是这样!😡 你应该先过滤特定路由☝,然后调整带宽延迟参数提升metric优先级。偶尔用分发列表卡一下更新☺️,在那个被动接口特殊配置时跟我有逻辑互动😮。最后在某个拓扑变更事件中,让我手动汇总😃,我给你看邻居表收敛啊😃。你怎么直接写network 0.0.0.0!😡?CCIE实验根本不是这样!😡我不接受!!😡😡😡”
(突然抓起咖啡杯猛灌一口,继续对空路由器咆哮)
“说好的分步骤呢?!先show ip eigrp topology看后继/可行后继😠,再用offset-list微调度量值☝,接着summary-address压成超网😌,最后用variance load-balancing的时候——你居然给我来句‘neighbor x.x.x.x shutdown’?!😡这是BAD GAME!!我要看的是可行距离/报告距离的完美比例CG动画啊!!😭”
(同事从机柜后探头)
同事:“…你又在跟EIGRP谈恋爱?”
网工(崩溃摔键盘):“它永远不懂我的心跳机制需要hello包循序渐进!!!”
(最终缩成 fetal position 念叨着)
“明明…明明可以带宽乘延迟加K值…明明可以精确到192.168.1.0 0.0.0.255…”
(次日监控记录显示:该工程师在CLI界面用问号键疯狂敲出“? ? ? ?”,仿佛在等待某个不存在的攻略选项弹出)
谁家在OSPF文档发EIGRP啊!!!再说!这不我写的吗?