当前位置: 首页 > news >正文

【HarmonyOS学习日志(13)】计算机网络之TCP/IP协议族(二)

文章目录

    • TCP/IP协议族
      • ARP
      • DNS
        • 标志字段:协商具体的通信方式和反馈通信状态
        • DNS查询问题的格式
        • 资源记录(Resource Record, RR)格式:被用于应答字段、授权字段和额外信息字段
    • IP协议
      • IP服务的特点
        • 无状态
        • 无连接
        • 不可靠
      • IP头部结构
        • IPv4头部结构
        • IPv6头部结构
        • IPv6扩展头部
      • IP分片
        • 头部信息
        • 例子:携带ICMP报文的IP数据报被分片
      • IP路由
        • IP模块工作流程
        • 路由机制
      • IP转发
      • 重定向

TCP/IP协议族

见上篇 【HarmonyOS学习日志(12)】计算机网络之TCP/IP协议族(一)-CSDN博客

ARP

实现任意网络层地址到任意物理层地址的转换。

主机向自己所在网络广播一个ARP请求,请求中包含目标机器网络地址,这个网络上的其他所有机器都会收到这个请求,但只有被请求的目标机器会应答一个ARP应答,其中包含自己的物理网址。

在这里插入图片描述

在该流程中,硬件类型定义物理地址类型,协议类型要表示要映射的协议的地址的类型,两个长度为硬件地址长度字段和协议地址长度字段。

操作则有四种:ARP的请求、ARP的应答,RARP请求和RARP的应答,分别对应的值为1234。

发送端填充除了目的端的以太网地址外的其他三个字段构建ARP请求并发送,而接收端发现该请求目的端的IP地址就是自己,所以就把自己的以太网地址填进去,然后交换这个目的端地址和两个发送端的地址,构建了ARP的应答然后返回,并且把操作的这个字段设置为2,ARP应答。

ARP维护者一个高速的缓存,包含着经常访问和最近访问的机器的IP地址到物理地址的映射。

DNS

域名服务,将机器域名转换成IP地址

DNS是一套分布式的域名服务系统。每个DNS服务器上存在大量的机器域名和IP地址的映射,并且是动态更新的

在这里插入图片描述

16位问题个数,16位应答资源记录个数,16位授权资源记录数目,16位额外资源记录数目这四个部分表示资源的记录数目。

标志字段:协商具体的通信方式和反馈通信状态

在这里插入图片描述

  • QR:查询/应答标志。查询报文(0),应答报文(1)
  • Opcode:定义查询和应答的类型。标准查询(0),反向查询(1),请求服务器状态(2)
  • AA:授权应答标志,仅由应答报文使用。授权服务器(1)
  • TC:截断标志,仅当DNS报文使用UDP服务时使用
  • RD:递归查询标志。迭代查询(0),递归查询(1)
  • RA:允许递归标志,仅由应答报文使用。DNS服务器支持递归查询(1)
  • Zero:未用,置0
  • Rcode:应答状态。无错误(0),域名不存在(3)
DNS查询问题的格式

在这里插入图片描述

32位的查询名包含16位的查询类型和16位的查询类

  • 查询名:以一定格式封装了要查询的主机域名。

  • 查询类型:表示如何执行查询操作。

    • A(1):获取目标主机的IP地址
    • CNAME(5):获得目标主机的别名。
    • PTR(12):反向查询。
  • 查询类:表示获取因特网地址(IP地址)

资源记录(Resource Record, RR)格式:被用于应答字段、授权字段和额外信息字段

在这里插入图片描述

  • 32位域名:该记录中与资源对应的名字。
  • 16位类型:含义与DNS查询问题中对应字段相同。
  • ·16位类:含义与DNS查询问题中对应字段相同。
  • 32位生存时间:该查询记录结果可被本地客户端程序缓存多长时间。

IP协议

IP服务的特点

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

无状态

IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输和接受都是相互独立、没有上下文关系的。

这种服务最大的缺点就是无法处理乱序和重复的IP数据报,比如发送端发送出的第N个IP数据报可能比第N+1个IP数据报后到达这个接收端,在这两种情况下IP模块就无法检测到乱序和重重复,因为没有任何的上下文关系。接收端的IP数据模块只要接收到了完整的数据报就会将其数据部分交给上层协议。

