当前位置: 首页 > article >正文

HCIP-Datacom Core Technology V1.0_3 OSPF基础

动态路由协议简介

静态路由相比较动态路由有什么优点呢。

静态路由协议,当网络发生故障或者网络拓扑发生变更,它需要管理员手工配置去干预静态路由配置,但是动态路由协议,它能够及时自己感应网络拓扑变化,不路由选择新的路径,来转发数据流量,那么这就是动态路由协议的优点。

动态路由如果分类的话,如果按照工作区域去划分,分为两种类型,是根据自治系统这个概念去划分的,如果说一个路由协议运行在同一个自治系统内部,叫IGP,比如说RIP,OSPF包括IS-IS,都是IGP,内部网关路由协议,如果是用来连接不同自治系统之间这样的一个协议,叫作EGP,外部网关路由协议,在当今世界主流的只有一种外部网关路由协议,BGP。

如果是按照工作机制和算法去划分的话,又分为两种类型,一种是基于距离矢量的路由协议算法,叫做RIP路由协议,RIP协议是一个非常古老的协议。如果按照链路状态算法路由协议去划分的话,分为OSPF和IS-IS,它们统称基于链路状态算法去计算的。

外部网关路由协议BGP它是属哪一种算法呢。BGP是属性一种特殊的路由协议。因为BGP是基于距离矢量算法的基础上进行的改良和增强的,叫做路径算法。也可以叫做增强型距离矢量路由算法。

距离矢量路由协议什么缺点?为什么现在大中型企业大部分都是基于链路状态算法路由协议。

路由协议的作用是用来学习相应的路由条目,为用户的数据流量转发选择路径。在路由器上生成路由表,而距离矢量路由协议,通过周期性的泛洪自己的路由表,然后从邻居那里去学习相关的路由,以及把自己的路由表泛洪给邻居,让邻居去学习。

假设基于距离矢量算法路由RIP而言,它是每隔30秒一次发送自己的路由表给它的邻居,同是从邻居那里去获取一个路由表,然后学习相应的路由条目,同时路由器运行了距离矢量算法之后,它有一个非常大的缺点,它并不知道全网的拓扑,它只知道去往目的网段应该发给谁,以及去往目的网段的开销是多少,它没有一个全网的一个大局观。比如图中的示例,R1要去访问10.0.3.3,它只知道要发给R2,通过R2去访问这个目的网段。至于全网的拓扑它是没有办法知道的。以及距离矢量算法还有其他的缺点。比如说收敛慢,以及环路问题。这些问题都阻碍了它在后续企业里面得到一个应用,不是那么青睐。所以在距离矢量算法里面得出来这样一个缺点,在后续去设计创造路由协议的时候,会进行一个改良。那么就是慢慢再去设计基于链路状态算法路由协议的时候,会将原本在距离矢量算法的路由协议里面的弊端,统统给解决。

链路状态算法路由协议和距离矢量路由算法协议的本质区别在于什么呢?它通告的不再是路由信息,而是链路状态,比如说RIP,它通告的是路由信息,路由器学习完对方的路由的路由信息后,直接加载到路由表中。链路状态LSA,比如说链路状态,它描述的是路由接口的一些信息,比如说开销以及连接对象,然后路由器通过链路状态用相应的算法去生成计算路由。所以它会有一个全网的大局观,不像距离矢量只知道邻居左膀右臂,没有一个所谓全网的大局观这样一个概念。

通过每台路由器产生的LSA之后,路由器会把这些LSA放到自己的数据库里面,对这些数据库进行解析,然后通过算法去了解全网的拓扑。也就是说每台路由器都要去收集全网不同路由器所产生的LSA,然后基于LSA用自己的算法进行一个解析。

最后基于这个数据库是通过什么方式来解析这个LSA呢,就是使用SPF最短路径优先算法,最短路径优先算法是每台路由器以自己为根,去生成计算一个无环且拥有最短路径的"树",可以说起来这个"树"是比较抽象的。以图中的案例,假设R3它拥有自己同一个区域里面路由器的LSA,现在基于 LSA放到自己的数据库里面,使用SPF算法进行计算,那么假设R3去往R2,那么可以看到它有两条路径,一条是通过R3直接去访问R2,另一条路径是通过R3去往R4,再去往R1,再去R2,从下面这条路径进行转发。那么它会怎么去计算呢,通过SPF算法之后就会发现,它以自己为根,计算出来一条从下面走的路径,去访问R2,而上面的路径通过算法的机制屏蔽掉了。为什么呢?R2和R3之间是1.544M这样的一个带宽,而R3,R4,R1和R2之间是百兆带宽,所以流量从百兆带宽去访问R2的话,是不是更加快速。所以它通过算法这样的一个机制避免了它去选择次优路径访问R2,而让它选择一条最优路径去访问R2。

 通过这样的一个算法机制选出来的最优路由之后,会加载到路由表,为用户流量转发选择最优路径。那么这就是基于链路状态路由协议的一个基本特征。

 链路状态路由协议它的工作机制大致是分为4个步骤,第一个步骤是和路由器建立一个邻居关系,第二个是收集不同路由的LSA放到自己的数据库里而进行解析。然后采用SPF算法选择最短路径优先树,最后算法得出来的最优路由加载到路由表中,为路由选择指导转发。这就是OSPF的基本概念。

