OSPF:开放式最短路径优先
无类别链路状态路由协议;跨层封装与IP报头,协议号89
触发更新+周期更新(30min)
组播更新:224.0.0.5(通用地址) 224.0.0.6 (DR/BDR专用地址)
基于拓扑进行收敛,更新量巨大---需要结构化部署(1、进行区域划分 2、IP地址规划)
一、OSPF的5种数据包:
1.hello包 //邻居发现、建立、保活
2.DBD包 //数据库描述包---本地数据库的目录
3.LSR包 //链路状态请求包---查看邻居的DBD后,本地未知信息进行查询
4.LSU包 //链路状态更新包
5.LSACK包 //链路状态确认包
LSA:链路状态通告,具体的拓扑或者路由信息;基于LSU包来进行传递。
LSDB:链路状态数据库(所有LSA的集合)。
数据包结构:
标准报头中存在RID/区域ID和认证参数
二、OSPF的7种状态机:
(1)down:一旦本地发出OSPFhello包进入下一个状态;
(2)init初始化:接收到的hello包中,包含本地的RID,进入下一状态;
(3)2-way双向通信:邻居关系建立的标志;
条件匹配:如果是点到点网络类型直接进入下一个状态,MA网络类型进行DR/BDR选举,非DR/BDR间不得进入下一状态。
(4)exstart预启动:使用类似hello的DBD包(不包含具体内容,只含有一些标志位)进行主从关系选举,RID数值大为主,优先进入下一状态;
(5)exchange准交换:使用真实的DBD包来共享数据库目录;
(6)loading加载:使用LSR/LSU/LSack来获取未知LSA信息;
(7)full转发:临接关系建立的标志。
三、OSPF的工作过程:
启动配置完成后,本地默认组播发出hello包到所有邻居;若收到其他邻居的hello包回复,邻居关系建立,生成邻居表。
邻居关系建立后,进行条件匹配,匹配失败将维持邻居关系,仅hello包周期保活;若条件匹配成功,使用DBD来获取数据库目录,之后使用LSR/LSU/LSack来获取本地未知的LSA信息,生成完整的数据库表。
之后本地基于LSDB,启用SPF算法,生成导向图,在基于最短路径优先选择,将最佳路径加载与路由表中;
收敛完成,仅hello包周期保活,每30min进行数据库同步(比对、纠正)。
结构突变:
1.新增网段---直连新增网段设备使用DBD告知所有邻居,之后收敛;
2.断开网段---直连网段设备使用DBD告知所有邻居;
3.无法沟通---保活时间到期后,断开邻居关系,删除通过该邻居学习到的所有LSA信息
四、OSPF配置:
R1(config)#router ospf 1 //启动时需要配置进程号,仅具有本地意义;
R1(config-router)#router-id 1.1.1.1 //配置RID,首选手工配置,其次环回最大数值,最后物理接口最大
宣告:1、激活 2、传递拓扑和路由 3、区域划分
R1(config-router)#network 1.1.1.1 0.0.0.0 area 0
反掩码 区域ID
区域划分规则:
1、星型拓扑(中心到站点):需要有骨干区域0;非骨干区域区域大于0,;非骨干必须直连骨干区域。
2、ABR—区域边界路由器;所有区域间互联时必须依赖一台同时工作在两个区域的路由器。
【1】启动配置完成后,邻居间使用hello包,建立邻居关系,生成邻居表;
OSPF的hello包:hello time 10s 或 30s ;dead time 为hello time的4倍
邻居间hello包中有四个参数必须完全一致: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:34 12.1.1.1 Serial0/0
3.3.3.3 0 FULL/ - 00:00:35 23.1.1.2 Serial0/1
状态机 下一跳 出接口
【2】邻居关系建立后,进行条件的匹配,若匹配成为,使用类似于hello包的DBD包进行主从关系选举,且同时使用DBD包发送数据库目录信息,之后使用LSR/LSU/LSack来获取未知的LSA信息,完善本地的LSDB,生成数据库表;
R2#show ip ospf database //查看OSPF数据库简表
关于DBD包的几个重点:
1、DBD包关注接口的MTU值,要求邻居间MTU值必须完全一致,否则无法建立邻接关系,卡在EXSTART。
2、隐性确认---在选定主从关系后,从使用主的序列号来对主进行确认。(直接使用ack为明性确认)
【3】LSDB同步(LSA洪泛)---OSPF收敛过程完成后,OSPF协议将基于本地的数据库使用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 外部路由,是其他协议的路由,被重发布进入
O N1/2 外部路由,重发布进入的路由,其他协议或进程产生,同时本地为NSSA区域;
2、管理距离110;
3、度量:cost(开销值)=参考带宽/接口带宽
参考带宽默认为100M;默认优选整段路径cost值之和最小的;当接口带宽大于参考带宽时,将可能导致选路不佳,可修改参考带宽。
R1(config-router)#auto-cost reference-bandwidth ?
<1-4294967> The reference bandwidth in terms of Mbits per second
切记:整个网络所有设备参考带宽必须完全一致。
五、OSPF从邻居成为邻接的条件
基于网络类型,点到点网络必然成为邻接关系;因为OSPF协议需要在邻接间进行数据库比对、同步;故不能使用类似于距离矢量协议的接口水平分割,导致MA网络中间将出现大量重复更新,所以使用DR/BRD选举规则来解决---非DR/BDR不能成为邻接关系。
选举规则:优先级最大,默认为1;范围为0-255;点到点接口为0,0代表不参选;若优先级相同,使用RID比较,优选最大数值;选举时长30s。
干涉选举:
1、DR优先级最大,BDR次大;其他不改
R1(config)#int ethernet 0/0
R1(config-if)#ip ospf priority 3 //修改参选接口的优先级
注:OSPF选举非抢占的,故在修改优先级后,必须重启OSPF的进程。
2、DR优先级最大,BDR次大;其他设备修改为0,放弃选举,不需要重启OSPF进程。
切记:一个MA网段中至少存在一个DR
六、OSPF网络类型(OSPF工作方式):
OSPF在不同协议下的工作特点
R1#show ip ospf interface ethernet 0/0 //查看接口具体信息
Ethernet0/0 is up, line protocol is up
Internet Address 10.1.1.1/24, Area 0, Attached via Network Statement
Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 10
网络类型 | OSPF工作方式 |
环回 | LOOPBACK,无hello;传输32位主机路由 |
点到点(GRE/串行/PPP/HDLC) | POINT_TO_POINT ,hello time10s |
BMA(以太网) | BROADCAST,hello time 10s;选举DR/BDR |
NBMA(MGRE/帧中继) | 默认为POINT_TO_POINT |
(这里不懂网络类型的同学可以看我的另一篇网络类型的文章,这里不做解释了。)
MGRE上运行OSPF的问题:
(1)默认接口网络类型为点到点,该类型仅允许建立一个邻居关系。
解决办法:修改接口的工作方式为BROADCAST;需要注意的是这个网段所有接口必须完全一致。
(2)在非全连和星型拓扑下使用BROADCAST会导致一些问题:因为分支站点没有邻居关系,不知道对方的存在,将无法确定最合适的DR位置。
解决办法:分支站点修改优先级放弃参选DR,仅让中心站点成为DR,无BDR;或者修改所有接口的工作方式为点到多点。
点到多点工作方式:不是设备的默认工作方式,必须通过手工配置完成;不选DR,hello time为30s;缺点是不进行DR选举,故在全连网状结构中,将出现重复更新。
R1(config-if)#ip ospf network point-to-multipoint //修改OSPF的工作方式为点到多点
总结:
- 在NBMA网络结构中,部分网状和星型拓扑修改区域所在设备接口的工作方式为点到多点,同时将会出现选路不佳的情况;或者修改为BROADCAST,这时候需要让中心成为DR,不需要BDR
- 在全连网状结构中使用BROADCAST,正常进行DR选举。