网络网络层之(4)IPv4协议

网络网络层之(1)IPv4协议


Author: Once Day Date: 2024年4月4日

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

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

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

参考文章:

  • 《TCP/IP详解卷一》
  • 【网络干货】IPV4基本原理技术详解 - 知乎 (zhihu.com)
  • 计算机网络知识点总结(八)IPv4协议基本原理详解 - 知乎 (zhihu.com)
  • 一文读懂网络报问中的检验和(checksum)—— 原理+举例+代码-CSDN博客
  • Internet Protocol Version 4 (IPv4) Parameters (iana.org)

文章目录

  • 网络网络层之(1)IPv4协议
        • 1. 介绍
          • 1.1 IPv4协议
          • 1.2 IPv4协议族
          • 1.3 相关RFC文档
        • 2. IP数据报格式
          • 2.1 IPv4报文格式
          • 2.2 IP分片报文
          • 2.3 IP首部校验和(Internel校验和)
          • 2.4 差异化服务(DS)
          • 2.5 IP选项

1. 介绍
1.1 IPv4协议

网际协议版本4(IPv4)是网际协议(IP)的第四版,也是第一个被广泛应用的版本。

IPv4的设计和开发始于20世纪70年代,目的是为了连接不同的网络,实现网际互连。

IPv4使用32位(4字节)地址,理论上可以提供约43亿个唯一IP地址。然而,由于互联网的快速发展,IPv4地址在21世纪初已经面临耗尽的问题。为了解决这一问题,互联网工程任务组(IETF)开发了IPv6协议,使用128位(16字节)地址,提供了更大的地址空间。尽管IPv6的部署已经开始,但直到2011年IANA宣布IPv4地址完全分配完毕时,IPv6仍处于部署的初期阶段。

IPv4是一种无连接的协议,它在使用分组交换技术的链路层(如以太网)上运行。分组交换是一种数据传输方式,将数据拆分为一个个数据包(或称数据报),每个数据包独立传输,可以通过不同的路径到达目的地。这种方式提高了网络利用率,但也带来了一些问题,如数据包丢失、重复、失序等。

IPv4采用尽最大努力交付(Best-effort Delivery)的原则,即不保证数据包一定能够到达目的地,也不保证数据包按照发送顺序到达,或者没有重复

IPv4提供的是一种不可靠的数据传输服务,在实际应用中,可靠性由上层的传输层协议(如TCP)来保证,通过错误检测、重传、排序等机制,实现可靠的端到端数据传输。

1.2 IPv4协议族

IPv4协议族是TCP/IP协议族的核心,其中包含了一系列的协议,这些协议共同支持Internet的运作。

  • 地址解析协议ARP(Address Resolution Protocol)负责将IP地址转换为物理地址(如MAC地址)。当一台主机需要与另一台主机通信时,它必须知道目标主机的物理地址。ARP通过广播一个ARP请求,询问目标IP地址对应的物理地址,目标主机收到请求后,会回复自己的物理地址。
  • 逆地址解析协议RARP(Reverse Address Resolution Protocol)与ARP的功能相反,它负责将物理地址转换为IP地址。RARP通常用于无盘工作站,这些工作站在启动时不知道自己的IP地址,需要通过RARP从服务器获取。
  • 互联网控制消息协议ICMP(Internet Control Message Protocol)用于传输控制消息和错误报告。当网络出现问题时,如目标不可达、超时等,ICMP会发送错误报告,帮助网络管理员诊断和解决问题。此外,ICMP还支持ping等网络诊断工具。
  • 传输控制协议TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议。它提供了错误检测、数据重传、流量控制和拥塞控制等机制,保证数据的可靠传输。TCP在传输数据前,需要先建立连接,数据传输完毕后,再断开连接。TCP广泛用于文件传输、电子邮件等需要可靠传输的应用。
  • 用户数据报协议UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议。与TCP不同,UDP不提供数据重传、流量控制等机制,因此传输速度较快,但不保证数据的可靠性。UDP通常用于对实时性要求高、对可靠性要求低的应用,如视频流、在线游戏等。
1.3 相关RFC文档

