Linux网络编程: IP协议详解

news2024/11/18 4:48:04

一、TCP/IP五层模型

在这里插入图片描述

  1. 物理层(Physical Layer):物理层是最底层,负责传输比特流(bitstream)以及物理介质的传输方式。它定义了如何在物理媒介上传输原始的比特流,例如通过电缆、光纤或无线传输等。

  2. 数据链路层(Data Link Layer):数据链路层位于物理层之上,负责在直接相连的节点之间传输数据帧(Frame)。它将比特流组织成帧,并提供数据的可靠传输、差错检测和纠正等功能。常见的协议包括以太网(Ethernet)和Wi-Fi。

  3. 网络层(Network Layer):网络层处理分组(Packet)的传输和路由,负责将数据从源主机传输到目标主机。它定义了逻辑地址(如IP地址)和路由选择算法,并通过Internet Protocol (IP) 进行数据的分组、定址和转发。

  4. 传输层(Transport Layer):传输层提供端到端的可靠数据传输服务,负责将数据从发送方传输到接收方的端口。它通过传输协议(如TCP和UDP)提供了连接管理、流量控制、差错检测和纠正等功能。

  5. 应用层(Application Layer):应用层是最高层,负责处理特定应用程序之间的通信。它包括各种应用协议,如HTTP、FTP、SMTP和DNS等,用于实现不同应用程序之间的数据交换和通信。

二、IP协议特点

IP协议属于网络层协议,所有的TCP, UDP, ICMP, IGMP数据都通过IP数据报传输。IP提供了一种不可靠,无连接的数据包交付服务。依赖其他层的协议进行差错控制。
不可靠: IP数据报不保证能成功的到达目的地,如果出现错误则选择丢弃该数据,然后发送ICMP消息报给信源端
无连接: IP不提供任何后续数据报的状态信息,每个数据报处理都是独立的。如果一个信源发送了连续的两个数据报,每个数据报选择独立的路由,两个数据可能不同时到达。IP通信双方都不长久地维持对方的任何信息。这样上层协议每次发送数据的时候,都必须明确指定对方的IP地址。

IP协议是TCP/IP协议族的动力,为上层协议提供无状态,无连接,不可靠的服务。

  1. 无状态:指的是IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送,传输和接收都是相互独立,没有上下文关系的。这种服务最大缺点就是无法处理重复,乱序的这些情况。乱序:是第n个数据报比第n+1个后到接收端;重复:是同一个数据报通过不同路径多次到达接收端。这些情况ip端无法进行检测,因为这些数据之间没有上下文关系。接收端的iP模块只要接受的完整的IP数据报就将它交给传输层,所以上层协议的角度看这些数据就可能是乱序的,重复的。对于面向连接的协议比如说TCP协议可以自己处理乱序和重复的问题,然后经过TCP协议处理的数据交给上层肯定是有序的,正确的。但无状态也是有优点的:简单,高效。我们不需要为保持通信的状态而分配一些内核资源,也不需要传输数据时携带状态信息。

  2. 无连接:IP通信双方都不长久地维持对方仍和信息。所以每次发送数据的时候都必须指定对方的IP地址。

  3. 不可靠:IP协议不能保证IP数据报准确的到达接收端,它只是尽可能的保证发送过去,很多时候可能导致IP数据报发送失败,比如某个中转路由器发现IP数据报在网络存活时间太长就将其丢弃,并返回一个ICMP错误信息给发送端,接收端发现IP数据报不正确也会将其丢弃同时返回一个ICMP错误信息。无论是什么情况,发送端的iP模块检测到错误不会进行重传只会告诉传输层,传输层的协议比如TCP会自己实现数据确认,超时重传达到可靠的目的。

三、IP报文格式

RFC

https://www.rfc-editor.org/rfc/rfc791.txt
https://www.rfc-editor.org/rfc/rfc1349
https://www.rfc-editor.org/rfc/rfc2474
https://www.rfc-editor.org/rfc/rfc3168

IPv4

