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

TCP数据报

三次握手Three-Way Handshake

TCP 协议中用于建立可靠连接的过程。通过三次握手,客户端和服务器能够确认彼此的存在,并且同步各自的初始序列号,为后续的数据传输做好准备。三次握手确保了双方在正式传输数据前能够建立一个可靠的连接。

三次握手的步骤:

  1. 第一次握手(客户端 -> 服务器):

    • 客户端发送一个 SYN(同步)请求数据包,表示希望与服务器建立连接。客户端选择一个初始序列号(ISN,Initial Sequence Number),并将其附带在请求包中。

    • 数据包内容

      • SYN = 1:表示请求建立连接。

      • seq = x:表示客户端选择的初始序列号。

    这时,客户端的状态为 SYN_SENT(已发送连接请求)。

  2. 第二次握手(服务器 -> 客户端):

    • 服务器收到客户端的 SYN 包后,如果同意连接,会发送一个带有 SYNACK(确认)标志的数据包作为响应。服务器也会选择自己的初始序列号,并将客户端的序列号加1作为 ACK 值,确认收到客户端的请求。

    • 数据包内容

      • SYN = 1:表示服务器同意建立连接。

      • ACK = 1:表示确认客户端的请求。

      • seq = y:表示服务器选择的初始序列号。

      • ack = x + 1:表示确认收到客户端的序列号(客户端的初始序列号加 1)。

    服务器的状态变为 SYN_RECEIVED(接收到连接请求)。

  3. 第三次握手(客户端 -> 服务器):

    • 客户端收到服务器的 SYN+ACK 包后,向服务器发送一个确认包,表示自己已准备好数据传输。客户端将服务器的序列号加1作为 ACK 值,确认服务器的序列号。

    • 数据包内容

      • ACK = 1:表示确认服务器的响应。

      • seq = x + 1:表示客户端的序列号加 1。

      • ack = y + 1:表示确认收到服务器的序列号(服务器的初始序列号加 1)。

    客户端的状态变为 ESTABLISHED(连接已建立)。

  4. 连接建立完毕:

    • 在第三次握手完成后,客户端和服务器之间的连接建立成功,双方可以开始数据传输。

三次握手的目的:

  1. 确保双方都能接收到对方的序列号:三次握手的过程确保了客户端和服务器都知道彼此的初始序列号,从而可以确保后续数据传输的顺序正确。

  2. 确认双方都准备好进行数据传输:通过交换同步信号(SYN)和确认信号(ACK),双方确认都已经准备好开始数据传输。

  3. 防止旧连接数据的干扰:三次握手通过序列号和确认号的机制,确保旧的连接数据不会干扰新连接的建立。

举个例子:

假设你想和朋友通过电话建立通话,三次握手可以类比为:

  1. 第一次握手:你拨通电话,告诉朋友“我想和你通话”,这就是你发出的 SYN 请求。

  2. 第二次握手:朋友接到电话,确认可以和你通话并说“我也准备好了”,这是朋友发出的 SYN+ACK 响应。

  3. 第三次握手:你听到朋友的回复后确认“好的,我也准备好了,现在开始通话”,这就是你发出的 ACK 确认。

在三次确认后,电话通话就正式开始了,类似于 TCP 连接的建立完成,双方可以开始交换数据。

  0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|          源端口号(16位)     |        目标端口号(16位)     |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                        序列号(32位)                         |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                      确认号(32位)                          |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| 数据偏移 |保留|URG|ACK|PSH|RST|SYN|FIN|     窗口大小(16位)  |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|         校验和(16位)        |       紧急指针(16位)        |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                        可选项(可变)                         |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                          数据(可变)                         |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段长度(位)说明
源端口号(Source Port)16发送方应用程序的端口号
目的端口号(Destination Port)16接收方应用程序的端口号
序列号(Sequence Number)32本段数据的第一个字节在整个字节流中的编号
确认号(Acknowledgment Number)32期望接收的下一个字节的序号(如果ACK标志置位)
数据偏移(Data Offset)4TCP首部长度(以4字节为单位)
保留(Reserved)3保留,置0
控制位(Flags)9标志位(URG, ACK, PSH, RST, SYN, FIN等)
窗口大小(Window Size)16告诉对方自己还能接收多少字节
校验和(Checksum)16用于检验数据在传输过程中是否出错
紧急指针(Urgent Pointer)16如果URG位为1,表示紧急数据的结束位置
选项(Options)可变可选字段,比如窗口扩大因子、时间戳等
填充(Padding)可变为了保证TCP首部是32位(4字节)对齐

