【网络协议详解】——IPv6协议(学习笔记)

news2024/9/29 13:26:25

📖 前言:IPv6 协议是未来互联网的发展方向,它的推出为网络通信和互联带来了更大的便利性和更广阔的发展空间。相比于 IPv4,IPv6 支持更多的地址空间、更高效的路由和唯一的全球性地址等特点,可以更好地满足未来数字化时代的网络需求。本文将介绍 IPv6 的定义、结构、首部、ICMP等方面的内容。

在这里插入图片描述


目录

  • 🕒 1. IPV6协议
    • 🕘 1.1 主要变化
    • 🕘 1.2 IPv6地址
      • 🕤 1.2.1 表示方法
      • 🕤 1.2.2 分类
    • 🕘 1.3 IPv6数据报的首部
      • 🕤 1.3.1 基本首部
      • 🕤 1.3.2 扩展首部
        • 🕞 1.3.2.1 逐跳选项
        • 🕞 1.3.2.2 路由扩展选项
        • 🕞 1.3.2.3 分片扩展选项
    • 🕘 1.4 从IPv4向IPv6过渡
      • 🕤 1.4.1 使用双协议栈
      • 🕤 1.4.2 使用隧道技术
  • 🕒 2. ICMPv6协议
    • 🕘 2.1 概述
    • 🕘 2.2 封装
    • 🕘 2.3 分类
    • 🕘 2.4 格式
      • 🕤 2.4.1 差错报文(类型:0-127)
        • 🕞 2.4.1.1 目的不可达
        • 🕞 2.4.1.2 分组超大消息
        • 🕞 2.4.1.3 超时
        • 🕞 2.4.1.4 参数错误
      • 🕤 2.4.2 信息报文(类型:128-255)
        • 🕞 2.4.2.1 回送请求/响应
      • 🕤 2.4.3 不发送ICMPv6消息的情况

🕒 1. IPV6协议

🕘 1.1 主要变化

  • 更大的地址空间:IPv6将IPv4的32比特地址空间增大到了128比特,在采用合理编址方法的情况下,在可预见的未来是不会用完的。
  • 扩展的地址层次结构:可划分为更多的层次,这样可以更好地反映出因特网的拓扑结构,使得对寻址和路由层次的设计更具有灵活性
  • 灵活的首部格式:与IPv4首部并不兼容。IPv6定义了许多可选的的扩展首部,不仅可提供比IPv4更多的功能,而且还可以提高路由器的处理效率,因为路由器对逐跳扩展首部外的其他扩展首部都不进行处理。
  • 改进的选项:IPv6允许分组包含有选项的控制信息,因而可以包含一些新的选项。然而IPv4规定的选项却是固定不变的。
  • 允许协议继续扩充:这一点很重要,因为技术总是在不断地发展,而新的应用也会层出不穷。然而IPv4的功能却是固定不变的。
  • 支持即插即用(即自动配置):IPv6支持主机或路由器自动配置IPv6地址及其他网络配置参数。因此IPv6不需要使用DHCP
  • 支持资源的预分配:IPv6能为实时音视频等要求保证一定带宽和时延的应用,提供更好的服务质量保证
  • 最小的MTU变为1280字节

🕘 1.2 IPv6地址

IPv6 将实现 IPv6 的主机和路由器均称为结点

一个结点就可能有多个与链路相连的接口

  • IPv6 地址是分配给结点上面的接口的。
  • 每个IPv6接口都必须有至少一个本地链路单播地址,一个接口可以分配多个任意类型的地址。

🕤 1.2.1 表示方法

IPv6 地址是一个 128 位的二进制数。

