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

网络原理 - 6

目录

4. 滑动窗口

滑动窗口出现丢包

情况一:数据报已经抵达,ACK 被丢了​编辑

情况二:数据报直接就丢了

5. 流量控制

完!


4. 滑动窗口

这个滑动窗口是 TCP 中非常有特点的机制。

我们知道,TCP 是通过确认应答,超时重传,连接管理 ==》 实现了可靠传输~

根据我们前面的介绍,为了实现可靠传输,也是付出了代价的,单位时间,能传输的数据量变少了(传输效率降低了!)

在确认应答机制之下,每次发送方收到一个 ack 才会发送下一个数据,导致会有大量的时间都消耗在等待 ack 上了,此处等待消耗的时间成本是非常多的~我们希望的是,在保证可靠传输的前提下,尽可能的让效率高一些,让消耗的时间成本少一些

滑动窗口这个机制,就是为了解决上述问题的。滑动窗口就可以在保证可靠传输的基础上,提高效率(这里的提高效率其实是降低了时间的损耗,而不是增加了传输速度)

虽然通过滑动窗口这个机制,一定程度上的提高了效率,但还是不可能高于 UDP  这种不需要可靠性的协议~ 有点提高,总比什么都不做强~~

引入了滑动窗口,就可以实现 == 》批量传输。

之前是发送一个数据,等待 ack,再发送下一条数据。

现在是先发送一个数据,不等 ack,再发下一个,继续往下发数据~

连续发送了一定数据之后,统一等一波 ack ==》 把多次请求的等待时间,使用同一份时间来进行等待,减少了总的等待时间。

滑动窗口这个词是怎么来的呢?? ==》 其实这是一个很形象的比喻~~~

在这幅图的上面,黄色区域中的四份数据已经批量传输出去了~~传输出这四份数据之后,就等待 ack,暂时先不传输数据了~~~我们就把黄色区域(不等待 ack,能够批量传输的数据量)称为“窗口大小”

啥时候能继续发下一个数据(5001 - 6000)呢,是等到所有 ack 都回来了,再往后批量发四组数据,还是等回来一个 ack 就往后发一组呢??

等回来一个 ack 就往下发下一组,这样的效率会比较高~~

上述的发送 / 返回 ack 的过程都很快,窗口快速的向后面移动,也就形成了一个“滑动”的效果了~~~ ==》 因此也就把上述的过程,称为滑动窗口了~~

滑动窗口出现丢包

滑动窗口是我们为了提升传输效率的一个机制,但 TCP 安身立命之本的可靠性还是大前提的。如果出现丢包,滑动窗口会怎么解决呢???

这里可以分两种情况讨论:

情况一:数据报已经抵达,ACK 被丢了

如上图,主机 A 的数据,都是完好的传入到了主机 B,但是主机 B 的一些 ack 出现丢包了,这种情况,其实并不会对我们的数据传输造成影响,我们无需进行任何处理~~

这里需要注意 ack 报文中确认序号的含义,比如我们传了 5001,代表的是 5001 之前的所有数据(1 - 5000 的数据都收到了)这里涵盖了 4001 之前的数据都收到了这样的信息~

情况二:数据报直接就丢了

数据丢了的情况,这个时候就一定要进行重传了~~~

解决这个数据报丢了关键要点:是主机 B 的确认应答报文中,当没有收到 1001 - 2000 数据的时候,返回的应答报文中的确认序号是 1001,而不是 3001。如果是 3001,就是在告诉发送方,1001 - 2000也收到了实际上是,1001 - 2000 的数据报丢包了没收到~

此处就明确告诉了对端,我想要的现在是 1001 这个数据,不仅是这一个应答报文,而是接下来的若干数据,确认序号都是 1001,反复的向对端索要 1001 这个数据。(发福索要,就是再给 1001 的到达留有等待时间,连续多次索要的时候,发现 1001 这个数据还没到达,应该就是丢包了,就相当于“超时时间”判定了)