序列号

假设发送方的初始序列号是 1000,发送了以下 4 个数据段:

  • 第一个数据段,发送字节 1 到字节 1000,序列号为 1000。

  • 第二个数据段,发送字节 1001 到字节 2000,序列号为 1001。

  • 第三个数据段,发送字节 2001 到字节 3000,序列号为 2001。

  • 第四个数据段,发送字节 3001 到字节 4000,序列号为 3001。

确认号

确认号的作用:

  1. 确认数据接收:接收方通过确认号告诉发送方,它已经成功接收了哪些数据。比如,如果接收方成功接收到序列号为 1000 到 1007 的数据,接收方会返回一个确认号 1008,表示它希望接收下一个序列号为 1008 的数据。

  2. 丢包检测:如果发送方在一定时间内没有收到确认号,它就知道可能发生了数据丢失,会重新发送数据。比如,如果发送方在规定时间内没收到确认号 1008,它就会重发序列号为 1000 到 1007 的数据。

  3. 确保数据顺序:即使数据包乱序到达,接收方也能通过确认号告诉发送方下一个期望的字节序列号,让发送方知道数据是否按顺序到达。

举个例子:

假设你发送的数据的序列号是从 1000 开始:

  • 你发送了字节 1000 到 1007 的数据,接收方收到这些数据后,它会返回一个确认号 1008,表示接收方已经成功接收了序列号小于 1008 的数据,期待下一个序列号为 1008。

  • 如果接收方只收到字节 1000 到 1003,未收到字节 1004 到 1007,它会继续等待并不会返回 1008,而是会继续要求重传缺失的部分,直到接收到完整的数据。

数据偏移(Data Offset)

TCP 头部中的一个字段,用来指示 TCP 头部的长度,即数据部分从哪里开始 。数据偏移字段是一个 4 位的数,表示 TCP 头部的长度,单位是 32 位(4 字节)

假设你有一个 TCP 数据包,它的 数据偏移 值为 5,表示 TCP 头部的长度是 5 × 4 = 20 字节。这意味着接收方应该从数据包的第 21 字节开始读取实际的数据部分。

如果数据偏移值为 6,表示 TCP 头部的长度是 6 × 4 = 24 字节,那么数据就从数据包的第 25 字节开始。

SYN

是 TCP 报文头中的一个标志位,全称是 Synchronize(同步),它用于 建立连接时同步双方的初始序列号,是 TCP 三次握手 中的重要部分。


✅ 通俗解释:

你可以把 SYN 理解为:“你好,我想和你建立连接,这是我的号码(初始序列号)。”

当两台设备通过 TCP 通信时,它们必须先通过 三次握手 确认彼此都准备好了,并知道对方的“起始编号”,这个编号就是通过 SYN 标志的报文来传递的。


🔁 SYN 在三次握手中的作用:

  1. 第一次握手:客户端发送一个 SYN=1 的报文,告诉服务器:“我想建立连接,我的初始序列号是 X。”

  2. 第二次握手:服务器回复一个 SYN=1 + ACK=1 的报文,说:“我同意连接,我的初始序列号是 Y,同时确认你的是 X+1。”

  3. 第三次握手:客户端再发送一个 ACK=1 报文,确认服务器的序列号 Y+1,连接建立。

URG(Urgent Pointer)

TCP 头部中的一个标志位,表示该数据段包含紧急数据。它与 紧急指针(Urgent Pointer) 一起使用,用来告知接收方数据中的某一部分是紧急的,需要优先处理。

假设一个 TCP 数据段的 URG 标志位 为 1,紧急指针为 500。这个意味着接收方应该优先处理从数据段开始到第 500 字节之间的数据(包含第 500 字节)。然后,接收方可以继续处理剩下的普通数据。

FIN

是 TCP 协议中的一个控制标志位,全称是 Finish(结束),表示“我已经没有数据要发送了,但我还可以接收你的数据”。

它用于 TCP连接的释放阶段,也就是我们常说的 “四次挥手” 中,FIN 标志就是“挥手”的信号。