IPv4协议相关的主要RFC文档如下:

  • RFC 791 - Internet Protocol (IP),该文档定义了IPv4协议的基本功能、数据包格式和协议操作,是IPv4协议的核心文档。

  • RFC 792 - Internet Control Message Protocol (ICMP),该文档定义了ICMP协议,用于传输控制消息和错误报告。

  • RFC 950 - Internet Standard Subnetting Procedure,该文档介绍了子网划分的标准过程,用于IPv4地址的子网划分。

  • RFC 1122 - Requirements for Internet Hosts - Communication Layers,该文档定义了互联网主机在通信层面的要求,包括IPv4协议的实现要求。

  • RFC 1519 - Classless Inter-Domain Routing (CIDR),该文档引入了无类别域间路由(CIDR),用于解决IPv4地址耗尽和路由表增长的问题。

  • RFC 1812 - Requirements for IP Version 4 Routers,该文档定义了IPv4路由器的要求和功能。

  • RFC 2131 - Dynamic Host Configuration Protocol (DHCP),该文档定义了动态主机配置协议(DHCP),用于自动分配IPv4地址。

  • RFC 2474 - Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers,该文档定义了IPv4和IPv6头部中的差分服务字段(DS Field),用于支持差分服务。

  • RFC 3022 - Traditional IP Network Address Translator (Traditional NAT),该文档介绍了传统的网络地址转换(NAT),用于解决IPv4地址不足的问题。

2. IP数据报格式
2.1 IPv4报文格式

IP数据报由首部和数据两部分组成,首部前一部分是固定的20字节,所有IP数据报都有.

在这里插入图片描述

  • 版本(Version,4位),指IP协议的版本。IPv4为4,IPv6为6。

  • 首部长度(Internet Header Length,IHL,4位),表示IPv4头部的长度,以4字节为单位。IPv4头部的最小长度为20字节(IHL=5),最大长度为60字节(IHL=15)。

  • 服务类型(Type of Service,TOS,8位),表示服务质量,用于区分不同类型的数据包,如普通数据包、实时数据包等。最早的RFC 791规定了一个长度为8bit的服务类型(ToS),ToS字段用了4位:D(延迟)、T(吞吐量)、R(可靠性)、C(成本)。但是ToS字段在路由器中并没有很好地利用起来。现已被差分服务(DS)和显式拥塞通告(ECN)取代

  • 区分服务(Differentiated Services,DS,6位),支持不同类型的IP服务,位于服务类型TOS的前六位

  • 显式拥塞通告(Explicit Congestion Notification,ECN,2位),允许在不丢弃报文的同时通知对方网络拥塞的发生。ECN是一种可选的功能,仅当两端都支持并希望使用,且底层网络支持时才被使用。位于服务类型TOS的后两位

  • 总长度(Total Length,16位)指IP头部 + 数据部分的总长度,字节为单位,字段为16位,则数据报最大的长度为65535字节。

    IP协议规定,必须能接收长度不超过576字节的数据报,假设上层交下来的数据长度有512字节,加上最长的IP首部60字节,再加4字节的富余量计算出来的。

  • 标识(Identification,16位),用于标识数据包的唯一性,通常由发送方生成。IP软件维持的一个计数器,每产生一个数据报,计数器就加1。用于分片超过网络MTU大小的IP数据报,能在另一端正确组装起来。

  • 标志(Flags,3位)。第一位保留,always为0。第二位为DF(Don’t fragment),意思是不能分片,DF=0时才能分片。第三位为MF(More Fragment),MF为1表示后面还有“切片”,MF=0表示这已是若干数据报片中的最后一个。

  • 片偏移(Fragment Offset,13位),表示当前分片在原始数据包中的偏移量,以8字节为单位。用于数据包的重组。

  • 生存时间(Time to Live,TTL,8位),表示数据包在网络中的最大跳数。每经过一个路由器,TTL减1,当TTL为0时,数据包被丢弃。用于防止数据包在网络中无限循环。

  • 协议(Protocol,8位),表示数据包携带的上层协议类型,如TCP(6)、UDP(17)、ICMP(1)等。

  • 首部校验和(Header Checksum,16位),这个字段只检验数据报的首部,不包括数据部分,采用反码运算求和方式,也称为Internet校验和。运输层协议必须通过自己的数据完整性检验机制来检查重要数据。每次经过路由器改变TTL时,IP首部校验和也必须改变。

  • 源IP地址(Source Address,32位),表示数据包的源IP地址,即发送方的IP地址。

  • 目的IP地址(Destination Address,32位):表示数据包的目的IP地址,即接收方的IP地址。

  • IP地址可选部分有1-40字节,不满足4字节整数倍需要使用0填充,一般甚少使用。

