第五章:VRRP和HSRP的网关冗余配置与管理

news/2025/1/19 8:36:54/

一、HRSP

1、简介

在骨干网的设备连接中,单一的设备容易出现故障造成网络的中断,可靠性较差,如图所示,如果核心交换机出现问题,不能正常工作,会影响整个网络的通信,因为整个网络的数据转发是通过核心交换机实现。引擎故障、电源故障等都可能引起设备故障。为了提高网络的可靠性,避免单点故障,可以用引擎冗余、添加备用设备或线缆的方式来保证网络的可靠性和稳定性,如图所示,添加设备设置网关冗余。            

116ddba14e54d26a32e8813974dd3e81.png

当PC的数据需要转发至其他网段时,需要通过网关进行发的,而网关通过位于距离PC机最近的三层设备,如果网关出现故障,即三层设备出现故障时,就会影响网络之间的通信。

2、网关冗余主流解决方案

(1)HSRP(Host StandbyRouting Protocol):热备份路由协议,属于思科私有协议。

(2)VRRP(Virtual RouterRedundancy Protocol):虚拟路由冗余协议,属于IEEE制定。此协议除了实现细节上与HSRP有区别,实现原理及过程与HSRP基本相同。

3、HRSP路由器分类

多台路由器构成一个“热备份组”,形成一个虚拟路由器。

根据路由器的状态可分为:

☻活跃路由器

主要负责转发客户端发送到虚拟路由器上的数据包。活跃路由器通过发送Hello消息来承担和保持它活跃的角色。它是在HSRP选举过程中优先级最高的三层设备,即主网关。一组运行HSRP协议的设备上只有一台活跃路由器。

☻备份路由器

监视HSRP组中路由器的状态,如果活跃路由器出现故障,就立即承担起转发数据包的责任。备份路由器也发送Hello消息,告诉组中其他成员备份路由器的角色和状态变化。它是在HSRP选举过程中优先级次高的三层设备,即备份网关。

☻虚拟路由器

PC机的网关,有自己的虚拟IP地址和MAC地址,并不是真正的设备,它向客户端提供可以连续工作的路由器,但实际不转发数据包,数据包主要是活跃路由器进行转发。对于用户来说,整个HSRP组就是一台虚拟路由器,用户端的数据发往虚拟路由器。

☻监控路由器

监视HELLO消息,但不应答,这些路由器转发经由他们的数据包,但不转发虚拟路由器的数据包。在一组运行HSRP协议的三层设备中,如果设备数量超出两台,多余的就会成为监控路由器,只有当活跃路由器和备份路由器都出现故障时,监控路由器会成为新的活跃路由器或备份路由器。实际工程中使用监控路由器的情况较少。

 

54321fd94a749b43017ecaa9f7f0a32b.png

4、工作原理

HSRP组中的每个路由器都有自己的优先级,可以作为选择活跃路由器的衡量值,Cisco路由器优先级默认值为100,取值范围为0-255,组中优先级最高的将被选为活跃路由器,次高的为备份路由器。如果优先级相同,接口IP地址大的路由器当选。如果在HSRP组内,除了活跃路由器和备份路由器,还有其他的路由器,它们会监听活跃路由器和备份路由器的状态,以实现更强的容错能力。

为了减少网络上的数据流量,在完成活跃路由器及备份路由器的设置后,只有活跃路由器和备份路由器发送HSRP消息。当活跃路由器出现故障失效时,备份路由器会成为新的活跃路由器。当备份路由器失效或者成为活跃路由器,其他路由器将被选为备份路由器。

在HSRP组中,指定一个虚拟IP地址作为网络的网关地址。运行HSRP的路由器发送和接收基于UDP的组播Hello消息来确定活跃路由器和备份路由器,检测路由器是否失效。活跃路由器选定后,将代替虚拟路由器对数据进行响应。如果主机发送数据到虚拟路由器的MAC地址,活跃路由器将接收并处理数据。如果主机向虚拟路由器的虚拟IP地址发送ARP解析请求,活跃路由器将使用虚拟MAC地址进行应答。如果活跃路由器在保持时间内没有发送一个Hello包,具有最高优先级的备份路由器将成为新的活跃路由器,网络中所有主机的数据通信将发送给新的活跃路由器。

