OSPF协议目录:
第一部分(OSPF工作过程)
OSPF:开放式最短路径优先协议;
无类别链路状态IGP协议;触发更新+周期更新(30min)
组播更新:224.0.0.5 通用地址 224.0.0.6 DR/BDR专用地址
基于拓扑进行收敛,更新量巨大-----结构的部署----1、区域划分 2、IP地址规划
一、OSPF的5种数据包类型:
- hello
- DBD包 -数据库描述包
- LSR链路状态请求
- LSU链路状态更新
- LSack
数据包结构:跨层封装于3层报头,协议号89;
标准报头中存在RID/区域ID和认证参数;
- OSPF的状态机
Down:一旦本地发出ospf的hello包进入下一个状态
Init初始化:接收到的hello包中存在本地的RID,进入下一状态
2way双向通信:邻居关系建立的标志;
条件匹配:点到点直接进入下一状态;MA网络进行DR/BDR选举(40s),非DR/BDR间不进入下一状态
Exstart预启动:使用类似hello 的DBD包来进行主从关系选举,RID数值大为主,优先进入
下一状态;
Exchange准交换:使用真实的DBD包来共享数据库目录;
Loading加载:从邻接处使用LSR/LSU/LSack来获取本地没有的LSA信息;hello是用来发现本地直连未知网段的;
Full转发:邻接关系建立的标志
- OSPF的工作过程
- 启动配置完成后,邻居间组播(224.0.0.5)使用hello包,建立邻居关系,生成邻居表;
- 邻居表生成后,基于邻居表中的各个邻居,进行条件的匹配;匹配失败将维持邻居关系,
仅hello包周期保活即可;
邻接关系间将使用DBD来共享本地的数据库摘要;邻接关系间可以通过识别摘要,来请求本地未知的LSA信息;请求时使用LSR,对端使用LSU来分享这些LSA信息;
数据库表可查看;
- 默认OSPF协议通过本地的数据库,启用SPF最短路径选路规则,计算本地到达所有未知网段的最佳路径,然后将其加载于路由表中;
收敛完成---hello包周期保活 邻接关系间每30min周期进行DBD的比对,若一致继续保持安静;
- 结构突变
【1】新增网段---直连新增网段的设备,使用DBD包来告知本地所有邻居;
【2】断开网段---直连断开网段的设备,使用DBD包来告知本地所有邻居;
【3】无法沟通---dead time到时时,断开邻居关系,是否能够重建关注hello包;
- 名词注解:
LSA:链路状态通告,在不同环境下产生不同类别的LSA;可以是拓扑也或者是路由条目;
LSDB:链路状态数据库---所有LSA的集合
LSA洪泛,LSDB同步-----OSPF收敛的称呼
- 配置
R1(config)#router ospf 1 启动时需要配置进程号,仅具有本地意义;
R1(config-router)#router-id 1.1.1.1 配置RID; 手工--环回最大地址--物理最大地址-无法启动
宣告:1、激活--收发ospf信息 2、通告直连接口的拓扑 3、区域划分
R1(config-router)#network 12.1.1.1 0.0.0.0 a 0
R1(config-router)#network 1.1.1.1 0.0.0.0 a 0
必须携带反掩码
注:区域之间的路由器(即ABR),宣告时应该精确宣告,用反掩码0.0.0.0宣告最好
区域划分的规则:
- 星型结构---骨干区域0;非骨干大于0;非骨干必须直连骨干区域;
- 必须存在ABR--区域边界路由器
【1】启动配置完成后,邻居间使用hello包建立邻居关系,生成邻居表;
R2#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
1.1.1.1 0 FULL/ - 00:00:32 12.1.1.1 Serial1/0
3.3.3.3 0 FULL/ - 00:00:37 23.1.1.2 Serial1/1
邻居的RID 优先级 状态机 下一跳 出接口
邻居关系的建立依赖hello包;
邻接关系的建立依赖hello包和条件匹配;
*表示邻居间hello包中必须完全一致的参数:
1. Hello dead time
2.区域ID;
3. 认证参数;
4.特殊区域标记
【2】邻居关系建立后,邻居间进行条件的匹配;若匹配失败,将保持为邻居关系,仅hello包周期保活;若匹配成功,将入邻接关系的建立;先使用类hello 的DBD进行主从关系选举;
主RID数值大,优先级共享真实的DBD包,分析本地的数据库目录,便于邻居对比,之后通过LSR/LSU/LSack来获取未知的LSA信息;
这些LSA被保存在本地的LSDB中,通过数据库表呈现;
R2#show ip ospf database
DBD包--数据库描述表--lsdb的目录;
- 隐性确认--使用序列号进行确认
从设备复制主设备的序列号,来对DBD包进行确认
- 标记位 I位-为1 标识本地发出的第一个DBD包
M位为1 标识不是本地的最后一个
MS位为1 标识本地为主
- MTU--在exchange状态时收发的dbd包中携带本地接口的MTU值;邻居间该值必须一致,否则将卡在exchange状态;
注:MTU为最大传输单元,因为OSPF更新量大,如果 MTU不一致,可能会导致拆分传输,这样会多加报头,造成更新量加大!!所以OSPF要求MTU一致,降低更新量!!
【3】当LSDB同步完成,本地将使用spf选路规则,计算本地到达所有未知网段的最短路径,然后将其加载到路由表中;
1、字母O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
O 本地区域的路由;本地通过该区域的拓扑信息计算所得
O IA 域间路由,其他区域的路由;是ABR共享到本区域的路由
O E1/2 域外路由,其他协议或进程的路由条目;是ASBR重发布到OSPF的路由
O N1/2 域外路由,其他协议或进程的路由条目;是ASBR重发布到OSPF的路由,同时本地
处于NSSA区域
- 管理距离--默认110
- 度量为cost值=开销值=参考带宽/接口带宽
默认参考带宽为100M;优先cost值之和最小的路径;
注:当接口带宽大于参考带宽时,度量值为1;可能导致选路不佳;可以修改所有OSPF设备的参考带宽;
R1(config)#router ospf 1
R1(config-router)#auto-cost reference-bandwidth ?
Mbits
R1(config-router)#auto-cost reference-bandwidth 1000
【4】成为邻接关系的条件--关系到网络类型
点到点和MA;
- 点到点网络中所有邻居直接建立为邻接关系;
- MA网络中需要进行DR/BDR选举,非DR/BDR间不建立邻接关系,保持为邻居关系;
OSPF水平分割--在区域间进行
DR/BDR选举规则:
- 先必须优先级,默认1;数值大优 若优先级为0,标识不参选
- 优先级一致比较RID,数值到优
干涉选举:
- DR优先级最大,bdr次大,其余不修改
R1(config)#interface fastEthernet 0/0 参选接口上修改优先级
R1(config-if)#ip ospf priority 3
注:OSPF选举非抢占,修改优先级后,必须重启所有设备进程
- DR优先级最大,bdr次大,其他设备修改为0;不需要重启进程
切记:不得将所有参选接口修改为0;至少存在DR;
【5】OSPF网络类型 ----ospf的接口网络类型 ---
OSPF协议在不同的网络类型下,不同的工作方式
R1#show ip ospf interface loopback 0
Loopback0 is up, line protocol is up
Internet Address 1.1.1.1/24, Area 0
Network Type LOOPBACK, Cost: 1
Loopback interface is treated as a stub Host
网络类型 OSPF的接口网络类型 工作方式
环回-LOOPBACK LOOPBACK 无hello包,主机路由发送
点到点--PPP/HDLC/GRE POINT_TO_POINT hello time10s;自动建邻,不选DR/BDR
BMA--以太网 BROADCAST hello time10s;自动建邻,选DR/BDR
NBMA--帧中继、MGRE POINT_TO_MULTIPOINT hello time30s;自动建邻,不选DR
注意:在MGRE环境中运行OSPF,因为OSPF协议在tunnel接口默认的工作方式为点到点,这种方式只能建立一个邻居,故多点端将出现邻居关系翻滚;
解决方法:修改接口的工作方式
注意:无论你选择改成那个工作方式,都应该将所有节点都修改
r1(config-if)#ip ospf network ?
broadcast Specify OSPF broadcast multi-access network
non-broadcast Specify OSPF NBMA network
point-to-multipoint Specify OSPF point-to-multipoint network
point-to-point Specify OSPF point-to-point network
- 修改为 broadcast ,所有节点必须全部修改,否则无法建立邻居关系,后者无法正常收敛,卡在exstart状态机;
在星型或部分网状建议使用 point-to-multipoint工作方式,如果使用broadcast将出现DR位置问题;
解决----DR固定在一个点;
在全连网状结构中,一般选择broadcast,建议不使用点到多点;因为将全网邻接关系,重复更新,broadcast会选DR不会存在重复更新;
注:NHRP服务器可以多台,用于备份服务器;开启全连网状,不是增加NHRP服务器的数量,而是在没有邻居关系的设备间,互相配置伪广播;
第二部分(LSA优化、特殊区域)
【1】解决OSPF的不规则区域
OSPF协议的规则区域-星型结构,非骨干区域必须同时工作骨干区域;否则该非骨干区域的ABR不能进行区域间路由共享;
- 远离了骨干的非骨干区域
- 不连续骨干
解决方法:
- tunnel 在两台ABR上建立隧道,然后将其宣告到OSPF协议中;
缺点:对周期、触发更新和保活流量对中间区域存在资源占用
选路不佳;
- OSPF虚链路--在两台ABR上进行虚链路的建立,之后让骨干区域ABR对非法ABR进行授权;使得非法ABR可以进行路由共享;
没有建立实际的网段链路,故不存在选路不佳问题;未避免周期的保活和更新信息对中间区域的资源占用,取消了该机制;----导致虚链路不可靠,不稳定;
r2(config)#router ospf 1
r2(config-router)# area 1 virtual-link 4.4.4.4
中间穿越区域 对端ABR的RID
- 多进程双向重发布
- 多进程---一台设备上同时运行多个OSPF进程时,不同进程存在各自的RID和数据库;当从各自邻居处学习到了信息后,存储在自己的数据库中,数据不共享;仅将计算所得路由加载到同一张路由表中; 若将一个接口同时宣告于多个进程,仅最先宣告进行工作;
注:在一个路由器上运行多个OSPF进程相当于在一个路由器上起多个不同的协议
(2)双向重发布--两种协议或两个进程间,进行路由条目的双向共享;
解决不规则区域时,将处于不规则点的ABR不同接口宣告到不同进程,最后使用双向重发布来实现路由共享---选路正常,无周期信息,可靠和稳定的;
r4(config)#router ospf 1
r4(config-router)#redistribute ospf 2 subnets
r4(config-router)#exit
r4(config)#router ospf 2
r4(config-router)#redistribute ospf 1 subnets
【2】OSPF的数据库表
r1#show ip ospf database 查看数据库表的摘要
数据表为LSDB,是各种类别的LSA信息集合;LSA在不同条件下产生,路由信息或者拓扑信息;使用不同的类别来区分了不同条件的LSA信息;
具体查看某条LSA信息
r1#show ip ospf database router 1.1.1.1
类别名 link-id
所有类别的LSA信息,均存在以下参数
LS age: 328 老化时间,1800s周期更新归0,触发更新归0;最大老化3609s
Options: (No TOS-capability, DC)
LS Type: Router Links LSA类别名,此处为1类;
Link State ID: 1.1.1.1 link-id条目在目录中的番号
Advertising Router: 1.1.1.1 通告者的RID--该LSA的更新源设备的名字
LS Seq Number: 80000005 棒棒糖序列号规则
Checksum: 0x63FA
Length: 60
各种类别的LSA:
名称 范围 通告者 携带的信息
LSA1 router 设备所在区域 该区域的每台设备 本地直连拓扑
LSA2 network 设备所在区域 DR MA网段部分的拓扑
LSA3Summary 整个OSPF域 ABR O IA 域间路由
(注意区域水平分割)
LSA4 asbr-summary ASBR所在区域外的 ABR ASBR位置
整个OSPF域
LSA5External 整个OSPF域 ASBR O E1/2 域外路由
LSA7nssa-external 单个NSSA区域 ASBR O N1/2域外路由
名称 link-id 通告者ID
LSA1 router 通告者的RID 该区域的每台设备
LSA2 network DR的接口ip DR的RID
LSA3Summary O IA 路由条目的网络号 ABR;经过下一台ABR时,修改为新的ABR RID
LSA4LSA4 asbr-summary ASBR RID ABR(与ASBR在同一区域)经过下一台ABR时,修改为 新的ABR RID
LSA5External O E1/2 路由条目的网络号 ASBR-默认在传播过程中不修改
LSA7nssa-external O N1/2路由条目的网络号 ASBR-在传递出该NSSA区域后,被新的ASBR转换为5类
【3】OSPF的LSA更新量优化
- 汇总---减少骨干区域的LSA--OSPF不支持区域内部的接口汇总,因为内部传递拓扑
{1}域间路由汇总
注:汇总非骨干区域的路由到骨干区域,来减少骨干区域的路由
在ABR上配置,配置完成后本地生成空接口防环路由
r3(config)#router ospf 1
r3(config-router)#area 1 range 4.4.4.0 255.255.254.0
切记:ABR必须是工作在被汇总路由的区域内;只能将本地通过1/2类LSA计算所得路由进行汇总
{2}域外路由汇总
注:汇总其他协议的路由到骨干区域,减少骨干区域的路由;ASBR上有多个OSPF进程也相当于不同协议。
在ASBR上的OSPF协议配置;自动产生空接口防环路由
r4(config)#router ospf 1
r4(config-router)#summary-address 99.1.0.0 255.255.252.0
- 特殊区域--减少非骨干区域的LSA --所有特殊区域配置
注:需要该区域每台设备均配置,不能是骨干区域,不能存在虚链路;
{1}同时不能存在ASBR
《1》末梢区域--该区域拒绝4/5的LSA;
r5(config)#router ospf 1
r5(config-router)#area 2 stub
《2》完全末梢区域---在末梢区域的基础上,进一步拒绝3类LSA,仅保留一条3类缺省;
仅在ABR上定义完全即可,区域中其他路由器配置末梢区域就行了;
r1(config)#router ospf 1
r1(config-router)#area 2 stub no-summary
{2}同时存在ASBR
《1》NSSA 非完全末梢区域;该区域拒绝4/5的LSA;为避免环路产生,不自动产生缺省;在管理员确定了网络无环的情况下手工添加缺省路由;本区域的ASBR产生的域外路由使用7类标记,离开本区域进入骨干时,转换回5类,进行转换的ABR成为新的ASBR;
NSSA的意义在于拒绝从网络中其他区域的ASBR产生的4/5类LSA信息;
r4(config)#router ospf 1
r4(config-router)#area 1 nssa
《2》完全NSSA---在NSSA区域的基础,进一步拒绝3类LSA;自动产生3类缺省;
虑是否会产生环路;
仅在ABR上定义完全即可,区域中其他路由器配置nssa就行了;
r3(config)#router ospf 1
r3(config-router)#area 1 nssa no-summary
切记:使用特殊区域时,ISP连接在哪个非骨干,该区域不做特殊配置;连接到域外协议时,OSPF中与该域外协议所相连的非骨干区域也不能做特殊区域配置;否则可能导致环路;
第三部分(OSPF的扩展知识点)
【1】扩展配置
- 认证
{1}接口认证
1】接口明文
r11(config)#interface s0/1
r11(config-if)#ip ospf authentication 先开启接口明文认证需求,开启后该接口发出的OSPF数据包中,认证类型字段被修改,虽然没有认证秘钥,当依然要求邻居该参数必须一致
r12(config-if)#ip ospf authentication-key cisco123 认证明文秘钥,两端需一致
2】接口密文
r11(config-if)#ip ospf authentication message-digest 密文需求
r11(config-if)#ip ospf message-digest-key 1 md5 cisco123 密文秘钥
{2}区域认证
例:在R1上开启关于区域0 的明文或密文认证;实际就是在R1上所有属于区域0的接口,进行明文或密文认证认证类型字段修改;等于在R1的所有区域0接口配置接口认证中的需要开启;明文或密文秘钥需要到各个接口逐一配置;
r11(config)#router ospf 1
r11(config-router)#area 1 authentication 区域明文
r11(config-router)#area 1 authentication message-digest 区域密文
{3}虚链路认证
r11(config)#router ospf 1
明文
r11(config-router)#area 1 virtual-link 4.4.4.4 authentication
r11(config-router)#area 1 virtual-link 4.4.4.4 authentication-key cisco123
密文
r11(config-router)#area 1 virtual-link 4.4.4.4 authentication message-digest
r11(config-router)#area 1 virtual-link 4.4.4.4 message-digest-key 1 md5 cisco123
- 汇总的扩展
在进行域间路由汇总的同时,修改该汇总条目的cost值;
r11(config-router)#area 1 range 10.1.0.0 255.255.252.0 cost 10
还可以被用于干涉选路,OSPF没有偏移列表;
域间路由修改单个条目的cost
R1为ABR,需要将1.1.1.0/24传输给其他区域
r1(config-router)#area 1 range 1.1.1.0 255.255.255.0 cost 10
路由过滤,R1为ABR,不愿意将区域1中2.2.2.0/24的路由共享给区域0;
r1(config)#router ospf 1
r1(config-router)#area 1 range 2.2.2.0 255.25.255.0 not-advertise
域外路由修改单个条目的cost
r1(config-router)#summary-address 4.4.4.0 255.255.255.0 ?
not-advertise Do not advertise or translate
传递过程中还可以修改标记,标记位用于做其他的策略
r1(config-router)#summary-address 4.4.4.0 255.255.255.0 tag ?
<0-4294967295> 32-bit tag value
r1(config)#interface e0/0
r1(config-if)#ip ospf cost 50
所有从该接口进入的路由条目,在之前的度量上叠加50;
- LSDB的保护特性--12.4以上的IOS支持
设备缓存较少--能保存的路由条目数量较少,建议该设备为末梢区域设备
若路由依然很多,超过本地缓存极限,将导致设备故障
r1(config)#router ospf 1
r1(config-router)#max-lsa 1000 100
最大LSA条目数 阀值
默认阀值为75%,此处修改为100%
到达阀值断开邻居关系
r1(config-router)#max-lsa 1000 100 ignore-time 5 断开邻居5分钟
r1(config-router)#max-lsa 100 warning-only 75 LAS到达100条的75%进行警告
注:1类LSA一台设备发出1条LSA包含所有信息;3/5类LSA一个信息为一条;
- 收敛时间
修改接口hellotime,dead time自动4倍关系匹配;邻居间hello 和dead time必须完全一致;
r3(config)#interface tunnel 0
r3(config-if)#ip ospf hello-interval 10
r3(config-if)#ip ospf dead-interval 40
注:OSPF默认就是10 40
- 缺省路由---3类缺省 5类缺省 7类缺省
3类缺省:必须由特殊区域自动产生---末梢区域、完全末梢、完全NSSA
5类缺省:从域外重发布进入到OSPF域;进行该缺省发布的设备,其路由表中必须先存在缺省路由--该路由的产生方式不关注
r3(config)#router ospf 1
r3(config-router)#default-information originate
默认进入的缺省路由,为外部类型2;
类型1---起始度量为1 ----叠加内部度量值
类型2---起始度量为2-----不叠加内部度量值
r9(config-router)#default-information originate metric-type 1 修改类型
7类缺省:正常仅在普通的NSSA环境配置;因为普通NSSA不自动产生缺省路由;
故需要在区域0和NSSA区域间的ABR上,向NSSA区域发布一条缺省路由;
r3(config)#router ospf 1
r3(config-router)#area 1 nssa default-information-originate
默认为N2-类型2;类型1叠加内部度量;类型2 不叠加;
r3(config-router)#area 1 nssa default-information-originate metric-type 1 修改类型
【2】附录E --- link-id相同的问题
若一台ABR将两条3类LSA导入其他区域;同时这两条LSA的link-id相同;
假设:短掩码网段先进入,link-id正常显示;长掩码进入时link-id加反掩码
20.1.0.0/16--link-id 20.1.0.0
20.1.0.0/24--link-id 20.1.0.255
若长掩码先进入,在短掩码进入时,长掩码的信息被刷新为反掩码;
【3】OSPF选路规则
- AD(管理距离)无关的一种情况:
r2(config)#router ospf 1
r2(config-router)#distance 109 1.1.1.1 0.0.0.0
本地从RID为1.1.1.1的设备处学习到路由条目,管理距离修改109;
一台路由器从两个OSPF邻居处学习到了两条相同的路由时,仅比较度量值,不规则管理距离;因为仅针对一台邻居进行管理距离修改的结果是要么两台都被改,要么修改失败;-关注IOS版本---有时修改RID大路由器管理距离生效,有时需要修改RID小的设备;
- AD(管理距离)无关的第二种情况
O IA 与 O IA路由相遇,到达相同目标的两条3类路由
1)若这两条路由均通过非骨干传递,仅关注cost值,不关注管理距离;
2)若一条通过骨干区域传递,另一条同过非骨干区域传递--非骨干传递的路由无效
- OE 与OE
两条均为OE2、N2,起始度量相同; 关注沿途的累加度量 (OE2路由在表中度量默认不显示内部度量)
两条均为OE2、N2,起始度量不同;优先起始度量小的路径;
注:以上设计是便于管理员快速干涉选路;
OE1路由仅比较总度量(起始度量+沿途累加)
1)拓扑优于路由
2)内部优于外部
3)类型1优于类型2
4)E1与N1相遇,或E2与N2相遇,先比总度量(起始+沿途)小优;度量一致5类优于7类
【4】FA-转发地址
正常OSPF区域收到的5类LSA不存在FA值;
产生FA的条件:
1、5类LSA ---- 假设R9为ASBR,S0/0口工作的OSPF中,S0/1口工作在非ospf协议不同进程中;且S0/1也宣告在ospf协议中,同时该接口的工作方式为广播型;
将在5类LSA中出现FA地址,地址为R9连接R10网段中R10的接口ip;R9与R10间运行的是EIGRP协议
意义在于让R9前端的OSPF设备,清除的知道域外的下一跳拓扑结构,更好的避免环路;
2、7类LSA---必然出现FA地址
假设R9为ASBR,S0/0口工作的OSPF中,S0/1口工作在非ospf协议不同进程中;
S0/1未运行OSPF--FA地址为R9上最后宣告的环回地址(个别IOS也可能是最大环回接口ip地址),若R9没有环回接口;FA地址为R9上最后宣告的物理接口地址(个别IOS也可能是最大的物理接口ip地址)
R9的S0/1也工作OSPF协议中,S0/1接口工作方式为广播,那么FA地址为F10接口ip;
S0/1的工作方式为点到点,那么FA地址为R9的s0/1口ip
切记:在FA地址出现后,4类LSA无效;人为过滤掉4类LSA,依然可达域外;
当4类LSA存在,却人为过滤了到达FA地址的路由,那么将无法访问域外;
一旦出现FA地址,所有的选路计算均基于FA地址进行;
针对存在FA的5/7类路由,4类LSA无意义,仅递归到FA地址;若FA地址被策略过滤导致不可达,那么若有域外路由将不可达;路由表中的度量是到FA地址的度量;
【5】NP位+E位
P位被加密,故抓包时看不见P位;
正常NSSA区域,N=1 E=0 标识该区域转发7类LSA,不转发5类
非NSSA区域,E=1 N=0 标识可以转发5类,不能转发7类
P位为1,标识该区域将执行7类转5类; P为0,不能7转5;
1)若区域1为NSSA区域,区域2为非NSSA区域;那么此时的区域1,P位=0不能进行7转5;故骨干区域只能收到从区域2来的外部路由;
2)若区域1和区域2均为NSSA区域;那么ABR的RID大区域进行7转5,另一个区域不转,
故骨干区域只能收到从区域2来的外部路由;
【6】SPF算法
- 在同一个区域每台路由具有一致的LSDB
- 每台路由器以自己为根计算到达每个目标的最短路径(最小cost值)
- 必须区域划分--
优势-1)域间汇总减少路由条目数量
- 汇总路由是在所有明细路由均消失后才删除,网络更稳定
- 区域划分后不同类别的LSA传播范围不同,控制更新量
总结:观看OSPF防环文档
Spf算法过程--基于本地LSDB生成--生成有向图--基于有向图来进行最短路径树生成
最短路径树--然后用树中每台设备的末梢网络信息补充路由表,完成收敛