在这里插入图片描述

  • 4位版本号(Version):指定IP协议的版本(IPv4/IPv6),对于IPv4来说,就是4。
  • 4位首部长度(IHL):表示IP报头的长度,以4字节为单位。最大能表示15,所以IP报头最长是60字节。
  • 8位服务类型(Type of Service):这个这个字段已经经历过几次重定义,参考后面报文优先级讲解。
  • 16位总长度(Total Length):IP报文(IP报头+有效载荷)的总长度,以字节为单位,因此IP数据报的最大长度为65535字节。由于MTU的限制,长度超过MTU的数据报都将被分片传输,所以实际传输的IP分片数据报的长度远远没有达到最大值。
  • 16位标识(Identification):唯一地标识主机发送的每个一数据报。其初始值由系统随机生成:每发送一个数据报,其值就加1。该值在数据报分片时被复制到每个分片中,因此同一个数据报的所有分片都具有相同的标识值。
  • 3位标志字段(Flags):
    • 第一位保留。表示暂时没有规定该字段的意义;
    • 第二位(Don’t Fragment,DF)表示“禁止分片”。如果设置了这个位,IP 模块将不对数据报进行分片。在这种情况下,如果IP数据报长度超过MTU的话,IP 模块将丢弃该数据报并返回一ICMP差错报文。
    • 第三位(More Fragment, MF)表示“更多分片”。若报文没有进行分片,则该字段设置为0,若报文进行了分片,则除了最后一个分片报文设置为0以外,其余分片报文均设置为1。
  • 13位片偏移(Fragment Offset):分片相对于原始数据开始处的偏移,表示当前分片在原数据中的偏移位置,实际偏移的字节数是这个值×8得到的。因此分片的报文中除了最后一个报文,其他报文的长度必须是8的整数倍,否则报文就不连续了。
  • 8位生存时间(Time To Live,TTL):是数据报到达目的地之前允许经过的路由器跳数。TTL值被发送端设置(常见的值是64)。数据报在转发过程中每经过一个路由,该值就被路由器减1。当TTL值减为0时,路由器将丢弃数据报,并向源端发送-一个ICMP差错报文。TTL值可以防止数据报陷人路由循环。
  • 8位协议(Protocol):表示上层协议的类型。/etc/protocols 文件定义了所有上层协议对应的protocol字段的数值。其中,ICMP是1, TCP是6,UDP是17。
  • 16位首部检验和(Header Checksum):由发送端填充,接收端对其使用CRC算法以检验IP数据报头部,不检验数据部分
  • 32位源IP地址(Source Address): 表示发送端对应的IP地址。
  • 32位目的IP地址(Destination Address):表示发送端和接收端所对应的IP地址。一般情况下,这两个地址在整个数据报的传递过程中保持不变,而不论它中间经过多少个中转路由器。
  • 选项字段(Options):不定长,最多40字节,因为IP头部最长是60字节(其中还包含前面讨论的20字节的固定部分)。可用的IP选项包括如下几种:
    • 记录路由(recordroute),告诉数据报途经的所有路由器都将自己的IP地址填人IP头部的选项部分,这样我们就可以跟踪数据报的传递路径。
    • 时间戳(timestamp),告诉每个路由器都将数据报被转发的时间(或时间与IP地址对)填人IP头部的选项部分,这样就可以测量途经路由之间数据报传输的时间。
    • 松散源路由选择(loose source routing),指定一个路由 器IP地址列表,数据报发送过程中必须经过其中所有的路由器。
    • 严格源路由选择(strict source routing),和松散源路由选择类似,不过数据报只能经过被指定的路由器。

在IP协议中,IP协议是面向非连接的,所谓的非连接就是在数据的传递过程中,不需要检测网络是否连通,所以是不可靠的数据报协议。IP协议主要用于在主机之间的寻址和选择数据包路由。

首部校验和

计算方式如下:
在这里插入图片描述

在发送端的时候,将校验和全部设置为0,然后把数据报首段数据全部进行反码相加,得到的值为校验和,放入首部的校验和字段;然后在接收端的时候,将数据报首段数据和校验和一起全部反码相加,最后若是得到零,则保留,若不是零,则说明数据报在传输过程中发生了改变,则丢弃该数据报。

IP报头与载荷分离

