网络网络层之(5)IPv6协议

news2024/10/6 1:42:32

网络网络层之(5)IPv6协议


Author: Once Day Date: 2024年5月12日

一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…

漫漫长路,有人对你微笑过嘛…

全系列文档可参考专栏:通信网络技术_Once-Day的博客-CSDN博客。

参考文章:

  • 《TCP/IP详解卷一》
  • 【网络协议详解】——IPv6协议(学习笔记)_ipv6 csdn-CSDN博客
  • 一文看懂IPv6 - 知乎 (zhihu.com)
  • IPv6网络协议 | 最全参考资料 - whilewell - 博客园 (cnblogs.com)
  • Info-Finder(在线工具) 报文格式 (huawei.com)
  • IP 报文格式大全 (huawei.com)

文章目录

  • 网络网络层之(5)IPv6协议
        • 1. 介绍
          • 1.1 IPv6协议
          • 1.2 IPv6相关协议
          • 1.3 相关RFC文档
          • 1.4 RFC2460和RFC 8200区别
        • 2. 报文格式
          • 2.1 IPv6报文格式
          • 2.2 IPv4首部和IPv6首部差别
          • 2.3 IPv6流标签
          • 2.4 IPv6扩展首部
          • 2.5 IPv6逐跳选项和目的地选项
          • 2.6 IPv6超大有效载荷
          • 2.7 IPv6隧道封装限制
          • 2.8 IPv6路由头部
          • 2.9 IPv6分片头部

1. 介绍
1.1 IPv6协议

随着互联网的快速发展,IPv4地址空间面临耗尽的问题。为了解决这一问题,互联网工程任务组(IETF)在20世纪90年代初开始研究下一代互联网协议。经过多年的努力,IPv6协议最终于1998年12月由IETF正式发布。

IPv6(互联网协议版本6)是互联网协议(IP)的最新版本,旨在解决IPv4地址枯竭问题,并为未来互联网的发展提供更好的支持。

主要特点如下:

  1. 巨大的地址空间:IPv6使用128位地址,总地址数量是2的128次方,理论上可以说地址数量近乎无限,IPv6可以给地球上的每粒沙子都分到1个地址。
  2. 简化的报文头:IPv6优化了报文头结构,并且固定头部大小为40字节,减少了开销,提高了路由效率。
  3. 内置安全性:IPv6支持IPsec协议,可以实现端到端的加密和身份验证。
  4. 更好的服务质量(QoS):IPv6引入了流标签和优先级字段,方便实现差异化服务。
  5. 无状态自动配置:IPv6支持无状态地址自动配置(SLAAC),简化了网络管理。

与IPv4的区别和联系:

  1. 地址长度不同:IPv4使用32位地址,而IPv6使用128位地址。
  2. 报文头结构不同:IPv6简化了报文头结构,取消了某些字段,并引入了扩展头。
  3. 安全性不同:IPv6内置了IPsec支持,而IPv4需要额外配置。
  4. 过渡机制:为了实现从IPv4到IPv6的平滑过渡,引入了多种过渡机制,如双栈、隧道等。
  5. 兼容性:IPv6是向后兼容的,可以与IPv4共存。但IPv4设备无法直接与IPv6设备通信,需要借助过渡机制。

IPv6是互联网协议的未来,它解决了IPv4地址枯竭问题,并为未来互联网的发展提供了更好的支持。

1.2 IPv6相关协议

这些协议族协同工作,构建了一个完整的IPv6网络架构,每个协议都有其特定的功能和用途:

  • IPv6基本协议(RFC 8200),定义了IPv6数据包的格式和处理规则,包括地址格式、报文头结构、扩展头等。

  • ICMPv6(互联网控制消息协议版本6,RFC 4443),用于传递错误消息和控制信息,包括邻居发现、路径MTU发现、多播侦听器发现等功能。

  • NDPv6(邻居发现协议版本6,RFC 4861),用于发现同一链路上的邻居节点,包括路由器发现、前缀发现、地址解析、重复地址检测等功能

  • DHCPv6(动态主机配置协议版本6,RFC 8415),用于自动分配IPv6地址和配置网络参数,包括有状态和无状态两种模式。

  • IPsec(互联网安全协议,RFC 4301),提供了Authentication Header(AH)和Encapsulating Security Payload(ESP)两种安全机制,用于保护IPv6数据包的完整性、机密性和真实性。

  • MLD(多播侦听器发现协议,RFC 3810),用于IPv6组播管理,允许主机向路由器报告其所在的多播组,类似于IPv4中的IGMP协议。

  • SEND(安全性增强的邻居发现协议,RFC 3971),为NDPv6提供安全性增强,防止欺骗攻击。

  • 移动IPv6(RFC 6275),支持移动节点在不同网络之间漫游,保持通信连续性。

  • 流量标签(RFC 3697),用于标识一个流,以便网络设备提供特定的服务质量(QoS)。

  • 隧道协议(如6to4、6rd、ISATAP等),用于在IPv4网络上传输IPv6数据包,实现IPv6过渡。

