通信与网络安全之IPSEC

news2024/11/28 23:20:00

IPSec(IP Security)是IETF制定的为保证在Internet上传送数据的安全保密性能的三层隧道加密协议。IPSec在网络层对IP报文提供安全服务。IPSec协议本身定义了如何在IP数据包中增加字段来保证IP包的完整性、 私有性和真实性,以及如何加密数据包。使用IPsec,数据就可以安全地在公网上传输。IPSec技术也可以实现数据传输双方的身份验证,避免黑客伪装成网络中的合法用户攻击网络资源。IPSec只能在IP网络中使用。

1.IPSEC 特性

IPSec通过以下技术实现在机密性、完整性、抗抵赖和身份鉴别方面提高端到端的安全性:

1)通过使用加密技术防止数据被窃听。 对称+非对称 数字信封 ,非对称使用DH

2)通过数据完整性验证防止数据被破坏、篡改。 HMAC 哈希算法

3)通过认证机制实现通信双方身份确认,来防止通信数据被截获和回放。 随机数+IV+数字信封 

IPSec技术还定义了:

  • 何种流量需要被保护。 使用ACL
  • 数据被保护的机制。 使用AH、ESP协议
  • 数据的封装过程。 使用DH 算法进行交换

2.IPSEC和IKE的关系

IKE(Internet Key Exchange)为IPSec提供了自动协商交换密钥、建立安全联盟的服务, 能够简化IPSec的使用和管理,大大简化IPSec的配置和维护工作。

IKE是UDP之上的一个应用层协议,端口号500,是IPSEC的信令协议。

IKE为IPSEC协商建立安全联盟,并把建立的参数及生成的密钥交给IPSEC。

IPSEC使用IKE建立的安全联盟对IP报文加密或验证处理。

IPSEC处理做为IP层的一部分,在IP层对报文进行处理。AH协议和ESP协议有自己的协议号,分别是51和50。

3.IPSec两种工作模式

3.1.传输模式

传输(transport):只是传输层数据被用来计算AH或ESP头,AH或ESP头和被加密的传输层数据被放置在原IP包头后面。(数据包,根据OSI七层模型,一层层封装,从最外层依次为MAC-IP-TCP/UDP-数据)

传输模式一个最显著的特点就是:在整个IPSec的传输过程中,IP包头并没有被封装进去,这就意味着从源端到目的端数据始终使用原有的IP地址进行通信。而传输的实际数据载荷被封装在IPSec报文中。对于大多数IPSec传输而言, IPSec的报文封装过程就是数据的加密过程,因此,攻击者截获数据后将无法破解数据内容,但却可以清晰地知道通信双方的地址信息。

由于传输模式封装结构相对简单(每个数据报文较隧道模式封装结构节省20字节),因此传输效率较高,多用于通信双方在同一个局域网内的情况。例如:网络管理员通过网管主机登录公司内网的服务器进行维护管理,就可以选用传输模式IPSec对其管理流量进行加密。

总结:对传输层数据进行处理(不对IP包头处理),IP包头暴露在外,存在一定风险。适合主机对主机的访问。

3.2.隧道模式

隧道(tunnel):用户的整个IP数据包被用来计算AH或ESP头,且被加密,对整个网络层数据包进行处理。AH或ESP头和加密用户数据被封装在一个新的IP数据包中。

隧道模式中, 将整个三层数据报文封装在IPSec数据内,再为封装后的数据报文添加新的IP包头。在AH、ESP处理之后再封装了一个外网IP头,主要用于Site-to-Site的应用场景

总结:对网络层整个包进行处理,添加新的IP包头。适合站点对站点。

4.IPSec的组成

IPSec包括AH(协议号51)和ESP(协议号50)两个协议。

1)AH(Authentication Header)报文验证头协议

主要提供的功能有数据源验证、数据完整性校验和防报文重放功能,可选择的散列算法有MD5、SHA1等。AH插到标准IP包头后面,它保证数据包的完整性和真实性,防止黑客截断数据包或向网络中插入伪造的数据包。AH采用了hash算法来对数据包进行保护。AH没有对用户数据进行加密。

在传输模式下,AH协议验证IP报文的数据部分和IP头中的不变部分。

在隧道模式下, AH协议验证全部的内部IP报文和外部IP头中的不变部分。

 AH(认证头协议)在RFC 2402中有明确定义,包括数据完整性、验证和保护数据回放攻击。