OSPF简介

 OSPF是一种基于链路状态算法的内部网关路由协议,那么它一共有两个版本,如果是针对IPv4的一个网络,用的是v2版本,如果是针对IPv6的网络,用的是V3的版本,这两个版本在工作机制上基本是一样的,只不过在一些细节上面可能有稍微差别。

OSPF这个协议有很多优点,比如说通过SPF算法,能够保证没有环路形成,同是还支持区域划分以及负载分担,包括一些报文认证等等。

OSPF应用场景

 OSPF在企业里面非常爱大家青睐,它主要是实现了公司内部路由互通,核心层放在骨干区域零中,接入层放到非骨干区域,这里的区域0,OSPF里面定义了多区域这样的一个概念,同是定义了区域0为骨干区域,其他区域为非骨干区域,同是区域0为骨干区域不可更改,那么这样的话网络架构变得非常清晰明了,也为了方便后续的维护。

OSPF基础术语

 Router ID用来标识一台路由器,它和人的姓名一样,但是与人的姓名不同之点在于它具有唯一性,不能重复,比如给R1取了一个Router ID是10.0.1.1,10.0.1.1就不能给R2和R3。 同时OSPF的Router ID的取值规则如下,那么正常情况下,推荐管理员手工配置Router ID,如果没有手工配置的情况下,他会选择Lookback接口里面选择一个最大的IP地址,作为Router ID,如果Lookback都没有配置,它会使用设备的物理接口最大IP地址作为Router ID。那么在现网中强烈要求手动配置,因为这样的话,在后续查看邻居关系时,通过Router ID去标识这台路由器,会很快去找到相关的一个信息。如果让系统自动去选择,还需要查找这个IP地址是哪台路由器的,这样不便于后期的维护,以图中案例R1取了一个Router ID之后,就相当于发送了一个报文,表明了自己的名字是10.0.1.1,发给R1和R3。

 因为OSPF支持划分区域,通过区域ID号来标识路由器属于哪个区域,区域ID是一个32位的一个非负整数,一般是用点分十进制表示,比如说区域在区域1里面可以写成Area0.0.0.1,但实际上在日常工作中去配区域的话,一般直接写区域1就可以了,不用写32比特的点分十进制,但是在设备上去查看的时候,它会依然显示点分十进制Area0.0.1.1。

 顾名思义度量值就是用来衡量从源到目的中间所经历的这样的一个开销。这个度量值既然是用来衡量从数据包从源到目的地这样开销,那么所经历的开销越小是不是代表所花费的时间越短,在OSPF里面用Cost开销作为一个路由的度量值,它是和链路的带宽有关系的。只要给设备开启了OSPF这个协议,它的接口都会自己生成一个开销值,那么这个开销值,设备默认情况下有一个公式,就是参考带宽值除以链路接口的实际带宽,得出来一个数,最后以四舍五入的形式展示,便是有个问题是最小等于1,不能小于1。比如说参考带宽默认是100M,但是接口带宽是1000M,得出来的结果是就是0.1,但是取值1,因为最小值只能为1 。参考带宽一般情况下是可以进行手工配置的,但是一般情况下,在现网中其实不这么配置。如果在一个网络里面所有的路由器都是采用这个公式,你要去修改带宽值的的话,把参考带宽全部修改,那么所有的路由器的接口的带宽值是不是要统一修改,统一修改参考带宽值的话,这样的工作量是不是比较大。所以一般直接去修改接口带宽这样的一个取值会比较方便一点。

带宽值一般分为两种,一种是接口带宽,一种是累计带宽。接口带宽顾名思义就是接口上面它默认的这样的一个带宽值,比如说,如果是以太网接口,默认带宽等于1,如果是串行接口Serial,它的带宽值默认开销是等于64,所以不同接口类型它的默认带宽是不一样的。第二个是OSPF的一个累计带宽值,以图中为例,R3去往R1的10.0.1.1,它的带宽值是多少,是每段链路加起来的累计带宽,那就是R3~R2之间是64,R2到R1之间是1,所以累计带宽值是65。

 度量值是否可以修改呢?答案是可以的,同是度量值修改有什么好处呢?影响路由器选路的方式第三个就是开销。假设从源去往目的有两条路,用同一个路由协议,是否可以通过修改开销来影响选择路由转发的路径,答案是可以的,比如图中的R4现在要去访问R1上面的10.0.1.1,如果是在缺省默认的情况下,是不知道从哪边走,因为它是根据它缺省开销自己去计算的,是从R2上面这条路去访问R1,还是从R3去访问R1,是根据它的带宽自己去计算的。但是现在有个需求,希望接入层设备R4和R3,哪怕从上面这条路的带宽比较小,也希望是通过接入层直接访问汇聚层的R1,而不通过R2绕行。可以人工手工去定义,在R4上,R3将接口带宽改为10,那么这样R4去访问R1的累计带宽就是20,通过上面去访问R1的话,它的累计带宽就是110,越小越优,说明R4接入层去访问这样的一个R1,不希望流量绕行的话,直接从R3去访问。