在这里插入图片描述

  • 在IPv6地址的冒号十六进制记法的基础上,再使用**“左侧零”省略和“连续零”压缩**,可使IPv6地址的表示更加简洁
    • “左侧零”省略是指两个冒号间的十六进制数中最前面的一串0可以省略不写
    • “连续零”压缩是指一连串连续的0可以用一对冒号取代
      在这里插入图片描述
  • 在一个IPv6地址中只能使用一次“连续零”压缩,否则会导致歧义。
    • 例: 2001:0000:0000:abcd:0000:0000:0000:1234 → 2001:0:0:abcd::1234 \text{2001:0000:0000:abcd:0000:0000:0000:1234} → \text{2001:0:0:abcd::1234} 2001:0000:0000:abcd:0000:0000:0000:12342001:0:0:abcd::1234
  • 冒号十六进制记法还可结合点分十进制的后缀。这在IPv4向IPv6过渡阶段非常有用。
    在这里插入图片描述
  • CIDR的斜线表示法在IPv6中仍然可用。
    • 例: 2001:0db8:0000:cd30:0000:0000:0000:0000/60 → 2001:db8:0:cd30::/60 \text{2001:0db8:0000:cd30:0000:0000:0000:0000/60} → \text{2001:db8:0:cd30::/60} 2001:0db8:0000:cd30:0000:0000:0000:0000/602001:db8:0:cd30::/60

🕤 1.2.2 分类

IPv6数据报的目的地址有三种基本类型:

  • 单播地址 (unicast address):传统的点对点通信。
  • 多播地址 (multicast address):一点对多点的通信。数据报发送到一组计算机中的每一个。IPv6没有采用广播的术语,而将广播看作多播的一个特例
  • 任播地址 (anycast address):这是 IPv6 增加的一种类型。任播的目的站是一组计算机,但数据报在交付时只交付离发送方最近(由路由协议度量)的一个计算机

[RFC 4291]对IPv6地址进行了分类:

  • 未指明地址
    • 128个比特为“全0”的地址,可缩写为两个冒号“::/128”。
    • 该地址不能用作目的地址,只能用于还没有配置到一个标准IPv6地址的主机用作源地址。
    • 未指明地址仅有一个
  • 环回地址
    • 最低比特为1,其余127个比特为“全0”,即0:0:0:0:0:0:0:1,可缩写为::1/128
    • 该地址的作用与IPv4的环回地址相同
    • IPv6的环回地址只有一个
  • 多播地址(组播地址)
    • 最高8比特为“全1”的地址,可记为FF00::/8
      在这里插入图片描述

      • 标志位字段:最高位保留,设为0T位为1表示是熟知组播地址T位为0表示是临时组播地址P标志表示组播地址的生成方式;R标志用于构成组播RP地址
      • 范围:用来限制组播组的范围。
        1 接口本地范围 2 链路本地范围 4 管理本地范围 5 站点本地范围 8 机构本地范围 E 全球范围 0 、 3 、 F 保留 6 、 7 、 9 、 A 、 B 、 C 、 D 未分配 \begin{array}{|c|c|} \hline 1 & 接口本地范围 \\ \hline 2 & 链路本地范围 \\ \hline 4 & 管理本地范围 \\ \hline 5 & 站点本地范围 \\ \hline 8 & 机构本地范围 \\ \hline E & 全球范围 \\ \hline 0、3、F & 保留 \\ \hline 6、7、9、A、B、C、D & 未分配 \\ \hline \end{array} 12458E03F679ABCD接口本地范围链路本地范围管理本地范围站点本地范围机构本地范围全球范围保留未分配
      • 组标识符:指定范围内的组播标识符,分为永久分配临时分配两种。
    • IPv6多播地址的功能与IPv4多播地址相同

    • 这类地址占IPv6地址空间的1/256

  • 本地链路单播地址
    • 最高10比特为1111111010的地址,可记为FE80::/10
      在这里插入图片描述
    • 即使用户网络没有连接到因特网,但仍然可以使用TCP/IP协议。连接在这种网络上的主机都可以使用本地链路单播地址进行通信,但不能和因特网上的其他主机通信。
    • 这类地址占IPv6地址空间的1/1024
  • 全球单播地址
    • 全球单播地址是使用得最多的一类地址。
    • IPv6全球单播地址采用三级结构,这是为了使路由器可以更快地查找路由。
      在这里插入图片描述
      • 全球路由选择前缀:分配给公司和机构,用于因特网中路由器的路由选择,相当于IPv4分类地址中的网络号
      • 子网标识符:用于各公司和机构构建自己的子网。
      • 接口标识符:用于指明主机或路由器的单个网络接口,相当于IPv4分类地址中的主机号不需要使用ARP
    • IPv4地址也可以表示为全局IPv6地址:
      在这里插入图片描述