AH协议保护整个数据报文,但易变的字段除外,如IP包头中的TTL和TOS字段。

AH协议只能实现验证功能,而并未提供任何形式的数据加密。

AH模式无法与NAT一起运行,因为AH对包括IP地址在内的整个IP包进行hash运算,而NAT会改变IP地址,从而破坏AH的hash值。

2)ESP(Encapsulating Security Payload)报文安全封装协议

ESP协议将用户数据进行加密后封装到IP包中,以保证数据的私有性。同时作为可选项,用户可以选择使用带密钥的哈希算法保证报文的完整性和真实性。ESP的隧道模式提供了对于报文路径信息的隐藏。

在ESP协议方式下,可以通过散列算法获得验证数据字段,可选的算法同样是MD5和SHA1。与AH协议不同的是,在ESP协议中还可以选择加密算法,一般常见的是DES、3DES等加密算法。

ESP协议使用32比特序列号结合防重放窗口和报文验证,防御重放攻击。

在传输模式下,ESP协议对IP报文的有效数据进行加密(可附加验证)。

在隧道模式下,ESP协议对整个内部IP报文进行加密(可附加验证)。

另外,ESP协议加密功能的实现与采用何种连接模式相关。

ESP(Encapsulating Security Payload)是报文安全封装协议

ESP将需要保护的用户数据进行加密后再封装到IP包中,保证数据的完整性、真实性和私有性。 可选择的加密算法有DES,3DES等。

3)AH和ESP可协同工作

AH(Authentication Header)协议是认证头协议,AH协议通过使用带密钥的验证算法,对受保护的数据计算摘要。通过使用数据完整性检查,可判定数据包在传输过程中是否被修改;通过使用认证机制,终端系统或网络设备可对用户或应用进行认证,过滤通信流;认证机制还可防止地址欺骗攻击及重放攻击。

在使用AH协议时,AH协议首先在原数据前生成一个AH报文头,报文头中包括一个递增的序列号(Sequence number)与验证字段(空)、安全参数索引(SPI)等。AH协议将对新的数据包进行离散运算,生成一个验证字段(authentication data),填入AH头的验证字段。

5.IPSEC使用的算法

DH算法的使用:

使用公钥和私钥两个不同的秘钥进行加密和解密。用一个秘钥加密的数据仅能被另一个秘钥解密,且不能从一个秘钥推出另一个秘钥。常用的非对称加密算法有:RSA(使用三位数学家名字的首字母来命名)、DSA(digital signature algorithm,数字签名算法)、DH(diffie-hellman,迪菲赫尔曼)。前两种常用于验证功能,而DH一般被用来实现ipsec中的internet秘钥交换(IKE)协议

DH(diffie-hellman,迪菲赫尔曼)算法的原理与传统意义上的非对称加密算法的区别:通信双方交换公钥后,会用自己的秘钥和对方的公钥通过DH算法计算出一个共享秘钥,然后双方会使用这个共享秘钥加密传输数据。从算法原理看,可以说DH算法已经将对称加密算法和非对称加密算法综合在一起。

DH算法支持可变的秘钥长度,由于公钥和私钥的长度不同,因此通过DH算法计算出的共享密钥的有效长度也就不同。这些都是通过DH算法的密钥组定义的。Cisco的路由器只支持DH组1、2和5。其中DH组1的有效秘钥长度为768,DH组2的有效密钥长度为1024,DH组5的有效密钥长度为1536。密钥的有效长度越长,安全性也就越强。同时CPU的资源占用率也就越高。因此,选择合适的DH组要从网络的安全需求和设备本身的性能两个方面考虑。

密钥的产生是通过DH交换技术,DH交换(Diffie-Hellman Exchange)过程如下:

(1) 须进行DH交换的双方各自产生一个随机数,如a和b;

(2) 使用双方确认的共享的公开的两个参数:底数g和模数p各自用随机数a,b进行幂模运算,得到结果c和d,计算公式如下:

c =g a mod p, d=g b modp;

(3) 双方进行交换下图所示的信息;

(4) 进一步计算,得到DH公有值:

da mod p = c b mod p = g a b mod p

此公式可以从数学上证明。