TCP 四次挥手中 FIN 的使用过程:

  1. 第一次挥手(客户端发送 FIN):
    客户端想关闭连接,向服务器发送一个带 FIN=1 的数据包,告诉服务器“我已经发完了,你可以关我这边的发送通道”。

  2. 第二次挥手(服务器回 ACK):
    服务器收到 FIN 后,发送一个 ACK 包,表示“我知道了,但我可能还有数据要发,等我发完再说”。

  3. 第三次挥手(服务器发送 FIN):
    等服务器也没有数据可发了,就发送一个带 FIN=1 的数据包给客户端,请求关闭它的发送通道。

  4. 第四次挥手(客户端回 ACK):
    客户端收到后回复 ACK,连接彻底断开。客户端会进入一个叫 TIME_WAIT 的状态,等一段时间确保服务器收到了 ACK,才真正关闭连接。


📌 举个例子:

你和朋友打电话,说完自己的话后,你说:“我说完了(FIN)。”
朋友听到后回答:“我知道了(ACK)。”
然后朋友继续说他的内容,说完后他说:“我也说完了(FIN)。”
你听到后说:“好的,我也知道了(ACK)。”
这时你们才挂掉电话。

窗口大小Window Size

是 TCP 协议中一个非常关键的概念,它表示接收方能够一次接收、缓存但尚未确认的数据量,单位是字节(Bytes)。


✅ 通俗解释:

你可以把窗口大小想象成水杯的容量,而发送方的数据就像水。发送方可以往水杯里倒水(发数据),但不能超过杯子的容量(窗口大小),否则水会溢出(接收方缓存不下)。

所以,窗口大小的作用是:

  • 告诉发送方:“我现在还能接收这么多数据,请别一下子发太多。”

  • 控制数据发送速率,防止接收方来不及处理,造成数据丢失。

  • 实现 TCP 的 流量控制(Flow Control)


📦 举例说明:

假设你是接收方,你告诉对方:“我的窗口大小是 3000 字节。”
发送方就知道:“好,那我最多能连续发 3000 字节的数据,不等确认。”
一旦你确认了收到一部分数据,比如确认了 1000 字节,窗口就又打开了 1000 字节,发送方就可以继续发。

 

校验和(Checksum)

是 TCP/IP 协议中用于检验数据在传输过程中是否出错的一种机制。它的主要作用是:接收方可以通过计算校验和,判断收到的数据有没有在网络中被损坏


✅ 通俗解释:

你可以把校验和想象成是“打包清单的总和”。
比如你寄一个包裹给朋友,里面有10样东西,你在单子上写:“这10样东西的总价值是100元”。
朋友收到包裹后,把每件物品的价格加起来,如果加出来也是100元,就知道东西没少;如果不是,就说明包裹中途出了问题。

TCP/UDP/IPv4 中的校验和也是这个道理。


🔧 在 TCP 中怎么用?

  1. 发送方在发数据前,会对整个 TCP 头部 + 数据 做一个运算,得出一个 16 位的校验值,填入 TCP 头部的“校验和字段”中。

  2. 接收方收到数据后,用相同的算法重新计算一遍校验和:

    • 如果和报文中的校验和一致,说明数据是完整的;

    • 如果不一致,说明数据在传输过程中发生了错误(如被干扰、电磁噪声破坏等),就会丢弃这个包。


✍️ 校验和的特点:

  • 属于一种 差错检测机制,但不能纠正错误(不是纠错码)。

  • IPv4、TCP、UDP 都使用校验和;IPv6 中 IP 层没有校验和,但 TCP/UDP 仍使用。

  • TCP 校验和还包括一个“伪首部”(Pseudo Header),包含源 IP、目标 IP、协议号、数据长度等,用于增强安全性。


📌 举个例子(简化):

  • 数据部分是:0x1234, 0x5678, 0x9abc

  • 发送方加起来得到:0x1234 + 0x5678 + 0x9abc = 0x10168

  • 把这个结果“反码取反”,得出校验和 0xFE97,放进报文中。

  • 接收方收到数据后再加一遍,再加上 0xFE97,结果应该是 0xFFFF(这是正确的标志)。

ACK

是 TCP 报文头中的一个标志位,全称是 Acknowledgment(确认),表示**“确认收到数据”**或“确认连接建立”。


✅ 通俗解释:

你可以把 ACK 理解成:“我收到了你发的数据/请求,这是我的确认回应。