当IP从底层获取到一个报文后,首先读取报文的前20个字节,并从中提取出4位的首部长度,此时便获得了IP报头的大小size。若size的值大于20字节,则需要继续从报文中读取size−20字节的数据,这部分数据就是IP报头中的选项字段。

读取完IP的基本报头和选项字段后,剩下的就是有效载荷了。 IP协议通过这种"定长报头+自描述字段"的方式进行报头和有效载荷的分离。

4位二进制的取值范围是0000 ~ 1111,因此IP报头的最大长度为15 × 4 = 60字节。基本报头的长度是20字节,所以选项字段的长度最多为40字节。若IP报头中不携带选项字段,那么IP报头长度就为20字节,此时报头中的4位首部长度字段所填的值就是20 ÷ 4 = 5,即0101。

IP报头中的4位首部长度与TCP报头中的4位首部长度都以4字节为单位进行描述的,也恰好是报文的宽度。

载荷交付

基于IP协议的传输层协议不止一种,因此当IP从底层获取到一个报文并对其进行解包后,IP需要知道应该将分离后得到的有效载荷交付给上层的哪一个协议。

在IP报头中有一个字段叫做8位协议,该字段表示的就是上层协议的类型,IP就是根据该字段判定应该将分离出来的有效载荷交付给上层的哪一个协议。

该字段是发送方的IP层从上层传输层获取到数据后填充的,比如是上层TCP交给IP层的数据,那么该数据在封装IP报头时的8位协议填充的就是TCP对应的编号

32位源IP和目的IP

IP报头中的32位源IP地址和32位目的IP地址,分别代表的就是该报文的发送端和接收端对应的IP地址

数据在网络传输过程中会遇到一个个的路由器,这些路由器会帮助网络当中的数据进行路由转发,使得网络中的数据慢慢趋近于目标主机。路由器在帮助数据进行路由转发时,会提取出该数据的IP报头中的目的IP地址,并以此作为数据路由转发的重要依据

当接收端收到了发送端发来的数据后,接收端可能也想要给发送端发送数据,因此发送端在发送数据时除了需要指明该数据的目的IP地址,还需要指明该数据的源IP地址,即发送端的IP地址。即便接收端收到数据后没有数据想要发送,但至少需要向发送端发送一个响应报文,表明发送端发送的数据已经被接收端可靠的收到了

8位生存时间

报文在网络传输过程中,可能因为某些原因导致报文无法到达目标主机。如报文在路由时出现了环路路由的情况,或者目标主机已经异常离线了,此时这个报文就成了一个废弃的游离报文

为了避免网络中出现大量的游离报文,于是在IP的报头中就出现了一个字段:8位生存时间(Time To Live,TTL)。8位生存时间代表的是报文到达目的地的最大报文跳数,每当报文经过一次路由,生存时间就会减一,当生存时间减为0时该报文就被自动丢弃,在网络中消散

四、IP报文优先级与TOS

IPv4报文中有三种承载QoS优先级标签的方式,分别为基于二层的CoS字段(IEEE802.1p)的优先级、基于IP层的IP优先级字段ToS优先级和基于IP层的DSCP(Differentiated Services Codepoint)字段优先级。

TOS在不同协议中进行过定义,分别为RFC791、RFC1122、RFC1349;RFC1349废除了之前两个RFC定义,现在大多数设备使用RFC1349。
在DiffServ模型网络中又对TOS重新进行了定义, 即DSCP域。

对于IPv4报文,基于IPv4包首部中的ToS域的前三位(即IP Precedence)或前6位(即DSCP域)来标记报文。使用IP优先级可以将报文最多分成23=8类;使用DSCP域可将报文最多分成26=64类。

在实施Qos策略时,Cos与Tos或DSCP之间通常要做映射机制。

IEEE802.1p优先级

以太帧中可以插入IEEE 802.1Q选项来确定它属于哪个VLAN以及他的IEEE 802.1p优先级(QoS)

            +-----------+----------+--------+-----------+
            |   TPID    |   PRI    |  CFI   |    VID    |
            |  2 Bytes  |  3 Bits  | 1 Bits |  12 Bits  |
            +-----------+----------+--------+-----------+
            |                                           |
                |                                   |
                    |                          |
                        |              |