1.3 相关RFC文档

以下是与IPv6相关的主要RFC文档:

  • RFC 2460 - Internet Protocol, Version 6 (IPv6) Specification,定义了IPv6协议的基本规范,包括地址格式、报文格式等。

  • RFC 4291 - IP Version 6 Addressing Architecture,描述了IPv6的地址体系结构,包括地址类型、格式和分配方式。

  • RFC 4443 - Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification,定义了ICMPv6协议,用于传递错误消息和控制信息。

  • RFC 4861 - Neighbor Discovery for IP version 6 (IPv6),描述了IPv6的邻居发现协议(NDP),用于发现同一链路上的邻居节点。

  • RFC 4862 - IPv6 Stateless Address Autoconfiguration,定义了IPv6的无状态地址自动配置(SLAAC)机制。

  • RFC 3315 - Dynamic Host Configuration Protocol for IPv6 (DHCPv6),描述了DHCPv6协议,用于自动分配IPv6地址和配置网络参数。

  • RFC 4301 - Security Architecture for the Internet Protocol,定义了IPsec协议,为IPv6提供安全性保护。

  • RFC 3810 - Multicast Listener Discovery Version 2 (MLDv2) for IPv6, 描述了MLDv2协议,用于IPv6组播管理。

  • RFC 3971 - SEcure Neighbor Discovery (SEND),为NDP提供安全性增强,防止欺骗攻击。

  • RFC 6275 - Mobility Support in IPv6,描述了移动IPv6协议,支持移动节点在不同网络之间漫游。

  • RFC 3697 - IPv6 Flow Label Specification,定义了IPv6流量标签,用于标识一个流,提供服务质量(QoS)。

  • RFC 5095 - Deprecation of Type 0 Routing Headers in IPv6,废弃了IPv6中的0型路由头,以提高安全性。

  • RFC 7045 - Transmission and Processing of IPv6 Extension Headers,规定了IPv6扩展头的传输和处理规则。

  • RFC 8200 - Internet Protocol, Version 6 (IPv6) Specification,更新了RFC 2460,是当前IPv6协议的最新规范。

1.4 RFC2460和RFC 8200区别

RFC 2460和RFC 8200都是关于IPv6协议规范的文档,但RFC 8200是RFC 2460的更新版本:

  1. 文档状态,RFC 2460是IPv6的原始规范,发布于1998年12月。RFC 8200是IPv6的更新规范,发布于2017年7月,废弃了RFC 2460。

  2. 扩展头的处理,RFC 2460中,节点必须按照扩展头在报文中出现的顺序依次处理每个扩展头。RFC 8200中,节点只需查看目标地址之前的扩展头,处理顺序不再严格要求。

  3. 逐跳选项扩展头的处理,RFC 2460要求所有节点都必须处理逐跳选项扩展头。RFC 8200允许中间节点在转发数据包时忽略逐跳选项扩展头,以提高性能。

  4. 路由头的处理,RFC 2460定义了0型路由头(RH0),但后来发现RH0存在安全漏洞。RFC 8200明确禁止使用RH0,并引用了RFC 5095关于弃用RH0的规定。

  5. 分片头的处理,RFC 2460中,分片头可以出现在扩展头链的任意位置。RFC 8200要求分片头必须紧跟在目标地址之后,以简化分片处理。

  6. 校验和的计算,RFC 2460和RFC 8200对IPv6报文校验和的计算方法做了一些细微的调整,以适应扩展头处理方式的变化。

