ZY技术分享
一、OSPF与RIP异同
OSPF | RIP v1 | RIP v2 |
---|---|---|
链路状态路由协议 | 距离矢量路由协议 | 距离矢量路由协议 |
没有跳数的限制 | RIP的十五跳限制,超过15跳的路由被认为不可达 | 同版本一一样 |
支持可变长子网掩码(VLSM) | 不支持可变长子网掩码(VLSM) | 支持可变长子网掩码(VLSM) |
收敛速度快 | 收敛速度慢 | 收敛速度慢 |
使用组播发放链路状态更新 | 周期性广播更新整个路由表 | 周期性组播更新整个路由表 |
相同点
- 都是无类别路由协议,rip在传递路由信息会携带子网掩码,ospf的lsa(链路状态通告)也携带子网掩码
- 都是以组播的形式通信,rip:224.0.0.9,ospf: 224.0.0.5/224.0.0.6
- 都支持等开销负载均衡,手工认证
不同点
由于rip自身的劣势:只有一种包,选路不佳,收敛慢,导致rip只适用于中小型的网络环境中。而ospf有5种数据包,分工明确;通过spf算法保证选路无环;有触发更新,收敛块,加上ospf其他各种减少占用资源的措施使ospf可以应用于中大型的网络环境中。
二、OSPF的不规则区域划分
我们知道,OSPF区域划分需要遵循两个要求:
- 1、区域之间存在ABR
- 2、区域必须按照星型拓扑结构,即所有区域要于骨干区域相连,否则,ABR将不会帮忙转发区域间的路由信息。
而我们不规则区域就是讲的是,如果区域划分没有按照星型拓扑结构来不知,该如何实现通讯。
不规则区域主要有两种情况:
- 1、远离骨干的非骨干区域。
- 2、不连续骨干区域。 — 两种方法解决方案类型,我们主要研究第一种原理骨干的非骨干区域即可。
1、远离骨干的非骨干
搭建模拟拓扑来寻求解决方案:
(该图中区域2即为远离骨干的非骨干区域)
解决方案:(我们可以总结出三种,推荐使用后两种)
使用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进程中。
进入OSPF1,导入OSPF2的路由
进入OSPF2,导入OSPF1的路由
[r2]ospf
[r2-ospf-1]import-route ospf 2
[r2-ospf-1]q
[r2]ospf 2
[r2-ospf-2]import-route ospf 1
这是双向重发布,这样即不会出现选路不佳,也没有周期性数据,所以,使用最广
2、不连续骨干
还有一种特殊区域是— 不连续骨干区域,其解决方案也可以使用如上三种方法
三、OSPF的LSA详解
OSPF是典型的链路状态路由协议,便用LSA(Link State Advertisement,链路状态通告)来承载链路状态信息。LSA是OSPF的一个核心内容,如果没有LSA,OSPF是无法描述网络的拓扑结构及网段信息的,也无法传递路由信息,更加无法正常工作。OSPF定义了多种类型的LSA,深入了解并掌握常见的LSA类型是非常有必要的。
OSPF定义的LSA种类很多,在OSPFV2中,需要我们掌握的主要有6种。
在看具体各类LSA之前,我们先来看下LSA头部内容。 (所谓LSA头部,指的就是不管是哪一类LSA都会具有的公共部分)
LSA头部
LSA头部一共20byte,每个字段的含义如下:
- 链路状态老化时间(Link-State Age): 指示该条LSA的老化时间,即它存在了多长时间,单位为秒,这是一个16bit的整数。当该LSA被始发路由器产生时,该值被设置为0,之后随着该LSA在网络中被泛洪,它的老化时间逐渐累加。当某台路由器将LSA存储到自己的LSDB后,LSA的老化时间也在递增,一般情况下,LSA的老化时间应该小于1800S(因为OSPF每1800S会进行一次周期更新。) 为了防止老化时间无限制的增长,我们设计了一个最大老化时间— MAX age— 3600—当一条LSA的老化时间到达最大老化时间时,将被认定失效,将从本地的LSDB中删除掉。
- 可选项(Options): 总共8bit,每一个比特位都对应了OSPF 所支持的某种特性。 – 和helo包中的一样,包含特殊区域标记
- 链路状态类型(Link-State Type): 指示本条LSA的类型。OSPF定义了多种类型的LSA,每种LSA用于描述OSPF网络的某个部分,所有的LSA类型都定义了相应的类型编号。
- 链路状态ID(Link-State ID): LSA的标识。不同的LSA类型,对该字段的定义是不同的。
- 通告路由器 (Advertising Router): 产生该LSA的路由器的Router-ID。
- 链路状态序列号(Link-Sate Sequence Number): 该LSA的序列号,该字段用于判断LSA的新旧或是否存在重复。32位二进制构成,由8位16进制来表示 — 一台路由器,每发送同一条LSA信息,则将携带一个序列号并且序列号依次加1。
序列号空间
1、直线型序列空间— 从最小值开始一直到最大值,依次加1,新旧关系容易判断,但是数量有限。若超出上限,则将无序号可用,导致新旧关系无法判断。
2、循环型序列空间— 序号可以循环使用,不会出现序号使用完的情况,但是若两个序号差值比较大的时候,可能会导致新旧关系无法判断。
3、棒棒糖型序列空间— 0SPF使用的就是这种序列空间,但是,其进入循环部分后,依旧会面临循环型序列空间的问题,所以,OSPF要求其不能进行循环,相当于是一个直线型序列空间,其取值X80000001-0X7FFFFFFE。
序列号刷新方法:
OSPF刷新序列号空间的方法: 当一条LSA信息的序列号达到0X7FFFFFFE是,发出的路由器会将他的老化时间改为3600S,其他设备收到这条LSA信息后,会根据序号判断这是一条最新的LSA信息,将改信息刷新到本地LSDB中。之后,因为这条LSA信息的老化时间达到3600S,则将这条LSA信息删除掉。始发的路由器会再发送一条相同的LSA信息,其序列号使用0x80000001,其他设备收到后将会把最新的LSA信息刷新到LSDB中,则刷新了序列号空间。
- 链路状态校验和(Link-State checksum):校验和。校验和也会参与LSA的新旧比较。当两条LSA三元组相同,并且序列号也相同时,则可以使用校验和比较,校验和大的认定为新。
- 长度(Length):LSA的总字节长度
每个LSA头部中的“链路状态类型”链路状态ID”以及“通告路由器”这三个字段唯一地标识了一个LSA。当然,在同时间有可能在网络中会出现同一个LSA 的多个实例,那么LSA头部中的”链路状态老化时间“链路状态序列号”及”“校验和”字段就可以用来判断实例的新旧。
Type - 1LSA
部署R1和R2,之后在点到点环境中运行OSPF协议,之后观察设备上的LSDB数据库,我们可以发现,其中仅存在一种类型的LSA,其Type名称为Router,此类LSA便是1类LSA。
路由器通过该LSA描述自己“家门口的状况”。每一台运行OSPE 的路由器均会产生Type-1LSA,该LSA描述了路器的直连接口状况和接口Cost,同属一个区域的接口共用一个Type-1LSA描述,当路由器有多个接口属于不同区时,它将为每个区域单独产生一个Type-1 LSA,并且每个LSA只描述接入该区域的接口。另外,Type-1LSA中也包含着一些特殊的比特位,用于指示该路由器的特殊角色,例如该路由器如果是ABR、ASBR或者是Virtual Link的端点,则这些比特位就会进行相应的置位。
对于Router LSA而言,LSA头部中的“链路状态类型”字段的值为1,“链路状态ID”字段的值是产生这个Type-1 LSA的路击器的Router-ID。
- V位(VirtualLink Endpoint Bit): 如果该比特位被设置为1,则表示该路由器为Virtual Link的端点。
- E位(External Bit): 如果E比特位被设置为1,则表示该路由器为ASBR。在Stub区域中,不允许出现E比特位被设置为1的Type-1LSA因此Stub区域内不允许出现ASBR。
- B位(Border Bit):如果B比特位被设置为1,则表示该路由器为两个区域的边界路由器,字母B意为Border(边界)。一台路田器如宋同时左按病个A网aa-以上n域,则其产生的Type-1LSA会将B比特位设置为1,即使它没有连接到Area0。
- 链路数量(Links Number): 该Type-1 LSA所描述的Link(链路)数量。我们已经知道每台路由器都会产生Type-1LSA,而且该LSA描述了路由器直连接口的状况和Cost值,实际上路由器正是采用包含在Type-1 LSA中的Link来描述直连接口的。"链路数量字段指明在该Type-1 LSA中,包含了几条Link。每条Link均包含”链路类型”“链路ID””链路数据”以及”度量值”这几个关键信息。路由器可能会采用一个或者多个Link来描述某个接口 ---- 这个LINK就是描述接口情况的参数。
- 链路类型(Link type): 本条Link的类型值,该值与Link的类型相关。前面的章节提到OSPF定义了多种网络类型(NetworkType): P2P、P2MP、Broadcast以及NBMA,当一个接口激活OSPF后OSPF会根据这个接口的封装协议来判断接口运行在什么类型的网络上。另一方面,OSPF在其产生的Type-1 LSA中使用Link来描述自己的直连接口的状况,OSPF定义了多种链路类型,这些链路类型与接口的网络类型也是有关的。需要格外注意的是,OSPF的网络类型与链路类型是不同的概念大家不要搞混潜。
(这里展示的是1类LSA根据连接的网络,定义的几种LINK类型,及其参数的取值方法)
- 链路ID(LinkID):Link的标识,不同的链路类型,对链路ID值的定义是不同的。
- 链路数据(Link Data):不同的链路类型对链路数据的定义是不同的
- 度量值(Metric):Cost值。
注意: 由于TOS及TOS度量值在RFC2328中不再支持(这些字段被保留仅是为了兼容早期的OSPF版本)。
这里可以根据LINK的描述,将拓扑结构进行还原。(这个过程这里不做描述)
Type - 2LSA
继续扩大网络拓扑,添加R3,运行OSPF,之后我们观察设备上的LSDB,我们发现,除了有之前见过的1类LSA之外,还存在一种新的LSA,其名称为Network,这样的LSA我们称为2类LSA。
经过Type-1LSA的泛洪,区域内的路由器已经能够大致地描述出本区域内的网络拓扑,但是,要想完整地描述区域内的网络拓扑结构及网段信息,光有Type-1LSA是不够的,留意到如果路由器的接口接入一个MA网络并且在该网络上存在形成了邻接关系的邻居,则用于描述该接口的Lin的路类型为2,链路D为DR的接口IP地址,而链路数据为本路由器接口的IP地址,但是这个MA网络的掩码呢?有多少路由器连接在这个MA网络上呢?这些信息暂时还是未知的(至少通过Type-1 LSA还无法知晓)。因此就需要用到Type-2 LSA了。
在MA网络中,OSPF会选举D及BDR,所有的DROther路由器都只能和DR及BDR建立邻接关系,DROther路由器之间不会建立全毗邻的OSPF邻接关系。DR会在本区域内泛洪Type-2 LSA,来列举出接入该MA网络的所有路由器的Router-D(其中包括DR自身),以及这个网络的掩码。因此 Type-2 LSA仅存在于拥有MA网络的区域中,该LSA由DR产生。
在Type-2 LSA中,LSA头部中“链路状态类型”字段的值为2,“链路状态ID”字段的值为产生这个Type-2 LSA的DR的接口IP地址。
- 网络掩码(Network Mask):该MA网络的网络掩码。
- 相连的路由器 (Attached Router)的 Router-D;连接到该MA网络的路由器的Router-ID与该D建立了邻按关系的邻居的Router-ID,以及DR自己的Router-D),如果有多台路由器接入该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同时连接着非骨干区域以及AreaQ,因此它分别为这些区域维护着LSDB并且计算出到达直连区域的区域内部路由,它向某个区域注入 Type-3 LSA,以便向该区域通告到达其他区域的区域间路由。
在Type-3 LSA中,“链路状态ID”字段的值为区域间路由的目的网络地址,其他字段及其含义如下
- 网络掩码(Netmask):区域间路由的目的网络掩码
- 度量值(Metric):路由的Cost。
3类LSA传递的是域间路由信息,主要携带的是目标网段信息和开销值。目标网段信息通过LSID来进行携带,里面也会包含其掩码信息。其中的开销值指的是通告者到达目标网段的开销值。 — 这个开销值计算是一个重点,所以,可以根据拓扑结构进行分析计算。
注意:3类LSA传递路由信息的玩法有点类似于距离矢量型协议的玩法,通告者就是到达目标网段的下一跳。所以,这里有个很重要的点,就是,我们设备在接收到3类LSA之后,需要根据1类和2类LSA计算的拓扑信息来寻找三类LSA的通告者。(准确的说,所有传递路由信息的LSA都需要通过1类和2类LSA去寻找通告者的位置。),如通告者是所在区域的ABR设备,那自然是可以寻找到的。但如果不是,则需要转换通告者。
例如,我们在R1后面再加入一个R5,按照拓扑所示划归到区域2中。则我们观察R5的LSDB,我们可以发现区域1里的路由信息到达区域2后,通告者就不再是始发的R3了,而是转换成了R1。说明3类LSA的传递范围进行ABR相邻的单区域,跨区域传递的时候,需要进行通告者的转换。(通告者变了,则将不是同一条LSA了)
Type - 5LSA
有了三类LSA之后,多区域OSPF网络中的路由信息也可以正常传递了,想要看到更多的LSA类型,则将需要继续扩展我们的拓扑,需要再R4后面再增加一个环回网段,将该网段宣告再RIP中,模拟其他网络。之后将RIP中的路由信息通告到OSPF中,我们看下这些域外的路由信息该如何传递。
之后,我们观察设备的LSDB,可以发现,里面除了前面说过的三种LSA之外,还存在一种叫做External的LSA,我们将他称为5类LSA。
5类LSA主要任务就是传递域外的路由信息,这种类型的LSA一旦被产生后I 会在整个OSPF域内传播(除了一些特殊区域)。Type-5 LSA也就是AS外部LSA(AS ExternalLSA)
对于Type-5 LSA,“链路状态ID”字段的值是外部路由的目的网络地址。其他主要字段的描述如下。
- 网络掩码(Netmask):外部路由的目的网络掩码。
- 度量值(Metric):该外部路由的Cost。5类LSA中携带的时域外的路由信息,通过重发布导入到OSPF网络中因为不同协议对开销值的度量标准不同,所以,在路由导入之后,我们将直接舍弃该路由在原网络中的开销之后,给给路由赋予一个规定值 — seed-mertic 种子度量值。
-
- OSPF默认的种子度量值为1,这个值可以在重发布过程中进行修改
[r4-ospf-1]import-route rip 1 cost 2
- OSPF默认的种子度量值为1,这个值可以在重发布过程中进行修改
- E位:用于表示该外部路由使用的度量值类型。OSPF定义了两种外部路由度量值类型,分别是Metric-Type-1和 Metric-Type-2。如果该比特位被设置为1,则表示外部路由使用的度量值类型为Metric-Type-2,如果该比持位被设置为0,则表示外部路由使用的度量值类型为Metric-Type-1。
-
- TYPE1 — 如果E位置0,则代表使用类型1。如果使用的是类型1,则所有设备到达域外目标网段的开销值位本地到达发出这条LSA的ASBR的开销值再加种子度量值。
-
- TYPE 2 — 如果E位置1,则代表使用类型2。默认使用类型2。如果使用类型2,则域内所有设备到达域外目标网段的开销值都等于种子度量值。
-
- 开销值类型也可以再重发布时进行修改
[r4-ospf-1limport-route rip 1 type 1
- 开销值类型也可以再重发布时进行修改
- 转发地址(Forwarding Address,FA): 当FA为0.0.0.0时,则到达该外部网段的流量会被发往引入这条外部路由的ASBR。而如果FA不为0.0.0.0,则流量会被发往这个转发地址。FA这一概念的引入,使得OSPF在某些特殊的场景中得以规避次优路径问题。
- 外部路由标记(External Route Tag):这是一个只有外部路由才能够携带的标记,常被用于部署路由策路。举个例子,假设我们在OSPF域外有两种业务:办公及生产,现在ASBR把这两种业务各自的路由都引入OSPF,用于描述这些外部路由的Type-5 LSA将在整个OSPF 域内传播,现在如果需要在域内某个位置部署路由策略,分别对这些办公及生产的路由执行不同的策略,那么首先就要区分这些路由,如果单纯通过路由的目的网络地址及网络掩码进行区分显然是不够便捷的。而如果在ASBR上引入这些外部路由时,就分别为生产及办公路由打上相应的标记,那么在域内执行策略的时候就可以直接对相应的标记进行路由匹配,从而使得路由策略的部署更加方便。在华为的路由器上,缺省时该字段值被设置为1。
-
- 在重发布过程中可以打标签
[r4-ospf-1limport-route rip 1 tag
- 在重发布过程中可以打标签
Type - 4LSA
前面说的所有传递路由信息的LSA都需要通过1类和2类LSA进行验算(寻找通告者),5类LSA是全OSPF区域传递的,处理ASBR通过者所在的区域可以通过1类和2类LSA进行验算,其他区域都无法验算通告者的位置,所以,需要引入4类LSA来辅助寻找ASBR通告者的位置。
所以,我们观察拓扑,发现除了区域1以外,其他区域设备的LSDB中都出现了一个名为Sum-Asbr的LSA,这个就是4类LSA。
Type4LSA披称为ASBR汇总LSA(ASER5ummary L5A),由ABR产生,实际上是一条到达A5R的主机路白Type-4LSA的格式与Type3L5A是一型的在Type-4LSA中,“链路状态ID"字段的值是ASBR的Router-ID而且“网络掩码”字段的值为全0,另外,"度量值”字段写的是该ABR目己到达ASBR的Cost值。一和3类LSA比较相似,只不过通告的不是目标网段,而是ASBR。
类型 | LS ID | 通告者 | 传播范围 | 携带的信息 |
---|---|---|---|---|
Type - 1LSA:Router | 通告者 | ospf域内所有运行ospf的设备的RID | 单区域 | 本地接口直连的拓扑信息 |
Type - 2LSA:Network | DR的接口IP | MA网路中的DR的RID | 单区域 | 单个MA网络的拓扑信息的补充 |
Type - 3LSA:Sum-net | 路由网段 | ABR,在经由其他ABR转发时会修改为新的ABR | 单区域 | 其他区域的路由信息 |
Type - 5LSA:External(ase) | 域外路由网段 | ASBR | ospf域内 | 域外路由 |
Type - 4LSA: Sum-Asbr(summary) | ASBR的RID | 和ASBR同区域的ABR,在经由其他ABR转发时修改为新的ABR | 除ASBR所在区域外的OSPF单区域 | ASBR的位置信息 |