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

【Linux】传输层协议UDP

目录

再谈端口号

端口号范围划分

UDP协议

UDP协议端格式

UDP的特点

UDP的缓冲区

UDP注意事项

进一步深刻理解


再谈端口号

在上图中,有两个客户端A和B,客户端A打开了两个浏览器,这两个客户端都访问同一个服务器,都访问服务器的80端口,由于A和B的IP地址是不一样的,服务器在返回应答时就能根据双方的IP地址区分这两台不同的主机。同一台主机上两个不同的请求对应的端口号不一样,服务器在应答时就可以准确把应答推送给特定端口号。在未来通过TCP/UDP通信时,TCP/UDP报文里会包含端口信息,IP报文里会包含源IP目标IP,构成了四元组,构成套接字通信。在客户端发起请求时,要把服务器的IP和端口以及自己的IP和端口写进来,构成上图的报文,推送给服务器端,这就是服务器端为什么能收到你发来的数据也同时能知道你客户端的源IP和源端口号,也就知道这个消息是谁发的。这样的四元组一定出现在底层的网络报文中的。

另外,还有一个叫“协议号”的东西,会在IP首部里面有一个协议号,用来表明通信时采用的上层协议是TCP/UDP的,方便把IP报文交给传输层。这样,在TCP/IP协议中,我们就可以通过用“源IP”、“源端口号”、“目的IP”、“目的端口号”、“协议号”这样一个五元组来标识一个通信,衡量通信的双方是谁、用什么协议来通信(可以通过netstat -n查看)。

端口号范围划分

  • 0-1023:知名端口号,HTTP、FTP、SSH这些广为使用的应用层协议,它们的端口号是固定的。
  • 1024-65535:操作系统动态分配的端口号。客户端的端口号,就是在这个范围内选择。

知名端口号

有些服务器非常常用,为了方便使用,人们约定了一些常见的服务器,一些常见的知名端口号:

  • ssh服务器,使用22号端口
  • ftp服务器,使用21号端口
  • http服务器,使用80号端口
  • https服务器,使用443号端口

使用cat /etc/services可以查看知名端口号都有哪些。

有两个问题:

1.一个进程是否可以bind多个端口号?

可以,我们要的是从端口号到服务进程的唯一性。

2.一个端口号是否可以被多个进程bind?

不可以,理由同上。

我们再来理解一下端口号和进程之间的关系,进程在系统内就是struct task_struct,可以认为OS维护了一张哈希表,key就是端口号,value就是进程pcb对应的地址。当底层有数据来了,报文里必定携带了目的端口号,那目的端口号去查哈希表找到进程,就可以把数据交给进程。所以可以认为bind就是把port和进程pcb做关联。因为key值必须唯一,所以一个端口不能绑定多个进程。

UDP协议

UDP协议端格式

UDP的报头是一个结构体,报头里的每个字段都是结构体中的成员属性。通过源端口号和目的端口号就可以知道是哪个进程发的以及发给哪个进程。16位UDP长度,代表报文的总长度,包括UDP首部+UDP数据。报头部分是8字节。如果校验出错,就直接丢弃,所以UDP不保证可靠性。

无论哪种协议,都必须解决两个子问题,

  1. 如何将报头和有效载荷进行分离(封装)
  2. 如何将有效载荷进行分用?

对于第1个问题,通过使用固定长度的报头(8字节)分离,前8个字节就是报头。UDP是面向数据报的,通过16位UDP长度保证读到的报文是完整的,整个报头的长度减去8字节就是有效载荷的长度。对于第2个问题,因为报文里包含了16位目的端口号,找到对应的进程,就可以将数据分用到应用进程。

我们在来理解一个问题:在之前写套接字时,为什么端口号的类型是uint16_t呢?因为协议就是这么规定的!

UDP的特点

  • 无连接:知道对端的IP和端口号就可以直接进行通信,不需要建立连接。
  • 不可靠:没有确认机制,没有重传机制,如果因为网络故障该段无法发送到对方,UDP协议层也不会给应用层返回任何错误信息。
  • 面向数据报:应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并。

用UDP传输100个字节数据:

  • 如果发送端调用一次 sendto, 发送 100 个字节, 那么接收端也必须调用对应的,一次 recvfrom, 接收 100 个字节; 而不能循环调用 10 次 recvfrom, 每次接收 10 个字节。