若网络上的第三方截获了双方的模c和d,那么要计算出DH公有值gab mod p 还需要获得a或b,a和b始终没有直接在网络上传输过,如果想由模c和d计算a或b就需要进行离散对数运算,而p为素数,当p足够大时(一般为768位以上的二进制数),数学上已经证明,其计算复杂度非常高从而认为是不可实现的。所以,DH交换技术可以保证双方能够安全地获得公有信息。

6.IKE协议

IKE(Internet Key Exchange)因特网密钥交换协议是IPSEC的信令协议,为IPSec提供了自动协商交换密钥、建立安全联盟的服务,能够简化IPSec的使用和管理,大大简化IPSec的配置和维护工作。

使用UDP的500端口。

IKE是非常通用的协议,不仅可为IPsec协商安全关联,而且可以为SNMPv3、RIPv2、OSPFv2等任何要求保密的协议协商安全参数。

IKE属于一种混合型协议,由Internet安全关联和密钥管理协议(ISAKMP)和两种密钥交换协议OAKLEY与SKEME组成。IKE创建在由ISAKMP定义的框架上,沿用了OAKLEY的密钥交换模式以及SKEME的共享和密钥更新技术,还定义了它自己的两种密钥交换方式。

IKE不是在网络上直接传送密钥,而是通过一系列数据的交换,最终计算出双方共享的密钥,并且即使第三者截获了双方用于计算密钥的所有交换数据,也不足以计算出真正的密钥。IKE具有一套自保护机制,可以在不安全的网络上安全的分发密钥,验证身份,建立IPSEC安全联盟。

1)IKE的组件

ISAKMP:定义了信息交换的体系结构,也就是格式SKEME:实现公钥加密认证的机制

Oakley:提供在两个IPsec对等体间达成相同加密密钥的基本模式的机制

安全联盟(SecurityAssociation,简称SA)是两个通信实体经协商建立起来的一种协定,它们决定了用来保护数据包安全的IPsec协议、转码方式、密钥、以及密钥的有效存在时间等等。

2)IKE建立的两个阶段

IKE使用了两个阶段的ISAKMP

第一阶段,协商创建一个通信信道(IKE SA),并对该信道进行验证,为双方进一步的IKE通信提供机密性、消息完整性以及消息源验证服务;

第二阶段:使用已建立的IKE SA建立IPSec SA

第一个隧道ISAKMP SA是用于保护后续的再次协商,第二次隧道协商的参数是在完全加密的环境下进行的,之后得到的IPsecSA才真正为数据做加密!第一阶段策略集面向对象是第二阶段的协商包,第二阶段的转换集面向对象是最终的数据包。

IKE会构建一个SA数据库(SADB),由它来维护IPsec协议,用来保障数据包安全。 

SA是单向的:如果两个主机(比如A和B)正在通过ESP进行安全通信,那么主机A就需要有一个SA,即SA(OUT),用来处理外发的数据包,另外还需要有一个不同的SA,即SA(IN)用来处理进入的数据包。主机A的SA(OUT)和主机B的SA(IN)将共享相同的加密参数(比如密钥)。

SA要根据协议来区分:如果两个主机间同时使用ESP和AH,对于ESP和AH会生成不同的SA。 SA分为两种:IKE(ISAKMP)SA 协商对IKE数据流进行加密以及对对等体进行验证的算法(对密钥的加密和peer的认证)IPsec SA 协商对对等体之间的IP数据流进行加密的算法。

SA分为两种:

IKE(ISAKMP)SA:协商对IKE数据流进行加密以及对对等体进行验证的算法(对密钥的加密和peer的认证)

IPsec SA 协商对对等体之间的IP数据流进行加密的算法 

对等体之间的IKE SA只能有一个,对等体之间的IPsec SA可以有多个

7.IPSEC建立过程

1)第一阶段:建立ISAKMPSA协商

交换信息包括:

  • 对等体之间采用何种方式做认证,是预共享密钥还是数字证书。
  • 双方使用哪种加密算法(DES、3DES)
  • 双方使用哪种HMAC方式,是MD5还是SHA
  • 双方使用哪种Diffie-Hellman密钥组
  • 使用哪种协商模式(主模式或主动模式)
  • 协商SA的生存期。

IKE协商(第一阶段)过程中包含三对消息:

a)SA交换,是协商确认有关安全策略的过程;

b)密钥交换,交换Diffie-Hellman公共值和辅助数据(如:随机数),加密物在这个阶段产生;

