目前使用范围最广泛的IGP协议;无类别链路状态路由协议;
OSPF 协议最大的缺点在于基于拓扑收敛产生巨大的更新量;故设计者在设计OPSF协议过程中,使用了很多机制来减少更新量——结构的部署
1、区域划分——单区域内传递拓扑,用于每台路由器本地计算到达所有未知网段的最短路径,区域间传递计算完成后的路由条目信息
2、合理的IP地址规划——一个区域可以汇总成一个网段为最佳
3、特殊区域(本文后面有详细内容)
4、30min的周期更新
一、OSPF 的五种数据包:
Hello包:发现、建立、周期保活邻居、邻接关系
DBD包:数据库描述包,本地的数据库的目录
LSR包:链路状态查询,基于DBD包中的未知信息进行查询
LSU:链路状态更新,用于答复对端的LSR,携带个各种的LSA
LSACK:链路状态确认,确认包,保障可靠性
OSPF数据包跨层封装于三层报头:
二、OSPF的状态机
Down:一旦进行hello的收发,进入下一状态
Init初始化:接收到的hello包中存在本地的router-id,进入下一状态
2way双向通信:邻居关系建立的标志
条件匹配:匹配失败保持为邻居关系,仅hello包周期保活即可
匹配成功进入下一状态机
exstart预启动:使用类似hello包的DBD进行主从关系选举,router-id数值大的为主,优先进入下一状态;
exchange准交换:使用真正的DBD包进行数据库目录的共享;
loading加载;使用LSR/LSU/LSACK来获取未知的LSA信息;
Full转发:邻接关系建立的标志;
三、OSPF 的工作过程
启动宣告配置完成后,路由器开始组播(224.0.0.5)收发OSPF的hello包;若接收到的hello包中存在本地的router-id,建立邻居关系,生成邻居表;
之后基于表格中的所有邻居进行条件匹配,匹配失败将维持邻居关系,仅hello包周期保活即可;匹配成功者间可以建立邻接关系,邻居间使用DBD进行数据库目录的比对,之后使用LSR查询目录中未知的LSA信息,对端使用LSU来携带传递LSA,最终需要LSack进行接受确认;
当本地收集到区域内所有设备的LSA后,生成LSDB——链路状态数据库表;
本地基于LSDB启用SPF算法,计算到达所有未知网段的最佳路径,然后将其加载到路由表中;收敛完成,仅hello包周期保活所有的邻居和邻接关系;每30min周期进行DBD包的收发来进行纠错;
四、OSPF从邻居建立成为邻接关系的条件
在点到点网络中,若所有邻居皆建立为邻接关系,将导致大量的重复更新,距离矢量路由协议在MA环境中使用了接口水平分割机制;由于OSPF协议是基于数据库同步对比的方式来进行收敛,故不支持接口的水平分割;
OSPF最终将在MA网段进行DR/BDR的选举;非DR/BDR间将维持邻居关系,不建立邻接关系来避免重复更新;
选举规则:比较接口优先级 0——255 大的优先
[r1-GigabitEthernet0/0/0]ospf dr-priority 2
因为选举非抢占,故修改优先级后,必须重启ospf协议进程
<r1>reset ospf 1 process
建议:网络存在DR/BDR后,其他设备修改为0,不参选;不需要重启设备进程;
五、OSPF的数据库表——LSDB链路状态数据库
数据库表中装载OSPF的不同类型的LSA
每条LSA均存在以下信息:
Type ------ Router----- 类别名
Ls id------1.1.1.1-------link-id 在目录中番号
Adv rtr-----1.1.1.1------通告者的RID
Ls age-----532---------老化时间 正常1800周期刷新,触发更新导致刷新,最大老化3609
Len-------60----------长度
Options-----E------选项
seq-------80000003—序列号
chksum-----0xb2ee------校验和码
OSPF协议正常学习到的路由条目优先级为10;重发布进入的路由为150;
六、优化OSPF协议,减少LSA的更新量
正常1类LSA是一台设备一条,2类LSA是一个网段的DR产生一条,3类和5类是一条路由一条LSA,4类是一台ASBR产生一条;
1、汇总——减少骨干区域的更新量
(1)域间路由汇总——将非骨干区域汇总到骨干区域
在ABR上进行配置:
[r1]ospf 1
[r1-ospf-1]area 2 只能汇总本地通过该区域1、2类LSA产生的路由
[r1-ospf-1-area-0.0.0.2]abr-summary 5.5.4.0 255.255.252.0
注:汇总配置完成后,需要手工添加空接口防环路由
(2)域外路由汇总;因为域外路由由ASBR重发布导入,故在导入的ASBR上进行配置:
[r4]ospf 1
[r4-ospf-1]asbr-summary 99.1.0.0 255.255.252.0
2、特殊区域——减少非骨干区域的更新量;不能是骨干区域,不能存在虚链路
(1)不存在ASBR
① 末梢区域stub——拒绝4、5类LSA,生成一条3类的缺省路由指向骨干区域;
[r5]ospf 1
[r5-ospf-1]area 2
[r5-ospf-1-area-0.0.0.2]stub
切记:该区域所有设备均需要定义为末梢区域;
② 完全末梢区域,在末梢区域的基础上,进一步拒绝3类的LSA,仅保留一条3类的缺省;
先将该区域配置为末梢区域,然后仅在ABR上定义完全即可;
[r1-ospf-1-area-0.0.0.2]stub no-summary
(2) 存在ASBR
① NSSA:非完全末梢区域——该区域拒绝其他区域的ASBR产生的5、5类LSA,本地区域内ASBR产生的5类LSA,以7类在本区域传播,从本区域进入骨干区域时由ABR转换为5类,同时自动产生一条7类的缺省路由指向骨干区域;
[r4]ospf 1
[r4-ospf-1]area 1
[r4-ospf-1-area-0.0.0.1]nssa
注:本区域内所有设备均需要配置
② 完全NSSA:在NSSA的基础上,进一步拒绝3类的LSA,生成一条3类的缺省路由指向骨干区域,先将该区域配置为NSSA区域,然后仅在ABR上定义完全即可;
[r3-ospf-1-area-0.0.0.1]nssa no-summary
切记:考虑到ISP连接网络后,产生的缺省路由与OSPF特殊区域产生的缺省可能会导致环路;
ISP连接到的区域不能设定为任何的特殊区域;
七、OSPF 的不规则区域
规则区域:星型结构——骨干区域位于中心,非骨干为分支,必须存在ABR——区域边界路由器,两个区域间必须一台设备同时工作多个区域内
该规则的意义在于减少LSA的更新量——星型结构稳定性高,性价比好;
为了实现以上规则,OSPF存在硬性条件:
1、直连的邻居间hello包中区域ID必须完全一致;若不一致无法建立邻居关系
2、一台ABR若没有连接到骨干区域,将不能进行区域间的路由共享;
3、只要ABR连接到的骨干区域,同时可以再连接N个非骨干,且进行两两区域间的路由共享;
不规则区域:
1、远离骨干的非骨干区域
2、不连续的骨干区域
解决方法:
1、Tunnel 隧道——GRE—通用路由封装,一种简单的VPN(虚拟专用网络)
在两台的ABR上建立Tunnel,然后将其宣告到OSPF协议中
interface Tunnel 0/0/0
ip address 10.1.1.1 255.255.255.0
tunnel-protocol gre
source 34.1.1.1
destination 45.1.1.2
缺点:①周期和触发的信息将对中间的穿越区域造成资源的占用;
②选路不佳;
2、OSPF虚链路:网络中合法的ABR(工作的区域0的ABR),和非法的ABR间建立一条虚链路(在OSPF协议中构建,没有新生网段),由合法ABR授权非法ABR进行区域间路由共享;
[r3]ospf 1
[r3-ospf-1]area 1
[r3-ospf-1-area-0.0.0.1]vlink-peer 5.5.5.5 此处5.5.5.5为对端ABR的router-id
[r3]display ospf vlink
优点:没有新生链路,故选路正常
缺点:Cisco设备中OSPF虚链路为避免对中间穿越区域周期保活和更新资源占用,取消了周期的hello包和周期更新;不可靠,不稳定
华为设备中依然保留周期的hello包更新,占用中间区域的资源
3、OSPF的多进程双向重发布
OSPF多进程,进程号仅具有本地意义,邻居间建立邻居关系时可以使用不同的进程号;
若在一台设备上同时启动多个进程,那么不同进程存在自己的邻居关系,生成不同的数据库(不共享);最终将所有数据库计算所得路由加载于同一路由表中;
在解决不规则区域时,可以让非法ABR将不同的OSPF区域工作在不同的OSPF进程中,之后使用双向重发布来实现路由共享;
[r2]ospf 1
[r2-ospf-1]import-route ospf 2
[r2-ospf-1]quit
[r2]ospf 2
[r2-ospf-2]import-route ospf 1