一、OSPF概念
开放式最短路径优先(OSPF)是广泛使用的一种动态路由协议,它属于链路状态路由协议,具有路由变化收敛速度快、无环回路由、支持变长子网掩码(VLSM)和汇总、层次区域划分等优点。
每台运行了OSPF协议的设备均会共享自身的接口连接情况(LSA---拓扑信息),所以设备互相共享这些信息之后就可以获取到整个OSPF网络的拓扑信息,随之依靠SPF算法计算得出路由。
二、OSPF的特点
Eigrp RIP--距离矢量路由协议--共享路由表
动态协议--由运行同一种动态路由协议的路由器通过沟通协商最终计算得出的路由信息
特点:1.占用资源少 2.收敛速度快(拓扑结构发生变化重新收敛) 3.选路优
通过范围划分
外部网关协议---EGP BGP
内部网关协议---IGP---OSPF RIP ISIS EIGRP
根据协议本身的特点划分
有类别的动态路由协议:在传递路由信息时不携带子网掩码---RIPv1无类别的动态路由协议:在传递路由信息时携带子网掩码
RIPv1--采用广播的方式传递数据包
剩下所有的协议均使用组播发送自身的数据包(IGP)RIP---224.0.0.9
Ospf--224.0.0.5 224.0.0.6
RIP实际上只能适用在中小型网络环境---16跳的限制而OSPF能够适应中大型的网络环境
区域划分:OSPF为了适应中大型的网络环境采用了结构化部署的思想
区域ID--32位二进制组成,用点分十进制表示
标准的区域划分要求:
1.区域之间必须存在ABR设备
2.ABR设备—同时属于两个区域的设备---一台ABR设备可以同时属于多个区域
3.区域划分必须按照星形拓扑结构部署
一般把OSPF的中间区域称为骨干区域,=并且要求骨干区域的区域ID必须是0.0.0.0(area 0)
区域划分的类型:OSPF网络如果进行了区域划分,这样的网络称为多区域OSPF网络,如果没有进行区域划分称单区域OSPF网络
三、OSPF的数据包
OSPF的hello包作用:周期性的发现建立和保活邻居关系
周期保活---运行了OSPF协议的路由器会以10S为周期发送HEELO报文,hello报文中会携带本设备的RID,对端收到后就可以判断本设备存活,如果40s没有收到HEELO包,就认为该设备故障,会清空从该设备学到的LSA。
- OSPF的计时器
- hello时间--默认是10s/30S
- Dead-time死亡时间---默认是四倍的hello时间
RID---运行了OSPF的路由器设备为了区分和标识不同的路由器身份设计的路由器编号--本质是32位二进制,用点分十进制表示
获取R-ID的方式有两种
手工配置--由工程师自行配置,符合要求即
手工配置--由工程师自行配置,符合要求即可(IP地址格式,不能重复)
自动生成--设备会选择自身环回接口数值最大的作为自身的RID-如果设备没有配置环回会选择接口IP地址数值最大的作为RID
DBD包---数据库描述包:会携带数据库中收集到的LSA信息的摘要值LSDB--链路状态数据库--存储收集到的LSA信息
LSR--链路状态请求包
LSU-链路状态更新包
LSACK--链路状态确认包
四、OSPF的状态机
邻居建立的过程
当收到对端发送的hello报文中携带自身的RID,才可以进入2-way(确保hello报文的可靠传递,保证对端一定收到了我发送的hello报文)
2-way--必须收到对端发送的hello报文中携带本地的RID才可以进入该状态,该状态标志着邻居关系的建立
条件匹配——只有条件匹配成功的路由器才可以进入下面的状态,如果条件匹配失败则停留在邻居状态,仅使用hello包进行周期保活。
预启动状态--主从关系的选举--OSPF协议并不希望同时共享LSA信息,因为这样会在某一时刻很多设备同时共享这样会导致链路带宽被占用过多,导致数据传输收到影响
选举规则:会比较设备RID的大小,rid大的设备将成为主设备
进行主从关系选举的OSPF数据包是DBD包,并且该DBD包没有携带真正的LSA摘要信息
准交换状态---使用真正携带摘要信息的DBD包传递LSA摘要信息
五、OSPF工作过程
1.建立邻居:启动配置之后,ospf将向本地所有的运行了ospf协议的端口发送hello包(224.0.0.5),hello包中携带自己的RID用来区分不同路由器的身份(不携带路由信息),同时携带自己已知的邻居RID,之后会将这些RID存储在自己的邻居表中。
2.条件匹配:邻居表建立完成之后,会进行条件匹配,如匹配成功则开始进入下一个状态,如果匹配失败则会停留在邻居关系。---之后仅hello包进行保活。
3.如果匹配成功,则开始建立邻接关系-之后会使用未携带数据DBD包(并没有携带LSDB的摘要信息)进行主从关系的选举。主路由器会优先进入下一个状态,会优先发送摘要进行比对,比对之后,会请求自己本地没有的lsa信息。对端会发送真正携带lsa信息的LSU包,会利用LSACK进行确认。本地的链路状态数据库建立完成,生成本地链路数据库表。---Full
4.完成收敛----基于本地的链路状态数据库收集的lsa,根据自己的spf算法计算得出最短路径树。生成路由表。
5.收敛完成后,会使用hello包每10s发送一次,用来保活邻居关系。ospf会每30min进行一次周期更新。
相关配置
[r1]ospf 1 router-id 1.1.1.1---启动协议进程(进程号一致即可),建议手工指定设备的RID
[r1-ospf-1]area 0--创建区域--
[r1-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255--宣告(范围宣告)--利用反掩码(和掩码的规则相反,掩码为0的部分反掩码就为1,掩码为1的部分反掩码就为0)
[r1-ospf-1-area-0.0.0.0]network 12.0.0.1 0.0.0.0---精确宣告,相当于利用了反掩码的规则直接锁死一个IP地址(仅宣告接口对应的IP地址)
[r2]display ospf peer brief --查看OSPF邻居简表
[r2-GigabitEthernet0/0/0]ospf mtu-enable --OSPF协议默认是不进行接口MTU检测的,如果想要开启该功能需要手工配置。
[r2]display ospf peer---查看ospf邻居表详细信息
当网络结构发生变化(新增或者断开一些网段)OSPF会直接进行触发更新发生LSU数据包。
条件匹配---在一个广播域中需要选择一台路由器(DR)和剩下所有路由器建立邻接关系,同时需要选择一台备份设备,充当DR的备份,当DR设备出现故障需要行使DR的工作。
DR和BDR的选举规则:先看接口优先级,之后会根据设备的RID大小选择RID大的作为DR次大的作为BDR设备
[Huawei-GigabitEthernet0/0/0]ospf dr-priority 10---修改接口DR选举优先级,数值大的作为DR设备
OSPF的DR和BDR选举是非抢占的,简单来说就是DR和BDR选择出来之后,新加入设备不会抢占DR和BDR的身份
六、OSPF的数据报文
OSPF是一种跨层封装的协议,协议号是89没有传输层(减少封装和解封装的时间,加快收敛)
OSPF的公共头部所有OSPF报文均携带的信息
版本---表明是OSPFV2 还是OSPFV3
- 类型---标准该数据包是OSPF的哪一种数据包
- 1-hello包 2--dbd包 3-LSR 4-LSU 5-LSACK
认证类型:0 ---空认证 1-simple :简单认证(明文认证)2--MD5
报文长度---头部+数据包本身的数据量
网络掩码--接口发出hello时会携带该接口的掩码。
在建立邻居时会比较两端设备的掩码,如果掩码不一致则会导致建邻失败——注意:只有以太网链路才会检测掩码
hello时间和死亡时间,注意这两个参数如果两端对应不上也会导致建邻失败。
可选项-是OSPF的一些特性(OSPF的特殊区域的标记会在选项字段携带,如果字段不统一则会导致建邻失败)
路由器优先级---ospf dr-priority用来条件匹配选择DR设备的参数
指定路由器--DR的身份
备份指定路由器---BDR的身份(RID):注意在一个广播域中所有设备的DR和BDR的认知必须统一。
只有DR和BDR会监听224.0.0.6的组播地址
作用:
- 用来主从关系选举(没有携带lsa摘要信息的DBD报文)
- 用来减少OSPF重复更新,利用携带LSA摘要信息的DBD进行本地数据库比对
- 主从关系选举之后由主设备会主导后续的DBD报文交互的有序性(确保DBD报文的可靠传输)---隐性确认
接口最大传输单元:接口MTU值,[r2-GigabitEthernet0/0/0]ospf mtu-enable --OSPF协议默认是不进行接口MTU检测的,如果想要开启该功能需要手工配置。如果两端均开启了接口MTU检测功能如果接口MTU不一致会导致状态停留在预启动状态。
I:如果I为置为1则代表该DBD包是进行主从关系选举的DBD包M:MORE,如果M标志位置为1则代表本设备后续还有DBD报文需要发送,如果置为0则代表该数据包已经是最后一个DBD报文。
MS:标注该DBD报文是主设备发送的DBD报文
序列号的作用:隐性确认,去确保DBD报文的有序可靠传输
在华为体系下,是由从设备主动发送携带LSA-摘要信息的DBD包
LSR--链路状态请求报文
必须靠LSA的三元组才能唯一的标识一条LSA
数据包的五元组——数据的源IP地址 目标IP地址 源端口号 目标端口号 协议号
OSPF--LSACK的确认,是对每一条请求的LSA进行确认
七、OSPF接口网络类型
OSPF接口工作在不同的网络环境下工作方式有所区别
P2P--点到点网络
MA--多点接入网络
BMA--支持广播/组播
NBMA--只能单播
OSPF真实网络环境 | OSPF对应的接口网络类型和特点 |
BMA(以太网) | 类型:Broadcast 特点:需要进行DR和BDR的选举, Timers: Hello 10 , Dead 40 |
P2P点到点网络 | Type: P2P:特点:不需要进行DR和BDR的选举(条件匹配),Timers: Hello 10 , Dead 40 |
环回接口 | 虚拟接口,实际不会涉及数据包的收发,环回接口cost=0 |
MGRE | 隧道环境类型:OSPF中默认识别隧道接口的OSPF隧道接口类型为P2P,导致只能存在两台设备,在MGRE环境下,必须修改接口的工作方式使隧道接口可用识别多台设备 |
人为设计的接口网络类型 | 接口网络类型:P2MP,特点:不需要进行DR和BDR的选举,Hello 30 Dead 120 |
NBMA(帧中继) | timers:Hello 30 Dead 120 |
<r2>display ospf interface GigabitEthernet 0/0/0--查看OSPF接口网络类型的命令
OSPF的开销值计算公式=参考带宽(默认值是100MBPS)/真实带宽
如果算出来的值小于1则直接按1来算,如果大于1的小数,小数部分直接舍弃
[r2-ospf-1]bandwidth-reference --修改OSPF参考带宽的指令
OSPF协议在MGRE环境下的一些问题
问题1:只有中心获取到了一个分支的hello报文,分支之间没有获取到任何hello报文
原因:OSPFV2通过组播发送数据包,但是MGRE环境只能支持单播,所以必须在中心开启伪广播
[r1-Tunnel0/0/0]nhrp entry multicast dynamic
问题二:中心开启伪广播之后,中心和一个分支建立了邻接关系,但是分支之间没有信息,其次有一个分支只和中心保持init状态。
建议直接更改隧道接口的接口网络类型为P2MP,直接方中心和分支不进行DR和BDR的选举,就不会造成认知不统一的问题
P2mp---首先没有真实实际的网络类型是P2MP,是一种专门设计出来的网络类型
同时为了加快收敛,可以修改OSPF计时器[r1-Tunnel0/0/0]ospf timer hello 10
解决方法:[r1-Tunnel0/0/0]ospf network-type broadcast--需要修改OSPF协议在mGRE隧道接口下的默认接口网络类型为broadcast.
问题三:如果中心和分支的DR和bdr认知不一致会导致网络中一些由DR设备发送的LSA信息残缺,导致没有办法获取到完整的路由信息。
解决方法1:[r2-Tunnel0/0/0]ospf dr-priority 0--解决方法就是让分支设备放弃选举DR和BDR
解决方法2:[r1-Tunnel0/0/0]ospf dr-priority 10--让中心的设备接口DR选举优先级为最高。
P2mp---首先没有真实实际的网络类型是P2MP,是一种专门设计出来的网络类型
如果想要还原环回接口的默认掩码:[r2-LoopBack0]ospf network-type broadcast
Attempt---只有在NBMA环境下才会出现,等待对端也指定发送的对象
在NBMA环境下因为不支持组播报文,所以即时宣告了OSPF接口,接口依然没有办法发送hello(224.0.0.5是一个组播报文),所以必须手工指定建立邻居的对象IP地址
[Huawei-ospf-1]peer 12.0.0.2 --指定建邻的设备IP地址,双方都需要指定
八、OSPF--的不规则区域
OSPF为了适应中大型网络环境设计了区域划分的规则:
- 1.区域之间必须存在ABR设备
- 2.区域划分必须满足星形结构划分
OSPF的不规则区域:不连续骨干 远离骨干的非骨干区域
解决方法一:
- 1.物理连接一根线缆让远离骨干的非骨干区域直接连接到骨干区域中。
- 2.通过构建VPN隧道的方式去连接一根虚拟的线缆,将区域连接在一起
- 合法的ABR---同时属于多个区域,并且有接口宣告在区域0非法的ABR---同时属于多个区域,没有有接口宣告在区域0
- 非法的ABR---同时属于多个区域,没有有接口宣告在区域0
通过让没有连接到骨干区域的路由器,和区域0中的路由器连接隧道,并且将隧道宣告在区域0中使得,ABR设备合法化
问题1.会额外建立邻居关系,导致周期性的数据(hello报文)--需要通过隧道封装占用额外的资源
问题2.选路不佳
解决方法二:
OSPF为了解决不规则区域问题,专门提出了一个解决方案:V-link—虚链路
[r2-ospf-1-area-0.0.0.1]vlink-peer 4.4.4.4——必须在建立V-LINK链路的设备所在的区域中配置,注意:V-link peer 指定的是对端合法的ABR,同时合法的ABR设备也需要指定自身去认可的非法ABR设备
[r4-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2
问题:虚链路只能跨越一个区域,本质原因就是V-link指定的对象是一个设备的RID(不是IP地址)
问题,周期性的数据还是存在,因为V-LINK也会建立邻居
但是一般情况下V-LINK作为临时的解决方案
多进程双向重分布---
[r4]ospf 2 router-id 4.4.4.4--启动一个新的协议进程[r4-ospf-2】area 0
[r4-ospf-2-area-0.0.0.0]network 45.0.0.0 0.0.0.255
配置位置
ASBR---同时运行了两款协议的设备
1.ASBR上配置
- A-B
- [r4-ospf-1]import-route ospf 2---如果想要A协议获取到B协议的路由信息,进入A协议的进程中import-route引入B协议的路由即可
O_ASE --域外路由信息
Pre--域外路由的优先级默认是150---因为域外其他协议的情况不清楚,路由可靠性较低
-
九、OSPF--LSA
- LSA--链路状态通告(拓扑信息)
- LSDB--链路状态数据库
- SPF---计算得出路由
6类LSA--1、2、3、4、5、7
LSA头部
- 所有LSA都有的公共部分称为LSA的头部
- Type---类型字段(标注一条LSA的类型)
- LSID--链路状态ID(标识符),相当于一条LSA的名字
- ADV-router--通告路由器:产生并通告这条LSA的设备的RID,表明该LSA是谁发的
- 必须靠LSA的三元组才能唯一的标识一条LSA
- LS AGE---一条LSA的老化时间:默认一条LSA的最大老化时间是1800S等于OSPF周期更新的时间,当一条LSA老化时间达到1800s则会将该LSA从自身数据库中刷新。
- MAX-AGE最大老化时间---当OSPF周期跟新机制出现问题可能导致不能即时刷新lsa,则等待最大老化时间直接删除
LEN--lsa长度:整个LSA的大小
SEQ--LSA的序列号---主要用来做LSA的新旧判断。
0X80000001-0X7FFFFFFE----
当序列号到达0X7FFFFFFE时设备就知道后面没有序列号可用,则会直接将该LSA的老化时间设置为3600S,相当于清空整个OSPF网络设备中存储的该LSA,之后会立刻重新发送一条内容完全一致的LSA只不过序号刷新为0X80000001
序列号空间:
- 1.直线型序列空间
- 2.循环型序列空间
- 3.棒棒糖序列空间
-
LSA的类型 LSID ADV router的通告路由器 携带参数 传递范围 Router:type-1LSA 通告路由器的RID 谁发的该LSA,ADV-router=该设备RID 拓扑信息 在区域内部传递 Network----type-2LSA DR的IP地址 DR所在的路由器RID 1类LSA的补充 在区域内部传递 Sum-Net---type-3LSA 其他区域的目标网段 本区域相连的ABR的RID 其他区域目标网段信息 单区域 External---type-5LSA 域外网段的信息 ASBR设备的RID 域外网段信息 整个OSPF网络传递 Sum-Asbr---type-4LSA ASBR设备的RID 本区域相连的ABR的RID ASBR设备如何到ADV-router 除了和ASBR设备之间相连的区域
Router --1类LSA:传递拓扑信息使用的LSA每一台运行了OSPF协议的设备都会发送1类LSA
LINK--类型---根据OSPF接口网络类型关联
[r1]display ospf lsdb --查看OSPF链路状态数据库的命令
[r1]display ospf lsdb router 1.1.1.1---展开一条1类LSA的命令
Network ---2类LSA:在以太网中存在的LSA,作用:同样传递LSA(拓扑信息),是1类LSA的补充,补充了以太网中掩码和运行 OSPF协议的设备RID。
在以太网中仅靠1类LSA实际上并不能完整的获取到整个网络所有的拓扑信息:以太网配置的掩码/以太网中具体存在多少运行了OSPF协议的设备。
设备是根据区域存在LSA
Sum-Net--3类LSA
LinkState ID---192.168.3.1(链路状态ID实际上就是区域之间传递的目标路由信息的网段)
3.3.3.3--ABR路由器的RID,因为在区域之间只有ABR设备同时属于多个区域,路由信息才能通过ABR设备在区域之间传递
[r4]display ospf lsdb summary 12.0.0.0--展开一条三类LSA的命令
METRIC---实际上是ABR设备到达该网段的开销
OSPF协议最终加载路由表中的COST=METRIC+本设备到达ABR的开销
OSPF 区域之间访问过程 ——路由器想要访问其他区域的网段,首先必须利用12类LSA找到 ABR设备所在的位置,之后通过自身的SPF算法计算得出去往ABR设备的最短路径,之后下一跳就根据最短路径自动获取,之后数据包来到ABR设备,ABR设备可以依靠自身获取到的该目标区域1、2类LSA 利用SPF算法得出去往该网段的最短路径。
3类LSA在跨区域转发时,可能会经过多个区域的多个 ABR设备转发,每经过一个ABR设备的转发都需要更改通告路由器的RID
External---5类LSA---携带域外的路由信息
Type : External--5类LSA
Ls id : 172.16.0.0---域外的网段信息
Adv rtr :45.0.0.2 ---ASBR设备RID
<Huawei>display ospf lsdb ase 172.16.0.0 --查看5类LSA的命令
TOS 0 Metric: 1
因为不同协议开销值计算方法不一样,所以绝对不能直接使用源协议自带的coat值,所以OSPF针对域外路由信息定义了种子度量值
[Huawei-ospf-1]import-route rip cost 可以在重发布时人为修改如果布修改则默认是1
E type : 2
- 针对域外路由OSPF的Metric值设计了类型
- TYPE-1---种子度量值+设备到达ASBR的开销
- TYPE-2---所以设备到达目标网段开销均等于种子度量值
- Forwarding Address---在应对选路不佳情况下会重定向一个更加合理的IP地址
- [Huawei-ospf-1]import-route rip tag --在重发布时候对重发布的路由信息打上一个标记TAG
4类LSA
展开一条4类LSA的命令
<r2>display ospf lsdb asbr 5.5.5.5
除了和ASBR设备相邻的区域之外,每经过一个区域的转发会由本区域的ABR设备发送一条4类LSA,辅助其他区域的路由器找到ASBR设备的位置。
- Type : Sum-Asbr--4类LSA
- Ls id : 5.5.5.5---ASBR设备的RID
- Adv rtr : 3.3.3.3 ----每经过一个区域的转发会由本区域的ABR设备发送一条4类LSA
十、OSPF的优化
LSA的优化:1、汇总 2、特殊区域
1.汇总
域外路由手工汇总
- 配置位置是该区域对应的ABR设备的对应区域中配置
- [r1-ospf-1-area-0.0.0.2]abr-summary 1.1.0.0 255.255.252.0---网段汇总之后的结果(必须写汇总网段的真实掩码)
- 只有自己通告1-2类LSA计算出来的3类LSA才能被汇总
域外路由手工汇总
- 配置位置是ASBR设备的协议进程中配置
- [Huawei-ospf-1]asbr-summary 172.16.0.0 255.255.252.0汇总实质是对3类和5类LSA进行汇总
2.特殊区域
2大类
- stub区域—末梢区域的配置条件:
- 不能是骨干区域 不能存在虚链路V-LINK 不能存在ASBR设备[r6-ospf-1-area-0.0.0.2]stub ---配置进对应的区域敲STUB
- 注意:因为特殊区域的标记会影响建邻居,所以必须该特殊区域的设备都需要配置,否则无法建邻。
- 一旦将区域配置为stub区域,该区域将拒绝学习4类和5类LSA
Totally--stub完全末梢区域:配置位置只需要在ABR设备上配置
[r1-ospf-1-area-0.0.0.2]stub no-summary
- NSSA--7类LSA--非完全末梢区域
- 配置条件:
- 不能是骨干区域 不能存在虚链路V-LINK 必须存在ASBR设备
- [Huawei-ospf-1-area-0.0.0.1]nssa
注意:因为特殊区域的标记会影响建邻居,所以必须该特殊区域的设备都需要配置,否则无法建邻。
一旦将区域配置为nssa区域,该区域将拒绝学习4类和5类LSA同时由本区域的ABR设备生成一条7类缺省
因为NSSA区域拒绝了4类和5类LSA,就导致域外路由信息无法直接引入(域外是5类LSA),所以必须由ASBR设备进行5转7操作,之后因为普通区域(尤其骨干区域不能配置特殊区域)导致这些区域并不识别7类LSA,所以必须由本区域的ABR设备进行7转5LSA。
- Totally-NSSA -完全的非完全末梢区域
- 配置位置只需要在ABR设备上配置
- [r3-ospf-1-area-0.0.0.1]nssa no-summary
ABR设备拒绝3类LSA之后也会生成一条3类缺省,之后该区域的设备会学习3类缺省,域内>域间>域外