RFC 8200在保持IPv6协议基本不变的情况下,对一些细节做了优化和调整,以提高协议的安全性、效率和实现的灵活性

2. 报文格式
2.1 IPv6报文格式

IPv6数据包由两部分组成:IPv6基本首部和有效载荷。IPv6基本首部是固定长度的40字节。

在这里插入图片描述

IPv6首部字段介绍如下:

  • 版本(Version,4位),指定互联网协议的版本号,对于IPv6,其值为6。
  • 通信类型(Traffic Class,8位),用于区分不同类型的数据包,以提供差异化服务,分为两个小字段:差异化服务(DiffServ或DS,6位)显式拥塞通知(ECN,2位)
  • 流标签(Flow Label,20位),用于标识一个特定的流,以便网络设备提供特定的服务质量(QoS)。
  • 有效载荷长度(Payload Length,16位),指定IPv6数据包中有效载荷的长度,以字节为单位。
  • 下一个首部(Next Header,8位),指定紧跟在IPv6基本首部之后的扩展头或上层协议类型,如TCP、UDP等。
  • 跳数限制(Hop Limit,8位),指定数据包在网络中可以经过的最大跳数,每经过一个节点就减1,当跳数限制为0时,数据包将被丢弃。
  • 源地址(Source Address,128位),指定数据包的源IPv6地址。
  • 目标地址(Destination Address,128位),指定数据包的目标IPv6地址。
2.2 IPv4首部和IPv6首部差别

IPv6首部相对于IPv4首部进行了一些字段的删除和更改:

  • 版本(Version),IPv4和IPv6都有版本字段,但IPv6的版本号固定为6。
  • 首部长度(Header Length),IPv6删除了首部长度字段,因为IPv6的基本首部长度固定为40字节。
  • 总长度(Total Length),IPv6删除了总长度字段,引入了有效载荷长度(Payload Length)字段,只指定有效载荷的长度。
  • 标识(Identification)、标志(Flags)、片偏移(Fragment Offset),IPv6删除了这些字段,因为IPv6不允许中间节点进行分片,相应功能包含在IPv6数据报的分片扩展首部中。
  • 生存时间(Time to Live,TTL),IPv6将生存时间字段重命名为跳数限制(Hop Limit),功能相同。
  • 协议(Protocol),IPv6将协议字段重命名为下一个首部(Next Header),功能相同。
  • 首部校验和(Header Checksum),IPv6删除了首部校验和字段,因为链路层和上层协议已经提供了足够的错误检测机制。
  • 选项(Options),IPv6删除了选项字段,引入了扩展头的概念,更加灵活和高效。
2.3 IPv6流标签

IPv6首部中的流标签(Flow Label)字段是一个20位的标识符,用于标识一个特定的数据流。流标签的主要功能是为IPv6数据包提供一种特殊的处理方式,以满足某些应用或服务的需求。

  • 服务质量(QoS)支持,流标签可以用于识别需要特定服务质量的数据流,如实时音视频、在线游戏等。

  • 流量工程(Traffic Engineering),流标签可以用于实现流量工程,即根据网络状态和策略,将特定的数据流导向指定的网络路径。

  • 负载均衡(Load Balancing),流标签可以用于实现负载均衡,即将同一数据流的数据包分配到不同的网络路径或服务器上处理。

  • 流量统计和分析,流标签可以用于识别和统计特定的数据流,如用户会话、应用流量等。

  • 流量加密和认证,流标签可以与IPsec等安全机制结合使用,为特定的数据流提供加密和认证服务。

需要注意的是,流标签的使用是可选的,并非所有的IPv6数据包都必须使用流标签。流标签的值由源节点生成,并在数据包的整个生命周期内保持不变,中间节点不能修改流标签的值,但可以根据流标签提供特定的处理

2.4 IPv6扩展首部

参考华为产品支持文档:IP 报文格式大全 (huawei.com)

