重发布及路由策略

目录

重发布

作用

条件

规则

名词解释点

单点重发布

双点重发布

路由策略

控制层流量和数据层流量

抓流量

ACL列表

前缀列表( ip-prefix)

实例演示

做策略

过滤策略(过滤器-策略)

路由策略(route-policy)

基本配置

路由策略使用

配置实验


重发布

        在同一个网络拓扑结构中,如果存在多种不同的路由协议,由于不同路由协议的机理各有不同,对路由的处理也不相同,这就在网络中造成了路由信息的隔离,在路由协议的边界设备上,将某种路由协议的路由信息引入另一种路由协议中,这个操作被称为路由引入(Route lmportation)或者路由重分发(Route Redistribution)。---这个技术的叫法比较多,也就是我们说的重发布。

作用

        在一个网络中,若运行多种路由协议或相同路由协议的不同进程;协议之间不能直接沟通计算,进程之间也是独立转发和运算的,所以,需要使用重发布来实现路由的共享。

条件

        1,必须存在ASBR设备---同时连接两种协议两个进程,同时学到两边的路由,之后进行路由共享。

重发布的操作就是在ASBR设备上,说明,重发布这个技术主要就应用在两个协议或者两个进程之间。都是两两之间完成的。

        2,必须关注种子度量值---起始度量值,A协议和B协议的开销计算逻辑是不一样,无法直接使用。故将A协议发布到B协议是,ASBR将不携带A协议的度量值,而是共享到B协议后,由ASBR设备在路由中添加一个起始度量值

不同动态路由协议设置的默认种子度量值不同,这点需要重点关注。

规则

        1,将A协议发布到B协议中,在ASBR中的B协议上配置---该规则定义的是重发布技术的配置位置规则。

        2,将A协议发布到B协议中,ASBR将会将所有通过A协议学习到的路由以及ASBR上宣告在A协议中的所有直连路由,全部共享到B协议中。---该规则定义的是重发布发布的内容规则。---这条规则是重发布学习的重中之重。

名词解释点

·单点---两个协议或两个进程之间存在一个ASBR

·双点---两个协议或两个进程之间存在两个ASBR

·多点---两个协议或两个进程之间存在多个ASBR

·单向---仅将A协议路由共享到B协议中

·双向---A/B协议的路由均共享

(因为重发布都是发生在两两之间的,所以,不存在多向)

单点重发布

针对重发布技术,仅需完成对单点重发布的学习即可。

(可以搭建以上拓扑环境,来完成单点重发布配置讲解。)

在进行配置讲解的时候,可以从三个方面来讲

· A-> B:—种动态路由协议发布到另外—种动态路由协议·静态->B:将静态路由导入到动态路由协议中

·直连->B:将直连路由导入到动态路由协议中

注意:这里拿将OSPE的路由信息重发布到RIP中进行演示。

A->B:一种动态路由协议发布到另外一种动态路由协议

[r2-rip-1]import-route ospf 1

结论:通过重发布技术将其他协议的路由信息导入到RIP中,其赋予的默认种子度量值为0。

修改种子度量值的方法:

1.在进程当中对全局进行修改:[r2-rip-1]default-cost 2

2.针对本次重发布进行修改:[r2-rip-1]import-route ospf 1 cost 3

注意:当以上两条命令同时执行时,将按照第2条,匹配更精确的命令来执行。

静态→B:将静态路由导入到动态路由协议中[r2-rip-1]import-route static

结论:

1.导入静态RIP赋予的种子度量值也是0。

2.重发布在导入的路由中无法导入缺省路由信息。

直连→>B:将直连路由导入到动态路由协议中[r2-rip-1]import-route direct

结论:

1.除了R1的直连网段外,所有直连都会导入

2.若ASBR进行了A->B的重发布以及直连->B的重发布,并且两次包含相同的路由信息,则将会优先学习直连->B的重发布信息。

双点重发布

单点重发布看完之后,我们再来看双点重发布(多点和双点差不多)。我们可以搭建如下拓扑:

思考---如果我们再R2和RA上同时做双向的重发布,会遇到哪些问题呢?