+-----------+-----------+--------------+---------------+------+-----------+----------+
|   DMAC    |   SMAC    |  802.1Q Tag  |  Length/Type  |       Data       |   FCS    |
|  6 Bytes  |  6 Bytes  |   4 Bytes    |    2 Bytes    |  Variable length | 4 Bytes  |
+-----------+-----------+--------------+---------------+------+-----------+----------+

PRI(Priority)表示帧的QoS优先级,取值范围为0~7,值越大优先级越高,该优先级主要为QoS差分服务提供参考依据。当阻塞时,优先发送优先级高的数据包。

如果设置用户优先级,但是没有VID(VLAN ID),则VLAN ID必须设置为0x000。

RFC1349 TOS

https://www.rfc-editor.org/rfc/rfc1349 定义

    0     1     2     3     4     5     6     7
    +-----+-----+-----+-----+-----+-----+-----+-----+
    |                 |                       |     |
    |   PRECEDENCE    |          TOS          | MBZ |
    |                 |                       |     |
    +-----+-----+-----+-----+-----+-----+-----+-----+

优先级
比特0~2表示Precedence字段。代表报文传输的8个优先级,按照优先级从高到低顺序取值为7、6、……、1和0。最高优先级是7或6,经常是为路由选择或更新网络控制通信保留的,用户级应用仅能使用0~5级。

111 - Network Control (网络控制)
110 - Internetwork Control (网间控制)
101 - CRITIC/ECP (关键)
100 - Flash Override (疾速)
011 - Flash (闪速)
010 - Immediate (立即)
001 - Priority (优先)
000 - Routine (普通)

优先级6和7一般保留给网络控制数据使用,比如路由。
优先级5推荐给语音数据使用。
优先级4由视频会议和视频流使用。
优先级3给语音控制数据使用。
优先级1和2给数据业务使用。
优先级0为缺省标记值。

TOS
IP首部中的ToS字段,只能表示一种服务类别,也就是——这4bit字段中,最多只能有一个bit字段为1。
这四个字段组合在一起,表示了该数据报对应的服务类别,这个应用层的服务类别是不同的。这里所说的服务类别. 、

1000   --   minimize delay #最小延迟
0100   --   maximize throughput #最大吞吐量
0010   --   maximize reliability #最高可靠性
0001   --   minimize monetary cost #最小费用
0000   --   normal service  #一般服务

最小延迟,对应于对延迟敏感的应用,如telnet和人login等。
最大吞吐量,对应于对吞吐量要求比较高的应用,如FTP文件应用,对文件传输吞吐量有比较高的要求。
最高可靠性,对网络传输可靠性要求高的应用,如使用SNMP的应用、路由协议等等。
最小费用,如NNTP这种用户网络新闻等。
ToS字段的服务类型未能在现有的IP网络中普及使用。

MBZ必须置0

RFC2474 DSCP

目前存在多种IP QoS服务模型,其中应用最广的是差分服务模型(DiffServ)。DiffServ模型的一个重要概念是在转发分组时体现服务等级的每跳行为PHB(Per Hop Behaviors)。DiffServ模型中,IETF重新定义了IPv4中的ToS和IPv6中的TC,称作DS字段,DS字段的取值称为DSCP(DiffServ code point)。不同的DSCP取值对应于不同的PHB。

DiffServ模型网络中实际部署的时候这8个优先级是远远不够的,于是RFC2474又对TOS重新进行了定义,把前六位定义为DSCP差分服务代码(Differentiated Services Code Point),后两位保留。
RFC3168中将TOS最后两位定义为ECN字段,用来控制拥塞比如用在RoCEv2环境。

    0   1   2   3   4   5   6   7
  +---+---+---+---+---+---+---+---+
  |         DSCP          |  CU   |
  +---+---+---+---+---+---+---+---+

    DSCP: differentiated services codepoint
    CU:   currently unused

在这里插入图片描述

在IPv4报文中,DS(Differentiated Service)字节的低6位(比特0~5)用作区分服务代码点DSCP。DSCP中的低3位(比特0~2)是类选择代码点CSCP(Class Selector Code Point),它表示了一类DSCP。网络中支持DiffServ技术的各设备根据DSCP值选择相应的转发行为。