子网路由任播地址:

  • 一个任播地址可以被分配给一组接口,且通常这组接口属于不同节点
  • 发往一个任播地址的分组会被路由协议转发给离发送方最近的接口
  • 任播接口的地址结构无法与单播地址相区分,包含在单播地址空间(包括本地链路单播地址和全球单播地址)中。
  • 当一个单播地址分配给多个接口时,它就是一个任播地址
  • 被分配了任播地址的一组主机往往分散在不同网络中,这些网络的最长共同前缀构成一个拓扑区域。
    在这里插入图片描述

🕘 1.3 IPv6数据报的首部

🕤 1.3.1 基本首部

在这里插入图片描述
注意:所有的扩展首部并不属于IPv6数据报的首部,它们与其后面的数据部分合起来构成有效载荷(payload,也称为净负荷)。

IPv4 vs IPv6:
在这里插入图片描述
IPv6将IPv4数据报首部中不必要的功能取消了,这使得IPv6数据报基本首部中的字段数量减少到只有8个

但由于IPv6地址的长度扩展到了128比特,因此使得IPv6数据报基本首部的长度反而增大到了40字节,比IPv4数据报首部固定部分的长度(20字节)增大了20字节

  • 取消了首部长度字段,因为IPv6数据报的首部长度是固定的40字节。
  • 取消了区分服务(服务类型)字段,因为IPv6数据报首部中的通信量类和流标号字段实现了区分服务字段的功能。
  • 取消了总长度字段,改用有效载荷长度字段。这是因为IPv6数据报的首部长度是固定的40字节,只有其后面的有效载荷长度是可变的。
  • 取消了标识、标志和片偏移字段,因为这些功能已包含在IPv6数据报的分片扩展首部中。
  • 把生存时间TTL字段改称为跳数限制字段,这样名称与作用更加一致。
  • 取消了协议字段,改用下一个首部字段。
  • 取消了首部检验和字段,这样可以加快路由器处理IPv6数据报的速度。
  • 取消了选项字段,改用扩展首部来实现选项功能。

在这里插入图片描述

  • 版本字段:长度为4比特,用来表示IP协议的版本。对于IPv6该字段的值是6
  • 通信量类字段(traffic class):长度为8比特,该字段用来区分不同的IPv6数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。
  • 流标号字段(flow label):长度为20比特。
    • IPv6提出了的抽象概念。
    • “流”就是因特网上从特定源点到特定终点(单播或多播)的一系列IPv6数据报(如实时音视频数据的传送),而在这个“流”所经过的路径上的所有路由器都保证指明的服务质量。
    • 所有属于同一个流的IPv6数据报都具有同样的流标号。换句话说,流标号用于资源分配
    • 流标号对于实时音视频数据的传送特别有用,但对于传统的非实时数据,流标号则没有用处,把流标号字段的值置为0即可。
  • 有效载荷长度字段(playload length):长度为16比特,它指明IPv6数据报基本首部后面的有效载荷(包括扩展首部和数据部分)的字节数量
    • 该字段以字节为单位,最大取值为65535,因此IPv6数据报基本首部后面的有效载荷的最大长度为65535字节。
  • 下一个首部字段:长度为8比特。该字段相当于IPv4数据报首部中的协议字段或可选字段
    • 当IPv6数据报没有扩展首部时,该字段的作用与IPv4的协议字段一样,它的值指出了IPv6数据报基本首部后面的数据是何种协议数据单元PDU。
      • 若为6,则有效载荷部分是TCP报文段;若为17,则有效载荷部分是UDP用户数据报。
    • 当IPv6数据报基本首部后面带有扩展首部时,该字段的值就标识后面第一个扩展首部的类型。
      在这里插入图片描述
  • 跳数限制字段:长度为8比特。该字段用来防止IPv6数据报在因特网中永久兜圈
    • 源点在每个IPv6数据报发出时即设定某个跳数限制(最大255跳)。
    • 每个路由器在转发IPv6数据报时,要先把跳数限制字段中的值减1。当跳数限制的值为0时,就把这个IPv6数据报丢弃(即不转发)。
      • 该字段的作用与IPv4数据报首部中的生存时间TTL字段完全一样。IPv6将名称改为跳数限制后,可使名称与作用更加一致。
  • 源地址字段和目的地址字段:长度都为128比特。分别用来填写IPv6数据报的发送端的IPv6地址和接收端的IPv6地址。

