专题十六:虚拟路由冗余协议——VRRP

news2025/5/11 14:51:03

一、VRRP简介

VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议通过把几台设备联合组成一台虚拟的设备,使用一定的机制保证当主机的下一跳设备出现故障时,及时将业务切换到备份设备,从而保持通讯的连续性和可靠性。

VRRP的运行结果是在局域网上提供一个虚拟路由器。

本例中:

局域网中有两个路由器R1R2R1端口IP地址为192.168.1.251/24R2端口IP地址为192.168.1.252/24

配置R1R2关联到同一个虚拟路由器,该虚拟路由器使用192.168.1.254做为端口IP地址。

所有的PC使用192.168.1.254做为默认网关。

VRRP可以分为VRRP for IPv4和VRRP for IPv6(简称VRRP6)。VRRP for IPv4支持VRRPv2和VRRPv3,而VRRP for IPv6仅支持VRRPv3。对IPv4网络而言,VRRP协议报文封装在IP报文中,发送到分配给VRRP的组播地址,目的地址是224.0.0.18,TTL是255,协议号是112。

为什么需要VRRP?

现网中的主机使用缺省网关与外部网络联系时,如果网关的设备出现故障,与其相连的主机将与外界失去联系,导致业务中断

二、VRRP基本概念

VRRP虚拟MAC地址为00-00-5E-00-01-组id值

VRRP优先级1-255,默认优先级100,VRRP协议默认开启了抢占。默认发送免费ARP报文时间间隔180秒。

VRRP角色分为Master和Backup。Master承载转发报文任务,Backup作为备份,一旦Master出现故障,Backup接替成为Master

概念含义
虚拟路由器(Virtual Router)又称为VRRP备份组,由一个Master设备和若干个Backup设备组成,被当作一个共享局域网内主机的缺省网关。它包括了一个虚拟路由器标识符和一组虚拟IP地址。
VRID虚拟路由器的靿栃标识。具有相同VRID的一组设备构成一个虚拟路由器。
虚拟IP地址(Virtual IP Address)虚拟路由器的IP地址,一个虚拟路由器可以有一个或多个IP地址,由用户配置。
虚拟MAC地址(Virtual MAC Address)虚拟路由器根据虚拟路由器ID生成的MAC地址。一个虚拟路由器拥有一个虚拟MAC地址,格式为:00-00-5E-00-01-{VRID}(VRRP for IPv4)或者00-00-5E-00-02-{VRID}(VRRP for IPv6)。当虚拟路由器回应ARP请求(VRRPfor IPv4)或者NS请求(VRRP for IPv6)时,使用虚拟MAC地址,而不是接口的真实MAC地址。
IP地址拥有者(IP Address 0wner)如果一个VRRP设备将虚拟路由器IP地址作为真实的接口地址,则该设备被称为IP地址拥有者。如果IP地址拥有者是可用的,通常它将成为Master。
主IP地址(Primary IP Address)从接口的真实IP地址中选出来的一个可用IP地址,通常选择配置的第一个IP地址。VRRP广播报文使用主IP地址作为 IP报文的源地址。
VRRP设备运行VRRP协议的设备,它可能属于一个或多个虚拟路由器。
Master设备承载转发报文任务的VRRP设备。
Backup设备一组没有承担转发任务的VRRP设备,当Master设备出现故障时,它们将通过竞选成为新的Master设备。
优先级(Priority)虚拟路由器中VRRP设备的优先级。虚拟路由器根据优先级选举出Master设备和Backup设备。
VRRP抢占模式在抢占模式下,如果Backup设备的优先级比当前Master设备的优先级高,则主动将自己切换成Master。
VRRP非抢占模式在非抢占模式下,只要Master设备没有出现故障,Backup设备即使随后被配置了更高的优先级也不会成为Master设备。
Adver_Interval定时器Master设备会根据该定时器定期发送VRRP通告报文。
Master_Down定时器Backup设备在该定时器超时后,会变为Master状态。

三、VRRP报文格式

VRRP只有一种报文,Advertisement报文基于组播方式发送,因此只能在同一个广播域传递 Advertisement报文的目的组播地址为224.0.0.18

VRRP报文字段含义如下:

Ver:VRRP目前有两个版本,其中VRRPv2仅适用于IPv4网络,VRRPv3适用于IPv4IPv6两种网络。

