目录
2.广播型多路访问类型(Broadcast Multi-AccessBMA)
3.非广播型多路访问类型(Non-Broadcast Multi-Access,NBMA)
4.点对多点类型(Point-to-Multipoint,P2MP)
OSPF基础
oSPF(Open Shortest Path First,开放式最短路径优先)是IETF定义的一种基于链路状态(LS)的内部网关路由协议(IGP)。目前针对IPv4协议使用的是OSPF Version2(RFC2328)﹔针对IPv6协议使用OSPFVersion 3(RFC2740)。
基于SPF算法,以“累计链路开销"作为选路参考值
采用组播形式收发部分协议报文
支持区域划分
支持对等价路由进行负载分担
支持报文认证
OSPF的区域划分
OSPF为了适应中大型的网络环境,需要进行结构化部署----区域划分
我们把只有一个区域的OSPF网络成为单区域OSPF网络
我们把存在多个区域的OSPF网络成为多区域OSPF网络
区域划分的目的:
区域内部传递拓扑信息,区域之间传递路由信息。链路状态型协议的距离矢量特征
区域边界路由器---ABR
同时属于多个区域,一个接口对应一个区域,且至少有一个接口属于区域0(骨干区域)。
区域间可以存在多个ABR,一个ABR也可以对应多个区域
区域划分的要求:
1,区域之间必须存在ABR
2,区域划分必须按照星型拓扑结构划分----星型结构中间区域--骨干区域
为了方便管理,我们给每个区域增加一个ID作为标识
区域ID--- area lD由32位2进制构成
表示方法有两种
十进制表达
点分十进制表达
骨干区域的area ID为0。
OSPF数据包
hello报文:(Hello Packet)
用来周期保活的,发现,建立,周期保活邻居关系。(更新量很小,打个招呼
通过组播发出去的)o HELLO包设计的是默认10S发送一个
既然是保活,如果对面不回包,我们也会设置一个计时器来判断他是否还存在。这个计时器叫DEAD TIME。这个时间是4倍的hello time的时间,也就是默认40S。
RID ---为了标识网络中的每一台路由器
要求:
全网唯一
格式统一---都按照IP地址格式
配置方法
手工配置,只要满足两点要求即可王
自动配置
默认的就是优先在环回中选最大的IP(这里的最大就是单纯的IP数值最大),要是没有环回就选择接口IP中最大的。
DBD报文:(Database Description Packet)
数据库描述报文
里面携带的是路径信息的摘要(为了减少更新量,不会直接给邻居发TOPO,会把TOPO先做个目录,让邻居看看有哪些没有的。这个目录就是DBD数据库描述表
免重复更新,减少更新量的一个做法
LSR报文:(Link-state Request Packet)
链路状态请求报文
请求获取链路信息
基于未知的LSA信息查询。LSA叫做链路状态通告,简单理解就是链路状态信息的主要载体
LSU报文:(Link-state Update Packet)
链路状态更新报文
携带LSA信息的数据包。(真正提供更新的数据包)
LSack报文:(Link-state Acknowledgement Packet)
链路状态确认报文
确认包
OSPF的状态机
Two-Way——双向通讯状态——标志着邻居关系的建立
条件匹配——只有条件成功的设备,才能进入下一个状态,如果条件匹配失败,则停留在邻居关系,并通过Hello包每10S进行保活。
Exstart State——预启动状态
主从关系的选举——选举标准看RID的大小——错开发送数据包
区别状态
Loading——加载状态
full——标志着邻接关系的建立
只有邻接状态才真正共享LSA信息
OSPF的工作过程
建立邻居关系----启动配置完成后,OSPF将将本地所有运行了OSPF协议的接口,以组播224.0.0.5(目标IP)周期性的发送hello包,hello包中将携带自己本地的RID,邻居接收到对端的RID将会把这些信息存储在邻居表。
条件匹配:如果条件匹配成功则进入下一个状态,如果匹配失败则,停留在邻居关系。需要用hello包进行周期保活。
建立邻接关系:进行主从关系的选举,首先采用未携带真正的数据(真正LSA摘要)的DBD包进行选举----对比RID,RID大的作为主设备,后续将由主设备优先共享自己的数据库摘要信息,同时也将由主设备先共享自己的LSA信息。之后使LSR/LSU/LSACK获取本地未知的LSA信息,完成了本地lsdb的建立----形成本地链路数据库表。
完成收敛:基于自己本地的链路状态数据库,依靠OsPF算法形成有向图---最终计算得出路由----加载到自己本地的路由表中。
收敛完成后,将使用hello包周期保活,每30min进行周期更新(LSA有关)。
1.新增网段
直连新增网段的设备,直接使用更新包告知邻接关系接口;需要ack
2.断开网段
直连断开网段的设备,直接使用更新包告知邻接关系接口;需要ack
3.无法沟通
hello time 10S,dead time 40s;超时断邻,删除信息。
链路状态型的路由生成过程
1.运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系,然后彼此之间开始交互LSA (LinkState Advertisement,链路状态通告)。
2.每台路由器都会产生LSA,路由器将接收到的LSA放入自己的LSDB (Link State DataBase,链路状态数据库)。路由器通过LSDB,掌握了全网的拓扑。
3.每台路由器基于LSDB,使用SPF (Shortest Path First,最短路径优先)算法进行计算。每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树"。有了这棵"树",路由器就已经知道了到达网络各个角落的优选路径。
4.最后,路由器将计算出来的优选路径,加载进自己的路由表(Routing Table)。
四步
OSPF的基础配置
——配置进程id
1.启动OSPF进程配置RID
[R1]ospf 1 router-id 1.1.1.1—— 启动OSPF进程配置RID
2.创建区域
[R1-ospf-1]area 0——创建区域
3.宣告
[R1-ospf-1-area-0.0.0.0]network 1.1.1.0 0.0.0.255——范围宣告
0.0.0.255——反掩码(32位二进制构成,连续的0或连续的1构成)
掩码为1的部分是网络位,相当于不可变
反掩码0代表不可变,1代表可变
[R1-ospf-1-area-0.0.0.0]network 12.0.0.1 0.0.0.0——精准宣告,相当于只宣告一个IP
对R2
[R2]ospf 1 router-id 2.2.2.2
2.2.2.2是随便写的
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 12.0.0.0 0.0.0.255
[R2]display ospf peer ——查看邻居表
[R2]display ospf peer brief ——查看邻居简表
[R2-ospf-1]area 1
[R2-ospf-1-area-0.0.0.1]network 23.0.0.0 0.0.0.255
对R3
[R3]ospf 1 router-id 3.3.3.3
[R3-ospf-1]area 1
[R3-ospf-1-area-0.0.0.1]network 23.0.0.0 0.0.0.255
OSPF的开开销算法
参考带宽/真实带宽
参考带宽默认是100M
更改默认带宽的方法
[R3-ospf-1]bandwidth-reference 10000——配置命令
OSPF 协议三张表:
1.OSPF 邻居表
two-way 邻居
full 邻接
2.OSPF LSDB表
LSDB链路状态数据库:包含了所有的LSA
3.OSPF路由表
华为中环回接口的开销值默认为0
1.1.1.1/32 主机路由 将环回路由自动变为主机路由
还原接口的真实网络掩码:
查看:
查看带宽
display ospf interface g0/0/0
条件匹配
DR——指定路由器(指的是接口)
DR和其他广播域内所有的路由器均建立邻接关系
BDR——备份指定路由器—和其他所有路由器都处于邻接状态
DRother——一个广播域,其他路由器,除了DR和BDR的其他路由器才处于邻居状态
会选择广播域中RID最大的作为DR,RID次大的成为BDR,剩余设备为Drother
DR和BDR的选举是非抢占的
选举时间最大是死亡时间
Priority:1——DR的优先级,数值大的成为DR
[R1-GigabitEthernet0/0/0]ospf dr-priority 0——改变优先级,干涉DR和BDR的选举,0代表不参选
<R1>reset ospf process ——重启ospf进程
注意两点:
在一个MA网络中,DR和BDR都存在的情况下,至少需要4台路由器才能看到邻居关系
DR/BDR实际是一个接口的概念。
OSPF数据报文格式
我们在基础知识中提到了OSPF协议总共是通过五种数据包进行数据交互的,我们下来就先分别看下这五种数据报文的格式。
首先,OSPF是一个跨层封装的协议,他是没有四层封装的,也就是说,ospf的报文内容是直接包含在IP协议的数据内容当中的。所以,ospf需要一个协议号用来替代端口号的作用,来标定协议。ospf的协议号是89。
我们之前在基础知识中已经了解了,ospf报文一共分为五种。分别是hello报文,DBD报文,LSR报文,LSU报文以及LSAck报文。这五种报文其作用和应用场景都不相同,所以,我们需要分别关注下这五种报文的结构。
OSPF数据包头部
OSPF头部指的是所有五种OSPF数据包都包含的公共参数部分。头部长度为24个字节。
hello包
hello报文是学习的关键,因为hello报文可以完成周期性的发现,建立以及保活邻居关系。包括DR和BDR的选举。其功能比较丰富,并且,在完成邻居关系建立时〈(所谓建立过程,其实就是参数协商的过程),hello包中的—些参数对不上,将会影响邻居关系的建立,这点需要额外的关注。
限制邻居关系建立的参数
1.子网掩码
2.hell时间
3.dead时间
4. ospf特殊区域的标记
5.认证
DBD包
数据库描述报文,作用有两个:
使用未数据的DBD包进行主从关系选举;
使用携带数据的DBD包进行目录信息共享。
LSR包
链路状态请求报文---基于DBD包请求本地未知LSA信息
链路状态类型,链路状态ID,通告路臾器----“LSA三元组”---通过着三个参数可以唯一的标识出一条LSA。
LSU包
链路状态确认报文---完成显性确认工作
LSACK包
链路状态确认报文---完成显性确认工作
OSPF的接口网络类型
OSPF的许多功能或特性都是基于接口实现的,当一个按口派泊代RN民矶表、会维护许多OSPE变重,例如只从汝八rTrne)也是其中之一,而且是一个非常重要的认证类型等,接口的网络类型(Network-Type)也是其中之一,而且是一个非常重要的变量。OSPE接口的网络类型与该接口采用的数据链路层封装有关,在不同网络类型的接口上OSPF 的操作有所不同。
1.点对点类型(Point-to-Point,P2P)
点到点网络指的是在一段链路上只能连接两台路由器的环境。一个典型的例子是PPP链路,当两台路由器通过PPP链路直连时,设备接口上采用的封装协议就是PPP,当这个接口激活OSPF后,OSPF会自动根据该接口的数据链路层封装将其网络类型设置为P2P。另外,当接口采用HDLC封装时,其OSPF网络类型缺省也为P2P。OSPF在网络类型为P2P的接口上以组播的方式(相应的组播IP地址为224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文以及LSAck报文)。缺省情况下,P2P类型的接口以10s为间隔周期性地发送Hello报文。
OSPF在P2P类型的网络中不会选举DR及 BDR敦活×
2.广播型多路访问类型(Broadcast Multi-AccessBMA)
BMA(或者称为Broadcast)是一个支持广播的网络环境,该网络允许多台路由器接入,任意两台路由器之间都能直接进行二层通信,一台路由器发送出去的广播数据会被所有其他的路由器收到。以太网
(Ethernet)是典型的广播型多路访问网络。
OSPF在BMA类型的接口上通常以组播的方式发送Hello报文、LSU报文及LSAck报文,以单播的形式发送DD报文及LSR报文。当使用组播的方式发送协议报文时,有两个组播地址可能会被使用到——224.0.0.5及224.0.0.6。当路由器需要向DR以及BDR发送OSPF 报文时,使用224.0.0.6这个组播地址作为报文的目的P地址;当需要向所有的OSPF路由器发送报文时,使用224.0.0.5。缺省情况下,Broadcast类型的接口以10s为间隔周期性地发送Hello报文。
3.非广播型多路访问类型(Non-Broadcast Multi-Access,NBMA)
NBMA网络也允许多台路由器接入,但是该网络不具备广播能力,正因为如此,基于组播发送的Hello报文在NBMA网络中可能就会遇到问题。在这种场景中,为了让OSPF路由器之间能够顺利地发现彼此并且正确地建立邻接关系,还需要进一步的配置,例如使用单播的方式来发送OSPE报文等。NBMA网络的一个最为大家熟知的代表是帧中继(Frame-Relay),另一个例子是X.25。OSPF在 NBMA网络中,也会进行DR及BDR的选举。缺省情况下,NBMA类型的接口以30s为间隔周期性地发送Hello报文。
4.点对多点类型(Point-to-Multipoint,P2MP)
与前面介绍的几种网络类型不同,P2MP并非路由器根据接口的数据链路层封装自动设置的,而是必须通过网络管理员手工指定的。P2MP有点类似于将多条P2P链路的一端进行捆绑得到的网络。在P2MP网络中无需选举DR、BDR。OSPE在P2MP类型的接口上通常以组播的方式发送Hello报文,以单播的方式发送其他报文缺省情况下,Hel1g报立的发送间隔为30s。
注意:两个路由器的直连接口即使网络类型不匹配,也能够建立起OSPF邻接关系,但是OSPF路由的计算却是极有可能出现问题的,这是因为接口的网络类型会影响到路由器产生的LSA中对该接口的描述,而这将关系到路由器对网络拓扑的理解以及路由的计算。因此,OSPF邻居的互联接口网络类型必须一致。
OSPF的不规则区域划分
我们知道,OSPF区域划分需要遵循两个要求:
1,区域之间存在ABR
2,区域必须按照星型拓扑结构。即所有区域要于骨干区域相连,否则,ABR将不会帮忙转发区域间的路由信息。
而我们不规则区域就是讲的是,如果区域划分没有按照星型拓扑结构来布置,该如何实现通讯。
不规则区域主要有两种情况:
1,远离骨干的非骨干区域。
2,不连续骨干区域。--两种方法解决方案类型,我们主要研究第一种原理骨干的非骨干区域即可。
远离骨干的非骨干区域
图中绿色区域就是远离骨干的非骨干区域,这样就算绿色区域和红色区域之间存在ABR,这个ABR也是非法的ABR,他无法去传递左右两边的路由信息,导致两边孤立了。
解决方案(三种,推荐后两种)
使用tunnel隧道
在AR4和AR2之间构建一条隧道,之后,将这个隧道宣告到区域0中,相当于将AR4非法的ABR合法话,则AR4将正常传递区域2和区域0,1之间的路由信息。
注意:在这个环境中,在没有隧道之前,AR4可以通过AR2转发的路由信息学习到达区域0的路由,而存在隧道之后,AR4可以直接通过隧道学习到区域0的拓扑信息。而AR4会优先选择自己通过拓扑信息学来的路由信息,就算是开销值巨大。
使用VPN隧道解决不规则区域的问题:
1.可能造成选路不佳;
2.可能造成重复更新;
3.因为虚拟链路的存在,AR2和AR4之间也需要建邻。导致他们之间维护的周期性数据将穿越中间区域区域1,导致中间区域的资源消耗。
(这种方法因为问题很多,所以在工程中几乎见不到,所以,因为其思考难度较低,仅作为了解,不推荐使用。)
使用虚链路
虚链路是OSPF针对不规则区域提出的一种解决方案,也被称为虚连接。
虚连接可以在任意两个ABR上建立,但是要求这两个ABR都有端口连接到一个相同的非骨干区域。
[r4-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2---虚链路的配置方法,后面跟需要创建虚链路设备的RID。
注意:虚链路的建立是双向的。---虚链路永远属于骨干区域。
使用虚链路解决不规则区域的问题:
1.因为虚链路的存在,AR2和AR4之间也需要建邻。导致他们之间维护的周期性数据将穿越中间区域区域1,导致中间区域的资源消耗。
2.虚链路只能穿越1个区域
使用多进程双向重发布
先说下多进程,我们在创建ospf进程的时候都会增加一个进程号,主要就是用来区分不同的进程的,各个进程是彼此独立的,信息是没有办法互通的。
因为不同的路由协议运行的机理各不相同,包括对路由的理解也不同,所以,不同的路由协议包括不同进程之间存在信息隔离。
重发布就是在运行不同协议或不同进程的边界设备(ASBR.---自治系统边界路由器,协议边界路由器)上,将一种协议按照另一种协议的规则发布出去。--- ASBR设备要求必须存在重发布行为才行。
在这个场景下,我们可以让AR4充当ASBR的角色,在其上运行两个OSPF协议。然后利用重发布进行共享。然后在R4上把区域2的信息宣告在ospf 2进程中。
这是双向重发布,这样即不会出现选路不佳,也没有周期性数据,所以,使用最广。
不连续骨干
还有一种特殊区域是---不连续骨干区域。其场景类似于下:
(其解决方案也可以使用如上三种方法)
LSA头部
LSA头部一共20byte,每个字段的含义如下。
链路状态老化时间(Link-State Age):指示该条LSA的老化时间,即它存在了多长时间,单位为秒,这是一个16bit的整数。当该LSA被始发路由器产生时,该值被设置为0,之后随着该LSA在网络中被泛洪,它的老化时间逐渐累加。当某台路由器将LSA存储到自己的LSDB后,LSA的老化时间也在递增,一般情况下,LSA的老化时间应该小于1800S(因为oSPF每1800s会进行一次周期更新。)为了防止老化时间无限制的增长,我们设计了一个最大老化时间-- MAX age --- 3600S ----当一条LSA的老化时间到达最大老化时间时,将被认定失效,将从本地的LSDB中删除掉。
可选项(Options):总共8bit,每一个比特位都对应了OSPF所支持的某种特性。---和hello包中的一样,包含特殊区域标记
链路状态类型(Link-State Type):指示本条LSA的类型。OSPF定义了多种类型的LSA,每种LSA用于描述OSPF网络的某个部分,所有的LSA类型都定义了相应的类型编号。
链路状态ID(Link-State ID): LSA的标识。不同的LSA类型,对该字段的定义是不同的。
通告路由器(Advertising Router):产生该LSA的路由器的Router-lD。
链路状态序列号(Link-Sate Sequence Number):该LSA的序列号,该字段用于判断LSA的新旧或是否存在重复。32位二进制构成,由8位16进制来表示---一台路由器,每发送同一条LSA信息,则将携带一个序列号,并且序列号依次加1。
序列号空间中
直线型序列空间---从最小值开始一直到最大值,依次加1,新旧关系容易判断,但是数量有限。若超出上限,则将无序号可用,导致新旧关系无法判断。
循环型序列空间---序号可以循环使用,不会出现序号使用完的情况,但是若两个序号差值比较大的时候,可能会导致新l旧关系无法判断。
棒棒糖型序列空间--- OSPF使用的就是这种序列空间,但是,其进入循环部分后,依旧会面临循环型序列空间的问题,所以,OSPF要求其不能进行循环,相当于是一个直线型序列空间,其取值0X80000001 - 0X7EEEEEEE。
序列号刷新方法:
OSPF刷新序列号空间的方法:当一条LSA信息的序列号达到0x7EFFFEFE是,发出的路由器会将他的老化时间改为3600S,其他设备收到这条LSA信息后,会根据序号判断这是一条最新的LSA信息,将改信息刷新到本地LSDB中。之后,因为这条LSA信息的老化时间达到3600S,则将这条LSA信息删除掉。始发的路由器会再发送一条相同的LSA信息,其序列号使用0x8000000.1,其他设备收到后将会把最新的LSA信息刷新到LSDB中,则刷新了序列号空间。
链路状态校验和(Link-State Checksum):校验和。校验和也会参与LSA的新旧比较。当两条LSA三元组相同,并且序列号也相同时,则可以使用校验和比较,校验和大的认定为新。
长度(Length): LSA的总字节长度。
每个LSA头部中的"链路状态类型""链路状态ID""以及“通告路由器"这三个字段唯一地标识了一个LSA。当然,在同一时间有可能在网络中会出现同一个LSA的多个实例,那么LSA头部中的"链路状态老化时间""链路状态序列号"及"校验和"字段就可以用来判断实例的新旧。接下来,我们可以去看下具体种类的LSA,我们可以通过搭建如下的拓扑来观察各个种类的LSA格息。
Type-1LSA
部署R1和R2,之后在点到点环境中运行OSPF协议,之后观察设备上的LSDB数据库,我们可以发现,其中仅存在─种类型的LSA,其Type名称为Router,此类LSA便是1类LSA。
路由器通过该LSA描述自己”家门口的状况"。每一台运行OSPE的路由器均会产生Type-1 LSA,该LSA描述了路由器的直连接口状况和接口Cost,同属一个区域的接口共用一个Type-1 LSA描述,当路由器有多个接口属于不同区域时,它将为每个区域单独产生一个Type-1 LSA,并且每个LSA只描述接入该区域的接口。另外,Type-1.LSA中也包含着一些特殊的比特位,用于指示该路由器的特殊角色,例如该路由器如果是ABR、ASBR或者是Virtual Link的端点,则这些比特位就会进行相应的置位。
对于Router LSA而言,LSA头部中的"链路状态类型"字段的值为1,"链路状态ID"字段的值是产生这个Type-1 LSA的路由器的Router-lD。
V位(Virtual LinkEndpoint Bit):如果该比特位被设置为1,则表示该路由器为Virtual Link的端点。
E位(External Bit):如果E比特位被设置为1,则表示该路由器为ASBR。在Stub区域中,不允许出现E比特位被设置为1的Type-1 LSA,因此Stub区域内不允许
出现ASBR。
B位(Border Bit):如果B比特位被设置为1,则表示该路由器为两个区域的边界路由器,字母B意为Border(边界)。不规则区域里,边界路由器产生的Type-1 LSA会将B比特位设置为1,即使它没有连接到Area0。
链路数量(Links Number): 该Type-1 LSA所描述的Link(链路)数量。我们已经知道每台路由器都会产生Type-1 LSA,而且该LSA描述了路由器直连接口的状况和Cost值,实际上路由器正是采用包含在Type-1 LSA中的Link来描述直连接口的。"链路数量"字段指明在该Type-1 LSA中,包含了几条Link。每条Link均包含"链路类型""链路ID""链路数据"以及"度量值”这几个关键信息。路由器可能会采用一个或者多个Link来描述某个接口。----这个LINK就是描述接口情况的参数。
链路类型(Link 'lype):本条Link的类型值,该值与Link的类型相关。前面的章节提到OSPF定义了多种网络类型(Network Type): P2P、P2MP、Broadcast以及NBMA,当一个接口激活OSPF后,OSPF 会根据这个接口的封装协议来判断接口运行在什么类型的网络上。另一方面,OSPF在其产生的Type-1 LSA中使用Link来描述自己的直连接口的状况,OSPF定义了多种链路类型,这些链路类型与接口的网络类型也是有关的。需要格外注意的是,OSPF的网络类型与链路类型是不同的概念,大家不要搞混淆。
(这里展示的是1类LSA根据连接的网络,定义的几种LINK类型,及其参数的取值方法)
链路ID(Link ID):Link的标识,不同的链路类型,对链路ID值的定义是不同的。
链路数据(Link Data):不同的链路类型对链路数据的定义是不同的。
度量值(Metric):Cost值。
注意:由于TOS及TOS度量值在RFC2328中不再支持(这些字段被保留仅是为了兼容早期的OSPF版本)。
这里可以根据LINK的描述,将拓扑结构进行还原。(这个过程这里不做描述)
Type-2LSA
继续扩大网络拓扑,添加R3,运行QSPE,之后我们观察设备上的LSDB,我们发现,除了有之前见过的1类LSA之外,还存在一种新的LSA,其名称为Network,这样的LSA我们称为2类LSA。
经过Type-1 LSA的泛洪,区域内的路由器已经能够大致地描述出本区域内的网络拓扑,但是,要想完整地描述区域内的网络拓扑结构及网段信息,光有Type-1 LSA是不够的,留意到如果路由器的接口接入一个MA网络并且在该网络上存在形成了邻接关系的邻居,则用于描述该接口的Link的链路类型为2,链路ID为DR的接口IP地址,而链路数据为本路由器接口的IP地址,但是这个MA网络的掩码呢?有多少路由器连接在这个MA网络上呢?这些信息暂时还是未知的(至少通过Type-1 LSA还无法知晓)。因此就需要用到Type-2 LSA了。
在MA网络中,OSPF会选举DR及BDR,所有的DROther路由器都只能和DR及BDR建立邻接关系,DROther路由器之间不会建立全毗邻的QSRE邻接关系。DR会在本区域内泛洪Type-2-LSA,来列举出接入该MA网络的所有路由器的Router-ID(其中包括DR自身),以及这个网络的掩码。因此 Type-2 LSA仅存在于拥有MA
网络的区域中,该LSA由DR产生。
(2类LSA报文结构)
在Type-2 LSA中,LSA头部中"链路状态类型字段的值为2,“链路状态ID"字段的值为产生这个Type-2 LSA的DR的接口P地址。
网络掩码(Network Mask):该MA网络的网络掩码。
相连的路由器(Attached Router)的 Router-lD:连接到该MA网络的路由器的Router-lD(与该DR建立了邻接关系的邻居的Router-lD,以及DR自己的Router-ID),如果有多台路由器接入该MA网络,则使用多个字段描述。
2类LSA虽然简单,但是也不可或缺,和1类LSA一起,将所谓的"拓扑信息"描述完整了。之后的LSA传递的均为路由信息。
Type-3LSA
因为1类和2类LSA已经可以将区域内部的拓扑信息携带完整了,所以,想要看到其他携带路由信息的LSA,则必须创建多区域才行,因为区域之间才传递路由信息。所以,我们可以在R3后面再添加R4,之后,将R3和R4连接的接口及R4所有接口宣告在区域1中。之后,我们观察设备的LSDB数据库,发现,里面除了有1类2类LSA之外,还存在很多条,名称为Sum-Net的LSA,这些LSA就是我们说的3类LSA。
Type-3 LSA 也就是网络汇总LSA(NetworkSummary LSA),这里的“汇总"二字,其实理解为"归纳′更为贴切,它和路由汇总是完全不同的概念。Type-3 LSA是由ABR产生的,用于解决区域之间的路由传递问题。由于ABR同时连接着非骨干区域以及Area0,因此它分别为这些区域维护着LSDB并且计算出到达直连区域的区域内部路由,它向某个区域注入Type-3 LSA,以便向该区域通告到达其他区域的区域间路由。
(3类LSA报文结构)
在Type-3 LSA中,“链路状态ID"字段的值为区域间路由的目的网络地址,其他字段及其含义如下。
网络掩码(Netmask):区域间路由的目的网络掩码。
度量值(Metric):路由的Cost。
3类LSA传递的是域间路由信息,主要携带的是目标网段信息和开销值。目标网段信息通过LS ID来进行携带,里面也会包含其掩码信息。其中的开销值指的是通告者到达目标网段的开销值。--这个开销值计算是一个重点,所以,可以根据拓扑结构进行分析计算。
注意:3类LSA传递路由信息的玩法有点类似于距离矢量型协议的玩法,通告者就是到达目标网段的下一跳。所以,这里有个很重要的点,就是,我们设备在接收到3类LSA之后,需要根据1类和2类LSA计算的拓扑信息来寻找三类LSA的通告者。(准确的说,所有传递路由信息的LSA都需要通过1类和2类LSA去寻找通告者的位置。),如果,通告者是所在区域的ABR设备,那自然是可以寻找到的。但如果不是,则需要转换通告者。
例如,我们在R1后面再加入一个R5,按照拓扑所示划归到区域2中。则我们观察R5的LSDB,我们可以发现区域1里的路由信息到达区域2后,通告者就不再是始发的R3了,而是转换成了B1。说明3类L.SA的传递范围进行ABR相邻的单区域,跨区域传递的时候,需要进行通告者的转换。(通告者变了,则将不是同一条LSA了)
Type-5LSA
有了三类LSA之后,多区域OSPF网络中的路由信息也可以正常传递了,想要看到更多的LSA类型,则将需要继续扩展我们的拓扑,需要再R4后面再增加一个环回网段,将该网段宜告在RIP中,模拟其他网络。之后将RIP中的路由信息通告到OSPF中,我们看下这些域外的路由信息该如何传递。
之后,我们观察设备的LSDB,可以发现,里面除了前面说过的三种LSA之外,还存在一种叫做External的LSA,我们将他称为5类LSA。
5类LSA主要任务就是传递域外的路由信息,这种类型的LSA一旦被产生后,会在整个OSPF域内传播(除了一些特殊区域)。Type-5 LSA也就是AS外部LSA(AS External LSA)。
(5类LSA的报文结构)
对于Type-5 LSA,“链路状态ID"字段的值是外部路由的目的网络地址。其他主要字段的描述如下。
网络掩码(Netmask):外部路由的目的网络掩码。
度量值(Metric):该外部路由的Cost。5类LSA中携带的时域外的路由信息,通过重发布导入到OSPF网络中,因为不同协议对开销值的度量标准不同,所以,在路由导入之后,我们将直接舍弃该路由在原网络中的开销,之后,给给路由赋予一个规定值--- seed-mertic种子度量值。
OSPF默认的种子度量值为1,这个值可以在重发布过程中进行修改。
[r4-ospf-1]import-route rip 1 cost 2——修改
E位:用于表示该外部路由使用的度量值类型。OSE定义了两种外部路由度量值类型,分别是Metric-Type-1和Metric-Type-2I如果该比特位被设置为1,则表示外部路由使用的度量值类型为Metric-Type-2,如果该比特位被设置为0,则表示外部路由使用的度量值类型为Metric-Type-1。
TYPE 1 ---如果E位置0,则代表使用类型1。如果使用的是类型1,则所有设备到达域外目标网段的开销值为本地到达发出这条LSA的ASBR的开销值再加种子度量值。
TYPE2---如果E位置1,则代表使用类型2。默认使用类型2。如果使用类型2,则域内所有设备到达域外目标网段的开销值都等于种子度量值。
开销值类型也可以再重发布时进行修改
[r4-ospf-1]import-route rip 1 type 1——修改
转发地址(Forwarding Address,FA):当FA为0.0.0.0时,则到达该外部网段的流量会被发往引入这条外部路由的ASBR。而如果FA不为0.0.0.0,则流量会被发往这个转发地址。FA这一概念的引入,使得OSPF在某些特殊的场景中得以规避次优路径问题。
以上图所示的场景为例,R1、R2及R3三台路由器连接在同一台以太网二层交换机上,三台路由器的接口IP地址均在相同网段上,R1及R2为OSPF路由器,双方都在自己的GE0/0/0接口上激活OSPF,而R3并不运行OSPF,它只是与R1通过RIP交互路由信息,R3将3.0.0.0/8路由通过RIP通告给R1。为了让整个OSPF网络能够动态地学习到3.0.0.0/8路由(图中省略了OSPF网络中的其他路由器),R1将RIP路由引入到OSPF,3.0.0.0/8路由被引入后,以Type-5 LSA的形式在整个OSPF域内泛洪。当OSPF域内的路由器收到去往3.0.0.0/8的数据包时,它们会将数据包发往引入这条外部路由的IASER——R1。以R4为例,它将发往这个目的网段的数据包转发给R2,而R2则将数据包转发给R1,再由R1将数据包转发给R3。看到这里您可能已经发现,其实数据包完全活没有必要经由R1转发到R3——-这是典型的次优路径,为何不直接从R2转发给R3呢?
这种场景下,就会将最佳的路径通过FA地址来进行携带,之后,设备在转发时将不再寻找通告者而是在路由表中递归查找FA中的地址进行转发。
外部路由标记(External Route Tag):这是一个只有外部路由才能够携带的标记,常被用于部署路由策略。举个例子,假设我们在OSPF域外有两种业务:办公及生产,现在ASBR把这两种业务各自的路由都引入OSPF,用于描述这些外部路由的Type-5 LSA将在整个OSPF域内传播,现在如果需要在域内某个位置部署路由策略,分别对这些办公及生产的路由执行不同的策略,那么首先就要区分这些路由,如果单纯通过路由的目的网络地址及网络掩码进行区分显然是不够便捷的。而如果在ASBR上引入这些外部路由时,就分别为生产及办公路由打上相应的标记,那么在域内执行策略的时候就可以直接对相应的标记进行路由匹配,从而使得路由策略的部署更加方便。在华为的路由器上,缺省时该字段值被设置为1。
在重发布过程中可以打标签
[r4-ospf-1]import-route rip 1 tag
Type-4LSA
前面说的所有传递路由信息的LSA都需要通过1类和2类L.SA进行验算(寻找通告者),5类LSA是全OSPF区域传递的,处理ASBR通过者所在的区域可以通过1类和2类LSA进行验算,其他区域都无法验算通告者的位置,所以,需要引入4
类LSA来辅助寻找ASBR通告者的位置。
所以,我们观察拓扑,发现除了区域1以外,其他区域设备的LSDB中都出现了一个名为Sum-Asbr的LSA,这个就是4类LSA。
Type-4 LSA被称为ASBR汇总LSA(ASBRSummary LSA),由ABR产生,实际上是一条到达ASBR的主机路由。Type-4LSA的格式与Type-3 LSA是一致的。在Type-4 LSA中,“链路状态ID"字段的值是ASBR的Router-ID,而且网络掩码"字段的值为全0,另外,“度量值"字段填写的是该ABR自己到达ASBR的Cost值。---和3类LSA比较相似,只不过通告的不是目标网段,而是ASBR。
Type - 7LSA
(这个可以后面讲完特殊区域之后再讲,为了章节的完整性,将该内容添加于此)
Type-7 LSA也就是非完全末梢区域外部LSA(Not-So-Stubby Area External LSA)。这是一种特殊的LSA,也是用于描述OSPF外部路由,并且其报文格式与Type-5 LSA一致,但是它的泛洪范围却是有严格限制的―一它只能够在NSSA(Not-So-Stubby Area,非完全末梢区域)内泛洪,并且不能进入Area0.
7类LSA相当于是5类LSA在NSSA区域中的一个马甲,其内容和5类LSA基本相同。
7类LSA生成路由信息的标记位,O_NSSA,优先级为150。
有一点需要说明一下,就是7类LSA中的FA地址和5类的用法不太一样。(但是效果是类似的)
Forwarding Address---转发地址---应对选路不佳的情况,如果存在选路不佳的情况,则通告者将会把最佳的下一跳放入转发地址当中,接收者看到转发地址中存在数据,则将不按照算法来计算下一跳,而直接使用转发地址作为下一跳。在5类LSA中,默认情况下,在不存在选路不佳时,将使用0.0.0.0进行填充。
而在7类LSA中,一般会使用通告者(ASBR)设备的环回接口地址作为转发地址。如果存在多个环回接口,则将使用最先宣告的地址作为转发地址;如果没有环回接口,则将使用物理接口的地址作为转发地址。
OSPF的优化
OSPF的优化主要目的是为了减少LSA的更新量。而可以实现这效果的有两种手段--1,路由汇总(可以减少骨干区域的LSA更新量);2,做OSPF特殊区域(可以减少非骨干区域的更新量)
OSPF的汇总
OSPF的汇总不同于RIP的接口汇总,而称为区域汇总。因为OSPF在区域之间传递的是路由信息。
而区域汇总又可以分为两部分---1,域间路由汇总;2,域外路由汇总
域间路由汇总
域间路由汇总---实质上是通过在ABR设备上对区域之间传递的三类LSA进行汇总
[r1-ospf-1-area-0.0.0.2]abr-summary 192.168.0.0 255.255.252.0
注意:域间路由汇总只能汇总ABR设备自身通过1类,2类LSA信息学习到的路由信息。
域外路由汇总
域外路由汇总---其实质是在ASBR上,通过重发布,将导入的5类/7类LSA进入到OSPF网络后进行汇总。
[r4-ospf-1]asbr-summary 172.16.0.0 255.255.252.0
注意:5类LSA汇总之后的开销值计算方法:
Type 2 ---汇总网段的开销值等于所有明细路由开销值中最大值加1。
Type 1 ---汇总网段的开销值等于所有明细路由开销值中最大值。
OSPF的特殊区域
OSPF的特殊区域人体上可以分为两大类,四小类。
设置成第一大类的条件---1,不能是骨干区域;2,不能存在虚链路;3,不能存在ASBR设备。
1.末梢区域(STUB)
满足第—大类区域条件的区域称为末梢区域(STUB)
如果将一个区域配置成末梢区域,则这个区域将不再学习4类和5类LSA。这样的区域将拒绝学习域外路由信息,但是,其依旧具有访问域外路由的需求,所以,配置完成后,会自动生成一条指向骨干区域的3类缺省。
末梢区域配置方法:
[r5-ospf-1-area-0.0.0.2]stub ---配置未梢区域
注意:一旦做特殊区域,则所有区域内的设备都必须做特殊区域
2.完全末梢区域(Totally Stub )
同样属于第一大类特殊区域,只是在末梢区域的基础上,进一步拒绝学习3类LSA,仅保留3类缺省即可。
完全的末梢区域配置方法:
[r1-ospf-1-area-0.0.0.2]stub no-summary ---这个命令只需要在ABR设备上配置即可。
设置成第二大类的条件---1,不能是骨干区域;2,不能存在虚链路;3,存在ASBR设备。
3.非完全末梢区域(NSSA )
我们将这样的区域称为非完全末梢区域(NSSA)
如果将一个区域配置成非完全末梢区域,则这个区域将不再学习4类和5类LSA。但是,该区域依旧需要将后面的域外路由信息导入,因为拒绝5类,所以,只能以7类LSA的形式来继续传递。之后,在7类L.S.A信息离开NSSA区域后,需要再转换成5类LS.A进行传递。这样的区域将拒绝学习域外路由信息,但是,其依旧具有访问域外路由的需求,所以,配置完成后,会自动生成一条指向骨干区域的7类缺省。
NSSA区域的配置方法:
[r4-ospf-1-area-0.0.0.1]nssa
注意:一旦做特殊区域,则所有区域内的设备都必须做特殊区域
O_NSSA---7类域外路由信息的标记,默认优先级也是150
4.完全的非完全末梢区域(Totally NSSA )
同样属于第一大类特殊区域,只是在NSSA区域的基础上,进一步拒绝学习3类LSA,产生一条3类缺省即可。
完全的NSSA区域配置方法:
[r3-ospf-1-area-0.0.0.1]nssa no-summary ---这个命令只需要在ABR设备上配置即可。
注意:配置成为完全的NSSA区域后,会自动生成一条指向骨干的三类缺省,但是,之前普通的NSSA区域产生的7类缺省依然会保留,因为OSPF ISA的优先级,设备会选择使用3类缺省而不用7类缺省。
OSPF的拓展配置
1.OSPF的认证
接口认证(两边都要写)
[R1-GigabitEthernet0/0/0]ospf authentication-mode md5 1 plain 123456
区域认证(相当于讲区域的所有的接口进行接口认证)
[R4-ospf-1-area-0.0.0.0]authentication-mode md5 1 plain 123456
虚链路认证(本质也是接口认证)
[r5-ospf-1-area-0.0.0.2]vlink-peer 4.4.4.4 md5 1 cipher 123456
[r4-ospf-1-area-0.0.0.2]vlink-peer 5.5.5.5
2.加速收敛——减少计时器的路由时间
[r1-GigabitEthernet0/0/0]ospf timer hello 5——修改hello时间(默认为10秒)
注意:hello时间修改死亡时间将继续根据4倍关系修改,改时间的时候两边都要改
[r2-GigabitEthernet0/0/0]ospf timer dead 40——修改死亡时间(默认为40秒)
注意:死亡时间修改hello时间不会修改
Waiting time ---等待计时器---时间等同于死亡计时器,死亡计时器时间修改改计时器也会修改,DR和BDR的选举时间
Poll---轮询时间---120S---和状态为down的邻居发送hello包的周期时间。---在NBMA环境下一方指定另一方为邻居,则将会把邻居的状态设定为Attempt状态,但是,如果对放在一个等待时间指定本端,则将会将邻居的关系置为down状态,之后将减缓发送hello包的频率。
Retransmit ---重传时间---5S---当发送一个数据包之后5S内没有收到对端的确认,则将重传
Transmit Delay --- 传输延迟--- 1S ---- LSA的老化时间在传输过程中无法计时使用该计时器来补偿老化时间
[r1-GigabitEtherpet0/0/0]ospf trans-delay 2——改变传输时间
3.沉默接口
[r1-ospf-1]silent-interface GigabitEthernet 0/0/0
4.缺省路由
3类缺省,5类缺省,7类缺省
3类缺省-----只能通过特殊区域自动生成
末梢区域,完全末梢区域,完全的NSSA区域
5类缺省-----只能通过命令来配置
[r3-ospf-1]default-route-advertise---要求本地必须有其他协议学习到的缺省,才能通过重发布的方式下发。
[r3-ospf-1]default-route-advertise always ---强制下发五类缺省
7类缺省-----既可以通过特殊区域自动生成(NSSA区域)也可以手工配置。
[r4-ospf-1-area-0.0.0.2]nssa default-route-advertise
5.OSPF的路由过滤
[r2-ospf-1-area-0.0.0.1]abr-summary 192.168.0.0 255.255.252.0 not-advertise-----针对3类LSA的过滤
[r2-ospf-1-area-0.0.0.1]abr-summary 12.0.0.0 255.255.255.0 not-advertise----过滤明细路由
注意:五类七类lsa也可以通过类似的方式进行过滤
6.路由控制
优先级
[r3-ospf-1]preference 20---改内部的优先级
[r3-ospf-1]preference ase 50
开销值
COST=参考带宽/真实带宽
参考带宽
[r3-ospf-1]bandwidth-reference 1000----改变参考带宽,要改所有的都要改
真实带宽
[r2-GigabitEthernet0/0/1]undo negotiation auto----关闭自动协商
[r2-GigabitEthernet0/0/1] speed 10---改变真实带宽---重启生效
[r2-GigabitEthernet0/0/1]undo shutdown-----重启
COST
[r2-GigabitEthernetO/0/1]ospf cost 20---这种方法也可以更改环回接口的开销值
控制层面流量
数据层面流量
OSPF开销值计算的是控制层面流量入接口的开销值
OSPF的附录E
掩码较短的正常进入,掩码较长的将使用直接广播地址多为LS ID进入
广播地址:全F
受限广播地址:255.255.255.255
直接广播地址:主机位全1,如20.1.0.255
OSPF的选路原则
域内:1类,2类
域间:3类
域外:5类,7类----类型1和类型2
1,域内---如果通过域内LSA学习到相同的路由信息,则将比较开销值,优选开销值小的,如果开销值相同,则负载均衡。
2.域间---如果通过域间LSA学习到相同的路由信息,则将比较开销值,优选开销值小的,如果开销值相同,则负载均衡。
3.域外---
类型1:加入到路由表的开销值为种植度量值+沿途累加开销值
类型2:加入到路由表的开销值为种子度量值
类型1永远优于类型2
类型二选路原则---先比较种子度量值,优选种子度量值小的;如果种子度量值相同,则比较沿途累加开销值,优选沿途累加小的。如果沿途累加也相同,则负载均衡。
类型一选路原则---先比较种子度量值和沿途累加开销值的总度量,优选总度量小的;如果总度量相同,则负载均衡。
4.域内和域间---域内优于域间,而不比较优先级
5.域间和域外----域间优于域外,而不比较优先级
OSPF的防环
OSPF域内防环
SPF算法----I-spf