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

TCP 如何在网络 “江湖” 立威建交?

一、特点:

(一)面向连接

在进行数据传输之前,TCP 需要在发送方和接收方之间建立一条逻辑连接。这一过程类似于打电话,双方在通话前需要先拨号建立连接。建立连接的过程通过三次握手来完成,确保通信双方都做好了数据传输的准备。连接建立后,数据按照顺序有序传输,直到通信结束,通过四次挥手关闭连接。

(二)可靠性
  1. 校验和:TCP 在发送数据时,会对数据部分计算校验和,并将校验和放入 TCP 首部。接收方在接收到数据后,会重新计算校验和并与接收到的校验和进行对比。如果两者不一致,说明数据在传输过程中出现了错误,接收方会要求发送方重新发送数据。
  2. 确认机制:接收方收到数据后,会向发送方发送确认(ACK)消息,告知发送方数据已成功接收。发送方在发送数据后,会启动一个定时器,如果在定时器超时之前没有收到 ACK,就会认为数据传输失败,并重发数据。
  3. 重传机制:除了超时重传,TCP 还采用了快速重传机制。当接收方连续收到三个相同的 ACK 时,就会认为中间的数据段丢失,发送方会立即重传丢失的数据段,而不需要等待定时器超时,大大提高了数据传输的效率。
  4. 排序与重复数据处理:TCP 会对接收的数据按照序号进行排序,确保数据按顺序交付给应用层。同时,对于重复接收的数据,TCP 会进行丢弃处理,保证应用层不会接收到重复的数据。
(三)字节流服务

TCP 将数据视为无结构的字节流进行传输,应用层可以按照任意大小的数据块进行读写,而不必担心数据的边界问题。TCP 会在发送方将数据分割成合适大小的段进行传输,并在接收方将这些段重新组装成完整的字节流交付给应用层。

二、连接管理机制

(一)连接建立(三次握手)
  1. 第一次握手:客户端向服务器发送一个带有 SYN(同步序列号)标志位的 TCP 报文段,该报文段中包含客户端随机生成的初始序列号(Sequence Number,简称 SEQ),假设为 x。此时客户端进入 SYN_SENT 状态,等待服务器的响应。
  2. 第二次握手:服务器接收到客户端的 SYN 报文段后,向客户端发送一个 SYN + ACK 报文段。该报文段中的 SYN 标志位表示服务器同意建立连接,ACK 标志位用于确认收到客户端的 SYN。服务器也会生成一个自己的初始序列号,假设为 y,并将客户端的序列号 x 加 1 作为确认号(Acknowledgment Number,简称 ACK),即 ACK = x + 1。此时服务器进入 SYN_RCVD 状态。
  3. 第三次握手:客户端接收到服务器的 SYN + ACK 报文段后,向服务器发送一个 ACK 报文段。该报文段的 ACK 标志位有效,确认号为服务器的序列号 y 加 1,即 ACK = y + 1,序列号为客户端在第一次握手中发送的序列号 x 加 1,即 SEQ = x + 1。此时客户端和服务器都进入 ESTABLISHED 状态,连接建立成功。
(二)数据传输

连接建立后,客户端和服务器就可以进行数据传输了。发送方将应用层的数据分割成 TCP 段,每个 TCP 段包含 TCP 首部和数据部分。TCP 首部中包含源端口、目的端口、序列号、确认号、标志位等信息。发送方按照序列号顺序发送数据段,接收方接收数据段后,根据序列号进行排序,并向发送方发送 ACK 确认。如果发送方在规定时间内没有收到 ACK,就会重发数据段。