在IPv6报文中,有两个字段与QoS有关,分别为流量类别TC(Traffic Class)和流标签FL(Flow Label)字段。流量类别字段有8位,和IPv4的服务类型(ToS)字段功能相同,用于对报文的业务类别进行标识;流标签字段有20位,用于标识属于同一业务流的包。流标签和源、目的地址一起,唯一标识了一个业务流。同一个流中的所有包具有相同的流标签,以便对有同样QoS要求的流进行快速、相同的处理。

PHB

在每一个DS节点上对分组的处理称为每跳行为PHB(Per-Hop Behavior)。PHB描述了DS节点对具有相同DSCP的分组采用的外部可见的转发行为。可以用优先级来定义PHB,也可以用一些可见的服务特征如分组延迟、抖动或丢包率来定义。PHB只定义了一些外部可见的转发行为,没有指定特定的实现方式。

标准协议定义了四种标准的PHB:类选择码CS(Class Selector),加速转发EF(Expedited Forwarding),确保转发AF(Assured Forwarding)和尽力而为BE(Best-Effort)。其中,BE是缺省的PHB。

在这里插入图片描述

DSCP取值与PHB

相关标准则定义比特0~5表示DSCP域,其中前3比特是类选择代码点CSCP(Class Selector Code Point),它表示了一类DSCP。DSCP优先级值有64个(0-63),0优先级最低,63优先级最高。事实上DSCP字段是IP优先级字段的超集,DSCP字段的定义向后与IP优先级字段兼容。网络中支持DiffServ技术的各设备根据DSCP值选择相应的PHB。

在这里插入图片描述

①、默认的DSCP为0
②、CS定义为向后与IP优先级兼容,后三位仍然为0,也就是说CS仍然沿用了IP PRECEDENCE只不过CS定义的DSCP=IP PRECEDENCE*8,所以CS1-7取值依次为8,16,24,32,40,48,56
③、EF取值46(101110)
④、AF分为两部分,a部分和b部分:a部分为3 bit仍然可以和IP PRECEDENCE对应;b部分为2 bit表示丢弃性,01为低,10为中,11为高(00未用),可以应用于RED或者WRED。虽然a部分有3bit,可以将AF分为8类,但是目前只用到了1~4,即AF只有4个等级AF1-AF4,每个等级有三个丢弃优先级,取值为[(10,12,14),(18,20,22),(26,28,30),(34,36,38)]

五、IP分片

当IP数据报的长度超过帧的MtU时,它将被分片传输。分片可能发生在发送端,也可能发生在中转路由器上,而且可能在传输过程中被多次分片,但只有在最终的目标机器上,这些分片才会被内核中的IP模块重新组装。

IP头部中的如下三个字段给IP的分片和重组提供了足够的信息:数据报标识、标志和片偏移。一个IP数据报的每个分片都具有自己的IP头部:

  • 相同的标识值。该值在数据报分片时被复制到每个分片中,因此同一个数据报的所有分片都具有相同的标识值。
  • 不同的标志。 除了最后一个分片外,其他分片都将设置MP标志。
  • 不同的片偏移。 每个分片在数据包的偏移是应该不同的。片偏移是8的整数倍。
  • 每个分片的IP头部的总长度字段将被设置为该分片的长度。

以太网帧的MTU是1500字节( 可以通过ifconfig命令或者netstat命令查看),因此它携带的IP数据报的数据部分最多是1480 字节(IP 头部占用20字节)。考虑用IP数据报封装一个长度为1481字节的ICMP报文(包括8字节的ICMP头部,所以其数据部分长度为1473字节),则该数据报在使用以太网帧传输时必须被分片。在这里插入图片描述
在这里插入图片描述

