OSPF:开放式最短路径优先协议
无类别的链路状态IGP协议;跨层封装协议,协议号89;组播更新:224.0.0.5/6
224.0.0.5--OSPF协议正常使用地址,224.0.0.6--OSPF协议中的DR/BDR专用地址;
基于拓扑选路,更新量很大---需要结构化的部署--区域划分、地址规划
触发更新,30min周期更新---存在hello和ACK机制,周期的意义在于预防更新量大时部分信息的同步失败
rip周期更新:因为没有hello保活,路由条目传递无ACK确认
ospf周期更新:防止可能由于更新量大导致网络拥塞造成部分路由信息在重传后依然没有被收到
eigrp无周期更新:因为有hello保活、ACK确认机制且更新量不像ospf那样大
一、数据包:
OSPF的数据包均被跨层封装到IP报头;协议号为89
数据包类型存在5种:
- Hello:用于邻居(邻接)的发现、关系的建立及保活 --- 存在邻居和邻接两种关系
- DBD:数据库描述包
- LSR:链路状态请求
- LSU:链路状态更新
- LSack:链路状态确认
- OSPF的状态机---两台OSPF设备间的关系建立步骤
Down:一旦本地发出ospf 的hello包,那么进入下一状态
Init初始化:若接收到的hello包中存在本地的RID,进入下一状态
2way双向通信:邻居关系建立的标志
条件匹配:点到点网络直接进入下一状态 MA网络将进行DR/BDR选举(40s),所有的非DR/BDR间不能进入下一状态;
Exstart预启动:使用类似hello包的DBD来进行主从关系选举,RID大为主,优先进入下一状态
选举出的主将优先进入下个状态发送链路摘要信息,若同时发送则有可能导致网络拥塞;
DBD是进入邻接关系的标志,通常需要进入邻接关系的两个邻居都会先进入exstart状态进行主从选举,主从关系选举使用DBD包;
Exchange准交换:使用真正的DBD包来进行数据库目录的共享;需要ACK确认;
Loading加载:使用LSR/LSU/LSack来获取未知的LSA信息;
Full转发:邻接关系建立的标志
- OSPF的工作过程:
启动配置完成后,邻居间使用hello包建立邻居关系,生成邻居表;
邻居关系建立后(two-way),邻居进行条件的匹配,匹配失败将一直为邻居关系,仅hello包周期保活即可;
条件匹配成功可以建立为邻接关系,邻接关系间需要先使用DBD来交互拓扑的目录;
然后在查看完其他邻居的DBD后,使用LSR包来询问本地不拥有的LSA信息;对端使用LSU包来携带回复LSA;本地需要可靠性保障,使用LSack确认;
当收集到所有的LSA信息后,本地生成LSDB---链路状态数据库---数据库表;
再然后本地基于LSDB计算本地到达所有未知网段的最短路径,将其加载到路由表中;收敛完成;
结构突变:
- 新增 直连新增网段的设备使用DBD来告知本地所有的邻接,之后邻接通过
LSR/LSU/LSack来确定
2. 断开 直连断开网段的设备使用DBD来告知本地所有的邻接,之后邻接通过
LSR/LSU/LSack来确定
3. 无法沟通 dead time到时时,断开邻居关系,能否重建,看是否可以进行所有的状态机;
LSA:链路状态通告
在不同条件下产生的不同类别的拓扑或路由信息;LSU包来携带和传递不同类别的LSA信息
LSDB:链路状态数据库----所有的LSA集合
OSPF的收敛:LSA洪泛、LSDB同步---这两个词汇都是在描述OSPF的收敛行为;
- OSPF的配置
r1(config)#router ospf 1 启动时需要定义进程号,仅具有本地意义
r1(config-router)#router-id 1.1.1.1 配置RID
RID必须全网唯一,手工配置---取环回接口上的最大数值地址----物理接口上的最大数值地址—由于路由器无任何ip导致ospf进程无法启动
宣告:**接口 传递接口的拓扑或路由 区域划分
r1(config-router)#network 1.1.1.1 0.0.0.0 area 0
必须使用反掩码匹配、区域划分
区域划分的规则:
- 星型结构---所有的非骨干(区域编号大于0)必须直连到的骨干区域(area 0)
- 必须存在ABR ---区域边界路由器,建邻的两台路由器携带的area id信息必须一致
启动配置完成后,邻居间发送hello包建立邻居关系,生成邻居表:
Hello包---邻居(邻接、毗邻)关系的发现、建立、保活
Hello time 为10s或者30s dead time为hello time的4倍
建立邻居关系时,邻居间hello包中有4个参数必须完全一致,否则无法建立关系
Hello time和dead time,区域ID,认证字段---认证类型+密码,末梢区域标记
r2#show ip ospf neighbor 查看邻居表
Neighbor ID Pri State Dead Time Address Interface
1.1.1.1 0 FULL/ - 00:00:35 12.1.1.1 Serial1/0
3.3.3.3 0 FULL/ - 00:00:36 23.1.1.2 Serial1/1
邻居的RID 优先级 状态机 倒计时 下一跳 出接口
邻居关系建立后,邻居间进行条件的匹配,匹配失败将停留为邻居关系,仅hello包周期保活;
匹配成功,将建立为邻接关系,过程中需要使用DBD/LSR/LSU/LSACK来获取未知的LSA信息,生成LSDB---数据库表:
r2#show ip ospf database 查看数据库表
关于DBD包的问题:
在exstart状态时使用的是类似hello 的DBD包;此时DBD包没有携带LSA目录信息
在exchange状态时使用的才是真正的DBD包;
- 隐性确认 --从使用主的***来对主的数据包进行确认
- DBD包的标记位:I为1标识本地发出的第一个DBD包 4
M 为1标识不是本地发出的最后一个DBD包 2
MS为1标识本地为主 1
DBD包中携带本端接口的MTU值;邻居间MTU值必须完全一致,否则无法继续建立邻接关系;
当本地的数据库表同步完成后,本地将基于最短路径选路的规则,将最优路径加载于路由表:
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标识同一区域内的路由,是本地通过1/2拓扑型LSA计算所得
O IA域间路由---其他区域的路由,由ABR共享到本区域的
O E1/2 域外路由---其他的路由协议,或者其他进程计算所得后,通过重发布技术共享所得
O N1/2 NSSA路由----从其他协议重发布过来的路由,同时本地为NSSA区域;
管理距离:110
度量值:cost值=开销值=参考带宽/接口实际带宽 ospf协议优选cost值之和最小的路径
默认参考带宽为100M;当接口带宽大于参考带宽时,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
r1(config-router)#auto-cost reference-bandwidth 1000
- OSPF从邻居关系成为邻接关系的条件
根据网络类型来决定的;
点到点 ----- OSPF的邻居之间必然建立为邻接关系
MA网络 ---- 因为OSPF的邻接间需要进行数据库的对比,所有不能像DV型协议那样去进行水平分割来避免重复更新,故OSPF将在MA网络中进行DR/BDR选举,所有的非DR/BDR间不能建立邻接关系,只能为邻居关系;
OSPF的水平分割---从A区域共享到B区域的路由,不得回到A区域
DR/BDR选举规则:先比较接口优先级,0-255大优;默认均为1,点到点接口为0,标识不参与选举;若优先级一致,只能比较RID,数值大优;
通过修改接口优先级可以干涉选举,OSPF的选举是非抢占的,所有修改优先级后还需要重启所有设备的OSPF进程
r1(config)#interface fastEthernet 0/0
r1(config-if)#ip ospf priority 3
注:若将接口优先级修改为0,那么将退出DR/BDR选举并且如果已经成为DR或BDR会自动让出DR或BDR,不需要重启进程;
但一个网段内必须存在DR;
DR/BDR发出的数据包为了和其他设备区分开,将使用专门的地址224.0.0.6;
- OSPF的接口网络类型
所谓OSPF的接口网络类型-----OSPF协议在不同接口上的不同工作方式
r1#show ip ospf interface loopback 0 查看ospf接口网络类型
Loopback0 is up, line protocol is up
Internet Address 1.1.1.1/24, Area 0
Process ID 1, Router ID 1.1.1.1, Network Type LOOPBACK, Cost: 1
Loopback interface is treated as a stub Host
网络类型 OSPF的接口网络类型(工作方式)
环回接口 LOOPBACK---无hello包;末梢主机接口,使用32位主机路由发送,无邻居
点到点--HDLC/PPP POINT_TO_POINT---hello time 10s 不选DR
BMA --以太网 BROADCAST---hello time 10s 选DR
NBMA --MGRE 默认OSPF在GRE接口以POINT_TO_POINT方式工作;
点到点的工作方式规定一个网段内只能存在一个邻接,故OSPF协议运行于MGRE时,将出现邻居关系不断翻滚;
解决方法:
1、修改接口工作方式为广播型
r1(config)#interface tunnel 0
r1(config-if)#ip ospf network broadcast
当 broadcast 与 POINT_TO_POINT工作方式相遇时,由于hello time一致,故邻居关系可以建立,但工作机制的不同将导致无法正常收敛全网;故一旦修改工作方式,同一网段所有接口将应该修改为一致;
注:在NBMA网络分支站点间虽然在同一个网段,但也可能没有邻居关系;故使用broadcast工作方式时在进行DR的选举后,可能出现认知的不同,导致无法正常全网收敛;
解决方法:将中心站点作为DR;
2、修改接口工作方式为点到多点(默认不携带的方式)
这种工作方式最早为cisco的私有方式,主要用于解决帧中继环境下运行OSPF协议, 在MGRE中意义不大;
r1(config)#interface tunnel 0
r1(config-if)#ip ospf network point-to-multipoint
Hello time 为30;不选DR;为网段内的每个节点生成一个可达的下一跳路由(假如1为中心站点,2/3为分支,在p-to-mp下中心站点1在向2发送3相关的更新时将产生去往3相关网段的路由,该路由下一跳指向1本身,并且1向3发送2相关网段的更新时也会这样);主要用于帧中继中分支站点间的互通;在MGER下会产生多余路由,不选DR可能在部分和全连网状拓扑中增加重复更新量,MGRE环境不推荐使用;
因为MGRE可以构建三种网络拓扑:
- 中心到站点(星型)---一个中心,剩余全部分支
- 部分网状 ----大于1个中心站点,当依然存在分支站点
- 全连网状 ----所有节点均为中心站点