二、VRRP

在VRRP协议中定义了路由器的三种状态:

初始状态(Initialize)

主状态(Master)

备份状态(Backup)

vrrp跟hrsp原来差不多,这里就不过多解释,给大家看看vrrp代码命令吧

e356a2c2332b4647a2fadc4dff0fdf63.png

 三、单组HSRP配置

1、任务

网络中只有一个网段192.168.1.0/24,两台路由器通过HSRP配置网关备份,R1作为活跃路由器,端口Fa0/0地址192.168.1.1,R2作为备份路由器,端口Fa0/0地址192.168.1.2,PC的网关为192.168.1.254。

2、拓扑图

825ca165216d4899b47b1781cca49332.png

3、代码

(1)R1

Router>en
Router#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#hostname R1
R1(config)#int f0/0
R1(config-if)#ip add 192.168.1.1 255.255.255.0
R1(config-if)#standby 1 ip 192.168.1.254                   //配置HSRP
R1(config-if)#standby 1 priority 120
R1(config-if)#standby 1 preempt 
R1(config-if)#no shutdown R1(config-if)#
%LINK-5-CHANGED: Interface FastEthernet0/0, changed state to up%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to upR1(config-if)#exit

(2)R2

Router>en
Router#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)#hostname R2
R2(config)#int f0/0
R2(config-if)#ip add 192.168.1.2 255.255.255.0
R2(config-if)#standby 1 ip 192.168.1.254
R2(config-if)#standby 1 preempt 
R2(config-if)#no shutdown R2(config-if)#
%LINK-5-CHANGED: Interface FastEthernet0/0, changed state to up%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to upR2(config-if)#exit

4、测试

R1#show standby brief                             //查看HRSP配置P indicates configured to preempt.|
Interface   Grp  Pri P State    Active          Standby         Virtual IP
Fa0/0       1    120 P Active   local           192.168.1.2     192.168.1.254  
//组号为1,优先级120,状态活跃,活跃路由器为local,备份路由器为192.168.1.2.虚拟IP为192.168.1.254
R2#show standby brief                        //查看HRSP配置P indicates configured to preempt.|
Interface   Grp  Pri P State    Active          Standby         Virtual IP
Fa0/0       1    100 P Standby  192.168.1.1     local           192.168.1.254  
//组号为1,优先级为100,状态备份,活跃路由器为192.168.1.1,备份路由器为local,虚拟IP为192.168.1.254

这里把R1路由器的F0/0接口断掉,看看R2会变成啥样

R1(config)#int f0/0
R1(config-if)#shut
R2#show standby brief P indicates configured to preempt.|
Interface   Grp  Pri P State    Active          Standby         Virtual IP
Fa0/0       1    100 P Active   local           unknown         192.168.1.254  

从这里可以看出R2已经变成活跃路由器了,PC和网关通信可能会暂时超时,之后任然可以与网关通信。

四、多组HSRP配置

1、任务

销售部和人事部分别使用VLAN10(10.1.1.0/24)和VLAN20(10.1.2.0/24),两台三层交换机通过HSRP配置网关备份,三层交换机SW1作为VLAN10的主网关、VLAN20的备份网关,三层交换机SW2作为VLAN10的备份网关、VLAN20的主网关。VLAN10的虚拟IP是10.1.1.254,VLAN20的虚拟IP是10.1.2.254。

2、拓扑图

b0e38d3c86324ff59d74dd3b303d4244.png

3、代码

(1)SW1