🕤 1.3.2 扩展首部

IPv4数据报如果在其首部中使用了选项字段,则在数据报的整个传送路径中的全部路由器,都要对选项字段进行检查,这就降低了路由器处理数据报的速度

实际上,在路径中的路由器对很多选项是不需要检查的。因此,为了提高路由器对数据包的处理效率,IPv6把原来IPv4首部中的选项字段都放在了扩展首部中,由路径两端的源点和终点的主机来处理,而数据报传送路径中的所有路由器都不处理这些扩展首部除逐跳选项扩展首部)。

在[RFC 2460]中定义了以下六种扩展首部

扩展首部类型扩展首部协议号
逐跳选项(Hop-by-Hop Options)0
路由选择(Routing)43
分片(Fragment)44
目的选项(Destination Options)60
认证(Authentication)51
封装安全有效载荷(Encapsulating Security Payload)50
无下一扩展首部59
  • 每一个扩展首部都由若干个字段组成,它们的长度也各不相同。
  • 所有扩展首部中的第一个字段都是8比特的下一个首部字段。该字段的值指出在该扩展首部后面是何种扩展首部。
  • 当使用多个扩展首部时,应按以上的先后顺序出现
  • 扩展首部的长度应是8字节的整数倍,以此保证后续首部能在8字节边界处对齐。
  • 逐跳选项扩展首部和目的选项扩展首部的选项字段长度可变,可包含多个选项数据。这些选项数据以TLV方式(Type-Length-Value)编码.
    • 选项类型字段8
      • 其中高位指明了不能识别选项类型时应采用的处理方式(00:跳过;01:丢弃;10:丢弃且报告)
      • 3高位指明该选项数据在传输过程中是否发生变化
      • 5位是类型代码
    • 选项数据长度:选项数据字段的长度,以字节为单位
    • 选项数据:与选项类型有关

🕞 1.3.2.1 逐跳选项

  • 逐跳选项用于在分组中携带需要被传输路径上所有节点处理的信息
  • 它必须是第一个扩展首部
  • 下一首部字段(8位):指明紧跟在逐跳选项扩展首部后的下一个首部类型
  • 扩展首部长度字段(8位) :以8字节位单位,不包含第一个8字节
  • 选项数据字段:包含多个以TLV方式编码的选项
    在这里插入图片描述

🕞 1.3.2.2 路由扩展选项

  • 用于列出分组传输过程中需要访问的节点地址
  • 路由类型(8位):进一步区分路由扩展首部的类型,两种,0/2
  • 剩余段数(8位):指明路由地址列表尚未被访问的地址数
  • 指定路由类型数据:依赖于具体的路由类型
    在这里插入图片描述

🕞 1.3.2.3 分片扩展选项

  • 路由器发现分组长度大于要转发网络的最大传输分组时,丢弃分组并向源主机发送ICMP分组超大信息,由源主机对IP分组进行分片
  • 保留(8位):置为0
  • 片偏移(13位):指明数据第一个字节对于原始未分片分组数据的偏移值,8字节为单位
  • 保留(2位):置为0
  • M标志字段(1位):1表示有更多分片,0表示是最后一个分片
  • 标识符:每个未分片分组的唯一标识符,用于重组时区分分片属于的分组

在这里插入图片描述

🕘 1.4 从IPv4向IPv6过渡

因特网上使用IPv4的路由器的数量太大,要让所有路由器都改用IPv6并不能一蹴而就。因此,从IPv4转变到IPv6只能采用逐步演进的办法

另外,新部署的IPv6系统必须能够向后兼容,也就是IPv6系统必须能够接收和转发IPv4数据报,并且能够为IPv4数据报选择路由。