当发送方多次收到索要 1001 的 ack 确认报文之后,就反应过来,你连续的向我要 1001 这个数据,就会认为 1001 这个数据丢包了,就会重传 1001 这个数据。

重传 1001 之后,此时的确认序号就是 7001 了,而不是再从 2001 开始,确认序号要表示的是,我接下来要向发送方索要那个数据~~ 当发送方重传 1001 这个数据之后,接收方的 7000 之前的数据就都收到了,接下来就要索要 7001 这个数据了~~~

在上述重传的过程中,整体的效率是非常高的,这里的重传就做到了“针对性”的重传。那个丢了重传那个,已经收到的数据,就不必要再重复发送了,整体的效率是没有额外的损失,我们就把这种重传称为“快速重传”。

注意,这里虽然 1001 丢包后,是在一段时间之后再又重传过来的,但因为我们已经给数据都编号了序号,而且在接收方是存在一个带有优先级的阻塞队列的(生产者消费者模型),发送方发送的数据,到了接收方,都是会先放到接收缓冲区里面进行排队的。一排队,咦,发现队伍里缺数据了,却谁,就再向发送方喊谁,等缺的人到了,队伍补齐了,就可以发车了~~~

补充

我们讲的前面的几个机制,确认应答,超时重传,滑动窗口,快速重传,他们是并不冲突的,而且是同时存在的~~~

如果当前传输过程中,是按照滑动窗口(短时间内传输大量数据),就按照快速重传来保证可靠性,此时判定丢包的标准就是看是否接收方连续有多个 ack 索要同一个数据。

如果当前传输过程中,不是按照滑动窗口(没有很多数据需要传输),此时就仍然按照之前的超时重传来保证可靠性,此时判定丢包的标准就算达到超时时间还没有 ack 到达。

注意:滑动窗口中也有确认应答,只不过,把等待的策略稍作调整,转成批量的了,批量的前提是,发送方短时间发送了很多数据。(如果发的数据很少,此时窗口就滑动不起来,就退化成了确认应答~)

5. 流量控制

我们前面讲,通过滑动窗口,可以提高传输效率,窗口大小越大,更多的数据复用同一块时间等待,效率就更高~(批量传输不需要等待 ack 的数据量,就称为“窗口大小”)

窗口大小肯定是不可能无限大的~~请记住,TCP 的安身立命之本是可靠传输,任何提升效率的行为,都不应该影响到可靠性~~~

发送的数据不能无限大,此时就需要考虑一些情况,来保证我们传输数据的可靠性。

比如说,发送方发的飞快,但是接收方处理不过来,此时也会出现丢包(接收方的接收缓冲区满了,发送方还在继续给他发,就会出现丢包情况)

这很像我们做数学应用题中的蓄水池问题:

很明显,如果接收方的接收缓冲区满了,发生丢包情况,这时候发送方就算重传也没用,反而还会浪费硬件资源~

与其等待接收方满了,发送方停止发送,还不如提前就感知到接收方接收缓冲区的情况,提前减慢速度~~

让发送方发送数据和接收方处理速度,可以做到步调一致~~~就算让接收方的处理数据的速度反过来影响发送方的速度 ==》 流量控制!!

我们在 TCP 报头讲解的时候,有一个 16 位窗口大小,就是用来做这个的~~

通过这个字段来给发送方反馈发送速度,这个字段在普通报文中是没有意义的,只有在 ack 报文中才有意义~~~

通过这个大小来反馈给发送方,接下来要发送的窗口大小设置成多少合适(接收方会按照自己接收缓冲区剩余空间的大小,作为 ack 报文中窗口大小的数值)~~~ 下一步发送方就会根据接收方 ack 中的窗口大小数值来调整自己的窗口大小。

补充:

我们这里 TCP 包头中,窗口大小是 16 位,但窗口大小并非就是 64 KB(2 的16次方是 65535,64KB = 64 * 1024 = 65535~~)~ 实际上,TCP 报头的选项中,还包含了一个参数,叫做窗口扩展因子,实际上真实要设置的窗口大小是:16 位窗口大小 * 2 ^ 窗口扩展因子