创建vlan及vlan地址配置
Switch>en
Switch#vlan database 
% Warning: It is recommended to configure VLAN from config mode,as VLAN database mode is being deprecated. Please consult userdocumentation for configuring VTP/VLAN in config mode.Switch(vlan)#vlan 10
VLAN 10 added:Name: VLAN0010
Switch(vlan)#vlan 20
VLAN 20 added:Name: VLAN0020
Switch(vlan)#exit
APPLY completed.
Exiting....
Switch#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#hostname SW1
SW1(config)#int vlan 10
SW1(config-if)#
%LINK-5-CHANGED: Interface Vlan10, changed state to upSW1(config-if)#ip add 10.1.1.1 255.255.255.0
SW1(config-if)#exit
SW1(config)#int vlan 20
SW1(config-if)#
%LINK-5-CHANGED: Interface Vlan20, changed state to upSW1(config-if)#ip add 10.1.2.1 255.255.255.0
SW1(config-if)#exit
SW1(config)#ip routingTrunk链路配置
SW1(config)#int f0/1
SW1(config-if)#switchport trunk encapsulation dot1q 
SW1(config-if)#switchport mode trunk SW1(config-if)#
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to up%LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan10, changed state to up%LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan20, changed state to upSW1(config-if)#switchport trunk all vlan all
SW1(config-if)#no shut
SW1(config-if)#exitHSRP配置
SW1(config)#int vlan 10
SW1(config-if)#standby 10 ip 10.1.1.254 
SW1(config-if)#standby 10 priority 120
SW1(config-if)#standby 10 preempt 
SW1(config-if)#exit
%HSRP-6-STATECHANGE: Vlan10 Grp 10 state Speak -> Standby%HSRP-6-STATECHANGE: Vlan10 Grp 10 state Standby -> ActiveSW1(config)#int vlan 20
SW1(config-if)#standby 20 ip 10.1.2.254
SW1(config-if)#standby 20 preempt 
SW1(config-if)#exit

(2)SW2

创建vlan及vlan地址配置
Switch>en
Switch#vlan database 
% Warning: It is recommended to configure VLAN from config mode,as VLAN database mode is being deprecated. Please consult userdocumentation for configuring VTP/VLAN in config mode.Switch(vlan)#vlan 10
VLAN 10 added:Name: VLAN0010
Switch(vlan)#vlan 20
VLAN 20 added:Name: VLAN0020
Switch(vlan)#exit
APPLY completed.
Exiting....
Switch#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#hostname SW2
SW2(config)#int vlan 10
SW2(config-if)#
%LINK-5-CHANGED: Interface Vlan10, changed state to upSW2(config-if)#ip add 10.1.1.2 255.255.255.0
SW2(config-if)#exit
SW2(config)#int vlan 20
SW2(config-if)#
%LINK-5-CHANGED: Interface Vlan20, changed state to upSW2(config-if)#ip add 10.1.2.2 255.255.255.0
SW2(config-if)#exit
SW2(config)#ip routingTrunk链路配置
SW2(config)#int f0/1
SW2(config-if)#switchport trunk encapsulation dot1q 
SW2(config-if)#switchport mode trunk SW2(config-if)#
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to up%LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan10, changed state to up%LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan20, changed state to upSW2(config-if)#switchport trunk all vlan all
SW2(config-if)#no shut
SW2(config-if)#exitHRSP配置
SW2(config)#int vlan 10
SW2(config-if)#standby 10 ip 10.1.1.254
SW2(config-if)#standby 10 preempt 
SW2(config-if)#exit
SW2(config)#int vlan 20
SW2(config-if)#standby 20 ip 10.1.2.254
%HSRP-6-STATECHANGE: Vlan10 Grp 10 state Speak -> Standby
SW2(config-if)#standby 20 priority 120
SW2(config-if)#standby 20 preempt
SW2(config-if)#
%HSRP-6-STATECHANGE: Vlan20 Grp 20 state Standby -> ActiveSW2(config-if)#exit

(3)二层交换机

