AS---自治系统
AS定义:由一个单一的机构或组织所管理的一系列IP网络及其设备所构成的集合
AS划分的原因:
- 整个网络规模较大,伴随的是路由表中的路由数量进一步增加,路由表规模变大,路由收敛速度变慢,设备性能消耗加大。-----范围太大。
- AS之间可能是由不同的机构、公司,相互之间无法完全信任,使用IGP协议可能存在暴露AS内部的网络信息的风险。
不同的AS通过AS号进行分区,AS号存在16bit、32bit两种。----IANA---互联网数字分配机构
- 16位AS号,取值范围1-65534(0和65535保留),其中64512-65534为私有的AS号,可以自行使用,公有的AS号为1-64511
- 保留AS号
- RFC44893标准,23456该AS号为保留AS号。
- RFC5398标准
- 16位AS号:64496-64511---16个
- 32位AS号:65536-65551---16个
BGP基础
- BGP-1------RFC1105
- BGP-2------RFC1163
- BGP-3------RFC1267
- BGP-4------RFC1771----4271
BGP协议介绍
- 首先RIP是基于UDP进行传输的,而UDP是一个不可靠的协议,他在传输过程中可能会丢失某些数据。
- 缺省情况下,RIP协议的路由更新报文的发送间隔是30S,而如果两个AS内部的路由表非常大,30秒的时间可能还不够将所有的路由信息传递给对方AS,这样,整条链路完全就是为了RIP的通告报文服务,而不能转发数据流量。
解决方法:
- 将UDP协议更换为TCP协议,不用担心数据丢失,并且TCP会预先建立连接,也就让路由器有了一个准备的时间,而不是像RIP一样毫无准备的接受大量更新数据。
- 取消周期更新,改为触发更新
- 在第一次路由数据同步完成后,如果有路由增加,就发送通告路由增加的报文。如果路由删除,就发送一个通告路由删除的报文。
- 如果路由信息发生改变,就先发送一个通告路由删除的报文,在发送一个通告路由增加的报文。
运行BGP协议之间的设备传递路由信息,原因在于若传递拓扑信息,会导致路由器负载过高,并且会让对端AS看到本端的拓扑信息,引发安全问题。
BGP需要传递所有的通过BGP学习到的路由信息,并且运行了BGP协议的路由器,所维护的路由表是包含了整个互联网的所有路由信息的。
总结:(BGP特点)
- BFP基于TCP,只要能够建立TCP连接,就可以建立BGP连接
- 触发式更新,不在进行周期更新
- 只传递路由信息,而不会暴露AS内的拓扑信息
- 不传递拓扑的原因
- 拓扑信息资源占用量大
- 会暴露AS内部的拓扑连接情况
- 无类别的路径矢量型协议
- 无类别---传递时携带真实的子网掩码
- 矢量---方向性,谁传递的路由谁为下一跳
- 距离矢量---将一个路由器看做一个单位计算距离
- 路径矢量---将一个AS看做一个整体,从而计算下一跳
IGP协议的主要任务是将AS内部的未知网段信息计算获取到,而BGP则主要是将IGP协议计算出来的
BGP的特征
IGP协议特点
- 选路佳
- 收敛快
- 占用资源少
可控性
因为在重发布的过程中,由于会抹除原有的度量值,会导致选路不佳的情况,而BGP为了弥补这个不足点,直接舍弃了开销值。取而代之的是设计了很多的路径属性。
可靠性
- BGP因为只有触达更新,而不存在周期更新,所以需要确保其可靠性,使用TCP为传输协议。端口号179------BGP会话的建立是手工指定的(单播形式)。
- IGP协议不选择TCP的原因:
- TCP传输效率低
- TCP传输占用资源大
- TCP只能实现单播,所以,无法通过组播或者广播的形式发送数据,将导致IGP协议五大自动发现邻居关系,只能手工指定。
AS-BY-AS
BGP将一个AS看做是一个整体
BGP协议不支持负载均衡
IGP协议追求 收敛速度快 选路佳(无环路) 占用资源少 BGP协议追求 可控性 可靠性 AS-BY-AS BGP对等关系
BGP因为传输层使用的是TCP协议,所以只要在TCP协议可以正常建立会话的基础上就可以完成BGP的建邻工作.
BGP支持非直连建邻(网络可达)---BGP的非直连建邻是建立在IGP(静态)之上的。
BGP存在两种对等体关系类型:EBGP、IBGP
- EBGP对等体关系
- 位于不同自治系统的BGP路由器之间的BGP对等体关系。
- EBGP对等体一般使用直连建立对等体关系。EBGP邻居之间的报文中TTL值被设为1
- 两台路由器之间要建立EBGP对等体关系,需要满足一下条件:
- 两个路由器属于不同AS
- 在配置时,peer命令所指定的对等体的IP地址必须路由可达,TCP连接必须正常建立
- IBGP对等体关系
- 位于相同内治系统的BGP路由器之间的BGP对等体关系。
- IBGP对等体一般使用非直连建邻。IBGP邻居之间的报文TTL值被设置为255.(因为报文较多)
- 在IBGP对等体中,常使用环回接口地址作为源目的IP地址
- 换回接口稳定
- 可借助AS内部的IGP和冗余拓扑来保证可靠性
BGP特点:
- 无类别路径矢量型协议----AS-BY-AS
- 使用单播更新来发送消息,基于TCP 179端口工作
- 增量更新机制----仅触发更新,无周期更新
- 具有丰富的路径属性来取代IGP中的度量值进行选路,可以由多个属性共同控制协议
- 可以在流量的进出口实行路由策略----可控性
- 默认不被用于负载均衡---会通过各种选路规则仅仅产生一条最佳路径
- BGP支持认证和聚合
BGP数据包
BGP packet-----应用层
BGP报文头部
Route-refresh包---路由刷新包(非要点)
作用:目来要求对等体重新发送指定地址族的路由信息。
一般为本端修改了相关的路由策略之后让对方重新发送更新报文,本端执行新的路由策略重新计算BGP路由
双方均支持路由刷新功能
OSPF中的hello报文----可以周期性发现,建立和保活邻居关系。
Open包
open报文是TCP连接建立之后发送的第一个报文,用于建立BGP对等体之间的连接关系。
- My AS---本地AS号
- Hold Time---保活时间
- BGP ldentifier---BGP标识符(RID 32bit)
- { 全网唯一}
- 于ospf中的RID 用法相同
- 获取方式:手工配置>最大环回接口>最大物理接口
BGP需要协商的参数
- AS号
- BGP的open报文会携带本地的AS号,通过比较两端的AS号可以判断对端是否和本端处于相同AS。
- 不管这个AS号和本地的AS号是否相同,都不影响BGP对等体的建立
- 另外,如果对方的AS号和本地指定对等体时写的4S号不同,则会导致邻居关系无法建立。
- peer 12.0.0.2 as-number 100
- RID
- 通过对比open报文中的RID值,可以判断是否相同,若相同则会导致建邻失败。
- 认证字段
- BGP也可以进行认证,认证口令不同,则也会导致建邻失败。
- 该字段永远以MD5值的方式保存在TCP的选项字段。
- 保活时间---并不影响BGP对等体建立
- BGP在建立对等体关系时,需要协商该参数
- 如果在该时间内未收到对端发来的keepalive报文或者update报文,则认为BGP连接中断。--默认时间180s
- 报文更新时间----三分之一保活时间(60s)
- 若双方保活时间不一致,则按照小的时间进行
- 该参数可以设置为0,
- 若设置为0,则代表不发送Keepalive报文
- 路由刷新功能
keepalive包
作用:用来周期保活
除了保活机制外, keepalive 报文还在 open 报文协商参数时,临时充当确认报文 ----- 确认 open 报文中 的参数是否认可 。update包---更新包
作用:用于在对等体之间传递路由信息,可以用于发布、撤销路由。--携带需要传递的路由信息。
需要携带的参数主要就是目的网络号、子网掩码信息和路径属性。
Notification包
纯粹的告警机制。当BGP检测到错误状态时(对等体关系建立时、建立之后都可能发送该报文),就会向对等体发送该报文,告知对端错误原因。之后BGP连接会立即中断。
BGP的状态机
BGP的角色
- Speaker
- 发送BGP报文的设备被称为BGP Speaker(发言者)
- 它接收或产生新的报文信息,并发布给其他BGP Speaker。Speaker角色是针对具体报文发送过程而言的,网络中每台BGP路由器均可称为自己发这BGP报文的Speaker。
- Peer
- 相互交换报文的Speaker之间互相称为peer(对等体)
BGP的状态机仅描述的是对等体关系建立过程的状态变化。BGP可以将邻居建立过程和BGP路由收发过程分开。
IDLE---空闲状态
- 所有设备启动BGP进程后,首先进入该状态。
- 进入该状态后,等待手工指定邻居
- 当手工指定邻居之后,将会进入到一个检查环节。需要检查手工指定的厄IP地址在本地全局路由表中是否可达,只有可达,才可以正常建立TCP的会话,如果不可达,则邻居关系建立失败,停留在IDLE状态。
- 若检查成功,则进入Connect状态
Connect---连接状态
- 建立TCP会话连接
- 在该状态下,会开启一个连接重传定时器----32秒
- 如果成功建立TCP回话,则会关闭连接重传定时器,并进入OpenSent状态
- 如果建立失败,则进入Active状态
- 如果重传定时器超时,BGP仍然没有收到对等体的响应,那么BGP会继续尝试与对等体建立TCP会话,并一直处于connect状态。
Active状态----尝试状态
- 该状态是因为第一次TCP会话建立失败,在该状态会尝试重新建立TCP会话
- 如果成功建立,则进入OpenSent状态,并会关闭连接重传定时器
- 如果失败,则停留在Active状态
- 与Connect状态共同使用同一个连接重传定时器。
OpenSent---发出本地的Open报文
- 也将收到对端发送的open报文,并会查看其中的参数,如果参数没有问题,则本地将发送keepalive报文进行确认,之后进入openconfirm状态。
- 如果发现收到的open报文中的参数不认可,那么BGP会发送notification报文给对等体,并进入IDLE状态。
- 对等体关系的指定是双向的,所以双方都使用peer命令指定了对等体后,均会主动与对等体建立TCP连接,但是这样就会建立两条TCP的双向连接,所以BGP会选择第一个TCP链接断开。
OpenConfirm--等待去确认状态
- 在该状态机时,等待对方发送的KeepAlive报文。
- 如果收到的是notification报文,则转至idle状态。
Established---连接建立完成状态
- 对等体关系建立完成的标志
- 在该状态下,BGP可以和对等体交互Updata报文、keepalive报文、Route-refresh报文和Notification报文。
BGP 工作过程:
- 基于IGP协议或者静态路由实现邻居IP可达
- 启动BGP协议并指定邻居关系
- 邻居关系之间单播传输报文,通过三次握手机制,建立TCP会话通道
- 后续BGP所有的通讯都将基于TCP会话通道来传输,包括传输所需要的可靠性机制
- 使用open报文和keepalive报文进行对等体关系的建立。open报文用来携带建立对等体关系时所需要使用的参数,keepalive报文用于参数的确认。最终完成对等体关系的建立。生成邻居表。
- 使用Updata报文来共享路由信息,信息中将携带目标网络号、掩码及路径属性;之后,设备将所有自己发送的以及接收到的路由信息记录在一张表中---BGP表
- 将BGP表中的最优路由信息(通过路径属性选择)加载到全局路由表中。
- 此时路由收敛完成,将使用keepalive报文进行周期性保活,默认保活时间为180s,周期性发送时间默认为保活时间的1/3,即60s
- 如果出现错误信息,则将使用notification报文进行告警
- 如果出现结构突变,则将使用updata报文进行更新
EBGP的水平分割
AS-Path属性----记录AS路径的一个属性
当路由信息再一次传回本地AS时,路由器通过查看AS_Path属性,可以清楚的知晓该属性包含本地AS号,故拒绝学习该路由信息。
IBGP的水平分割
内部所有路径属性相同,必能依靠路径属性防环。
BGP规定,当路由器从一个IBGP对等体学习到某条BGP路由时,它将不能再把这条路由通告给任何IBGP对等体(IBGP对等体之间)-----IBGP水平分割机制。
问题: r4不给r5传路由信息,造成链路不通
解决方案:
1、构建全连的IBGP对等体关系
弊端:
- 当AS内部设备数量巨大时,IBGP邻居关系会呈指数型增长,而非直连建邻之间传递的数据还是要依靠物理链路,故全连接建邻会导致占据大量的链路资源,并且路由器维护大量的TCP和BGP会话连接,需要消耗大量的设备资源。
- 网络的可扩展性差
2、打破IBGP水平分割
联邦(把IBGP关系转换成EBGP关系)
路由反射器
BGP的路由黑洞
由于BGP协议可以非直连建邻,所有导致BGP协议可能出现跨越未运行BGP协议的设备,导致BGP路由传递后,控制层面可达。但是数据层面,流量流经未运行BGP协议的设备时,无法通过,形成路由黑洞。
避免路由黑洞的方式-----BGP同步更新规则----当一台路由器从自己的IBGP对等体学习到一条BGP路由时,它将不能使用该条路由或把这条路由信息通告给自己的EBGP对等体,除非它又从IGP协议学习到这条路由,也就是要求IBGP路由与IGP路由同步。
在华为数通设备上,BGP同步更新规则缺省是被关闭的,并且华为也不允许开启BGP同步规则。
解决方案:
1.让未运行BGP协议的设备运行BGP协议---建立全连接的IBGP环境(不现实,浪费资源)
2.物理或者逻辑拓扑全连3.在IGP协议中,重发布BGP协议的路由信息
4.MPLS---多标签标记交换
BGP建邻的基本配置
使用直连接口IP地址建立IBGP对等体关系
1.启动BGP协议
[r1]bgp 100-----启动BGP进程,且标准本设备所在的AS号
2.设置RID
[r1-bgp]router-id 1.1.1.1
3.配置BGP对等体,并指定对等体所在的AS号
[r1-bgp]peer 12.0.0.2 as-number 200
[r1]display bgp peer ----查看BGP的邻居表
peer:邻居
v:
AS:
IBGP对等体的建立
由于直连接口建立对等体时,若链路中断,则会中断BGP会话。故而在实际工程中,一个AS内部正常具有较为复杂的网络拓扑结构,设备到设备之间存在大量的备份和负载均衡路径,因此建立IBGP邻居关系时,建议使用双方的环回接口来作为源/目IP地址。
[r2]bgp 200
[r2-bgp]peer 3.3.3.3 as-number 200[r3]bgp 200
[r3-bgp]router-id 3.3.3.3
[r3-bgp]peer 2.2.2.2 as-number 200手工建立邻居关系时,所指定的建邻的IP地址必须和收到的数据包中的源IP地址相同才能正常建立邻居关系。否则,邻居关系建立失败。
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0--将r2发送的数据包的源IP地址修改为loopback 0的接口地址抓包后会发现一个问题,就是BGP此时仅建立了一次TCP连接,就完成了BGP会话的建立。这也就意味着,BGP会话的建立仅仅是依靠TCP会话,而并没有对这个TCP会话建立的方式有要求,该TCP会话是由谁发起的,谁是客户端,谁是服务端并不影响BGP对等体的建立。-----在BGP协议中,TCP会话建立两次完全是多余的,而建立两次的原因也是因为双方路由器均会指定对等体(均将自己看做是客户端),从而发起建立连接请求。
而在当下场景中,R3作为TCP会话的服务端,已经认知到了自己本地已经有接口3.3.3.3,与自己本地配置的对等体建立了连接,所以本地也不会在发送所谓的TCP连接建立请求。
一般情况下,双方均要修改本地数据包的源lP地址。
使用环回接口IP地址建立EBGP对等体关系
若EBGP对等体之间存在多条直连链路时,才可使用环回接口建立对等体关系。
1、实现路由可达
ip route-static 5.5.5.5255.255.255.255 45.0.0.5ip route-static 4.4.4.4255.255.255.255 45.0.0.4
2、对等体配置
[r4]bgp 200
[r4-bgp]peer 5.5.5.5 as-number 300
[r4-bgplpeer 5.5.5.5 connect-interface LoopBack 0[r5]bgp 300
[r5-bgp]router-id 5.5.5.5
[r5-bgp]peer 4.4.4.4 as-number 200
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0因为EBGP之间的数据包的TTL值为1,故此时虽然可以建立TCP连接和BGP会话,但是路由器会认为该连接和会话存在异常,在BGP对等体建立完成后,发送notification报文断开连接,从而会产生一个现象---状态机震荡。
解决方案:修改TTL值
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2
如果未标明参数值,则代表将TTL值修改为最大值255[r5-bgp]peer 4.4.4.4 ebgp-max-hop 2
两边均要修改,不然无法建立对等体关系,还存在状态机震荡
BGP 的路由发布
通过network命令发布路由
路由发布---对于BGP而言,只要是路由表中存在的路由信息,都可以通过network命令发布。
[r1-bgp]network 1.1.1.1 32 目标网络号,路由表中的掩码信息
注意:BGP使用network命令时,该路由信息必须与全局路由表中存在的路由项一致
[r1-bgp]display bgp routing-table--查看BGP表
Network----目标网络号及掩码
NextHop---谁发送的路由信息,则下一跳就写谁;如果是本地发布的路由,则下一跳写0.0.0.0
状态码(status codes)----表示不同的路由信息
- *
- 代表可用
- 所有设备收到路由条目后,首先会根据下一跳属性中的参数来查询本地路由表,查看该地址的可达性。如果本地路由表中可达,则代表该路由信息可用;若本地不可达,则代表该路由信息不可用。
- 如果该路由条目不可用,则将不会参与到路由信息的优选过程
- >
- 代表优选
- 待收到多条到达同一网段的路由信息时,并且都可用,则将一句属性在其中选择最优的路由信息进行加表及传递
- i
- 代表路由信息是通过IBGP对等体学习到的
对于R3而言,R2传递来的路由信息是不可用且不优的,原因在于下一跳属性未修改,无法递归。
解决思路:
[r2-bgp]peer 3.3.3.3 next-hop-local
将路由传递给自己的3.3.3.3邻居时,将路由中的下—跳属性该为本地
总结(配置逻辑):
1.完成所有路由器的IGP配置
2.使用直连接口建立EBGP对等体关系
3.使用环回接口建立IBGP对等体关系
4.使用connect-interface命令修改IBGP建邻源IP地址,双方均修改
5.使用next-local命令修改路由出传递的下一跳属性
6.若存在使用环回接口建立EBGP对等体关系,则需要建立通讯条件,并且使用ebgp-max-hop命令修改TTL值
重发布(减少路由条目)
使用import命令引入路由
[r2-bgp]import-route ospf 1
ONG--起源码属性----标识—条路由信息的起源类型
- i---代表这条路由信息起源于AS内部使用network命令通告出来
- 不限于IGP、静态、直连
- e---代表这条路由信息起源于EBGP协议----现在几乎看不到标识
- ?---除了上面两种方式,其他方式获取的路由信息都是该标识
BGP路由通告原则
- 当一台BGP路由器发现了多条可以达到同一地址的路由条目该设备会通过一个路由选择过程在这些路由条目中选择一条最优的路由,将这条路由加入到全局路由表中,并且在向其他BGP对等体通告该路由条目时,也只会通告最优的路由。
- 通常情况下,路由器只会将最优的路由加载到路由表中,除了激活了负载均衡情况除外。
- 当一台路由器从EBGP邻居学习到了BGP路由时,缺省情况下,会将该路由条目通告给所有的IBGP对等体以及EBGP对等体。
- 当一台路由器从IBGP邻居学习到了BGP路由时,缺省情况下,不会将这条路由信息通告给其他的IBGP对等体。
- 原因:IBGP水平分割原则
- 当一台路由器从自己的IBGP学习到BGP路由时,如果同步规则被激活(默认是关闭状态),只有从IGP协议也学习到该路由条目后,才会将BGP路由激活,并学习到本地,以及通告到EBGP对等体。如果同步规则被关闭,即使没有从IGP学习到该路由,也会将BGP路由通告给EBGP对等体。
R1上的两个环回:172.16.1.0 24 192.168.2.0 24------>汇总后172.16.0.0 22
自动聚合
该方法仅针对重发布的路由信息生效。
华为设备默认关闭自动聚合功能
[r1-bgp]summary automatic---开启自动聚合功能(仅对引入的路由生效)
自动聚合功能是以主类聚合的方式进行的,而主类聚合方式会导致一个结果--产生路由黑洞。 所以也会生成一条去玩往空接口的防环路由。这也是华为设备自动聚合功能的原因。
特点:
1.缺点
1.自动聚合只能将明细路由汇总到主类
1.会产生巨大的路由黑洞
2.自动聚合只能针对重发布的路由条目生效2.自动聚合会抑制明细路由条目(状态码s----代表被抑制)
3.黑洞路由器会在本地的路由表中,自动生成一条指向Null口的汇总网段路由,防止环路
4.聚合完成后,将会在本地的BGP表中发布—条新的下一跳指向127.0.0.1的汇总网段路由。
关键字 | 参数 | 缺陷 | 优势 |
aggregate | / | 无法抑制明细路由,导致汇总操作并没有减少路由条目;汇总失去了明细路由的路径属性。 | 可以灵活指定汇总路由的目的网络掩码长度;可以在非直连上汇总。前提条件是非直连设备上具备的明细路由可用且优。 |
detail-suppresed | 在某种情况下,可能还需要部分明细路由进行传输,而该命令会抑制所有的明细路由 | 可以抑制明细路由的传输 |
|
suppress-policy | 抓取流量时,需要使用permit操作,因为一直策略是取反操作 | 可以灵活的选择通告某些明细路由 | |
as-set | 仅继承了AS-Path属性 | 可以继承明细路由的路径属性 |
[r3-bgp]aggregate 172.16.0.0 20
手工聚合会生成一条指向空接口的防环路由,并且掩码可以随意汇总,但是手工聚合没有将明细路由进行抑制。
手工聚合只有在所有的明细路由均无效是,才会撤销。并且,手工聚合可以灵活调整掩码信息,只要还存在一条明细路由,手工聚合后的路由就是可用且优的。
手工聚合命令在配置后:
1、检测本地路由表中是否有聚合路由的可用明细路由。
2、若有则在本地路由表中发布—条指向空接口的防环路由;若无则该命令无效;
3、将汇总的防环路由发布到BGP中
BGP的手工聚合可以在非直连设备,只要本地存在这些明细路由,且明细路由可用且优就可以进行聚合操作。
聚合路由不会继承明细路由的属性,导致AS_Path属性丢失,可能会引发环路问题。
[r3-bgp]aggregate 172.16.0.0 20 detail-suppressed.-----抑制所有明细路由
抑制策略,通告172.16.0.0/20的汇总路由时,将172.16.1.0/24的明细路由也通告出去。
在该策略中,会将路由策略中所允许的流量给抑制。也就是说,实际上是与路由策略的玩法相反。
1、抓流量
[r3]ip ip-prefix aa deny 172.16.1.0 24
[r3]ip ip-prefix aa permit 172.16.0.0 20 greater-equal 24 less-equal 24
2、配置策略
[r3]route-policy aa permit node 10
[r3-route-policy]if-match ip-prefix aa
3、调用策略
[r3-bgp]aggregate 172.16.0.0 20 suppress-policy aa ----策略名称即为路由策略的名称
as-set -----汇总路由会继承明细路由的路径属性
[r3-bgp]aggregate 172.16.0.0 20 as-set
[r3-bgp]aggregate 172.16.0.0 20 as-set detail-suppressed
as-set属性在继承多个明细路由属性时,会将继承的不同的多个明细路由的AS_Path属性使用仆括起来,在选路时,当做一个来看,而在防环时,将观察所有的AS号。
attribute-policy----该参数可以设置聚合路由的大部分路径属性[r1]route-policy bb permit node 10
[r1-route-policy]apply as-path 1 2 3 additive
[r1-route-policy]apply local-preference 10
[r1-route-policy]apply cost 100
[r1-route-policy]apply preferred-value 20
[r1-bgp]aggregate 172.16.0.0 20 detail-suppressed attribute-policy bb
origin-policy --设置某些明细路由为汇总路由宣告的触发条件
Ir1lip ip-prefix aa permit 172.16.1.0 24
[r1]route-policy aa permit node 10
[r1-route-policy]if-match ip-prefix aa
[r1-bgp]aggregate 172.16.0.0 20 origin-policy aa
Atomic-Aggregate
Aggregator
文章浏览阅读836次。这篇文章要讲的是微信中的接收普通消息;接收普通消息:顾名思义,它的作用就是接收普通用户发送的消息,并根据接收消息类型的不同,分为了六大接收接口;1 文本消息2 图片消息3 语音消息4 视频消息5 小视频消息6 地理位置消息7 链接消息 视频和小视频同属一类;它们都是通过接收xml文档接收,根据分析xml文档后根据类型判断并回复相应消息;一:文本消息;文本_微信公众号 接收普通消息
文章浏览阅读147次。链接:小希的迷宫刚开始拿到这道题的时候, 由于是并查集专题,满脑子想的都是怎么用并查集来做,但是我肯定这道题肯定是能用dfs来做的, 只需要判断是否有环即可, 。其实这道题很多方法都可以做,我用的dfs 100+ms过的。后来用并查集做了一下, 是60+ms, 并且并查集的代码要短很多, 以后遇到问题要先想一下!dfs.#include <iostream>#include..._小希的迷宫hdu1272 c语言
文章浏览阅读29次。功率放大器:在需要放大电流的模块中,SUD50P04-09L-E3可以作为输出级别的功率放大器,提供高电流和低电阻的特性。- 电池管理:在电池管理模块中,可以使用SUD50P04-09L-E3来实现电池的充放电控制,提供强大的功率开关能力。综上所述,SUD50P04-09L-E3适用于开关电源、驱动电路、电池管理和功率放大器等领域模块。- 开关电源:可以应用于电源开关、DC-DC转换器和逆变器等电源模块中,用于实现高效的功率转换。- 阈值电压(Vth):-1.6V。- 最大耐压:-40V。_actr开关是啥
文章浏览阅读769次。Lucene4.3.1拼写检查SpellChecker源码解析_spellchecker.suggestsimilar 排序
文章浏览阅读456次。本文从加密到解密再到升级的过程,详细阐述了整个流程,并提供了多种工具和说明文档,使得用户可以很方便地进行程序的加密和升级操作。在加密过程中,需要设置自己的秘钥。单片机接收到数据后,会根据预先设置好的秘钥,对数据进行解密还原,再进行程序升级。理论上,只要移植AES的.c和.h文件,并且你能将数据发送到单片机串口,就能用任意方式来对单片机进行升级,包括但不限于wifi,蓝牙,4G模块等。通过上位机将keil生成的BIN文件进行AES加密,得到新的加密文件,加密需要自己设置秘钥,加密升级包直接烧录不能运行。_stm32软件加密方法
文章浏览阅读561次,点赞2次,收藏3次。点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达点击进入—>【异常检测和扩散模型】微信交流群扫码加入CVer知识星球,可以最快学习到最新顶会顶刊上的论文idea和CV从入门到精通资料,以及最前沿项目和应用!发论文,强烈推荐!在CVer微信公众号后台回复:DiAD,即可下载论文pdf和代码链接!快学起来!DiAD:第一个基于扩散模型架构的多类异常检测工作(来自浙大,腾讯优图..._基于扩散模型的异常检测
文章浏览阅读258次。crontab命令从输入设备读取指令,并将其存放于crontab文件中,以供之后读取和执行。通常,crontab储存的指令被守护进程激活,crond为其守护进程,crond常常在后台运行,每一分钟会检查一次是否有预定的作业需要执行。通过crontab命令,我们可以在固定的间隔时间执行指定的系统指令或shell脚本。crontab命令常见于Unix和类Unix的操作系统之中(Linux就属于类Unix操作系统),用于设置周期性被执行的指令。crontab的启动。..._计划任务 linux crontab
文章浏览阅读8.3k次。真4k与假4k区别
文章浏览阅读731次。虽然scrum是一个有效且经过验证的软件开发框架,但为了充分利用scrum,您需要以提高灵活性和更好地适应项目和团队的方式定制或调整它。的Scrum过程画布是一个争球的管理工具。它在一页的流程画布中呈现可操作的scrum活动。团队成员执行管理和完成软件项目的活动。Scrum Process Canvas是完全可定制的,允许您将其他活动(例如某些会议)和流程交付(例如特定的日志)添加到Scr..._scrum process
文章浏览阅读1.3k次,点赞5次,收藏8次。异或(XOR)是一种逻辑运算符,常用于计算机科学和电子工程中。异或操作符通常用符号 “^” 表示。异或操作的定义如下:当两个操作数的位值不同时,异或结果为1。当两个操作数的位值相同时,异或结果为0。例如,对于两个二进制数1和0进行异或操作:异或操作还具有以下一些重要性质:1.结合律:(A XOR B) XOR C = A XOR (B XOR C)2.交换律:A XOR B = B XOR A3.自反性:A XOR A = 04.零元素:A XOR 0 = A。_reverse异或操作
文章浏览阅读2.5w次。[IFEX]格式:IFEX ,[命令1][!命令2]功能:依据条件表达式是否成立,成立则执行命令1,不成立则执行命令2。参数: ■条件对[可用内存]或[磁盘可用空间]或[按键]或[数值变量]或[文件目录]的判断。 ■可用内存MEM数值。 ■磁盘可用空间R:_pecmd.ini编写教程
文章浏览阅读945次。3、例如有三个table,将中间的一个table hidden掉,你会发现在那个被hidden的table看不见了,但是,中间会留有很大的一空白,而这个空白就是这个table没有被隐藏时所占的位置。●visible:hidden--- 使对象在网页上不可见,但该对象在网页上所占的空间没有改变,通俗来说就是看不见但摸得到。1、visibility: hidden----将元素隐藏,但是在网页中该占的位置还是占着。2、display: none----将元素的显示设为无,即在网页中不占任何的位置。