如上图,当接收方的接收缓冲区为 0 的时候,此时接收方就应该暂停发送,发送方什么时候恢复发送呢?? ==》发送方会周期性的发送一个“窗口探测包”,这个窗口探测包,并不会携带任何载荷,这样的包对于业务并不产生影响,只是为了触发接收方的 ack,一旦查询出来的结果,是非 0 的时候,就代表缓冲区又行了!!!发送方就可以继续发送了!!!

完!

相关文章:

网络原理 - 6

目录 4. 滑动窗口 滑动窗口出现丢包 情况一:数据报已经抵达,ACK 被丢了​编辑 情况二:数据报直接就丢了 5. 流量控制 完! 4. 滑动窗口 这个滑动窗口是 TCP 中非常有特点的机制。 我们知道,TCP 是通过确认应答&…...

【Linux网络】构建类似XShell功能的TCP服务器

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...

Spring AI - Redis缓存对话

先看效果 对话过程被缓存到了Redis 中。 原理 在上一节我们快速入门了SpringAI,具体文章请查看:快速入门Spring AI 创建 ChatClient 的代码如下: this.chatClient ChatClient.builder(chatModel).defaultSystem(DEFAULT_PROMPT).defaultAd…...

rk3588 驱动开发(二)第四章嵌入式 Linux LED 驱动开发实验

4.1 Linux 下 LED 灯驱动原理 Linux 下的任何外设驱动,最终都是要配置相应的硬件寄存器。所以本章的 LED 灯驱动 最终也是对 RK3588 的 IO 口进行配置,与裸机实验不同的是,在 Linux 下编写驱动要符合 Linux 的驱动框架。开发板上的 LED 连接…...

第49讲:AI驱动的农业碳汇估算与生态价值评估 —— 打造更“绿”的智慧农业未来

目录 🌍 一、农业碳汇:我们为什么要关心它? 🤖 二、AI是如何介入农业碳汇评估的? 🛠 三、案例实战:AI估算区域农田碳汇储量 📍 场景设定: 📊 数据来源: 🔁 处理流程: 📈 四、生态价值评估:从碳储量到生态效益 🧭 五、平台与工具推荐 💬 六、…...

springmvc入门案例

目录 前言 springmvc概述 springmvc入门案例(使用配置类替代原本的web.xml) 第一步、创建一个web工程 第二步、引入相应的依赖(servlet-api、spring-webmvc、) 第三步、编写 SpringMVC配置类,并开启包扫描功能 第四步、编写…...

Node.js学习

概述 Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境,允许在服务器端运行 JavaScript 代码。它采用事件驱动和非阻塞 I/O 模型,适合构建高性能、可扩展的网络应用,尤其擅长处理实时应用和大规模数据密集型场景 背景 JavaScri…...

SQL注入漏洞中会使用到的函数

目录 一、信息获取函数 1. 通用函数 2. 元数据查询(INFORMATION_SCHEMA) 二、字符串操作函数 1. 字符串连接 2. 字符串截取 3. 编码/解码 三、报错注入专用函数 1. MySQL 2. SQL Server 3. PostgreSQL 四、时间盲注函数 1. 通用延迟 2. 计…...

MIT IDSS深度解析:跨学科融合与系统科学实践

麻省理工学院的IDSS(Institute for Data, Systems, and Society, IDSS)是一个致力于通过先进分析方法推动教育与研究的前沿机构。它将工程学、信息科学和数据科学的方法与社会科学的分析方法相结合,以应对复杂的社会挑战。 MIT IDSS 建立在统计学、计算机科学和特定应用领域…...

重塑智慧出行新生态,德赛西威全新战略愿景发布

4月22日,上海车展开幕前夕,德赛西威以“智新境,向远大”为主题,正式对外发布全新发展战略及使命、愿景;同时,代表未来AI出行趋势的智慧出行解决方案Smart Solution 3.0重磅亮相。 一、把握变革节点 创领产…...

全面解析 classification_report:评估分类模型性能的利器