Switch>en
Switch#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#vlan 10
Switch(config-vlan)#exit
Switch(config)#vlan 20
Switch(config-vlan)#exit
Switch(config)#Trunk和access链路配置
Switch(config)#int range f0/1-2
Switch(config-if-range)#switchport mode trunk 
Switch(config-if-range)#switchport trunk all vlan all
Switch(config-if-range)#exit
Switch(config)#int f0/3
Switch(config-if)#switchport mode access 
Switch(config-if)#switchport access vlan 10
Switch(config-if)#exit
Switch(config)#int f0/4
Switch(config-if)#switchport mode access 
Switch(config-if)#switchport access vlan 20
Switch(config-if)#exit

4、测试

SW1#show standby brief P indicates configured to preempt.|
Interface   Grp  Pri P State    Active          Standby         Virtual IP
Vl10        10   120 P Active   local           10.1.1.2        10.1.1.254     
Vl20        20   100 P Standby  10.1.2.2        local           10.1.2.254     
SW2#show standby brief P indicates configured to preempt.|
Interface   Grp  Pri P State    Active          Standby         Virtual IP
Vl10        10   100 P Standby  10.1.1.1        local           10.1.1.254     
Vl20        20   120 P Active   local           10.1.2.1        10.1.2.254  

五、HSRP上行链路跟踪

1、任务

1.本局域网有2个VLAN,生产业务VLAN10,办公业务VLAN20;

2. 为防止二层环路,需全网运行STP,将SW1部署为VLAN10的根网桥、VLAN20的备份根网桥,SW2部署为VLAN20的根网桥、VLAN10的备份根网桥,并将所有PC端接口配置为portfast端口;

3. 部署HSRP为内部VLAN提供网关备份,将SW1部署为VLAN10的主网关、VLAN20的备份网关,SW2部署为VLAN20的主网关、VLAN10的备份网关,实现负载均衡;

4. VLAN10、VLAN20的虚拟网关地址分别为192.168.10.1、192.168.20.1;

5. 要求VLAN10和VLAN20的主网关跟踪上行链路;

6. 切断上行链路,测试HSRP主备网关倒换。

2、拓扑图

1d6879c8e82c4e35b827b7baf1c4af66.png

3、代码

这里给大家配置思路

(1)先在SW1、SW2、SW3上创建vlan

(这里只给出了SW1的代码,大家自行完成SW2和SW3的vlan配置)

Switch>en
Switch#vlan database 
% Warning: It is recommended to configure VLAN from config mode,as VLAN database mode is being deprecated. Please consult userdocumentation for configuring VTP/VLAN in config mode.Switch(vlan)#vlan 10
VLAN 10 added:Name: VLAN0010
Switch(vlan)#vlan 20
VLAN 20 added:Name: VLAN0020
Switch(vlan)#exit
APPLY completed.
Exiting....

(2)生成树配置

SW1(config)#spanning-tree vlan 10 priority 0       //配置为根交换机
SW1(config)#spanning-tree vlan 20 priority 4096    //配置为备份根交换机SW2(config)#spanning-tree vlan 10 priority 4096    //配置为备份根交换机
SW2(config)#spanning-tree vlan 20 priority 0       //配置为根交换机

(3) Trunk链路和Access链路配置

SW1(config)#int range f0/2-3
SW1(config-if-range)#switchport trunk encapsulation dot1q 
SW1(config-if-range)#switchport mode trunk SW1(config-if-range)#
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/2, changed state to down%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/2, changed state to up%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/3, changed state to down%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/3, changed state to upSW1(config-if-range)#switchport trunk all vlan all
SW1(config-if-range)#no shut
SW1(config-if-range)#exitSW2(config)#int range f0/2-3
SW2(config-if-range)#switchport trunk encapsulation dot1q 
SW2(config-if-range)#switchport mode trunk SW2(config-if-range)#
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/3, changed state to down%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/3, changed state to upSW2(config-if-range)#switchport trunk all vlan all
SW2(config-if-range)#no shut
SW2(config-if-range)#exitSW3(config)#int range f0/1-2
SW3(config-if-range)#switchport mode trunk 
SW3(config-if-range)#switchport trunk  all vlan all
SW3(config-if-range)#no shut
SW3(config-if-range)#exit
SW3(config)#int f0/3
SW3(config-if)#switchport mode access 
SW3(config-if)#switchport access vlan 10
SW3(config-if)#exit
SW3(config)#int f0/4
SW3(config-if)#switchport mode access 
SW3(config-if)#switchport access vlan 20
SW3(config-if)#exit