c)ID信息和验证数据交换,进行身份验证和对整个SA交换进行验证。

主模式交换提供身份保护机制,经过三个步骤,共交换六条信息。三个步骤分布是策略协商交换、Diffie-Hellman共享值、nonce交换以及身份验证交换。

在主模式中,这三个任务是通过六个数据报文完成的:前两个数据包用于协商对等体间的管理连接使用何种安全策略(交换ISAKMP/IKEc传输集);中间的两个数据包通过DH算法产生并交换加密算法和HMAC功能所需的秘钥,最后两个数据包使用预共享秘钥等方式执行对等体间的身份验证。这里需要注意的是,前四个报文为明文传输,从第5个数据报文开始为密文传输,而前四个数据包通过各种算法最终产生的秘钥用于第5、地6个数据包及后续数据的加密。

野蛮模式交换分为三个步骤,但只交换三条信息,头两条消息协商策略、交换Diffile-Hellman公开值表要的辅助信息以及身份信息;第二条消息认证响应方;第三条消息认证发起,并为发起方提供在场的证据。

a)交换ISAKMP/IKE传输集

* ISAKMP/IKE传输集就是一组用来保护管理连接的安全措施,有些书籍称之为IKE策略或ISAKMP策略,它主要包括以下几个方面。

* 加密算法:DES,3DES或AES。

* HMAC功能:MD5或SHA-1。

* 设备验证的类型:预共享秘钥(也可以使用RSA签名等方法)。

* Diffie-Hellman秘钥组:cisco支持1、2、5、7(cisco的路由器不支持秘钥组7)。

* 管理连接的生存周期。

设备可能会有不止一个传输集,如果设备发起来接,它会将传输集列表(包括所有传输集)发送到远端对等体设备进行依次对比,直到找到匹配的结果。如果对比所有传输集后没有发现匹配的传输集,管理连接将无法建立,ipsec连接失败。例如,两端设备都只有一个传输集,且一端配置DES加密算法,另一端配置了3DES加密算法,就会导致IPSEC建立失败。如果给其另一端多配置一个传输集使用DES算法,对等体会自动找到与之匹配的传输集,管理连接便会建立起来。

b)通过DH算法实现秘钥交换

第一步只是协商管理连接的安全策略,而共享秘钥的产生与交换就要通过Diffie-Hellman来实现。

DH算法属于非对称加密算法,因此它将产生公钥和私钥对的组合,且彼此共享公钥。对等体用对方的公钥和自己的私钥通过一种功能运算产生一个安全的共享秘钥,即使有人截获数据,也会因为没有私钥而无法对出共享秘钥。

c)实现设备之间的身份验证

设备身份验证时最常使用的方法就是预共享秘钥,即在对等体之间通过带外的方式共享秘钥,并存储在设备的本地。设备验证的过程可以通过加密算法或HMAC功能两种方法实现,而加密算法很少用于身份验证,多数情况都会通过HMAC功能实现。

ISA/KMP/IKE阶段1相关配置命令

a)配置安全策略

ISAKMP/IKE策略包含以下参数:策略的序列号、加密算法、验证方法、DH组、生存周期。配置命令如下。(用于加密和验证阶段1第5、6个数据包)

Router(config)# crypto isakmp policy { 1-10000 } #建立ISAKMP/IKE管理连接策略,序列号越低,优先级越高
Router(config-isakmp)# encryption { des | 3des | aes } #指定加密算法
Router(config-isakmp)# hash { sha | md5 } #指定验证过程采用HMAC的验证功能
Router(config-isakmp)# authentication pre-share #采用预共享密钥方式进行身份验证
Router(config-isakmp)# group { 1 | 2 | 5 } #指定DH算法的密钥长度,默认为1,组号越大,算法越安全,占用设备资源越多        
Router(config-isakmp)# lifetime 86400 #指定管理连接的生存周期,默认86400s(24小时)
Router# show crypto isakmp policy #查看上述配置

b)配置预共享秘钥

Router(config)# crypto isakmp key { 0 | 6 } keystring address peer-address {subnet_mask}

参数解释:

0表示秘钥为明文,6表示秘钥被加密

Keystring表示秘钥的具体内容

Peer-address表示对端与之共享秘钥的对等体设备地址

Subnet_mask:这里为可选命令,如果没有指定,默认将使用255.255.255.255作为掩码