扩展报头。IPv6取消了IPv4报头中的选项字段,并引入了多种扩展报文头,在提高处理效率的同时还增强了IPv6的灵活性,为IP协议提供了良好的扩展能力。当超过一种扩展报头被用在同一个分组里时,报头必须按照下列顺序出现:

  • IPv6基本报头,顺序1,值41。
  • 逐跳选项扩展报头(Hop-by-Hop Options),顺序2,值为0,在IPv6基本报头中定义。
  • 目的选项扩展报头(Destination Options),顺序3/8,值为60,指那些将被分组报文的最终目的地处理的选项。
  • 路由扩展报头(Routing),顺序4,值为43,用于源路由选项和Mobile IPv6。
  • 分片扩展报头(Fragment),顺序5,值为44,在源节点发送的报文超过Path MTU时对报文分片时使用。
  • 授权扩展报头(Authentication Header),顺序6,值为51,用于IPSec,提供报文验证、完整性检查。定义和IPv4中相同)
  • 封装安全有效载荷扩展报头(Encapsulating Security Payload),顺序7,值为50,用于IPSec,提供报文验证、完整性检查和加密。定义和IPv4中相同。
  • 上层扩展报头,如TCP/UDP/ICMP等,详细请见:IP 报文格式大全 (huawei.com)。

除了目的选项扩展报头出现两次(一次在路由扩展报头之前,另一次在上层扩展报头之前),其余扩展报头只出现一次。不是所有的扩展报头都需要被转发路由设备查看和处理的。路由设备转发时根据基本报头中Next Header值来决定是否要处理扩展头。

2.5 IPv6逐跳选项和目的地选项

IPv6逐跳选项和目的选项都是IPv6扩展头部,用于在IPv6数据包中携带额外的信息。它们的编码格式如下:

|动作(2位)|chg(1位)|类型子字段(5位)|选项数据长度(8位)|选项数据.....
|-----   Type(选项类型)    ------|
  • 逐跳选项(Hop-by-Hop Options)和目的选项(Destination Options)都可以出现多次,选项统一编码为TLV格式(类型-长度-值)。
  • 动作,在选项没有被识别时指示一个IPv6节点如何执行下一步动作。
  • 改变(chg),指明在数据包转发时选项数目是否改变。
  • 选项数据长度,给出选项数据的字节长度。

选项类型的前两位“动作”字段用于确定不识别选项时的处理方式:

  • 00:忽略该选项,继续处理头部。
  • 01:丢弃数据包,保持沉默。
  • 10:丢弃数据包,并发送一个ICMP参数问题消息给源地址(除非数据包有多播目的地址)。
  • 11:丢弃数据包,并发送一个ICMP参数问题消息给源地址(即使数据包有多播目的地址)。

下面是携带在逐跳选项(H)或者目的地选项(D)扩展头部中的IPv6选项:

选项名头部(H/D)动作改变类型长度RFC文档
填充1(Pad1)H/D0000N/ARFC 8200
填充N(PadN)H/D0001可变RFC 8200
超大有效载荷(Jumbo Payload)H1101948RFC 2675
隧道封装限制(Tunnel Encapsulation Limit)D00044RFC 2473
路由器警告(Router Alert)H00054RFC 2711
快速启动(Quick-Start)H00168RFC 4782
家乡地址(Home Address)D01020116RFC 6275
CALIPSOD00078-256RFC 5570

表格说明:

  • 头部(H/D):H表示逐跳选项,D表示目的地选项。
  • 动作:表示节点不识别选项时的处理方式,参考之前提到的选项类型前两位。
  • 改变:表示选项是否可以被中间节点修改,"0"表示不可修改。
  • 类型:选项的类型值。
  • 长度:选项的长度范围(以字节为单位)。
2.6 IPv6超大有效载荷

IPv6超大有效载荷(Jumbo Payload)选项是一种IPv6逐跳选项,用于支持长度超过65535字节的IPv6数据包。在IPv6基本头部中,有效载荷长度字段为16位,最大值为65535。当数据包长度超过此限制时,就需要使用Jumbo Payload选项。

  • 当IPv6数据包的有效载荷长度超过65535字节时,IPv6基本头部中的有效载荷长度字段必须设置为0
  • Jumbo Payload选项必须作为逐跳选项头部的最后一个选项出现。
  • 所有处理Jumbo Payload选项的节点都必须支持超过65535字节的数据包。
  • 如果节点不支持Jumbo Payload选项,它应该发送一个ICMP参数问题消息。

使用场景:

  • IPv6 Jumbograms:支持超大数据包传输,提高网络效率,特别适用于高速网络环境。
  • 大规模数据传输:如科学计算、数据中心之间的数据迁移等。
2.7 IPv6隧道封装限制