假设,R2上有一个环回2.0网段,在RIP进程中进行了宣告。因为R4也运行了RIP进程,所以,通过RIP进程R4A将学习到2.0网段的路由信息。之后,R2上进行重发布,将B2的RIP的路由重发布到OSPF中,则2.0网段的路由信息也将发布过来。(这个属于宣告在A协议的接口对应的直连网段),因为R4也运行了OSPF,所以,B4将通过QSPE学习到2.0网段的路由信息。R4通过两种协议学习到2.0网段的路由信息,按照优先级,则将学习OSPF的(事实并不会是如此,因为重发布的路由在OSPF中是以5类LSA通告的,其生成的路由默认优先级被定义为150,大于RIP的默认值100)。一旦学习了,R4的路由表将发生变化,之后将通过R3访问R2的环回。之后,如果R4也进行了重发布,则R4也会将2.0网段的路由信息重发布到RIP之中。(这属于通过A协议学习到的路由信息)。因为重发布过来会清除原先的度量值,所以在R1上到达2.0网段将形成一个负载均衡,同时走R2和R4,这很明显出现了选路不佳。这种现象就是所谓的路由回馈现象。严重的也会引起路由环路的产生。

在上图实验中,不存在路由回馈的问题,选路不佳的问题出现在R3至2.0的选路上!
 

结论:默认RIP和OSPE协议若进行双点重发布,由于两者的优先级不同,故第一台ASBR设备重发布动作结束后,将影响其他ASBR设备的路由表。使得路由可能被回传到源协议当中,发生路由回馈--A协议的路由重发布到B协议当中后,又被重新发布回A协议。路由回馈可能会导致选路不佳甚至路由环路的出现。---当然,因为华为设备将重发布到OSPF的路由的优先级设置为了150,所以,在上图所示情况下,是不会发生路由回馈的。

        当然,就算解决了路由回馈问题,多点的重发布还是存在其必然产生的问题---选路不佳。主要还是因为他清楚了原先的开销值导致的。---而这个问题,想要解决,是无法仅通过重发布技术来解决,而需要使用到路由策略了。

路由策略

在说路由策略之前,我们需要先了解两个名词。

控制层流量和数据层流量

1.控制层流量---路由协议传递路由信息产生的流量

2.数据层流量---设备访问目标地址时产生的流量

而所谓路由策略一在控制层面转发流量的过程中,截取流量,之后修改流量再转发或者不转发,最终达到影响路由器路由表的生成,干涉选路的效果。

(这个概念就和我们之前讲的ACL列表有点像,只不过ACL是针对数据层流量进行访问控制,路由策略主要针对的是控制层流量。)

路由策略的整体动作也是分为两部分的,一部分是先截取流量(抓流量),还有一部分就是针对流量进行修改或者不转发(做策略)。

抓流量

我们这里介绍抓取流量的方法主要有两种,一种是通过ACL列表来抓取流量;另一种是通过前缀列表(ip-prefix)来抓取流量。

ACL列表

因为ACL列表本身设计是为了抓取数据层流量的,所以,因为通配符的存在他可以灵活的匹配数字特征,但是,没有办法匹配路由信息中的掩码特征。所以,并不擅长控制层流量的抓取。

ACL在抓取路由信息时,只能按照数字特征来进行匹配。

例如我们抓取一条携带192.168.1.0/24路由信息的数据包,使用ACL列表抓取时只能如下抓取

[r2]acl 2000

[r2-acl-basic-2000]rule permit source 192.168.1.0 0

后面的0是通配符,代表所有的数字都不允许发生变化。

正式因为如此,如果需要我们在192.168.1.0/24,192.168.1.0/25,192.168.1.0/26中抓取到192.168.1.0/24,则ACL将无能为力,他只能按照数字特征抓,则意味着使用以上抓法将同时抓到携带这三种路由信息的数据包。

前缀列表( ip-prefix)

从名字上看JP前缀列表是一个列表形态的工具。它所匹配的对象是IP地址前缀,也就是路由条目。一个路由条目由目的网络地址(也被称为前缀)及掩码长度〈也被称为前缀长度)共同标识。使用ACL从一批路由中筛选出感兴趣的路由时,是无法指定被匹配对象的目的网络掩码长度的,但是IP前缀列表却可以做到,它除了能够指定被匹配对象的目的网络地址,还能指定目的网络掩码长度,从而实现对路由的精确匹配。

