目录
目录
7.2 P2MP(Point ti Multi-Point 点到多点)
7.3 BMA(Broadcast Multiple Access 广播多路访问)
7.4 NBMA(Non-Broadcast Multiple Access 非广播多路访问)
1. OSPF描述
OSPF协议是一种链路状态协议。每个路由器负责发现、维护与邻居的关系,并将已知的邻居列表和链路费用LSU报文描述,通过可靠的泛洪与自治系统AS内的其他路由器周期性交互,学习到整个自治系统的网络拓扑结构;并通过自治系统边界的路由器注入其他AS的路由信息,从而得到整个Internet的路由信息。每隔一个特定时间或当链路状态发生变化时,重新生成LSA,路由器通过泛洪机制将新LSA通告出去,以便实现路由的实时更新。
这样,每台路由器都收到了自制系统中所有路由器生成的LSA,这些LSA的集合组成了LSDB(链路状态数据库),这样所有的OSPF路由器都维护一个相同的描述自治系统内部结构的数据库。
1.1基本概念
- 协议使用范围----IGP
- 链路状态型协议----传递拓扑
- 传递真实掩码信息----无类别路由协议
- OSPF版本
- OSPFv1
- OSPFv2----IPv4
- OSPFv3----IPv6
- 使用SPF算法
- OSPF传递的是LSA信息(链路状态通告)
- OSPF更新方式
- 触发更新
- 周期链路状态刷新-----30min
- OSPF更新地址---组播
- 224.0.0.5/224.0.0.6
- OSPF开销值===参考带宽/实际带宽(参考带宽默认为100Mbps)——针对于接口而言
- OSPF进行跨层封装----基于IP协议进行封装,协议号89
1.2 优点
- 支持在多条等代价路由之间的负载均衡;
- 支持路由信息交换的认证;
- 可用作大型自治系统的内部路由协议。
- OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路
- OSPF不限制网络规模,更新效率高,收敛速度快
2. OSPF数据报文
2.1总体概述
- Hello报文
- 用来周期性发现、建立、保活OSPF邻居关系。
- 进行DR、BDR选举
- hello time:10S发送一次hello报文,来确认邻居的存在
- 如果一个dead time时间没有收到邻居发送给自己的hello报文,则认为邻居不存在
- time一般为hello时间的四倍,默认情况下为40S。
- Router-ID------RID
- 全域唯一,标识路由器的身份
- 使用IP地址的表示形式
- 配置方式:
- 1、手工配置:满足上面两条规则即可。
2、自动配置:路由器默认优选最大环回IP地址,没有环回则选择最大物理IP地址。
注意:
启动OSPF进程前,必须有接口IP地址。若有,则在第一次启动OSPF进程时,选择第一个配置的IP地址作为RID值。- 在思科中,若没有IP,则OSPF启动失败。在华为中,RID会设定为0.0.0.0。
- 华为逻辑:在第一次启动设备时,选择第一个UP的接口的IP作为全局RID。之后按照国际标准执行。
- DBD报文
- 数据库描述报文
- 携带路径信息的摘要信息----为了避免重复更新和减少更新量。
- LSR报文
- 链路状态请求报文
- 根据DBD中的信息,请求获取未知的链路信息(LSA信息)
- LSU报文
- 链路状态更新报文
- 携带有真正的LSA信息的数据包
- LSAck报文
- 链路状态确认报文
2.2 OSPF头部信息
如果验证类型字段为0--不认证。则认证数据部分使用全0填充,保证首部大小为24字节。
区域ID用于路由器双方进行验证,如果双方所属区域不同,则无法建立邻居关系。
2.3 Hello包
作用:发现、建立以及周期性保活邻居关系、进行DR和BDR的选举
-
网络掩码
-
该报文被路由器的那一个接口发送,该字段填充该接口的掩码信息。
-
两台OSPF路由器会检查该字段内容,如果该字段与收到该报文的接口的掩码信息不符,则会丢弃该hello报文。----网络掩码字段的检查仅在MA网络进行。
-
注意:OSPF建立邻居关系需要对比网络掩码字段是华为厂商独有的手段。
-
-
Hello时间
-
两台直连路由器如果要建立邻居关系,则需要保证该参数取值一致,否则无法正常建立邻居。
-
-
路由器失效时间
-
两台直连路由器如果要建立邻居关系,则需要保证该参数取值一致,否则无法正常建立邻居。
-
-
可选项
-
8个标记位,每个标记位置为1,则代表该设备开启了某一种OSPF特性。
-
可选项中有部分标记位被称为特殊区域标记,该标记在邻居关系建立时会被检查,如果不同则会影响到邻居关系建立。
-
-
DR/DRR
-
填充的是网络中DR/BDR所在接口的IP地址。
-
如果没有选举出,则填充0.0.0.0
-
所有224.0.0.X格式的组播IP地址被称为本地链路组播;
目标IP地址是本地链路组播的数据包中的TTL值被设定为1;所有的本地链路组播都存在与之对应的组播MAC地址。
01-00-5e-0+IP地址的后23位。
[r1-GigabitEthernet0/0/0]ospf timer hello 100 --修改hello时间
[r1-GigabitEthernet0/0/0]ospf timer dead 20 ---修改死亡时间
2.4 DBD包
隐性确认机制:
-
使用未携带数据的DBD报文进行主从关系选举
-
使用携带数据的DBD报文进行LSA摘要信息共享
-
使用未携带数据的DBD报文进行确认
-
接口最大传输单元
-
OSPF在exstart状态需要进行MTU数值协商,如果双方数值不同,则会影响后续OSPF工作。
-
该参数会影响OSPF邻接关系的建立,如果参数不同,则双方停留在exstart状态。
-
华为默认情况不开启MTU检测机制。
-
在华为体系下,无论接口的实际MTU数值为多少,该字段数值均为0。
-
[r1-GigabitEthernet0/0/0]ospf mtu-enable ---开启OSPF对MTU的检测机制,双方均需要开启。
-
-
-
标记位
-
I位
-
代表此时时候在进行主从关系选举。
-
当该标记位置为1时,则代表此时在进行主从关系选举,且该报文不会携带LSA头部信息。
-
-
M位
-
代表后续是否还存在别的DBD报文。
-
该标记位置为1,则代表此时后续还有其他DBD报文。
-
-
MS位
-
当该标记位置为1,则代表此时发送该报文的接口为主设备。
-
在主从关系选举完成之前,所有DBD报文的MS位均为1。
-
-
-
DD序列号
-
用于确保DD报文在传输过程中的有序性和可靠性。DD报文的序列号在DD报文交互过程中逐次加一。
-
只有主设备才可以规定DD序列号内容。
-
如果从设备发送完数据,而主设备没有发送完毕。从设备也需要回复一个空的DD报文进行确认。
-
如果主设备发送完毕,从设备没有发送完毕。主设备需要发送空的DD报文,目的是给从设备提供DD序列号使用。
-
-
隐性确认---从设备必须根据主设备发送报文中的序列号来发送自己的DD报文。
-
2.5 LSA三元组
LSA三元组:可以通过这三个参数唯一的标识一条LSA信息
3. OSPF七种邻居状态机
- down----关闭状态-----一旦启动了OSPF协议,则发出hello报文,进入下一状态
- init-----初始化状态----当收到的hello报文中,存在本地RID值时,进入下一状态
- 2-way-----双向通讯状态-----------邻居关系建立的标志。
- 条件匹配:匹配成功则进入下一阶段,失败则停留在邻居关系。
- exstart----预启动状态-----使用未携带信息的DBD报文进行主从关系选举,RID大的为主
- exchange-----准交换----使用携带目录信息的DBD包进行目录共享
- loading-----加载状态-----邻居间使用LSR/LSU/LSACK三种报文来获取完整的拓扑信息
- full----转发状态----拓扑信息交换完成后进入该状态-----邻接关系建立的标志。
注:
Attempt状态---尝试状态---------仅在NBMA网络中会出现,当设备启动后,从down切换到该状态,尝试向外发送hello报文,当成功发送后,进入到init状态。
3.1条件匹配
目的:减少网络中LSA信息的重复更新及资源消耗
- 设备接口角色
- 指定路由器------DR
- 备份指定路由器-----BDR-----BDR是指备用的 DR
- 其他路由器----DRother
- 选举规则:
- 1. 优先级,默认为1 范围:0-255,越大越优,当优先级为0时 放弃选举
- 2. 对比设备RID,越大越优
- 选举范围
- 一个广播域,进行一次条件匹配。
- 选举规则:
组播地址:
1、DRother发送时使用224.0.0.62、DR/BDR接收224.0.0.6,发送224.0.0.5
- 角色之间的关系
- DR与BDR----邻接
- DR与DRother---邻接
- BDR与DRother---邻接
- DRother与DRother----邻居
- OSPF条件匹配的情况
- 在以太网网络中-----必须进行条件匹配
- 在点到点网络中-----不需要进行条件匹配
- 条件匹配是属于非抢占模式-------一旦选举成功,不会因为新加入的设备而重新选举,若需要 重新选举,则重启OSPF
4. OSPF七种接口状态机
- Down:接口的初始状态。表明此时接口不可用,不能用于收发流量。
- Loopback:设备到网络的接口处于环回状态。环回接口不能用于正常的数据传输,但可以通过Router-LSA进行通告。因此,进行连通性测试时能够发现到达这个接口的路径。
- Waiting:设备正在判定网络上的DR和BDR。在设备参与DR和BDR选举前,接口上会启动Waiting定时器。在这个定时器超时前,设备发送的Hello报文不包含DR和BDR信息,设备不能被选举为DR或BDR。这样可以避免不必要地改变链路中已存在的DR和BDR。仅NBMA网络、广播网络有此状态。
- P-2-P:接口连接到物理点对点网络或者是虚拟链路,这个时候设备会与链路连接的另一端设备建立邻接关系。仅P2P、P2MP网络有此状态。
- DROther:设备没有被选为DR或BDR,但连接到广播网络或NBMA网络上的其他设备被选举为DR。它会与DR和BDR建立邻接关系。
- BDR:设备是相连的网络中的BDR,并将在当前的DR失效时成为DR。该设备与接入该网络的所有其他设备建立邻接关系。
- DR:设备是相连的网络中的DR。该设备与接入该网络的所有其他设备建立邻接关系。
5. OSPF工作过程
- OSPF协议启动后,路由器A向本地所有运行了OSPF协议的直连接口,使用组播地址224.0.0.5发送hello报文
- 该hello报文中携带了本地的全域唯一的RID值
- 以及自己已经知晓的邻居的RID(通过接收其他邻居的hello包来获取邻居的RID)
- 当对端路由器B接收hello报文中存在本地RID数值(路由器A),则进入2-way状态,且将与邻居的关系加入到邻居表中
- 此时,A与B建立邻居关系,并生成邻居表
- 邻居关系建立后,邻居之间进行条件匹配,匹配失败则停留在邻居关系,仅使用hello报文保活
- 若匹配成功,则可以开始建立邻接关系
- 开始建立邻接关系,首先使用未携带数据的DBD报文进行主从关系选举,主设备先进入下一个状态,从设备先发送下一个报文。之后使用DBD报文来共享LSA摘要信息。之后双方通过LSR、LSU、LSAck报文完成未知LSA的获取过程
- 完成本地数据库的搭建----LSDB
- 基于本地数据库中的LSA信息,通过算法SPF,计算出有向图和最短路径树,并计算所有到达所有节点的路由信息,将计算出的路由信息加载到OSPF路由表中
- 此时,路由器完成路由收敛工作
- 基于OSPF路由表以及其他协议路由表,共同选择出最优路由,并将最优路由加载到全局路由表中,以供后续指导数据包的转发过程
- 最后,使用hello报文进行周期保活,并且每30min进行一次链路状态刷新
6. OSPF基本配置
1.启动OSPF协议,配置进程号(仅具有本地意义),手工配置RID值
- 若没有配置RID值,则设备自动生成(环回接口最大IP>物理接口最大IP)
- [r1]ospf 1 router-id 1.1.1.1
2.划分区域
- [r1-ospf-1]area 0
3. 宣告:激活接口,发布拓扑或路由
- 宣告网段
- 范围宣告
- [r1-ospf-1-area-0.0.0.0]network 12.0.0.0 0.0.0.255
- 反掩码:32位二进制,使用点分十进制表示,由连续0+连续1
- 精准宣告---推荐
- [r1-ospf-1-area-0.0.0.0]network 12.0.0.1 0.0.0.0
- OSPF邻居表
- [r2]display ospf peer ---查看OSPF邻居
- [r2]display ospf peer brief ----查看OSPF邻居简表
- OSPF数据库表
- [r2]display ospf lsdb -----查看OSPF数据库表
- OSPF路由表
- [r2]display ospf routing ---查看OSPF路由表
- OSPF优先级====10
- 重置OSPF进程
- [r2]reset ospf 1 process
6.1 OSPF扩展配置
- 修改OSPF默认参考带宽
- [r2-ospf-1]bandwidth-reference 10000 -----修改参考带宽,两端均需要修改
- 修改接口优先级,从而干涉条件匹配
- [r1-GigabitEthernet0/0/0]ospf dr-priority 10 -----在接口修改优先级
- [r1-GigabitEthernet0/0/0]ospf dr-priority 0 ---优先级修改为0,代表放弃选举
- 手工汇总
- [r2-ospf-1-area-0.0.0.0]abr-summary 192.168.0.0 255.255.252.0
- 必须在ABR上配置
- 汇总的明细路由来源在那个区域,进入那个区域进行配置
- 缺省路由
- 在边界设备上
- [r1-ospf-1]default-route-advertise -----非强制性下发,要求边界路由器中存在缺省路由才可以下发
- [r1-ospf-1]default-route-advertise always -----强制性下发,不要求本地存在缺省路由
- 静默接口
- 不接受也不发送OSPF报文,与RIP的静默接口不同。
- [r3-ospf-1]silent-interface GigabitEthernet 0/0/1
- 接口认证
- [r1-GigabitEthernet0/0/0]ospf authentication-mode ?
- md5 Use MD5 algorithm -----MD5认证
- null Use null authentication -----不认证----OSPF默认情况
- simple Simple authentication mode ------简单认证----明文认证
- [r1-GigabitEthernet0/0/0]ospf authentication-mode md5 1(编号) cipher 123456
- 加快收敛
- [r3-GigabitEthernet0/0/0]ospf timer hello ? -------一端修改,另一端必须修改,若不修改,则会导致邻居关系无法建立。
INTEGER<1-65535> Second(s)
7. OSPF的接口网络类型
网络类型 | OSPF接口的工作方式 | |
---|---|---|
BMA | Broadcast |
|
P2P | P2P |
|
环回接口(虚拟接口) | P2P |
|
P2MP |
| |
NBMA(帧中继) | NBMA |
|
|
7.1 P2P(Point-to-Point 点对点)
-
只能建立一个邻居关系,不需要进行DR选举。Hello 10S;dead 40S
-
不进行DR选举——加速收敛
-
-
P2P指的是在一段链路上只能连接两台网络设备的环境,一根网线,一左一右。
-
该环境下只有2台设备,也只能是2台设备,链路中间不能加入其他设备。如,一条链路上不能加入交换机设备。
-
典型的例子是PPP链路。当接口采用PPP封装时,OSPF在该接口上采用缺省网络类型是P2P
-
P2P类型中,所有报文使用组播形式发送
注:
- Type:P2P---接口网络类型为P2P--此接口类型会将自己的邻居展示出来及--12.0.0.1
- cost=参考带宽/真实带宽=100/2.048=48--计算结果大于1时,cost只取整数部分
- 华为设备串口默认遵循E1标准=2.048Mbps
查看接口网络类型
- Poll--->轮询时间间隔
- 在NBMA网络上,当邻居失效后,路由器将按照设定好的轮询时间间隔定期发送hello报文。以检测邻居是否上线。
- 该时间在修改时最少为hello时间的四倍
- Retransmit--->邻居路由器重传LSA的间隔时间
- Transmit Delay--->LSA延迟时间
- 该字段是针对LSA设置的,因为OSPF网络需要保证全网的LSDB数据库相同,而LSDB数据库中的每一个LSA是具备一个老化时间参数的,该参数也需要统一。
- 而LSA在链路中传递时,老化时间不会改变,导致最终数据不统一。
7.2 P2MP(Point ti Multi-Point 点到多点)
- P2MP相当于将多条P2P链路的一段进行捆绑得到的网络。
- 没有一种链路层协议会被缺省的认为是P2MP网络类型。该类型必须由其他网络类型手动更改。
- 常用的做法是将非全连通的NBMA改为点到多点的网络
- P2MP可以建立多个邻居关系,不需要进行DR选举
- hello 30S,dead 120S。
7.3 BMA(Broadcast Multiple Access 广播多路访问)
- BMA也被称为Broadcast,指的是一个允许多台设备接入的、支持广播的环境。
- 需要进行DR选举 hello 10S;dead 40S
- 典型的例子是Ethernet以太网。当接口采用Ethernet封装时,OSPF在该接口上采用的缺省网络类型为BMA。
- BMA类型中,Hello、LSU、LSAck三种报文以组播形式通告,而其他报文以单播形式通告
7.4 NBMA(Non-Broadcast Multiple Access 非广播多路访问)
- NBMA指的是一个允许多台网络设备接入且不支持广播的环境
- 典型的例子是帧中继(Frame-Relay)网络
- NBMA,可以建立多个邻居关系,需要DR选举
- hello 30S,dead 120S
- 无法自动建立邻居关系
7.5 环回接口
- P2P
- 华为设备定义为P2P类型,而思科定义为loopback类型
- 环回接口默认学习32位主机路由
- P2MP
- 可以建立多个邻居关系,不需要进行DR选举
- hello 30S,dead 120S。
所有通过OSPF学习到的环回接口的路由,掩码信息均为32位主机路由。
------>因为环回接口是一个模拟的接口,实际上并没有连接用户,所以没有其余的IP地址存在于环回接口之下,只有一个可用IP地址,故而使用32位掩码来直接标识
------>避免了环路或者路由黑洞的产生
在OSPF中,环回接口的开销值恒定为0
OSPF组播地址:224.0.0.5
7.6 其它
#查看可以修改的网络类型
[AR1-GigabitEthernet0/0/0]ospf network-type ?
broadcast Specify OSPF broadcast network
nbma Specify OSPF NBMA network
p2mp Specify OSPF point-to-multipoint network
p2p Specify OSPF point-to-point network
#修改为P2P,重新建立邻居关系
[AR1-GigabitEthernet0/0/0]ospf network-type p2p
在条件匹配中,会存在一个waiting计时器,该计时器等于该接口的死亡时间,当该时间超时,则代表DR选举失败,此时接口认为自己为DR设备,并且进入exstart状态
中心
interface Tunnel0/0/0
ip address 192.168.4.7 255.255.255.0
tunnel-protocol gre p2mp
source 107.0.0.7
分支
interface Tunnel0/0/0
ip address 192.168.4.8 255.255.255.0
tunnel-protocol gre p2mp
source GigabitEthernet0/0/0
nhrp entry 192.168.4.7 107.0.0.7 register在公网中ISP设备中不需要运行OSPF
R7、8、9的物理出接口也需要宣告OSPF
[r7-Tunnel0/0/0]nhrp entry multicast dynamic
在点到点网络中,开销之为48(100/2.048)
华为将tunnel接口的传输速率定义为64Kbps
原因:这是因为华为想人为的将tunnel接口的开销值改大,从而让OSPF的选路尽量避开tunnel接口,而走其他接口。
- 因为隧道接口会进行封装和解封装操作,导致资源消耗增加,数据转发效率降低。
hub节点无法和spoke节点建立邻居关系
原因:因为hub节点无法发送OSPF报文,其原因在于在MGRE环境下,不允许组播行为出现,且hub节点发送的是单播报文,而hub节点的nhrp映射表中存在多个映射关系,无法选择,故数据报文无法发送-
- 解决方案:在hub节点开启伪广播功能,用单播实现组播行为
hub节点的tunnel接口此时在OSPF的工作模式为P2P,故只能存在一个邻居,而导致其他spoke节点无法与hub节点建立邻居关系
- 解决方案:将hub节点的接口网络类型进行修改
DR选举失败指的是Waiting计时器超时。而条件匹配失败,指的是建立邻居的双方没有任何一方是DR或BDR的身份
hub节点此时只能与一个spoke节点建立邻接关系,其他节点处于邻居关系
原因:在于此时的所有spoke节点都不需要进行DR选举,而hub节点需要进行选举,最终导致选举失败
- 解决方案:所有节点的接口网络类型均进行修改。
在Hub-Spoke架构中,只有中心节点可以连接每一个分支,而如果DR角色选举在spoke节点,就会导致LSA信息学习和分发不完整,导致全网路由学习缺
- 解决方案:干涉DR选举,将DR的位置固定在hub节点,让spoke节点放弃选举
P2MP环境下,OSPF会主动学习邻居设备接口的IP地址,且自动生成该IP地址所对应的主机路由信息。
OSPF接口的网络类型修改,是全局操作,所有设备均需要修改为相同类型。
总结:
- 在P2MP环境中,hello报文组播发送,其他报文单播发送。
- 在NBMA环境中,所有的OSPF数据报文均以单播形式发送。该环境中不允许组播或广播行为
- 故需要给每一台运行OSPF协议的设备手工指定其邻居IP地址,在OSPF进程中通过Peer IP命令,双方均需要配置。