网络原理(三)—— 传输层 之 UDP 和 TCP协议
传输层
在传输层两大关键的协议就是UDP和TCP协议了,除此之外,还有别的传输层协议,本文章将介绍UDP和TCP协议,重点介绍TCP协议。
首先回顾TCP和UDP 的特点:
UDP:不可靠传输,面向数据包,全双工
TCP:可靠传输,面向字节流,全双工
UDP 协议
UDP报文格式:
源端口号和目的端口号耳熟能详了。
UDP长度是指整个UDP数据包的长度(报头 + 载荷),由于是16位的长度,所以整个UDP数据包最大的长度就是 2^16-1 个字节(单位是字节)即 64KB
16位UDP校验和是校验UDP数据包有没有出错,这和 https 的校验和不一样,https 是为了防止有人篡改数据,这里的UDP校验和是为了防止出现比特翻转(0->1,1->0),也就是防止原始数据发生比特翻转导致数据错误。
最后就是载荷内容
UDP 数据包的报头固定是64个比特位也就是8个字节。
由于UDP最大长度是68KB,在现在的互联网时代,远远不够用,所以引入了下面的 TCP 协议。
TCP 协议
TCP报文的格式:
32位序号:该报文的载荷数据的第一个字节的起始编号
32位确认序号:说明该报文的确认报文,确认序号说明自己已经接收到的最后一个数据包的最后一个字节的编号+1,也就是你下一个数据包发送的序号应该凑够这里开始。举个例子:假设一个数据包序号为1000,载荷数据占1000字节,对方正常接收,之后需要返回一个确认报文,该报文的确认序号应该是2001。说明2001前面的全部的数据包已经被接收了。
4位首部长度是指首部最大的长度是多少,单位是(4字节)。说明TCP报头的最大长度就是 (2^4 -1)* 4 = 60 字节
确认应答
确认应答是指当一方发送数据到达另一方之后,另一方需要返回一个确认数据包,这就是保证可靠传输的其中一种保证。
在TCP报头中我们发现一个有六个标志位的部分:
当 ack 为 1 的时候,说明这是一个确认应答的数据包。
超时重传
当一方发送完数据包之后,如果迟迟未等到确认应答的话,就会认为改数据包发生了丢包了,因此为了保证可靠传输,我们需要进行重新传输改数据包,这就是超时重传。
保证可靠传输的关键就在于确认应答和超时重传。
连接管理
三次握手
在客户端和服务器建立连接的时候,TCP使用的是三次握手的流程。
首先服务器是被动接收客户端的请求,因此建立连接的发起者一定是客户端,客户端首先发送一个同步报文,然后服务器接收到同步报文之后,就会返回一个确认应答和同步报文,最后客户端返回确认应答数据包。
同步报文的特点是 六个标志位里的 syn 是 1.
为什么是三次握手???
首先TCP是有连接的,具体体现在客户端和服务器分别保存了对端的信息。
连接的建立还需要确保双方的发送能力和接收能力都没问题,能正常进行数据通信。
因此客户端发送syn,如果服务器正常接收,说明客户端的发送能力没有问题,这时候服务器发送syn+ack,此时客户端如果额能正常接收的话,说明客户端知道服务器可以正常接收和发送数据,但是服务器这边不知道客户端是否能正常接收数据,因此客户端需要再次发送一个数据包也就是确认应答数据包ack,服务器接收完毕之后,双方就都确定了对方的接收和发送能力正常,也保存了对端的信息,可以开启会话。
由于我们把 syn 和 ack 合并在一起发送给客户端,所以只需要一次,而不是两次,因此四次握手就没有很大的必要了。两次握手又不足以验证双方各自的发送和接收能力正常
三次握手的作用:
首先初步验证通信链路是否是通畅的
验证双方各自的发送能力和接收能力是否正常(这就是为什么两次握手不行)
协商关键信息(序号是从哪里开始的)
三次握手的状态:
当服务器程序一启动,就会由 CLOSED 状态 切换为 LISTEN 状态。
LISTENED 状态:服务器已经启动,可以随时连接客户端
SYN_SEND 和 SYN_RCVD,分别是 syn 发送和接收状态,一般很难看到,因为TCP连接的建立很快就能发生。
ESTABLISHED:是连接建立完毕的状态,随时可以进行数据通信
四次挥手
首先明确一点就是客户端和服务器都可以主动断开连接。
断开连接一般是四次挥手:
主动申请断开连接的需要先发送一个 FIN 数据包(标识位FIN 为1)
然后接收到 FIN 数据包之后需要返回 ACK
接着发送 FIN
最后 返回ACK
TCP连接就会释放
为什么三次握手第二次的数据包SYN可以和ACK 一起,而四次挥手的中间的 FIN 和 ACK 不能合并呢?
因为三次握手的第二份数据包中SYN和ACK 是由内核决定的,当接收到客户端的SYN 之后,会立即返回syn+ack
然而四次挥手的ack 是由内核决定的,但是 FIN 是由应用程序的代码决定的,当程序执行到 socket.close 之后,才会发送 FIN 数据包
四次挥手的状态:
这里要注意的是:谁先发送 FIN,谁就会进入到 TIME_WAIT 状态
谁后发送FIN ,谁就会进入到 CLOSE_WAIT 状态
异常情况的处理
这里列出四种异常情况。
一、进程崩溃了
进程崩溃和主动退出没有本质区别,虽然进程崩溃了,但是只是应用层不行了,传输层的TCP连接还是存在的,因此这里会发生四次挥手来释放连接
二、主机正常关机了
正常的主机关机流程,关机需要一定的时间,在这段时间中可以进行四次挥手
三、不正常关机
如果是不正常关机,例如台式机断电,那么四次挥手可能就没有挥完。举个例子,如果A关机之前发送了一个FIN,在收到 B 的 FIN 之后,A已经关机了,这就意味着B是永远都收不到 ACK的了,那么由于 B 迟迟没有收到 ACK,那么首先会认为发生了丢包,进行超时重传,当超时重传几次之后还是没有收到ACK,就会认为对端发生了严重的错误,B就会主动放连接。
上面的情况是A发出去 FIN 之后,如果A突然断电,没有发送FIN:
1)接收方突然断电
那么这时候 发送方 发送的业务数据迟迟没有得到确认报文,那么 发送 首先会认为发生丢包开始进行超时重传,等到多次迟迟没有得到回应,这时候就会发触发 “重置TCP连接”,发送复位报文(标识位RST为1),【复位报文是指重新建立连接,从头来过发送数据】如果没有得到ACK,那么服务器会单方面断开连接。
2)发送方突然断电
这时候客户端不知道是服务器挂了还是服务器只是没有继续发送数据了,那么客户端就会先等着,等待到一定时间之后就会发送一个 “心跳包”,(心跳包只是为了触发ack,确认一下服务器是否存活,不携带任何业务数据)【这个也叫做保活机制,但是由于TCP发送心跳包的时间过长,一般我们会在应用层重新实现心跳包的逻辑代码】
四、网线断开了
这种情况,站在 A 的视角会认为是第三种情况,A最后会放弃连接
站在B 的视角会认为是第三种情况,B会主动放弃连接。
滑动窗口
由于TCP是可靠传输,那么必定会影响到传输的效率,相比于UDP来说,TCP的传输效率是远远小于UDP的。为了在可靠传输的基础上尽可能提高传输效率,我们使用滑动窗口的概念。
这里的窗口是指接收方的缓冲区的大小,最多可以容纳多少个TCP数据包,当接收方接收完数据后一般会返回ack,其中 ack 里面就会包含接收方剩余窗口容量(对应的就是16位窗口大小),这样发送方就可以根据窗口
大小来进行批量传输数据,就不用一个一个地慢慢传输了。
16 位窗口大小并不是窗口大小的极限值,在TCP报头里还有一个叫做选项的数值,里面有一个数值是窗口扩展因子,假设窗口扩展因子为2,那么窗口大小要左移( << )两位
滑动窗口不能无限大,大了会影响传输效率。
快速重传
由于接收方有窗口(缓冲区),所以如果其中有一个数据包发生了丢包就会触发快速重传那个丢失的数据包,然后继续之前的传输。因为数据包已经在缓冲区排列好了,不需要重新重传已经发送过的数据包
流量控制
流量控制是调整发送方的传输速率,避免接收方不能及时处理数据就导致丢包,那么我们就会引入流量控制。
当接收方处理不过来的时候,发送方会降低发送的速率;当接收方还可以继续处理更多的数据的时候,发送方会提高传输的速率,这就是流量控制。
拥塞控制
由于传输效率还与当前网络的链路有关,如果当前网络占用率高,那么发送方就要降低发送速率,如果当前网络链路占用率低,可以提高发送速率。
慢启动目前已经被弃用,现在使用的是快启动。
首先有一个窗口的阀门值,先发送一个数据包,每轮传输的数据包数量等于前一轮传输的数据包数量 * 2,直到达到窗口的阀门值,之后每轮传输的数据包会 + 1,也就是开始是指数增长的,达到阀门值之后就变成线性增长了。
假设当前窗口大小调整到了24,如上图所示,这时候已经到了网络链路的极限的时候,也就是发生了丢包,发送方收到了连续的 3 个 ack 之后,就会进行快启动,现在窗口阀门值会变成当前窗口的 1/2 也就是 24 / 2 = 12,发送数据量会降到新的阀门值,之后继续进行 + 1 的线性增长
如果是慢启动,新的窗口阀门值还是当前极限窗口的 1/2 也就是12 ,这时候传输的数据包的数量降为1,重新开始 * 2 的指数增长到达阀门值然后进行 + 1 的线性增长
从快启动和慢启动的区别来看,快启动会效率高一些,所以现在我们使用的是快启动。
窗口的实际大小等于 MIN(流量控制的窗口值,拥塞控制的窗口值)
延迟应答
当接收到数据的时候不立即返回 ack,而是等一会再返回 ack,这就是延迟应答
延迟应答可以让接收方有一些时间先处理一下缓冲区(窗口)的数据,这样等一会,窗口就会变得大一些,那么 ack 返回的窗口的大小就可以大一些,那么发送方就可以批量传输更多的数据了,再一定程度上提高了传输效率。
捎带应答
就是在返回 ack 的时候顺便把业务数据也一起带上,捎带应答是配合延迟应答使用的,延迟应答一般是等到接收方需要发送业务数据的时候把 ack 一起带上,这样可以减少网络开销,在一定程度上提高了传输效率。
面向字节流 —— 粘包问题
由于TCP是面向字节流的,所以在拆包之后,数据可能发生粘包问题,就是拆完包之后分不出哪些数据是一组,哪些数据是另一组。
举个例子,发送方发送 aaa, bbb, ccc 这三个数据包,在接收方的传输层里进行拆包然后数据就可能变成这样 aaabbbccc,交给应用层的时候就无法区分了,这就是粘包问题。
要解决粘包问题需要在应用层处理,在传输层是无解的,在设计应用层协议的时候,我们需要定义好如何区分这些数据,可以像之前我们写TCP回显服务器和客户端一样,使用 \n 这个换行符来进行数据的分割,或者其他的分割方法。
面试题:如何让UDP 实现可靠传输??
参考 TCP ,例如:添加序号,确认序号,引入确认应答,超时重传…
相关文章:
网络原理(三)—— 传输层 之 UDP 和 TCP协议
传输层 在传输层两大关键的协议就是UDP和TCP协议了,除此之外,还有别的传输层协议,本文章将介绍UDP和TCP协议,重点介绍TCP协议。 首先回顾TCP和UDP 的特点: UDP:不可靠传输,面向数据包…...
Swin Transformer模型详解(附pytorch实现)
写在前面 Swin Transformer(Shifted Window Transformer)是一种新颖的视觉Transformer模型,在2021年由微软亚洲研究院提出。这一模型提出了一种基于局部窗口的自注意力机制,显著改善了Vision Transformer(ViT…...
opencv进行人脸识别环境搭建
1. 构建人脸识别环境 1) 下载安装opencv 下载地址:Releases - OpenCV 参考博文:OpenCV下载安装教程(Windows)-CSDN博客 下载对应系统的opencv,如windows版,opencv-4.5.5-vc14_vc15.exe 2) 然后解压缩到…...
java小灶课详解:关于char和string的区别和对应的详细操作
char和string的区别与操作详解 在编程语言中,char和string是用于处理字符和字符串的两种重要数据类型。它们在存储、操作和应用场景上存在显著差异。本文将从以下几个方面详细解析两者的区别及常见操作。 1. 基本定义与存储差异 char: 定义:…...
计算机网络之---RIP协议
RIP协议的作用 RIP (Routing Information Protocol) 协议是一个基于距离矢量的路由协议,它在网络中用来动态地交换路由信息。RIP 是最早的路由协议之一,通常用于小型和中型网络中。它的工作原理简单,易于实现,但在一些大型网络中效…...
F#语言的文件操作
F#语言的文件操作 F#是一种功能性编程语言,运行在.NET平台上,特别适合处理并发和复杂的数据处理任务。在这篇文章中,我们将介绍F#语言中的文件操作,包括读取、写入和管理文件的基本方法。通过实例来帮助理解,适合初学…...
微信小程序开发设置支持scss文件
在微信小程序开发中,默认是不支持scss文件的,创建文件的时候,css文件默认创建的是wxss后缀结尾的,但是用习惯了scss的怎么办呢? 首先找到project.config.json文件,打开文件在setting下设置useCompilerPlug…...
【Excel笔记_3】execl的单元格是#DIV/0!,判断如果是这个,则该单元格等于空
在 Excel 中,可以使用 IF 函数来判断单元格是否是 #DIV/0! 错误,并将其替换为空值(即空字符串 "")。具体公式如下: IF(ISERROR(A1), "", A1)或者,如果只想判断 #DIV/0! 错误ÿ…...
51单片机入门基础
目录 一、基础知识储备 (一)了解51单片机的基本概念 (二)掌握数字电路基础 (三)学习C语言编程基础 二、开发环境搭建 (一)硬件准备 (二)软件准备 三、…...
设计模式 行为型 访问者模式(Visitor Pattern)与 常见技术框架应用 解析
访问者模式(Visitor Pattern)是一种行为设计模式,它允许你在不改变元素类的前提下定义作用于这些元素的新操作。这种模式将算法与对象结构分离,使得可以独立地变化那些保存在复杂对象结构中的元素的操作。 假设我们有一个复杂的对…...
stable diffusion 量化学习笔记
文章目录 一、一些tensorRT背景及使用介绍1)深度学习介绍2)TensorRT优化策略介绍3)TensorRT基础使用流程4)dynamic shape 模式5)TensorRT模型转换 二、TensorRT转onnx模型1)onnx介绍2)背景知识&…...
金融项目实战 04|JMeter实现自动化脚本接口测试及持续集成
目录 一、⾃动化测试理论 二、自动化脚本 1、添加断言 1️⃣注册、登录 2️⃣认证、充值、开户、投资 2、可重复执行:清除测试数据脚本按指定顺序执行 1️⃣如何可以做到可重复执⾏? 2️⃣清除测试数据:连接数据库setup线程组 ①明确…...
无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型
无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型 随着人工智能技术的快速发展,越来越多的AI模型被广泛应用于各个领域。然而,运行这些模型通常需要高性能的硬件支持,特别是GPU(图形处理器)…...
selenium学习笔记
一.搭建环境 1.安装chrome #下载chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb#安装chrome apt --fix-broken install ./google-chrome-stable_current_amd64.deb2.安装chromedriver 首先先查看版本:google-chrome --…...
SOME/IP协议详解 基础解读 涵盖SOME/IP协议解析 SOME/IP通讯机制 协议特点 错误处理机制
车载以太网协议栈总共可划分为五层,分别为物理层,数据链路层,网络层,传输层,应用层,其中今天所要介绍的内容SOME/IP就是一种应用层协议。 SOME/IP协议内容按照AUTOSAR中的描述,我们可以更进一步…...
nginx 实现 正向代理、反向代理 、SSL(证书配置)、负载均衡 、虚拟域名 ,使用其他中间件监控
我们可以详细地配置 Nginx 来实现正向代理、反向代理、SSL、负载均衡和虚拟域名。同时,我会介绍如何使用一些中间件来监控 Nginx 的状态和性能。 1. 安装 Nginx 如果你还没有安装 Nginx,可以通过以下命令进行安装(以 Ubuntu 为例࿰…...
基于单片机的智能花卉浇水系统的设计与实现
摘要: 随着人们生活水平的不断提高,生活节奏也越来越快。人们经常忽视办公室或者家居的花卉,忘记浇水。本文设计了一种基于单片机的智能浇水系统。目的是解决养殖花卉的人忘记浇水的问题。本系统以单片机AT89S52为控制芯片,能够按…...
《使用 YOLOV8 和 KerasCV 进行高效目标检测》
《使用 YOLOV8 和 KerasCV 进行高效目标检测》 作者:Gitesh Chawda创建日期:2023/06/26最后修改时间:2023/06/26描述:使用 KerasCV 训练自定义 YOLOV8 对象检测模型。 (i) 此示例使用 Keras 2 在 Colab 中…...
【Domain Generalization(3)】领域泛化与文生图之 -- QUOTA 任意领域中的生成物体的数量可控
系列文章目录 【Domain Generalization(1)】增量学习/在线学习/持续学习/迁移学习/多任务学习/元学习/领域适应/领域泛化概念理解第一篇了解了 DG 的概念,那么接下来将介绍 DG 近年在文生图中的相关应用/代表性工作。【Domain Generalization(2)】领域泛化在文生图…...
qml XmlListModel详解
1、概述 XmlListModel是QtQuick用于从XML数据创建只读模型的组件。它可以作为各种view元素的数据源,比如ListView、GridView、PathView等;也可以作为其他和model交互的元素的数据源。通过XmlRole定义角色,如name、age和height,并…...
CAPL如何设置TCP/IP传输层动态端口范围
在TCP/IP协议中,应用程序通过传输层协议TCP/UDP传输数据,接收方传输层收到数据后,根据传输层端口号把接收的数据上交给正确的应用程序。我们可以简单地认为传输层端口号是应用程序的标识,这就是为什么我们说应用程序在使用TCP/IP协议通信时要打开传输层端口号或者绑定端口号…...
Pandas常用数据类型
扩展库pandas常用的数据结构如下: (1)Series:带标签的一维数组 (2)DatetimeIndes:时间序列 (3)DateFrame:带标签且大小可变的二维表格结构 (4…...
【AI大模型】BERT GPT ELMo模型的对比
目录 🍔 BERT, GPT, ELMo之间的不同点 🍔 BERT, GPT, ELMo各自的优点和缺点 🍔 小结 学习目标 理解BERT, GPT, ELMo相互间的不同点理解BERT, GPT, ELMo相互比较下的各自优点和缺点 🍔 BERT, GPT, ELMo之间的不同点 关于特征提取…...
探索AGI:智能助手与自我赋能的新时代
目录 1 AGI1.1 DeepMind Levels(2023年11月)1.2 OpenAI Levels(2024年7月)1.3 对比与总结1.4 AGI可能诞生哪里 2 基于AI的智能自动化助手2.1 通用型大模型2.2 专业的Agent和模型工具开发框架2.3 编程与代码生成助手2.4 视频和多模态生成2.5 商…...
Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步
Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步 目录 Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动…...
webrtc自适应分辨率的设置
DegradationPreference 是一个枚举类,用于在视频编码或实时通信(如 WebRTC)中指定系统资源不足时如何处理质量下降的策略。以下是该枚举类的中文解释: enum class DegradationPreference {// 禁用:不根据资源过载信号…...
提供的 IP 地址 10.0.0.5 和子网掩码位 /26 来计算相关的网络信息
网络和IP地址计算器 https://www.sojson.com/convert/subnetmask.html提供的 IP 地址 10.0.0.5 和子网掩码位 /26 来计算相关的网络信息。 子网掩码转换 子网掩码 /26 的含义二进制表示:/26 表示前 26 位是网络部分,剩下的 6 位是主机部分。对应的子网掩码为 255…...
WPF系列八:图形控件Path
简介 Path控件支持一种称为路径迷你语言(Path Mini-Language)的紧凑字符串格式,用于描述复杂的几何图形。这种语言通过一系列命令字母和坐标来定义路径上的点和线段,最终绘制出想要的图形。 绘制任意形状:可以用来绘…...
如何移除git中被跟踪的commit文件
忽略已被跟踪的文件 问题描述 如果某个文件已经被 Git 跟踪(即已被提交到仓库),即使后来将其添加到 .gitignore 文件中,Git 仍会继续跟踪它。 解决方案 更新 .gitignore 文件 将需要忽略的文件加入 .gitignore: .env…...
15. C语言 函数指针与回调函数
本章目录: 前言什么是函数指针?定义声明方式 函数指针的基本用法示例:最大值函数输出示例: 回调函数与函数指针什么是回调函数?通俗解释 示例:回调函数实现动态数组填充输出示例: 进一步探索:带…...
tomcat12启动流程源码分析
信息: Server.服务器版本: Apache Tomcat/12.0.x-dev 信息: Java虚拟机版本: 21下载源码https://github.com/apache/tomcat,并用idea打开,配置ant编译插件,或者使用我的代码 启动脚本是/bin/startup.bat,内部又执行了bin\cata…...
Pycharm 使用教程
一、基本配置 1. 切换Python解释器 pycharm切换解释器版本 2. pycharm虚拟环境配置 虚拟环境的目的:创建适用于该项目的环境,与系统环境隔离,防止污染系统环境(包括需要的库)虚拟环境配置存放在项目根目录下的 ven…...
数据仓库: 9- 数据仓库数据治理
目录 9- 数据治理9.1 数据标准化9.1.1 数据标准化的定义9.1.2 数据标准化的重要性9.1.3 数据标准化的主要内容9.1.4 数据标准化的实施步骤9.1.5 数据标准化常用工具9.1.6 数据标准化的挑战与应对策略9.1.7 案例分析9.1.8 总结 9.2 主数据管理(MDM)9.2.1 主数据管理的核心目标9.…...
Kutools for Excel 简体中文版 - 官方正版授权
Kutools for Excel 是一款超棒的 Excel 插件,就像给你的 Excel 加了个超能助手。它有 300 多种实用功能,现在还有 AI 帮忙,能把复杂的任务变简单,重复的事儿也能自动搞定,不管是新手还是老手都能用得顺手。有了它&…...
回归预测 | MATLAB实MLR多元线性回归多输入单输出回归预测
回归预测 | MATLAB实MLR多元线性回归多输入单输出回归预测 目录 回归预测 | MATLAB实MLR多元线性回归多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB实MLR多元线性回归多输入单输出回归预测。 程序设计 完整代码:回…...
lerna使用指南
lerna版本 以下所有配置命令都是基于v8.1.9,lerna v5 v7版本差别较大,在使用时,注意自身的lerna版本。 lerna开启缓存及缓存配置 nx缓存是v5版本以后才有的,小于该版本的无法使用该功能。 初始化配置 缓存配置文件nx.json&am…...
LightGCN:为推荐系统简化图卷积网络的创新之作
LightGCN: Simplifying and Powering Graph Convolution Network for RecommendationSIGIR2020Collaborative Filtering, Recommendation, Embedding Propagation, Graph Neural Network 🌟 研究背景 在信息爆炸的互联网时代,个性化推荐系统成为缓解信…...
【图像去噪】论文精读:High-Quality Self-Supervised Deep Image Denoising(HQ-SSL)
请先看【专栏介绍文章】:【图像去噪(Image Denoising)】关于【图像去噪】专栏的相关说明,包含适配人群、专栏简介、专栏亮点、阅读方法、定价理由、品质承诺、关于更新、去噪概述、文章目录、资料汇总、问题汇总(更新中) 文章目录 前言Abstract1 Introduction2 Convoluti…...
Elasticsarch:使用全文搜索在 ES|QL 中进行过滤 - 8.17
8.17 在 ES|QL 中引入了 match 和 qstr 函数,可用于执行全文过滤。本文介绍了它们的作用、使用方法、与现有文本过滤方法的区别、当前的限制以及未来的改进。 ES|QL 现在包含全文函数,可用于使用文本查询过滤数据。我们将回顾可用的文本过滤方法…...
17.C语言输入输出函数详解:从缓存原理到常用函数用法
目录 1.前言2.缓存和字节流3.printf4.scanf5.sscanf6.getchar与putchar7.puts与gets 1.前言 本篇原文为:C语言输入输出函数详解:从缓存原理到常用函数用法。 更多C进阶、rust、python、逆向等等教程,可点击此链接查看:酷程网 C…...
高等数学学习笔记 ☞ 不定积分与积分公式
1. 不定积分的定义 1. 原函数与导函数的定义: 若函数可导,且,则称函数是函数的一个原函数,函数是函数的导函数。 备注: ①:若函数是连续的,则函数一定存在原函数,反之不对。 ②&…...
Debye-Einstein-模型拟合比热容Python脚本
固体比热模型中的德拜模型和爱因斯坦模型是固体物理学中用于估算固体热容的两种重要原子振动模型。 爱因斯坦模型基于三种假设:1.晶格中的每一个原子都是三维量子谐振子;2.原子不互相作用;3.所有的原子都以相同的频率振动(与德拜…...
Ubuntu24.04安装AppImage报错AppImages require FUSE to run.
报错如下: 解决: sudo apt install libfuse2t64如果不行: sudo add-apt-repository universe sudo apt install libfuse2t64安装时又报错: [10354:0109/100149.571068:FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox hel…...
3_CSS3 渐变 --[CSS3 进阶之路]
CSS3 引入了渐变(gradients),它允许在两个或多个指定的颜色之间显示平滑的过渡。CSS3 支持两种类型的渐变: 线性渐变(Linear Gradients):颜色沿着一条线性路径变化,可以是水平、垂直…...
uniapp 左右滑动切换Tab
各种开发会遇到很多奇葩的需求,今天这个是在页面 左右滑动,然后自动去切换Tab <viewtouchstart"touchStart"touchcancel"touchCancel"touchend"touchEnd"><components is"xxx"/></view>//---…...
STM32 FreeRTOS 任务创建和删除实验(动态方法)
动态创建,堆栈是在FreeRTOS管理的堆内存里,注意任务不要重复创建。 xxxxx_STACK_SIZE 128 uxTaskGetStackHighWaterMark()获取指定任务的任务栈的历史剩余最小值,根据这个结果适当调整启动任务的大小。 实验目标 学会 xTaskCreate( ) 和 vTaskDelete( ) 的使用: start_…...
宝塔面板 申请证书后 仍然提示不安全
证书显示有效,但是网站显示不安全 导致的原因是引入静态文件使用的是HTTP,查看方法为F12打开console控制台 可以看到静态文件全部都是HTTP 网站采用wordpress搭建,基于问题解决,其他方式搭建也是一样,处理掉所有的H…...
透明部署、旁路逻辑串联的区别
背景 需讨论防火墙到底是串联,还是旁挂。 通常串联指的就是“透明部署”,旁挂指的就是“逻辑串联”。 透明部署(串联) 也称为透明模式或桥接模式,是一种安全设备的部署方式。在这种模式下,安全设备被串联…...
C++实现设计模式---原型模式 (Prototype)
原型模式 (Prototype) 原型模式 是一种创建型设计模式,它通过复制现有对象来创建新对象,而不是通过实例化。 意图 使用原型实例指定要创建的对象类型,并通过复制该原型来生成新对象。提供一种高效创建对象的方式,尤其是当对象的…...
Canvas简历编辑器-选中绘制与拖拽多选交互方案
Canvas简历编辑器-选中绘制与拖拽多选交互方案 在之前我们聊了聊如何基于Canvas与基本事件组合实现了轻量级DOM,并且在此基础上实现了如何进行管理事件以及多层级渲染的能力设计。那么此时我们就依然在轻量级DOM的基础上,关注于实现选中绘制与拖拽多选交…...