IP前缀列表可以包含一条或多条语句,每条语句都使用一个十进制的序号(Index)进行标识。在本例中,这个名称为abcd的IP前缀列表中只有一条语句,这条语句的序号为10,正如前面所说,您可以为一个IP前缀列表创建多条语句,每条语句使用不同的序号,所有的语句按照序号从小到大依序排列,这与ACL非常类似

前缀列表还可以进行范围匹配,下面的示例中增加了greater-equal (大于或等于)及less-equal(小于或等于)这两个关键字及参数,从而指定了掩码长度的范围。这条命令要求路由的目的网络地址的前16个比特位与172.16.0.0的前16个比特位相同。另外路由的目的网络掩码长度需大于或等于24,同时小于或等于32。只有满足上述条件的路由才会被该语句匹配。

如果一条语句中只是指定了greater-equal关键字(且没有指定less-equal关键字),则掩码长度的范围是大于或等于greater-equal关键字所指定的值,同时小于或等于32。而如果只是指定了less-equal关键字(且没有指定greater-equal关键字),则掩码长度的范围是大于或等于命令中指定的掩码长度,同时小于或等于less-equal关键字指定的值。

前缀列表的匹配规则:从上而下,逐一匹配,一旦匹配上则将按照该规则执行,不再向下匹配。末尾隐含拒绝所有的规则

IP前缀列表是一个重要的路由策略工具,能够作为路由过滤器被应用于各种场景,例如可以被Route-Policy调用,或者Filter-Policy调用等等,另外,也在BGP路由协议中被直接用于路由过滤。

实例演示

下面通过几个例子来加深大家对IP前缀列表的理解。假设有四条路由:172.16.0.0/16、172.16.0.0/24、172.16.0.0/30,172.16.1.1/32,它们都是用于测试的被匹配对象。通过不同的P前缀列表可以达到不同的结果。

1.ip ip-prefix aa index10 permit 172.16.0.0 24

上述语句要求路由的目的网络地址的前24个比特位需与172.16.0.0的前24个比特位相同,并且路由的目的网络掩码长度必须为24。因此aa这个P前缀列表只允许了四条路由中的172.16.0.0/24

2.ip ip-prefix bb index 10 permit 172.16.0.0 16 less-equal 24

上述语句要求路由的目的网络地址的前16个比特位需与172.16.0.0的前16个比特位相同并且路由的目的网络掩码长度须大于或等于16,且小于或等于24。因此bb这个I前缀列表允许了四条路由中的172.16.0.0/16及172.16.0.0/24。

3.ip ip-prefix cc index 10 permit 172.16.0.0 16 greater-equal 24

上述语句要求路由的目的网络地址的前16个比特位需与172.16.0.0的前16个比特位相同并且路由的目的网络掩码长度须大于或等于24(且小于或等于32,系统会自动在该命令后添加less-equal 32)。因此 cc这个Ip前缀列表允许了四条路由中172.16.0.0/24、172.16.0.0/30以及172.16.1.1/32。

4.ip ip-prefix dd index 10 permit 172.16.0.0 16 greater-equal 24 less-equal 30

上述语句要求路由的目的网络地址的前16个比特位须与172.16.0.0的前16个比特位相同并且路由的目的网络掩码长度须大于或等于24,且小于或等于30。因此dd这个IP前缀列表允许了四条路由中的172.16.0.0/24和172.16.0.0/30。

5.ip ip-prefix ee index 20 permit 172.16.0.0 24

上述IP前缀列表的名称为ee,它拥有两条语句。序号为10的语句要求路由的目的网络地址的前30个比特位须与172.16.0.0的前30个比特位相同,并且路由的目的网络掩码长度必须为30,而由于该语句的匹配模式为deny,因此四条路由中的172.16.0.0/30被该语句匹配住而且被拒绝。另外,序号为20的语句匹配路由172.16.0.0/24。由于IP前缀列表末尾隐含拒绝所有,因此最终四条路由中只有172.16.0.0/24被该P前缀列表所允许。