Virtual Rtr ID:该报文所关联的虚拟路由器的标识。

Priority:发送该报文的VRRP路由器的优先级。

Count IP Addrs:该VRRP报文中所包含的虚拟IP地址的数量。

Auth TypeVRRP支持三种认证类型:不认证、纯文本密码认证、MD5方式认证,对应值分别为012

Adver Int:发送VRRP通告消息的间隔。默认为1

IP Address:所关联的虚拟路由器的虚拟IP地址,可以为多个。

Authentication Data:验证所需要的密码信息。

四、VRRP状态机

VRRP协议中定义了三种状态机:初始状态(Initialize)、活动状态(Master)、备份状态(Backup)。其中,只有处于Master状态的设备才可以转发那些发送到虚拟IP地址的报文。

五、VRRP协议状态

Master状态

Backup状态

1.定期(ADVER_INTERVAL)发送VRRP报文。
2.以虚拟MAC地址响应对虚拟IP地址的ARP请求。
3.转发目的MAC地址为虚拟MAC地址的IP报文。
4.默认允许ping通虚拟IP地址。
5.当多台设备同时为Master时,若设备收到与自己优先级相同的报文时,会进一步比较IP地址的大小。如果收到报文的源IP地址比自己大,则切换到Backup状态,否则保持Master状态。
 
1.接收Master设备发送的VRRP报文,判断Master设备的状态是否正常。
2.对虚拟IP地址的ARP请求,不做响应。
3.丢弃目的MAC地址为虚拟MAC地址的IP报文。
4.丢弃目的IP地址为虚拟IP地址的IP报文。
5.如果收到优先级和自己相同或者比自己优先级大的报文时,重置MASTER_DOWN定时器,不进一步比较IP地址的大小。
 

六、VRRP主备选举

  • 优先级不同

  • 开启VRRP进入初始化状态

  • 设备根据VRRP优先级,计算超时定时器,时间短的进入Master状态

  • 开始发送VRRP报文,优先级高的被选举为Master设备

  • 发送免费ARP检测地址冲突,以及通告设备和主机(交换机和主机无需进行ARP解析和泛洪,缩短故障时间)

  • 优先级相同

  • 开启VRRP进入初始化状态

  • 设备根据VRRP优先级,计算超时定时器,同时进入Master状态

  • 开始发送VRRP报文,优先级相同,继续对比IP地址,越大越优,IP地址小的切换为Backup状态

  • 发送免费ARP检测地址冲突,以及通告设备和主机

七、VRRP负载分担

负载分担是指多个VRRP备份组同时承担业务,VRRP负载分担与VRRP主备备份的基本原理和报文协商过程都是相同的。同样对于每一个VRRP备份组,都包含一个Master设备和若干Backup设备。

VRRP备份组1:DeviceA作为Master设备,DeviceB作为Backup设备。

VRRP备份组2:DeviceB作为Master设备,DeviceA作为Backup设备。

一部分用户将VRRP备份组1作为网关,另一部分用户将VRRP备份组2作为网关。这样便可实现分担业务流量又相互备份的目的。

八、VRRP路由监控与接口联动

配置VRRP备份组后,VRRP备份组之间的主备切换通过VRRP通告报文进行协商。当网络中出现故障(比如接口Down或链路故障)或网络进行调整时,VRRP备份组并不能及时感知并进行状态切换,或者当VRRP备份组在主备切换完成后未能及时联动路由,会造成流量转发故障。

路由监视配置思路:

DeviceA上的VRRP备份组的优先级为120,状态为Master;

DeviceB上的VRRP备份组的优先级为100,状态为Backup,为立即抢占;

DeviceA上VRRP监视地址为10.1.2.0/24网段的路由,在检测到10.1.2.0/24网段信息为不可达时,DeviceA的优先级降低40(优先级降低后必须小于100)。

接口联动配置思路:

DeviceA上的VRRP备份组的优先级为120,状态为Master;

DeviceB上的VRRP备份组的优先级为100,状态为Backup,为立即抢占;

在DeviceA上配置监视上行接口interface1,当interface1状态变为Down时,DeviceA降低自身优先级,通过VRRP通告报文协商,DeviceB抢占成为Master设备,承担流量转发

九、VRRP的配置实现