长度为1501字节的IP数据报被拆分成两个IP分片,第一个IP分片长度为1500字节,第二个IP分片的长度为21字节。每个IP分片都包含自己的IP头部(20 字节),且第一个IP分片的IP头部设置了MF标志,而第二个IP分片的IP头部则没有设置该标志,因为它已经是最后-一个分片了。原始IP数据报中的ICMP头部内容被完整地复制到了第一个IP分片中。第二个IP分片不包含ICMP头部信息,因为IP模块重组该ICMP报文的时候只需要一份ICMP头部信息,重复传送这个信息没有任何益处。1473 字节的ICMP报文数据的前1472字节被IP模块复制到第一个IP分片中,使其总长度为1500字节,从而满足MTU的要求;而多出的最后1字节则被复制到第二个IP分片中。

六、IP组包

目标主机收到所有的分片后,需要对它们进行重新组装,以重建原始IP数据包。这个过程称为组包。

  1. 接收到一个或多个数据段
  2. 每个数据段都会包标识值、标志、片偏移、总长度。
  3. 根据标识值、标志、片偏移、总长度,将所有数据段重新组合成一个完整的IP数据包
  4. 如果有数据段缺失或者损坏, 接收端会丢弃整个IP数据包。

参考:
https://blog.csdn.net/qq_15559817/article/details/104477897
https://blog.csdn.net/Rocketcp3/article/details/108874895
https://blog.csdn.net/legend050709/article/details/115470228
https://support.huawei.com/enterprise/zh/doc/EDOC1100334526/1c9211d
https://support.huawei.com/enterprise/zh/doc/EDOC1100334526/dd1b06d9

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

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

相关文章

湖南麒麟SSH服务漏洞