(4)端口IP地址配置

1、SW1和RT1上行链路IP地址配置
PT1(config)#int f0/0
PT1(config-if)#ip add 192.168.1.1 255.255.255.252
PT1(config-if)#no shutPT1(config-if)#
%LINK-5-CHANGED: Interface FastEthernet0/0, changed state to up%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to upPT1(config-if)#exitSW1(config)#int f0/1
SW1(config-if)#no switchport 
SW1(config-if)#
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to upSW1(config-if)#ip add 192.168.1.2 255.255.255.252
SW1(config-if)#no shut
SW1(config-if)#exit2、SW2和RT2上行链路IP地址配置
RT2(config)#int f0/0
RT2(config-if)#ip add 192.168.1.5 255.255.255.252
RT2(config-if)#no shutRT2(config-if)#
%LINK-5-CHANGED: Interface FastEthernet0/0, changed state to up%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to upRT2(config-if)#exitSW2(config)#int f0/1
SW2(config-if)#no switchport 
SW2(config-if)#
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to upSW2(config-if)#ip add 192.168.1.6 255.255.255.252
SW2(config-if)#no shut
SW2(config-if)#exit

(5)VLAN地址配置

SW1(config)#int vlan 10
SW1(config-if)#
%LINK-5-CHANGED: Interface Vlan10, changed state to up%LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan10, changed state to upSW1(config-if)#ip add 192.168.10.3 255.255.255.0
SW1(config-if)#exit
SW1(config)#int vlan 20
SW1(config-if)#
%LINK-5-CHANGED: Interface Vlan20, changed state to up%LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan20, changed state to upSW1(config-if)#ip add 192.168.20.3 255.255.255.0
SW1(config-if)#exitSW2(config)#int vlan 10
SW2(config-if)#
%LINK-5-CHANGED: Interface Vlan10, changed state to up%LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan10, changed state to upSW2(config-if)#ip add 192.168.10.4 255.255.255.0
SW2(config-if)#exit
SW2(config)#int vlan 20
SW2(config-if)#
%LINK-5-CHANGED: Interface Vlan20, changed state to up%LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan20, changed state to upSW2(config-if)#ip add 192.168.20.4 255.255.255.0
SW2(config-if)#exit

(6)HSRP和上行链路跟踪配置

(1)交换机SW1的HSRP和上行链路跟踪配置
SW1(config)#int vlan 10
SW1(config-if)#standby 10 ip 192.168.10.1     //配置组10的虚拟IP地址
SW1(config-if)#standby 10 priority 105        //配置组10的优先级为105
SW1(config-if)#standby 10 preempt             //配置组10的抢占
SW1(config-if)#standby 10 track f0/1          //配置组10上行链路,其优先级默认减少值为10
SW1(config-if)#exit
SW1(config)#int vlan 20
SW1(config-if)#standby 20 ip 192.168.20.1
SW1(config-if)#standby 20 preempt 
%HSRP-6-STATECHANGE: Vlan10 Grp 10 state Speak -> Standby%HSRP-6-STATECHANGE: Vlan10 Grp 10 state Standby -> ActiveSW1(config-if)#exit(2)交换机SW2的HSRP和上行链路跟踪配置
SW2(config)#int vlan 10
SW2(config-if)#standby 10 ip 192.168.10.1
SW2(config-if)#standby 10 preempt 
SW2(config-if)#exit
SW2(config)#int vlan 20
SW2(config-if)#standby 20 ip 192.168.20.1
%HSRP-6-STATECHANGE: Vlan10 Grp 10 state Speak -> StandbySW2(config-if)#standby 20 priority 105
SW2(config-if)#standby 20 preempt 
SW2(config-if)#stan
%HSRP-6-STATECHANGE: Vlan20 Grp 20 state Standby -> ActiveSW2(config-if)#standby 20 track f0/1
SW2(config-if)#exit