UDP的缓冲区

UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。但是有接收缓冲区,但这个接收缓冲区不能保证收到的UDP报和发送的UDP报顺序一致,如果缓冲区满了,再到达的UDP数据就会被丢弃。UDP支持全双工,可以同时读写。由于UDP不需要做可靠性保证,所以没有发送缓冲区。

UDP注意事项

UDP协议首部有一个16位的最大长度,所以UDP报文最大长度是2^16位(约64K,包含UDP首部),所以单个UDP报文长度不能超过64K。如果超过64K,就需要在应用层手动分包,多次发送,在接收端手动拼装。

进一步深刻理解

1.udp报头

在进行UDP协议的交换时,用的是对结构体二进制流序列化和反序列化。可以这么做的原因是因为内核不涉及到业务,并且任何OS都是C语言写的,只要转化为网络序列就不会出错。OS的标准化程度比较高。而应用层所用的语言不同,不同语言,不能统一,需要序列化和反序列化。

2.对报文的理解

OS内可能同时存在大量的报文,有的可能正在被向上交付,有的在被向下交付,所以OS要对报文进行管理,先描述,在组织。

相关文章:

【Linux】传输层协议UDP

目录 再谈端口号 端口号范围划分 UDP协议 UDP协议端格式 UDP的特点 UDP的缓冲区 UDP注意事项 进一步深刻理解 再谈端口号 在上图中,有两个客户端A和B,客户端A打开了两个浏览器,这两个客户端都访问同一个服务器,都访问服务…...

MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分

MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分 目录 MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分MOE划分不同专家的方法K-Means聚类算法来实现将神经元特征聚类划分成不同专家(行或者列聚类)举例说明怎么聚类,最后神经网络怎么保存M…...

Redis两种主要的持久化方式是什么?

Redis支持两种主要的持久化方式,它们分别是RDB(Redis Database Snapshotting)和AOF(Append Only File)。以下是这两种持久化方式的详细介绍: 一、RDB(Redis Database Snapshotting) …...

【生活】冬天如何选口罩(医用口罩,N95, KN95还是KP95?带不带呼吸阀门?带不带活性炭?)

💡总结一下就是: 日常防护的话,医用口罩就可以啦。要是想长时间佩戴N95(KN95)口罩的话也可以. 在高风险环境(像医院、疫情防控期间),一定要选不带呼吸阀门的N95口罩KN95&#xff09…...

机器学习基础-卷积的计算

1 掌握卷积计算的基本过程 1.1 单通道单卷积核 如图3所示,现在有一张形状为[5,5,1]的灰度图,我们需要用图3右边的卷积核对其进行卷积处理,同时再考虑到偏置的作用。计算过程如下: 1.2 单通道多卷积核 如下图所示,左…...

使用LINUX的dd命令制作自己的img镜像

为了避免重复安装同一镜像,配置环境,首先我准备一个正常使用的完整系统。 使用Gparted软件先将母盘(如U盘,TF卡)分区调整为只有数据的大小。如:60G的TF卡,只用了3.5G,将未使用的空间…...

pdf预览兼容问题- chrome浏览器105及一下预览不了

使用的"tato30/vue-pdf": "^1.11.2"预览插件&#xff0c;发现chrome浏览器105及一下预览不了 pdfPreview预览组件&#xff1a; <template><div id"vue_pdf_view"><div class"tool_tip"><template v-if"pa…...

SpringBoot中实现拦截器和过滤器

【SpringBoot中实现过滤器和拦截器】 1.过滤器和拦截器简述 过滤器Filter和拦截器Interceptor&#xff0c;在功能方面很类似&#xff0c;但在具体实现方面差距还是比较大的。 2.过滤器的配置 2.1 自定义过滤器&#xff0c;实现Filter接口(SpringBoot 3.0 开始&#xff0c;jak…...

基于深度学习的视觉检测小项目(六) 项目的信号和变量的规划

• 关于前后端分离 当前流行的一种常见的前后端分离模式是vueflask&#xff0c;vueflask模式的前端和后端之间进行数据的传递通常是借助 API&#xff08;应用程序编程接口&#xff09;来完成的。vue通过调用后端提供的 API 来获取或提交数据。例如&#xff0c;前端可能通过发送…...