1.VRRP常用基本配置

1.创建VRRP备份组并给备份组配置虚拟IP地址

[interface-GigabitEthernet0/0/0] vrrp vrid virtual-router-id  virtual-ip virtual-address

注意:各备份组之间的虚拟IP地址不能重复;同属一个备份组的设备接口需使用相同的VRID

2.  配置路由器在备份组中的优先级

[interface-GigabitEthernet0/0/0] vrrp vrid virtual-router-id priority priority-value

注意:通常情况下,Master设备的优先级应高于Backup设备。

3.  配置备份组中设备的抢占延迟时间

[interface-GigabitEthernet0/0/0] vrrp vrid virtual-router-id preempt-mode timer delay delay-value

4.  配置VRRP备份组中设备采用非抢占模式

[interface-GigabitEthernet0/0/0] vrrp vrid virtual-router-id preempt-mode disable

缺省情况下,抢占模式已被激活。

5.  配置VRRP备份组监视接口

[interface-GigabitEthernet0/0/0] vrrp vrid virtual-router-id track interface interface-type interface-number [ increased value-increased | reduced value-decreased ]

可配置设备当检测到上行接口或链路出现故障时,增加或者减少自身优先级,IP地址拥有者和Eth-trunk成员口不允许配置VRRP监视功能。

6.  配置VRRP备份组联动普通BFD会话

[interface-GigabitEthernet0/0/0] vrrp vrid virtual-router-id track bfd-session { bfd-session-id | session-name bfd-configure-name } [ increased value-increased | reduced value-reduced ]

如果选择参数session-name bfd-configure-name,可以绑定静态BFD会话或者标识符自协商的静态BFD会话。如果选择参数bfd-session-id,只能绑定静态BFD会话。

2.VRRP基础配置实例

配置要求:

R1与R2组成一个VRRP备份组,其中R1MasterR2Backup

Master设备故障恢复时采用抢占模式,抢占延时10秒;

Master设备监视上行接口状态实现VRRP主备自动切换。

R1:

[R1] interface GigabitEthernet0/0/0
[R1-GigabitEthernet0/0/0] ip address 192.168.1.253  24
[R1-GigabitEthernet0/0/0] vrrp vrid 1 virtual-ip 192.168.1.254
[R1-GigabitEthernet0/0/0] vrrp vrid 1 priority 120
[R1-GigabitEthernet0/0/0] vrrp vrid 1 preempt-mode timer delay 10
[R1-GigabitEthernet0/0/0] vrrp vrid 1 track interface GigabitEthernet0/0/1 reduced 30

R2:

[R2] interface GigabitEthernet0/0/0
[R2-GigabitEthernet0/0/0] ip address 192.168.1.252 24
[R2-GigabitEthernet0/0/0] vrrp vrid 1 virtual-ip 192.168.1.254
[R2-GigabitEthernet0/0/0] vrrp vrid 1 priority 110

3.VRRP主备备份配置

HostA通过Switch双归属到RouterA和RouterB。用户希望实现:
正常情况下,主机以RouterA为默认网关接入Internet,当RouterA故障时,RouterB接替作为网关继续进行工作,实现网关的冗余备份。RouterA故障恢复后,可以重新成为网关。
配置思路:
采用VRRP主备备份实现网关冗余备份,配置思路如下:
(1)配置各设备接口IP地址及路由协议,使各设备间网络层连通。
(2)在RouterA和RouterB上配置VRRP备份组。其中,RouterA上配置较高优先级和20秒抢占延时,作为Master设备承担流量转发;RouterB上配置较低优先级,作为备用工业路由交换一体机,实现网关冗余备份。
配置步骤:
(1)配置设备间的网络互连
# 配置设备各接口的IP地址,以RouterA为例。RouterB和RouterC的配置与RouterA类似,详见配置文件。

<Huawei> system-view
[Huawei] sysname RouterA
[RouterA] interface gigabitethernet 2/0/0
[RouterA-GigabitEthernet2/0/0] undo portswitch
[RouterA-GigabitEthernet2/0/0] ip address 10.1.1.1 24
[RouterA-GigabitEthernet2/0/0] quit
[RouterA] interface gigabitethernet 1/0/0
[RouterA-GigabitEthernet1/0/0] undo portswitch
[RouterA-GigabitEthernet1/0/0] ip address 192.168.1.1 24
[RouterA-GigabitEthernet1/0/0] quit


