【计网】TCP协议的拥塞控制与流量控制
拥塞控制与流量控制的区别
流量控制
流量控制主要是控制端到端(发送端和接收端)之间的数据传输量,是局部的机制。
- 目的:防止发送方发送数据过快导致接收方来不及处理
- 实现方式:通过滑动窗口机制,接收方通知发送方自己的接收窗口大小
- 工作层次:传输层(TCP协议)
- 控制范围:仅限于直接通信的两个端点
- 反馈机制:接收方通过TCP首部的窗口大小字段告知发送方
- 动态特性:接收窗口大小可以动态变化,甚至可以通告为0(零窗口)暂停发送
- 实现位置:在TCP头部保留16位的窗口字段,最大窗口大小为65535字节
滑动窗口机制详解
- 接收窗口:表示接收方还能接收多少字节的数据
- 发送窗口:表示发送方还能发送多少字节的数据
- 窗口左移:当接收方确认接收到数据后,窗口向右滑动
- 窗口大小:可动态调整,根据接收方的处理能力和网络状况变化
零窗口与窗口探测
- 当接收方缓冲区满时,会通告窗口大小为0
- 发送方收到零窗口通知后停止发送数据
- 发送方会定期发送窗口探测报文,询问接收方窗口是否变大
- 防止死锁:如果窗口更新的ACK丢失,可能导致双方永久等待
拥塞控制
拥塞控制是控制整个网络中每台主机的数据发送量,降低路由器的负载,是全局的机制。
- 目的:防止过多的数据注入网络中,避免网络拥塞崩溃
- 实现方式:通过拥塞窗口调整发送数据量
- 工作层次:传输层,但考虑了网络层的状况
- 控制范围:整个网络
- 反馈机制:通过丢包、超时、RTT变化等网络状况间接反馈
- 自适应特性:没有显式反馈,TCP必须自己推断网络状况
- 实现复杂度:由于网络状况难以准确测量,算法较为复杂
拥塞控制的重要性
- 网络资源有限:带宽、缓冲区、处理能力等
- 避免拥塞崩溃:过度拥塞会导致网络吞吐量急剧下降
- 公平性:确保各TCP连接能公平分享网络资源
- 效率:保持较高的网络资源利用率
二者关系
发送窗口 = min(接收窗口,拥塞窗口)
- 接收窗口由对方告知,取决于接收方的处理能力(流量控制)
- 拥塞窗口由发送方根据网络状况自行调整(拥塞控制)
相互作用
- 流量控制关注端到端通信效率,拥塞控制关注整个网络效率
- 两种控制机制相互独立又相互影响
- 实际发送量受到两者的共同约束,取较小值
- 一个侧重接收方利益,一个侧重网络整体利益
拥塞控制详解
拥塞判断机制
如何判断网络拥塞?
-
不拥塞:发出的报文都被顺利地收到ACK确认
- 表明网络通畅,传输正常
- RTT(往返时间)保持稳定
- 吞吐量高,丢包率低
-
严重拥塞:发出的报文未能按时收到ACK,引发超时重传
- 可能是由于网络中报文丢失或延迟过高
- 通常意味着路由器缓存溢出,丢弃了数据包
- 典型特征是RTO(重传超时)计时器到期
-
轻微拥塞:收到冗余的ACK,引发快重传
- 表明部分报文可能乱序或丢失
- 网络开始出现问题,但尚未完全拥塞
- 特征是收到多个重复的ACK(通常是3个)
拥塞的原因与表现
- 缓冲区溢出:路由器队列满导致丢包
- 高延迟:队列积压导致传输延迟增加
- 吞吐量下降:网络有效带宽利用率降低
- 丢包增加:拥塞严重时丢包率上升
- RTT抖动:网络延迟不稳定,波动增大
拥塞应对策略
拥塞了怎么办?
-
迅速减少发送量,避免加重拥塞
-
严重拥塞时(超时重传):
- 将拥塞窗口cwnd重置为1MSS(最大报文段大小)
- 进入慢开始阶段
- 设置慢开始门限ssthresh为当前cwnd的一半
- 指数回退RTO计时器,增加重传间隔
-
轻微拥塞时(快重传):
- 将拥塞窗口cwnd减半
- 设置慢开始门限ssthresh为当前cwnd的一半
- 直接进入拥塞避免阶段
- 不重置RTO计时器
拥塞处理的原则
- 保守性:宁可牺牲一些带宽利用率,也不要加剧网络拥塞
- 响应性:快速对网络状况变化做出反应
- 公平性:确保多个TCP连接能公平分享带宽
- 稳定性:避免发送速率剧烈波动
- 可扩展性:算法在各种网络规模下都能良好工作
拥塞控制的算法
1. 慢开始算法(Slow Start)
- 原理:TCP连接初始或发生严重拥塞后,cwnd从1MSS开始,每收到一个ACK就将cwnd加1
- 特点:
- cwnd按指数级增长(每个RTT翻倍)
- 增长速度快,但起点低
- 直到cwnd达到慢开始门限ssthresh
- "慢"是相对于早期TCP的无控制发送而言
- 实现方式:
初始状态:cwnd = 1MSS 每收到一个ACK:cwnd = cwnd + 1MSS
- 结束条件:
- cwnd ≥ ssthresh时,进入拥塞避免阶段
- 发生超时,重置cwnd为1MSS,ssthresh减半
- 接收到3个重复ACK,进入快恢复
2. 拥塞避免算法(Congestion Avoidance)
- 原理:在网络不拥塞时,谨慎地增加拥塞窗口
- 特点:
- cwnd按线性增长(每个RTT增加1MSS)
- 增长速度慢,避免突然增大流量导致拥塞
- 更平滑的网络利用率
- 渐进式探测可用带宽
- 实现方式:
实际效果:每个RTT内cwnd增加约1MSS每收到一个ACK:cwnd = cwnd + MSS*(MSS/cwnd)
- 数学解释:
- 假设cwnd=4MSS,收到1个ACK时增加MSS*(MSS/cwnd)=MSS/4
- 一个窗口的所有报文确认后,增量累计为4*(MSS/4)=MSS
- 结束条件:
- 发生超时,进入慢开始阶段
- 收到三个重复ACK,进入快恢复阶段
3. 快重传机制(Fast Retransmit)
- 原理:不等超时计时器到期,提前重传丢失的报文段
- 触发条件:接收方收到失序的报文段后立即发送重复ACK,发送方收到3个重复ACK
- 特点:
- 减少等待时间,提高网络效率
- 对网络轻微拥塞有快速响应能力
- 不像超时重传那样大幅降低发送窗口
- 能区分报文丢失和乱序
- 执行过程:
- 接收方发现失序的报文段,立即发送已收到的最大序号的ACK
- 发送方收到3个重复的ACK,立即重传可能丢失的数据
- 不必等待超时计时器到期
- 为什么是3个重复ACK:
- 1-2个重复ACK可能只是网络乱序
- 3个以上重复ACK几乎肯定是报文丢失
- 平衡响应速度与误判概率
4. 快恢复算法(Fast Recovery)
- 原理:配合快重传使用,在检测到轻微拥塞时不直接回到慢开始状态
- 特点:
- 避免了网络利用率的大幅下降
- 适用于轻微拥塞的情况
- 认为网络仍能传输数据,不需要从1MSS重新开始
- 更高效地利用已有带宽
- 实现方式:
ssthresh = cwnd/2 cwnd = ssthresh + 3*MSS # 初始设置为新ssthresh加3个MSS 每收到一个重复ACK:cwnd = cwnd + MSS # 进一步膨胀窗口 收到新数据的ACK后:cwnd = ssthresh # 回到正常拥塞避免状态
- 执行过程:
- 收到3个重复ACK时,将ssthresh设为cwnd的一半
- 重传丢失的报文段
- 将cwnd设为ssthresh加3MSS(对应3个重复ACK)
- 每收到一个重复ACK,cwnd增加1MSS
- 当收到新数据的ACK时,将cwnd设为ssthresh
- 直接进入拥塞避免阶段,而不是慢开始
新型拥塞控制算法
1. TCP Vegas
- 基于延迟的拥塞控制,不依赖丢包来检测拥塞
- 通过监测RTT变化来预测网络拥塞
- 在拥塞发生前就开始减缓发送速率
- 更平滑的传输,减少了不必要的重传
- 能够在高带宽高延迟网络中保持较高吞吐量
2. TCP BIC 和 CUBIC
- 专为高带宽长延迟网络优化
- CUBIC是Linux系统默认的TCP拥塞控制算法
- 使用三次函数曲线调整拥塞窗口
- 在恢复期快速接近最优点,然后稳定探测
- 避免了传统TCP在高带宽网络中的低效率问题
3. BBR (Bottleneck Bandwidth and RTT)
- Google开发的新一代拥塞控制算法
- 直接建模网络的瓶颈带宽和RTT
- 不依赖丢包作为拥塞信号
- 能在高丢包率网络中保持良好吞吐量
- 关注网络带宽最大化和延迟最小化的平衡
TCP拥塞控制的完整过程
-
连接建立:
- 初始化cwnd = 1MSS,ssthresh通常设为较大值(如65535字节)
- 进入慢开始阶段
- 设置初始RTO(重传超时)
-
慢开始阶段:
- cwnd指数增长(每RTT翻倍)
- 发送方每收到一个ACK,cwnd += 1MSS
- 直到cwnd ≥ ssthresh
-
拥塞避免阶段:
- cwnd线性增长(每RTT增加1MSS)
- 发送方每收到一个ACK,cwnd += MSS*(MSS/cwnd)
- 直到发生超时或收到3个重复ACK
-
拥塞发生处理:
- 如果是超时事件(严重拥塞):
- ssthresh = cwnd/2
- cwnd = 1MSS
- 重新进入慢开始阶段
- 重传丢失的数据并应用指数回退
- 如果是3个重复ACK(轻微拥塞):
- ssthresh = cwnd/2
- 重传疑似丢失的数据包
- cwnd = ssthresh + 3MSS(初始快恢复窗口)
- 进入快恢复阶段
- 如果是超时事件(严重拥塞):
-
快恢复阶段:
- 每收到一个重复ACK:cwnd += 1MSS
- 当收到新数据的ACK时:cwnd = ssthresh
- 进入拥塞避免阶段
TCP拥塞控制的高级特性
1. 初始窗口大小演进
- 早期RFC2001:初始cwnd = 1MSS
- RFC2414:初始cwnd = min(4MSS, max(2MSS, 4380 bytes))
- 现代实现(RFC6928):初始cwnd = 10MSS
- 更大的初始窗口减少了慢开始阶段的延迟,加快小文件传输
2. 显式拥塞通知(ECN)
- 传统TCP拥塞控制把丢包视为拥塞信号
- ECN允许路由器直接标记数据包来指示拥塞
- 工作流程:
- 路由器队列即将溢出时不丢弃报文,而是标记ECN位
- 接收方收到标记的报文后,在ACK中设置ECE位
- 发送方收到ECE标记的ACK后,主动降低发送速率
- 优点:
- 减少不必要的重传和超时
- 降低延迟和抖动
- 更早检测到拥塞
3. 适应性RTT估计
- 精确的RTT估计对拥塞控制至关重要
- 自适应RTT算法(Jacobson算法):
SRTT = (1-α)*SRTT + α*R // 平滑RTT,α通常为1/8 RTTVAR = (1-β)*RTTVAR + β*|SRTT-R| // RTT变化,β通常为1/4 RTO = SRTT + 4*RTTVAR // 设置重传超时时间
- RTO下限通常为1秒,重传后进行指数回退
4. SACK (Selective Acknowledgment)
- 传统TCP只能确认连续的数据
- SACK允许接收方明确指出已收到的非连续数据块
- 好处:
- 更高效的重传,只重传实际丢失的数据
- 减少不必要的重传带宽浪费
- 更快恢复网络拥塞
5. 带宽时延乘积问题
- 高速网络环境下的挑战:大带宽×高延迟=大容量
- 传统TCP在高BDP (Bandwidth-Delay Product) 环境下表现不佳:
- 慢开始增长太慢,难以充分利用带宽
- 线性增长阶段需要很长时间达到最优窗口
- 乘性减少导致严重的带宽利用率下降
- 解决方案:
- 更大的初始窗口
- 更加激进的窗口增长算法
- 更小的乘性减少因子
各种版本的TCP拥塞控制对比
TCP Tahoe (最早版本)
- 包含慢开始、拥塞避免和快重传
- 任何丢包都导致回到慢开始
- 存在问题:过于保守,遇到轻微拥塞也会大幅降低速率
TCP Reno (常用版本)
- 加入了快恢复机制
- 区分对待超时和三重重复ACK
- 改进:快重传后不会回到慢开始,而是进入快恢复
- 仍存在的问题:多个包丢失时表现不佳
TCP NewReno
- 改进了Reno在多包丢失时的表现
- 引入"部分确认"概念,在快恢复期间可处理多个丢包
- 直到所有丢失的数据都被确认才退出快恢复
- 缺点:仍然不能处理太多乱序数据
TCP SACK
- 使用选择性确认明确指出哪些数据已收到
- 极大改进了多包丢失时的恢复速度
- 发送方可以精确知道哪些数据需要重传
- 缺点:增加了协议头部开销
TCP CUBIC (现代高性能版本)
- 为高带宽网络优化
- 使用三次函数的窗口增长算法
- 特点:
- 增长函数不依赖于RTT,各连接更公平
- 快速接近上次达到的最大窗口大小
- 窗口增长在最大点附近变缓
- 避免过度拥塞和窗口震荡
拥塞控制的实际应用考量
1. 移动网络中的拥塞控制
- 特点:
- 带宽变化剧烈
- 连接断续
- 高延迟波动
- 优化方向:
- 快速适应带宽变化
- 区分信号丢失和拥塞丢失
- 更积极的窗口增长
- 更保守的窗口减少
2. 数据中心网络拥塞控制
- 特点:
- 低延迟(微秒级)
- 高带宽(10Gbps以上)
- 短连接多
- 优化方向:
- DCTCP (Data Center TCP)
- 使用ECN早期标记拥塞
- 更小的队列和更快的响应速度
- 针对小文件传输优化启动过程
3. 公平性与网络中立性
- 拥塞控制算法影响不同流量的公平性
- 长连接vs短连接不平等问题
- 不同TCP变种之间的带宽竞争
- 网络中立性原则:
- 不同应用应获得公平对待
- 拥塞控制不应偏向特定类型流量
4. TCP与其他协议的交互
- TCP与UDP竞争
- TCP与基于应用层的拥塞控制(如QUIC)
- 多路径TCP (MPTCP):
- 同时使用多个网络路径
- 需要特殊的拥塞控制机制
- 适应路径间性能差异
总结与展望
传统TCP拥塞控制的局限性
- 依赖丢包作为拥塞信号,反应滞后
- 高带宽延迟网络中表现不佳
- 固定参数难以适应多变的网络环境
- 流量模型简单,不适应现代应用复杂的流量模式
未来发展趋势
-
基于学习的拥塞控制:
- 使用机器学习和神经网络模型
- 自适应网络环境变化
- 预测性拥塞控制
-
跨层优化:
- 结合应用层需求与网络层信息
- 更细粒度的资源分配
-
软件定义网络中的拥塞控制:
- 集中控制与决策
- 全局优化网络性能
- 根据流量类型定制控制策略
-
多路径传输优化:
- 同时利用多条网络路径
- 智能负载均衡
- 更高效利用异构网络资源
相关文章:
【计网】TCP协议的拥塞控制与流量控制
拥塞控制与流量控制的区别 流量控制 流量控制主要是控制端到端(发送端和接收端)之间的数据传输量,是局部的机制。 目的:防止发送方发送数据过快导致接收方来不及处理实现方式:通过滑动窗口机制,接收方通…...
Redis - 字典(Hash)结构和 rehash 机制
字典结构 Redis中的字典由dict.h/dict结构表示: typedef struct dict ( //类型特定函数dictType *type;//私有数据 void "privdata;//哈希表 dictht ht[2];//rehash索引 //当rehash不在进行时,值为-1 in trehashidx; } dict; Redis字典所使用的哈希表由dict.h/dictht 结…...
Redis 与 MongoDB 对比分析
Redis 与 MongoDB 对比分析 1. 核心定位 Redis:内存键值数据库,侧重高性能读写和低延迟,常用于缓存、实时分析、消息队列等场景。MongoDB:分布式文档型数据库,侧重灵活的数据模型和大规模数据存储,支持复…...
【愚公系列】《高效使用DeepSeek》058-选题策划
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...
解决 Lettuce 在 Redis 集群模式下的故障转移问题
引言 在高可用系统中,故障转移是确保服务不中断的重要机制。当我们使用 Lettuce 作为 Redis 的 Java 客户端时,如何高效地处理故障转移成为一项关键任务。本篇文章将探讨如何在 Redis 集群模式下配置 Lettuce 以优化故障转移。 背景 在初期设置 Lettu…...
Vim搜索和替换
模式 命令模式 操作过程 键入/开始搜索,找到想要搜索的内容后直接回车,此时光标会从搜索框回到编辑器中。 之后可以 使用小写n跳到下一个符合条件的内容,使用大写N跳到上一个搜索的内容。也可以直接使用上下左右按钮调整光标位置。...
【探商宝】 Llama 4--技术突破与争议并存的开源多模态
核心亮点 混合专家架构(MoE)的全面应用 Llama 4 是 Meta 首个全系列采用 MoE 架构 的模型,通过稀疏激活机制显著提升效率。例如: Llama 4 Scout(中杯):16 位专家,17B 活跃参数&#…...
可发1区的超级创新思路(python 实现):一种轻量化的动态稀疏门控网络
首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 一、应用领域 视频异常检测、生成视频检测。 二、模型解析 该模型由1.关键帧动态选择机制、2.关键帧动态选择机制以及3.关键帧动态选择机制三大核心组件构成,形成端到端的视频异常…...
flink cdc的source数据流如何配置事件时间,如何设置时间语义,分配时间戳并生成水位线
在 Flink CDC 中为 Source 数据流配置事件时间需要结合时间语义设置、时间戳分配和水位线生成三个核心步骤。以下是具体配置方法及注意事项: 1. 设置时间语义 Flink 默认使用处理时间(Processing Time),需显式指定事件时间语义&a…...
Vue3:初识Vue,Vite服务器别名及其代理配置
一、创建一个Vue3项目 创建Vue3项目默认使用Vite作为现代的构建工具,以下指令本质也是通过下载create-vue来构建项目。 基于NodeJs版本大于等于18.3,使用命令行进行操作。 1、命令执行 npm create vuelatest输入项目名称 2、选择附加功能 选择要包含的功…...
医疗场景与事件驱动的高匹配颗粒度医疗智能体研发方向探析(代码版)
结合技术实现、应用场景与挑战展开分析: 一、医疗场景驱动的智能体核心方向 全场景覆盖的诊疗辅助医疗智能体系统编程方案 1.1、技术架构设计 #mermaid-svg-OKB0oAt38jXWNClG {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#m…...
HTML5 浏览器兼容性:让旧浏览器也能拥抱 HTML5
在前端开发领域,HTML5 带来了一系列令人兴奋的新特性和功能,极大地提升了用户体验和开发效率。然而,由于互联网用户使用的浏览器版本千差万别,部分旧版本浏览器并不支持 HTML5,这给开发者带来了兼容性方面的挑战。不过…...
Kubernetes 集群搭建(三):使用dashboard用户界面(需要访问外网获取yaml)
(一)简介 K8s Dashboard是Kubernetes提供的一种基于Web的用户界面工具,用于可视化地管理和监控Kubernetes集群 主要功能: 资源查看与管理: 查看Kubernetes集群中的各种资源,如节点、Pod、服务、部署等。 对…...
【图像处理基石】什么是ISP色彩管理?
在ISP(Image Signal Processor,图像信号处理器)管线中,色彩管理是图像处理流程的核心环节,主要负责从传感器原始数据(RAW)到最终输出图像(如YUV、RGB或JPEG)的色彩转换、…...
金融维度下的公链价值重构:重塑财富新秩序
公链的引言: 众人对 Crypto、Token 的探讨热度居高不下。在此大背景下,我打算另辟蹊径,从金融维度重新剖析区块链分布式账本。那么,我们究竟该如何正确认知它?又该如何搭建起一套从金融视角出发的分析框架呢࿱…...
LeetCode算法题(Go语言实现)_34
题目 考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。 如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。 如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true&…...
# 项目部署指南:Flask、Gradio与Docker实现流程
Python项目部署指南:Flask、Gradio与Docker实践 1. 引言 在机器学习和Web开发中,将模型或应用部署为在线服务是关键一步。本文将介绍如何使用 Flask 和 Gradio 快速构建前端界面,并通过 Docker 容器化实现高效部署,涵盖完整流程图…...
2022第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(题解解析)
记录刷题的过程、感悟、题解。 希望能帮到,那些与我一同前行的,来自远方的朋友😉 大纲: 1、九进制转十进制-(解析)-简单的进制转化问题😄 2、顺子日期-(解析)-考察日期 3…...
UML之序列图的参与者与生命线
序列图是建模过程中必选的一种描述行为的手段,它展示在某些有用的行为中元素之间的消息交换和相互作用。交互是构成行为的一个单元;这些元素必须是可连接元素,通常将这些可连接元素称为交互中的参与者(Participants)。…...
基于Python Flask快速构建网络安全工具资源库的Web应用实践
引言 在网络安全领域,信息收集(OSINT)是渗透测试、漏洞挖掘和威胁分析的关键环节。然而,面对海量工具和分散的技术文档,安全研究人员常需耗费大量时间查找和比对工具信息。本文将介绍如何利用 Python Flask HTML 技…...
xv6-labs-2024 lab1
lab-1 注:实验环境在我的汇编随手记的末尾部分有搭建教程。 0.前置 第零章 xv6为我们提供了多种系统调用,其中,exec将从某个文件里读取内存镜像(这确实是一个好的说法),并且将其替换到调用它的内存空间,也就是这个…...
HTTP Form v.s. Flask-WTF Form v.s. Bootstrap Form
在Flask-WTF和Bootstrap 的Form创建中,添加了页面显示Flash Messages。 相比Flask_WTF, Bootstrap用 render_form(form)渲染样式,自动带错误提示,不需要像Flask_WTF那样手写 for error in ... 。 项目结构: register_app/ ├── HTTP_Form_App.py ├── FlaskWTF_Form…...
Linux网络编程——https的协议及其加密解密方式
目录 一、前言 https协议 常见的加密方式 1、对称加密 2、非对称加密 3、数字签名 1. 只用对称加密 2、只用单一的非对称加密 3、双方都使用非对称加密 4、非对称加密对称加密 证书 证书颁发流程 服务器与客户端的证书验证流程 5、证书非对称加密对称加密 前言 上一…...
Node.js 下载与安装(图文)
下载 官网:【直达:https://nodejs.org/en/】。 点击【Download】,选择【版本,系统】。点击【Windows Installer(.msi)】。 安装 双击【.msi文件】,选择【安装路径】,也可以一直【下一步】。 查看版本 …...
3.31-4.06 Web3 游戏周报:Pebble 玩家留存率登顶,Treasure DAO 面临重组危机
回顾上周的区块链游戏概况,查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【3.31–4.06】Web3 游戏行业动态 链游生态系统 Treasure DAO 因财务危机面临重组,将终止游戏运营和 Treasure Chain3A 链游 Shrapnel 开发商 Neon Machine 深陷财务…...
echarts生成3D立体地图react组件
地图散点图效果: react项目中安装echarts、echarts-gl依赖: npm install echarts echarts-gl 文件目录结构: 地图组件map目录下文件代码,点击散点图圆点触发事件handleCityClick: index.jsx: import { …...
Node.js 中处理 Excel 文件的最佳实践
在现代应用开发中,Excel 文件仍然是数据交换和存储的重要格式之一。在 Node.js 环境中,处理 Excel 文件的需求日益增加。本文将介绍如何在 Node.js 中高效地处理 Excel 文件,涵盖工具选择、基本操作和最佳实践。 1. 选择合适的库 在 Node.js…...
解决Ubuntu系统鼠标不流畅的问题
电脑是联想的台式组装机,安装ubuntu系统(不管是16、18、20、22)后,鼠标都不流畅。最近几天想解决这个问题,于是怀疑到了显卡驱动上。怀疑之前一直用的是集成显卡,而不是独立显卡,毕竟2060的显卡…...
【Linux】虚拟机设置静态IP
主播我今天下午学了几节微服务课,上课的时候,直接把手机拿走了去上课(电脑连的我手机的热点),虚拟机没关,晚上主播我回来继续学,电脑连上热点之后,发现虚拟机连接不上了,…...
Web API:AbortController
Web API:AbortController 主要用途基本工作原理基本用法示例高级用例1. 实现请求超时2. 取消多个请求3. 与其他异步 API 一起使用 浏览器支持总结 主要用途 AbortController 是一个 Web API,主要用于取消一个或多个 Web 请求(如 fetch 请求&…...
服务器配置虚拟IP
服务器配置虚拟IP的核心步骤取决于具体场景,主要包括本地单机多IP配置和高可用集群下的虚拟IP管理两种模式。 一、本地虚拟IP配置(单服务器多IP) 基于Linux系统: 确认网络接口:使用 ip addr 或 ifconfig 查…...
《AI大模型应知应会100篇》第5篇:大模型发展简史:从BERT到ChatGPT的演进
第5篇:大模型发展简史:从BERT到ChatGPT的演进 摘要 近年来,人工智能领域最引人注目的进步之一是大模型(Large Language Models, LLMs)的发展。这些模型不仅推动了自然语言处理(NLP)技术的飞跃&…...
小球反弹(蓝桥杯C语言)
有一长方形,长为 343720343720 单位长度,宽为 233333233333 单位长度。在其内部左上角顶点有一小球 (无视其体积),其初速度如图所示且保持运动速率不变,分解到长宽两个方向上的速率之比为 dx:dy15:17dx:dy15:17。小球碰到长方形的…...
Java面试39-Zookeeper中的Watch机制的原理
Zookeeper是一个分布式协调组件,为分布式架构下的多个应用组件提供了顺序访问控制能力。它的数据存储采用了类似于文件系统的树形结构,以节点的方式来管理存储在Zookeeper上的数据。 Zookeeper提供了一个Watch机制,可以让客户端感知到Zooke…...
3️⃣ Coze工作流基础教学(2025年全新版本)
目录 一、什么是工作流 二、为什么用工作流 三、工作流使用场景 四、怎么学习工作流 五、工作流功能概述 六、制作工作流基础流程 6.1 创建工作流 6.2 配置工作流 6.3 调试工作流 6.4 发布工作流 6.5 使用工作流 6.6 复制工作流 6.7 删除工作流 6.8 设置工作流异…...
备战蓝桥杯——走迷宫问题(BFS解决)
这是一个经典的BFS算法 1. BFS算法保证最短路径 核心机制:广度优先搜索按层遍历所有可能的路径,首次到达终点的路径长度即为最短步数。这是BFS的核心优势。队列的作用:通过队列按先进先出的顺序处理节点,确保每一步探索的都是当…...
usbip学习记录
USB/IP: USB device sharing over IP make menuconfig配置: Device Drivers -> Staging drivers -> USB/IP support Device Drivers -> Staging drivers -> USB/IP support -> Host driver 如果还有作为客户端的需要,继续做以下配置&a…...
mlir-tblgen 的应用渐进式示例
示例01 -gen-dialect-decls toy_dia.1.toy include "mlir/IR/OpBase.td" //include "mlir/IR/FunctionInterfaces.td" //include "mlir/IR/SymbolInterfaces.td" //include "mlir/Interfaces/SideEffectInterfaces.td"def Toy_Diale…...
AI大模型与未来社会结构的重构:从工具到共生体
一、引言:从蒸汽机到ChatGPT,文明的每一次跃迁都始于“工具的自我进化” 历史长河中,每一次技术革命,都伴随着人类社会组织、认知方式乃至价值体系的巨变。从18世纪的蒸汽机到20世纪的信息技术,再到21世纪的人工智能&…...
2015年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析
2015年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激励学生学习数学的积极性,提高学…...
免费Deepseek-v3接口实现Browser-Use Web UI:浏览器自动化本地模拟抓取数据实录
源码 https://github.com/browser-use/web-ui 我们按照官方教程,修订几个环节,更快地部署 步骤 1:克隆存储库 git clone https://github.com/browser-use/web-ui.git cd web-ui Step 2: Set Up Python Environment 第 2 步:设置…...
Bash判断命令是否存在
在 Bash 脚本里,你可以通过多种方法判断某个命令是否存在。下面为你详细介绍几种常见的判断方式。 1. 使用command -v command -v命令能够返回指定命令的可执行文件路径,如果该命令不存在则不会有输出。借助这一特性,我们可以结合条件判断语…...
双指针(滑动窗口)
用于在数组或字符串的进行快速排序 匹配 排序或移动操作。 双指针不是真的指针,只是用两个变量来表示下标(在后面都用指针来表示) 双指针往往和单调性 排序 联系在一起,暴力往往是O(n方)双指针利用单调性可以优化到o(n) 有对撞指针 快慢指针 美丽区间…...
在PPT中同时自动播放多个视频的方法
在PPT中同时自动播放多个视频的方法 文章目录 在PPT中同时自动播放多个视频的方法1 准备视频2 设置动画为“出现”3 设置所有视频为“自动播放”4 最终效果与其他设置 在PPT制作的过程中,我们经常遇到需要同时自动播放多个视频的情况。本文将详细介绍实现这种效果的…...
使用 Vue 快速集成 FullCalendar 日历组件教程
FullCalendar 是一款功能强大的 JavaScript 日历组件,支持 React/Vue 等主流框架,提供丰富的日历视图和交互功能。本文将手把手教你在 Vue 项目中快速集成,并演示核心功能实现。 📦 主要特性亮点 ✅ 月/周/日多视图切换 ✅…...
xv6-labs-2024 lab2
lab-2 0. 前置 课程记录 操作系统的隔离性,举例说明就是,当我们的shell,或者qq挂掉了,我们不希望因为他,去影响其他的进程,所以在不同的应用程序之间,需要有隔离性,并且࿰…...
redis导入成功,缺不显示数据
SpringBootTest class SecurityApplicationTests {AutowiredStringRedisTemplate template; //添加这句代码,自动装载,即可解决文章三处代码报错Testvoid contextLoads() {String compact Jwts.builder().signWith(Jwts.SIG.HS512.key().build()).subj…...
Flink对比Spark streaming、Storm
对比Spark streaming、Storm 产品 模型 语义 容错机制 状态管理 延时 吞吐量 Storm native at-least-once ack 无 low low Spark streaming micro-batch exactly-once RDD checkpoint 有 medium high Flink native exactly-once checkpoint 有 low …...
力扣316去除重复字母-单调栈
题目来源: 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 示例 1: 输入:s "bcabc" 输出ÿ…...
第421场周赛:数组的最大因子得分、
Q1、数组的最大因子得分 1、题目描述 给你一个整数数组 nums。 因子得分 定义为数组所有元素的最小公倍数(LCM)与最大公约数(GCD)的 乘积。 在 最多 移除一个元素的情况下,返回 nums 的 最大因子得分。 注意&…...