IPv6隧道封装限制(Tunnel Encapsulation Limit)选项是一种IPv6目的地选项,用于限制IPv6数据包在封装隧道中的嵌套深度。当IPv6数据包通过多个隧道传输时,每个隧道都会为数据包添加一层新的封装。如果嵌套深度过大,可能会导致数据包处理延迟增加、网络性能下降,甚至出现环路。

  • Tunnel Encapsulation Limit选项仅在目的地选项头部中有效。
  • 当一个节点接收到带有Tunnel Encapsulation Limit选项的数据包时,它应该检查隧道封装限制字段的值:
    • 如果该值为0,节点应该丢弃数据包并发送一个ICMP参数问题消息。
    • 如果该值非0,节点应该将其减1,并将数据包转发到下一个隧道或最终目的地。
  • 当一个节点封装数据包时,如果数据包中已经存在Tunnel Encapsulation Limit选项,节点应该将隧道封装限制字段的值减1。如果减1后的值为0,节点应该丢弃数据包并发送一个ICMP参数问题消息。
  • 如果封装后的数据包中不存在Tunnel Encapsulation Limit选项,节点可以在新的目的地选项头部中插入该选项,并设置适当的隧道封装限制值。

使用场景:

  • 防止隧道嵌套过深:通过限制隧道嵌套深度,可以避免数据包在网络中无限循环或过度延迟。
  • 网络安全:限制隧道嵌套深度可以降低某些类型的攻击(如DOS攻击)的风险。
2.8 IPv6路由头部

IPv6路由头部(Routing Header)是一种IPv6扩展头部,用于指定数据包在到达最终目的地之前经过的一个或多个中间节点。通过使用路由头部,源节点可以控制数据包的转发路径,实现诸如源路由、移动IPv6等功能。

|下一个头部(1字节)|头部扩展长度(1字节)|路由类型(1字节)|剩余部分(1字节)|保留(4字节)|N个IPv6地址...
  • 下一个头部,标识跟在路由头部后面的头部类型。
  • 头部扩展长度,表示路由头部的长度(不包括前8字节),以8字节为单位。
  • 路由类型,标识路由头部的类型,不同类型有不同的格式和处理方式。
  • 剩余部分,指示剩余未处理的路由段数量。
  • 保留地址,保留为零值。
  • IPv6地址,包含特定于路由类型的数据,如路由地址列表。

常见的路由类型:

  • 类型0(已弃用),源路由,指定数据包经过的完整节点列表。
  • 类型1,宽松源路由(Nimrod,已弃用)。
  • 类型2,移动IPv6的路由头部,用于优化移动节点与对应节点之间的通信。
  • 类型3,RPL(IPv6路由协议for 低功耗有损网络)的源路由头部。
  • 类型4,节点定义的路由头部,用于实验或特定应用。

处理流程:

  1. 当一个节点接收到带有路由头部的数据包时,它应该检查路由类型字段:
    • 如果节点不支持该路由类型,它应该丢弃数据包并发送一个ICMP参数问题消息,指向路由类型字段。
    • 如果节点支持该路由类型,它应该根据类型特定数据和剩余部分字段来处理数据包。
  2. 处理完路由头部后,节点应该将剩余部分字段减1,并将数据包转发到下一个目的地(如果还有剩余路由段)或最终目的地。
  3. 如果剩余部分字段减为0,表示路由头部已处理完毕,数据包应该被传递到上层协议或应用程序。

过度使用路由头部可能会引入安全风险(如IP欺骗、DOS攻击等)和性能问题,一些路由类型(如类型0)由于安全问题已被弃用

2.9 IPv6分片头部

IPv6分片头部(Fragment Header)是一种IPv6扩展头部,用于支持IPv6数据包的分片和重组功能。当一个IPv6数据包的大小超过传输路径的MTU(最大传输单元)时,需要对数据包进行分片。分片头部包含了分片相关的信息,以便目的节点能够正确地重组分片。

|下一个头部(8位)|保留0(8位)|分片偏移(13位)|Res(2位)|M(1位)|标识符(32位)
  • 下一个头部,标识跟在分片头部后面的头部类型。
  • 保留,保留字段,必须设置为0。
  • 分片偏移,指定分片在原始数据包中的偏移量,以8字节为单位。
  • Res,保留字段,必须设置为0。
  • M标志,指示是否还有更多的分片,1表示后面还有分片,0表示这是最后一个分片。
  • 标识,标识属于同一原始数据包的所有分片,用于重组。