上层协议看来是乱序的、重复的。面向连接的协议,比如TCP协议就能够自己处理乱序、重复的报文段。

无状态的服务优点也十分明显:简单、高效。

我们无需为保证通信的状态而分配一些内核资源,也无需每次传输数据的时候携带一些状态的信息。

无连接

IP通信双方都不长久地维持对方的任何信息,每次发送数据时都必须指定对方IP地址。

不可靠

IP协议不能保证IP数据报准确地到达接收端,只是承诺尽最大努力(best effort)

IP头部结构

IP头部信息出现在每个IP数据报中,用于指定IP通信的源端IP地址、目的端IP地址,指导IP分片和重组,以及指定部分通信行为。

IPv4头部结构

在这里插入图片描述

4位的版本号指定IP协议的版本(IPv4中的4)

4位头部长度是标识IP头部有多少个32位字也就是四字节

8位服务类型(TOS)包括一个3位的优先权字段,4位的TOS字段和一个保留的字段,保留字段必须要置0。4位的TOS字段分别表示最小延迟、最大吞吐量、最高可靠性和最小费用。

16位总长度是整个IP数据报的长度,因此IP数据报最大的长度单位是65535字节。但由于MTU的限制,数据报都会被分片传输。接下来的3个字段来标识如何进行分片。

  • 16位的标识字段是标识主机发送的每个数据报,初始值由系统随机生成,每发送一个数据报,值就+1
  • 3位的标志字段的第一位保留,第二位DF表示禁止分片,如果设置了这个位的话IP的这个模块就不会对数据报进行分片,在这种情况下如果IP数据报长度超过了MTU的话将会丢弃数据报并返回一个差错报文。
  • 13位片偏移是分片相对原始IP数据报开始处的偏移,实际的偏移值是该值左移三位也就是乘8之后得到的

8位的生存时间(TTL)是指数据包到达目的地址前允许经过的路由器的跳数。常见的数值是64,没经过一个路由就会被路由器减1,到0就会丢弃并返回一个差错报文,这样可以防止陷入路由循环.

8位协议用来区分上层的协议,其中ICMP是1,TCP是6,UDP是17。

16位头部校验和由发送端填充,接收端对其使用CRC的算法以检验头部是否损坏(仅检验头部)

32位的源端IP地址和目的端IP地址用来标识发送端和接收端。

选项字段是可变长的可选信息,最多包含4字节的可选选项包括:

  • 记录路由(record route):告诉数据报途径的所有路由器都将自己的IP地址填入头部的选项部分,这样就可以跟踪传输路径。
  • 时间戳(timestamp):告诉每个路由器都将数据报被转发的时间填入选项部分,以测量传输时间。
  • 松散源路由选择(loose source routing):制定一个路由器的IP地址列表,数据报发送过程中必须严格经过所有的路由器。
  • 严格源路由选择(strict source routing):与松散源路由选择相似,不过是数据报只能经过指定的路由器
IPv6头部结构

在这里插入图片描述

4位的版本号(version)指定了协议的版本,对于IPv6来说,其值是6。

8位的通讯类型(traffic class)指示数据流通讯类型或优先级

20位的流标签(flow label)是IPv6新增加的字段,对于某些对连接服务质量有特殊要求的通信,比如音频和视频的实时传输数据。

16位的净荷长度(payload length)是指IPv6扩展头部和应用程序之间的和,不包括固定的头部长度。

8位的下一位包头(next header):指出紧跟这个固定头部的头部类型,比如扩展头部或者某个上层协议头部。

8位的跳数限制(hop limit):与TTL相同。

IPv4地址一般使用点分十进制来表示的,而这个IPv6的这个地址是用16进制来表示的

IPv6扩展头部

可变长的扩展头部使得IPv6能支持更多的选项,并且很便于将来的扩展需要。它的长度可以是0,表示数据报没有使用任何扩展头部。一个数据报可以包含多个扩展头部,每个扩展头部的类型由前一个头部(固定头部或扩展头部)中的下一个字段指定。

在这里插入图片描述

IP分片

当IP数据报的长度超过帧的MTU时,它将被分片传输。

头部信息

