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

linux网络 | 传输层TCP | 认识tcp报头字段与分离

        前言: 本节内容继续传输层的讲解, 本节讲解的是tcp协议。 tcp协议是我们日常中最常用的协议。就比如我们浏览网页,我们知道网页时http或者https协议。 其实http或者https底层就是用的tcp协议。tcp协议,全名又称为传输控制协议,Translation Control protocol。现在为话不多说, 开始我们的学习吧!

        ps:关于讲解tcp, 仍旧采取和udp同样的策略。 先讨论tcp的报头和有效载荷如何分离, 然后讨论报头里面的内容, 最后是tcp的相关知识点。 本节内容是进入传输层tcp的第一节内容, 没有前置知识点, 友友们只要使用过tcp的socket相关接口就可以学习哦!

目录

为什么叫做TCP(传输控制协议)

TCP报头分离

十六位窗口大小 

流量控制

确认应答机制 

十六位窗口控件 

32位序号和32位确认序号  

捎带应答 

超时重传

32位序号 

32位确认序号 

为什么要有两种序号


为什么叫做TCP(传输控制协议)

        

        tcp协议在操作系统内部有一个叫做发送缓冲区,一个叫做接收缓冲区。然后平时我们在写代码的时候,我们自己在上层写的缓冲区,叫做用户缓冲区。

        我们平时使用的write,rev,read,send这些,本质上不是发送函数,而是拷贝函数。是将用户级缓冲区里面的内容,拷贝到内存级缓中区里面。至于数据什么时候发送,发送多少,出错了怎么办,由TCP协议自主决定。 这个就是自主控制,又因为它在传输层是来传输的, 所以就是传输控制。 

        这个知识点,就和我们之前学习文件是一样的,我们之前使用write,等接口,本质上就是把数据拷贝到内核的文件缓冲区里面。至于这个数据什么时候刷,刷多少,出错了怎么办,是由内核决定的。所以,从今天来看,磁盘和网络没有区别,只是将磁盘设备换成了网卡,就可以完成数据的IO,文件是IO,网络也是IO。下面这张图, 就是整个的传输控制过程:

        这里有个小的点就是关于全双工:tcp无论是客户端,还是服务端都能够接收和发送,这个过程,就叫做全双工。

TCP报头分离

        下面是整个的TCP报文。 

        十六位源端口号和十六位目的端口号,就知道我们要把数据交给哪个主机。

        标准报头是固定大小,固定20个字节。所以拿20个字节就是把标准报头全部拿到了。这个时候,就能拿到里面的一个字段:4位首部长度,标识报头的总长度是多少(标准 + 选项)。 四位首部长度长度最大范围是[0000, 1111], 也就是[0, 15]。 单位是4,也就是说, 四位首部长度的范围是[0, 60]。 所以, tcp报头最多是60字节, 标准占20, 所以选项最多就是40个。

        如果我们不谈选项,这个四位首部长度x * 4 = 20 ==> x = 5;也就是说0101, 那么四位首部长度最少就是0101。 最多是1111。另外,这里这个四位首部长度, 我们可以叫他自描述字段。 

        所以, 如何分离报头和报文, 就是:固定长度 + 自描述字段。

十六位窗口大小 

        我们第一个要谈的报头信息是十六位窗口大小。

        先说结论, 这个十六位窗口大小填写的是自己的接收缓冲区的大小。 

        为什么要有这个十六位窗口大小? 这个就涉及到了两个其他的知识点。 一个是‘流量控制’, 一个是‘确认应答’。下面我们来看一下这两个知识点:

流量控制