在 TCP 通信中,每当一方收到数据后,都会用 ACK 来告诉对方:“我收到了,从这个序号之后你可以继续发。”


🧩 ACK 的作用包括:

  1. 三次握手中用于确认连接请求

    • 客户端发送 SYN,服务器回复 SYN + ACK,表示“我同意并确认你的请求”。

  2. 数据传输中确认收到

    • 每当一段数据被成功接收,接收方就会发出 ACK 报文,告诉发送方:“你前面发的数据我收到了,请继续。”

  3. 用于可靠传输机制

    • TCP 是可靠协议,靠 ACK 来保证“发的每一段数据都能被确认”,丢了就会重发。


🔁 举个例子:

  • 客户端发送数据,序列号为 100;

  • 服务器收到后,回复一个 ACK=101,意思是:“我已经收到100这个字节,接下来从101开始继续发。”

相关文章:

TCP数据报

三次握手(Three-Way Handshake) 是 TCP 协议中用于建立可靠连接的过程。通过三次握手,客户端和服务器能够确认彼此的存在,并且同步各自的初始序列号,为后续的数据传输做好准备。三次握手确保了双方在正式传输数据前能…...

JS循环-for循环嵌套

打印5行5列星星 效果图 代码&#xff1a; // 打印出5行5列的星星for(i 1 ; i < 5 ; i ) {// 外层控制打印行for(j 1 ; j < 5 ; j ) {// 内层控制每行打印几个document.write(⭐)}document.write(<br>)} 打印侧三角 效果图 代码&#xff1a; for(i 1 ; i &l…...

【技术追踪】通过潜在扩散和先验知识增强时空疾病进展模型(MICCAI-2024)

向扩散模型中引入先验知识&#xff0c;实现疾病进展预测&#xff0c;扩散模型开始细节作业了~ 论文&#xff1a;Enhancing Spatiotemporal Disease Progression Models via Latent Diffusion and Prior Knowledge 代码&#xff1a;https://github.com/LemuelPuglisi/BrLP 0、摘…...

Linux/AndroidOS中进程间的通信线程间的同步 - 内存映射

前言 如何使用 mmap()系统调用来创建内存映射。内存映射可用于 IPC 以及其他很多方面。 1 概述 mmap()系统调用在调用进程的虚拟地址空间中创建一个新内存映射。映射分为两种。 文件映射&#xff1a;文件映射将一个文件的一部分直接映射到调用进程的虚拟内存中。一旦一个文…...

单例模式的实现方法

单例模式&#xff08;Singleton Pattern&#xff09;是一种常用的软件设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点。这种模式在需要控制对资源&#xff08;如配置对象、线程池、缓存等&#xff09;的访问时特别有用。 一、单例模…...

laravel 12 监听syslog消息,并将消息格式化后存入mongodb

在Laravel 12中实现监听Syslog消息并格式化存储到MongoDB&#xff0c;需结合日志通道配置、Syslog解析和MongoDB存储操作。以下是具体实现方案&#xff1a; 一、环境配置 安装MongoDB扩展包 执行以下命令安装必要的依赖&#xff1a; composer require jenssegers/mongodb ^4.0确…...

如何在使用 docker-compose 命令时指定 COMPOSE_PROJECT_NAME ?

1.默认值 COMPOSE_PROJECT_NAME 环境变量的默认值并非 docker。在没有显式设置 COMPOSE_PROJECT_NAME 时&#xff0c;其默认值是运行 docker-compose 命令所在目录的基础名称&#xff08;也就是当前工作目录去掉路径后的文件夹名称&#xff09;。 以下为你详细说明&#xff1…...

在命令行终端中快速打开npm包官网

命令 npm home 命令用于快速打开指定 npm 包的官网。例如&#xff0c;npm home react 会尝试打开 React 库的官方网站。 npm home PACKAGE_NAME 该命令会首先查找指定包的 package.json 文件中的 homepage 字段&#xff0c;如果存在&#xff0c;则打开该字段指定的网址。 {&…...

鸿蒙NEXT开发动画(风格的弹性缩放加载动画组件)

1.创建空白项目 2.Page文件夹下面新建Spin.ets文件&#xff0c;代码如下&#xff1a; // 接口定义&#xff08;必须放在使用前&#xff09; /*** 关键帧动画整体配置参数*/ interface KeyframeAnimationConfig {iterations: number;delay: number; }/*** 单个关键帧动画项*/…...