2.2 IP分片报文

IP分片是指当一个IP数据包的大小超过了网络的最大传输单元(MTU)时,将数据包分割成多个更小的数据包进行传输的过程。这个机制源于早期的网络设计,当时网络链路的MTU大小差异较大,分片能够保证大数据包能够在不同的网络环境中传输。

IP分片由发送方主机或中间路由器执行。当一个大的数据包需要传输时,发送方或路由器将数据包分割成多个小的数据包,每个分片都有自己的IP头部,并设置适当的标识、标志和片偏移字段,以便接收方能够正确地重组数据包。

IP分片也带来了一些问题:

  • 性能开销,分片和重组过程需要消耗额外的CPU和内存资源,特别是对于高速网络,这可能成为性能瓶颈。
  • 重组错误,如果一个分片丢失或损坏,整个原始数据包都无法重组,导致数据丢失。
  • 安全隐患,一些网络攻击(如Ping of Death)利用分片机制,通过发送畸形的分片数据包导致目标系统崩溃。

为了避免IP分片带来的问题,现代网络采用了以下几种解决方法:

  • 路径MTU发现(Path MTU Discovery,PMTUD),发送方通过探测网络路径的MTU大小,确保发送的数据包不超过路径的最小MTU,从而避免分片。这是目前最常用的方法,不过PMTUD依赖ICMP报文,而一些网络设备(如防火墙)可能会阻止ICMP报文,导致PMTUD失效。
  • TCP MSS(Maximum Segment Size):TCP在建立连接时,通过协商确定合适的MSS值,保证TCP段的大小不超过MTU,避免在IP层进行分片。但MSS协商不适用于UDP,MSS协商是TCP的机制,对于UDP这样的无连接协议,无法使用这种方式避免分片。
  • 使用IPv6,IPv6要求链路层支持最小MTU为1280字节,同时也不允许中间路由器进行分片。这有效地避免了分片带来的问题。
  • 分片和重组卸载,一些高性能网络设备(如网卡、交换机)提供了硬件级的分片和重组功能,减轻了主机的处理负担。

IP数据报切片举例:

一个数据总长3820字节,头部为固定长度20字节。第一次要求IP数据报长度不能超过1420字节,因此分成下面三个:

数据报总长度标识MFDF片偏移
原始数据报38201456000
切片114201456100
切片21420145610175
切片31020145600350

假定切片2还要划分切片,则如下:

数据报总长度标识MFDF片偏移
原始数据报1420145610175
切片1820145610175
切片2620145610275
2.3 IP首部校验和(Internel校验和)

Internet校验和是一种用于检测数据传输错误的简单方法,广泛应用于IP、TCP、UDP等协议中。

IP首部校验和的计算基于16位的二进制反码算法。发送方将首部划分为16位的字(word),并将所有字相加,得到一个32位的和。然后将高16位与低16位相加,得到一个16位的和。最后将该和取反,得到校验和。接收方重复这个过程,并将计算得到的校验和与接收到的校验和进行比较。如果两者相同,则认为数据传输无误;否则,认为数据传输出错。

计算过程:

  1. 将IP首部划分为16位的字。如果首部长度不是16位的整数倍,则在末尾填充0。
  2. 将所有16位的字相加,得到一个32位的和。
  3. 将32位的和的高16位与低16位相加,得到一个16位的和。
  4. 如果上一步的结果产生进位,则将进位加到结果的低16位上。
  5. 将上一步得到的16位和取反,得到校验和。