# 配置RouterA、RouterB和RouterC间采用OSPF协议进行互连。以RouterA为例,RouterB和RouterC的配置与RouterA类似,详见配置文件。

[RouterA] ospf 1
[RouterA-ospf-1] area 0
[RouterA-ospf-1-area-0.0.0.0] network 10.1.1.0 0.0.0.255
[RouterA-ospf-1-area-0.0.0.0] network 192.168.1.0 0.0.0.255
[RouterA-ospf-1-area-0.0.0.0] quit
[RouterA-ospf-1] quit


(2)配置VRRP备份组
# 在RouterA上创建VRRP备份组1,配置RouterA在该备份组中的优先级为120,并配置抢占时间为20秒。

[RouterA] interface gigabitethernet 2/0/0
[RouterA-GigabitEthernet2/0/0] vrrp vrid 1 virtual-ip 10.1.1.111 //配置vrrp虚拟ip和vrid
[RouterA-GigabitEthernet2/0/0] vrrp vrid 1 priority 120   //默认优先级为100,RouterA设置优先级为120,该设备为Master
[RouterA-GigabitEthernet2/0/0] vrrp vrid 1 preempt-mode timer delay 20  //VRRP默认是抢占模式,设置抢占延时,避免频繁出现主备切换
[RouterA-GigabitEthernet2/0/0] quit
# 在RouterB上创建VRRP备份组1,其在该备份组中的优先级为缺省值100。
[RouterB] interface gigabitethernet 2/0/0
[RouterB-GigabitEthernet2/0/0] vrrp vrid 1 virtual-ip 10.1.1.111
[RouterB-GigabitEthernet2/0/0] quit


(3)验证配置结果
# 完成上述配置以后,在RouterA和RouterB上分别执行display vrrp命令,可以看到RouterA在备份组中的状态为Master,RouterB在备份组中的状态为Backup。

4.VRRP负载分担

HostA和HostC通过Switch双归属到RouterA和RouterB。用户希望HostA以RouterA为默认网关接入Internet,RouterB作为备份网关;HostC以RouterB为默认网关接入Internet,RouterA作为备份网关,以实现流量的负载均衡。
配置思路:
采用VRRP多网关负载分担实现流量的负载均衡,配置思路如下:
(1)配置各设备接口IP地址及路由协议,使各设备间网络层连通。
(2)在RouterA和RouterB上创建VRRP备份组1和VRRP备份组2,在备份组1中,配置RouterA为Master设备,RouterB为Backup设备;在备份组2中,配置RouterB为Master设备,RouterA为Backup设备,实现流量的负载均衡。
配置步骤:
(1)配置设备间的网络互连
# 配置设备各接口的IP地址,以RouterA为例。RouterB和RouterC的配置与RouterA类似,详见配置文件。

<Huawei> system-view
[Huawei] sysname RouterA
[RouterA] interface gigabitethernet 1/0/0
[RouterA-GigabitEthernet1/0/0] undo portswitch
[RouterA-GigabitEthernet1/0/0] ip address 192.168.1.1 24
[RouterA-GigabitEthernet1/0/0] quit
[RouterA] interface gigabitethernet 2/0/0
[RouterA-GigabitEthernet2/0/0] undo portswitch
[RouterA-GigabitEthernet2/0/0] ip address 10.1.1.1 24
[RouterA-GigabitEthernet2/0/0] quit


# 配置RouterA、RouterB和RouterC间采用OSPF协议进行互连。以RouterA为例,RouterB和RouterC的配置与RouterA类似,详见配置文件。

[RouterA] ospf 1
[RouterA-ospf-1] area 0
[RouterA-ospf-1-area-0.0.0.0] network 10.1.1.0 0.0.0.255
[RouterA-ospf-1-area-0.0.0.0] network 192.168.1.0 0.0.0.255
[RouterA-ospf-1-area-0.0.0.0] quit
[RouterA-ospf-1] quit


(2)配置VRRP备份组
# 在RouterA和RouterB上创建VRRP备份组1,配置RouterA的优先级为120,抢占延时为20秒;RouterB的优先级为缺省值。