(三)连接关闭(四次挥手)
  1. 第一次挥手:客户端向服务器发送一个 FIN(结束标志位)标志位有效的 TCP 报文段,表示客户端不再发送数据,但仍可以接收数据。此时客户端进入 FIN_WAIT_1 状态。
  2. 第二次挥手:服务器接收到客户端的 FIN 报文段后,向客户端发送一个 ACK 报文段,确认收到客户端的 FIN,此时服务器进入 CLOSE_WAIT 状态。客户端收到 ACK 后,进入 FIN_WAIT_2 状态。
  3. 第三次挥手:服务器在处理完剩余的数据后,向客户端发送一个 FIN 标志位有效的 TCP 报文段,表示服务器也不再发送数据。此时服务器进入 LAST_ACK 状态。
  4. 第四次挥手:客户端接收到服务器的 FIN 报文段后,向服务器发送一个 ACK 报文段,确认收到服务器的 FIN。此时客户端进入 TIME_WAIT 状态,经过一段时间(通常为 2 倍的最大段生存期,即 2MSL)后,客户端进入 CLOSED 状态,彻底关闭连接。服务器在收到客户端的 ACK 后,立即进入 CLOSED 状态。

看到这,有的读友可能会想到,建立连接时为什么需要3次握手?请求+响应两次握手不行吗?接下来就一同看看两次握手会出现什么问题。

如上图左边场景,客户端选择一个初始序列号x,发送连接请求报文 req_conn(x)给服务器,服务器接收到连接请求后,发送确认连接报文acc_conn(x),并且进入已连接状态。而在客户端超时定时器到时的时候,客户端没有接收到服务器的确认报文。此时,客户端重发连接请求req_conn(x) ,一会儿,第一次的acc_conn到达客户端处,连接建立,进行数据通信,然后通信结束。结束后,重发的req_conn(x)到达了服务器,服务器端会认为又建立了一个新连接(因为它不记得之前已经处理过 ),又会发送acc_conn(x),而客户端会忽略这个确认(因为已经建立连接 )。这就导致服务器端维护了多余的、不完整的连接(半连接 )。服务器端资源被无效占用,连接管理也出现混乱。

由此可看出,2次握手导致半连接问题

再看右侧场景,建立连接过程中,由于某种原因,服务器端ack迟迟不到,致使客户端超时重发req_conn(x),此后,延迟的ack到达客户端,连接建立。客户端向服务器发送数据,而又由于某种原因,dataack迟迟不到,客户端超时重发数据data.重发后延迟的ack到达客户端,通信结束,连接关闭。此后,重发的req_conndata到达服务器,使得老的数据被当作新的数据接收。这将导致数据错乱,业务逻辑错误

综上,二次握手存在的问题如下:

问题类型

根本原因

后果

三次握手解决方案

半连接

缺乏客户端最终确认

服务器资源浪费,通信中断

通过第三次ACK验证连接有效性

旧数据误认

无法区分历史连接与新连接

数据错乱,业务逻辑错误

动态ISN + 序列号严格同步

双向能力未验证

仅验证单向可达性

单向通信风险(如服务器→客户端不可达)

三次交互确认双向链路

因此,必须采用三次握手。

三、可靠数据传输

1. 确认应答(ACK)机制
  • 序列号与确认号:每个数据包携带32位序列号(SEQ)标识字节流起始位置,接收方通过确认号(ACK=SEQ+数据长度)反馈已接收的数据范围。例如,发送方发送SEQ=1000、长度500的数据,接收方返回ACK=1500
  • ACK标志位:TCP头部中ACK标志位为1时,表示该报文为确认报文,此时确认号字段生效。普通数据报文ACK标志位为0 。
  • 累积确认:接收方仅需确认连续接收的最高序列号,简化ACK处理。例如,若接收方已收到SEQ=1000-2000的数据,即使中间有乱序包(如SEQ=2500),仍返回ACK=2001,触发发送方选择性重传 。
2. 超时重传与动态RTO
  • 重传触发条件:发送方在动态计算的重传超时时间(RTO)内未收到ACK,触发数据包重传。RTO基于往返时间(RTT)自适应调整,计算公式为:
SRTT = (1-α) * SRTT + α * RTT_sample  
DevRTT = (1-β) * DevRTT + β * |RTT_sample - SRTT|  
RTO = SRTT + 4 * DevRTT

其中,α=0.125,β=0.25(经验值)。

  • 超时加倍策略:首次超时后,RTO逐次加倍,避免网络拥塞恶化 。
  • 接收缓冲区去重:接收方通过缓冲区存储已接收数据并按序重组,丢弃重复数据包(如因重传导致的冗余包) 。