GitHub的简单操作

引言 今天开始就要开始做项目了&#xff0c;上午是要把git搭好。搭的过程中遇到好多好多的问题。下面就说一下git的简单操作流程。我们是使用的GitHub,下面也就以这个为例了 一、GitHub账号的登录注册 https://github.com/ 通过这个网址可以来到GitHub首页 点击中间绿色的S…...

LLM大语言模型自动化测试(ROUGE和RAGAS)及优化方案

1. 模型自动化测试 模型的测试中&#xff0c;不同类型的任务评测指标有显著差异&#xff0c;比如&#xff1a; 分类任务&#xff1a; 准确率&#xff08;Accuracy&#xff09;&#xff1a;正确预测的比例。 精确度&#xff08;Precision&#xff09;、召回率&#xff08;Recal…...

你已经分清JAVA中JVM、JDK与JRE的作用和关系了吗?

你已经分清JAVA中JVM、JDK与JRE的作用和关系了吗&#xff1f; 一. JVM、JDK与JRE的关系二. JVM、JDK与JRE的作用2.1 什么是JVM&#xff1f;2.2 什么是JDK&#xff1f;2.3 什么是JRE&#xff1f; 前言 点个免费的赞和关注&#xff0c;有错误的地方请指出&#xff0c;看个人主页有…...

实际开发中,常见pdf|word|excel等文件的预览和下载

实际开发中,常见pdf|word|excel等文件的预览和下载 背景相关类型数据之间的转换1、File转Blob2、File转ArrayBuffer3、Blob转ArrayBuffer4、Blob转File5、ArrayBuffer转Blob6、ArrayBuffer转File 根据Blob/File类型生成可预览的Base64地址基于Blob类型的各种文件的下载各种类型…...

Elasticsearch:Lucene 2024 年回顾

作者&#xff1a;来自 Elastic Chris Hegarty 2024 年对于 Apache Lucene 来说又是重要的一年。在本篇博文中&#xff0c;我们将探讨主要亮点。 Apache Lucene 在 2024 年表现出色&#xff0c;发布了许多版本&#xff0c;包括三年来的首次重大更新&#xff0c;其中包含令人兴奋…...

springboot实战纪实-课程介绍

教程介绍 Spring Boot是由Pivotal团队提供的一套开源框架&#xff0c;可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持&#xff0c;可以帮助开发者更轻松快捷地构建出企业级应用。 Spring Boot通过自动配置功能&#xff0c;降低了复杂性&#xff0c;同时支持…...

什么是TDD测试驱动开发(Test Driven Development)?

什么是测试驱动开发&#xff1f; 软件开发团队通常会编写自动化测试套件来防止回归。这些测试通常是在编写应用程序功能代码之后编写的。我们将采用另一种方法&#xff1a;在实现应用程序代码之前编写测试。这称为测试驱动开发 (TDD)。 为什么要应用 TDD&#xff1f;通过在实…...

学习随记:word2vec的distance程序源码注释、输入输出文件格式说明

word2vec中有5个程序&#xff0c;其中demo-word.sh中涉及两个&#xff1a;word2vec、distance。考虑到distance比较简单&#xff0c;所以我从这个入手&#xff0c;希望通过简单代码理解如何在一个高维数据空间计算距离&#xff08;查找&#xff09;。一维数据的查找&#xff0c…...

CSS 之 position 定位属性详解

CSS系列文章目录 CSS 之 display 布局属性详解 CSS 之 position 定位属性详解一文搞懂flex布局 【弹性盒布局】 文章目录 CSS系列文章目录一、前言二、静态定位&#xff1a;position:static&#xff1b;二、相对定位&#xff1a;position:relative三、绝对定位&#xff1a;pos…...

初学STM32 --- USMART

目录 USMART简介 USMART主要特点&#xff1a; USMART原理 USMART组成&#xff1a; USMART 的实现流程简单概括 USMART扫描函数&#xff1a; USMART系统命令 USMART移植 USMART简介 USMART是一个串口调试组件&#xff0c;可以大大提高代码调试效率&#xff01; USMART主…...