首先看一下流量控制

        首先我们先看一下客户端和服务端的报文交互:

        对于客户端和服务端来讲, 双方的任何通信, 都要有完整的报头, 就比如客户端发送一个你好,就要添加上完整的报头, 然后你好作为数据。 发送给服务端, 然后就写入了服务端的接收缓冲区。 服务端发送给客户端同样如此, 都是写入到客户端的接收缓冲区。

        但是, 有一个问题,我们的客户端向服务端发送请求的时候, 如果客户端请求发送的很快,服务端请求拿的很慢, 或者根本就不拿。 那么是不是就总是有一刻服务端的接收缓冲区被打满?服务端的接收缓冲区一旦被打满, 客户端如果再向服务端发送数据, 那么这些数据就写不进去, 就一定会出现大面积丢包的情况。所以, 客户端就要有手段能够降低发送请求的速度或者干脆不发了, 这种手段, 就叫做流量控制!!!

确认应答机制 

        什么是确认应答,就比如我们在和朋友在微信上面现天我们对我们的用友说,吃饭了吗。我们的朋友如果看到了,就会说:吃了。我们看到"吃了“,我们就知道对方看到了我们的消息,这就是确认应答。

        所以,确认应答机制, 就是:客户端向服务器发送任何请求、消息的时候,服务器都要向客户端进行响应。这样客户端就能保证,客户端到服务器方向的可靠性。相反,服务器向客户端发送的任何请求,客户端都响应,就能保证服务器到客户端方向的可靠性。

十六位窗口控件 

        客户端流量控制,发送的慢一点,依据是什么?对于发送方来说,发送的速度是由对方的接收缓冲区中剩余空间的大小来决定。问题是,我怎么知道对方的接收缓冲区中剩余的空间大小呢?别忘了,我们的tp是基于确认应答机制的,我们给服务端发送一个信息,对方就要返回给我们一个响应。对方给我们的响应里面又是包含完整的报头的! 报头里面又有一个16位窗口大小! 所以,这个16位窗口大小,填充的就是自身的接收缓冲区的剩余空间的大小!!! 

        所以, 下一个定义:16位窗口大小,填写的是自己的接收缓冲区中的大小!!  

32位序号和32位确认序号  

        在正式讲解这个报头字段之前先讨论两个小知识点:捎带应答和超时重传。

捎带应答 

什么是捎带应答,就是C或者S发了应答,又要发送tcp数据的时候,不再发送两次了,而是合成一份发送,这种情况下就叫做捎带应答。

        就类似于我们平时说话,你说吃了吗,朋友说吃了, 你吃了吗。 这种情况就是朋友将应答”吃了“和tcp数据”你吃了吗“合在了一起。即为捎带应答。

        另外一个知识点就是超时重传。

超时重传

        下面是tcp最基本, 最原本的通信过程:

        上面这种,一端发送数据,另一方进行应答。双方都发送数据,双方都进行应答,就能保证两个方向上的可靠性。
        另外,对于双方来说,如何确认一条消息对方没有收到呢?难道要一直等着对方的应答吗? 要知道,如果确认到对方没有收到应答后,就应该重传数据了。 所以一直等待对方的应答是不合理的。所以,一段时间后,如果没有收到应答,双方就会认为数据丢失,就要重新发送数据。——即为,超时重传。

 

32位序号 

        先来思考一下,世界上存不存在100%可靠的网络协议? 

        确认应答机制,有一个现象,就是我收到了应答,那么我就能保证应答之前的最新的发送的消息是被对方收到了。没有应答的数据,我们无法保证可靠性。
        所以,最新的一条消息,是没有应答的。在人类世界里,我们无法保证发送出去的消息是100%可靠的!所以,从全局的角度上,我们这个世界上是不存在100%可靠的协议的但是能保证局部上的消息的可靠性(最新消息之前的消息的可靠性。)

        一个发送,一个应答,效率是非常低下的。通常我们的客户端向服务器发消息,一次是发一批消息。

 

        但是, 这里有一个问题, 我们的服务器按顺序把它发出,服务器是否按顺序把它接受呢?

        就像一开始一群人在东北,现在要去广东。是否到达广东的顺序就是这群人离开东北的顺序呢。答案是不是的,有些人是坐飞机过去,有些人坐火车过去,有些人坐客车过去。有些人可能虽然出发的比较晚,但是人家是做飞机过去的,有些人虽然出发比较早,但是他是坐或者过去的。坐飞机的就有可能比坐火车的先到目的地。 

        所以,服务器按顺序发出信息,并不一定是按照顺序接收到。 这就导致了一个问题一一数据包乱序问题。

        乱序本身就是不可靠的一种,所以,每一个tcp报头里,会包含一个序号的东西一就是这个32位序号。这个32位序号,就是保证数据的按序到达。

         下面就是32位序号: 