【MongoDB篇】MongoDB的事务操作!

目录 引言第一节&#xff1a;什么是事务&#xff1f; (ACID 原则)第二节&#xff1a;MongoDB 的演进&#xff1a;多文档 ACID 事务的到来&#xff01;&#x1f389;第三节&#xff1a;事务的“玩法”——如何执行一个事务&#xff1f;&#x1f4bb;&#x1f91d;第四节&#xf…...

Android第六次面试总结之Java设计模式篇(一)

一、单例模式在 Android 面试中的核心考点 1. Android 中如何安全实现单例&#xff1f;需注意哪些坑&#xff1f;&#xff08;字节跳动、美团面试真题&#xff09; 解答&#xff1a; Android 中实现单例需重点关注 Context 泄漏、线程安全 和 反射 / 序列化攻击。 推荐实现&…...

关于论文中插入公式但是公式相对于段落的位置偏上应该如何调整备份

因为mythtype之前插入到word里面出现了一些问题就给删掉了&#xff0c;本来要是word里面内联mythtype的话直接&#xff0c;点击mythtype的格式化就可以了&#xff0c; 也就是这个佬的视频介绍链接 然后现在试了试普通word里面的方法&#xff0c;这个是比较有用的 然后看这个例…...

[java八股文][Java并发编程面试篇]并发安全

juc包下你常用的类&#xff1f; 线程池相关&#xff1a; ThreadPoolExecutor&#xff1a;最核心的线程池类&#xff0c;用于创建和管理线程池。通过它可以灵活地配置线程池的参数&#xff0c;如核心线程数、最大线程数、任务队列等&#xff0c;以满足不同的并发处理需求。Exe…...

【东枫科技】代理英伟达产品:智能网卡

文章目录 对比详细&#xff1a;NVIDIA ConnectX-7 适配器详细&#xff1a;NVIDIA ConnectX-6 Lx 以太网智能网卡详细&#xff1a;NVIDIA ConnectX-6 Dx 以太网智能网卡详细&#xff1a;NVIDIA ConnectX-6 InfiniBand 适配器 对比 详细&#xff1a;NVIDIA ConnectX-7 适配器 为最…...

eNSP中路由器OSPF协议配置完整实验和命令解释

本实验使用三台华为路由器&#xff08;R1、R2和R3&#xff09;相连&#xff0c;配置OSPF协议实现网络互通。拓扑结构如下&#xff1a; 实验IP规划 R1: GE0/0/0: 192.168.12.1/24 (Area 0)Loopback0: 1.1.1.1/32 (Area 0) R2: GE0/0/0: 192.168.12.2/24 (Area 0)GE0/0/1: 192.…...

解锁健康生活:全新养身指南

健康养身不是遥不可及的目标&#xff0c;而是由一个个小习惯编织成的生活方式。当我们将这些健康理念融入日常&#xff0c;就能为身体注入源源不断的活力。​ 从 “吃” 开始守护健康。尝试制作 “营养碗”&#xff0c;底层铺满羽衣甘蓝、生菜等绿叶蔬菜&#xff0c;中间搭配水…...

win11 怎样把D盘空间分给C盘一点

如下所示&#xff0c;我的C盘甚至已经爆红了&#xff0c;打算D盘清理一些空间给C盘。 首先附上链接&#xff0c;这是我在b站看的教程&#xff0c;虽然跟着视频没成功&#xff0c;但是结合评论区大神们的建议&#xff0c;尝试了好几种方法&#xff0c;最终自己摸索成功了。 【怎…...

Apache Doris与StarRocks对比

## 历史背景 Apache Doris源自百度的Palo项目,于2017年开源,2018年贡献给Apache基金会,并于2022年从Apache孵化器毕业成为顶级项目。StarRocks则是由原Apache Doris团队的一部分成员在2020年分支出来成立的独立项目,最初称为DorisDB,后更名为StarRocks。这两个项目虽然有…...

OSCP - Proving Grounds - NoName

主要知识点 linux命令注入SUID find提权 具体步骤 从nmap开始搜集信息&#xff0c;只开放了一个80端口 Nmap scan report for 192.168.171.15 Host is up (0.40s latency). Not shown: 65534 closed tcp ports (reset) PORT STATE SERVICE VERSION 80/tcp open http …...