针对湖南麒麟操作系统进行漏洞检测时,会报SSH漏洞风险提醒,具体如下: 针对这些漏洞,可以关闭SSH服务(前提是应用已经部署完毕不再需要通过SSH远程访问传输文件的情况下,此时可以通过VNC远程登录方法&#x…

RocketMQ学习笔记四(黑马)项目

课程地址: 1.Rocket第二章内容介绍_哔哩哔哩_bilibili (视频35~88,搭建了一个电商项目) 待学,待完善。

linux网络服务学习(1):nfs

1.什么是nfs NFS:网络文件系统。 *让客户端通过网络访问服务器磁盘中的数据,是一种在linux系统间磁盘文件共享的方法。 *nfs客户端可以把远端nfs服务器的目录挂载到本地。 *nfs服务器一般用来共享视频、图片等静态数据。一般是作为被读取的对象&…

对cPanel面板上的单个网站做备份

这两天有一个老客户联系我,这个客户的网站是在两三年前交付的,这期间程序代码一直没有过更新,他担心有漏洞容易被入侵,所以再次联系我们帮他升级代码。 在更新之前,客户要求我们先帮他的网站做一个备份以防万一&#x…

JavaScript 基础知识

一、初识 JavaScript 1、JS 初体验 JS 有3种书写位置&#xff0c;分别为行内、内部和外部。 示例&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wid…

LeetCode 面试经典150题 26.删除有序数组中的重复项

题目&#xff1a; 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量…

Java-并发编程--ThreadLocal、InheritableThreadLocal

1.ThreadLocal 作用 作用&#xff1a;为变量在线程中都创建副本&#xff0c;线程可访问自己内部的副本变量。该类提供了线程局部 (thread-local) 变量&#xff0c;访问这个变量&#xff08;通过其 get 或 set 方法&#xff09;的每个线程都有自己的局部变量&#xff0c;它独立…

深度强化学习(六)(改进价值学习)

深度强化学习(六)(改进价值学习) 一.经验回放 把智能体与环境交互的记录(即经验)储存到 一个数组里&#xff0c;事后反复利用这些经验训练智能体。这个数组被称为经验回放数组&#xff08;replay buffer&#xff09;。 具体来说, 把智能体的轨迹划分成 ( s t , a t , r t ,…

C#,深度好文,精致好码,文本对比(Text Compare)算法与源代码

Vladimir I. Levenshtein 一、文本对比的列文斯坦距离(编辑距离)算法 在日常应用中,文本比较是一个比较常见的问题。文本比较算法也是一个老生常谈的话题。 文本比较的核心就是比较两个给定的文本(可以是字节流等)之间的差异。目前,主流的比较文本之间的差异主要有两大类…

力扣112、113、101--树

112. 路径总和 题目描述&#xff1a; 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。 判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。 如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c…

海豚调度系列之:任务类型——SPARK节点

海豚调度系列之&#xff1a;任务类型——SPARK节点 一、SPARK节点二、创建任务三、任务参数四、任务样例1.spark submit2.spark sql 五、注意事项&#xff1a; 一、SPARK节点 Spark 任务类型用于执行 Spark 应用。对于 Spark 节点&#xff0c;worker 支持两个不同类型的 spark…

TinTin Web3 动态精选:以太坊坎昆升级利好 Layer2,比特币减半进入倒计时

TinTin 快讯由 TinTinLand 开发者技术社区打造&#xff0c;旨在为开发者提供最新的 Web3 新闻、市场时讯和技术更新。TinTin 快讯将以周为单位&#xff0c; 汇集当周内的行业热点并以快讯的形式排列成文。掌握一手的技术资讯和市场动态&#xff0c;将有助于 TinTinLand 社区的开…

【SpringBoot3】整合Druid数据源和Mybatis 项目打包和运行

文章目录 一、整合Druid数据源二、整合Mybatis2.1 MyBatis整合步骤2.1 Mybatis整合实践2.1 声明式事务整合配置2.1 AOP整合配置 三、项目打包和运行命令启动和参数说明 总结web 与 springboot 打包区别JDK8的编译环境 执行17高版本jar 一、整合Druid数据源 创建模块 &#xff1…

2024年【天津市安全员C证】考试资料及天津市安全员C证考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 天津市安全员C证考试资料根据新天津市安全员C证考试大纲要求&#xff0c;安全生产模拟考试一点通将天津市安全员C证模拟考试试题进行汇编&#xff0c;组成一套天津市安全员C证全真模拟考试试题&#xff0c;学员可通过…

微信小程序原生<map>地图实现标记多个位置以及map 组件 callout 自定义气泡

老规矩先上效果图: 1 、在pages文件夹下新建image文件夹用来存放标记的图片。 2、代码片段 也可以参考小程序文档:https://developers.weixin.qq.com/miniprogram/dev/component/map.html index.wxml代码 <mapid="map"style="width: 100%; height:100%;&…

2024批量导出公众号所有文章生成目录,这下方便找文章了

公众号历史文章太多&#xff0c;手机上翻起来太费劲&#xff0c;怎么快速找到某一天的文章呢&#xff1f;比如深圳卫健委这个号从2014到2024发布近万篇文章。 公众号历史文章太多&#xff0c;手机上翻起来太费劲&#xff0c;怎么快速找到某一天的文章&#xff1f; 如果要找2020…

【中等】保研/考研408机试-二叉树相关

目录 一、基本二叉树 1.1结构 1.2前序遍历&#xff08;注意三种遍历中Visit所在的位置&#xff09; 1.2中序遍历 1.3后序遍历 二、真题实战 2.1KY11 二叉树遍历&#xff08;清华大学复试上机题&#xff09;【较难】 2.2KY212 二叉树遍历二叉树遍历&#xff08;华中科技大…

印度交易所股票行情数据API接口

1. 历史日线 # Restful API https://tsanghi.com/api/fin/stock/XNSE/daily?token{token}&ticker{ticker}默认返回全部历史数据&#xff0c;也可以使用参数start_date和end_date选择特定时间段。 更新时间&#xff1a;收盘后3~4小时。 更新周期&#xff1a;每天。 请求方式…

基于SSM SpringBoot vue办公自动化计划管理系统

基于SSM SpringBoot vue办公自动化计划管理系统 系统功能 登录注册 个人中心 员工信息管理 部门信息管理 会议管理 计划管理 行程安排管理 行程进度管理 管理员管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: SSM(Spring SpringMVC Mybaits)或SpringBoot 前端…

数字万用表 (Digital Multimeter)

数字万用表 [Digital Multimeter] 1. Product parameters2. 交流频率测量3. 面板介绍4. 背光屏References 1. Product parameters 2. 交流频率测量 在交流 750V 档处按 HOLD 键切换到市电频率 3. 面板介绍 4. 背光屏 ​ References [1] Yongqiang Cheng, https://yongqiang…