OSPF 三大表项

 OSPF在发送链路状态之前,首先要建立一个邻居关系,它是通过报文的的交互形成邻居关系,这个邻居关系包含了邻居的各个信息,比如说它的Router ID,它的接口的IP地址,它的接口号是多少,暂时可以说邻居表里面有一些字段DR,BDR。

  LSDB是用来收集不同路由器的LSA,然后进行一个SPF算法的计算,数据库里面包含了很多信息,收集了不同类型的LSA,LINKID,由谁产生的,生成时间是多少,都会在这张表里面体现,非常详细。

 OSPF协议自己的协议表,它的目的网段,它的下一跳以及出接口,然后指导数据转发。在OSPF协议里面存在的最优路由未必会在路由表中出现,因中不同协议之间还有一个比较。

OSPF报文格式和类型

 数据通信顾名思义是不是就是为了帮助用户去实现数据从源和目的端进行一个数据的交互,那么交互的过程中,是不是要打通一条隧道,或者去建立一条路,为用户数据指导数据转发。那么这条路该怎么建立呢,是不是就是由数通领域里面各种协议去实现的。但是这个协议它具体是通过谁来去完成的,那就是报文。那么换一句话说,报文就是协议具体的体现和本质。因为协议在运行的时候,它就像一个施工队,它是不是有什么信息的交互,状态的维护,以及差错控制的通知,那么这些等等信息都需要进行一些互动,设备之间进行一个流,这些交流是通过什么来实现呢,那就是用报文来实现的。在 OSPF里面一共有5种报文,这5种报文分别有各自的作用。OSPF报文是封装在IP中的,时同协议号是89。那么在OSPF关部中它里面包含了哪些字节,这些字节有什么作用。

Version:版本号,如果是基于IPV4的就是V2版本,如果是基于IPV6的话就是V3版本。

Type:类型,代表OSPF的报文类型,如果你发送什么报文,相应类型的取值就是这个报文的字。

Packet Length:报文长度。

Router ID:

Area ID:

Checksum:检验和,用来校验数据的完整性。

Auth Type:

Authentication:表示是否采用了OSPF认证。如果配置了相关的认证,这个里面就是认证的密码,是明文认证还是密文认证,还是采取了没有任何认证方式。

OSPF工作过程

OSPF在它的工作过程中,是否要提及到之前介绍的5种报文的交互,同是在这5种报文的交互过程中,关于路由器运行该协议的邻居状态也会发生一系列的变迁,要把它邻居状态的变迁机制和发送报文的一个形式结合在一起,去理解它的工作机制,那么这里其实简单的概括了一下它的一个工作机制。首先,是通过Hello报文来发现邻居关系,然后通过这样的一个协商主/从关系,然后描述自己的数据库,最后更新LSA进行同步,最后完成一个路由计算。

那么在这里面,工作过程概况里面,我们需要去了解有两点比较重要,第一个,会发现它有两个概念,一个是邻居关系,一个是邻接关系,同由可见,虽然它们只有一字之差,但是邻接关系是不是比邻居关系更进一步。第二点是,在OSPF里面路由器要收集不同路由器的LSA,但是LSA有一个叫做"同步"的这样的概念,就是所有路由器的数据库要保持一致,叫同步。那么为什么需要同步。

作为动态路由协议,它相比较于静态路由协议,它的优点在于什么,是不是能够及时感应网络拓扑的变化,能够及时调整路径,怎么调整呢?如果全网所有路由器的数据库一样,是通过LSDB数据库计算生成路由的,如果某一台路由器数据库里面的LSA发生变化,那么该路由器将这样的一个变化扩散出去,全网路由器跟它进行同步,进行对比,那么是不是就可以实现全网运行OSPF的路由器都能够及时感应网络变化,进行网络变迁,就可以达到牵一发而动全身的这样的一个作用。所以这就是它为什么要进行同步的这样的一个概念。

首先建立邻居关系,那么在建立邻居关系里面,它是通过Hello报文来建立邻居关系,它的邻居状态会发生以下三个变迁,Down,Init,2-way。

Down状态,这是设备运行OSPF协议的初始状态,代表路由器没有收到任何消息,然后路由器开始向邻居发送Hello报文,在OSPF里面,发送Hello报文的形式是以组播的形式,这个组播的地址是224.0.0.5。