下面介绍两种由IPv4向IPv6过渡的策略:

🕤 1.4.1 使用双协议栈

  • 双协议栈(Dual Stack)是指在完全过渡到IPv6之前,使一部分主机或路由器装有IPv4和IPv6两套协议栈
  • 双协议栈主机或路由器既可以和IPv6系统通信,又可以和IPv4系统通信
  • 双协议栈主机或路由器记为IPv6/IPv4,表明它具有一个IPv6地址和一个IPv4地址
    • 双协议栈主机在与IPv6主机通信时采用IPv6地址,而与IPv4主机通信时采用IPv4地址。
    • 双协议栈主机在与IPv6主机通信时采用IPv6地址,而与IPv4主机通信时采用IPv4地址。
      • 若DNS返回的是IPv4地址,则双协议栈的源主机就使用IPv4地址;
      • 若DNS返回的是IPv6地址,则双协议栈的源主机就使用IPv6地址。

在这里插入图片描述

🕤 1.4.2 使用隧道技术

隧道技术(Tunneling)的核心思想是:

  • 当IPv6数据报要进入IPv4网络时,将IPv6数据报重新封装成IPv4数据报,即整个IPv6数据报成为IPv4数据报的数据载荷。
  • 封装有IPv6数据报的IPv4数据报在IPv4网络中传输。
  • 当IPv4数据报要离开IPv4网络时,再将其数据载荷(即原来的IPv6数据报)取出并转发到IPv6网络。

在这里插入图片描述

注:要使双协议栈路由器R4知道IPv4数据报的数据载荷是IPv6数据报,则IPv4数据报首部中协议字段的值必须设置为41

🕒 2. ICMPv6协议

🕘 2.1 概述

由于IPv6与IPv4一样,都不确保数据报的可靠交付,因此IPv6也需要使用网际控制报文协议ICMP来向发送IPv6数据报的源主机反馈一些差错信息,相应的ICMP版本为ICMPv6

ICMPv6比ICMPv4要复杂得多,它合并了原来的地址解析协议ARP和网际组管理协议IGMP的功能。因此与IPv6配套使用的网际层协议就只有ICMPv6这一个协议。

🕘 2.2 封装

ICMPv6报文需要封装成IPv6数据报进行发送:
在这里插入图片描述

🕘 2.3 分类

ICMPv6报文可被用来报告差错、获取信息、探测邻站或管理多播通信。

在对ICMPv6报文进行分类时,不同的RFC文档使用了不同的策略:

  • 在[RFC 2463]中定义了六种类型的ICMPv6报文
  • 在[RFC 2461]中定义了五种类型的ICMPv6报文
  • 在[RFC 2710]中定义了三种类型的ICMPv6报文

常用的几种ICMPv6报文:

ICMP报文种类 类型的值 ICMP报文的类型
差错报告报文1目的站不可达
2分组太长
3时间超过
4参数问题
回送请求与回答报文128回送请求
129回送回答
多播听众(MLD)发现报文
(替代原来的IGMP协议)
130多播听众查询
131多播听众报告
132多播听众完成
邻站(ND)发现报文
(替代原来的ARP协议)
133路由器询问
134路由器通告
135邻站询问
136邻站通告
137改变路由

🕘 2.4 格式

在这里插入图片描述

ICMPv6的消息格式与ICMPv4类似,

  • 类型:区分不同的ICMP消息类别
  • 代码:用于进一步区分同一消息类别下的不同情形
  • 校验和:用于从类型字段开始的ICMP报文进行检验

ICMP 报文分为两种:

🕤 2.4.1 差错报文(类型:0-127)

🕞 2.4.1.1 目的不可达

当路由器无法继续转发分组,或目的主机无法将分组交付给承载数据的处理协议时,将向源端发送目的不可达报文(destination unreachable message)。类型字段为1
在这里插入图片描述