4、测试

SW1#show standby brief                   //查看SW1的HSRP配置信息P indicates configured to preempt.|
Interface   Grp  Pri P State    Active          Standby         Virtual IP
Vl10        10   105 P Active   local           192.168.10.4    192.168.10.1   
Vl20        20   100 P Standby  192.168.20.4    local           192.168.20.1   
SW2#show standby brief                        //查看SW2的HSRP配置信息P indicates configured to preempt.|
Interface   Grp  Pri P State    Active          Standby         Virtual IP
Vl10        10   100 P Standby  192.168.10.3    local           192.168.10.1   
Vl20        20   105 P Active   local           192.168.20.3    192.168.20.1   

由以上信息可以得知,SW1为vlan10的主网关,vlan20的备份网关;SW2为vlan20的主网关,vlan10的备份网关。

大家可以去试试HSRP主备网关倒换测试看看有什么不一样的地方

六、单组VRRP配置和多组VRRP配置

HSRP和VRRP原理一样,前面说了HSRP是Cisco的私有协议,所以Cisco里面不能敲VRPP协议

但是gns3和ensp里面是可以用VRRP协议,如果有想学习ensp或者是gns3的宝子可以在评论区留言,我会在ensp的专栏里面出一份VRRP协议的配置命令

 


http://www.ppmy.cn/news/1564359.html

相关文章

软件测试 —— Selenium(等待)

软件测试 —— Selenium(等待) 一个例子强制等待使用示例:为什么不推荐使用强制等待?更好的选择 隐式等待 implicitly_wait()隐式等待和强制等待的区别隐式等待(Implicit Wait)强制等…

Jenkins-基于Role的鉴权机制

jenkins自带了一些全局性的安全配置。 但无法通过job等相对细粒度的来控制使用者的权限。但它可以借助相关的插件实现细颗粒的权限控制。 插件: Role-based Authorization Strategy 需要在configure global security中配置授权策略如下: 保存后&#x…

游戏引擎学习第81天

仓库:https://gitee.com/mrxiao_com/2d_game 或许我们应该尝试在地面上添加一些绘图 在这段时间的工作中,讨论了如何改进地面渲染的问题。虽然之前并没有专注于渲染部分,因为当时主要的工作重心不在这里,但在实现过程中,发现地面…

疫苗预约小程序ssm+论文源码调试讲解

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的,在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值,吸引更多的访问者访问系统,以及让来访用户可以花费更多时间停留在系统上,则表明该系统设计得比较专…

Spring Boot经典面试题及答案

一、Spring Boot基础知识 什么是Spring Boot? 答案: Spring Boot是Spring开源组织下的子项目,是Spring组件一站式解决方案。它简化了Spring应用程序的初始化和开发过程,通过“约定大于配置”的原则,减少了手动配置的繁…

leetcode300.最长递增子序列

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&…

ReaderLM v2:HTML 转 Markdown 和 JSON 的前沿小型语言模型

2024 年 4 月,我们发布了 Jina Reader(https://jina.ai/reader),这是一个非常实用的 API,用户只需在 URL 前添加 r.jina.ai 前缀,就能将任何网页转换为大模型友好的 Markdown。紧接着,在同年 9 月,我们又发…

C#表达式和运算符

本文我们将学习C#的两个重要知识点:表达式和运算符。本章内容会理论性稍微强些,我们会尽量多举例进行说明。建议大家边阅读边思考,如果还能边实践就更好了。 1. 表达式 说到表达式,大家可能感觉有些陌生,我们先来举个…