6. ip ip-prefix ff index 10 permit 0.0.0.0 0 less-equal 32

上述语句中,IP地址为0.0.0.0,这种形式的IP地址被称为通配地址,也即该地址能匹配任意的目的网络地址。因此该语句并不关心被匹配路由的目的网络地址,但是要求路由的目的网络掩码长度须大于或等于0,且小于或等于32,实际上所有的路由都满足上述要求,因此,该条语句相当于"允许所有"。因此四条路由都将被允许。ip ip-prefix gg index 10 deny 172.16.0.0 30

7.ip ip-prefix gg index 20 permit 0.0.0.0 0 less-equal 32

上述IP前缀列表的名称为gg,它拥有两条语句。序号为10的语句拒绝了路由172.16.0.0/30,而序号为20的语句则为允许所有,因此四条路由中,除了172.16.0.0/30之外,其他所有路由都被允许。

8.ip ip-prefix hh index 10 permit 0.0.0.0 0 greater-equal 32 less-equal 32

上述lP前缀列表将匹配网络掩码长度为32的任意路由,也就是匹配所有的主机路由,因此四条路由中,只有172.16.1.1/32被允许。

9.ip ip-prefix ii index 10 permit 0.0.0.0 0

这是一个非常特殊的语句,该语句允许的是默认路由0.0.0.0/0。

做策略

我们需要针对抓取到的流量执行对应的操作,修改其中内容或者是拒绝通过,这些操作都需要依靠策略来完成.我们这里主要给大家介绍的策略有两种.过滤策略(filter-policy)和路由策略(route-policy)

过滤策略(过滤器-策略)

Filter-Policy (过滤-策略),可以将其视为一种路由过滤器。下图展示了一个Filter-Policy的部署案例。R1、R2及Co_sw运行了RIPx2,CO_SW将服务器集群的网段发布到了RIP中,并将路由通过RIP通告给R1及R2,初始情况下,B1及R2都能学习到所有到达服务器集群网段的路由。现在网络中增加了一个需求:要求R1下联的PC不能访问服务器集群中的192.168.2.0/24网段,但是仍可以访问其他服务器网段。

要实现上述需求其实有多种方法,Filter-Policy使是其中之一。我们可以在CO_sw上部署Filter-Policy,将其通告给R1的RIP路由进行过滤,把192.168.2.0/24从路由更新中过滤掉,如此一来R1将无法再通过RIP获知到达

192.168.2.0/24的路由,那么PC用户也就无法再通过R1访问该网段了。

需要强调的是,Filter-Policy只能够对路由信息进行过滤,而无法对LSA进行过滤。

就使用搭建的双点重发布的环境,如果R2和R4都进行了重发布,则R1这边通过RIP学习到的到达OSPE网段都将是负载均衡,我们可以通过过滤策略来打破这个负载均衡,选取最佳的选路。比如,R2和R3之间的23.0.0.0/24网段,R1到达该网段,选择走R2为下一跳是最佳的选择,而不应该走R4。则我们可以将R4发来的路由信息进行过滤。

这个过滤策略在做的时候,做的位置是可以自行选择的,我们可以在R1上做,在R1收到R4发来的路由信息时,将其进行过滤,我们将这样的策略称为入方向的策略入方向的策略将影响自身;当然,我们也可以在RA上进行配置,让R4在给R1发路由信息的时候不去携带这条路由信息,我们将这样策略称为出方向的策略,出方向的策略影响他人

步骤:

1,抓取流量

(这里使用ACL列表抓取,当然也可以使用过滤列表进行抓取)

[r2]acl 2000