现在以图中的案例为例,首先假设R1和R2同时运行OSPF协议,然后它们刚运行完是没有接收到任何信息的,所以它的状态第一步是Down状态,然后互相发送Hello报文,Hello报文的作用是用来发现邻居的,但是路由器现在不知道你是我的邻居,所以可以发现Hello报文里面包含了哪些东西呢。

现在假设以图中的R1为例, R1给R2发送Hello报文表明了自己的身份,我的名字叫10.0.1.1,neighbort字段应该填上R2的这样一个名字,但是R1现在不知道你是我的邻居,所以neighbor字段第一次发送的时候是空的,没有填写任何东西。同理,R2给R1发送的第一次Hello报文,也是表明了自己的身份,然后neighbor字段与是空的,当双方路由器接收到对端发给我的Hello报文之后,路由器的状态会变成Init初始状态,这个状态表明了什么呢?自己已经收到了对方发给我的Hello报文了,但是neighbor字段你没有填上我的名字,Router ID不在自己所收到的列表中,但是没有关系,因为你给我发的Hello报文里面已经包含了你自己的Router ID,是不是就代表我已经知道了你的名字是谁了,所以第二次R2给R1在发送Hello报文里面,neighbor字段就会填上R1的名字,我就知道你是我的邻居了。 当R1收到R2发过来的Hello报文里面包含自己的Router ID,代表我和你形成邻居关系,状态变成2-way。所以用句简单的话来概括一下,R1和R2如何去通过Hello报文,建立邻居关系,就是互相收到对方的Hello报文,同是neighbor字段包含自己的Router ID,表明和对方形成邻居关系。中间肯定还有其它的参数协商。

 Hello报文的一个时间间隔,每隔10秒发送一次。路由失效时间,是间隔时间的4倍。这两个参数在OSPF互相发送Hello报文里面,是需要进行协商的。这两个时间要保持一致。如果时间不一致,那么是无法正常建立邻居关系的。

通过第一个Hello报文的交互,已经形成邻居关系了,它的最后一个关系是不是邻接关系,从邻居关系要一步一步的向邻接关系进阶。

当路由器的状态变成2-way之后,向邻接关系进阶。DD报文,DD报文的作用是用来描述数据库的摘要信息,摘要信息就是简单的描述一下LSA是谁的,到于具体接口IP地址,掩码,开销这些都是没有的,所以叫摘要信息。是重要关注的是哪个呢?第一个是MS比特位,还有一个叫做序列号。

首先,为什么需要DD报文来描述数据库的摘要信息。这前提到过最后数据库是不是要保持一个同步,路由器怎么知道数据库是否要同步,所以要简单的描述一下,自己的数据库里面包含了哪些路由器的LSA进行对比,对过对比去判断数据库是否同步,如果未同步,就开始去请求所缺少的那些信息,这就是为什么需要需要DD报文。可以理解为它作为一个同步前的校验完整。

现在假设R1和R2互相发送了自己的第一个DD报文,那么DD报文包含了什么?第一个序号号,R1是X,R2是Y,然后I比特位和M比特位是用来表示这个DD报文是第一个DD报文和后面是否琮有后续的报文。MS比特位是用来协商路由器之间一个叫做主从关系的,那么主从关系是通过什么来确定的呢?就是通过前面学习的Router ID,Router ID大的就成为主,小的就成为从。序号号是用来保证可靠性和完整性的。

这里又有一个非常重要的问题来了,为什么在进行数据库对比的时候,需要一个主从,同时还需要一个序列号呢?

现在假设一下,假设我和A之间有一张手机通讯录,我们两个之间的手机通讯录要保持一致,那么怎么对比,使两个手机通讯录之间的对比更加高效的去看是否缺少了哪些信息,是否保持一致。那么现在假设可以用这样的一个方法,我告诉A,你是否把你通讯录里面以A开头的这样的一个姓名和联系方式发送给我,A代表说知道了,发给我,我进行对比,然后我再发你以姓名B开头的姓名和联系方式发给我,我进行对比,B知道了说,好的,然后发给我进行对比,那么这样的一个过程是不是更加有条理,效率也非常高,否则我们这样的一个对比,非常杂乱无序的话,这样对比效率是不是很低下,同是也不可靠,所以这里为什么通过主从关系的选举,以及这样的一个序列号的方式来进行数据库摘要信息的这样的一个对比,是为了保证在对比的过程中更加高效,同时可靠的进行,那么这个时候你会发现,假设这样的一个R1,这的序号号变成了Y,说明什么,说明R1它代表了我是你的从,我听从你的安排,你问我要什么摘要信息,我就发什么给你进行对比。同时R2也宣告了自己的身份,我是主路由器,那么通过这样的交互,完成了数据库的摘要信息的对比。同进它的邻居状态也会发生一系列的变迁,从2-way状态变成了ExStart状态,ExStart状态代表了开发发送DD报文,但是注意一点是,DD报文不包含链路状态的描述。也就是说了DD报文是不是用来描述LSDB里面的摘要信息,但是第一次互相发送DD报文是用来协商主从关系里面没有包含任何数据库里面的摘要信息。这里是非常关键的一点。只有主从关系选举完成之后,它们才开始摘要信息的同步,然后状态变成Exchange,进行一个摘要信息的同步,那么到同步状态,最后一个Loading状态,它会发生怎样的变迁呢。如果发现我的数据库和你的不一样,会怎么办,我是不是需要弥补这些信息。

 interface MTU,是指在不分片的情况下,接口最大范围的IP报文的长度,但是正常情况下,如果收到的DD报文的MTU和自己本端的MTU不相等(报文)是默认丢弃的。华为设备默认是未开启检查的,可能不同厂家实现的这个Interfae MTU字节,它的功能作用是不一样的。