解读 classification_report 的使用:评估分类模型性能的关键工具 在机器学习中,分类任务是最常见的应用场景之一。无论是垃圾邮件过滤、图像识别还是情感分析,分类模型的性能评估都是至关重要的一步。而 classification_report 是 Scikit-le…...

Qt案例 使用QFtpServerLib开源库实现Qt软件搭建FTP服务器,使用QFTP模块访问FTP服务器

本以为搭建和访问FTP服务器的功能已经是被淘汰的技术了,只会在学习新技术的时候才会了解学习学习,WinFrom版本,和windows Api版本访问FTP服务器的功能示例也都写过。没想到这次会在项目中再次遇到, 这里记录下使用Qt开源库QFtpSer…...

图像后处理记录

图像后处理记录 ocr后处理记录 opencv裁剪 编译命令 cmake -S . -B build-x64 -DBUILD_LIST"core,imgproc,imgcodecs,highgui" -DBUILD_SHARED_LIBSOFF -DBUILD_opencv_appsOFF -DBUILD_opencv_jsOFF -DBUILD_ANDROID_PROJECTSOFF -DBUILD_ANDROID_EXAMPLESOFF -…...

解决element中的el-anchor链接被作为路由跳转导致页面404

解决element中的el-anchor链接被作为路由跳转导致页面404 问题&#xff1a; 在使用elementPlus时&#xff0c;el-anchor-link中的href被识别为路由进行跳转&#xff0c;导致不能正常跳转到锚点&#xff0c;且页面显示404。 解决&#xff1a;自定义方法解决 <!--添加hand…...

Mapreduce中maven打包

MapReduce是一个分布式运算程序的编程框架&#xff0c;是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff08;例如&#xff1a;jar包&#xff09;&#xff0c;并发运行在…...

C++初阶——string的使用(下)

C初阶——string的使用&#xff08;下&#xff09; 一、string类对象的容量操作 对于string的容量操作&#xff0c;我们可以通过顺序表来理解&#xff0c;顺序表是通过动态数组来实现的&#xff0c;在数据结构专栏的第一篇就是顺序表的详细讲解&#xff0c;链接如下&#xff…...

AIGC vs 人类创作者:是竞争还是协作?

AIGC vs 人类创作者&#xff1a;是竞争还是协作&#xff1f; 随着人工智能技术的飞速发展&#xff0c;特别是生成式AI&#xff08;AIGC, AI-Generated Content&#xff09;的崛起&#xff0c;越来越多的领域开始出现AI的身影。从文本创作、图像生成到音乐制作&#xff0c;AIGC…...

Stable Baselines3 结合 gym 训练 CartPole 倒立摆

视频讲解&#xff1a; Stable Baselines3 结合 gym 训练 CartPole 倒立摆 今天介绍下stable_baselines3和gym&#xff0c;可以方便实现DL的实现&#xff0c;应用在机械臂catch、reach等场景 测试代码仓库&#xff1a;https://github.com/LitchiCheng/DRL-learning.git https:…...

ctfshow web8

前言 学习内容&#xff1a;简单的盲注脚本的书写 web8 这个题目题目手动注入很麻烦 主要是他过滤了 union 空格和 过滤了union的解决方法 1、使用盲注(报错注入和盲注) 2、使用时间盲注 3、堆叠注入 盲注脚本的书写 首先他是有注入点的 然后熟悉requests包的使用 …...

Linux程序地址空间

目录 研究背景 程序地址空间回顾 来段代码感受一下 进程地址空间 Linux2.6内核进程调度队列 一个CPU拥有一个runqueue 优先级 活跃队列&#xff08;只出不进&#xff09; 过期队列&#xff08;只进不出&#xff09; active指针和expired指针 总结 研究背景 Linux内核版本&#…...

破茧成蝶:阿里云应用服务器让传统 J2EE 应用无缝升级 AI 原生时代