[r2-acl-basic-200orule deny s 23.0.0.0 0 ---注意,过滤列表本身没有过滤能力,所以,需要在抓取流量时使用拒绝动作。(后面写0代表完全按照数字特征来抓取路由信息)

[r2-acl-basic-2000]rule permit source any ---注意,在抓流量时,末尾一定要放通剩余流量否则将会把所有流量全部过滤掉。

2,在过滤策略中调用---这里时在RA上进行的出方向的调用,也可以在R1上进行入方向的调用

[r4-rip-1]filter-policy 2001 export GigabitEthernet 0/0/0 ---因为是进程中进行调用,所以需要选定策略影响的入接口

注意:过滤列表可以在OSPE中使用,但是,因为OSPF中传递的是拓扑信息,所以,无法进行出方向的过滤,只能进行入方向的调用,并且,调用的效果是仅将过滤抓取的路由信息不加表。

上图中,已经进行多点双向重发布,不存在路由回馈的问题(原因:其他协议路由再重发布进入OSPF时,优先级被修改为150).

所以上图仅考虑选路不佳的问题;在上图中R1去往23.1.1.0/24网段是等开销负载均衡的(原因:重发布后,原有协议的度量值被洗掉,仅保留种子度量值)。

原有路由表截图。

做法:通过使用前缀列表及过滤策略实现R1去往23.1.1.0/24 网段的路由仅从R1走。

第一种做法:在R1-R4的入口上调用过滤策略

步骤:

第一步:使用前缀列表抓取23.1.1.0/24网段(因为过滤是要拒绝,所以前缀列表书写拒绝).

[R1]ip ip-prefix 1 index 10 deny 23.1.1.0 24 //拒绝23.1.1.0/24

[R1]ip ip-prefix 1 index 20 permit 0.0.0.0 0 less-equal 32 //允许所有(末尾隐藏拒绝所有)。

第二步:书写过滤策略

[R1]rip 1

[R1-rip-1]filter-policy ip-prefix 1 import GigabitEthernet 0/0/1 //import 代表入方向

第三步:检查

第二种做法:在R4-R1的出口上调用过滤策略

同样方法,在R4上用前缀列表抓取流量,然后在R4的出口调用

路由策略(route-policy)

基本概念

Route-Policy是一个非常重要的路由策略工具,如下图所示,您可以把它想象成拥有一个或多个节点(Node)的列表,每一个节点都可以是一系列条件语句及执行语句的集合,这些节点按照编号从小到大的顺序排列。在每个节点中,用户可以定义条件语句及执行语句,这就有点像程序设计语言里的If-Then(如果-则)组合。在Route-Policy被执行的时候,设备从编号最小的节点开始进行路由匹配,如在途中首先看节点,设备对该节点中的条件语句进行匹配,如果被匹配的对象满足所有条件,则执行该节点中的执行语句,并且不会再继续往下一个节点进行匹配。而如果节点1中,有任何一个条件不满足,则前往下一个节点,也就是到节点2中去匹配条件语句,如果被匹配的对象满足所有条件,则执行该节点中的执行语句,如果不满足,则继续往下一个节点进行匹配,以此类推。

路由策略的匹配规则:自上而下,逐一匹配,一旦匹配上则将按照对应的规则来执行动作,I不再向下匹配。末尾隐含拒绝所有的规则

下图展示了一个 Route-Policy实例,该Route-Policy的名称为hcnp,一共有三个节点,序号分别是5,10和15。之所以在每个序号之间预留4个数,是为了考虑扩展性,这样一来用户如果需要插入新节点,则还有预留的序号可以使用。每个节点中都配置了条件语句(使用if-match命令定义)及执行语句(使用apply命令定义)。当该Route-Policy被调用且开始执行时,路由匹配的操作将从序号最小的节点--节点5开始进行。节点5中定义了多条if-match语句,只有当所有的if-match语句都满足时,才会执行y1所定义的动作。如果节点5中有任何一个条件不满足,则继续到下一个节点中进行匹配。

基本配置

1,创建—个Route-Policy节点

route-policy route-policy-name { permit | deny } node node

在设备的系统视图中使用上述命令,即可创建一个Route-Policy节点,并进入该Route-Policy节点的配置视图。在该命令中,Route-Policy 的名称可以根据需要自行定义.

在名称的后面,有两个关键字可以选择,它们用于指定该节点的匹配模式。

(1)Permit:指定该节点的匹配模式为允许。如果路由匹配的结果是满足该节点的所有if-match语句,则该路由被视为允许通过,该节点的apply语句将被执行,且不再进入下一个节点;如果该节点中有if-match语句不满足,则进入下一个节点继续匹配。

(2)Deny:指定节点的匹配模式为拒绝。如果节点的匹配模式为deny,则该节点的apply语句将不被执行。如果路由匹配的结果是满足该节点的所有if-match语句,那么Route-Policy的匹配过程立即结束,不会再进入下一个节点,而且满足该节点条件的路由被视为拒绝通过。如果该节点下有if-match语句不满足,则进入下一个节点继续匹配。

值得注意的是,当Route-Policy用于路由匹配时,被匹配对象(也就是路由条目)必须满足一个节点中的所有if-match语句(“与"的关系),才被认为匹配该节点。如果某条路由没有被Route-Policy的任何节点匹配,则该路由被视为拒绝通过该Route-Policy,也就是说,Route-Policy 的末尾隐含着一个类似拒绝所有的节点。当然,为了避免所有的路由都被拒绝通过,一个Route-Policy中必须至少有一个节点的匹配模式为permit。

2,(可选)配置if-match语句

在Route-Policy的节点视图下,使用if-match命令可定义匹配条件,所匹配的对象是路由信息的一些属性,例如路由的目的网络地址或掩码长度、度量值、标记或下一跳P地址等。常用的就是匹配ACL.或者前缀列表抓取的流量。

(1)匹配ACL:

if-match acl { acl-number | acl-name }

(2)匹配IP前缀列表:

if-match ip-prefix ip-prefix-name

一个节点中可以包含多条if-match语句,这些if-match语句之间是"与”的关系,也就是说所有的if-match语句必须同时满足,被匹配对象才被视为匹配该节点。一个节点中可以不包含任何if-match语句,当这种情况出现时,则视为匹配所有,也就是任何的被匹配对象都满足该节点的条件。

3,(可选)配置apply语句

在Route-Policy的节点视图下,使用apply命令指定需执行的动作,这些动作主要是对所匹配的路由的某些属性进行修改,例如修改路由的度量值、优先级值、标记等。以下是一些常用的apply命令。(后续BGP将大量使用路由策略来修改其中的路径属性)

(1)设置路由的度量值:

apply cost [+l- ] cost

(2)设置OSPE的度量值类型:

apply cost-type { type-1 / type-2 }

(3)设置路由的标记:

apply tag tag

一个节点中可以不包含任何apply语句,此时该节点只被用于执行路由过滤,而不用于设置路由的属性。

路由策略使用

路由策略使用:在上图中R3对192.168.2.0/24的选路存在相应的问题,现在的情况是等开销的

现在,通过路由策略来干涉选路,通过观察,我们需要在R4上通过路由策略来加大cost值的方法来干涉选路.

做法:

第一步:使用前缀列表抓取流量

[R4]ip ip-prefix 1 permit 192.168.2.0 24

第二步:创建路由策略

[R4]route-policy 1 permit node 10

lnfo: New Sequence of this List

[R4-route-policy]if-match ip-prefix 1

[R4-route-policy]apply cost + 10

[R4-route-policy]q

[R4]route-policy 1 permit node 20.

第三步:重发布时调用

[R4]ospf 1

[R4-ospf-1]import-route rip 1 route-policy 1 type 1 //必须修改Type1l

第四步:测试

配置实验

实验要求:R1创建4条环回,均宣告在RIP中。R2同时运行RIP和OSPE,需要在R2上进行重发布,将RIP的路由信息重发布到OSPE中。按照重发布的发布规则,将发布过来5条路由信息(R1的4条环回及12.0.0.0网段。)重发布后的五条路由信息分别做五种不同的处理,按图中所示。(12.0.0.0/24网段不做处理)。

步骤:

1.配IP地址

2.首先进行单点双向重发布,后R3路由表如下图所示

<R3>display ospf routing

3.做策略

第一步:使用前缀列表抓取各流量(此处不再使用acl)

[R2]ip ip-prefix a permit 1.1.1.0 24

[R2]ip ip-prefix b permit 2.2.2.024

[R2]ip ip-prefix c permit 3.3.3.024

[R2]in ip-prefix d permit 4.4.4.0 24

第二步:使用路由策略

[R2]route-policy celve deny node 10

Info: New Sequence of this List.

[R2-route-policy]if-match ip-prefix a

[R2-route-policy]q

[R2]route-policy celve permit node 20

Info: New Sequence of this List.

[R2-route-policy]if-match ip-prefix b

[R2-route-policy]apply cost 10

[R2-route-policy]q

[R2]route-policy celve permit node 30

Info: New Sequence of this List.

[R2-route-policy]if-match ip-prefix c

[R2-route-policy]apply cost-type type-1

[R2-route-policy]q

[R2]route-policy celve permit node 40

Info: New Sequence of this List.

[R2-route-policy]if-match ip-prefix d

[R2-route-policy]apply cost-type type-1

[R2-route-policy]apply tag 666

[R2]route-policy celve permit node 50

Info: New Sequence of this List.

第三步:重发布调用

[R2]ospf 1

[R2-ospf-1]import-route rip1 route-policy celve

第四步:测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/48364.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3、线性数据结构

线性数据结构&#xff0c;从名字可以看出&#xff0c;和“线”脱离不了关系。 那么从“线”联想&#xff0c;水平的&#xff0c;我们可以想到食堂打饭排的队伍&#xff0c;垂直的&#xff0c;我们可以联想到书桌上层叠摆放的书籍。 打饭的队伍一般遵循“先来先服务”的原则&a…

低成本32位单片机空调内风机方案

空调内风机方案主控芯片采用低成本32位单片机MM32SPIN0230&#xff0c;内部集成了具有灵动特色的电机控制功能&#xff1a;高阶4路互补PWM、注入功能的高精度ADC、轨到轨运放、轮询比较器、32位针对霍尔传感器的捕获时钟、以及硬件除法器和DMA等电机算法加速引擎。 该方案具有…

Windows 不同方式打开的cmd/dos窗口属性配置不同

文章目录 1. 默认值&#xff08;控制台窗口&#xff09;属性2. "C:\Windows\System32\cmd.exe" 属性3. "命令提示符"属性4. 自定义某标题cmd窗口属性5. cmd快捷方式的属性总结 最近在写某个批处理脚本时&#xff0c;意外发现 Windows系统中&#xff0c;在不…

通过cmake工程生成visual studio解决方案

1、前言 visual studio是一个很强大的开发工具&#xff0c;这个工具主要是通过解决方案对我们的源码进行编译等操作。但是我们很多时候拿到的可能并不是一个直接的解决方案&#xff0c;可能是是一个cmake工程&#xff0c;那么这个时候我们就需要通过cmake工程生成解决方案&…

三元运算符引发的自动拆装箱问题

文章目录 问题背景问题排查排查过程问题扩展总结 问题背景 生产环境上出现空指针异常&#xff0c;追踪报错位置得知以下代码报错 if (isNull(aiGroup)) {return null;}aiGroup.setNum(isNull(param.getNum()) ? aiGroup.getNum() : param.getNum().doubleValue());问题排查 …

【C语言】文件操作重点内容梳理

本文目录 1. 什么是文件 1.1 程序文件 1.2 数据文件 1.3 文件名 2. 文件的打开和关闭 2.1 文件指针 2.2 文件的打开和关闭 3. 文件的顺序读写 3.1 顺序读写函数介绍 4. 文件的随机读写 4.1 fseek 4.2 ftell 4.3 rewind 5. 文本文件和二进制文件 6. 文件读取结束的判定 6.1 被错…

Bert经典变体学习

ALBert ALBERT就是为了解决模型参数量大以及训练时间过长的问题。ALBERT最小的参数只有十几M, 效果要比BERT低1-2个点&#xff0c;最大的xxlarge也就200多M。可以看到在模型参数量上减少的还是非常明显的&#xff0c;但是在速度上似乎没有那么明显。最大的问题就是这种方式其实…

uniapp:手写签名,多张图合成一张图

要实现的内容&#xff1a;手写签名&#xff0c;协议内容。点击提交后&#xff1a;生成1张图片&#xff0c;有协议内容和签署日期和签署人。 实现的效果图如下&#xff1a; 1、签名页面 <template><view class"index"><u-navbar title"电子协议…

《MySQL》第十二篇 数据类型

目录 一. 整数类型二. 浮点类型三. 日期和时间类型四. 字符串类型五. 枚举值类型六. 二进制类型七. 小结 MySQL 支持多种数据类型&#xff0c;学习好数据类型&#xff0c;才能更好的学习 MySQL 表的设计&#xff0c;让表的设计更加合理。 一. 整数类型 类型大小SIGNED(有符号)…

7D透明屏的市场应用广泛,在智能家居中有哪些应用表现?

7D透明屏是一种新型的显示技术&#xff0c;它能够实现透明度高达70%以上的显示效果。这种屏幕可以应用于各种领域&#xff0c;如商业广告、展览展示、智能家居等&#xff0c;具有广阔的市场前景。 7D透明屏的工作原理是利用光学投影技术&#xff0c;将图像通过透明屏幕投射出来…

国产化 | 走近人大金仓-KingbaseES数据库

引入 事务隔离级别 || KingbaseES数据库 开篇 1、KingbaseES数据库 百度百科&#xff1a;金仓数据库的最新版本为KingbaseES V8&#xff0c; KingbaseES V8在系统的可靠性、可用性、性能和兼容性等方面进行了重大改进&#xff0c;支持多种操作系统和硬件平台支持Unix、Linux…

基于罪名法务智能知识图谱(含码源):基于280万罪名预测、20W法务问答与法律资讯问答功能

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…

ThinkPHP8知识详解:给PHP8和MySQL8添加到环境变量

在PHPenv安装的时候&#xff0c;环境变量默认的PHP版本是7.4的&#xff0c;MySQL的版本是5.7的&#xff0c;要想使用ThinkPHP8来开发&#xff0c;就必须修改环境变量&#xff0c;本文就详细讲解了如果修改PHP和MySQL的环境变量。 1、添加网站 启动phpenv&#xff0c;网站&…

019 - STM32学习笔记 - Fatfs文件系统(一) - FatFs文件系统初识

019 - STM32学习笔记 - Fatfs文件系统&#xff08;一&#xff09; - FatFs文件系统初识 最近工作比较忙&#xff0c;没时间摸鱼学习&#xff0c;抽空学点就整理一点笔记。 1、文件系统 在之前学习Flash的时候&#xff0c;可以调用SPI_FLASH_BufferWrite函数&#xff0c;将数…

四步从菜鸟到高手,Python编程真的很简单(送书第一期:文末送书2本)

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支持&#xff0c;我…

临床医学怎样翻译比较 好

近年来&#xff0c;随着不同国家之间医药行业形成的共同研究趋势&#xff0c;临床翻译对于来自不同国家的医疗人员的合作至关重要。那么&#xff0c;临床医学怎样翻译比较 好&#xff0c;北京哪个翻译公司比较专业&#xff1f; 据了解&#xff0c;临床医学翻译包含患者病历记录…

Linux之 Vim 搜索方式

方式一&#xff1a;快速搜索&#xff08;字符串完全匹配&#xff0c;区分大小写&#xff09; 格式&#xff1a; / 关键词 or &#xff1f; 关键词 /内容 #按回车键搜索 从上到下查找 ?内容 #按回车键搜索 从下到上查找 优点&#xff1a;快速定位到该关键字 回车之后&…

【Lua学习笔记】Lua进阶——Require,三目运算

文章目录 Require短路判断实现三目运算符 Require 这是文件aaa.lua的内容 aaa.lua: a 10 local b 20 print("我是aaa")这是文件example.lua的内容 example.lua: a 100 print(a) require("aaa") --require调用其他脚本文件 print(a) print(b) print(&…

Psim 2022仿真软件的安装--Psim电力仿真实战教程

文章目录 Psim 2022 仿真软件安装及使用教程软件介绍1.下载psim 2022安装软件&#xff0c;有需要的亲请联系作者。2.点击安装文件3.点击进行安装&#xff1a;4.安装完成&#xff0c;打开软件&#xff0c;开始仿真5.仿真模型介绍5.1.单相全控整流电路仿真5.2 三相PFC可控整流电路…

【点选验证码】生成点选验证码图片

生成点选验证码图片 参考博客&#xff1a;https://blog.csdn.net/sinat_39629323/article/details/121989609 from tqdm import tqdm from PIL import Image, ImageDraw, ImageFont, ImageOps import shutil,os import numpy as np import cv2 import math import random fil…