假设一个IP首部的前20字节为:4500 003c 1c46 4000 4006 [检验和b1e6] ac10 0a63 ac10 0a0c

计算过程如下:

  1. 划分16位字相加:4500 + 003c + 1c46 + 4000 + 4006 + ac10 + 0a63 + ac10 + 0a0c = 2 4E17
  2. 高16位与低16位相加:0002 + 4E17 = 4E19
  3. 取反:4E19的反码为B1E6,即校验和为B1E6,符合报文里面的值

校验过程,接收方收到数据包后,执行与发送方相同的计算过程,得到一个16位的和。将该和与接收到的校验和字段进行比较。如果两者完全相同(即,和的取反等于校验和),则认为数据传输无误;否则,认为数据传输出错。

实际计算校验和时,直接将校验和字段也放在里面进行计算,这样算出来的反码和为0XFFFF,直接判断这个值即可。取反之检验和后为0,也可以判断此零值。

快速更新校验和,当IP首部的某些字段发生变化时(如TTL减1),可以快速计算新的校验和,而无需重新计算整个首部的校验和。设原来的校验和为HC,更改前后的字段值分别为m和n,则新的校验和HC'可以通过以下公式计算:

HC' = ~(~HC + ~m + n)

其中,~表示取反操作,+表示16位的加法操作。这个公式可以推导如下:

设原来的首部字段和为S,则有:HC = ~S

更改后的首部字段和为S’,则有:S’ = S + (~m + n),反码和运算式里加上一个0xFFFF不改变结果,而~m + m = 0xFFFF。

新的校验和HC’应满足:HC’ = ~S’

将S’展开:HC’ = ~(S + (~m + n))

将HC代入:HC’ = (HC + (~m + n))

移项:HC’ = (HC + ~m + n)

使用这个公式,可以在O(1)的时间内计算出新的校验和,避免了重新计算整个首部校验和的开销。这对于频繁更新TTL等字段的路由器非常有用,能显著提高转发性能。

2.4 差异化服务(DS)

在早期的IP网络中,使用TOS(Type of Service)字段来提供服务质量(QoS)支持。TOS字段的各部分含义如下:

字段名称比特位含义
Precedence0-2指定数据包的优先级,取值范围为0-7,值越大优先级越高
D3Delay,指定数据包对延迟的敏感程度,1表示低延迟,0表示普通
T4Throughput,指定数据包对吞吐量的敏感程度,1表示高吞吐量,0表示普通
R5Reliability,指定数据包对可靠性的敏感程度,1表示高可靠性,0表示普通
保留6-7未使用,为零值。

但是,由于TOS字段的定义和使用存在一些问题,如可扩展性差、实现复杂等,因此引入了DS字段来取代TOS字段。

DS字段(Differentiated Services Field)用于标识数据包的服务等级,以便网络设备根据DS字段的值对数据包进行区分处理。在DiffServ模型中,网络管理员可以根据业务需求定义不同的服务类别(如语音、视频、数据等),并为每个类别分配特定的DS字段值。网络设备根据DS字段值对数据包进行相应的处理,如队列调度、带宽分配、丢弃策略等,以保证不同类别的服务质量要求。

DS字段中的前6位称为DSCP(Differentiated Services Code Point),用于标识服务类别。DSCP值由两部分组成:

  • 前3位表示服务等级(Class Selector),取值范围为0-7,向后兼容IP优先级(Precedence)。
  • 中间2位表示丢弃概率Drop Precedence,取值范围为0-3,用于区分同一服务等级内的不同丢弃优先级。
  • 最后一位保留为0。

以下是一些常见的DSCP值及其对应的服务类别:

名称DSCP值二进制表示服务类别
CS00000000尽力而为(Best Effort)
CS18001000优先
CS216010000立即
CS324011000瞬间
CS432100000瞬间覆盖
CS540101000CRITIC/ECP
CS648110000网间控制
CS756111000控制
AF1110001010保证转发(Assured Forwarding)
AF1212001100保证转发(Assured Forwarding)
AF1314001110保证转发(Assured Forwarding)
AF2118010010保证转发(Assured Forwarding)
AF2220010100保证转发(Assured Forwarding)
AF2322010110保证转发(Assured Forwarding)
AF3126011010保证转发(Assured Forwarding)
AF3228011100保证转发(Assured Forwarding)
AF3330011110保证转发(Assured Forwarding)
AF4134100010保证转发(Assured Forwarding)
AF4236100100保证转发(Assured Forwarding)
AF4338100110保证转发(Assured Forwarding)
EF46101110加速转发(Expedited Forwarding)

保证转发(Assured Forwarding,AF):AF提供了四个服务类别(AF1x、AF2x、AF3x、AF4x),每个类别内部有三个丢弃优先级(AFx1、AFx2、AFx3)。AF保证一定的带宽,但允许一定程度的拥塞发生。当拥塞发生时,高优先级的数据包被优先转发,低优先级的数据包可能被丢弃。

加速转发(Expedited Forwarding,EF):EF提供了最高优先级的服务,保证数据包的低延迟、低抖动和低丢失。EF通常用于对时延敏感的应用,如语音、视频等实时业务。EF要求网络为其预留足够的带宽,以确保端到端的服务质量。

2.5 IP选项

IP选项是IP头部中的一个可变长度字段,最大长度为40字节。它允许在IP数据包中携带一些额外的信息,以实现某些特殊功能,如源路由、时间戳等。

IP选项字段由一个或多个选项组成,每个选项都有以下格式:

| -- 类型(Type, 1 byte) -- | -- 长度(Length, 1 byte) -- | -- 数据(data, 可变长度) -- |
  • 选项类型(1字节):指定选项的类型,如记录路由、时间戳等。
  • 选项长度(1字节):指定选项的总长度,包括选项类型和选项长度字段。
  • 选项数据(变长):携带选项的具体数据,长度由选项长度字段决定。

IP选项的类型有以下几种:

  • 单字节选项:只有选项类型字段,没有选项长度和选项数据字段。
  • 多字节选项:包含选项类型、选项长度和选项数据字段。

在早期的网络中,IP选项曾被用于实现一些特殊功能,如源路由、时间戳、路由器警示等。这些功能对于网络诊断、性能测量和特殊路由需求等方面有一定的作用。

然而,随着网络技术的发展,IP选项的使用逐渐减少。大多数现代网络设备和协议都不再依赖IP选项来实现相关功能。当前,IP选项主要在一些特定场景中使用,如网络研究、安全测试等。

在路由转发过程中,如果数据包包含IP选项,则路由器需要对选项进行处理。这会增加路由器的处理开销,影响转发性能。有些路由器可能会直接忽略或丢弃包含某些选项的数据包。

防火墙在处理包含IP选项的数据包时,通常会采取更严格的策略。许多防火墙会直接丢弃包含某些选项(如源路由)的数据包,以防止潜在的安全威胁。

下面是一些常见的IP选项(详见Internet Protocol Version 4 (IPv4) Parameters (iana.org)):

IP选项名称选项编号作用用途
记录路由(Record Route)7记录数据包经过的路由器IP地址,每经过一个路由器,将其IP地址添加到选项中。用于网络诊断和故障排除,跟踪数据包的实际传输路径。
时间戳(Timestamp)68记录数据包经过路由器的时间戳,用于测量网络延迟和计算路由器处理时间。用于网络性能测量和分析,评估网络的时延特性。
松散源路由(Loose Source Route)131指定数据包经过的部分路由器IP地址,数据包将按照指定的路径传输,但允许中间路由器进行路由选择。用于实现特殊的路由需求,如策略路由、流量工程等。
严格源路由(Strict Source Route)137指定数据包经过的完整路由器IP地址,数据包将严格按照指定的路径传输,不允许中间路由器进行路由选择。用于实现特殊的路由需求,如安全路由、网络测试等。
路由器警示(Router Alert)148通知中间路由器对数据包进行特殊处理,如RSVP、IGMP等协议使用该选项。用于实现一些需要路由器特殊处理的协议和功能。
安全(Security)130提供数据包的安全相关信息,如安全等级、口令等,用于军事和政府网络。用于实现网络的安全控制和访问限制。
流标识(Stream ID)136标识数据包所属的特定流,用于实现服务质量(QoS)和流量控制。用于区分不同的数据流,提供差异化的服务质量保证。
快速响应(Quick-Start)25允许发送方请求中间路由器为数据流预留资源,加快数据传输速度。用于实现快速启动和资源预留,提高网络性能。