丝滑升级拥抱大模型&#xff1a;详解AI时代的应用智能化升级路径 破茧成蝶&#xff1a;阿里云应用服务器让传统 J2EE 应用无缝升级AI原生时代 ——十年代码无需重写&#xff0c;三步开启智能化跃迁 作者&#xff1a;孤弋、孚阳 序幕&#xff1a;一场跨越 20 年的技术对话 在杭…...

游戏引擎学习第240天:将渲染器移至第三层

这节又枯燥又无聊简直了 回顾并为今天的内容做铺垫 昨天我们说到&#xff0c;想对渲染器和平台层的集成方式做一些修改。我们之前简单讲了一下修改的目的&#xff1a;我们希望游戏本身不再直接调用 OpenGL 的渲染代码&#xff0c;而是只生成一组渲染指令缓冲区&#xff0c;然…...

2025.04.23华为机考第三题-300分

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 时空旅行者的最优路径 问题描述 A先生是一名时空旅行者,他可以在不同的时空点之间穿梭。每次从一个时空点跳跃到另一个时空点需要消耗一个时间单位。在每个时空点,都有一些特…...

Kafka 保证多分区的全局顺序性的设计方案和具体实现

Kafka 本身无法直接保证多分区的全局顺序性&#xff0c;因为分区设计旨在并行处理以提升吞吐量。 要实现多分区的顺序性&#xff0c;可尝试通过以下方法在系统层面或业务逻辑上解决&#xff1a; 一、方案设计 单一分区路由&#xff08;还是将消息发送到同一分区&#xff09;&a…...

数据结构初阶:二叉树(四)

概述&#xff1a;本篇博客主要介绍链式结构二叉树的实现。 目录 1.实现链式结构二叉树 1.1 二叉树的头文件&#xff08;tree.h&#xff09; 1.2 创建二叉树 1.3 前中后序遍历 1.3.1 遍历规则 1.3.1.1 前序遍历代码实现 1.3.1.2 中序遍历代码实现 1.3.1.3 后序遍历代…...

华为开发岗暑期实习笔试(2025年4月16日)

刷题小记&#xff1a; 第一题怀疑测试样例不完整&#xff0c;贪心法不应该能够解决该题。第二题使用0-1BFS解决单源最短路径的问题&#xff0c;往往搭配双端队列实现。第三题是运用动态规划解决最大不重叠子区间个数的问题&#xff0c;难点在于满足3重判断规则&#xff0c;所需…...

第一篇:Django简介

第一篇&#xff1a;Django简介 文章目录 第一篇&#xff1a;Django简介一、纯手写一个简易版的web框架1、软件开发架构2、HTTP协议3、简易的socket服务端4、wsgiref模块5、动静态网页6、后端获取当前时间展示到html页面上7、字典数据传给html文件8、数据从数据库中获取的展示到…...