2025年OpenAI重大架构调整:资本与使命的再平衡

目录 前言 一、调整核心&#xff1a;三重架构的重构 1.1 控制权的重新锚定 1.2 营利部门的角色转型 1.3 资金池的重新配置 二、调整动因&#xff1a;三重矛盾的破解 2.1 资金需求与融资限制的冲突 2.2 商业竞争与使命纯度的博弈 2.3 内部治理与外部监管的张力 三、产…...

【quantity】0 README.md文件

PhysUnits 物理单位库 Type-safe physical quantities with dimensional analysis 带量纲分析的类型安全物理量库 A Rust library for safe unit operations / Rust实现的类型安全单位计算库 Core Design / 核心设计 1. Dimension / 量纲 /// Base SI dimensions / 国际单…...

[python] str

一、移除字符串中所有非字母数字字符 使用正则表达式 import re string_value "alphanumeric123__" cleaned_string re.sub(r[\W_], , string_value) # 或 r[^a-zA-Z0-9] print(cleaned_string) # 输出: alphanumeric123使用**str.isalnum()**方法 string_v…...

iOS与HTTPS抓包调试小结

最近在做一个多端 SDK 网络请求兼容性的测试&#xff0c;期间遇到一些 HTTPS 请求抓不到、iOS 抓包失效等问题&#xff0c;趁机整理一下我平时抓包时用到的几个工具和技巧&#xff0c;也顺便记录一下对比体验。 一、传统工具的局限 最早用的是 Charles 和 Fiddler&#xff0c…...

AI基础知识(02):机器学习的任务类型、学习方式、工作流程

03 机器学习(Machine Learning)的任务类型与学习方式 广义的机器学习主要是一个研究如何让计算机通过数据学习规律,并利用这些规律进行预测和决策的过程。这里的Machine并非物理意义上的机器,可以理解为计算机软硬件组织;Learning可以理解为一个系统或平台经历了某些过程…...

2025年大风灾害预警升级!疾风气象大模型如何筑起安全防线?

近年来,全球极端天气事件频发,大风灾害正成为威胁城市安全、交通运输和公共设施的重要隐患。据气象部门预测,2025年我国大风天气将更加频繁,局部地区可能出现超强阵风,对高空作业、电力设施、交通运输等领域构成严峻挑战。面对这一趋势,传统的气象预警方式已难以满足精准…...

Docker手动重构Nginx镜像,融入Lua、Redis功能

核心内容&#xff1a;Docker重构Nginx镜像&#xff0c;融入Lua、Redis功能 文章目录 前言一、准备工作1、说明2、下载模块3、Nginx配置文件3、Dockerfile配置文件3、准备工作全部结束 二、构建镜像三、基于镜像创建容器三、lua脚本的redis功能使用总结 前言 ⁣⁣⁣⁣ ⁣⁣⁣⁣…...

Spring Boot Starter简介-笔记

1. Starter简介 Spring Boot Starter 是 Spring Boot 框架的核心组件之一&#xff0c;它通过预定义的依赖集合和自动化配置机制&#xff0c;极大简化了 Spring 应用的开发和部署。 Spring Boot Starter 的核心功能 自动化配置&#xff08;Auto-Configuration&#xff09; Spr…...

关系型数据库与非关系型数据库深度对比:从设计哲学到应用场景的全解析

关系型数据库与非关系型数据库深度对比:从设计哲学到应用场景的全解析 引言 在数字化浪潮中,数据库技术始终扮演着基础核心角色。本文将通过技术架构、应用场景等维度,深入剖析关系型数据库(RDBMS)与非关系型数据库(NoSQL)的本质差异。我们将以MySQL、MongoDB、Redis等…...

论文速读:《CoM:从多模态人类视频中学习机器人操作,助力视觉语言模型推理与执行》

论文链接&#xff1a;https://arxiv.org/pdf/2504.13351 项目链接&#xff1a;https://chain-of-modality.github.io/ 0. 简介 现代机器人教学的一个重要方向是让机器人通过观看人类的视频演示&#xff0c;自动学习并执行复杂的物理操作任务&#xff0c;比如拧瓶盖、插插头、打…...

系统思考:选择大于努力