MySQL叶子节点为啥使用双向链表?不使用单向呢?

文章内容收录到个人网站&#xff0c;方便阅读&#xff1a;http://hardyfish.top/ 文章内容收录到个人网站&#xff0c;方便阅读&#xff1a;http://hardyfish.top/ 文章内容收录到个人网站&#xff0c;方便阅读&#xff1a;http://hardyfish.top/ MySQL 中的 B 树索引&#x…...

4_TypeScript 条件语句 --[深入浅出 TypeScript 测试]

在 TypeScript 中&#xff0c;条件语句用于根据不同的条件执行不同的代码块。这些语句包括 if 语句、else if 语句、else 语句和 switch 语句。通过使用条件语句&#xff0c;你可以编写出能够根据特定逻辑分支的代码&#xff0c;从而实现更加动态和灵活的功能。 1. if 语句 i…...

vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。

vue elementUI Plus实现拖拽流程图&#xff0c;不引入插件&#xff0c;纯手写实现。 1.设计思路&#xff1a;2.设计细节3.详细代码实现 1.设计思路&#xff1a; 左侧button列表是要拖拽的组件。中间是拖拽后的流程图。右侧是拖拽后的数据列表。 我们拖动左侧组件放入中间的流…...

图漾相机基础操作

1.客户端概述 1.1 简介 PercipioViewer是图漾基于Percipio Camport SDK开发的一款看图软件&#xff0c;可实时预览相机输出的深度图、彩色图、IR红外图和点云图,并保存对应数据&#xff0c;还支持查看设备基础信息&#xff0c;在线修改gain、曝光等各种调节相机成像的参数功能…...

【阅读笔记】基于FPGA的红外图像二阶牛顿插值算法的实现

图像缩放技术在图像显示、传输、分析等多个领域中扮演着重要角色。随着数字图像处理技术的发展&#xff0c;对图像缩放质量的要求也越来越高。二阶牛顿插值因其在处理图像时能够较好地保持边缘特征和减少细节模糊&#xff0c;成为了图像缩放中的一个研究热点。 一、 二阶牛顿插…...

K210识别技术简介与基础使用方法

目录 一、K210芯片概述 二、K210的硬件配置与开发环境 1. 硬件配置 2. 开发环境 三、K210的识别技术基础 1. 图像识别 2. 语音识别 四、K210识别技术的基础使用方法 1. 图像识别基础使用 2. 语音识别基础使用 五、K210识别技术的应用场景 六、总结与展望 一、K210芯…...

【Android学习】Adapter中使用Context

参考文章 文章目录 1. 通过 Adapter 构造函数传入 Context2. 通过 Parent.context 获取3. 通过 onAttachedToRecyclerView() 方法获取4. 通过 ImageView 获取 context (局限于本例子中)5. 四种方法对比分析6. 作者推荐的方法 需求&#xff1a; Glide加载图片需要用到Context 1…...

LLM大模型RAG内容安全合规检查

1.了解内容安全合规涉及的范围 我们先回顾一下智能答疑机器人的问答流程。问答流程主要包括用户、智能答疑机器人、知识库、大语言模型这四个主体。 涉及内容安全的关键阶段主要有&#xff1a; 输入阶段&#xff1a;用户发起提问。 输出阶段&#xff1a;机器人返回回答。 知识…...

Flink operator实现自动扩缩容

官网文档位置&#xff1a; 1.Autoscaler | Apache Flink Kubernetes Operator 2.Configuration | Apache Flink Kubernetes Operator 1.部署K8S集群 可参照我之前的文章k8s集群搭建 2.Helm安装Flink-Operator helm repo add flink-operator-repo https://downloads.apach…...

数据挖掘——集成学习

数据挖掘——集成学习 集成学习Bagging&#xff1a;有放回采样随机森林 BoostingStacking 集成学习 集成学习&#xff08;Ensemble learning&#xff09;方法通过组合多种学习算法来获得比单独使用任何一种算法更好的预测性能。 动机是为了提高但分类器的性能 Bagging&…...

XGBoost 简介:高效机器学习算法的实用指南