32位确认序号 

        假如我今天一次给对方发送了多个报文,那么对方一定也要给我多个响应。我怎么知道响应对应的是哪一个报文呢?

        所以tcp为了区分响应对应的是哪一个报文的响应,就有了32位确认序号的概念。
        确认序号,填充的是,收到报文的序号 +1。
        为什么要这么规定,确认序号的意义: 表示确认序号之前的数据,我已经全部收到了!!!
        下一次发送请从确认序号指定的数字开始发送、就是说,客户端发送的序号是1000,那么服务端响应的序号就得是1001。
        这样做的意义是什么?
        这样做是为了允许应答有少量的丢失、就发送的数有100,200,300,那应只有3001,但是没有10012001但是不需要重传,默认就认为3001%前的报文全都响应了。

为什么要有两种序号

        我们知道,请求是有数据的,用的是32位序号,然后响应是没有数据的,用的是32位确认序号。但是,为什么不直接只使用32位序号或者32位确认序号呢?为什么非要用两种序号呢?
        原因就在于客户端给服务器发消息,服务器要给我应答,服务器应答,可能只是应答,也可能是指捎带应答。应答就是纯报头,只是用32位确认序号,捎带应答就是要有数据,并且捎带应答因为也有数据,所以就要有32位序号。也就是说,因为一个报文,他可能有双重身份,既可能是应答,也可能是带有数据,所以序号和确认序号有可能同时存在,所以协议里面必须把这两个分开,不能复用。 

 

  ——————以上就是本节全部内容哦, 如果对友友们有帮助的话可以关注博主, 方便学习更多知识哦!!!   

相关文章:

linux网络 | 传输层TCP | 认识tcp报头字段与分离

前言: 本节内容继续传输层的讲解, 本节讲解的是tcp协议。 tcp协议是我们日常中最常用的协议。就比如我们浏览网页,我们知道网页时http或者https协议。 其实http或者https底层就是用的tcp协议。tcp协议,全名又称为传输控制协议&…...

定位,用最通俗易懂的方法2.1:CRLB实例

二郎就不设置什么VIP可见啥的了,这样大家都能看到。 如果觉得受益,可以给予一些打赏,也算对原创的一些鼓励,谢谢。 钱的用途:1)布施给他人;2)二郎会有更多空闲时间写教程 起因&…...

深入内核讲明白Android Binder【三】

深入内核讲明白Android Binder【三】 前言一、服务的获取过程内核源码解析1. 客户端获取服务的用户态源码回顾2. 客户端获取服务的内核源码分析2.1 客户端向service_manager发送数据1. binder_ioctl2. binder_ioctl_write_read3. binder_thread_write4. binder_transaction4.1 …...

vim如何显示行号

:set nu 显示行号 :set nonu 不显示行号...

【线性代数】列主元法求矩阵的逆

列主元方法是一种用于求解矩阵逆的数值方法,特别适用于在计算机上实现。其基本思想是通过高斯消元法将矩阵转换为上三角矩阵,然后通过回代求解矩阵的逆。以下是列主元方法求解矩阵 A A A 的逆的步骤: [精确算法] 列主元高斯消元法 步骤 1&am…...

T-SQL语言的数据库编程