Alt

Once Day

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

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

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

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

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

相关文章

《QT实用小工具·五十九》随机图形验证码,带有一些可人的交互与动画

1、概述 源码放在文章末尾 该项目实现了可交互的动画验证码控件,趣味性十足: 字符变换动画 噪音动画 可拖动交互 项目demo演示如下所示: 项目部分代码如下所示: #ifndef CAPTCHAMOVABLELABEL_H #define CAPTCHAMOVABLELABEL…

VMware虚拟机提示内存不足

VMware虚拟机,k8s集群搭建内存不足的问题 疑问:我的电脑是8G8G双通道的内存,当我在搭建k8s集群时给master-2G内存,node1-3G内存,node2-3G内存; 当依次打开虚拟机到node2时VM提示“物理内存不足,…

【busybox记录】【shell指令】cut

目录 内容来源: 【GUN】【cut】指令介绍 【busybox】【cut】指令介绍 【linux】【cut】指令介绍 使用示例: 关于参数的特殊说明: 打印行中选定部分 - 输出每行的第n-m个字节 打印行中选定部分 - 输出每行的第n-m个字符 打印行中选定…

【论文阅读】Fuzz4All: Universal Fuzzing with Large Language Models

文章目录 摘要一、介绍二、Fuzz4All的方法2.1、自动提示2.1.1、自动提示算法2.1.2、自动提示的例子2.1.3、与现有自动提示技术的比较 2.2、fuzzing循环2.2.1、模糊循环算法2.2.2、Oracle 三、实验设计3.1、实现3.2、被测系统和baseline3.3、实验设置以及评估指标 四、结果分析4…

每日OJ题_贪心算法三③_力扣45. 跳跃游戏 II(dp解法+贪心解法)

目录 力扣45. 跳跃游戏 II 解析代码1_动态规划 解析代码2_贪心 力扣45. 跳跃游戏 II 45. 跳跃游戏 II 难度 中等 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 num…

ws注入js逆向调用函数