1. 什么是 XGBoost&#xff1f; XGBoost&#xff0c;全称 eXtreme Gradient Boosting&#xff0c;是一种基于 梯度提升决策树&#xff08;GBDT&#xff09; 的高效实现。相比传统的 GBDT&#xff0c;XGBoost 在速度、内存利用和并行化等方面做了很多优化&#xff0c;因此在大规…...

【NLP高频面题 - Transformer篇】什么是缩放点积注意力,为什么要除以根号d?

什么是缩放点积注意力&#xff0c;为什么要除以根号d&#xff1f; 重要性&#xff1a;★★★ Transformer 自注意力机制也被称为缩放点积注意力机制&#xff0c;这是因为其计算过程是先求查询矩阵与键矩阵的点积&#xff0c;再用 d k \sqrt{d_k} dk​ ​ 对结果进行缩放。这…...

HTML——56.表单发送

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>表单发送</title></head><body><!--注意&#xff1a;1.表单接收程序&#xff0c;放在服务器环境中(也就是这里的www文件目录中)2.表单发送地址&#x…...

C++26 函数契约(Contract)概览

文章目录 1. 什么是契约编程?契约编程的三大核心: 2. C26 契约编程的语法语法示例 3. 契约检查模式3.1. default 模式3.2. audit 模式3.3. axiom 模式检查模式的设置 4. 契约编程与传统 assert 的区别示例对比 5. 契约编程的应用场景6. 注意事项7. 示例: 带契约的矩形面积计算…...

【HTML】Day02

【HTML】Day02 1. 列表标签1.1 无序列表1.2 有序列表1.3 定义列表 2. 表格标签2.1 合并单元格 3. 表单标签3.1 input标签基本使用3.2 上传多个文件 4. 下拉菜单、文本域5. label标签6. 按钮button7. div与span、字符实体字符实体 1. 列表标签 作用&#xff1a;布局内容排列整齐…...

Kafka的rebalance机制

1、什么是 rebalance 机制 重平衡&#xff08;rebalance&#xff09;机制规定了如何让消费者组下的所有消费者来分配 topic 中的每一个分区。 2、rebalance 机制的触发条件是什么 &#xff08;1&#xff09;消费者组内成员变更 成员增加&#xff1a;当有新的消费者加入到消费…...

Spring Boot - 日志功能深度解析与实践指南

文章目录 概述1. Spring Boot 日志功能概述2. 默认日志框架&#xff1a;LogbackLogback 的核心组件Logback 的配置文件 3. 日志级别及其配置配置日志级别3.1 配置文件3.2 环境变量3.3 命令行参数 4. 日志格式自定义自定义日志格式 5. 日志文件输出6. 日志归档与清理7. 自定义日…...

【React+TypeScript+DeepSeek】穿越时空对话机

引言 在这个数字化的时代&#xff0c;历史学习常常给人一种距离感。教科书中的历史人物似乎永远停留在文字里&#xff0c;我们无法真正理解他们的思想和智慧。如何让这些伟大的历史人物"活"起来&#xff1f;如何让历史学习变得生动有趣&#xff1f;带着这些思考&…...

2025年贵州省职业院校技能大赛信息安全管理与评估赛项规程

贵州省职业院校技能大赛赛项规程 赛项名称&#xff1a; 信息安全管理与评估 英文名称&#xff1a; Information Security Management and Evaluation 赛项组别&#xff1a; 高职组 赛项编号&#xff1a; GZ032 1 2 一、赛项信息 赛项类别 囚每年赛 □隔年赛&#xff08;□单数年…...

2、蓝牙打印机点灯-GPIO输出控制

1、硬件 1.1、看原理图 初始状态位高电平. 需要驱动PA1输出高低电平控制PA1. 1.2、看手册 a、系统架构图 GPIOA在APB2总线上。 b、RCC使能 GPIOA在第2位。 c、GPIO寄存器配置 端口&#xff1a;PA1 模式&#xff1a;通用推挽输出模式 -- 输出0、1即可 速度&#xff1a;5…...

推荐系统重排:DPP 多样性算法

行列式点过程&#xff08;DPP&#xff09;算法&#xff1a;原理、应用及优化 推荐系统【多样性算法】系列文章&#xff08;置顶&#xff09; 1.推荐系统重排&#xff1a;MMR 多样性算法 2.推荐系统重排&#xff1a;DPP 多样性算法 引言 行列式点过程&#xff08;Determinanta…...