T-SQL语言的数据库编程 1. 引言 在信息化迅速发展的今天,数据库已经成为数据管理和使用的重要工具。其中,T-SQL(Transact-SQL)作为微软SQL Server的扩展SQL语言,不仅用于数据查询和管理,还能够进行复杂的…...

【Linux】18.Linux进程控制(2)

文章目录 3. 进程程序替换3.1 单进程版 -- 看看程序替换3.2 替换原理3.3 替换函数函数解释命名理解 3.4 多进程版 -- 验证各种程序替换接口3.5 自定义shell 3. 进程程序替换 3.1 单进程版 – 看看程序替换 makefile mycommand:mycommand.cgcc -o $ $^ -stdc99 .PHONY:clean …...

在 Ubuntu 上安装 MySQL 的详细指南

在Ubuntu环境中安装 mysql-server 以及 MySQL 开发包(包括头文件和动态库文件),并处理最新版本MySQL初始自动生成的用户名和密码,可以通过官方的APT包管理器轻松完成。以下是详细的步骤指南,包括从官方仓库和MySQL官方…...

Hive: Hive的优缺点,使用方式,判断Hive是否启动(jps),元数据的存储,Hive和Hadoop的关系

hive 是一个构建在 Hadoop 上的数据仓库 工具 ( 框架 ) ,可以将结构化的数据文件映射成一张数据表,并可以使用类sql 的方式来对这样的数据文件进行读,写以及管理(包括元数据)。这套 HIVE SQL 简称 HQL。 hive 的执行引…...

Social LSTM:Human Trajectory Prediction in Crowded Spaces | 文献翻译

概要 行人遵循不同轨迹以避免障碍物和容纳同行者。任何在这种场景中巡航的自动驾驶车辆都需要能够遇见行人的未来位置并相应地调整其路线以避免碰撞。轨迹预测问题能够被看作一个顺序生成任务,其中我们对基于行人过去的位置预测其未来的轨迹感兴趣。根据最近RNN&am…...

前后端交互过程

一、前后端交互过程 前后端交互是指客户端(前端)与服务器(后端)之间的数据通信。以下是一个典型的前后端交互流程: 前端请求: 用户在浏览器上与前端界面交互,如点击按钮、提交表单。前端使用 A…...

【计算机视觉】人脸识别

一、简介 人脸识别是将图像或者视频帧中的人脸与数据库中的人脸进行对比,判断输入人脸是否与数据库中的某一张人脸匹配,即判断输入人脸是谁或者判断输入人脸是否是数据库中的某个人。 人脸识别属于1:N的比对,输入人脸身份是1&…...

Spark Streaming的核心功能及其示例PySpark代码

Spark Streaming是Apache Spark中用于实时流数据处理的模块。以下是一些常见功能的实用PySpark代码示例: 基础流处理:从TCP套接字读取数据并统计单词数量 from pyspark import SparkContext from pyspark.streaming import StreamingContext# 创建Spar…...

高效实现 Markdown 转 PDF 的跨平台指南20250117

高效实现 Markdown 转 PDF 的跨平台指南 引言 Markdown 文件以其轻量化和灵活性受到开发者和技术写作者的青睐,但如何将其转换为易于分享和打印的 PDF 格式,是一个常见需求。本文整合了 macOS、Windows 和 Linux 三大平台的转换方法,并探讨…...

冯诺依曼架构和哈佛架构的主要区别?

冯诺依曼架构(Von Neumann Architecture)和哈佛架构(Harvard Architecture)是两种计算机体系结构,它们在存储器组织、指令处理和数据存取等方面有明显的不同。以下是它们的主要区别: 1.存储器结构 冯诺依曼…...

AI 新动态:技术突破与应用拓展

目录 一.大语言模型的持续进化 二.AI 在医疗领域的深度应用 疾病诊断 药物研发 三.AI 与自动驾驶的新进展 四.AI 助力环境保护 应对气候变化 能源管理 后记 在当下科技迅猛发展的时代,人工智能(AI)无疑是最具影响力的领域之一。AI 技…...