代码(Code)含义例子
0无法去往目的地址的路由源主机路由表中无默认路由表项
1与目的地址的通信被管理性禁止防火墙过滤
2超出原地址的范围分组源地址是链路本地地址,而目的地址是全球地址
3地址不可达无法解析IP地址对应的链路;链路问题;目的站点不在线
4端口不可达目的端口未打开
5源地址不在目的站点的入站/出站策略范围
6拒绝路由到目的地址路由器被配置为拒绝为特定的地址块服务

🕞 2.4.1.2 分组超大消息

当路由器转发的分组长度大于链路MTU时,路由器将向源主机发送分组超大消息。

  • 类型:2
  • 代码:0
  • MTU:下一跳链路最大传输单元字节数。

在这里插入图片描述

🕞 2.4.1.3 超时

超时报文(time exceeded message)用于向源端报告分组无法按期到达目的主机,包括:

  • 路由器转发分组时对其 TTL 字段值减 1,结果为 0(代码为0):
    • 丢弃分组,并向源主机发送 ICMP 超时报文。
  • 目的主机重组分片超时(60s)(代码为1):
    • 放弃重组,并向源主机发送 ICMP 超时报文。
    • 只有在接收到第一个分片的情况下才发送超时报文.

超时报文的格式:与目的不可达报文相同。类型为3,代码为0或1.
在这里插入图片描述

🕞 2.4.1.4 参数错误

路由器或主机处理 IP 分组时,若发现首部或者扩展首部参数错误而无法继续处理,将丢弃分组,并向源主机发送参数错误报文(parameter problem message)。

  • 类型:4
  • 指针:指向源IP分组中的错误参数位置

在这里插入图片描述

代码(Code)含义
0错误的首部字段
1不能识别的扩展首部类型
2不能识别的IPv6选项

🕤 2.4.2 信息报文(类型:128-255)

🕞 2.4.2.1 回送请求/响应

回送请求/回送响应报文(Echo request/Echo reply message)常用于测试目的地址是否可达及其相关状态。

  • 类型:128/129
  • 代码:0

在这里插入图片描述

🕤 2.4.3 不发送ICMPv6消息的情况

  • ICMPv6分组错误
  • ICMPv6重定向消息
  • 目的地址是组播地址、链路组播地址、链路多播地址等的分组(两个例外:超大错误消息;参数错误消息)

OK,以上就是本期知识点“IPv6”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

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

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

相关文章

Mac电脑 Vscode : Flutter 开发环境搭建(最细节教程)

参考链接: MacVSCode安装flutter环境_mac vscode配置flutter_GalenWu的博客-CSDN博客 mac搭建Flutter环境以及初始化项目 - 简书 注意: *下载xcode 就包含git了, *苹果芯片和intel 芯片需要的环境不同,苹果芯片需要安装: Im…

攻防世界web新手区部分题解

前言:博主是个安全小白,正在努力学习中,会随着学习进度不定期更新完善本篇博客。 这里是目录 1.robots2.view_source3.backup4.disabled_button5.get_post6.cookie7.ics-068.PHP2 1.robots 题目描述: X老师上课讲了Robots协议,小宁…

SpringBoot+Redis完成数据缓存(内容丰富度一定超出你的想象)

SpringBootRedis完成数据缓存 去年今日此门中 人面桃花相映红 人面不知何处去 桃花依旧笑春风 感谢相遇!感谢自己,努力的样子很给力! 为了更多朋友看见,还是和大家说一声抱歉,限制为粉丝可见!有问题可以随时…

基于SSM+JSP的大学生社团管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

数字信号处理基础(二):FFT和IFFT的使用以及详细分析代码书写思路

目录 1. fft和ifft的原理1.1 fft1.2 ifft 2. 书写代码思路3. 完整代码4. 结果图 1. fft和ifft的原理 1.1 fft fft是快速傅里叶变换,是MATLAB中计算信号频谱的函数,使用方法是fft(x),直接对信号x进行fft计算。 由于fft函数计算信号的频谱是0…

国考省考行测:资料分析,两年复合增长率

国考省考行测:资料分析,两年复合增长率 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧,我讲一起屡屡…

考研算法第十三天:二叉排序树 【二叉排序树的插入和遍历】

