OSPF区域划分(结构化部署)
OSPF域(Domain):将一系列的OSPF路由器组成的网络称为OSPF域
OSPF是可以支持单区域也可以支持多区域的,有一个非常好的功能就是它可以把一个网络划分为各个区域,多区域划分中就包括骨干区域area 0和其它普通区域。要注意的是,在OSPF的多区域网络中,所有的区域之间的通信都需要通过骨干区域。假设没有area 0,不同区域之间是不能够传递信息的,因为骨干区域就是用于汇总每个区域的路由信息然后再发送出去的,各区域只有得到了这些汇总信息才能进行通信。
OSPF多区域划分要求:
1.OSPF要求域中所有的非骨干区域(区域ID不为0的区域)都必须与area0相连
2.骨干区域不能被分割
OSPF区域结构部署规则的必要性:
假定没有“所有非骨干区域都必须与骨干区域相连”这条规则(远离骨干的非骨干)
定义了ABR(区域边界路由器)设备:确保所有人遵循上述规则
1.至少连接两个区域
2.连接的区域中至少有一个是area0
3.在area0中至少有一个活跃的邻居
ABR作用:传递区域间路由
为了避免区域间的路由形成环路,非骨干区域之间不允许直接相互发布区域间路由
假定没有“骨干区域不能被分割”这条规则
OSPF规定:从非骨干区域收到的路由信息,ABR能接收但不会使用这条路由信息(OSPF水平分割原则)
总结:
OSPF有如下规则
1.对于伪ABR设备不允许转发区域间路由信息
2.对于真实ABR而言
能够将自己直连的非骨干区域的区域内路由信息传递给骨干区域
能够将自己直连的骨干区域的区域内路由信息传递给非骨干区域
能够将自己从骨干区域学习到的区域间路由信息传递给非骨干区域
OSPF路由器角色
内部路由器(IR):所有接口都接入同一个区域的路由器
区域边界路由器(ABR)
骨干路由器(BR):接入area0的路由器,包括ABR但不包括ASBR
ASBR(AS边界路由器):工作在OSPF自治系统边界的路由器;并不是同时运行多种路由协议的OSPF路由器就一定是ASBR,ASBR一定是将外部路由引入到OSPF域的设备
OSPF数据包
Hello:
用来周期发现、建立、保活OSPF邻居关系,通过组播224.0.0.5发送
10s发送一次来确认邻居的存在
hold-time(四倍的hello时间)
router-id(RID):全域唯一,标识路由表身份;用IP地址形式表示(32bit,点分十进制);配置方法:手工配置、自动配置(默认最大环回IP地址,若没有最大环回则选择最大物理IP地址)
注意:启动OSPF进程前,必须要有接口IP地址,若存在IP地址,则在第一次启动OSPF进程时,会选取第一个配置的IP地址为RID。但是,若删除第一个配置的IP地址后,则恢复为上述规则。在华为设备中,若没有接口IP地址,则OSPF启动后,RID为0.0.0.0;在思科设备中,若没有接口IP地址,则OSPF启动失败
无论采用手工配置还是自动配置,一旦OSPF进程启动,RID被确定,则无法改变,必须重启进程才能生效
DBD:
数据库描述报文
该报文携带的是路径信息的摘要(为了减少更新量,并不会直接给邻居发送TOPO信息,而是将TOPO信息的目录发送给邻居)
LSR:
链路状态请求报文
基于未知的LSA(链路状态通告)信息进行查询
LSU:
LSACK:
链路状态确认报文
OSPF七种状态机
down:关闭状态(一旦启动OSPF协议,则发出hello包并进入下一个状态)
init:初始化状态(收到的hello包中存在自己的RID值,则进入下一个状态)
2-way:双向通讯状态(邻居关系建立的标志)
条件匹配:匹配成功则进入下一个阶段,不成功则停留在2-way
exstart:预启动状态(使用未携带信息的DBD包进行主从关系选举,RID大的为主)
exchange:准交换状态(使用携带目录信息的DBD报文进行目录共享)
loading:加载状态(邻居间使用LSR/LSU/LSACK三种报文来获取完整的TOPO信息)
full:转发状态(修成正果)标志邻接关系的建立
OSPF的工作过程
1)在启动宣告配置之后,OSPF路由器会使用组播224.0.0.5进行OSPF hello包的收发;若接收到的hello包中存在本地的route-id,则建立邻居关系,生成邻居表;之后基于表中所有的邻居进行条件的匹配,匹配失败则将维持邻居关系,仅hello包周期保活即可;
(2)匹配成功者之间可以建立邻接关系;邻居间使用DD数据包进行数据库目录的比对;之后使用LSR查询目录中未知的LSA信息,对端使用LSU来携带传递LSA,最终需要LSAck进行接收确认;当本地收集到区域内所有设备的LSA信息后,生成LSDB—链路状态数据库表;
(3)本地基于LSDB启用SPF算法,计算到达所有未知网段的最短路径,然后将其加载到路由表内
条件匹配
设备接口名称
DR:指定路由器
BDR:备份指定路由器
DROTHER:其他路由器
OSPF称为邻接关系的条件
点到点(不用选举DR和BDR)--直接开始建立邻接关系(加快收敛的方法)
MA网络(在一个网络中,不限制节点数(会选举DR和BDR))
选举规则
接口优先级:0-255 优先级越大,为DR,次一级为BDR(默认为1)
RID 越大越优先
选举范围:一个广播进行一次条件匹配
角色之间的关系
DR和DROTHER:邻接关系
DR和BDR:邻接关系
BDR和DROTHER:邻接关系
DROTHER和DROTHER:邻接关系
非抢占性选举模式
选举过程
1.DR、BDR的选举是通过hello报文来实现的,选举过程发生在2-way状态之后
2.路由器将自己的接口的DR优先级填写hello报文中的“DR优先级”字段
3.在接口视图下可以修改DR优先级(若DR优先级修改为0,则代表不具备DR和BDR的选举资格)
4.当路由器接口激活OSPF后,首先检查网络上是否已经存在DR设备,如果存在则接收DR角色,若不存在,则拥有最高DR优先级的设备称为DR(RID)
5.BDR的选举过程和DR选举过程相同,但是是在DR选举成功之后
DR设备使用组播224.0.0.5向该MA网络发送信息
而DR、BDR使用224.0.0.6监听该MA网络的消息
DROTHER使用224.0.0.6发送自己的LSU报文
NBMA网络类型中存在
在NBMA网络类型下,如果需要启动OSPF协议,需要手工指定邻居,否则不会发送hello报文
若不发送hello报文,则邻居状态处于attempt状态
启动OSPF配置完成后,OSPF将向本地所有运行OSPF协议的接口组播224.0.0.5发送hello报文,hello报文中携带有本地的RID以及本地已知的邻居RID,之后生成邻居表
邻居关系建立后,进行条件匹配,匹配失败则停留在邻居关系,仅hello报文保活
匹配成功的邻居将开始建立邻接关系
首先使用未携带数据的DBD报文来进行主从关系选举,之后使用携带数据段的DBD报文来共享数据库目录,之后本地使用LSR/LSU/LSACK报文来获取未知的LSA信息
完成本地数据库的建立(生成数据库表)
之后本地基于数据库生成有向图和最短路径树,之后计算本地到达拓扑中所有未知网段的最短路径,并将其添加到路由表中
收敛完成,hello报文周期保活,每30min进行一次周期更新
结构突变
1.新增网段:直接在邻接关系的接口使用LSU进行更新,将内容告诉于邻居,并需要邻居的ack确认
2.断开网段:直接在邻接关系的接口使用LSU进行更新,将内容告诉于邻居,并需要邻居的ack确认
3.无法沟通:dead time(四倍的hello时间)
OSPF基础配置
1.启动OSPF进程
2.创建
3.宣告
华为体系中,优先级为10;
OSPF的cost --参考带宽(100Mbps)/实际带宽
一条OSPF路径的cost等于从目的地到本地路由器沿途的所有设备的入接口cost值的总和
练习:
分析:
1 .划分IP段
2. ospf划分区域,进行手工配置
3.使用环回地址,使用缺省路由对R5接口不能宣告
配置:
R1
[r1]interface g0/0/0
[r1-GigabitEthernet0/0/0]ip address 192.168.1.1 27
[r1]interface LoopBack 0
[r1-LoopBack0]ip address 192.168.1.161 32
[r1]ospf 1 router-id 1.1.1.1
[r1-ospf-1]area 0
[r1-ospf-1-area-0.0.0.0]network 192.168.1.1 0.0.0.0
[r1]interface G0/0/0
[r1-GigabitEthernet0/0/0]ospf dr-priority 10
R2
[R2]interface G0/0/0
[R2-GigabitEthernet0/0/0]IP address 192.168.1.33 27
[R2]interface LoopBack 0
[R2-LoopBack0]ip address 192.168.1.193 32
[R2]ospf 1 router-id 2.2.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 192.168.1.33 0.0.0.0
[R2]interface g0/0/0
[R2-GigabitEthernet0/0/0]ospf dr-priority 9
R3
[r3]interface g0/0/0
[r3-GigabitEthernet0/0/0]ip address 192.168.1.65 27
[r3]interface g0/0/1
[r3-GigabitEthernet0/0/1]ip address 192.168.1.97 27
[r3]ospf 1 router-id 3.3.3.3
[r3-ospf-1]area 0
[r3-ospf-1-area-0.0.0.0]network 192.168.1.65 0.0.0.0
[r3]ospf 1 router-id 3.3.3.3
[r3-ospf-1]area 1
[r3-ospf-1-area-0.0.0.1]network 192.168.1.97 0.0.0.0
R4
[r4]interface g0/0/0
[r4-GigabitEthernet0/0/0]ip address 192.168.1.98 27
[r4]interface g0/0/1
[r4-GigabitEthernet0/0/1]ip address 192.168.1.129 27
[r4]ospf 1 router-id 4.4.4.4
[r4-ospf-1]area 1
[r4-ospf-1-area-0.0.0.1]network 192.168.1.98 0.0.0.0
[r4-ospf-1-area-0.0.0.1]network 192.168.1.129 0.0.0.0
R5
[r5]interface g0/0/0
[r5-GigabitEthernet0/0/0]ip address 192.168.1.130 27
[r5]interface LoopBack 0
[r5-LoopBack0]ip address 192.168.1.225 32
[r5]ospf 1 router-id 5.5.5.5
[r5-ospf-1]area 1
[r5-ospf-1-area-0.0.0.1]network 192.168.1.130 0.0.0.0
[r5-ospf-1]default-route-advertise
OSPF报文格式
OSPF报文头部
版本(Version)
对于OSPF v2而言,该字段值恒为2
类型(Type)
描述OSPF数据包的类型
HELLO--1
DBD--2
LSR--3
LSU--4
LSACK--5
报文长度(packet length)
整个OSPF报文的长度:单位字节
路由器ID
发出该报文的路由器的RID值
区域ID
发出该报文的接口所属于的区域的ID值
校验和
验证OSPF整体数据报文的有效性
验证类型
指示该报文使用的认证类型
不认证:0;简单认证:1;MD5认证:2
认证数据
用于报文认证所对比的内容
若认证类型为不认证,则该字段全部用0填充
OSPF认证功能存在于所有的数据交互过程中,对于任何一种数据报文,都需要进行认证
在认证的过程中,需要对比两个字段,首先对比认证类型字段,若相同,才会对比认证数据字段
Hello包
网络掩码(network mask)
该字段填充的是发送该报文的网络掩码
两台OSPF路由器如果通过以太网接口直连,那么双方的直连接口必须配置相同的网络掩码(点到点网络不需要对比该参数)
注意:OSPF建立邻居关系需要对比子网掩码信息是华为独有,别的厂商没有这个要求
hello间隔
两台直连路由器需要确保直连接口的hello时间间隔相同,否则邻居关系无法建立
缺省情况下,P2P和BMA类型下为10s;P2MP和NBMA为30s
可选项(options)
该字段一共8bit,每个比特位都用于指示该路由器的某个特点的OSPF特性
而OSPF邻接关系建立过程中,该字段的某个比特位将会被检查,可能影响OSPF邻居关系的建立(特殊区域的标记)
路由器优先级
路由器失效时间
两台直连路由器要建立OSPF邻居关系,需要保证双方借楼的dead time时间相同,否则邻居关系无法正常建立
缺省时间为hello的4倍
指定路由器
网络中DR设备的接口IP地址
若没有DR或DR没有选举出来,则填充0.0.0.0
备份指定路由器
网络BDR设备的接口IP地址
若没有BDR或未选举结束,则填充0.0.0.0
邻居
在直连链路上发现的有效邻居,此处填充的是邻居的RID值,如果发现多个邻居,则包含多个邻居字段
所有224.0.0.x格式的组播地址称为本地链路组播,目的IP地址是本地链路组播的数据包中TTL值被设定为1。所有的本地链路组播都会存在对应的组播MAC地址,01-00-5e-后24位(组播IP地址的后24位)
限制邻居关系建立
子网掩码
在R2上修改网络掩码后,R2会与R3的状态立即修改为down状态。而R3会在40s死亡时间之后进行状态切换。
原因在于,R2在修改IP地址的掩码后,会认为之前的连接中断,需要重新建立连接,所以重置状态机。而R3则认为是无法沟通,故会等待死亡时间超过后才切换状态。