[RouterA] interface gigabitethernet 2/0/0
[RouterA-GigabitEthernet2/0/0] vrrp vrid 1 virtual-ip 10.1.1.111
[RouterA-GigabitEthernet2/0/0] vrrp vrid 1 priority 120
[RouterA-GigabitEthernet2/0/0] vrrp vrid 1 preempt-mode timer delay 20
[RouterA-GigabitEthernet2/0/0] quit
[RouterB] interface gigabitethernet 2/0/0
[RouterB-GigabitEthernet2/0/0] vrrp vrid 1 virtual-ip 10.1.1.111
[RouterB-GigabitEthernet2/0/0] quit


# 在RouterA和RouterB上创建VRRP备份组2,配置RouterB的优先级为120,抢占延时为20秒;RouterA的优先级为缺省值。
[

RouterB] interface gigabitethernet 2/0/0
[RouterB-GigabitEthernet2/0/0] vrrp vrid 2 virtual-ip 10.1.1.112
[RouterB-GigabitEthernet2/0/0] vrrp vrid 2 priority 120
[RouterB-GigabitEthernet2/0/0] vrrp vrid 2 preempt-mode timer delay 20
[RouterB-GigabitEthernet2/0/0] quit
[RouterA] interface gigabitethernet 2/0/0
[RouterA-GigabitEthernet2/0/0] vrrp vrid 2 virtual-ip 10.1.1.112
[RouterA-GigabitEthernet2/0/0] quit


(3)验证配置结果
#在RouterA上执行display vrrp命令,可以看到RouterA在备份组1中作为Master设备,在备份组2中作为Backup设备。
# 在RouterB上执行display vrrp命令,可以看到RouterB在备份组1中作为Backup设备,在备份组2中作为Master设备。

5.VRRP监视上行接口

局域网主机通过Switch双归属到部署了VRRP备份组的RouterA和RouterB,其中RouterA为Master。
用户希望当RouterA的上行接口GE1/0/0状态Down时,VRRP备份组能够及时感知并进行主备切换,由RouterB接替作为网关继续承担业务转发,以减小接口状态Down对业务传输的影响。
配置思路:
采用VRRP与接口状态联动实现对上行接口故障的感知及主备网关的切换,配置思路如下:
(1)配置各设备接口IP地址及路由协议,使网络层路由可达。
(2)在RouterA和RouterB上配置VRRP备份组。其中,RouterA上配置较高优先级,作为Master设备承担业务转发;RouterB上配置较低优先级,实现冗余备份。
(3)在RouterA上配置VRRP与接口状态联动,监视上行接口GE1/0/0,实现RouterA到RouterC间链路故障时,VRRP备份组及时感知并进行主备切换。
操作步骤:
(1)配置设备间的网络互连
# 配置设备各接口的IP地址,以RouterA为例。RouterB和RouterC的配置与RouterA类似,详见配置文件。

<Huawei> system-view
[Huawei] sysname RouterA
[RouterA] interface gigabitethernet 2/0/0
[RouterA-GigabitEthernet2/0/0] undo portswitch
[RouterA-GigabitEthernet2/0/0] ip address 10.1.1.1 24
[RouterA-GigabitEthernet2/0/0] quit
[RouterA] interface gigabitethernet 1/0/0
[RouterA-GigabitEthernet1/0/0] undo portswitch
[RouterA-GigabitEthernet1/0/0] ip address 192.168.1.1 24
[RouterA-GigabitEthernet1/0/0] quit


# 配置RouterA、RouterB和RouterC间采用OSPF协议进行互连。以RouterA为例,RouterB和RouterC的配置与RouterA类似,详见配置文件。
[RouterA] ospf 1
[RouterA-ospf-1] area 0
[RouterA-ospf-1-area-0.0.0.0] network 10.1.1.0 0.0.0.255
[RouterA-ospf-1-area-0.0.0.0] network 192.168.1.0 0.0.0.255
[RouterA-ospf-1-area-0.0.0.0] quit
[RouterA-ospf-1] quit
(2)配置VRRP备份组
# 在RouterA上创建VRRP备份组1,配置RouterA在该备份组中的优先级为120,并配置抢占延时为20秒。