在今年的伯克希尔哈撒韦股东大会上&#xff0c;94岁高龄的股神巴菲特再次以他的智慧和幽默&#xff0c;给年轻人留下了三句关于人生的黄金建议。让我印象最深刻的是&#xff1a;“选择和谁一起走&#xff0c;比怎么走更重要。” 这一句话让我反思了许多——人生的轨迹不单单是…...

【HTML5】显示-隐藏法 实现网页轮播图效果

【HTML5】显示-隐藏法 实现网页轮播图效果 实现思路&#xff1a;先将所有图片在页面中设置好&#xff0c;然后给放置图片的元素li添加display&#xff1a;none属性将其隐藏&#xff0c;然后通过js获取到放置图片的元素li&#xff0c;再一个一个的给li元素添加display&#xff…...

Jenkins 改完端口号启动不起来了

让我们将 Jenkins 恢复到默认的 8080 端口&#xff0c;确保它能正常启动&#xff1a; 1. 修改 Jenkins 的配置文件&#xff1a; sudo nano /etc/default/jenkins 将内容修改为&#xff1a; HTTP_PORT8080 JENKINS_ARGS"--webroot/var/cache/jenkins/war --httpPort8080…...

招标专家随机抽选——设计讲解—未来之窗智能编程——仙盟创梦IDE

招标专家系统 专家评标系统是服务于各类招标评标活动的数字化平台。它依托先进信息技术&#xff0c;集专家库管理、随机抽取专家、在线评标等功能于一体。系统依据项目需求设定筛选条件&#xff0c;从庞大专家库中精准抽取合适专家。评标时&#xff0c;专家可在线查阅投标文件…...

Os 库报错指南 路径处理常见陷阱

平台分隔符差异 Windows用\&#xff0c;Unix用/ → 使用os.path.join()自动处理 路径解析错误 os.path.abspath()解析相对路径时依赖当前工作目录 路径规范化缺失 ../等符号链接需用os.path.normpath()规范化 # 不推荐 path dir\\file.txt # Windows风格 path dir/file.…...

GD32/STM32 ADC/DMA使用指南

首先我们对ADC及DMA的基础知识作一下简单介绍。 一、 GD32/STM32 ADC模块的核心要点 一&#xff09;、ADC基础特性 ‌12位逐次逼近型‌ GD32/STM32 ADC为12位分辨率&#xff0c;最大量化值为4095&#xff08;对应3.3V参考电压&#xff09;&#xff0c;支持0-3.3V模拟输入范…...

CSS Border 三角形阴影与多重边框的制作

CSS Border 三角形阴影与多重边框的制作 在现代网页设计中&#xff0c;CSS的强大功能让设计师和开发者能够创造出丰富多彩的视觉效果。本文将深入探讨如何利用CSS的border​属性制作三角形阴影以及多重边框效果。这些技巧不仅能提升页面的美观度&#xff0c;还能增强用户体验。…...

ES6/ES11知识点 续五

迭代器【Iterator】 ES6 中的**迭代器&#xff08;Iterator&#xff09;**是 JavaScript 的一种协议&#xff0c;它定义了对象如何被逐个访问。迭代器与 for…of、扩展运算符、解构赋值等语法密切相关。 &#x1f4d8; 迭代器工作原理 ES6 迭代器的工作原理基于两个核心机制…...

如何选择 边缘计算服务器

边缘计算服务器选型指南&#xff08;2025年更新版&#xff09; 一、明确应用场景需求 场景细分‌ 工业控制、自动驾驶等需‌毫秒级响应‌的场景&#xff0c;优先选择集成多核处理器&#xff08;如Xeon D系列&#xff09;和实时算法加速模块的机型&#xff0c;确保延迟≤50ms&…...

VMware如何安装?Ubuntu详细步骤

VMware如何安装&#xff1f;Ubuntu详细步骤如下&#xff1a; 在VMware中安装Ubuntu是一个常见的操作&#xff0c;适用于开发、测试或学习Linux的场景。以下是详细的实战步骤和注意事项&#xff0c;帮助你顺利完成安装。 准备工作 软件下载&#xff1a; VMware Workstation/Play…...

【Bootstrap V4系列】学习入门教程之 组件-卡片(Card)高级用法

