OSPF:开放式最短路径优先协议
-
无类别链路状态协议:跨层封装,协议号89;组播更新:224.0.0.5(all ospf)224.0.0.6(DR/DBR)存在触发更新和周期更新(30min);使用SPF算法;存在区域概念;
-
工作过程
-
- 激活协议后向所有的邻居发送hello包,建立邻居关系,生成邻居表之后和条件满足的邻居间建立邻接关系,交互LSA(链路状态通告);生成LSDB(链路状态数据库);之后基于数据库使用SPF算法计算达到所有未知目标的最短路径加到路由表中;注:ospf收敛的过程被称为LSA洪范或LSDB同步;
-
OSPF的状态机
-
- 邻居关系
— Down:一旦发出hello包将进入下一个状态
— Init:收到hello包中存在本地RID进入下一状态
— 2-way:邻居关系建立
- 邻居关系
-
- 匹配条件
— 点到点网络直接进入下一个阶段
— MA网络先选DR/BDR;非DR/BDR间不能进入下一状态
- 匹配条件
-
- 邻接关系
— Exstart:使用hello的DBD包进行主从关系选举,主可以先行进入exchange状态
— EXchange:使用DBD包进行拓扑目录的交互,需要ACK确认
— Loading:使用LSR/LSU/LSACK获取未知拓扑信息;
— Full:转发状态,邻接关系建立完成
- 邻接关系
-
OSPF的数据包
-
- 数据包结构
- 数据包结构
-
- 数据包类型
- 数据包类型
-
- Hello :用于邻居的发现,邻居关系的建立:邻居和邻接关系的保活 Hello time 10s或30s dead time 40s或120s
邻居间hello包中必须完全一致的参数:hello和dead时间,区域ID,认证字段,末梢区域标示
- Hello :用于邻居的发现,邻居关系的建立:邻居和邻接关系的保活 Hello time 10s或30s dead time 40s或120s
-
- DBD 数据库描述表:1,类hello包,不携带拓扑信息 2,拓扑目录在exstart状态时,两端MTU值不一致,将卡在该状态;
— I:为1表示本DBD包为本地第一个DBD
— M:为0表示本地为最后一个DBD
— MS:为1表示本地为主
在exstart状态时,使用隐形确认:使用主的序列号来确认
- DBD 数据库描述表:1,类hello包,不携带拓扑信息 2,拓扑目录在exstart状态时,两端MTU值不一致,将卡在该状态;
-
- LSR 链路状态请求
-
- LSU(LSA)链路状态更新
-
- LSACK 链路状态确认
-
配置
-
r1(config)#router ospf 1 启动时需要配置进程号,仅具有本地意义;
r1(config-router)#router-id 1.1.1.1 建议RID;手工—环回最大地址—接口最大地址
宣告:1、激活 2、路由 3、区域划分
r2(config-router)#network 2.2.2.2 0.0.0.0 a 0
r2(config-router)#network 23.1.1.1 0.0.0.0 a 1 -
区域划分的规则:
-
- 星型结构
ABR–区域边界路由器
- 星型结构
-
当启动完成后,邻居间发生hello包建立邻居关系,生成==邻居表==
r2#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
1.1.1.1 0 FULL/ - 00:00:34 12.1.1.1 Serial1/0
3.3.3.3 0 FULL/ - 00:00:30 23.1.1.2 Serial1/1
- 邻居关系建立后,若条件匹配将使用DBD/LSR/LSU/LSack来交互学习整个网络的拓扑和路由信息;生成LSDB(数据库表)–所有LSA的集合
r2#show ip ospf database
-
当数据库表同步完成后,路由器将使用数据库基于SPF算法计算到达所有未知目标的最短路径,然后将其加载到路由表中:
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 其他非ospf协议或不同的进程产生的路由,然后通过ASBR重发布进入
O N1/2其他非ospf协议或不同的进程产生的路由,然后通过ASBR重发布进入;但本地所在区域为NSSA区域; -
管理距离为110;度量为cost值;
Cost值=开销值=参考带宽/接口的实际带宽
默认的参看带宽为100M;
OSPF的选路规则:整段路径所有链路cost值之和最小为最佳路径;支持等开销负载均衡,默认4条,最大6条,IOS版本12.4以上16条; -
注:当接口实际带宽大于参考带宽时,cost值为1;故可能导致选路不佳;建议修改参考带宽;
r1(config)#router ospf 1
r1(config-router)#auto-cost reference-bandwidth ?
<1-4294967> The reference bandwidth in terms of Mbits per second 全网一致
成为邻接关系的条件
- 网络类型:
1.点到点
2.BMA
3.NBMA帧中继 mgre - 在点到点网络中直接建立邻接关系,在MA网络进行DR/BDR选举(40s);DR/BDR和其他设备均为邻接关系,非DR·BDR间为邻居关系;
- 选举的规则:
- 比较接口优先级;点到点网络优先级级默认为0(不参选):MA网络优先级默认为1;范围0-255, 大优;
- 若优先级均相同,对比RID;值最大为DR,此大为BDR;
- 非抢占行
- 修改DR优先级最大,BDR次大
r1(config)#interface fastEthernet 0/0
r1(config-if)#ip ospf priority 3
注:OSPF的选举是非抢占的,故必须重启所有设备的进程;
Clear ip ospf process
- 修改BR优先级最大,BDR次大,其他设备优先级为0:无需重启进程
r1#show ip ospf interface loopback 0
r1#show ip ospf interface s1/1
r1#show ip ospf interface fastEthernet 0/0
接口类型: OSPF的工作方式
Loopback LOOPBACK 无hello包,32位主机路由发送
点到点(HDLC/PPP) POINT_TO_POINT hello 10s、dead 40s;不选DR,自动建邻
BMA(以太网) BROADCAST hello 10s、dead 40s;选DR,自动建邻
NBMA(帧中继)
NON_BROADCAST
Hello 30, Dead 120;非自动建邻(不使用组播广播发送hello
包);只能使用单播建立邻居关系;
r1(config)#router ospf 1
r1(config-router)#neighbor 123.1.1.2
r1(config-router)#neighbor 123.1.1.3
单播建立邻居关系后,发现自动进行DR/BDR选举,因为是MA网络;注:在非全连网状结构拓扑中,将可能由于DR位置问题,导致无法正常收敛
解决方法:
- 修改中心点为DR
- 使用子接口
- 修改工作方式
r2(config-router)#int s1/2
r2(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 networ
r2(config-if)#ip ospf network point-to-point
NON_BROADCAST
Hello 30, Dead 120;非自动建邻(不使用组播
广播发送hello包);只能使用单播建立邻居关系;
总结
- 在非NBMA网络中,不建议修改工作方式;
- 在NBMA网络中,若拓扑结构为全连网络,那么可以单播见邻即可;
- 若非全连网状,那么可以将no-broadcast修改为 point-to-point 或者point-to-multipoint
- point-to-point 工作方式:默认存在于帧中继的点到点子接口;可以修改本地工作方式,但若对端仅存在一条PVC,那么建议对端修改;若对端非一条PVC,那么修改本地和对端均为 point-to-multipoint ;
- point-to-multipoint 工作方式:hello 30s dead 120s;自动建邻,不选DR/BDR;计算路径时已传递过来LSA的邻居为下一跳,自动生成达到该网段所有直连子接口的32位主机路由;
解决OSPF不规则区域问题
- 远离骨干的非骨干区域
- 不连续骨干区域
隧道tunnel
R3(config)#interface tunnel 0 创建tunnel
R3(config-if)#ip address 172.16.1.2 255.255.255.0 给tunnel配置地址
R3(config-if)#tunnel source e0/1 隧道源
R3(config-if)#tunnel destination 12.1.1.1 隧道目标 (接口地址是真实地址,不是tunnel地址)
R3(config-if)#ip ospf 100 aear 0 宣告
- 虚链路—OSPF自带 在两台ABR上配置,使未连接骨干的ABR得知骨干的存在,之后将域间路由进行交互;
取消周期的更新和邻居保活;
优点:选路佳、占用中间区域资源少;
缺点:不可靠
r2(config)#router ospf 1
r2(config-router)#area 1 virtual-link 4.4.4.4
穿越区域 对端ABR的RID
- 多进程双向重发布
不同的进程拥有不同的RID和数据库,不同进程间的数据库是不共享的;且计算所得路径同时放置于路由表中;若多个进程同时工作于一个接口,那么仅最先工作进程生效;
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
OSPF的数据库表
- OSPF使用LSA进行更新; LSA(LSU)—链路状态通告
数据库表就是所有LSA的集合—LSDB–链路状态数据库
OSPF协议存在12种不同类别的LSA,每种LSA所携带的信息是不一样的;
查看LSA的明细:
r1#show ip ospf database router 1.1.1.1
类别名 link-ld
无论何种LSA,均携带以下参数
LS age: 183 老化时间,正常1800周期归0,触发马上归0;最大老化3609;
Options: (No TOS-capability, DC)
LS Type: Router Links 类别,此处为1类;
Link State ID: 1.1.1.1 在目录中的番号
Advertising Router: 1.1.1.1 通告者的RID
LS Seq Number: 80000003 序列号,棒棒糖序列号
Checksum: 0x67F8
Length: 60
Number of Links: 3
类别 传播范围 通告者 携带信息
LSA1 router 本区域 本区域内所有路由器 本地直连拓扑
LSA2 network 本区域 DR MA部分的拓扑
LSA3 Summary 整个OSPF域 ABR O IA域间路由
LSA4 asbr-summary 除ASBR所在区域 ABR ASBR的位置
ASBR所在区域,通过1类告知
LSA5 External 整个OSPF域 ASBR OE 域外路由
LSA7 nssa-external NSSA区域 ASBR ON 域外路由
类别 link id(番号) 通告者
LSA1 router 通告者的RID 本区域内所有路由器
LSA2 network DR的接口ip地址 DR
LSA3 Summary O IA路由目标地址 ABR,在经过下一个ABR时修改
LSA4 asbr-summary ASBR的RID ABR,在经过下一个ABR时修改
LSA5 External OE 路由目标地址 ASBR
LSA7 nssa-external ON路由目标地址 ASBR
OSPF的优化
目的:减少LSA的更新
- 特殊区域–优化非骨干区域
条件:不能为骨干区域,不能存在虚链路
- 不能存在ASBR
- 末梢区域–拒绝4.5类LSA;产生一条3类缺省
r3(config)#router ospf 1
r3(config-router)#area 1 stub 该区域内所有设备均需配置
- 完全末梢区域–在末梢区域的基础上进一步拒绝3类的LSA,仅保留一条3类的缺省先将该区域配置为末梢区域,然后仅需要在ABR上定义为完全末梢即可
r3(config)#router ospf 1
r3(config-router)#area 1 stub no-summary
- 存在ASBR
- NSSA–拒绝4.5类的LSA,不自动产生3类缺省;5类在NSSA区域内被转换为7类转发;离开该区域后还原为5类
r1(config)#router ospf 1
r1(config-router)#area 2 nssa
- 完全的NSSA----在NSSA的基础上,进一步拒绝3/4/5类LSA,5类转7类;自动产生缺省指向ABR;先将该区域配置为NSSA,然后仅需要在ABR上定义为完全即可
r1(config)#router ospf 1
r1(config-router)#area 2 nssa no-summary
- 汇总 --优化骨干区域
- 域间路由汇总–在ABR上操作
r3(config)#router ospf 1
r3(config-router)#area 1 range 4.4.4.0 255.255.254.0
通过该区域内的1/2类LSA计算所得路由才可以汇总
- 域外路由汇总—在ASBR上操作
r5(config)#router ospf 1
r5(config-router)#summary-address 99.1.0.0 255.255.252.0 域外路由可以为5、7类
OSPF的扩展配置
- 认证
- 接口认证–在邻居间相连的接口上配置
(1)接口明文
r1(config)#int s1/1
r1(config-if)#ip ospf authentication
先开启明文认证需求,开启后本地hello包中认证类型字段已经变化,邻居间必须一致
r1(config-if)#ip ospf authentication-key cisco 配置明文密码
(2)接口密文
r2(config)#int s1/1
r2(config-if)#ip ospf authentication message-digest
r2(config-if)#ip ospf message-digest-key 1 md5 cisco
邻居间必须完全一致
- 区域认证
例:在R1上开启关于0区域的明文或密文认证;之后实际是将R1上工作于区域0的接口修改认证类型字段为明文或密文;之后的密码还需要到各个接口上逐一配置;
r3(config)#router ospf 1
r3(config-router)#area 0 authentication
r3(config-router)#area 0 authentication message-digest
【3】虚链路认证
r3(config)#router ospf 1
r3(config-router)#area 1 virtual-link 4.4.4.4 authentication 明文
r3(config-router)#area 1 virtual-link 4.4.4.4 authentication-key cisco
r3(config-router)#area 1 virtual-link 4.4.4.4 authentication message-digest 密文
r3(config-router)#area 1 virtual-link 4.4.4.4 message-digest-key 1 md5 cisco
- 加快协议收敛速度 10s 40s 30s 120s 邻居间必须一致
r1(config)#int s1/1
r1(config-if)#ip ospf hello-interval 5
修改本端的hello time,本端dead time 自动4倍关系匹配
r1(config-if)#ip ospf dead-interval 20 修改本端的dead time,本端hello time不变化的;
- 被动接口—用于同用户相连的接口,只接收不发送路由协议信息
r2(config)#router ospf 1
r2(config-router)#passive-interface fastEthernet 0/0
- 缺省路由
- 3类的缺省—由特殊区域自动产生 末梢、完全末梢、完全NSSA
5类的缺省----在一台路由器上,必须已经拥有缺省条目的前提下,进行重发布
r2(config)#router ospf 1
r2(config-router)#default-information originate
若一台设备上不存在缺省路由,那么也可以强制向网内重发布缺省
r2(config)#router ospf 1
r2(config-router)#default-information originate always
- 注:进入的条目为类型2;
类型1,在内网传递时携带内部的度量值
类型2,在内网传递时不携带内部的度量值
r2(config)#router ospf 1
r2(config-router)#default-information originate metric-type 1
r2(config-router)#default-information originate always metric-type 1
- 7类的缺省—边界路由器所在位置处于NSSA区域内,且该路由器上已经拥有缺省路由;
r5(config)#router ospf 1
r5(config-router)#area 2 nssa default-information-originate 默认进入为类型2;
r5(config-router)#area 2 nssa default-information-originate metric-type 1 修改为类型1