[RouterA] interface gigabitethernet 2/0/0
[RouterA-GigabitEthernet2/0/0] vrrp vrid 1 virtual-ip 10.1.1.3
[RouterA-GigabitEthernet2/0/0] vrrp vrid 1 priority 120
[RouterA-GigabitEthernet2/0/0] vrrp vrid 1 preempt-mode timer delay 20
[RouterA-GigabitEthernet2/0/0] quit


# 在RouterB上创建VRRP备份组1,其在该备份组中的优先级为缺省值100。

[RouterB] interface gigabitethernet 2/0/0
[RouterB-GigabitEthernet2/0/0] vrrp vrid 1 virtual-ip 10.1.1.3
[RouterB-GigabitEthernet2/0/0] quit


(3)配置VRRP与接口状态联动
# 在RouterA上配置VRRP与接口状态联动,当监视的接口GE1/0/0状态Down时,RouterA的优先级降低40。

[RouterA] interface gigabitethernet 2/0/0
[RouterA-GigabitEthernet2/0/0] vrrp vrid 1 track interface gigabitethernet 1/0/0 reduced 40   //优先级从120-40=80,小于RouterB默认的100优先级,所以RouterB变为Master设备
[RouterA-GigabitEthernet2/0/0] quit


(4)验证配置结果
# 完成上述配置后,在RouterA和RouterB上分别执行display vrrp命令,可以看到RouterA为Master设备,联动的接口状态为Up,RouterB为Backup设备。
 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DDPM(diffusion)原理

DDPM&#xff08;diffusion&#xff09;原理 1、DDPM&#xff08;原理&#xff09;2、DDPM和 Conditional DDPM&#xff08;原理解释&#xff09;2.1. Diffusion Models 原理详解核心思想前向扩散过程&#xff08;Forward Diffusion&#xff09;反向去噪过程&#xff08;Revers…

《软件设计师》复习笔记(2.2)——效验码、体系结构、指令、流水线

目录 一、校验码 码距 奇偶校验码 循环冗余校验码&#xff08;CRC&#xff09; 海明码 真题示例&#xff1a; 二、体系结构 Flynn分类法 三、指令系统 指令组成 指令执行过程 指令的寻址方式 操作数的寻址方式 CISC vs RISC 真题示例&#xff1a; 四、流水线技…

IsaacSim Asserts 配置

IsaacSim Asserts 配置 背景解决方案资源准备具体操作步骤验证 背景 我是习惯使用 isaacsim 的 standalone 模式&#xff0c;使用 python 脚本直接运行 script&#xff0c;然后弹窗&#xff0c;按照规则正确运行即可&#xff0c;但是&#xff0c;这就导致了一些问题出现&#…

接口自动化 ——fixture allure

一.参数化实现数据驱动 上一篇介绍了参数化&#xff0c;这篇 说说用参数化实现数据驱动。在有很多测试用例的时候&#xff0c;可以将测试用例都存储在文件里&#xff0c;进行读写调用。本篇主要介绍 csv 文件和 json 文件。 1.读取 csv 文件数据 首先创建 csv 文件&#xff…

systemctl管理指令

今天我们来继续学习服务管理指令,接下来才是重头戏-systemctl,那么话不多说,直接开始吧. systemctl管理指令 1.基本语法: systemctl [start | stop | restart | status]服务 注&#xff1a;systemctl指令管理的服务在/usr/lib/ systemd/system查看 2.systemctl设置服务的自…

【文件操作与IO】详细解析文件操作与IO (二)

本篇博客是上一篇文章的续写,重点介绍数据流,还包括三道练习题. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心…

go-map+sync.map的底层原理

map 哈希冲突解决方式 1.拉链法 2.开放地址法 底层结构 Go 的 map 在源码中由 runtime.hmap 结构体表示&#xff0c;buckets-指向桶数组的指针(常规桶)&#xff0c;oldbuckets-扩容时指向旧桶数组的指针。 type hmap struct {count int // 当前元素个数&#xff08;len…

Day53 二叉树的层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* T…

物联网智慧教室项目(完整版)

物联网智慧教室项目(一)&#xff1a;智慧教室项目解决方案 一、智慧教室项目设计 &#xff08;一&#xff09;环境信息采集控制功能 1、硬件设计 使用STM32开发板模拟灯光控制&#xff0c;报警控制&#xff0c;光照信息采集&#xff1a; 灯光控制通过GPIO控制板载LED报警控…