处理流程

  1. 当一个节点需要发送的数据包大小超过传输路径的MTU时,它应该对数据包进行分片:
    • 将原始数据包划分为多个小于等于MTU的分片。
    • 为每个分片生成一个新的IPv6头部,并设置分片头部的相关字段。
    • 将每个分片作为独立的IPv6数据包发送。
  2. 当一个节点接收到带有分片头部的数据包时:
    • 检查分片头部的字段是否有效,如果无效,丢弃数据包并发送ICMP参数问题消息。
    • 根据标识字段判断分片是否属于同一原始数据包。
    • 使用分片偏移和数据包长度将分片按顺序组装起来。
    • 当收到所有分片(M标志为0的分片)时,重组原始数据包并传递给上层协议或应用程序。
  3. 如果一个节点在重组过程中遇到问题(如缺失分片、重叠分片等),它应该丢弃所有相关分片并发送ICMP超时消息。

IPv6的分片功能与IPv4有所不同。在IPv6中,只有源节点可以执行分片,中间节点不允许对数据包进行分片。这种设计可以简化网络处理,提高效率。







Alt

Once Day

也信美人终作土,不堪幽梦太匆匆......

如果这篇文章为您带来了帮助或启发,不妨点个赞👍和关注,再加上一个小小的收藏⭐!

(。◕‿◕。)感谢您的阅读与支持~~~

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

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

相关文章

未授权访问:Docker未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 4、通过crontab反弹宿主机shell 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验,一共有好多篇,内容主要是参考先知社区的一位大佬的关于未授权访问的好文章,还有其他大佬总结好…

【机器学习】机器学习与人工智能融合新篇章:自适应智能代理在多元化复杂环境中的创新应用与演进趋势

🔒文章目录: 💥1.引言 🚋1.1 机器学习与人工智能的发展背景 🚌1.2 自适应智能代理的概念与重要性 🚐1.3 研究目的与意义 ☔2.自适应智能代理的关键技术 🛣️2.1 环境感知与信息处理技术 …

whisper报错:hp, ht, pid, tid = _winapi.CreateProcess [WinError 2] 系统找不到指定的文件。