2025年渗透测试面试题总结-拷打题库13(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年渗透测试面试题总结-拷打题库13 一、GitHub等三方敏感信息泄漏防御 二、业务逻辑漏洞技术规避 …...

(09)Vue脚手架的使用(Vite、vue-cli、create-vue)

本系列教程目录&#xff1a;Vue3Element Plus全套学习笔记-目录大纲 文章目录 第3章 Vue脚手架3.1 vite3.3.1 Vite使用1&#xff09;创建Vite项目2&#xff09;Vite项目打包 3.1.2 组件化开发3.1.4 Vite工程运行原理1&#xff09;分析main.js2&#xff09;自定义根组件 3.2 vue…...

Unity 将Excel表格中的数据导入到Mysql数据表中

1.Mysql数据表users如下&#xff1a; 2.即将导入的Excel表格如下&#xff1a; 3.代码如下&#xff1a; using System; using System.Data; using System.IO; using Excel; using MySql.Data.MySqlClient; using UnityEngine; using UnityEditor;public class ImportExcel {// …...

【QT】信号与槽中多个按钮(pushbutton)共用一个槽函数的两种实现方式

两种方法的对比 方法1&#xff1a;sender() 优点&#xff1a;代码简洁&#xff0c;无需额外参数 缺点&#xff1a;依赖运行时类型转换&#xff0c;安全性较低 适用场景&#xff1a;简单场景&#xff0c;少量按钮 方法2&#xff1a;Lambda (推荐) 优点&#xff1a;安全直观&…...

Python----深度学习(神经网络的过拟合解决方案)

一、正则化 1.1、正则化 正则化是一种用于控制模型复杂度的技术。它通过在损失函数中添加额外的项&#xff08;正则 化项&#xff09;来降低模型的复杂度&#xff0c;以防止过拟合。 在机器学习中&#xff0c;模型的目标是在训练数据上获得较好的拟合效果。然而&#xff0c;过…...

【金仓数据库征文】从 HTAP 到 AI 加速,KingbaseES 的未来之路

国产数据库早已实现 “可替代”&#xff0c;但要真正与国际头部厂商掰手腕&#xff0c;必须在 HTAP&#xff08;Hybrid‑Transaction/Analytical Processing&#xff09;与 AI 加速 两条技术赛道上实现跨越。KingbaseES 自 V8R3 调整为多进程架构后&#xff0c;历经 V8R6、KSOn…...

创建第一个Spring Boot项目

什么是Spring Boot 随着Spring的快速发展&#xff0c;项目中的XML文件越来越多&#xff0c;繁琐的配置以及&#xff0c;整合第三方框架的配置问题&#xff0c;导致大大增加了开发和部署的效率&#xff0c;使开发者无法专心于业务的开发。Spring Boot就相当于使Spring框架的脚手…...

Java—— 正则表达式 练习

需求&#xff1a; 请编写正则表达式验证用户输入的手机号码是否满足要求。 请编写正则表达式验证用户输入的邮箱号是否满足要求。 请编写正则表达式验证用户输入的电话号码是否满足要求。 验证手机号码 13112345678 13712345667 13945679027 139456790271 验证座机电话号码 02…...

Linux[指令与权限]

Linux指令与权限 Linux环境中,打包文件有多种 tar (打包/解包) 指令 tar -czvf 文件要打包到的位置 文件(打包并压缩到) tar -xzvf 文件(在当前目录下解压) tar选项 -c创建压缩文件 -z使用gzip属性压缩 -v展现压缩过程 -f后面使用新建文档名 -x不要新建,解压 -C 文件…...

MySQL数据库精研之旅第十期:打造高效联合查询的实战宝典

专栏&#xff1a;MySQL数据库成长记 个人主页&#xff1a;手握风云 目录 一、简介 1.1. 为什么要使用联合查询 1.2. 多表联合查询时的计算 1.3. 示例 二、内连接 2.1. 语法 2.2. 示例 三、外连接 4.1. 语法 4.2. 示例 一、简介 1.1. 为什么要使用联合查询 一次查询需…...

【Redis】集合类型Set 常用命令详解

1. sadd - 添加 语法&#xff1a;sadd key value > sadd testset A 1 > sadd testset B 1 > sadd testset C 1 > sadd testset C # set的值不能重复 0 > smembers set1 # 查询指定set的所有值&#xff0c;乱序 1) "B" 2) "A" 3) "C&qu…...

React 5 种组件提取思路与实践

在开发时,经常遇到一些高度重复但略有差异的 UI 模式,此时我们当然会把组件提取出去,但是组件提取的方式有很多,怎么根据不同场景选取合适的方式呢?尤其时在复杂的业务场景中,组件提取的思路影响着着代码的可维护性、可读性以及扩展性。本文将以一个[详情]组件为例,探讨…...

第十五届蓝桥杯 2024 C/C++组 合法密码

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; substr函数&#xff1a; 思路详解&#xff1a; 代码&#xff1a; 代码详解; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; P10906 [蓝桥杯 2024 国 B] 合法密码 -…...

云原生时代的双轮驱动

在当今数字化浪潮汹涌澎湃的时代&#xff0c;企业 IT 主管、CIO、CTO 们肩负着引领企业乘风破浪、实现数字化转型的重任。而主数据平台与数据中台&#xff0c;宛如企业数字化征程中的双引擎&#xff0c;为企业发展注入强劲动力。 一、主数据与数据中台&#xff1a;企业数据世界…...

GD32F407单片机开发入门(六)定时器TIMER详解及实战含源码

文章目录 一.概要二.通用定时器内部结构1.时基单元2.时钟源3.输入捕获4.输出比较 三.通用定时器内部特色四.TIME定时器1ms中断例程五.工程源代码下载六.小结 一.概要 定时器就是计数器&#xff0c;应用在我们生活的方方面面&#xff0c;比如有闹钟、计时器等。在GD32F407VET6定…...

时序数据库 TDengine 助力石油石化业务, 平滑接替 Oracle 数据库

小T导读&#xff1a;胜软科技在石油石化行业中选择使用 TDengine 处理时序数据&#xff0c;不仅显著降低了运维数据库的成本&#xff0c;也大幅减少了存储空间的占用&#xff0c;实现了从原有的 40 多套 Oracle 数据库向仅 9 套 TDengine集群的精简替换。在迁移过程中&#xff…...

【问题解决】本机navicat连接云服务器mysql

一般情况下&#xff0c;当你使用navicat等工具连接云服务器会因为mysql的安全机制&#xff0c;导致无法连接root用户&#xff0c;但是在测试环境中&#xff0c;不考虑安全性的前提条件下&#xff0c;可以通过修改MySQL的配置文件来连接云服务器mysql的root用户。 选择数据库&am…...

STM32F407 的通用定时器与串口配置深度解析

在 STM32F407 芯片的开发过程中&#xff0c;通用定时器和串口的配置与使用是极为关键的技能点。本文将结合提供的代码示例&#xff0c;深入剖析这两个模块的配置流程、工作原理以及实际应用&#xff0c;助力开发者更好地掌握相关技术。 一、通用定时器 &#xff08;一&#x…...

深入探究Linux项目自动化构建工具:make与Makefile

目录 引言 一、make与Makefile概述 1.1 背景 1.2 理解 二、make工作原理 2.1 查找Makefile 2.2 确定目标文件 2.3 处理文件依赖 三、Makefile实例分析 3.1 简单C程序示例 3.2 项目清理机制 四、结合行缓冲区概念的有趣现象 五、结语 引言 在Linux软件开发的世界里…...

【Hive入门】Hive基础操作与SQL语法:DDL操作全面指南

目录 1 Hive DDL操作概述 2 数据库操作全流程 2.1 创建数据库 2.2 查看数据库 2.3 使用数据库 2.4 修改数据库 2.5 删除数据库 3 表操作全流程 3.1 创建表 3.2 查看表信息 3.3 修改表 3.4 删除表 4 分区与分桶操作 4.1 分区操作流程 4.2 分桶操作 5 最佳实践与…...

STM32F103 “BluePill” 上的 DMA 原理与实践

摘要:本文深入浅出地介绍什么是 DMA(直接存储器访问),它的核心原理、硬件架构,以及在 STM32F103(BluePill)上常见的几种使用场景(ADC、UART、内存拷贝等)。通过对比 CPU 轮询、中断、DMA 三种方式的数据搬运效率,结合寄存器级和 HAL 库示例代码,并附带性能测试与优化…...

软考软件设计师30天备考指南

文章目录 一、考情分析&#xff08;一&#xff09;综合知识&#xff08;二&#xff09;案例分析 二、30天学习规划&#xff08;一&#xff09;第1 - 5天&#xff1a;基础夯实&#xff08;二&#xff09;第6 - 10天&#xff1a;核心知识突破&#xff08;三&#xff09;第11 - 15…...

比较:AWS VPC peering与 AWS Transit Gateway

简述: VPC 对等连接和 Transit Gateway 用于连接多个 VPC。VPC 对等连接提供全网状架构,而 Transit Gateway 提供中心辐射型架构。Transit Gateway 提供大规模 VPC 连接,并简化了 VPC 间通信管理,相比 VPC 对等连接,支持大量 VPC 的 VPC 间通信管理。 VPC 对等连接 AWS V…...