Java锁 从乐观锁和悲观锁开始讲 面试复盘

目录 面试复盘 Java 中的锁 大全 悲观锁 专业解释 自我理解 乐观锁 专业解释 自我理解 悲观锁的调用 乐观锁的调用 synchronized和 ReentrantLock的区别 相同点 区别 详细对比 总结 面试复盘 Java 中的锁 大全 悲观锁 专业解释 适合写操作多的场景 先加锁可以…...

【RabbitMq】RabbitMq高级特性-延迟消息

延迟消息 什么是延迟消息死信交换机延迟消息插件-DelayExchange其他文章 什么是延迟消息 延迟消息:发送者发送消息时指定一个时间,消费者不会立刻收到消息,而是在指定时间之后才收到消息。 延迟任务:设置在一定时间之后才执行的任…...

MindAgent:基于大型语言模型的多智能体协作基础设施

2023-09-18 ,加州大学洛杉矶分校(UCLA)、微软研究院、斯坦福大学等机构共同创建的新型基础设施,目的在评估大型语言模型在游戏互动中的规划和协调能力。MindAgent通过CuisineWorld这一新的游戏场景和相关基准,调度多智…...

Linux内存管理(Linux内存架构,malloc,slab的实现)

文章目录 前言一、Linux进程空间内存分配二、malloc的实现机理三、物理内存与虚拟内存1.物理内存2.虚拟内存 四、磁盘和物理内存区别五、页页的基本概念:分页管理的核心概念:Linux 中分页的实现:总结: 六、伙伴算法伙伴算法的核心…...

【机器学习实战中阶】比特币价格预测

比特币价格预测项目介绍 比特币价格预测项目是一个非常有实用价值的机器学习项目。随着区块链技术的快速发展,越来越多的数字货币如雨后春笋般涌现,尤其是比特币作为最早的加密货币,其价格波动备受全球投资者和研究者的关注。本项目的目标是…...

【JVM-9】Java性能调优利器:jmap工具使用指南与应用案例

在Java应用程序的性能调优和故障排查中,jmap(Java Memory Map)是一个不可或缺的工具。它可以帮助开发者分析Java堆内存的使用情况,生成堆转储文件(Heap Dump),并查看内存中的对象分布。无论是内…...

使用vscode在本地和远程服务器端运行和调试Python程序的方法总结

1 官网下载 下载网址:https://code.visualstudio.com/Download 如下图所示,可以分别下载Windows,Linux,macOS版本 历史版本下载链接: https://code.visualstudio.com/updates 2 安装Python扩展工具 打开 VS Code,安装 Microsoft 提供的官…...

AI 编程工具—Cursor 对话模式详解 Chat、Composer 与 Normal/Agent 模式

Cursor AI 对话模式详解:Chat、Composer 与 Normal/Agent 模式 一、简介 Cursor 是一个强大的 AI 辅助编程工具,它提供了多种对话模式来满足不同的开发需求。主要包括: Chat 模式:直接对话交互Composer 模式:结构化编程助手Normal/Agent 模式:不同的 AI 响应策略打开Ch…...

【MySQL】数据库基础知识

欢迎拜访:雾里看山-CSDN博客 本篇主题:【MySQL】数据库基础知识 发布时间:2025.1.21 隶属专栏:MySQL 目录 什么是数据库为什么要有数据库数据库的概念 主流数据库mysql的安装mysql登录使用一下mysql显示数据库内容创建一个数据库创…...

ChatGPT开发教程指南

ChatGPT开发教程指南 一、ChatGPT 概述二、开发环境搭建(一)硬件要求(二)软件要求 三、开发流程(一)数据处理(二)模型选择与训练(三)接口开发 四、示例代码 随…...