in _execute_child hp, ht, pid, tid _winapi.CreateProcess(executable, args, FileNotFoundError: [WinError 2] 系统找不到指定的文件。 原因: 没装ffmpeg 或者 ffmpeg没添加到…

Nios实验使用串口输出“Hello Nios-II”字符到笔记本电脑

目录 实验过程 创建工程 修改程序 编译工程 运行项目 效果实现 总结 参考 实验过程 硬件设计见博主上篇博客 软件部分设计 下面使用 Nios II Software Build Tools for Eclipse 来完成当前项目的软件开发。 启动 Nios II SBT 按照下图所示点击 Nios II Software Build…

Backend - 数据分析 Pandas

目录 一、作用 二、基础环境 (一)执行虚拟环境的终端命令 (二)代码中导包 三、应用:一维数组 (一)Series对象 1. 含义 2. 常用属性和方法 (1)属性 (…

springboot学习整理

视频:基础篇-01_springboot概述_哔哩哔哩_bilibili 介绍 spring boot 是spring提供的一个子项目,用于快速构建spring应用程序 spring构建: 1 导入依赖繁琐 ; 2 项目配置繁琐 spring Framework: 核心 spring Boot :快速构建spring…

【LangChain学习之旅】—(21)聊天客服机器人的开发(上)

【LangChain学习之旅】—(21)聊天客服机器人的开发(上) “聊天机器人”说明项目的技术实现细节技术实现步骤简述第二步:增加记忆机制第三步:增加检索机制总结“聊天机器人”说明 聊天机器人(Chatbot)是 LLM 和 LangChain 的核心用例之一,很多人学习大语言模型,学习 …

Jmeter(三十九) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 - 上篇(详解教程)

宏哥微信粉丝群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 为什么宏哥要对Jmeter的配置文件进行一下讲解了,因为有的童鞋或者小伙伴在测试中遇到一些需要修改配置文件的问题不是很清楚也不是很懂,就算修改了也是…

今天开发了一款软件,我竟然只用敲了一个字母(文末揭晓)

软件课题:Python实现打印100内数学试题软件及开发过程 一、需求管理: 1.实现语言:Python 2.打印纸张:A4 3.铺满整张纸 4.打包成exe 先看效果: 1. 2.电脑打印预览 3.打印到A4纸效果(晚上拍的&#x…

R语言手把手教你进行支持向量机分析

1995年VAPINK 等人在统计学习理论的基础上提出了一种模式识别的新方法—支持向量机 。它根据有限的样本信息在模型的复杂性和学习能力之间寻求一种最佳折衷。 以期获得最好的泛化能力.支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部极小值,从而也保证了它对未知…

云粒智慧实时数仓的架构演进分享:OceanBase + Flink CDC

4月20日,在2024 OceanBase开发者大会上,云粒智慧的高级技术专家付大伟,分享了云粒智慧实时数仓的构建历程。他讲述了如何在传统数仓技术框架下的相关努力后,选择了OceanBase Flink CDC架构的实时数仓演进历程。 业务背景及挑战 …

企业数据治理过程有哪些挑战?该如何克服?

在数字化时代,数据已成为企业最宝贵的资产之一。随着大数据、云计算和人工智能等技术的兴起,企业积累的数据量呈指数级增长。这些数据中蕴含着巨大的商业价值,对于推动企业发展、优化决策制定、增强市场竞争力具有不可替代的作用。然而&#…

Python-VBA函数之旅-type函数

目录 一、type函数的常见应用场景 二、type函数使用注意事项 三、如何用好type函数? 1、type函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://myelsa1024.blog.csdn.net/ 一、type函…

企业微信hook接口协议,ipad协议http,获取群成员列表简洁版

获取群成员列表简洁版 参数名必选类型说明uuid是String每个实例的唯一标识,根据uuid操作具体企业微信 请求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","roomid":10696052955016166 } 返回示例 {"data": {&q…

政安晨:【Keras机器学习示例演绎】(四十四)—— 使用序列到序列转换器实现英语到西班牙语的翻译

目录 简介 设置 下载数据 解析数据 文本数据矢量化 建立模型 训练我们的模型 解码测试句子 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益,如有不足之…

智慧管家物业管理系统(小组项目)

目录 前言 一、项目介绍 1、目的和背景 2、项目主要内容 3、技术介绍 二、功能模块 1、重要文件结构 2、功能实现(部分个人负责模块功能) 2.1 展示房源信息页面 2.2 房屋详情页面 2.3 房源信息管理 三、功能模块页面 1、前台模块 2、后台…

使用vue3+ts+vite从零开始搭建bolg(五):layout(持续更新中)

五、layout搭建 5.1静态搭建 在src下创建如图文件夹 这里用logo举例&#xff0c;在scripts里export <script lang"ts">export default {name: Logo,}</script> 然后在layout里引入 //引入左侧菜单顶部用户信息 import Logo from ./logo/index.vue 接…

M-有效算法

在赛场上&#xff0c;脑子就两个字“二分”&#xff0c;一点思路都没&#xff0c;完全不知道二分谁&#xff0c;怎么二分&#xff0c;从哪入手。隐隐约约也知道要变换公式&#xff0c;可惜没坚持这个想法。脑子里全是把k分离出来&#xff0c;赛后看了题解才知道&#xff0c;应该…

Electron + GitHub Actions | 自动化流程详解(下)

自动化部署 上篇介绍了 Electron Forge 打包应用教程。在实际开发中&#xff0c;自动化是提升效率和产出质量的关键。本篇我们将详细介绍如何将构建和发布 Electron 应用的过程自动化。 代码挂在 GitHub 仓库上&#xff0c;如果有帮助&#xff0c;记得给仓库点个赞&#xff1a…

【ARM Cortex-M 系列 2.1 -- Cortex-M7 Debug system registers】

请阅读【嵌入式开发学习必备专栏】 文章目录 Debug system registers中断控制状态寄存器&#xff08;ICSR&#xff09;Debug Halting Control and Status Register, DHCSR Debug 寄存器DCRSR与DCRDRCPU 寄存器读操作CPU 寄存器写操作CPU 寄存器选择CPU 寄存器读写示例 调试故障…