在进行数据库同步对比之后发现哪些是我们缺少的摘要信息,看一下后续会如何进行。

OSPF一共有5种报文,后面这三个报文其实就像三个亲兄弟一样。LSR,链路状态请求报文,LSU更新报文,LSACK回复报文,假设R1对比数据库之后,发现某些具体的摘要信息是我所缺少的,我就会向R2发送LSR信息,去请求我所缺少的那些LSA的明细信息。R2收到之后就把R1所想要的一个信息包含在Update更新报文中,通过LSU,发送给R1,R1收到之后表明已经收到了,所以还需要回复一个Ack确认。通过这三个兄弟报文的交互,最后, R1和R2的状态从Loading变成了Full,到达了一个同步,那么到达同步之后,R1和R2的状态就正式从邻居关系变迁为邻接关系。同时数据库已经完成了同步,保持一致。这个就是前面5种报文的交互。

首先是通过Hello报文发现邻居关系,建立邻居关系之后,通过DD报文的交互,进行数据库摘要信息的对比,最后通过LSR、LSU和LSAck这三个报文的交互,去请求所缺少的LSA,至此完成数据库的同步。

如果多台路由器在同一个广播网络,按照上面的方式进行这样的一个邻接关系的建立,有哪些问题呢?

如果在MA广播型网络中,两两之间建立邻接关系是否会有问题,假设班级一共有5个人,5个人之间要保持手机通讯录进行同步,每两个人之间两两互相进行一个通讯录的同步互相交流,每1个人要和4个人进行同步,这样的过程是不是显得非常繁琐。同是效率非常低下,同是会造成一个重复的LSA泛洪,资源浪费。我既要把一个通讯录里面你们所没有的这样的一个联系方式发给a,也要发给b,也要发给c,重复的发,是不是没有必要。同是这个过程也比较繁琐,有没有什么办法可以简化我们这样的一个同步过程。是不是可以在5个人中选出来1个班长,班长作为老大,收集其他4个人的通讯录的信息,使得他通讯录的信息保持一个最完整的状态,然后由班长将完整的数据库信息发送出来,自己对比自己的,如果发现缺少的哪些信息,就去班长去要,如果是正常的话,就不做任何操作。这样是不是就大大加快了这样的一个工作效率。同理,在数据库同步的过程中也需要这样的一个班长,那么这个班长就是指定的路由器。他负责和所有路由器之间建立邻接关系,收集LSA,保持数据库的完整性。那么这个时候又有个问题,班长假如有一天生病了,是不是需要找个人来替代他,所以这个时候作为班长,我们有一个什么,有一个很好的备份,作为班长,如果不工作的情况下,他来接替班长完成这个任务。那么这个备份就是副班长BDR,那么选举DR和BDR之后,其它路由器的角色称为DROther,即不是DR也不是BDR,那么这样做有什么好处呢,所有路由器只需要和DR和BDR之间建立邻接关系,就可以了,其它路由器之间,只需要完成邻居关系的建立,这样就节约了链路的带宽和资源,同是加快了一个同步的效率.

 这是基于接口进行选举的。第一点是比较优先级,越大越优先,第二个是比较Router ID,在OSPF里面,它的优先级取值范围是0到255,默认为1。

以图中的为例,R1,R2,R3假设这三台路由器要选取DR和BDR,那么R1的优先级为100,R3的优先级为95,所以一个成为DR,一个成为BDR,如果把某个设备的接口的优先级设为0,它是不参加选择的。

DR与BDR的选举是一个非抢占机制,这一点非常重要,这三台设备组成的一个网络已经选举完DR和BDR了,现在新增了一台路由器R4,将它的优先级设为200,如果按照这样的一个选举的话,是不是R4应该成为DR,但是它即不是DR又不是BDR,这是DROther,因为它是非抢占式的,也就是说当网络稳定选举完DR和BDR之后,新加入的设备无论它的优先级有多高,它依然不会成为DR,那么现在假设,R1坏掉了,发生了故障,那么问题来了,是R4成为DR,还是BDR成为DR,R4去选举BDR。

当R1发生故障之后,R3会成为DR,虽然R4的优先级是200,但是会和其它路由器去竞选BDR的角色。