计算机网络期中复习笔记(自用)

复习大纲 –第一章 概述 计算机网络的组成 网络边缘&#xff1a;主机和网络应用程序&#xff08;又称为“端系统”&#xff09; 端系统中运行的程序之间的通信方式可划分为两大类&#xff1a; 客户/服务器方式&#xff08;C/S方式&#xff09; 对等方式&#xff08;P2P方式…

14.Chromium指纹浏览器开发教程之WebGL指纹定制

WebGL指纹概述 当在浏览器打开的网页上浏览内容时&#xff0c;看到的大多是平面的、静态的图像和文字。但是有时想要在网页上看到更加生动、立体的图像&#xff0c;如3D游戏、虚拟现实应用等。这时&#xff0c;就需要用到WebGL。 简单来说&#xff0c;WebGL&#xff08;Web G…

GitHub SSH连接终极解决方案

GitHub SSH连接终极解决方案&#xff1a;443端口修改多场景故障排查指南 一、问题现象速查 当开发者执行以下命令时出现连接异常&#xff1a; ssh -T gitgithub.com常见报错类型&#xff1a; 经典端口阻塞ssh: connect to host github.com port 22: Connection refused密钥验…

每日算法【双指针算法】(Day 1-移动零)

双指针算法 1.算法题目&#xff08;移动零&#xff09;2.讲解算法原理3.编写代码 1.算法题目&#xff08;移动零&#xff09; 2.讲解算法原理 数组划分&#xff0c;数组分块&#xff08;快排里面最核心的一步&#xff09;只需把0改为tmp 双指针算法&#xff1a;利用数组下标来…

B端管理系统:企业运营的智慧大脑,精准指挥

B端管理系统的定义与核心功能 B端管理系统&#xff08;Business Management System&#xff09;是专门设计用于支持企业内部运作和外部业务交互的一套软件工具。它集成了多种功能模块&#xff0c;包括但不限于客户关系管理(CRM)、供应链管理(SCM)、人力资源管理(HRM)以及财务管…

使用Java基于Geotools的SLD文件编程式创建与磁盘生成实战

前言 在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;地图的可视化呈现至关重要&#xff0c;而样式定义语言&#xff08;SLD&#xff09;文件为地图元素的样式配置提供了强大的支持。SLD 能够精确地定义地图图层中各类要素&#xff08;如点、线、面、文本等&#x…

Git 命令速查手册

听说用美图可以钓读者&#xff1f; 一、基础操作核心命令 1. 仓库初始化与克隆 命令作用示例git init创建新仓库git init my-projectgit clone克隆远程仓库git clone [https://github.com/user/repo.git](https://github.com/user/repo.git)git remote add关联远程仓库git re…

网络编程 - 4 ( TCP )

目录 TCP 流套接字编程 API 介绍 SeverSocket Socket 用 TCP 实现一个回显服务器 服务端 客户端 运行调试 第一个问题&#xff1a;PrintWriter 内置的缓冲区 - flush 刷新解决 第二个问题&#xff1a;上述代码中&#xff0c;需要进行 close 操作吗&#xff1f; 第三…

OSPF综合实验(HCIP)

1&#xff0c;R5为ISP&#xff0c;其上只能配置Ip地址&#xff1b;R4作为企业边界路由器&#xff0c; 出口公网地址需要通过ppp协议获取&#xff0c;并进行chap认证 2&#xff0c;整个OSPF环境IP基于172.16.0.0/16划分&#xff1b; 3&#xff0c;所有设备均可访问R5的环回&…

真实波幅策略思路

该策略是一种基于ATR&#xff08;Average True Range&#xff09;指标的交易策略&#xff0c;主要用于期货市场中的日内交易。策略的核心思想是利用ATR指标来识别市场的波动范围&#xff0c;并结合均线过滤来确定买入和卖出的时机。 交易逻辑思维 1. 数据准备与初始化 - 集合竞…

leetcode 674. Longest Continuous Increasing Subsequence

目录 题目描述 第一步&#xff0c;明确并理解dp数组及下标的含义 第二步&#xff0c;分析明确并理解递推公式 第三步&#xff0c;理解dp数组如何初始化 第四步&#xff0c;理解遍历顺序 代码 题目描述 这是动态规划解决子序列问题的例子。与第300题的唯一区别就是&#…