在这里插入图片描述

头部中有三个字段提供了足够多的信息:数据报的标识、标志和片偏移。除了最后一个分片之外,其余分片都要置MF标志。此外每个分片的IP的头部的总长度字段都将设置为该分片的长度

例子:携带ICMP报文的IP数据报被分片

在这里插入图片描述

在这个例子里面长度是1501字节的IP数据报被拆分成了两个IP分片,其中一个IP分片的长度为1500字节,第二个IP分片的长度为21字节。那么每个IP分片都包含自己的IP的头部20字节,且第一个IP分片的IP头部被设置了MF标志,而第二个则没有设置该标志,因为它是最后一个分片。

原始的IP数据报中,IP头部的内容被完整的复制到了第一个IP的分片中,而第二个IP分片不包含ICMP的头部信息,因为IP模块重组该ICMP的报文的时候只需要一份信息就足够。

ICMP的报文的头部长度取决于报文的类型,变化范围非常的大

IP路由

IP路由决定发送数据报到目标机器的路径

IP模块工作流程

在这里插入图片描述

当IP模块接收到了来自数据链路层的IP数据报的时候,它首先对该数据报的头部做CRC的校验,确认无误后再分析具体信息。如果IP数据报头部设置了源站选路选项,则调用数据报转发子模块来处理数据报。如果IP数据报的头部中的目标IP就是本机的某个IP地址或者是广播地址,则该数据报就是发送给主机的。这个IP的模块就根据数据报头部中的协议字段来确定将派发给哪一个上层的应用(分用)。

如果IP模块发现这个数据报不是发送给本机的,也是调用转发子模块来转发出去。转发子模块首先检测子系统是否允许转发,不允许就丢弃,如果允许就执行一些操作,它交给IP数据报输出子模块。

IP模块实现了数据报路由的核心的数据结构是路由表,那么这个表按照数据报的目标的IP地址进行分类,同一个类型的IP数据报将被发往相同的下一跳路由器。

IP的输出队列存放的是所有等待发送的数据报,除了需要转发的数据报之外还包括封装了本机的上层数据的IP数据报。

路由机制

那么路由表是如何按照IP地址分类的?给定数据报的目标IP地址,它将匹配路由表中的哪一项?

路由机制:

  1. 查找路由表中和数据报的目标IP地址完全匹配的主机IP地址。如果找到,就使用该路由项,没找到则转2。
  2. 查找路由表中和数据报的目标IP地址具有相同网络ID的网络IP地址。如果找到,就使用该路由项,没找到则转3。
  3. 选择默认路由项,这通常意味着数据报的下一跳是网关。

IP转发

将不是发送给本机的IP数据报交由数据包转发子模块进行转发。

对于允许IP数据报转发的文件系统(主机/路由器),数据报转发子模块将对期望转发的数据报执行以下操作:

  1. 检查数据报头部的TTL值。如果TTL为0,则丢弃该数据报。
  2. 查看数据报头部的严格源路由选择选项。如果该选项被设置,则检测数据报的目标IP地址是否是本机的某个IP地址。如果不是则返回一个ICMP源站选路失败报文。
  3. 给源端发送一个ICMP重定向报文,以告诉它一个更合适的下一跳路由器(如果有必要)
  4. 将TTL值减1
  5. 处理IP头部选项
  6. 执行IP分片操作(如果有必要)

重定向

ICMP重定向报文

ICMP重定向报文也能用于更新路由表,因此简要讨论ICMP重定向报文。

在这里插入图片描述

ICMP重定向报文的数据部分含义都十分明确,它给接收方提供了如下两个信息:

  • 引起重定向的IP数据报的源端IP地址。
  • 应该使用路由器的IP地址

接收主机根据这两个信息就可以断定引起重定向的IP数据报应该是由哪一个路由器来进行转发,并因此来更新路由表,通常是更新路由表的缓冲而不是直接更改。

相关文章:

【HarmonyOS学习日志(13)】计算机网络之TCP/IP协议族(二)

文章目录 TCP/IP协议族ARPDNS标志字段:协商具体的通信方式和反馈通信状态DNS查询问题的格式资源记录(Resource Record, RR)格式:被用于应答字段、授权字段和额外信息字段 IP协议IP服务的特点无状态无连接不可靠 IP头部结构IPv4头部…...