OpenEuler学习笔记(四):OpenEuler与CentOS的区别在那里?

OpenEuler与CentOS的对比 一、基本信息 起源与背景: OpenEuler:由华为发起,后捐赠给开放原子开源基金会,旨在构建一个开放、多元化的云计算和边缘计算平台,以满足华为及其他企业的硬件和软件需求。CentOS:…...

spring cloud如何实现负载均衡

在Spring Cloud中,实际上并没有直接支持lb:\\这样的URL前缀来自动解析为负载均衡的服务地址。lb:\\这样的表示可能是在某些特定框架、文档或示例中自定义的,但它并不是Spring Cloud官方API或规范的一部分。 Spring Cloud实现负载均衡的方式通常依赖于服…...

LeetCode:37. 解数独

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:37. 解数独 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff…...

如何在idea中搭建SpringBoot项目

如何在idea中快速搭建SpringBoot项目 目录 如何在idea中快速搭建SpringBoot项目前言一、环境准备:搭建前的精心布局 1.下载jdk (1)安装JDK:(2)运行安装程序:(3)设置安装…...

STM32补充——FLASH

目录 1.内部FLASH构成(F1) 2.FLASH读写过程(F1) 2.1内存的读取 2.2闪存的写入 2.3FLASH接口寄存器(写入 & 擦除相关) 3.FLASH相关HAL库函数简介(F1/F4/F7/H7) 4.编程实战 …...

ASP.NET Core 中的 JWT 鉴权实现

在当今的软件开发中,安全性和用户认证是至关重要的方面。JSON Web Token(JWT)作为一种流行的身份验证机制,因其简洁性和无状态特性而被广泛应用于各种应用中,尤其是在 ASP.NET Core 项目里。本文将详细介绍如何在 ASP.…...

Docker配置国内镜像源

访问docker hub需要科学上网 在 Docker 中配置镜像地址(即镜像加速器)可以显著提升拉取镜像的速度,尤其是在国内访问 Docker Hub 时。以下是详细的配置方法: 1. 配置镜像加速器 Docker 支持通过修改配置文件来添加镜像加速器地址…...

qiankun+vite+vue3

