TCP/IP和UDP协议的发展历程
TCP/IP和UDP协议的发展历程
引言
互联网的发展史是人类技术创新的辉煌篇章,而在这一发展过程中,通信协议发挥了奠基性的作用。TCP/IP(传输控制协议/互联网协议)和UDP(用户数据报协议)作为互联网通信的基础协议,支撑着我们今天使用的几乎所有网络服务。本文将深入探讨这两个关键协议的发展历程、技术特点、应用场景以及未来趋势,以期对互联网的基础设施有更全面的认识。
在数字通信网络的早期阶段,各种计算机系统和网络使用不同的协议进行通信,导致互操作性差,信息交换困难。TCP/IP协议族的出现,为异构网络间的无缝通信提供了标准化解决方案,成为互联网发展的关键推动力。同时,UDP作为TCP的轻量级替代方案,在特定应用场景中提供了更高效的数据传输机制。这两种协议的共存与互补,构成了现代互联网通信的基础框架。
TCP/IP和UDP的技术特性
TCP协议的核心特性
传输控制协议(TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。其核心特性包括:
-
面向连接:通信双方在数据传输前需要建立连接,传输完成后需要断开连接。这种连接是逻辑上的,通过三次握手建立,四次挥手断开。
-
可靠传输:TCP使用序列号、确认应答、超时重传等机制保证数据的可靠传输。发送端为每个数据包分配序列号,接收端收到后返回确认应答。若发送端在一定时间内未收到确认,则重新发送该数据包。
-
流量控制:通过滑动窗口机制,接收方可以告知发送方自己的接收能力,避免发送方发送数据过快导致接收方缓冲区溢出。
-
拥塞控制:TCP通过慢启动、拥塞避免、快速重传和快速恢复等算法,动态调整发送速率,避免网络拥塞。
-
字节流服务:TCP将应用层数据视为无结构的字节流,不保留应用层的消息边界。
-
全双工通信:支持数据在两个方向上同时传输。
UDP协议的核心特性
用户数据报协议(UDP)是一种无连接的传输层协议,提供简单的不可靠数据传输服务。其核心特性包括:
-
无连接:UDP不需要在数据传输前建立连接,也不需要在传输后断开连接,减少了延迟和开销。
-
不保证可靠性:UDP不使用确认应答、超时重传等机制,数据包可能会丢失、重复或失序,且不会通知发送方。
-
无流量控制与拥塞控制:UDP不会因为网络拥塞而降低发送速率,可能导致网络拥塞恶化,但也使其在实时应用中表现更好。
-
保留消息边界:UDP保留应用层的消息边界,一次发送的数据在接收时仍然是一个完整的数据包。
-
支持多播和广播:UDP支持一对多的通信模式,适用于流媒体和网络游戏等应用。
-
头部开销小:UDP头部仅包含源端口、目标端口、长度和校验和四个字段,总共8个字节,远小于TCP的20字节基本头部。
TCP与UDP的主要区别
下表详细比较了TCP和UDP在各方面的区别:
特性 | TCP | UDP |
---|---|---|
连接性 | 面向连接 | 无连接 |
可靠性 | 可靠传输,保证数据完整性 | 不可靠传输,可能丢包 |
传输方式 | 字节流 | 数据报文 |
消息边界 | 不保留消息边界 | 保留消息边界 |
传输速度 | 相对较慢 | 相对较快 |
头部大小 | 20-60字节 | 8字节 |
流量控制 | 有(滑动窗口) | 无 |
拥塞控制 | 有(多种算法) | 无 |
顺序保证 | 保证顺序 | 不保证顺序 |
应用场景 | Web浏览、邮件、文件传输 | 流媒体、DNS、VoIP、游戏 |
建立连接 | 三次握手 | 不需要建立连接 |
断开连接 | 四次挥手 | 不需要断开连接 |
状态维护 | 需要维护连接状态 | 无状态 |
资源消耗 | 较高 | 较低 |
广播支持 | 不支持 | 支持 |
TCP/IP和UDP的应用场景
TCP主要应用场景
TCP凭借其可靠传输的特性,在以下应用场景中被广泛采用:
-
Web浏览:HTTP/HTTPS协议构建在TCP之上,用于网页浏览,确保网页内容的完整和正确传输。
-
文件传输:FTP、SFTP等文件传输协议使用TCP,确保文件在传输过程中不会丢失或损坏。
-
电子邮件:SMTP、POP3、IMAP等电子邮件协议基于TCP,保证邮件内容的完整性。
-
远程终端:SSH、Telnet等远程终端协议使用TCP,确保命令和响应的准确传输。
-
数据库访问:几乎所有数据库访问协议都使用TCP,确保数据的一致性和完整性。
-
流媒体(需缓冲的):一些对可靠性要求高的流媒体应用,尤其是那些可以接受一定延迟的场景。
UDP主要应用场景
UDP的低延迟和实时性特点,使其在以下场景中表现优异:
-
实时流媒体:音视频直播、IP电话(VoIP)、视频会议等对实时性要求高的应用。
-
在线游戏:特别是多人实时游戏,需要快速传递玩家状态和动作信息。
-
域名解析:DNS服务主要使用UDP进行域名查询,因为查询通常简短且需要快速响应。
-
网络时间同步:NTP(网络时间协议)使用UDP来同步计算机时钟。
-
IoT设备通信:物联网设备通常资源有限,使用轻量级的UDP进行通信可以节省资源。
-
广播和多播应用:如IPTV等需要向多个接收者同时发送数据的场景。
常见应用协议及其使用的传输层协议
下表列出了一些常见的应用层协议及其使用的传输层协议:
应用协议 | 传输协议 | 默认端口 | 主要用途 |
---|---|---|---|
HTTP/HTTPS | TCP | 80/443 | 网页浏览 |
FTP | TCP | 20/21 | 文件传输 |
SMTP | TCP | 25 | 发送电子邮件 |
POP3 | TCP | 110 | 接收电子邮件 |
IMAP | TCP | 143 | 接收电子邮件 |
SSH | TCP | 22 | 安全远程登录 |
Telnet | TCP | 23 | 远程登录 |
DNS | UDP/TCP | 53 | 域名解析 |
DHCP | UDP | 67/68 | 动态主机配置 |
TFTP | UDP | 69 | 简单文件传输 |
SNMP | UDP | 161/162 | 网络管理 |
RTP | UDP | 可变 | 实时传输(音视频) |
SIP | UDP/TCP | 5060/5061 | 会话初始化(VoIP) |
NTP | UDP | 123 | 网络时间同步 |
QUIC | UDP | 443 | 快速网页加载(HTTP/3) |
TCP/IP和UDP的演进与发展趋势
IPv4到IPv6的迁移
IPv4定义于1981年,使用32位地址空间,理论上可以支持约43亿个唯一IP地址。随着互联网的迅猛发展,IPv4地址空间面临枯竭的问题。为解决这一问题,IPv6于1998年标准化,提供了128位地址空间,理论上可以支持约340万亿亿亿个地址。
IPv6不仅仅是地址空间的扩展,还带来了多方面的改进:
-
简化的头部格式:IPv6头部固定长度,提高了路由处理效率。
-
内置的安全性:IPv6在设计中集成了IPsec,提供网络层的安全性。
-
改进的组播支持:IPv6改进了组播的实现,并引入了新的"任播"概念。
-
无需NAT:充足的地址空间使得NAT(网络地址转换)不再必要,恢复了端到端通信模型。
-
自动配置:IPv6支持无状态地址自动配置,减少了配置负担。
尽管IPv6带来了众多优势,但全球范围内从IPv4到IPv6的过渡进程仍在进行中,主要采用双栈技术(同时支持IPv4和IPv6)、隧道技术和转换技术来实现平滑迁移。
TCP的演进和优化
TCP自标准化以来经历了多次演进,关键改进包括:
-
拥塞控制算法的改进:从最初的Tahoe算法,到Reno、New Reno,再到如今广泛使用的CUBIC、BBR等算法,TCP的拥塞控制机制不断优化,以适应不同的网络环境。
-
快速打开(TCP Fast Open, TFO):允许在TCP握手阶段就发送数据,减少连接建立的延迟。
-
选择性确认(Selective Acknowledgment, SACK):允许接收方只确认接收到的TCP段,而不是累积确认,提高了数据丢失情况下的重传效率。
-
时间戳选项:提供了更精确的往返时间(RTT)测量,改进了超时和重传机制。
-
窗口缩放选项:允许窗口大小超过16位字段的限制,支持更高的吞吐量。
-
显式拥塞通知(ECN):允许路由器在拥塞即将发生时通知端点,而不是等到丢包发生。
UDP的新应用与QUIC协议
随着实时应用的普及,UDP的重要性日益提升。特别是在2012年,Google提出了基于UDP的新协议QUIC(Quick UDP Internet Connections),后来成为HTTP/3的基础。QUIC结合了TCP和UDP的优点:
-
建立在UDP之上:利用UDP的低延迟特性,避免了TCP握手的开销。
-
集成TLS安全:内置加密,简化了安全实现。
-
多路复用:在单个连接上支持多个数据流,避免了队头阻塞问题。
-
改进的拥塞控制:实现了类似TCP的拥塞控制,但更为灵活和创新。
-
连接迁移:支持客户端IP地址变化时保持连接,有利于移动设备。
QUIC的成功表明,基于UDP构建的高层协议可以提供类似TCP的可靠性,同时保持UDP的低延迟优势,这代表了传输协议的一个重要发展方向。
物联网和5G时代的协议适应
随着物联网(IoT)和5G技术的发展,传输协议面临新的挑战和机遇:
-
轻量级协议:为资源受限的IoT设备设计的MQTT、CoAP等协议,在保持可靠性的同时降低了开销。
-
时间敏感网络(TSN):为工业物联网设计的确定性网络技术,提供严格的延迟和抖动保证。
-
多路径TCP(MPTCP):允许TCP连接同时使用多个网络路径,提高可靠性和吞吐量。
-
边缘计算优化:协议正在适应边缘计算架构,减少与云端的通信延迟。
-
切片感知协议:适应5G网络切片技术,根据不同服务类型优化传输行为。
网络协议的安全考量
TCP/IP的安全挑战
TCP/IP设计之初并未充分考虑安全性,这导致了一系列安全挑战:
-
TCP SYN洪水攻击:攻击者发送大量SYN包但不完成握手,耗尽服务器资源。
-
IP欺骗:攻击者伪造源IP地址,隐藏自己的身份或实施反射攻击。
-
会话劫持:攻击者通过预测序列号,劫持已建立的TCP连接。
-
中间人攻击:攻击者位于通信双方中间,可以监听或修改传输的数据。
-
分片攻击:通过特殊构造的IP分片,绕过防火墙或导致目标系统崩溃。
安全增强措施
为应对这些挑战,多种安全增强措施被开发出来:
-
IPsec:提供网络层的认证和加密,保护IP数据包的安全。
-
TLS/SSL:在应用层和传输层之间提供加密和认证,是HTTPS等安全协议的基础。
-
SYN cookies:抵御SYN洪水攻击的技术,避免在握手完成前分配资源。
-
DNS安全扩展(DNSSEC):通过数字签名验证DNS记录的真实性,防止DNS欺骗。
-
随机初始序列号:降低序列号被预测的风险,防止会话劫持。
-
端口随机化:客户端使用随机源端口,增加攻击者猜测的难度。
未来网络安全趋势
网络安全的发展趋势包括:
-
零信任网络:假设网络永远不安全,每次访问都需要验证身份和授权。
-
量子安全协议:应对量子计算对现有加密算法的威胁。
-
AI辅助安全:使用人工智能检测和应对网络攻击。
-
区块链应用:利用分布式账本技术增强身份验证和数据完整性。
-
安全即代码:将安全策略作为代码管理,实现自动化和一致性。
总结与展望
协议演进的重要里程碑
TCP/IP和UDP的发展历程中,有几个关键的里程碑事件值得回顾:
年份 | 事件 | 重要性 |
---|---|---|
1969 | ARPANET建立 | 第一个分组交换网络,互联网的前身 |
1974 | TCP/IP概念提出 | 奠定了互联网的基础架构 |
1978 | TCP和IP分离 | 确立了分层网络架构的理念 |
1981 | IPv4标准化 | 定义了互联网主要使用的IP版本 |
1982 | TCP和UDP标准化 | 确立了两个主要传输协议 |
1983 | ARPANET转向TCP/IP | TCP/IP成为互联网的核心协议 |
1989 | WWW概念提出 | Web应用成为TCP/IP最成功的应用 |
1998 | IPv6标准化 | 解决IP地址短缺问题 |
2012 | QUIC协议提出 | 基于UDP的现代传输协议 |
2022 | HTTP/3标准化 | 基于QUIC的HTTP新版本 |
未来发展趋势
展望未来,TCP/IP和UDP的发展可能遵循以下趋势:
-
协议融合:传输协议将继续融合TCP和UDP的优势,如QUIC所示,实现可靠性与低延迟的平衡。
-
自适应优化:协议将更加智能,能够自动适应不同的网络条件和应用需求。
-
专用协议减少:通用协议框架将增加可配置性,减少对专用协议的需求。
-
安全性内置:安全将不再是附加功能,而是协议设计的核心考量。
-
垂直整合:网络协议将更加关注特定垂直领域的需求,如工业物联网、车联网等。
-
可编程网络:软件定义网络(SDN)和网络功能虚拟化(NFV)将使网络协议更加灵活可配置。
-
边缘智能:协议将适应边缘计算的兴起,优化边缘节点之间的通信。
结语
TCP/IP和UDP作为互联网的基础协议,已经走过了半个世纪的发展历程。从最初连接少数几台计算机的实验网络,到如今支撑着全球数十亿设备互联的技术基础,这些协议展现了令人惊叹的适应性和可扩展性。
尽管技术在不断革新,新的协议和标准层出不穷,但TCP/IP协议族的核心理念——分层设计、端到端原则、尽力而为服务——仍然影响着现代网络的发展。随着物联网、5G、边缘计算等新技术的兴起,我们有理由相信,这些基础协议将继续演进,适应新的需求,并在可预见的未来继续作为数字世界的通信基石。
相关文章:
TCP/IP和UDP协议的发展历程
TCP/IP和UDP协议的发展历程 引言 互联网的发展史是人类技术创新的辉煌篇章,而在这一发展过程中,通信协议发挥了奠基性的作用。TCP/IP(传输控制协议/互联网协议)和UDP(用户数据报协议)作为互联网通信的基础…...
LeetCode 259 题全解析:Swift 快速找出“满足条件”的三人组
文章目录 摘要描述示例 1:示例 2:示例 3: 题解答案(Swift)题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 本文围绕 LeetCode 259 题“较小的三数之和”,通过 Swift 给出两种解法,并…...
【MySQL】MySQL表的增删改查(CRUD) —— 上篇
目录 MySQL表的增删改查(CRUD) 1. 新增(Create)/插入数据 1.1 单行数据 全列插入 insert into 表名 values(值, 值......); 1.2 单行数据 指定列插入 1.3 多行数据 指定列插入 1.4 关于时间日期(datetime&am…...
基于大模型的腹股沟疝诊疗全流程风险预测与方案制定研究报告
目录 一、引言 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与创新点 二、大模型技术概述 2.1 大模型基本原理 2.2 常用大模型类型及特点 2.3 大模型在医疗领域的应用潜力 三、腹股沟疝诊疗流程分析 3.1 腹股沟疝的发病机制与分类 3.2 传统术前评估方法与局…...
使用nssm将Nginx配置为Windows服务
使用nssm将Nginx配置为Windows服务 下载nssm工具 :使用NSSM创建服务启动并验证服务管理服务(启动/停止/重启) 下载nssm工具 : nssm下载网址 下载到指定路径下,解压就行。 使用NSSM创建服务 winr打开运行命令框&am…...
(8)VTK C++开发示例 --- 交互式3D部件
文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 这个例子介绍了3D小部件(vtkBoxWidget)。3D小部件利用了前面介绍的事件/观察者设计模式。它们…...
ReAct、CoT 和 ToT:大模型提示词推理架构的对比分析
ReAct、CoT 和 ToT:大模型提示词推理架构的对比分析 在大型语言模型(LLM)的研究与应用中,如何有效提升模型在复杂任务上的推理能力是关键问题之一。目前,ReAct(Reasoning and Acting)、CoT&…...
Evidential Deep Learning和证据理论教材的区别(主要是概念)
最近终于彻底搞懂了Evidential Deep Learning,之前有很多看不是特别明白的地方,原来是和证据理论教材(是的,不只是国内老师写的,和国外的老师写的教材出入也比较大)的说法有很多不一样,所以特地…...
golang context源码
解析 context结构 Deadline:返回 context 的过期时间; Done:返回 context 中的 channel; Err:返回错误; Value:返回 context 中的对应 key 的值. type Context interface {Deadline() (deadl…...
VSCODE插值表达式失效问题
GET https://cdn.jsdelivr.net/npm/vue2.6.14/dist/vue.js net::ERR_CONNECTION_-CSDN博客 更换正确的vue域名 GET https://cdn.jsdelivr.net/npm/vue2.6.14/dist/vue.js net::ERR_CONNECTION_ <script src"https://unpkg.com/vue2.6.14/dist/vue.js"></sc…...
6.VTK 颜色
文章目录 概念RGB示例HSV示例 概念 RGB颜色系统:通过红(R)、绿(G)、蓝(B)三个颜色分量的组合来定义颜色。每个分量的取值范围是0到1,其中(0, 0, 0)代表黑色,而(1, 1, 1)代表白色。可以使用vtkProperty::SetColor(r, g, b)方法为Actor设置颜色…...
MQTTClient.c的线程模型与异步事件驱动
MQTTClient.c的线程模型与异步事件驱动 1. 多线程架构设计 MQTTClient.c通过分离网络I/O和用户逻辑线程实现异步通信,核心设计如下: sequenceDiagramparticipant 主线程 as 主线程(用户调用)participant 发送队列 as 发送队列pa…...
Flutter异常Couldn‘t find dynamic library in default locations
Flutter项目在Windows系统使用ffigen生成代码时报下面的错误: [SEVERE] : Couldnt find dynamic library in default locations. [SEVERE] : Please supply one or more path/to/llvm in ffigens config under the key llvm-path. Unhandled exception: Exception: …...
在PyCharm中部署AI模型的完整指南
引言 随着人工智能技术的快速发展,越来越多的开发者开始将AI模型集成到他们的应用程序中。PyCharm作为一款强大的Python IDE,为AI开发提供了出色的支持。本文将详细介绍如何在PyCharm中部署AI模型,从环境配置到最终部署的完整流程。 第一部分:准备工作 1. 安装PyCharm …...
6.6.图的广度优先遍历(英文缩写BFS)
树是一种特殊的图,树的广度优先遍历即层次遍历,所以会从树的角度入手图的广度优先遍历: BFS与DFS的区别在于,BFS使用了队列,DFS使用了栈 一.广度优先遍历: 1.树的广度优先遍历: 详情见"…...
练习(杨辉三角、字符串旋转)
一、 以下程序执行的结果: int main() {//0~255unsigned char a 200;//00000000000000000000000011001000//11001000 - a 截断unsigned char b 100;//00000000000000000000000001100100//01100100 - b unsigned char c 0;c a b;//11001000 - a//0110010…...
L1-7 矩阵列平移
题目 给定一个 nn 的整数矩阵。对任一给定的正整数 k<n,我们将矩阵的偶数列的元素整体向下依次平移 1、……、k、1、……、k、…… 个位置,平移空出的位置用整数 x 补。你需要计算出结果矩阵的每一行元素的和。 输入格式: 输入第一行给出…...
webgl入门实例-11模型矩阵 (Model Matrix)基本概念
WebGL 模型矩阵 (Model Matrix) 在WebGL和3D图形编程中,模型矩阵(Model Matrix)是将物体从局部坐标系(模型空间)转换到世界坐标系的关键变换矩阵。 什么是模型矩阵? 模型矩阵是一个4x4的矩阵,用于表示物体在世界空间中的位置、旋转和缩放。…...
【漫话机器学习系列】209.均值的标准误差(Standard Error of the Mean)
均值的标准误差(Standard Error of the Mean)详解 在统计学中,我们经常会遇到“均值的标准误差”这个概念,英文称为 Standard Error of the Mean(简称 SEM)。它是对样本均值作为总体均值估计的可靠程度的一…...
Multi Agents Collaboration OS:文档合规性及质量检测助手设计及实践
文档审查及质量检测背景 随着企业运营和知识管理的日益复杂,文档的合规性与质量成为确保信息准确、流程顺畅及风险控制的关键环节。传统上,人工进行文档的合规性和质量检测不仅耗时耗力,且易受主观因素影响,难以保证检测的全面性…...
Vue Teleport 及其在 SSR 中的潜在问题
Vue 3 的 Teleport 特性为开发者提供了更灵活的 DOM 结构控制能力,但在服务端渲染(SSR)场景中,它可能引发一些需要注意的问题。本文将深入探讨 Teleport 的核心机制及其在 SSR 中的使用陷阱。 一、Teleport 核心机制解析 1. 基本…...
Fastapi 日志处理
uvicorn 日志处理总结: 一、日志的结构 日志结构如下: {"version": 1,"disable_existing_loggers": false,"formatters": {},"handlers": {},"loggers": {} }loggers 用于定义日志处理最顶层的标识…...
FME实现矢量建筑面shp拉伸并贴纹理
文章目录 效果2、数据准备3、整理流程图4、操作步骤4.1 打开软件4.2 添加shp数据4.3 添加Extruder转换器4.4 添加AppearanceSetter转换器4.5 添加png纹理数据4.6 添加输出节点4.7 添加Logger节点4.8 执行5、执行结果效果 2、数据准备 (1)建筑面shp (2)纹理 test.png 其中s…...
仿腾讯会议项目实现——设置配置文件
目录 1、初始化配置 2、实现初始化配置的函数 3、修改配置文件内的ip地址 1、初始化配置 Ckernel.h 2、实现初始化配置的函数 3、修改配置文件内的ip地址 首先修改IP 运行出现设置的IP, 找到运行的配置文件,修改成自己当前的ip 将函数运行条件改成非…...
1187. 【动态规划】竞赛总分
题目描述 学生在我们USACO的竞赛中的得分越多我们越高兴。我们试着设计我们的竞赛以便人们能尽可能的多得分。 现在要进行一次竞赛,总时间T固定,有若干类型可选择的题目,每种类型题目可选入的数量不限,每种类型题目有一个si(解答…...
从零开始学Python游戏编程31-类3
2.6 run()方法 run()方法的作用是在while循环中调用以上方法,运行游戏。代码如图11所示。 图11 run()方法代码 其中,第43行控制while循环的是实例属性running,在图7所示的__init__()方法中定义;第44-46行代码分别调用了processI…...
Transformer 架构 - 解码器 (Transformer Architecture - Decoder)
一、解码器整体结构:多层堆叠设计 Transformer解码器由N个相同结构的解码器层堆叠而成(通常N=6),每层包含三个核心子模块(图1) 1 5 12 : 带掩码的多头自注意力层(Masked Multi-Head Self-Attention)编码器-解码器注意力层(Encoder-Deco…...
解锁健康生活:养生新主张
在生活节奏日益加快的当下,健康养生不再是中老年人的专属话题,越来越多的人开始意识到,它是维持生命活力、抵御疾病的重要保障。 中医养生讲究 “药食同源”,在饮食上,我们可以根据季节变化调整食谱。春天气候多变&…...
__call__ 方法
__call__ 是 Python 中的一个魔法方法,也称为类方法。 它的作用是将类的实例变成可调用对象,类似于像函数一样被调用。 __call__ 使用举例 class MyClass:def __call__(self, x, y):return x yobj MyClass() print(obj(1, 2)) 对比其他类/对象的使用…...
济南通过首个备案生活服务大模型,打造行业新标杆
近日,一则振奋人心的消息在人工智能领域传开:济南本土企业丽阳神州智能科技有限公司自主研发的 “丽阳雨露” 大模型成功通过国家网信办的备案。这一成果不仅是济南企业在科技创新道路上的重大突破,更标志着我国在生活服务领域的人工智能应用…...
UE5有些场景的导航生成失败解决方法
如果导航丢失,就在项目设置下将: 即可解决问题: 看了半个小时的导航生成代码发现,NavDataSet这个数组为空,导致异步构建导航失败。 解决 NavDataSet 空 无法生成如下: 当 NavDataSet 为空的化 如果 bAut…...
STM32使用rand()生成随机数并显示波形
一、随机数生成 1、加入头文件:#include "stdlib.h" 2、定义一个用作生成随机数种子的变量并加入到滴答定时器中不断自增:uint32_t run_times 0; 3、设置种子:srand(run_times);//每次生成随机数前调用一次为佳 4、生成一个随…...
继承的了解与学习
目录 1. 继承的概念及定义 1.1 继承的概念 1.2继承的名称 1.3继承方式 1.4继承类模板 2.基类和派生类之间的转化 3.继承中的作用域 4.派生类的默认成员函数 5.继承与友元 6.继承与静态函数 7.多继承与其菱形继承问题 8.虚继承 9.继承和组合 1. 继承的概念及定义 …...
如何精通C++编程?
如果从学生时代算起的话,我学习和使用C已经差不多快十年了,仍然不敢说自己已经掌握了C的全部特性,但或许能够给出一些有用的建议吧。 我学习C全靠自学,花费了不少的功夫,在这里分享一些学习心得,希望对大家…...
【科研绘图系列】R语言绘制多个气泡图组合图(bubble plot)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图函数画图系统信息介绍 【科研绘图系列】R语言绘制多个气泡图组合图(bubble plot) 加载R包 library(dplyr) library(tidyr) library(ggp…...
利用大模型实现地理领域文档中英文自动化翻译
一、 背景描述 在跨国性企业日常经营过程中,经常会遇到专业性较强的文档翻译的需求,例如法律文书、商务合同、技术文档等;以往遇到此类场景,企业内部往往需要指派专人投入数小时甚至数天来整理和翻译,效率低下&#x…...
Oracle 19c部署之手工建库(四)
#Oracle #19c #手工建库 手工创建Oracle数据库(也称为手工建库)是指在已经安装了Oracle数据库软件的基础上,通过手动执行一系列命令和步骤来创建一个新的数据库实例。这种方法与使用Database Configuration Assistant (DBCA)等工具自动创建数…...
Leetcode 2158. 每天绘制新区域的数量【Plus题】
1.题目基本信息 1.1.题目描述 有一幅细长的画,可以用数轴来表示。 给你一个长度为 n 、下标从 0 开始的二维整数数组 paint ,其中 paint[i] [starti, endi] 表示在第 i 天你需要绘制 starti 和 endi 之间的区域。 多次绘制同一区域会导致不均匀&…...
使用最新threejs复刻经典贪吃蛇游戏的3D版,附完整源码
基类Entity 建立基类Entity,实现投影能力、动画入场效果(从小变大的弹性动画)、计算自己在地图格位置的方法。 // 导入gsap动画库(用于创建补间动画) import gsap from gsap// 定义Entity基类 export default class …...
Google优化搜索体验:全新动态摘要功能(Beta)为欧洲用户带来更丰富的结果
Google持续推动搜索体验的创新,最新推出的动态摘要(Dynamic Snippets)功能(Beta版)为欧洲经济区(EEA)的用户和企业带来了全新的交互方式。2025年4月,Google更新了动态摘要的文档&…...
[苍穹外卖 | 项目日记] 第三天
前言 实现了新增菜品接口实现了菜品分页查询接口实现了删除菜品接口实现了根据id查询菜品接口实现了修改菜品接口 今日收获: 今日的这几个接口其实和之前写的对员工的操作是一样的,都是一整套Curd操作,所以今天在技术层面上并没有…...
【Python爬虫基础篇】--2.模块解析
目录 1.urllib库 1.1.request模块 1.1.1、urllib.request.urlopen() 函数 1.1.2.urllib.request.urlretrieve() 函数 1.2. error模块 1.3. parse 模块 2. BeautifulSoup4库 2.1.对象种类 2.2.对象属性 2.2.1.子节点 2.2.2.父节点 2.2.3.兄弟节点 2.2.4.回退和前进 …...
LabVIEW技巧——获取文件版本信息
获取可执行文件(exe)版本信息的几种方法 方法1. LabVIEW自带函数 labview自带了获取文件版本号的VI,但是没有开放到程序框图的函数选板中,在该目录下可以找到:...\LabVIEW 20xx\vi.lib\Platform\fileVersionInfo.llb…...
【软件工程】用飞书画各种图(流程图,架构图···)
笔者在做服务外包大赛的时候被文档内容的编写反复折磨,网上的工程图绘画工具要么是展示效果不佳,要么要收大几百的VIP费,最后发现飞书竟然可以直接绘画并插入示意图。 一、为什么选择飞书文档画流程图? 完全免费,无广…...
RFID图书管理系统如何重构数字化仓储管理新生态
引言 在图书馆与出版行业数字化转型进程中,RFID图书管理系统正打破传统人工管理的效率瓶颈,通过与数字化仓储管理系统的深度融合,实现从图书采购、入库到借阅的全链路智能化。本文结合RFID固定资产管理软件的应用逻辑,解析这一技…...
如何校验一个字符串是否是可以正确序列化的JSON字符串呢?
方法1:先给一个比较暴力的方法 try {JSONObject o new JSONObject(yourString); } catch (JSONException e) {LOGGER.error("No valid json"); } 方法2: Object json new cn.hutool.json.JSONTokener("[{\"name\":\"t…...
操作系统-PV
🧠 背景:为什么会有 PV? 类比:内存(生产者) 和 CPU(消费者) 内存 / IO / 磁盘 / 网络下载 → 不断“生产数据” 例如:读取文件、下载视频、从数据库加载信息 CPU → 负…...
工厂方法模式详解及c++代码实现(以自动驾驶感知模块中的应用为例)
模式定义 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,通过定义抽象工厂接口将对象创建过程延迟到子类实现,实现对象创建与使用的解耦。该模式特别适合需要动态扩展产品类型的场景。 自动驾驶感知场景分析 自动驾…...
Jsp技术入门指南【五】详细讲解jsp结构页面
Jsp技术入门指南【五】详细讲解jsp结构页面 前言一、JSP页面的结构二、JSP页面的部件1. 指令(核心控制部件)2. 动作(页面交互部件,了解即可)3. 脚本(Java逻辑嵌入部件) 三、JSP指令详解1.1 JSP指…...
游戏APP如何抵御DDoS攻击与黑客勒索?实战防护全攻略
一、游戏行业安全挑战与攻击危害 游戏APP因高实时性、高并发及虚拟资产交易特性,成为DDoS攻击和勒索的重灾区,典型威胁包括: DDoS攻击瘫痪服务: UDP Flood:针对游戏服务器端口(如UDP 7777)发起…...