多系统对接的实现方案技术分析

前言 随着信息化和大数据时代的到来,数据资产变得至关重要,企业纷纷上线多种软件系统和移动端应用以适应这一变化。这些系统和应用虽然发挥了各自的优势,但也导致了信息孤岛问题。为了解决这一问题,数据中台和异构系统集成技术应…...

kv类型算子使用

对kv类型的RDD数据集进行操作。 keys """ 获取所有的key转换算子"""inputRdd sc.parallelize([(laoda, 11), (laoer, 22), (laosan, 33), (laosi, 44)]) print(inputRdd.keys().collect()) # [laoda, laoer, laosan, laosi] values "&…...

3维建模blender

官网稳定版下载:https://www.blender.org/download/lts/ windows有安装版和portable版 教程:https://www.bilibili.com/video/BV1kX4y1m7G5 1. 基础操作 场景操作 场景位移:shift鼠标中键长按场景旋转:鼠标中键长按场景缩放&…...

百问FB网络编程 - UDP编程简单示例

6.5 UDP编程简单示例 ​ UDP服务器首先进行初始化操作:调用函数socket创建一个数据报类型的套接字,函数bind将这个套接字与服务器的公认地址绑定在一起。然后调用函数recvfrom接收UDP客户机的数据报。UDP客户机首先调用函数socket创建一个数据报套接字&…...

面试题:什么是ThreadLocal,如何实现的?

强烈推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能 你是否还在为简历无人阅读而感到沮丧?是否因为寻觅不到理想的工作机会而感到焦虑不安?试试:看看…...

js后端开发之Next.js、Nuxt.js 与 Express.js

后端js之Next.js、Nuxt.js 与 Express.js 在现代 Web 开发中,JavaScript 已经成为前后端通用的编程语言,而选择合适的后端框架则是构建高效、可扩展应用程序的关键。本文将带你深入了解三个流行的 JavaScript 后端框架:Next.js、Nuxt.js 和 …...

飞牛Nas如何实现阿里云盘、百度网盘的资料迁移!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 如何使用飞牛NAS实现阿里云盘与百度网盘的数据互相迁移 📒📝 操作步骤注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 你是否有将百度网盘的文件迁移到阿里云盘,或是将阿里云盘的资料转移到百度网盘的需求?本文将给大家演示如…...

如何在小米平板5上运行 deepin 23 ?

deepin 23 加入了 ARM64 支持,这里尝试将 deepin 系统刷入平板中,平常使用中,带个笔记本电脑有时候也会嫌比较麻烦,把 Linux 系统刷入平板中既满足了使用需要,又满足了轻便的需求。为什么不使用 Termux ?虽…...

【PlantUML系列】流程图(四)

目录 目录 一、基础用法 1.1 开始和结束 1.2 操作步骤 1.3 条件判断 1.4 并行处理 1.5 循环 1.6 分区 1.7 泳道 一、基础用法 1.1 开始和结束 开始一般使用start关键字;结束一般使用stop/end关键字。基础用法包括: start ... stopstart ...…...

操作系统:进程、线程与作业

背景介绍: 因为单道程序处理器效率低 、设备利用率低 、内存利用率低的问题人们提出了多道程序设计来解决这个问题。 多道程序致力于提高处理机、设备、内存等各种资源的利用率,从而提高系统效率,也就是吞吐量,吞吐量定义为单位时…...

先验地图--slam学习笔记

先验信息 (Prior Information) 先验信息指的是在收集新数据之前已有的知识或假设。这种信息可以来自之前的实验、历史数据、理论模型或专家意见。 地图信息:在无人驾驶中,车辆通常会预先加载高精度地图数据,这些地图数据提供了道路布局、车…...

空指针异常:软件开发中的隐形陷阱

在软件开发的世界里,bug如同隐藏在代码森林中的小怪兽,不时跳出来给开发者们制造惊喜(或惊吓)。其中,空指针异常(Null Pointer Exception, NPE)无疑是最令人头疼的一类。它悄无声息,…...

【Java从入门到放弃 之 GC】