3. 滑动窗口与高效传输
  • 窗口动态调整:发送窗口大小(SWND)取接收窗口(RWND)与拥塞窗口(CWND)的最小值,确保发送速率匹配接收方处理能力和网络状态。
  • 批量发送与累积ACK:发送方可在窗口内连续发送多个数据包,接收方通过累积ACK减少确认次数。例如,发送窗口为4时,发送SEQ=1-4的数据包,接收方返回ACK=5确认全部接收。
  • 选择性确认(SACK):通过TCP选项字段标记非连续接收的数据块范围,发送方仅重传丢失的包(如接收方反馈SACK=3000-3500,发送方重传缺失的2500-3000) 。
  • D-SACK:接收方通过SACK反馈重复接收的数据块,帮助发送方区分ACK丢失或网络延迟,优化重传策略 。
4. 拥塞控制
1. 慢开始(Slow Start):在连接建立初期,发送方将拥塞窗口(Congestion Window,简称 cwnd)初始化为一个最大段大小(MSS),然后每收到一个 ACK,就将拥塞窗口增加一个 MSS。这样,拥塞窗口呈指数增长,快速探测网络的承载能力。
2. 拥塞避免(Congestion Avoidance):当拥塞窗口增长到慢开始门限(ssthresh)时,进入拥塞避免阶段。在这个阶段,发送方每收到一个 ACK,就将拥塞窗口增加 1/cwnd 个 MSS,使拥塞窗口线性增长,避免网络拥塞。
3. 快重传(Fast Retransmit):当接收方连续收到三个相同的 ACK 时,发送方会立即重传丢失的数据段,而不需要等待定时器超时。这可以快速恢复丢失的数据,减少数据传输的延迟。
4. 快恢复(Fast Recovery):在快重传之后,发送方将慢开始门限设置为当前拥塞窗口的一半,然后将拥塞窗口设置为慢开始门限加上三个重复 ACK 所确认的数据量,接着进入拥塞避免阶段,而不是重新进入慢开始阶段。这样可以更快地恢复数据传输,提高网络的利用率。

四、流量控制

1. 滑动窗口工作机制
  • 接收窗口(RWND):接收方通过ACK报文中的窗口字段告知剩余缓冲区大小。例如,RWND=8000表示当前可接收8000字节数据 27。
  • 零窗口探测:若接收方缓冲区满(RWND=0),发送方启动持续计时器,定期发送1字节探测包,检测窗口恢复状态 27。
  • 窗口缩放选项:通过TCP选项扩展窗口字段位数(从16位至30位),支持高带宽网络的大窗口传输。
2. 流量控制的关键问题与解决
  • 糊涂窗口综合征(SWS)
    • 发送端SWS:Nagle算法解决小数据包问题,规则如下:
if 有新数据待发送:  if 窗口大小 ≥ MSS 且 数据量 ≥ MSS:  立即发送  elif 有未确认数据:  缓存数据等待ACK  else:  立即发送

此算法在高延迟场景可能导致小数据等待,可通过TCP_NODELAY选项 禁用

    • 接收端SWS:接收方在缓冲区不足时直接通告RWND=0,强制发送方暂停,待缓冲区清空后通过探测包恢复 。
3. 拥塞控制与流量控制的协同
  • 拥塞窗口(CWND):根据网络拥塞状态动态调整,通过慢启动(指数增长)和拥塞避免(线性增长)平衡带宽利用率 。
  • 全局平衡:最终发送速率受SWND = min(RWND, CWND)限制,同时避免接收方溢出和网络拥塞。

五、TCP报文格式

头部结构(20~60字节)

字段

长度

说明

源端口/目的端口

16位

标识应用程序(如HTTP=80)

序列号(SEQ)

32位

数据包首字节的全局位置

确认号(ACK)

32位

期望接收的下一个字节序号(仅当ACK=1时有效)

数据偏移

4位

首部长度(以4字节为单位,最大60字节)

控制标志

9位

SYN(连接请求)、ACK(确认)、FIN(终止)、RST(重置)、PSH(急迫推送)

窗口大小

16位

接收方可用缓冲区大小(流量控制关键参数)

校验和

16位

验证数据完整性

紧急指针

16位

标识紧急数据位置(仅当URG=1时有效) 。