Router# show crypto isakmp key #查看密钥,秘钥处于明文和密文时,命令显示内容的差异

为了增强安全性,在IOS12.3(2)T版本中,增加选项来加密秘钥,但要求设备的IOS镜像必须支持AES加密:

Router(config)#key config-key password-encrypt
New key: #输入的秘钥至少为8个字母                 
Confirm key: #确认密钥                
Router(config)#password encryption aes

2)建立IPsecSA协商

具体协商内容包括:

  • 双方使用哪种封装技术,AH还是ESP
  • 双方使用哪种加密算法
  • 双方使用哪种HMAC方式,是MD5还是SHA
  • 使用哪种传输模式,是隧道模式还是传输模式

通过三条消息建立IPSec SA:

  • 头两条消息协商IPSec SA的各项参数值,并生成IPSec使用的密钥;
  • 第二条消息为响应方提供在场的证据;
  • 第三条消息为发现方提供在场的证据。

ISAKMP/IKE阶段2主要是在两个ipsec对等体间建立数据连接,其主要完成以下任务:

  • 定义对等体间需要保护何种流量。
  • 定义用来保护数据的安全协议。
  • 定义传输模式。
  • 定义数据连接的生存周期及秘钥刷新的方式。

其中,ipsec对等体一般是通过ACL来匹配那些需要加密传输的流量。

ISAKMP/IKE阶段2的建立程过

a)安全关联(sa)

Ipsec需要在两个对等体之间建立一条逻辑连接,这就要使用一个被称为安全关联的信令协议,这是因为ipsec需要无连接的IP协议在安全运行之前要成为面向连接的协议。SA的连接是在源点和终点之间的单向连接,如果需要双向连接,就需要两个SA连接,每个方向一个。SA连接由三个要素定义。

  • 安全参数索引(SPI):用于唯一表示每条SA连接。
  • 安全协议的类型:IPSEC定义了两种安全协议,即AH和ESP。
  • 目的IP地址。

ISAKMP/IKE阶段2具有这种特性,即ISAKMP/IKE的数据连接实际是通过两个单向连接建立的,而两个连接采用的加密或者认证方式都是相同的。这就使ISAKMP/IKE阶段2的这个特性不易被观察到。

ISAKMP/IKE阶段2的配置命令

ISAKMP/IKE阶段2的配置过程有三个部分组成。

a)配置Crypto ACL

定义何种流量需要被保护的一种方法就是建立一个crypto ACL,通过ACL匹配ipsec ***流量,其中,permit语句指定了需要被保护的流量,而deny语句定义了不需要保护的流量。通常情况,两端对等体设备上的crypto ACL互为镜像,否则阶段2的连接建立就会失败。配置命令如下:

Router(config)# access-list number{ deny | permit } protocol source mac destination mac

b)配置阶段2的传输集

在ipsec对等体之间可以配置多个数据连接的传输集,必须保证两端至少有一对匹配的传输集,这样ISAKMP/IKE阶段2的数据SA连接才能协商成功。设备的传输集由设备性能决定,如果所有对等体设备的性能相近,则共同使用一种传输集即可,如果设备间性能差异较为明显,通常就需要多个传输集了。配置如下。

Router(config)# crypto ipsec transform-set transform_set_name transform1[transform2[transform3]

参数解释:

Transform_set_name:为传输集名称,该名称具有唯一性,不能与任何其他传输集相同

Transform1:传输集选项,参考下表:

Router(cfg-crypto-tran)# mode { tunnel | transport } #定义传输模式,默认为隧道模式

如果在数据连接建立之后修改传输集的配置,并不会影响现有的SA设置,只有连接的生存周期到期,SA才会重新建立连接或者SA被手动清除(通过clear crypto sa或clear crypto ipsec sa命令)。

c)配置crypto map

Crypto map的功能就是将所有的信息组织在一起构建ipsec会话。通常路由器的接口上只对应一个crypto map,一台路由器可以在多个接口上实现流量保护,这时可能就需要多个crypto map了。

Crypto map有两种类型:静态的crypto map和动态的crypto。在构建L2L会话时通常会使用静态的。