基座与子应用代码示例 本示例中,基座为Vue3,子应用也是Vue3,由于qiankun不支持Vite构建的项目,这里还要引入 vite-plugin-qiankun 插件 基座(主应用) 加载qiankun依赖 npm i qiankun -S qiankun配置(src/qiankun) src/qiankun/config.ts export default {subApp…...

如何使用AI工具cursor(内置ChatGPT 4o+claude-3.5)

⚠️温馨提示: 禁止商业用途,请支持正版,充值使用,尊重知识产权! 免责声明: 1、本教程仅用于学习和研究使用,不得用于商业或非法行为。 2、请遵守Cursor的服务条款以及相关法律法规。 3、本…...

Linux内核编程(二十一)USB驱动开发-键盘驱动

一、驱动类型 USB 驱动开发主要分为两种:主机侧的驱动程序和设备侧的驱动程序。一般我们编写的都是主机侧的USB驱动程序。 主机侧驱动程序用于控制插入到主机中的 USB 设备,而设备侧驱动程序则负责控制 USB 设备如何与主机通信。由于设备侧驱动程序通常与…...

vue3+ts watch 整理

watch() 一共可以接受三个参数,侦听数据源、回调函数和配置选项 作用:监视数据的变化(和Vue2中的watch作用一致) 特点:Vue3中的watch只能监视以下四种数据: ref定义的数据。 reactive定义的数据。 函数返…...

2025年最新深度学习环境搭建:Win11+ cuDNN + CUDA + Pytorch +深度学习环境配置保姆级教程

本文目录 一、查看驱动版本1.1 查看显卡驱动1.2 显卡驱动和CUDA对应版本1.3 Pytorch和Python对应的版本1.4 Pytorch和CUDA对应的版本 二、安装CUDA三、安装cuDANN四、安装pytorch五、验证是否安装成功 一、查看驱动版本 1.1 查看显卡驱动 输入命令nvidia-smi可以查看对应的驱…...

USART_串口通讯轮询案例(HAL库实现)

引言 前面讲述的串口通讯案例是使用寄存器方式实现的,有利于深入理解串口通讯底层原理,但其开发效率较低;对此,我们这里再讲基于HAL库实现的串口通讯轮询案例,实现高效开发。当然,本次案例需求仍然和前面寄…...

CAN 网络介绍

背景 在T-Box 产品开发过程中,我们离不开CAN总线,因为CAN总线为我们提供了车身的相关数据,比如,车速、油耗、温度等。用于上报TSP平台,进行国标认证;也帮助我们进行车身控制,比如车门解锁/闭锁…...

pytorch 多机多卡训练方法

在深度学习训练中,使用多机多卡(多台机器和多块 GPU)可以显著加速模型训练过程。 PyTorch 提供了多种方法来实现多机多卡训练,以下是一些常用的方法和步骤: 1. 使用 torch.distributed 包 PyTorch 的 torch.distribut…...

【智能控制】年末总结,模糊控制,神经网络控制,专家控制,遗传算法

关注作者了解更多 我的其他CSDN专栏 毕业设计 求职面试 大学英语 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 …...

Linux系统 C/C++编程基础——使用make工具和Makefile实现自动编译

ℹ️大家好,我是练小杰,今天周二了,距离除夕只有6天了,新的一年就快到了😆 本文是有关Linux C/C编程的make和Makefile实现自动编译相关知识点,后续会不断添加相关内容 ~~ 回顾:【Emacs编辑器、G…...

kafka学习笔记7 性能测试 —— 筑梦之路

kafka 不同的参数配置对 kafka 性能都会造成影响,通常情况下集群性能受分区、磁盘和线程等影响因素,因此需要进行性能测试,找出集群性能瓶颈和最佳参数。 # 生产者和消费者的性能测试工具 kafka-producer-perf-test.sh kafka-consumer-perf-t…...

C#与AI的共同发展

C#与人工智能(AI)的共同发展反映了编程语言随着技术进步而演变,以适应新的挑战和需要。自2000年微软推出C#以来,这门语言经历了多次迭代,不仅成为了.NET平台的主要编程语言之一,还逐渐成为构建各种类型应用程序的强大工具。随着时…...

multus使用教程

操作步骤如下: 1.在vmware vsphere上配置所有主机使用的端口组安全项 Forged transmits 设置为: Accept Promiscuous Mode 设置为:Accept Promiscuous Mode(混杂模式)和Forged Transmits(伪传输&#xff09…...

用JAVA写算法之输入输出篇

本系列适合原来用C语言或其他语言写算法,但是因为找工作或比赛的原因改用JAVA语言写算法的同学。当然也同样适合初学算法,想用JAVA来写算法题的同学。 常规方法:使用Scanner类和System.out 这种方法适用于leetcode,以及一些面试手…...

场馆预定平台高并发时间段预定实现V2

🎯 本文档介绍了场馆预订系统接口V2的设计与实现,旨在解决V1版本中库存数据不一致及性能瓶颈的问题。通过引入令牌机制确保缓存和数据库库存的最终一致性,避免因服务器故障导致的库存错误占用问题。同时,采用消息队列异步处理库存…...

(1)STM32 USB设备开发-基础知识

开篇感谢: 【经验分享】STM32 USB相关知识扫盲 - STM32团队 ST意法半导体中文论坛 单片机学习记录_桃成蹊2.0的博客-CSDN博客 USB_不吃鱼的猫丿的博客-CSDN博客 1、USB鼠标_哔哩哔哩_bilibili usb_冰糖葫的博客-CSDN博客 USB_lqonlylove的博客-CSDN博客 USB …...

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…...