相关文章:

TCP 如何在网络 “江湖” 立威建交?

一、特点: (一)面向连接 在进行数据传输之前,TCP 需要在发送方和接收方之间建立一条逻辑连接。这一过程类似于打电话,双方在通话前需要先拨号建立连接。建立连接的过程通过三次握手来完成,确保通信双方都…...

mysql:重置表自增字段序号

情况一:清空表数据后重置自增 ID 如果你希望清空表中的所有数据,并将自增 ID 重置为初始值(通常为 1) 1、truncate truncate table tb_dict; 2、delete 配合 alter 语句 delete from tb_dict; alter table tb_dict AUTO_INCR…...

【Code】《代码整洁之道》笔记-Chapter13-并发编程

第13章 并发编程 “对象是过程的抽象。线程是调度的抽象。” 编写整洁的并发程序很难——非常难,而编写在单线程中执行的代码却简单得多。编写表面上看似不错、深入进去却支离破碎的多线程代码也简单,但是系统一旦遭受压力,这种代码就扛不…...

TDengine 可靠性保障:数据持久化与容灾备份(一)

一、引言 在数字化浪潮席卷全球的当下,数据已成为企业和组织最为关键的资产之一。无论是互联网企业记录用户的行为数据,还是金融机构存储交易信息,又或是工业领域监测设备的运行状态,数据的可靠性直接关乎到业务的正常运转、决策…...

AWTK-MVVM 如何让多个View复用一个Model记录+关于app_conf的踩坑

前言 有这么一个业务,主界面点击应用窗口进入声纳显示界面,声纳显示界面再通过按钮进入菜单界面,菜单界面有很多关于该声纳显示界面的设置项,比如量程,增益,时间显示,亮度,对比度等…...

第四节:React Hooks进阶篇-useEffect依赖项为空数组[]与不写的区别

陷阱题:闭包问题、Stale Closure举例 一、依赖项为空数组[]与不写的核心区别 行为空数组[]不写依赖项执行时机仅在组件挂载时执行一次(类似componentDidMount)组件每次渲染后都执行(类似componentDidUpdate)更新触发…...

25级总分413数学一142专业124东南大学820考研经验电子信息通信工程,真题,大纲,参考书。

我是南京理工大学的本科生,25 考研一战东大,政治 69,英一 78,数一 142,专业课(820)124,总分 413。我从 3 月正式开始备考,专业课跟着无线电论坛jenny 老师进行学习&#…...

Docker Desktop磁盘镜像位置用途解析

在设置里面的资源中有个磁盘镜像位置的配置,这个目录默认位置是:C:\Users\haitao.luo\AppData\Local\Docker\wsl\disk,这里面对应的是一个docker_data.vhdx,虚拟磁盘文件,因为是在c盘上,所以可能后面下载镜…...

android display 笔记(十)surfaceflinger与HWC的关系