这道题很妙。题目给的二叉排序树好像没学过其实就是二叉查找树。然后这道题主要的就是思路 1.节点的初始化(记住) struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; 2.节点的插入 …

HTTPS 的加密流程

文章目录 前言一.HTTPS 是什么二."加密" 是什么四.HTTPS解决了哪些问题五.HTTPS 的工作过程对称加密非对称加密引入证书 前言 本文介绍了HTTPS的加密流程,以及HTTPS在保护用户数据安全和确保通信机密性方面的重要性。通过详细解释HTTPS的工作原理和加密流…

网络安全里的主要岗位有哪些?小白如何快速入门?

入门Web安全、安卓安全、二进制安全、工控安全还是智能硬件安全等等,每个不同的领域要掌握的技能也不同。 当然入门Web安全相对难度较低,也是很多人的首选。主要还是看自己的兴趣方向吧。 本文就以下几个问题来说明网络安全大致学习过程👇 网…

ChatGPT:世界已经永远改变了,而大多数人尚无所觉

1、你发现没有,现在跟朋友交流,言必聊ChatGPT。几乎所有人都在蹭GPT的热度,无论是头部企业还是普通的个人开发者,都想趁着ChatGPT东风狂赚一笔。有卖ChatGPT账号的、有借用ChatGPT的API集成服务让人付费试用的,还有人利…

Android第一代加壳技术的验证、测试和探究

Android第一代加壳测试,网上有很多文章,本文只是在前人基础上测试和验证。因此,本文的重点在于动手和实践。 第一代加壳技术有三个项目,分别是: 加壳程序。主要是把需要加壳的原程序加密后,放在壳程序中&…

全能超高清解码播放器_完美解码

哈喽,大家好。今天给各位小伙伴们测试了一款全能超高清解码播放器——完美解码。 这是一款为众多影视发烧友精心打造的专业高清播放器。超强HDTV支持,画质远超主流播放器!全面开启硬件加速,CPU资源占用低,强劲高清解码…

Matplotlib绘制漂亮的饼状图|python绘制漂亮的饼状图

python绘图系列文章目录 往期python绘图合集: python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 python绘制柱状图并美化|不同颜色填充柱子 python随机…

LeetCode刷题 --- 栈

栈(stack)是一种用于存储数据的简单数据结构。栈一个有序线性表,只能在表的一端(PS:栈顶)执行插人和删除操作。最后插人的元素将被第一个删除。所以,栈也称为后进先出(Last In First…

AI在狂飙,ChatGPT-4可直接在iPhone上使用啦

今天凌晨,OpenAI 正式在 App Store 推出了 ChatGPT 的 iOS app,瞬间冲上苹果商店免费榜第二名,效率榜第一名。 于是兴致勃勃的去下载体验了一番。整体不错,以后手机使用官方的 ChatGPT 更方便啦!而且使用 GPT4 不再麻…

JavaScript事件流

一、事件流和它的两个阶段 1.事件流:是事件完整执行过程中的流动路径 2.说明:假设页面里有个div,当触发事件时,会经历两个阶段,分别是捕获阶段、冒泡阶段 (1)捕获:从父到子 &#…

测试工程师都是怎么写测试用例的?​

很多人不知道写测试用例有什么用,而仅仅是像工具人一样,在每次提测之前,把测试用例照着需求文档抄一遍,仿佛像是走个过场。 开发提测之后,就照着测试用例点点点,可能一天就走完用例了,开发代码…

最优化理论-线性规划中的大M法的步骤

目录: 一、引言 二、线性规划的基本概念 三、最优化理论中的大M法 1. 大M法的基本思想 2. 大M法的步骤 3. 大M法的优缺点 四、大M法的应用 1. 生产计划问题 2. 运输问题 3. 投资问题 五、总结 一、引言 最优化理论是数学中的一个重要分支…

【2023/05/19】NFA

Hello!大家好,我是霜淮子,2023倒计时第14天。 非确定有限状态自动机(NFA)是一种模拟复杂系统行为的数学模型 目录 一、基本概念和理论 二、优点和缺点 三、应用场景 四、问题和挑战 五、重要性、作用和使用价值 …