Router(config)# crypto map map_name seq_num ipsec-isakmp #seq_num为map序列号,范围1-65535,值越小,优先级越高
Router(config-crypto-m)# match address ACL_name_or_num #调用ACL的名字或编号
Router(config-crypto-m)# set peer { hostname| IP_address} #指定对等体设备,即配置的设备与谁建立连接
Router(config-crypto-m)# set transform-set transform_set_name1 #指定传输集的名称,最多可以列出六个传输集的名称

Router(config-crypto-m)# set pfs [ group1 | group2 | group5 ]  
Router(config-crypto-m)# set security-association lifetime {seconds seconds| kilobytes kilobytes}
Router(config-crypto-m)# set security-association idle-time seconds

命令解释:

* Set PFS:(PFS:perfect forward secrecy,完美转发保密)保证两个阶段中的秘钥只能使用一次,进一步增强了安全性,但使用PFS可能占用设备更多的资源。Set pfs命令用于启用这项功能并指定使用哪个DH秘钥组,这是一条可选命令。

* Set security-association lifetime:用于指定SA的生存周期。默认情况下,cisco的设备已经设定数据连接的生存周期为3600s或4608000KB,相当于一小时内以10Mb/s速率传输的流量。生存周期的阈值是由时间和流量两个方面的因素决定的。且相当于任何一项到达阈值的限制时,SA就会被重新协商建立。

如果在IPSEC对等体之间只设置lifetime,即使没有ipsec流量传递,SA也始终处于激活状态,如果在×××设备上配置了很多ipsec连接,这些暂时没有实际意义的SA就会占用设备的内存和CPU资源。从IOS12.2(15)T开始,cisco为数据SA引入空闲超时计时器,如果没有流量通过SA传输,SA就会被设备自动删除。

* Set security-association idle-time命令用于设定空闲超时计数器,范围为60-86400s。默认情况下,空闲超时计时器是关闭的。

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

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

相关文章

Redis的管道操作

在现代应用程序中,Redis作为一种高性能的内存数据库,被广泛用于缓存、消息队列、实时分析等场景。为了进一步提高Redis的性能,Redis提供了管道(Pipeline)操作,允许客户端将多个命令一次性发送到服务器&…

67 mysql 的 间隙锁

前言 我们这里主要是 来看一下 mysql 中的 间隙锁 间隙锁 主要存在的地方一般就是在 查询主键查询不到, 索引查询查询不到 的场景 然后 我们这里来调试一下 这里的整个流程, 间隙锁的加锁 以及 间隙锁的使用, 以及 间隙锁的释放 从逻辑上来说 间隙锁 锁定的是一个区间, 按照…

小米PC电脑手机互联互通,小米妙享,小米电脑管家,老款小米笔记本怎么使用,其他品牌笔记本怎么使用,一分钟教会你

说在前面 之前我们体验过妙享中心,里面就有互联互通的全部能力,现在有了小米电脑管家,老款的笔记本竟然用不了,也可以理解,毕竟老款笔记本做系统研发的时候没有预留适配的文件补丁,至于其他品牌的winPC小米…

Apache Zeppelin:一个基于Web的大数据可视化分析平台

今天给大家推荐一下 Apache Zeppelin,它是一个基于 Web 的交互式数据接入、数据分析、数据可视化以及协作文档 Notebook,类似于 Jupyter Notebook。 Apache Zeppelin 支持使用 SQL、Java、Scala、Python、R 等编程语言进行数据处理和分析,同时…

彻底理解如何保证ElasticSearch和数据库数据一致性问题

一.业务场景举例 需求: 一个卖房业务,双十一前一天,维护楼盘的运营人员突然接到合作开发商的通知,需要上线一批热门的楼盘列表,上传完成后,C端小程序支持按楼盘的名称、户型、面积等产品属性全模糊搜索热门…

EasyExcel: 结合springboot实现表格导出入(单/多sheet), 全字段校验,批次等操作(全)

全文目录,一步到位 1.前言简介1.1 链接传送门1.1.1 easyExcel传送门 2. Excel表格导入过程2.1 easyExcel的使用准备工作2.1.1 导入maven依赖2.1.2 建立一个util包2.1.3 ExcelUtils统一功能封装(单/多sheet导入)2.1.4 ExcelDataListener数据监听器2.1.5 ResponseHelper响应值处理…

前端实用知识-用express搭建本地服务器

目录 一、为什么会有这篇文章? 二、使用前的准备-如环境、工具 三、如何使用?-express常用知识点 四、代码演示-配合截图,简单易懂 一、为什么会有这篇文章? 在日常前端开发中,我们离不开数据,可能是用…