【Bootstrap V4系列】学习入门教程之 组件-卡片&#xff08;Card&#xff09;高级用法 一、Sizing 尺寸1.1 Using grid markup 使用网格标记1.2 Using utilities 使用实用程序1.3 Using custom CSS 使用自定义CSS 二、Text alignment 文本对齐方式三、Navigation 导航 一、Sizi…...

WiFi那些事儿(八)——802.11n

目录 802.11n 技术简介与测试项 一、802.11n 技术简介 &#xff08;一&#xff09;标准概述 &#xff08;二&#xff09;关键技术特性 1. MIMO&#xff08;多输入多输出&#xff09;技术 2. 信道绑定&#xff08;Channel Bonding&#xff09; 3. 帧聚合&#xff08;Fram…...

Transformer数学推导——Q56 推导动态残差门控(Dynamic Residual Gating)的权重更新公式

该问题归类到Transformer架构问题集——残差与归一化——残差连接。请参考LLM数学推导——Transformer架构问题集。 1. 引言 在深度学习的演进历程中&#xff0c;网络结构的创新始终围绕着如何更高效地处理信息、提升模型性能展开。动态残差门控&#xff08;Dynamic Residual…...

Kaggle——House Prices(房屋价格预测)简单实现

题目‌&#xff1a; 从Kaggle的“House Prices - Advanced Regression Techniques”数据集使用Pandas读取数据&#xff0c;并查看数据的基本信息。选择一些你认为对房屋价格有重要影响的特征&#xff0c;并进行数据预处理&#xff08;如缺失值处理、异常值处理等&#xff09;。…...

Vue项目Git提交流程集成

Vue项目Git提交流程集成 本教程将指导你如何在Vue项目中集成一个规范化的Git提交流程&#xff0c;包括代码规范检查、提交信息规范和自动化工具配置。 前置条件 Node.js 14.0 和 npm/yarn/pnpmVue项目&#xff08;Vue 2或Vue 3均可&#xff09;Git已初始化的仓库 一、规范化…...

使用 OpenSSL 吊销 Kubernetes(k8s)的 kubeconfig 里的用户证书

一.用 OpenSSL 依据已有的自签名 CA 注销签发的证书的步骤 1. 准备工作 你得有自签名 CA 的私钥&#xff08;通常是 .key 文件&#xff09;、CA 证书&#xff08;通常是 .crt 文件&#xff09;以及证书吊销列表&#xff08;CRL&#xff09;文件。若还没有 CRL 文件&#xff0c…...

kubeadm部署k8s

我在阿里云上部署的k8s master 4c/8g/40g rocky linux8.9 node1/node2 2c/4g/40g rocky linux8.9 安装docker (我安装的是v1.19.1版本&#xff0c;是旧版本&#xff0c;可以装新版本&#xff0c;docker的版本和kubeadm,kubectl,kubelet版本相同&#xff09; 1.所有…...

FPGA实战项目1——坦克大战

FPGA实战项目1——坦克大战 根据模块化思想&#xff0c;可将此任务简单的进行模块拆分&#xff1a; 系统原理&#xff0c;模块划分&#xff0c;硬件架构&#xff0c;算法支持&#xff0c;Verilog实现框架 一&#xff0c;系统总体原理 1. 核心设计思想 硬件并行处理&#x…...

LeetCode 1781. 所有子字符串美丽值之和 题解

示例 输入&#xff1a;s "aabcb" 输出&#xff1a;5 解释&#xff1a;美丽值不为零的字符串包括 ["aab","aabc","aabcb","abcb","bcb"] &#xff0c;每一个字符串的美丽值都为 1这题光用文字解说还是无法达到讲…...

Spring Web MVC————入门(1)

今天开始正式带大家学习Spring部分的内容了&#xff0c;大家尝试去弄个专业版嗷&#xff0c;学习起来爽一点 在idea中下载这个插件就行了 我们之后开始创建Spring项目&#xff0c; 蓝色 部分自己起名&#xff0c;type选Maven&#xff0c;其他的默认就好了&#xff0c;之后nex…...

关于 js:1. 基础语法与核心概念

js 全称 JavaScript&#xff08;简称 JS&#xff09;&#xff0c;是 一种运行在浏览器和服务器端的脚本语言。 用途&#xff1a; 浏览器端交互&#xff08;如&#xff1a;点击按钮出现弹窗&#xff09; 网页动态内容渲染&#xff08;如&#xff1a;淘宝、京东页面更新&#xf…...