这里需要选择一个文件夹 随便 紫色为修改保存 记得ctrls保存 注入代码如下 (function() {var ws new WebSocket("ws://127.0.0.1:8080")ws.onmessage function(evt) {console.log("收到消息:" evt.data);if (evt.data "exit") {…

PHPStudy Apache或者MySQL启动以后自动停止

问题 phpstudy小皮面板中的Apache或MySQL启动以后自动停止 正在启动——已启动——已停止 总结:最主要的原因:端口冲突 端口冲突了,已经有其他程序占用了80、3306端口。 也就是说你的电脑上已经有了一个Apache、MySQL并且正在运行。 解决方案…

C++ list 介绍

&#x1f308;一、认识list这个模版 ist是一个模版&#xff0c;需要结合一个具体的数据类型作为模版参数&#xff0c; 即list < T > <T> <T>&#xff0c;才能成为一个类类型。list是双向循环链表&#xff0c;是序列容器&#xff0c;允许在序列中的任何位置进…

DNS域名解析服务的部署及优化方案

实验要求: 1.配置2台服务器要求如下&#xff1a; a&#xff09;服务器1&#xff1a; 主机名&#xff1a;dns-master.timinglee.org ip地址&#xff1a; 172.25.254.100 配置好软件仓库 b&#xff09;服务器2&#xff1a; 主机名&#xff1a;dns-slave.timinglee.org ip地址&am…

MySQL数据库练习——视图

schooldb库——utf8字符集——utf8_general_ci排序规则 先创建库&#xff0c;再去使用下列的DDL语句。 DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL COMMENT 创建时间,modifyDate datetime DEFAULT NULL …

使用 GPT-4-turbo+Streamlit+wiki+calculator构建Math Agents应用【Step by Step】

&#x1f496; Brief&#xff1a;大家好&#xff0c;我是Zeeland。Tags: 大模型创业、LangChain Top Contributor、算法工程师、Promptulate founder、Python开发者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 个人说明书&#xff1a;Zeeland&…

机器人系统ros2-开发实践07-将机器人的状态广播到 tf2(Python)

上个教程将静态坐标系广播到 tf2&#xff0c;基于这个基础原理这个教程将演示机器人的点位状态发布到tf2 1. 写入广播节点 我们首先创建源文件。转到learning_tf2_py我们在上一教程中创建的包。在src/learning_tf2_py/learning_tf2_py目录中输入以下命令来下载示例广播示例代码…

双ISP住宅IP有何优势?

双ISP住宅IP在当前的互联网环境中具有显著的优势&#xff0c;这些优势主要体现在网络连接的稳定性、安全性、速度以及业务适用范围等方面。以下是对双ISP住宅IP优势的详细分析&#xff1a; 第一点网络连接的稳定性&#xff0c;双ISP住宅IP使用两个不同的互联网服务提供商&…

区块链 | NFT 相关论文:Preventing Content Cloning in NFT Collections(三)

&#x1f436;原文&#xff1a; Preventing Content Cloning in NFT Collections &#x1f436;写在前面&#xff1a; 这是一篇 2023 年的 CCF-C 类&#xff0c;本博客只记录其中提出的方法。 F C o l l N F T \mathbf{F_{CollNFT}} FCollNFT​ and Blockchains with Native S…

SpringBoot2 仿B站高性能前端+后端项目(wanjie)

SpringBoot2 仿B站高性能前端后端项目(完结) Spring Boot 2 仿B站高性能前端后端项目&#xff1a;打造高效、稳定、可扩展的应用 在当今的互联网时期&#xff0c;网站的性能、稳定性和可扩展性成为了权衡一个项目胜利与否的关键要素。本文将引见如何运用 Spring Boot 2 构建一…

智启算力平台基本操作

智启算力平台 智启算力平台路径搭载数据集搭载镜像配置 智启算力平台 开发文档 帮助文档 - OpenI - 启智AI开源社区 路径搭载 OpenIOSSG/promote: 启智AI协作平台首页推荐组织及推荐项目申请。 - notice/Other_notes/SDKGetPath.md at master - promote - OpenI - 启智AI开…

数据结构-线性表-应用题-2.2-11

1)算法的基本设计思想&#xff1a; 分别求两个升序序列的中位数a,b 若ab&#xff0c;则a或b即为所求中位数 若a<b&#xff0c;则舍弃A中较小的一半&#xff08;中位数偏小&#xff0c;往后面找&#xff09;&#xff0c;同时舍弃序列B中较大的一半&#xff0c;两次舍弃长度…

【Leetcode每日一题】 穷举vs暴搜vs深搜vs回溯vs剪枝_全排列 - 子集(解法2)(难度⭐⭐)(72)

1. 题目解析 题目链接&#xff1a;78. 子集 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 为了生成一个给定数组 nums 的所有子集&#xff0c;我们可以利用一种称为回溯&#xff08;backtracking&#xff09;的算法…

pytest(二):关于pytest自动化脚本编写中,初始化方式setup_class与fixture的对比

一、自动化脚本实例对比 下面是一条用例,使用pytest框架,放在一个类中,两种实现方式: 1.1 setup_class初始化方式 1. 优点: 代码结构清晰,setup_class 和 teardown_class 看起来像传统的类级别的 setup 和 teardown 方法。2. 缺点: 使用 autouse=True 的 fixture 作为…

Mac 链接 HP 136w 打印机步骤

打开 WI-FI 【1】打开打印机左下角Wi-Fi网络设计【或者点击…按钮进入WI-FI菜单】&#xff0c;找到NetWork选项OK进入&#xff1b; 【2】设置WI-FI选项&#xff1a;在菜单内找到Wi-Fi选项OK进入&#xff1b; 【3】在菜单内找到Wi-Fi Direct选项OK进入&#xff1b; 【4】在菜单…