Redis(概念、IO模型、多路选择算法、安装和启停)

一、概念 关系型数据库是典型的行存储数据库,存在的问题是,按行存储的数据在物理层面占用的是连续存储空间,不适合海量数据存储。 Redis在生产中使用的最多的是用作数据缓存。 服务器先在缓存中查询数据,查到则返回,…

C#基础控制台程序

11.有一个54的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。 12.从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。 13.输入一个数,判断它是奇数还是偶数,如果…

Flink开发入门简单案例--统计实时流订单

Flink开发入门简单案例 0.简介1.订单数据生成器1.1 新建工程TestFlink1.2 在pom.xml中引入Flink依赖包1.3 订单数据生成类订单类(Item)订单生成数据流类测试订单生成类 2.订单统计2.1 仅统计订单中商品的件数 2.2 同时统计商品数量和金额 0.简介 本案例…

AI前景分析展望——GPTo1 SoraAI

引言 人工智能(AI)领域的飞速发展已不仅仅局限于学术研究,它已渗透到各个行业,影响着从生产制造到创意产业的方方面面。在这场技术革新的浪潮中,一些领先的AI模型,像Sora和OpenAI的O1,凭借其强大…

PAT1085 Perfect Sequence(25)

//判断是否是连续的数 //判断是否只能第一个数是最小值 #include <cstdio> #include <algorithm> typedef long long ll; using namespace std; int n,p; const int maxn 100010; int arr[maxn];int binary(int l, int r, ll tgt){if(arr[n-1] < tgt) return n…

QChart数据可视化

目录 一、QChart基本介绍 1.1 QChart基本概念与用途 1.2 主要类的介绍 1.2.1 QChartView类 1.2.2 QChart类 1.2.3QAbstractSeries类 1.2.4 QAbstractAxis类 1.2.5 QLegendMarker 二、与图表交互 1. 动态绘制数据 2. 深入数据 3. 缩放和滚动 4. 鼠标悬停 三、主题 …

SpringBoot源码-spring boot启动入口ruan方法主线分析(一)

一、SpringBoot启动的入口 1.当我们启动一个SpringBoot项目的时候&#xff0c;入口程序就是main方法&#xff0c;而在main方法中就执行了一个run方法。 SpringBootApplication public class StartApp {public static void main(String[] args) {// testSpringApplication.ru…

C#变量和函数如何和unity组件绑定

1.Button On_click (1)GameObject通过Add component添加上Script (2)Button选GameObject组件而不是直接选Script,直接选Script出现不了Script中的函数 2.RawImage 上面是错的 3.Text 上面是错的&#xff0c;应该是直接在GameObject里面填上对应的值 总结&#xff1a; …

Flink Sink的使用

经过一系列Transformation转换操作后&#xff0c;最后一定要调用Sink操作&#xff0c;才会形成一个完整的DataFlow拓扑。只有调用了Sink操作&#xff0c;才会产生最终的计算结果&#xff0c;这些数据可以写入到的文件、输出到指定的网络端口、消息中间件、外部的文件系统或者是…

【Spring MVC】如何获取cookie/session以及响应@RestController的理解,Header的设置

前言 &#x1f31f;&#x1f31f;本期讲解关于SpringMVC的编程之参数传递~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废…

使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件

使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件 文章目录 使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件什么是 exe4j准备工作打包 Spring Boot 项目为 EXE 文件1.启动 exe4j2. 选择项目类型3. 配置项目名称和输出目录4. 配置项目类型或可执行文件名称5. java配…

前端JavaScript(一)---基本介绍

Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言&#xff0c;主要目的是为了解决服务器端语言&#xff0c;比如Perl&#xff0c;遗留的速度问题&#xff0c;为客户提供更流畅的浏览效果。当时服务端需要对…

阿里Qwen系列开源模型介绍

模型种类丰富 Qwen2&#xff1a;包含Qwen2-0.5b、Qwen2-1.5b、Qwen2-7b、Qwen2-57b-a14b以及Qwen2-72b等五种规模的预训练和指令微调模型&#xff0c;其在多语言处理、长文本处理、代码生成、数学和逻辑推理等能力上&#xff0c;在mmlu、gpqa、humaneval等国际测评中得到了验证…