垃圾回收 垃圾回收什么是垃圾引用计数法可达性分析算法 垃圾回收算法标记清除法标记复制法标记整理法分代 常用的垃圾回收器 垃圾回收 如果你学过C,你肯定知道,我们没申请一块内存,都要自己写回收内存的方法。而Java不需要我们管理内存&…...

【C++】等差数列末项计算题解析及优化

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述与输入输出要求💯数学分析与公式推导公差的计算通项公式推导 💯示例解析解题步骤 💯程序实现与解析初版代码代码解析优点与不足…...

vue中父组件接收子组件的多个参数的方法:$emit或事件总线

方法一&#xff1a;使用 $emit 方法 原理 子组件通过 $emit 方法向父组件发送事件&#xff0c;同时可以传递多个参数&#xff0c;父组件通过事件监听来接收这些参数。 示例 子组件代码 <template><div><button click"sendData">发送数据</…...

2024.12.10——攻防世界Web_php_include

知识点&#xff1a;代码审计 文件包含 伪协议 伪协议知识点补充&#xff1a; 在PHP中&#xff0c;伪协议&#xff08;Pseudo Protocols&#xff09;也被称为流包装器&#xff0c;这些伪协议以 php://开头&#xff0c;后面跟着一些参数&#xff0c;用于指定要执行的操作或需要…...

【机器学习算法】——数据可视化

1. 饼图&#xff1a;显示基本比例关系 import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False# ——————————————————————————————————————————————————————…...

如何在 Android 项目中实现跨库传值

背景介绍 在一个复杂的 Android 项目中&#xff0c;我们通常会有多个库&#xff08;lib&#xff09;&#xff0c;而主应用程序&#xff08;app&#xff09;依赖所有这些库。目前遇到的问题是&#xff0c;在这些库中&#xff0c;libAd 需要获取 libVip 的 VIP 等级状态&#xf…...

JavaCV之FFmpegFrameFilter视频转灰度