【业务场景】sql server从Windows迁移到Linux

目录 1.背景 2.Linux安装sql server 3.服务器不开端口的问题 4.数据库导入导出问题 1.背景 博主在24年年底接手运维了一个政府的老系统&#xff0c;整个应用和数据库单点部署在一台Windows Server服务器上&#xff0c;数据库选型是经典的老项目标配——sql server。随着近…...

SpringMVC(三)请求

目录 一、RequestMapping注解 1.RequestMapping的属性 实例 1.在这里创建文件&#xff0c;命名为Test: 2.复现-返回一个页面&#xff1a; 创建test界面&#xff08;随便写点什么&#xff09;&#xff1a; Test文件中编写&#xff1a; ​编辑 运行&#xff1a; 3.不返回…...

【HeadFirst系列之HeadFirst设计模式】第1天之HeadFirst设计模式开胃菜

HeadFirst设计模式开胃菜 前言 从今日起&#xff0c;陆续分享《HeadFirst设计模式》的读书笔记&#xff0c;希望能够帮助大家更好的理解设计模式&#xff0c;提高自己的编程能力。 今天要分享的是【HeadFirst设计模式开胃菜】&#xff0c;主要介绍了设计模式的基本概念、设计模…...

Spring线程池优雅关闭

前言 线程池大家一定不陌生&#xff0c;常被用来异步执行一些耗时的任务。但是线程池如何优雅的关闭&#xff0c;却少有人关注。 当 JVM 进程关闭时&#xff0c;你提交到线程池的任务会被如何处理&#xff1f;如何保证任务不丢&#xff1f; ThreadPoolExecutor Java 对线程…...

Spring为什么要用三级缓存解决循环依赖?

1.什么是循环依赖 本文为了方便说明&#xff0c;先设置两个业务层对象&#xff0c;命名为AService和BService。其中Spring是如何把一个Bean对象创建出来的&#xff0c;其生命周期如下&#xff1a; 构造方法–> 不同对象 --> 注入依赖 -->初始化前 --> 初始化后–&…...

【苏德矿高等数学】第4讲:数列极限定义-1

2. 数列极限 数列极限是整个微积分的核心。它的思想贯穿整个微积分之中。 数列极限是最基本的、最核心的、最重要的、最难的。 2.1 数列 【定义】无限排列的一列数 a 1 , a 2 , ⋯ , a n , ⋯ a_1,a_2,\cdots,a_n,\cdots a1​,a2​,⋯,an​,⋯就称为数列&#xff0c;记作 { …...

Go语言的 的并发编程(Concurrency)核心知识

Go语言的并发编程&#xff08;Concurrency&#xff09;核心知识 在现代软件开发中&#xff0c;尤其是处理高并发任务时&#xff0c;优秀的并发编程能力显得尤为重要。Go语言&#xff08;或称Golang&#xff09;是为并发编程而生的一种编程语言&#xff0c;它通过简洁的语法和强…...

Go语言中的逃逸分析:深入浅出

Go语言中的逃逸分析&#xff1a;深入浅出 在Go语言中&#xff0c;逃逸分析&#xff08;Escape Analysis&#xff09;是一个非常重要且强大的编译器优化技术。它帮助编译器决定一个变量是在栈上分配还是在堆上分配&#xff0c;从而影响程序的性能和内存管理。本文将深入探讨Go语…...

flux中的缓存

1. cache&#xff0c;onBackpressureBuffer。都是缓存。cache可以将hot流的数据缓存起来。onBackpressureBuffer也是缓存&#xff0c;但是当下游消费者的处理速度比上游生产者慢时&#xff0c;上游生产的数据会被暂时存储在缓冲区中&#xff0c;防止丢失。 2. Flux.range 默认…...

Vue3中使用 Vue Flow 流程图方法

效果图&#xff1a; 最近项目开发时有一个流程图的功能&#xff0c;需要做流程节点的展示&#xff0c;就搜到了 Vue Flow 这个插件&#xff0c;这个插件总得来说还可以&#xff0c;简单已使用&#xff0c;下边就总结一下使用的方法&#xff1a; Vue Flow官网&#xff1a;https…...