OSPF(开放式最短路径优先协议)
OSPF的解释
算法:SPF算法(最短路径优先算法)把收集的信息组成一个完整的图形结构转化为树形结构,主要目的是因为树形结构不会出现环路。
组播地址:224.0.0.5/224.0.06
优先级:10/150
进程号:没有用,仅具有本地意义。区分不同进程。
OSPF版本:
-
V1 ---- 实验室版本
-
V2 ---- IP4版本
-
V3 ---- IP6版本
OSPFv2与RIPv2对比
-
相同点
-
无类别路由协议
-
均采用组播通讯
-
均支持等开销负载均衡
-
-
不同点
-
OSPF可以工作在大型网络中
-
OSPF的计时器
hello包:周期性的发现,建立和保活邻居关系。 hello包的发送周期 :hello时间 为10S(以太网)/30S 死亡时间 (dead time):4倍的hello时间。
区域划分
OSPF的结构化部署:区域划分 区域划分的主要目的:区域内部传递拓扑信息,区域之间传递路由信息。称为链路状态型协议的距离矢量特征。所以可以在大型网络中应用。
多区域提高了网络的扩展性,有利于组件更大规模的网络。
OSPF多区域划分要求
-
OSPF要求域中的所有非骨干区域(区域ID不为0的区域)都必须与骨干区域直接相连。
-
区域之间必须存在ABR设备:如果没有一条线路的两个接口A和B,A发送区域0的拓扑图,B接收到区域0的拓扑信息,但是这个接口属于区域1,所以它不接收这个信息。
-
-
骨干区域不能被分割。
可以按照星型拓扑划分区域。星型拓扑的中间区域为骨干区域,其他区域都要链接在骨干区域为了方便区分和标识不同的区域,所以,我们给每一个区域都定义一个区域ID称为:areaid;
他是由32位二进制构成的非负整数。有两种表示方法 :
1,直接使用十进制进行表示;
2,使用点分十进制进行表示。
骨干区域的区域ID定义为区域0,单区域一定为骨干区域(区域id没有固定为0)。但是多区域,骨干区域一定为0。
假定没有所有非骨干区域都必须连接骨干区域这条规则
如果没有规定,R1-R5之间看似构成一个很大的环路,但是起始没有构成环路,因为规定只有真正的ARP设备才可以转发区域间路由信息。所以这个不会构成环路,根本通不了
OSPF定义了ABR(区域边界路由器)来确保遵循这条规则。所以只有真正的ARP设备才可以转发区域间路由信息。同时属于多个区域,一个接口对应一个区域。
1、至少连接两个区域。
2、连接的区域中至少有一个接口连接区域0。
3、在区域0中至少有一个活跃的邻居。
非骨干区域之间不允许直接相互发布区域间路由信息。因为非骨干区域之间的边界设备不是ARP。
假定没有“骨干区域不能被分割”
两种情况:
-
如果区域1之间某一台路由器连接在下边的区域0,R3收到区域1传来的关于下面区域0的路由信息,此时根据区域内的路由优于区域间的路由,所以不学习。
-
R3收到另一个区域0的路由信息,此时R3能接收到但是不会使用这条路由信息。
OSPF规定:从非骨干区域接收到的路由信息(学习区域内的路由是通过拓扑图计算的,所以路由信息一定是从其他ABR设备发的),ABR能接收到但是不会使用这条路由信息。从一个区域学习到的路由信息,不能再传递回该区域。这条规则也被称OSPF的区域为水平分割机制。
总结
OSPF有如下规定:
1、伪ABR设备不允许转发区域间路由信息
2、对于真实ABR设备
能够将自己直连的非骨干区域的路由信息传递给骨干区域
能够将自己直连的骨干区域路由信息传递给非骨干区域
能够将自己从骨干区域学习到的非骨干区域路由信息传递给直连的非骨干区域。
OSPF路由器角色
-
内部路由器 ---- IR
-
所有接口都接入同一个OSPF区域的路由器
-
-
区域边界路由器 ---- ABR
-
至少连接两个区域。
-
连接的区域中至少有一个接口连接区域0。
-
在区域0中至少有一个活跃的邻居。
-
-
骨干路由器
-
接入Area0的路由器
-
-
自治系统的边界路由器 ---- ASBR
-
工作在OSPF自治系统边界的路由器,负责将OSPF域外的路由引入本域。
-
并不是所有运行了多种路由协议的OSPF路由器就一定是ASBR;必须执行了重发布操作的路由器才会被称为ASBR。
-
OSPF的数据包
-
hello包 :用来周期性的发现,建立和保活邻居关系。通过组播224.0.0.5发送。
-
10s发送一次用以确认邻居存在。
-
hold-time(死亡时间):hello-time*4
-
-
DD包( 数据库描述报文):LSDB (链路状态数据库),LSA相当于“菜单”。该报文中携带路由信息
-
LSR包(链路状态请求报文) :基于DBD包,请求未知的LSA信息。相当于”点菜”
-
LSU包(链路状态更新报文): 真正携带LSA的数据包相当于“上菜”
-
LSACK包(链路状态确认报文) --- 确认包
OSPF协议具有周期更新机制,每个30MIN发送一次。相当于保底机制。
RID
RID是为区分和标识不同的路由器,其本质由32位二进制构成。
1,格式统一:在OSPF网络中具有唯一性; 2,全网唯一:按照ip地址的格式(格式统一且具备唯一性);
RID的生成方式: 1,手工配置 2,自动生成
首先,设备将优先选择环回接口的IP地址作为RID。如果存在多个环回接口,则将选择所有环回接口中IP地址中数值最大的作为RID;如果没有配置环回接口,则将使用设备的物理接口的IP地址作为RID;如果物理接口存在多个,则选择IP地址中数值最大的作为RID。
[huawei]dsiaplay ospf bref ---- 查看RID
[huawei]dsiaplay router id ---- 查看路由器的id
在华为设备中,若没有接口IP,则OSPF启动后,RID为0.0.0.0。
在思科设备中,若没有接口IP,则OSPF无法启动。
华为标准:状态最先UP的接口的IP地址作为Router id
FRC标准:
1、取lookback接口IP中最大的作为Router id
2、若没有lookback接口,则选择物理接口IP地址中最大的作为Router id
无论采用手工配置还是自动选取的方式,一旦OSPF确定了RID,则之后不会改变。除非重启OSPF进程。
OSPF的状态机
-
down状态:启动ospf之后,发出hello包进入下一个状态。
-
Attempt状态:尝试状态,只在NBMA网络中出现。由于NBMA网络中无法发送组播获取邻居,需要管理员手动配置告知邻居的地址,在未配置之前都是这个状态。
-
init(初始化)状态:等待接受状态。收到对方的hello包中包含自己本地的RID,则进入到下一个状态,并且回复自己的RID。
-
Two-way(双向通信):标志着邻居关系的建立
(条件匹配)匹配成功,则进入到下一个状态;失败则停留在邻居状态,仅使用hello包进行周期保活。
-
exstart(预启动)状态:通过发送没有携带数据的DBD包来进行主从关系选举,通过比较RID来进行选举,RID大的为主,为主可以优先进入后面的状态
-
为啥不用Hello包发送RID,而是用改进的DBD包发送和比较???
-
理论上Hello包可以作为发送和比较的数据包,但是由于状态已经处于条件匹配成功了,而Hello包是在处于条件匹配成功之前的使用的数据包,Hello包此时已经不能再使用了。Hello包相当于作为区分条件匹配的数据包。
-
-
-
exchange(准交换)状态:交换携带数据(摘要信息)的DBD包进行LSDB数据库目录共享
-
loading(加载)状态 --- 基于对端发送的DBD包,RID大的优先使用LSR/LSU/LSACK交换未知的LSA信息
-
FULL状态 --- 标志着邻接关系的建立。当双方都已经交换过数据包,计算过开销值后,双方就进入FULL状态。
稳定状态只有2-way和full两个状态。
邻接关系的建立
1、R1和R2刚开始是没有开启,处于状态Down。
-
开启之后,R1和R2激活了OSPF协议,并发送了一个Hello报文(使用组播地址224.0.0.5)。此时,R1认为自己是DR路由器(DR=1.1.1.1),但不确定邻居是哪台路由(邻居=0)。
-
R2收到R1发送的Hello报文后,发送一个Hello报文回应给R1,并且在报文中的邻居(Neighbors Seen)字段中填入R1的Router ID(邻居=1.1.1.1),表示已收到R1的Hello报文,并且宣告DR路由器是R2(DR=2.2.2.2),然后R2的邻居状态机置为Init。
-
R1收到R2回应的Hello报文后,将邻居状态机置为2-way状态,下一步双方开始发送各自的链路状态数据库。
2、Two - Way(双向通信状态 ):标志着邻居关系的建立。
条件匹配成功则可以进入到下一个状态,如果条件匹配失败。则将停留在邻居关系,则仅周期性的发送hello包进行保活。
3、Exstart(预启动状态)和Exchange(准交换状态)
-
R1首先发送一个DD报文
-
宣称自己MS=1,并规定序列号Seq=200。
-
I=0表示这是第一个DD报文,报文中并不包含LSA的摘要,只是为了协商主从关系。
-
M=1说明这不是最后一个报文。
-
-
R2在收到R1的DD报文后,将R1的邻居状态机改为Exstart,并且回应了一个DD报文(该报文中同样不包含LSA的摘要信息)。
-
宣称自己MS=1,并规定序列号Seq=300。
-
-
R1收到报文后,同意了R2为主,并将R2的邻居状态机改为Exchange。R1使用R2的序列号Seq=300来发送新的DD报文,该报文开始正式地传送LSA的摘要。在报文中R1将MS=0,说明自己是从。
-
R2收到报文后,将R1的邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,此时R2将报文的序列号改为Seq=300+1。
上述过程持续进行,R1通过重复R2B的序列号来确认已收到R2的报文。R2通过将序列号Seq加1来确认已收到R1的报文。当R2发送最后一个DD报文时,在报文中写上M=0。
4、Loading(加载状态)和Full状态
-
R1收到最后一个DD报文后,发现R2的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。此时R2也收到了R1的最后一个DD报文,但R1的LSA,R2都已经有了,不需要再请求,所以直接将R1的邻居状态机改为Full状态。
-
R1发送LSR报文向R2请求更新LSA。R2用LSU报文来回应R1的请求。R1收到后,发送LSAck报文确认。
上述过程持续到R1中的LSA与R2的LSA完全同步为止,此时R1将R2的邻居状态机改为Full状态。当路由器交换完DD报文并更新所有的LSA后。
FULL状态标志着邻接关系的建立。主要目的是为了和之前的邻居关系进行区分,邻居只能通过hello包进行保活,而邻接之间,可以交换LSA信息。
注意
-
看到的状态是对方的状态
-
如果主设备没有再发DD数据包,从设备拿不到下一个DD数据包的序列号,从设备就不可以发DD数据包
OSPF工作过程
-
启动OSPF配置后,OSPF向本地所有运行了OSPF协议的接口以组播地址(224.0.0.5)发出hello报文;hello报文中携带了本地的RID参数,以及本地已知的邻居RID值。
-
邻居的RID获取方式:通过接收其他邻居的hello报文来获取本地邻居
-
建立邻居关系,并生成邻居表。
-
-
邻居关系建立后,进行条件匹配;匹配失败则停留在邻居关系,即2-way状态,仅使用hello报文保活。该状态为稳定态。
-
匹配成功的邻居开始建立邻接关系。
-
首先使用未携带数据的DBD报文进行主从关系选举,之后使用携带信息的DBD报文来共享数据库目录;
-
RID大的优先通过LSR/LSU/LSACK获取未知的LSA信息。
-
然后本地通过对方共享的目录信息与本地数据库进行对比,通过使用LSR报文请求未知的LSA信息。
-
对端使用LSU报文回复完整LSA信息
-
本端使用LSAck报文确认回复。
-
-
当本地接收到所有的未知LSA信息后,将信息存放在LSDB中。
-
之后基于本地数据库生成有向图和最短路径树。
-
根据最短路径树计算本地到达拓扑中所有未知网段的最短路径,并将其加入到OSPF路由表中。
-
从OSPF路由表中选择最优路由加载入本地全局路由表。
-
-
收敛完成后,hello报文周期保活。每30min进行一次周期链路刷新。
结构突变
-
突然新增一个网段:触发更新,第一时间将变更信息通过LSU包传递出去,需要ACK确认。
-
突然断开一个网段:触发更新,第一时间将变更信息通过LSU包传递出去,需要ACK确认
-
无法联系:触发dead time即40s后变动信息。此时还是FULL,40s死亡时间,才会变为down状态,并且删除信息(路由信息)。
条件匹配
-
DR和BDR其实是接口的概念
-
DR --- 指定路由器 --- 和广播域内其他设备建立邻接关系。
-
BDR --- 备份指定路由器 --- 和广播域内其他设备建立邻接关系,称为DR设备的备份。
-
-
决定了谁给谁发送拓扑信息
条件匹配
在一个广播域中,若所有设备均为邻接关系,将出现大量的重复更新;故需要进行DR/BDR的选举,所有DR other(其他路由器)之间,仅维持邻居关系即可。除DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息,这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。
-
所有路由器和BR/BDR建立邻接关系,所有LSA交互均由DR完成。
-
DR和BDR的选举在进行条件匹配,此时还没有进行邻接关系的建立;DR和BDR用来接受链路状态更新报文的目的地址是224.0.0.6。
-
一个广播域内部,至少需要4台设备才能看到邻居关系。
DR/BDR的选举规则
-
先比较优先级数值,优先级数值最大的为DR,次大的为BDR;优先级默认为1 --- 主要目的让人为修改。
-
注意:如果将一个接口的优先级设置为0,则代表这个接口将放弃DR/BDR的选举。
-
修改优先级 [r1-GigabitEthernet0/0/0]ospf dr-priority ? INTEGER<0-255> Router priority value
-
-
如果优先级相同,则比较RID。RID大的路由器所对应的接口为DR,次大的为BDR。
-
DR/BDR的选举是非抢占模式的。一旦角色选举出来,则将无法抢占。选举时间:40s(等同于死亡时间)如果在40s没选出来,那自己就是最大的。
-
<r1> display ospf interface --- 在路由器上查看DR/BDR的选举情况 <r1>reset ospf 1 process --- 重启OSPF进程1
-
注意
-
DR和BDR接受链路状态更新的报文目的地址是224.0.0.6
-
在一个MA网路中,可以没有BDR,但是必须存在DR。
-
选取范围:同一个广播域
条件匹配的选举过程
-
DR、BDR的选举是通过Hello报文实现的,时间发生在2-way状态之后。
-
路由器将自己的接口的DR优先级填写在hello报文的“DR优先级字段”。
-
华为数通产品的接口DR优先级默认1
-
[Huawei-GigabitEthernet0/0/0]ospf dr-priority ? ---- 修改优先级 INTEGER<0-255> Router priority value DR优先级为0则代表该接口不具备选举DR和BDR的资格。
-
-
当接口激活OSPF后,设备首先会检查网络上是否已经存在DR,如果存在则接收已经存在的DR设备。否则优先级最大的设备成为DR,若优先级相同,则拥有最大RID的路由器成为DR设备。
-
BDR选举过程与DR相同,但是是在DR选举之后进行。
OSPF基本配置
-
启动OSPF协议
-
[r1]ospf 1 router-id 1.1.1.1 ---- 手工配置RID需要在进程启动时配置。
-
OSPF ProcessID只是本地有效,用来在本地区分不同的OSPF进程。
-
虽然OSPF ProcessID本地有效,但是我们仍然建议,除非有特殊需求,否则全网使用一致的OSPF进程ID,这将方便网络管理和维护。
-
-
创建区域
-
[r1-ospf-1]area 0
-
-
宣告
-
[r1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0 ---- 精准宣告 [r1-ospf-1-area-0.0.0.0]network 12.0.0.0 0.0.0.255 ---- 范围宣告
-
宣告的作用:
-
激活接口:只有宣告的网段包含的接口会被激活,只有激活的接口可以收发OSPF的数据。
-
发布路由:只有激活的接口所对应的直连网段的路由才能被发布。
-
-
ABR设备上的换回地址一般宣告在骨干区域,因为骨干区域连接所有的区域,这样ABR设备就不用去收集ABR设备上的换回地址路由信息发给骨干区域。骨干区域直接就知道ABR设备上的换回地址路由信息。
-
反掩码:32位二进制,点分十进制表示;由连续的0和连续的1组成,0对应位不可变,1对应位可变。对于1.1.1.1 0.0.0.0的路由,被称为主机路由,仅包含一个ip地址。
-
注意:
-
华为设备,OSPF协议的默认优先级为10,所以华为设备相当信任OSPF协议。优先级比较不同路由协议的比较。
-
华为设备默认的参考带宽为100Mbps,COST = 参考带宽 / 真实带宽。如果计算出来是一个小于1的小数,则直接按照1来算。如果是一个大于1的小数,只取整数部分。开销值也是接口概念。
[r2-ospf-1]bandwidth-reference ? ----修改参考带宽 INTEGER<1-2147483648> The reference bandwidth (Mbits/s)
-
一条OSPF路径的cost等于从目的地到本地路由器沿途的所有入接口cost的总和。
-
查看OSPF的表
[r1]display ospf peer ---- 查看邻居表,显示的是详细的信息 [r1]display ospf peer brief ---- 查看邻居关系简表 [r1]display ospf lsdb ---- 查看数据库表 [r1]display ospf routing ---- 查看 [r1]display ospf lsdb router 2.2.2.2 ---- 展开一条LSA的方法 [r1]display ip routing-table protocol ospf ---- 查看ospf路由表 [r1]display this ---- 查看当前页面所有配置信息
OSPF的报文格式
IP报文协议字段中OSPF协议号是89。
OSPF报文头部
报文首部长度固定24字节。
-
版本:恒为2
-
类型:描述OSPF数据包类型
-
hello ---- 1
-
dbd ---- 2
-
lsr ---- 3
-
lsu ---- 4
-
lsack ---- 5
-
-
报文长度:指的是后面的报文长度,不是OSPF头部长度。
-
路由器ID:指的是RID。
-
区域ID:发出该报文的接口所属区域的ID值。
-
校验和:校验整个数据包的数据完整性。而IP头部报文中的校验和只校验头部数据的完整性。
-
验证类型
-
指示该数据报文使用的认证类型。
-
不认证--0;简单认证---1;MD5认证---2。
-
-
验证数据
-
用于报文认证的内容。
-
若认证类型为不认证,则该字段全为0;
-
注意:
-
当两个路由器去验证的时候,会先比较验证类型。当验证类型相同是才会比较验证数据。如果验证类型不同就不会去比较验证数据,更不会去建立邻居关系。
-
并且由于验证类型是在OSPF头部报文中,所以OSPF的五种报文都要去验证。
Hello报文
-
网络掩码
-
两台OSPF路由器如果通过以太网接口直连,那么双方的直连接口必须配置相同的网络掩码。
-
如果一方在接口上收到的hello报文中,网络掩码字段与本地接口配置的掩码不同,则该路由器忽略该hello报文,此时邻居关系无法建立。
-
注意:只有在华为设备中会检查网络掩码信息。
-
-
Hello间隔
-
如果两台路由器的hello时间间隔不同,则不会建立邻居关系。
-
在Broadcast类型和P2P网络类型中hello时间间隔为10S;而在NBMA或P2MP网络类型中,Hello时间为30S。
-
-
可选项
-
有8个标记位,每一个标记位为1,则代表其符合OSPF的某种特性。
-
特殊区域标记。
-
-
路由器优先级
-
还是接口概念,指的是接口优先级。
-
用于选举DR和BDR。
-
-
路由器失效时间
-
两台设备建立OSPF邻居需要确保死亡时间相同。
-
默认情况下是hello间隔的4倍。
-
若修改hello时间,则死亡时间随之改变;若修改死亡时间,则hello时间不变。
-
-
指定路由器(DR)
-
该参数为网络中DR的接口IP地址。
-
若没有选举出DR,则使用0.0.0.0来占位
-
-
备份指定路由器(BDR)
-
该参数为网络中DR的接口IP地址。
-
若没有选举出BDR,则使用0.0.0.0来占位
-
-
邻居
-
在直连链路上发现的有效邻居,此处填充的是邻居的RID值。
-
因为填写接口IP地址,就会导致同一台设备被两个IP地址标识。
-
所有224.0.0.X格式的组播地址称为本地链路组播地址,目标IP是本地链路组播的数据包的TTL值被设定为1。所有本地链路组播都存在对应的组播MAC地址,01-00-5e-0后23位,后23位为组播IP地址的后23位。
MAC地址的前8位
xxxxxxx1 组播
xxxxxxx0 单播
224.0.0.5-->11100000.00000000.00000000.00000101
01-00-5e-0 0000000.00000000.00000101--->01-00-5e-00-00-05
注意
-
点到点网络中,不需要选举DR和BDR,因为就两台设备。两台设备不会有重复更新,所以不需要选举DR和BDR,也就节省了没有选举时间,加快收敛。
限制邻居关系建立的参数
子网掩码
R1修改掩码后,会立即将状态置为down,而R2会在40S死亡时间后进行状态切换。因为R1在修改IP地址的掩码后,会认为之前的连接中断,需要重新建立连接,所以会直接重置状态机。而R2则认为此时属于结构突变中的无法沟通。
hello时间
[r1-GigabitEthernet0/0/0]ospf timer hello 20 ---- 修改Hello时间
由于Hello时间不同,会认为不是对端发送的数据包,双方经过死亡时间后,状态发生改变。
dead时间
[r1-GigabitEthernet0/0/0]ospf timer dead 80 ---- 修改死亡时间
结果与修改hello时间一致。
认证
[r2-GigabitEthernet0/0/0]ospf authentication-mode simple plain 123456 ---- 接口认证
[r2-ospf-1-area-0.0.0.0]authentication-mode simple plain 123456 ---- 区域认证
双方认为网络拓扑没有发生变化。所以状态机不会立马改变。双方Hello数据变化,所以等待死亡时间。认证类型不同也不会建立起邻居。
可选项
特殊区域不能在骨干区域生成,只能在分骨干区域生成。结果与修改掩码信息结果相同。
DBD报文
作用 :
-
使用未携带数据的DBD报文进行主从关系选举
-
使用携带数据的DBD报文进行拓扑目录共享
-
使用未携带数据的DBD报文进行确认。
-
接口最大传输单元(MTU)
-
在华为AR系列路由器上,该参数值默认为0。
-
该字段是用于进行OSPF的MTU检测,而华为默认不开启MTU检测机制。
-
进入接口配置 [r1-GigabitEthernet0/0/0]ospf mtu-enable ---- 开启OSPF的MTU检测机制
-
同样也是进入接口配置 [r2-GigabitEthernet0/0/0]mtu ? ---- 修改MTU参数 <46-1600> MTU value
-
如果设备两端开启了OSPF的MTU检测机制,则进行MTU检测,若双方的MTU参数相同,则正常进行邻接关系建立。若不同,则双方卡在exstart状态。
-
-
可选项---与Hello报文内容中的可选项字段一致。
-
I ---- 主从关系选举
-
如果该为为1,则代表该数据报文是用于进行主从关系选举。且此时的数据包中不会携带真实的数据库目录信息。
-
-
M ---- 后续是否还会有DD报文
-
若为1,则代表后续还存在DD报文
-
若为0,则代表后续没有DD报文
-
-
MS ---- 代表是否为主设备
-
若为1,则代表本设备为Master设备
-
若为0,则代表本设备为Slave设备
-
-
DD序列号
-
功能:用于确保DD报文传输的有序性和可靠性。
-
在DD报文交互的过程中,DD序列号被逐次加1。且DD序列号必须由Master路由器来决定,而Slave路由器只能使用Master路由器发送的DD序列号来发送自己的DD报文。
-
隐形确认机制:通过对方发送的数据包中的DD序列号,起到确认的效果。
-
而主从关系选举就是为了完成隐形确认。
-
-
LSA头部信息
LSR报文
链路状态类型、链路状态ID、通告路由器三者被称为LSA的三元组信息。通过这三个参数可以唯一标识出一条LSA信息。
LSU报文
-
LSA个数:告诉你携带了多少个LSA信息的个数。
-
LSA:LAS的具体信息
LSAck报文
完成显式确认机制
-
LSA头部
OSPF的接口网络类型
网络类型
-
P2P
-
P2MP
-
-
MA
-
BMA
-
NBMA
-
OSPF的接口网络类型,实际上是说OSPF的接口在某种网络类型下的一种工作方式或特征。
网络类型 | OSPF接口工作方式--接口类型 |
---|---|
BMA | 类型:Broadcast;可以建立多个邻居关系,需要进行DR和BDR的选举;hello 10S,dead 40S。 |
P2P | 类型:P2P;只能建立一个邻居关系,不需要进行DR和BDR选举;Hello 10S;dead 40S |
环回接口(虚拟接口) | 类型:华为定义为P2P,但是实际上无数据转发;环回接口默认学习32位主机路由;不需要进行DR和BDR选举;hello 10S;dead 40S。 |
类型:P2MP;可以建立多个邻居,不需要DR选举;会学习邻居的接口主机路由;hello 30S;dead 120S。 | |
NBMA | 类型:NBMA;可以建立多个邻居,需要DR选举;无法自动建立邻居关系;hello 30S,dead 120S。。 |
Vlink | 类型:Vlink;只能建立一个邻居,不需要DR选举;以单播形式发送hello报文;Hello 10S;dead 40S。 |
BMA(广播型多点接入网络)
[r3]display ospf interface GigabitEthernet 0/0/0 ---- 查看OSPF网络接口类型
poll 120 ---- 轮询时间:在120s的时候定时发送Hello包。只有在NBMA中有意义。当本地第一次建立邻居关系失败,从init退回Attmpet状态,每隔120s发一次Hello报文,查询邻居能不能与本机建立起邻居关系。
[r3-GigabitEthernet0/0/0]ospf timer poll ? ---- 修改轮询时间
范围是1-3600(2*1800,2*30min),最少是Hello的4倍
Retransmit 5 ---- 重传LSA的时间
[r3-GigabitEthernet0/0/0]ospf timer retransmit ? ---- 修改重传LSA的时间
范围是1-3600,不要改的太小。
Teansmit Delay 1 ---- 延迟时间:为了避免链路传递时间导致同一条信息,老化时间不同。
[r3-GigabitEthernet0/0/0]ospf trans-delay ? ---- 修改延迟时间
INTEGER<1-500> Second(s)
范围是1-500,不要改的太大
OSPF在BMA类型的接口上通常以组播的方式发送hello报文、LSU及LSACK报文;以单播的形式发送DD报文和LSR报文。
-
DR ----> BDR DR把收集到的所有信息给所有人,此时组播。
-
BDR ----> DR 网络路由收敛过程中,此时单播。
点到点类型(P2P)
-
由于点到点网络中,邻居有且只有一个,所以可以直接写在接口那一行。
-
开销值:在华为设备中,P2P网络的参考实际带宽默认为2.048(E1标准),开销值为48。
-
因为P2P网络不需要选举DR和BDR所以,State填充的是P-2-P,告诉自己是P2P网络,不需要选举。
OSPF在网络类型为P2P的接口上以组播的方式发送所有的数据报文。之所以发组播,是因为点到点网络中通信的基础不是IP地址。
环回接口
-
华为规定环回接口开销值为0,这样的结果就是修改参考带宽不会影响到环回接口的开销值。
-
type:华为使用P2P来填充,而cisco使用LoopBack0填充。
-
路由表中环回地址网络掩码为32。
-
所有通过OSPF学习到的环回接口的路由掩码都是32位,因为该接口是一个模拟的接口,实际没有连接用户,所以并没有其他IP地址存在与该接口之下,只有一个可用IP。如果使用其他掩码,可能会导致环路或者路由黑洞。所以设置为32,可以精准匹配路由。
[r1-LoopBack0]ospf network-type broadcast ---- 修改接口网络类型为broadcast 此时由表中环回地址网络掩码就会发生改变
-
-
State:waiting ---- 该字段代表正在进行条件匹配,当该计时器超时后,接口会认为自己为DR设备,且将接口的状态切换为exstart状态。
MGRE环境下的OSPF
华为将Tunnel接口的传输速率定为了64Kbps。所以此时Tunnel接口的开销值为1562。
此时邻居关系混乱:
-
R7认为邻居是R8,并且R8属于Full状态
-
R8认为邻居是R7,并且R7属于Full状态
-
R9认为邻居是R7,并且R7属于Init状态
-
所以R7学不到R9路由信息。
因为Hub节点此时属于P2P类型,只能建立一个邻居,无法建立多个邻居,故修改Tunnel接口的网络类型为Broadcast类型。
如果只修改中心的Tunnel接口类型此时邻居关系,同样有问题。
举例:R8和R9给R7发送最后一个Hello报文。R7选举RID大的为DR,但是其他两个由于是P2P网络接口类型,所以不需要选举,所以不会再发送Hello报文,两个都进入2-way。R7认为R9为DR写在自己的表中,同时也去选BDR,R7给R8发送Hello包,但是此时R8不会再发送Hello报文。所R7认为R8以卡在2-way状态,认为R9在full状态。R8认为R7卡在ExStart状态。R9认为R7在full。
不同的网络类型,可以建立邻居关系,但是可能会造成不同的问题。故修改接口网络类型时,全网保持一致。如果链路两端,一端需要选举DR,另一端不需要,可能会成功建立full状态,也可能有一个卡在exstart或2-way状态。
但是R7没有R9的路由,此时是因为LSA的原因,先保留原因会在之后解决。
为了避免全网关于DR和BDR认知错误导致,路由表信息不全。所以让分支节点放弃DR选举,在MGRE环境下,hub节点必须成为DR设备,因为只有中心才有全网路由信息。否则网络路由信息无法学习全面。必须修改分支节点的接口优先级为0。
P2MP(点到多点类型)
进入接口配置,只能手工修改
[r7-Tunnel0/0/0]ospf network-type p2mp
-
Hello time 30s ,Dead time 120s;全网修改,因为Hello时间和死亡时间不同,不会建立邻居关系。
-
同样不需要选举DR和BDR
-
在P2MP环境下,设备会学习所有邻居的接口IP地址,形成主机路由(子网掩码为32)。
在P2MP环境下,只有hello报文是以组播形式发送,其他所有报文以单播形式发送数据。
NBMA
-
开销值 48
-
需要选举DR和BDR
-
Hello time 30s Dead time 120s
-
在NBMA网络中,所有的OSPF路由器都需要使用peer命令单播指定邻居,该命令是双向的,两方都需要配置。
[r4-ospf-1]peer 10.1.1.1 ---- 配置邻居IP地址
在NBMA网络中,所有数据包以单播数据通讯。
Vlink
-
开销值为2
-
不需要DR和BDR选举
-
类型是Virtual
-
hello time 10s,dead 40s
-
虚链路中不存在轮训时间
以单播形式发送进行通信。
注意:
-
如果以太网中,一条线路除了两端的两台设备,没有其他设备。可以修改链路类型为P2P,因为P2P不需要选举DR和BDR。这是OSPF一种加速收敛的机制。
OSPF的不规则区域划分
不规则区域的情况
-
远离骨干区域的非骨干区域
-
不连续骨干区域
两种类型的解决方法一样。
根本解决方案:对OSPF网络重新规划与配置,满足OSPF区域划分规则。
-
解决方法一:连一条物理隧道,宣告区域0
-
解决方法二:创建一个Tunnel隧道,注意要选择OSPF能通的两个建立隧道,并且宣告在区域0。选路规则:域内路由>域间路由。所以会在本地导致选路不佳。
-
遇到的问题:
-
可能导致选路不佳。
-
造成重复更新。
-
资源消耗。
-
-
这种方法问题太多了,所以工程中基本见不到,没人使用。
-
-
解决方法三:虚链路(Vlink)
vlink是专门为了解决OSPF不规则区域所诞生的技术,是一种虚拟的、逻辑的链路。vlink必须找到一个真实的ABR设备建立虚拟链路。
注意:
-
配置位置在需要vlink穿越的区域中,且配置的是RID,而非邻居IP地址。
-
虚链路的配置条件:只能穿越一个区域。
-
它需要通过RID递归查找IP地址,即R2通过LSA找到R3,只有在相同区域内才能拿到拓扑信息;如果是多个区域,传递的是路由信息,拿不到拓扑信息,计算不到目标地址。所以只能穿越一个区域。找到之后如果有多个接口,就找开销值最小的一条。
-
-
Vlink被视为骨干区域的一段延伸,即Vlink永远属于Area 0,但是要在被穿越的区域配置,并且这条隧道不穿数据。
Vlink的配置
进入区域1进行配置
[r2-ospf-1-area-0.0.0.1]vlink-peer 3.3.3.3 ---- 写邻居的RID
[r3-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2
[r3]display ospf vlink ---- 查看虚拟邻居
使用Vlink解决不规则区域的问题
-
资源消耗
-
虚链路只能穿越1个区域