1、代码 package com.example.demo.ffpemg;import lombok.SneakyThrows; import org.bytedeco.javacv.*;public class FFmpegFrameFilterVideoExample {SneakyThrowspublic static void main(String[] args) {// 输入视频文件路径String inputVideoPath "f:/2222.mp4&qu…...

Redis:基于PubSub(发布/订阅)、Stream流实现消息队列

Redis - PubSub、Stream流 文章目录 Redis - PubSub、Stream流1.基于List的消息队列2.基于PubSub的消息队列3.基于Stream的消息队列1.Redis Streams简介2.Redis Streams基本命令1.XADD 添加消息到末尾2.XLEN 获取消息长度3.XREAD 读取消息 &#xff08;单消费模式&#xff09;4…...

C#飞行棋(新手简洁版)

我们要在主函数的顶部写一些全局静态字段 确保能在后续的静态方法中能够获取到这些值和修改 static int[] Maps new int[100];static string[] PlayerName new string[2];static int[] PlayerScore new int[2];static bool[] Flags new bool[2] {true,true }; static int[]…...

【OpenCV】图像转换

理论 傅立叶变换用于分析各种滤波器的频率特性。对于图像&#xff0c;使用 2D离散傅里叶变换&#xff08;DFT&#xff09; 查找频域。快速算法称为 快速傅立叶变换&#xff08;FFT&#xff09; 用于计算DFT。 Numpy中的傅立叶变换 首先&#xff0c;我们将看到如何使用Numpy查…...

力扣 重排链表-143

重排链表-143 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next)…...

【Kubernetes理论篇】容器集群管理系统Kubernetes(K8S)

Kubernetes集群部署基本管理实战 这么好的机会&#xff0c;还在等什么&#xff01; 01、Kubernetes 概述 K8S是什么 K8S 的全称为 Kubernetes (K12345678S)&#xff0c;PS&#xff1a;“嘛&#xff0c;写全称也太累了吧&#xff0c;写”。不如整个缩写 K8s 作为缩写的结果…...

Kubernetes 常用操作大全:全面掌握 K8s 基础与进阶命令

Kubernetes&#xff08;简称 K8s&#xff09;作为一种开源的容器编排工具&#xff0c;已经成为现代分布式系统中的标准。它的强大之处在于能够自动化应用程序的部署、扩展和管理。在使用 Kubernetes 的过程中&#xff0c;熟悉常用操作对于高效地管理集群资源至关重要。本文将详…...

爬虫基础之Web网页基础

网页的组成 网页可以分为三大部分–HTML、CSS 和 JavaScript。如果把网页比作一个人&#xff0c;那么 HTML 相当于骨架、JavaScript 相当于肌肉、CSS 相当于皮肤&#xff0c;这三者结合起来才能形成一个完善的网页。下面我们分别介绍一下这三部分的功能。 HTML HTML(Hypertext…...

k8s, deployment

控制循环&#xff08;control loop&#xff09; for {实际状态 : 获取集群中对象X的实际状态&#xff08;Actual State&#xff09;期望状态 : 获取集群中对象X的期望状态&#xff08;Desired State&#xff09;if 实际状态 期望状态{什么都不做} else {执行编排动作&#xf…...

使用ensp搭建OSPF+BGP和静态路由,底层PC使用dhcp,实现PC互通

1.4种方式&#xff0c;实现PC2可以互通底层的所有设备 OSPF&#xff1a;OSPF是一种用于互联网协议网络的链路状态路由协议 BGP&#xff1a;是一种用于互联网上进行路由和可达性信息传递的外部网关协议&#xff08;EGP&#xff09; 静态路由&#xff1a; 静态路由是一种路由方…...

TÜLU 3: Pushing Frontiers in Open Language Model Post-Training

基本信息 &#x1f4dd; 原文链接: https://arxiv.org/abs/2411.15124&#x1f465; 作者: Nathan Lambert, Jacob Morrison, Valentina Pyatkin, Shengyi Huang, Hamish Ivison, Faeze Brahman, Lester James V. Miranda, Alisa Liu, Nouha Dziri, Shane Lyu, Yuling Gu, Sau…...

西宁网站制作费用是多少钱/黄山seo公司

记录学习&#xff0c;不进行正文展示 目录 1、pom.xml 2、拦截器 3、RestController 5、SpringBoot启动类 6、application.properties 7、测试 1、pom.xml <!--springBoot工程--><groupId>com.qinluyu</groupId><artifactId>SpringBoot01</a…...

网站logo在哪里/seo超级外链

GridFS的原理是将大文件分割为多个比较大的块&#xff0c;将每个块作为独立的文档进行存储。&#xff08;1&#xff09;GridFS中的块会被存贮到专用的集合中&#xff0c;默认为fs.chunks;&#xff08;2&#xff09;除了将文件的每一个块单独存储外&#xff0c;还需要将每个文件…...

c 做网站流程/盐酸达泊西汀片是治疗什么的药物

摘要这个POC用于在不知道明文密码的情况下对启用了密码安全认证插件(默认开启插件&#xff1a;mysql_native_password)的MYSQL数据库进行登录。前提条件为&#xff1a;1.为了获取到已知用户的hash&#xff0c;我们需要读取到目标数据库中的mysql.user表。2.能够拦截到上述已知用…...

不懂代码做网站/深圳防疫措施优化

在 版本回填退里&#xff0c;你已经知道&#xff0c;每次提交&#xff0c;Git都把它们串成一条时间线&#xff0c;这条时间线就是一个分支。截止到目前&#xff0c;只有一条时间线&#xff0c;在Git里&#xff0c;这个分支叫主 分支&#xff0c;即master分支。HEAD严格来说不是…...

wordpress 登录页面变了/营销网页

Linux中如果直接使用物理磁盘的分区为作为文件系统&#xff0c;那么一旦磁盘空间满了&#xff0c;就不易扩容&#xff0c;而使用逻辑卷的话&#xff0c;可以先往逻辑卷所在卷组(VG, Volumn Group)增加物理卷(PV, Physical Volumn)&#xff0c;增加之后&#xff0c;再对逻辑卷括…...

双流县规划建设局网站/南宁网站推广大全

本文已收录于专栏 🌳《画解数据结构》🌳 零、前言 目前本专栏正在进行优惠活动,在博主主页添加博主好友(好友位没有满的话),可以获取 付费专栏优惠券。 「 数据结构 」 和 「 算法 」 是密不可分的,两者往往是「 相辅相成 」的存在,所以,在学习 「 数据结构 」 的过…...