在 Android 图形系统中,SurfaceFlinger 和 Hardware Composer (HWC) 是紧密协作的两个核心组件,共同负责屏幕内容的合成与显示。它们的关系可以用 “决策者与执行者” 来概括: 首先HWC中 DEVICE:指“显示设备硬件”(…...

#MES系统运维问题分析思路

一套适用于90% MES运维现场问题的排查分析思维模型,叫做: 🔍 MES系统问题分析七步法(现场实战适用) ✅ 第一步:明确问题现象(What) 问题要说清楚,“不能操作”这种模糊描…...

基于FPGA的六层电梯智能控制系统 矩阵键盘-数码管 上板仿真均验证通过

基于FPGA的六层电梯智能控制系统 前言一、整体方案二、软件设计总结 前言 本设计基于FPGA实现了一个完整的六层电梯智能控制系统,旨在解决传统电梯控制系统在别墅环境中存在的个性化控制不足、响应速度慢等问题。系统采用Verilog HDL语言编程,基于Cyclo…...

FPGA上实现SD卡连续多块读的命令

在FPGA上实现SD卡连续多块读的命令 CMD17命令一次只能读取1个块 CMD18命令一次可以连续读取多个块,直到停止命令CMD12 CMD18命令读的块数程序可任意设置 目录 前言 一、SD卡多块读命令CMD18 二、停止读命令CMD12 三、SD卡初始化SD卡连续块读操作的verilog代码 …...

AI 大语言模型 (LLM) 平台的整体概览与未来发展

📋 分析报告:AI 大语言模型 (LLM) 平台的整体概览与未来发展 自动生成的结构化分析报告 💻 整体概述:AI LLM 平台的市场现状与发展动力 随着人工智能技术的飞速发展,大语言模型(Large Language Models, L…...

【技术派部署篇】Windows本地部署技术派

一、技术派简介 技术派是一个采用 Spring Boot、MyBatis-Plus、MySQL、Redis、ElasticSearch、MongoDB、Docker、RabbitMQ 等技术栈的社区系统,其 1.0 版已正式上线。该项目的技术栈按阶段集成引入,开发者可根据自身需求选择不同版本进行学习。 二、环…...

asm汇编语言源代码之-获取环境变量

提供1个子程序: 1. 读取环境变量 GETENVSTR 具体功能及参数描述如下 GETENVSTR PROC FAR ;IN: DSPSP SEG. ;   ES:BX -> ENV VAR NAME ;OUT: DS:DX -> ENV VAR VALUE; IF DX0FFFFH, NOT FOUND   ; more source code at http://www.ahjoe.com/source/srcdown.aspPU…...

消失的它:揭开 CoreData 托管对象神秘的消失之谜(上)

概述 使用 CoreData 作为 App 持久存储“定海神针”的小伙伴们想必都知道,我们需要将耗时的数据库查询操作乖巧的放到后台线程中,以便让主线程负责的 UI 获得风驰电掣般地享受。 不过,如何将后台线程中查询获得的托管对象稳妥的传送至主线程…...

Python中如何用正则表达式精准匹配IP地址?

在网络编程和数据处理时,我们经常需要从文本中提取或验证IP地址。Python的正则表达式(re模块)是完成这个任务的利器。但你知道怎么写才能准确匹配各种合法的IP地址吗?今天我们就来详细探讨这个问题。 为什么需要IP正则表达式? 假设你正在分…...

初识华为防火墙

防火墙配置与应用 一、防火墙的基本概念 1.防火墙的网络区域(一般认为三个区域:trust、DMZ、untrust) (1)本地区域(安全级别 100,local)(防火墙内部区域,一般不说明此…...

十二、C++速通秘籍—静态库,动态库

上一章节: 十一、C速通秘籍—多线程-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/147055932?spm1001.2014.3001.5502 本章节代码: cpp2/library CuiQingCheng/cppstudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/cppst…...

我爱学算法之——滑动窗口攻克子数组和子串难题(下)

这几道题可以说是有一点难度的,但是掌握方法以后可以说非常简单了; 一、找到字符串中所有字母异位词 题目解析 题目给定了两个字符串s和p,让我们在s中找到p的异位词的字串,并且返回这些字串的索引 **异位词:**简单来说…...

leaflet 之 获取中国某个行政区的经纬度边界(latLngBounds)

思路 在json文件中获取下面的四个点 组成东北,西南两组 { “southwest”: { “lat”: 35.950, “lng”: 120.000 },//西南方 “northeast”: { “lat”: 36.200, “lng”: 120.300 }//东北方 } 最西点经度(minLng) 最东点经度(maxLng&#x…...

鸢尾花分类的6种机器学习方法综合分析与实现

鸢尾花分类的6种机器学习方法综合分析与实现 首先我们来看一下对应的实验结果。 数据准备与环境配置 在开始机器学习项目前,首先需要准备编程环境和加载数据。以下代码导入必要的库并加载鸢尾花数据集: import numpy as np import pandas as pd impo…...

基于李永乐线性代数基础的行列式的起源于理解

起源于解方程组的过程 对于解一个二元方程组,很自然的会通过加减消元,变成下面这样 对于三元方程组,也是一样: 这一大长串,是A*x1b1这个形式时,A的值 人们为了方便记忆x未知数前这一大坨相乘后相加减的数…...

MacOs java环境配置+maven环境配置踩坑实录

oracl官网下载jdk 1.8的安装包 注意可能需要注册!!! 下载链接:下载地址点击 注意晚上就不要下载了 报错400 !!! 1.点击安装嘛 2.配置环境变量 export JAVA_HOME/Library/Java/Java…...

LeetCode 3272.统计好整数的数目:枚举+排列组合+哈希表

【LetMeFly】3272.统计好整数的数目:枚举排列组合哈希表 力扣题目链接:https://leetcode.cn/problems/find-the-count-of-good-integers/ 给你两个 正 整数 n 和 k 。 如果一个整数 x 满足以下条件,那么它被称为 k 回文 整数 。 x 是一个…...

蓝桥杯嵌入式历年省赛客观题

一.第十五届客观题 第十四届省赛 十三届 十二届...

RFID 在制造业的深度应用与未来趋势

一、引言 制造业作为国民经济的核心支柱,正面临着全球供应链重构、个性化需求激增、成本压力加剧等多重挑战。RFID(射频识别)技术以其非接触式自动识别、数据实时传输、环境适应性强等特性,成为推动制造业数字化转型的关键引擎。…...

spring--声明式事务

声明式事务 1、回顾事务 要么都成功,要么都失败! 事务在项目开发中,十分重要,涉及数据的一致性问题 确保完整性和一致性 事务ACID: 原子性:事务是原子性操作,由一系列动作组成,…...

java爬虫案例

以下是一个简单的Java爬虫案例,使用了 Jsoup 和 Apache HttpClient 两个常用的库来实现网页内容的爬取和解析。这个案例会演示如何获取网页的HTML内容、解析HTML并提取所需数据。 示例:使用Jsoup爬取网页内容 1. 添加依赖 在项目中添加以下依赖&#xff…...

博途 TIA Portal之1200做主站与有意思的板子做MODBUS_RTU通讯

做为博途的硬件,1200和1500本体都不具有串口通讯功能,只能使用扩展板或是通讯模块完成。 其中1200使用CB1241或CM1241进行串口通讯,本文将使用CM1241进行演示。 1、硬件介绍 1200的PLC一台,有意思的板子(以下简单4D板)一台。 其中1200带扩展模块CM1241 RS232;4D板使…...

01_核心系统下的技术原理解析

15年前,基本上国内的核心系统被C垄断,基本上是IBM的那套东西,场景也是比价复杂,这里不再赘述,TPS太过于庞大,技术上确实比较复杂。为此我这里抛砖引玉,说下对应的支付系统: &#x…...

【力扣hot100题】(092)最长回文串

有点难度,一开始想到的两种方法都不对,花了不少时间。 先说之前的方法: ① 遍历每个点,每个点向外扩张,如果左等于右就一直扩展直到不等。 这个方法可是可以,但我没有考虑到两个相同字母也是回文串的情况…...

第一期:[特殊字符] 深入理解MyBatis[特殊字符]从JDBC到MyBatis——持久层开发的转折点[特殊字符]

前言 🌟 在软件开发的过程中,持久层(或数据访问层)是与数据库进行交互的关键部分。早期,开发者通常使用 JDBC(Java Database Connectivity)来实现与数据库的连接与操作。虽然 JDBC 在一定程度上…...

指针的进阶2

六、函数指针数组 字符指针数组 - 存放字符指针的数组 char* arr[10] 整型指针数组 - 存放整型指针的数组 int* arr[10] 函数指针数组 - 存放函数指针的数组 void my_strlen() {} int main() {//指针数组char* ch[5];int arr[10] {0};//pa是是数组指针int (*pa)[10] &…...

Java学习——day28(Java并发工具类与线程池)

文章目录 1. 并发工具类简介1.1 ExecutorService1.2 Callable 和 Future1.3 Executors 工具类1.4 线程池优势 2. 实践:线程池执行任务并收集结果示例2.1 示例代码 3. 代码详解3.1 线程池的创建3.2 定义任务列表3.3 提交任务并收集 Future3.4 获取任务执行结果3.5 关…...

2021第十二届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

记录刷题的过程、感悟、题解。 希望能帮到,那些与我一同前行的,来自远方的朋友😉 大纲: 1、空间-(题解)-字节单位转换 2、卡片-(题解)-可以不用当组合来写,思维题 3、直…...

【数据结构】之二叉树

二叉树是我们在数据结构中学到的第一个非线性结构,是后续学习更为复杂的树、图结构的基础。本文整理了二叉树的概念定义、基本操作、遍历算法、伪代码与代码实现以及实例说明,方便大家随时查找对应。 一、定义与基本术语 二叉树是一种树形结构&#xf…...

电感、互感器、变压器和磁珠综合对比——《器件手册--电感/线圈/变压器/磁珠篇》

三、电感/线圈/变压器/磁珠 名称 定义 特点...

CLIP中的Zero-Shot Learning原理

CLIP(Contrastive Language-Image Pretraining)是一种由OpenAI提出的多模态模型,它通过对比学习的方式同时学习图像和文本的表示,并且能在多种任务中进行零样本学习(Zero-Shot Learning)。CLIP模型的核心创…...

基于 Redis 实现一套动态配置中心 DCC 服务与反射基础知识讲解

目录 动态配置中心核心价值 轻量级 Redis 方案与 ZooKeeper 的对比分析 为什么选择自定义 Redis 方案? 1. 技术决策背景 一、活动降级拦截 1. 定义与作用 2. 实现原理 二、活动切量拦截 1. 定义与作用 2. 实现原理 三、两者的核心区别 四、实际应用案例 1. 电商大促…...

vue 前端遇到问题 样式不展示

vue 前端遇到问题 样式不展示 先看接口返回有数据没 如果有数据看下 是不是 输入赋值给其他 字段 没有赋值上导致报错 所以页面没展示数据...

基于 Spring Boot + Vue 的 [业务场景] 管理系统设计与实现

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

2025蓝桥杯JavaB组

说明 博主自己水平有限,而且答案也不一定对,下面代码和思路仅作分享。我只把我考场上做了的写出来了,有什么问题欢迎评论区交流。 A:逃离高塔 思路: 由于有了去年的经验,所以一上来我就是找规律&#xf…...

HDF5文件格式:数据类型与读写功能详解

HDF5文件格式:数据类型与读写功能详解 HDF5简介 HDF5(Hierarchical Data Format version 5)是一种用于存储和管理大量科学数据的文件格式和库。它由美国国家高级计算应用中心(NCSA)开发,具有以下特点&…...

探索 Python 的 functools 模块:缓存、属性缓存与 LRU 缓存

李升伟 编译 Python 的 functools 模块是函数式编程爱好者的宝库,提供了许多工具来提升代码的效率和优雅性。本文将深入探讨三个强大的函数——cache、cached_property 和 lru_cache,它们通过存储昂贵计算的结果来优化性能。无论是加速递归算法还是简化…...

缓存与数据库一致性:从问题到解决方案全解析

一、⼀致性问题的由来:为什么会不一致? 我们先从现实例子出发,来看为什么会出现一致性问题: 📦 场景举例:电商下单业务 用户提交订单 → 服务写入数据库订单表;同时更新缓存(比如用…...

【android bluetooth 框架分析 02】【Module详解 2】【gd_shim_module 模块介绍】

1. 背景 上一章节 我们介绍了 module_t 的 大体框架 ,本节内容我们就选择 我们的 gd_shim_module 模块为例子,具体剖析一下,它里面的逻辑。 static const char GD_SHIM_MODULE[] "gd_shim_module";// system/main/shim/shim.cc …...

dbt:新一代数据转换工具

dbt(Data Build Tool)一款专为数据分析和工程师设计的开源工具,专注于 ETL/ELT 流程的数据转换(Transform)环节,帮助用户以高效、可维护的方式将原始数据转换为适合分析的数据模型。 用户只需要编写查询&am…...

Linux-内核驱动-makemenu,make modules,make uImage,杂项

动态生成设备节点设备号...

linux 内存踩踏导致的空指针问题分析纪要

1,查看日志信息打印 我们看到日志发现发包的skb模块有NULL pointer情况,我们看代码分析skb指针不可能出现是空指针,这个时候我们怀疑可能是出现了踩内存导致的空指针情况,所以我们首先需要找到系统PANIC的条件,也就是…...