DR和BDR是在哪个阶段完成的呢?Hello报文里面有个字段叫路由优先级,也就是说DR和BDR的选举,在Hello报文的交互过程中,实际上就已经完成了。

什么叫基于接口的选举呢?或者基于网段的选举,实际上在DR和BDR的选举过程中,还有一个时间计时器,叫Waiting Timer,时间是40秒,叫选举等待时间,因为DR和BDR的选举是一个非抢占原则,假设给R1先配置了OSPF协议,它的优先级是底的,但昌它先成为DR,这样合理吗,是不是不太合理,因为别的路由器还没有配置,所以为了保证DR和 BDR的选举中的一个公平性,有一个选举等待时间40秒,这个就好比什么,比如说我明天约你去参加7点的比赛,我6点就到了,然后跑完,说我是冠军,你觉得这样合理吗?是不是不太合理,所以为了保证,不同路由器之间它选举有一个公平性,所以会等待40秒参加选举,竞选DR。

胶片里的两个问题,第一个,如果将4台路由器在MA网络里面全部设置为0,那么这个OSPF协议是否可以正常工作。第二个,缺少情况下,哪些链路组成的网络是MA网络呢,在图中的网络叫广播性网络,在广播型网络里面一定要选举DR和BDR,所它们的优先级全部设为0的话,OSPF是无法正常建立关系的,那么哪些网络定义为广播型网络呢?哪些网络又需要去选举DR和BDR呢。

OSPF一共支持4种网络类型,这4种网络类型是根据它的链路层协议所决定的。如果链路层协议是PPP,或者是HDLC链路,那么它所对应的网络类型就是point-to-point网络类型。如果链路类型是常规的以太网链路,那么它的类型就是广播性网络,也就是MA网络。如果是在帧中继的情况下,那么它对应的就是NBMA,那么其中第4种网络类型是P2MP,叫点到多点网络类型,可以看作多个点到点的网络类型的集合,它是通过前面三种网络类型,通过命令强制进行更改形成的。

在现网中实际上最常见的是点到点和广播性网络,NBMA以及点到多点网络类型基本上已经被边缘化了,用的很少,那么这4种网络类型里面是否要选举DR呢,广播型网络和MBA是要选择DR,那么其它呢?这样的一个点到点和P2MP是不需要选择DR的。所以利用网络类型的特征是否要选择DR,在特殊的应用场景下,能够帮助我们起到息样的作用呢?

 如图,AS-R1和CO-R1之间连的是一个以太网链路,广播型网络,这样直连广播型网络,这样选举DR和BDR是晃是没有任何意义,在选择DR和BDR中,有一个选举等待时间,选举DR和BDR已经没有意义了,还需要等待40秒参加选举,浪费了链路的工作效率。所以在特殊的场景下,选举DR和BDR没有意义,就可以将它的网络类型去更改,提高工作效率。更快的帮助用户实现流量转发,完成网络收敛,这就是网络类型在特殊场景下的一个应用。

OSPF基本配置

首先进入到系统视图下,在系统视频下,通过命令OSPF后面跟上进程ID号,再加上Router ID号来进行配置,进程ID,是本地概念,因为路由器可以支持多进程的配置,每个进程之撞通过不同的进程ID进行隔离,Router ID为32位的数字,一般采用路由器的loopback的接口IP地址来进行配置。第二步,需要进入到OSPF的区域视图,我们可以看到,当输入了OSPF的进程ID号之后,视图就已经变成了ospf的进程视图下,我们需要创建一个区域,通过命令area后面跟上相应的区域ID来进行实现,这个区域ID根据ospf的原理,区域0代表骨干区域,区域1、2、3等这些区域代表的是普通的区域。下一步,我们可以观察到,视图已经变成了ospf进程当中的某个区域视图,比如说area0,在相应的区域当中需要发布对应的网段,发布网段的时候要记住一个规则,

相关文章:

HCIP-Datacom Core Technology V1.0_3 OSPF基础

动态路由协议简介 静态路由相比较动态路由有什么优点呢。 静态路由协议,当网络发生故障或者网络拓扑发生变更,它需要管理员手工配置去干预静态路由配置,但是动态路由协议,它能够及时自己感应网络拓扑变化,不路由选择…...

工作自动化——工作自动提炼--智能编程——仙盟创梦IDE

工作自动化中的自动提炼、自动比对代码生成日志,为软件开发与项目管理带来诸多好处。 自动提炼能从复杂代码中精准提取关键信息,节省人工梳理时间,开发人员可快速把握核心逻辑,加速项目熟悉进程。自动比对代码则及时发现版本间差异…...

go语言学习 第 2 章:变量与数据类型

第 2 章:变量与数据类型 在 Go 语言中,变量和数据类型是构建程序的基础。理解它们的使用方式和特性,对于编写高效、可维护的代码至关重要。本章将详细介绍变量的声明、初始化、使用以及 Go 语言中的各种数据类型。 一、变量的声明与初始化 …...

大语言模型评测体系全解析(上篇):基础框架与综合评测平台

文章目录 一、评测体系的历史演进与技术底座(一)发展历程:从单任务到全维度评测1. 2018年前:单数据集时代的萌芽2. 2019-2023年:多任务基准的爆发式增长3. 2024年至今:动态化、场景化、多模态体系成型关键节…...

Spring Event(事件驱动机制)

一、Spring Event 应用场景 1. 业务解耦 当一个业务操作触发多个后续动作时,用事件解耦各个动作,避免代码耦合。 比如:用户注册后同时发送欢迎邮件、积分赠送、日志记录等,这些逻辑可以通过事件发布多个监听器异步处理。 2. 跨模…...

Fisher准则例题——给定类内散度矩阵和类样本均值

设有两类样本,两类样本的类内散度矩阵分别为 S 1 ( 1 1 / 2 1 / 2 1 ) , S 2 ( 1 − 1 / 2 − 1 / 2 1 ) S_1 \begin{pmatrix} 1 & 1/2 \\ 1/2 & 1 \end{pmatrix}, \quad S_2 \begin{pmatrix} 1 & -1/2 \\ -1/2 & 1 \end{pmatrix} S1​(11/2​1…...

MySQL数据库中INNODB表数据的备份与恢复

使用数据库时,其中非常重要的一块内容就是数据的安全,而保障数据安全的重要手段是数据备份与还原恢复。目前,我们主要的备份手段有逻辑备份、物理备份,逻辑备份一般适用范围很广,可以适用于解决不同版本间的备份与恢复,但一般执行时间长,而且备份占用空间大。这里介绍一…...

振动分析师(ISO18436-2)四级能力矩阵 - 简介

本文的内容绝大多数来自:VCAT-II Vibration Analyst - Mobius Institute相关振动分析员培训招生彩页,特此致谢!内容整理参见:振动分析师四级能力矩阵 - 知乎。 CAT I 振动分析技术员 1.1角色画像 Collect vibration dataValida…...

生产环境MYSQL常见锁表场景

前言 锁表是我们在生产环境十分常见的问题之一,解决问题前需要先了解锁表产生的原因以找到解决方案,并制定方案以预防锁表,本文接下来会分别模拟元数据锁表(MDL锁)、行锁升级为表锁、死锁、**显示锁表 **四种锁表情形…...

结构性设计模式之Composite(组合)

结构性设计模式之Composite(组合) 摘要: Composite(组合)模式通过树形结构表示"部分-整体"层次关系,使得用户能够统一处理单个对象和组合对象。该模式包含Component(组件接口&#x…...

Java面试八股--04-MySQL

致谢:感谢整理!2025年 Java 面试八股文(20w字)_java面试八股文-CSDN博客 目录 1、Select语句完整的执行顺序 2、MySQL事务 3、MyISAM和InnoDB的区别 4、悲观锁和乐观锁怎么实现 5、聚簇索引与非聚簇索引区别 6、什么情况下my…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(31):そう

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(31):そう 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)复习(2) そう1,いAくな+さそうでう。2,なAな + そうです。3,いいです ー>よさそうです。4、x Xの状況(じょうきょう)5、みたい & ら…...

设计模式——访问者设计模式(行为型)

摘要 访问者设计模式是一种行为型设计模式,它将数据结构与作用于结构上的操作解耦,允许在不修改数据结构的前提下增加新的操作行为。该模式包含关键角色如元素接口、具体元素类、访问者接口和具体访问者类。通过访问者模式,可以在不改变对象…...

实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.1 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第10章拟合回归模型10.9节思考题10.1 R语言解题。主要涉及线性回归、回归的显著性、回归系数的置信区间。 vial <- seq(1, 10, 1) Viscosity <- c(160,171,175,182,184,181,188,19…...

《对象创建的秘密:Java 内存布局、逃逸分析与 TLAB 优化详解》

大家好呀&#xff01;今天我们来聊聊Java世界里那些"看不见摸不着"但又超级重要的东西——对象在内存里是怎么"住"的&#xff0c;以及JVM这个"超级管家"是怎么帮我们优化管理的。放心&#xff0c;我会用最接地气的方式讲解&#xff0c;保证连小学…...

LeetCode 高频 SQL 50 题(基础版) 之 【高级查询和连接】· 下

上部分链接&#xff1a;LeetCode 高频 SQL 50 题&#xff08;基础版&#xff09; 之 【高级查询和连接】 上 题目&#xff1a;1164. 指定日期的产品价格 题解&#xff1a; select product_id,10 price from Products group by product_id having min(change_date) > 201…...

Java并发编程:读写锁与普通互斥锁的深度对比

在Java并发编程中&#xff0c;锁是实现线程安全的重要工具。其中&#xff0c;普通互斥锁&#xff08;如synchronized和ReentrantLock&#xff09;和读写锁&#xff08;ReentrantReadWriteLock&#xff09;是两种常用的同步机制。本文将从多个维度深入分析它们的区别、适用场景及…...

Spring Boot Actuator未授权访问漏洞修复

方案1&#xff1a;在网关的配置文件里增加以下配置 management:endpoints:web:exposure:include: []enabled-by-default: falseendpoint:health:show-details: ALWAYS 方案二&#xff1a;直接在nginx配置拦截actuator相关接口 location /actuator { return 403; …...

机器学习——SVM

1.什么是SVM 支持向量机&#xff08;support vector machines&#xff0c;SVM&#xff09;是一种二分类模型&#xff0c;它将实例的特征向量映射为空间中的一些点&#xff0c;SVM 的目的就是想要画出一条线&#xff0c;以 “最好地” 区分这两类点&#xff0c;以至如果以后有了…...

【音视频】FFmpeg 硬件(NVDIA)编码H264

FFmpeg 与x264的关系 ffmpeg软编码是使⽤x264开源项⽬&#xff0c;也就是说ffmpeg软编码H264最终是调⽤了x264开源项⽬&#xff0c;所以我们要先理解ffmpeg和x264的调⽤关系&#xff0c;这⾥我们主要关注x264_init。对于x264的参数都在 ffmpeg\libavcodec \libx264.c x264\co…...

贪心算法应用:超图匹配问题详解

贪心算法应用&#xff1a;超图匹配问题详解 贪心算法在超图匹配问题中有着广泛的应用。下面我将从基础概念到具体实现&#xff0c;全面详细地讲解超图匹配问题及其贪心算法解决方案。 一、超图匹配问题基础 1. 超图基本概念 **超图&#xff08;Hypergraph&#xff09;**是普…...

OpenCV CUDA模块结构分析与形状描述符------计算指定阶数的矩(Moments)所需的总数量函数:numMoments

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于计算指定阶数的矩&#xff08;Moments&#xff09;所需的总数量。 在图像处理中&#xff0c;矩&#xff08;moments&#xff09;是一…...

【Web应用】若依框架:基础篇13 源码阅读-前端代码分析

文章目录 ⭐前言⭐一、课程讲解过程⭐二、自己动手实操⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里云社区专家博主、软件设计工程师博客内容开源、框架、软件工程、全栈&#xff08;,NET/Java/Python/C&#xff09;、数据库、操作系统、大数据、人工智能、工控、网…...

[java八股文][JavaSpring面试篇]SpringCloud

了解SpringCloud吗&#xff0c;说一下他和SpringBoot的区别 Spring Boot是用于构建单个Spring应用的框架&#xff0c;而Spring Cloud则是用于构建分布式系统中的微服务架构的工具&#xff0c;Spring Cloud提供了服务注册与发现、负载均衡、断路器、网关等功能。 两者可以结合…...

深度学习篇---face-recognition的优劣点

face_recognition库是一个基于 Python 的开源人脸识别工具,封装了 dlib 库的深度学习模型,具有易用性高、集成度强的特点。以下从技术实现、应用场景等维度分析其优劣势: 一、核心优势 1. 极简 API 设计,开发效率极高 代码量少:几行代码即可实现人脸检测、特征提取和比对…...

基于分布式状态机的集装箱智能道口软件架构方法

集装箱码头对进出场道口的通过能力始终是要求最高的&#xff0c;衡量道口的直接指标为道口通行效率&#xff0c;道口通行效率直接体现了集装箱码头的作业效率以及对外服务水平&#xff0c;进而直接影响到码头的综合能力。所以&#xff0c;码头普遍使用智能道口实现24小时无人值…...

Oracle的Hint

racle的Hint是用来提示Oracle的优化器&#xff0c;用来选择用户期望的执行计划。在许多情况下&#xff0c;Oracle默认的执行方式并不总是最优的&#xff0c;只不过由于平时操作的数据量比较小&#xff0c;所以&#xff0c;好的执行计划与差的执行计划所消耗的时间差异不大&…...

手动事务的使用

使用原因&#xff1a; 公司需要写一个定时任务&#xff0c;涉及增改查操作&#xff0c; 定时将前端页面配置的字典数据&#xff08;标签数据&#xff09;同步到数据库特定的表(标签表) 查询字典表数据 字典有,数据库表没有新增 都有&#xff0c;判断名称&#xff0c;名称不同修…...

Vue 树状结构控件

1、效果图如下所示&#xff1a; 2、网络请求的数据结构如下&#xff1a; 3、新建插件文件&#xff1a;menu-tree.vue&#xff0c;插件代码如下&#xff1a; <template><div class"root"><div class"parent" click"onParentClick(pare…...

Spring Boot的启动流程,以及各个扩展点的执行顺序

目录 1. 初始化阶段执行顺序 1.1 Bean的构造方法&#xff08;构造函数&#xff09; 1.2 PostConstruct 注解方法 1.3 InitializingBean 的 afterPropertiesSet() 1.4 Bean(initMethod "自定义方法") 2. 上下文就绪后的扩展点 2.1 ApplicationContext 事件监听…...