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

详细剖析传输层协议(TCP和UDP)

详细讲解传输层的网络协议,为什么TCP是可靠连接协议,凭什么能做到不丢包,有哪些机制保证可靠呢?

TCP/UDP

  • UDP
  • TCP
    • **三次握手和四次挥手**
    • **滑动窗口**
    • **拥塞控制**
    • (socket套接字)**listen的第二个参数**

UDP

UDP也是传输层协议,当我们在应用层把数据序列化之后,并不是直接通过网络就能发送到对方主机,需要向下交付,交给传输层然后经过传输层协议进行封装报头,再向下交付。

这就是udp的整体数据,前八个字节就是udp的报头,是定长的,会拿结构体表示。后面的数据就是应用层数据。

在这里插入图片描述
如果收到的udp报文不完整,校验和会检查出来

TCP

下面是TCP的数据报头格式

在这里插入图片描述

  • 源端口号是我们发送方进程的端口
  • 目的端口号是接收方进程的端口
  • 32位序列号和确认序列号: tcp是面向字节流的,当应用层把数据拷贝到传输层的发送缓冲区内时,缓冲区可以使一个char类型的数组存储,例如发送1000个字节,确认序列号可以是0或者任意,如果是0开始,0+1000字节,服务端返回的报头中确认序列号就是1001,代表可以从1001个字节开始发送确认序号不但是对当前报文做确认,还是对之前所有报文做确认,代表前面所有报文都已经收到。
  • urg代表紧急指针是否有效,如果有效,16位紧急指针代表在有效载荷的偏移量,紧急数据只有一个字节,标志位就是表示不同类型的报文。

三次握手和四次挥手

下面是三次握手图解
在这里插入图片描述

tcp是一个可靠的传输协议,在服务端和客户端进行通信的时候,需要进行连接,被称为三次握手。

一台主机可能建立多个链接,所以OS需要把链接管理起来,采用struct结构体的方式,先描述,再组织,struct可能是位段

三次握手是由操作系统自动完成的。

为什么是3次握手?

  1. 没有明显的设计漏洞,一旦建立连接出现异常,可以嫁接给client,server成本较低
  2. 验证双方通信信道的通畅情况,三次握手是验证全双工通信信道通畅的最小成本。更多奇数次会有更高成本。
  3. 如果是两次,容易收到攻击,SYN洪水。三次是奇数次,客户端一定是最后一个发送ACK的。

下面是四次挥手图解
在这里插入图片描述

​ 四次挥手是由客户端向服务端发起FIN请求,然后服务端维持CLOSE_WAIT状态,然后ack回复。等到服务端把该发的数据全部发送给客户端之后,然后发送FIN请求,客户端收到这个请求维持TIME_WAIT状态一段时间,服务端维持LAST_ACK状态,等收到客户端回复的ACK,服务端关闭。

如果服务端收到来自客户端的第一次FIN请求,维持CLOSE_WAIT状态,如果不close(fd),服务端会一直维持CLOSE_WAIT状态。

客户端和服务端是平等的,上面的状态 是客户端请求服务端,如果是服务端先发送请求,也是一样的。

所以就解释了为什么云服务器上写代码时,如果服务端先断开连接,那么端口号就不能用了,因为最后一次发送ACK会进入TIME_WAIT状态,端口号还在被占用,会等待一段时间之后才会关闭连接。

//端口号复用,如果不想让server端进行time_wait的等待状态,可以调用下面接口。
int opt=1;
setsockopt(_sock,SOL_SOCKET,SO_REUSEADDR|SO_REUSEPORT,&opt,sizeof(opt));

滑动窗口

双方使用TCP协议,有发送缓冲区和接受缓冲区,每次发送的报文都要收到对应的ACK应答,应答报文里面有16位窗口大小,这个16位窗口大小代表了对方接收缓冲区的大小,防止报文发送过快引起报文丢失造成资源浪费,或者报文发送过慢引起效率底下的问题。

发送方和接收方有两种发送和接受的模式,一种是串行,就是发送一个报文等收到应答报文之后,才能发送下一个报文,这种效率低下。还有一种就是可以先发送多条报文给对方,然后对方对这些报文一一发送应答报文,这种是并行。
在这里插入图片描述

而在发送缓冲区里面有一个滑动窗口,滑动窗口里面的数据是可以不收到前面报文的应答报文,然后直接发送给对端的数据,例如像下面这样
在这里插入图片描述

那么这个窗口大小是多少呢?答案是一定不能超过对方接收缓冲区的大小。
在这里插入图片描述

TCP是面向字节流的,所以发送缓冲区也是以字节为单位的。winstart就是起始下标,winend就是结束下标,start 和end同时++,就是窗口在滑动。

补充知识:

  1. 滑动窗口只能向右滑,不能向左

  2. 滑动窗口根据对方接受能力可以变大变小,start不动end++就变大。end不动start++就变小。

  3. 每次的ACK报头中响应的确认序号就是下一次要发送的起始下标,起始下标加上窗口大小就是滑动窗口大小。

  4. 滑动窗口不会越界,因为可以把缓冲区设置成环形队列。

  5. 如果第一个报文或者中间报文丢失分为两种情况:

    1. ACK丢失,这个不必担心,因为后面报文的ACK如果收到了,就代表前面的一定收到了,确认序号就代表前面报文全部收到,下一次发送请从最大的确认序号开始发送。
    2. 数据丢失了,第一个数据或者中间的丢失了都是同理,如果第一个数据是1001-2000,第二个是2001-3000,以此类推,后面的数据返回的ACK报文的确认序号一定是1001,因为尽管2000后面的收到了,也不能不管1001~2000,后面多个ACK报文都是1001的确认序号,操作系统就知道报文丢失了,就会进行补发1001-2000这段数据。

拥塞控制

学习了上面的滑动窗口,我们明白了两端主机在进行通行时,已经把双方主机的情况考虑的特别全面了,例如确认应答,超时重传,三次握手四次挥手,还有基于流量控制的滑动窗口。但是我们的报文是在网络中进行传输的,网络中可是不止我们两台主机在通信,而是成千上万乃至上亿的主机在通信,所以网络中一定是同时存在大量的数据的,如果传输过程中因为网络的原因发生大量的丢包,这个怎么办呢?为什么呢?

如果是因为网络的原因丢包可能是因为网络中的数据太多发送拥塞,如果真的是因为发送了拥塞而丢包导致的,那么我们的通信双方第一时间可能会启动超时重传,但是网络中因为发生了堵塞的情况,这个时候网络中的多台主机同时启动超时重传机制,网络中本来就已经有大量的数据了,这样只会导致拥塞情况更加严重,所以这时候绝对不能再发送大量的数据了。

当发送大量的丢包时,OS就判断可能是网络中出现了拥塞,所以就需要对网络中的情况进行探测,试探的发送一个报文,如果没有回应,就说明网络拥塞严重,等待一段时间再探测。如果收到了ACK回应,就发送两个报文,如果再收到回应就发送四个报文。就这样以2的指数级别进行增长。以指数级别增长开始慢,后来就会特别快,当然也不会一直以指数级别增长下去,到达一定的阈值之后就会以线性的方式增长,这种机制叫做慢启动,用来摸清网络的承受能力。

OS需要一直来试探网络中数据的承受能力,来监听网络的状态,所有就有了拥塞窗口,来进行拥塞控制。

所以上面的滑动窗口的大小其实是不但要考虑接收方缓冲区的大小,还要考虑拥塞窗口的大小,如果拥塞窗口比接受缓冲区数据承载能力大,就不必考虑拥塞窗口,反之就要以拥塞窗口的大小为滑动窗口的大小。

(socket套接字)listen的第二个参数

之前学习listen函数有两个参数,第一个就是socket返回的文件描述符,但是第二个参数就没有讲解,我们现在理解一下第二个参数的含义。

使用TCP协议,先创建socket套接字之后,然后listen函数监听和server端连接的所有客户端,收到和server连接的客户端的请求,OS在底层会自动完成三次握手,然后进入ESTABLISHED状态。
在这里插入图片描述

然后用accept函数和客户端进行通信,在accept被调用之前,客户端和服务端就已经建立好连接了,accept只不过是把已经建立好的连接拿到上层,之前我们把第二个参数设置成了32或者更大,就是按照上面的流程完成了连接通信,如果我们把第二个参数设置成1,会发生什么?

如果设置成1,并且不调用accept,不让上层把建立好的连接取走,那么前两个客户端的连接是正常的,客户端和服务端都会进入ESTABLISHED状态,到了第三个就会出现问题,第三个客户端也会维持ESTABLISHED状态,但是服务端是SYN_RCVD状态,也就代表服务端给客户端响应SYN+ACK之后并没有进入ESTABLISHED状态。

这是因为OS底层会保持两个队列,一个全连接队列,一个半连接队列,全连接队列的最大个数就是第二个参数加一,只要全连接队列中没有连接被accept取走,之后来的所有连接请求只能保持在半连接队列里面,并且这个半连接队列的生命周期很短。

这样并不是服务器只能同时和两个连接的客户端通信,而是没有被accept来得及读取到的连接就先放在全连接队列里面,一旦accept读取到了这个全连接,这个全连接就会被上层读走,就会被移除。然后半连接队列就能向全连接队列push一个连接。

相关文章:

详细剖析传输层协议(TCP和UDP)

详细讲解传输层的网络协议,为什么TCP是可靠连接协议,凭什么能做到不丢包,有哪些机制保证可靠呢? TCP/UDP UDPTCP**三次握手和四次挥手****滑动窗口****拥塞控制**(socket套接字)**listen的第二个参数** UD…...

ZYNQ移植FreeRTOS与OpenAMP双核开发实践指南

ZYNQ系列芯片凭借其“ARM处理器(PS)+ FPGA(PL)”的异构架构,在嵌入式系统中被广泛应用于高性能计算与实时控制场景。然而,如何高效利用其双核资源并实现实时操作系统(如FreeRTOS)的移植与双核通信,是开发者面临的关键挑战。本文将深入探讨FreeRTOS移植、双核固化启动以…...

VUE+ElementUI 使用el-input类型type=“number” 时,取消右边的上下箭头

项目场景: 提示:这里简述项目相关背景: 在项目中有时候需要输入框的type“number”,这个时候,输入框的右边就会出现两个按钮,这两个按钮可以递增/递减,但是这样输入框看上去就不太美观&#x…...

RabbitMQ高级特性

1.消息的可靠投递 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。 1.confirm 确认模式 2.return 退回模式 rabbitmq 整个消息投递的路径为: producer…...

在Python中调用C/C++函数并与MPI集成

在Python中调用C/C函数并与MPI集成 要在Python环境中调用C/C函数并让Python和C/C端都能使用MPI进行通信,有几种方法可以实现。下面我将介绍几种常见的方法。 方法一:使用mpi4py C/C MPI扩展 1. 准备工作 首先确保你已安装: MPI实现 (如OpenMPI或MP…...

软件架构评估方法全面解析

介绍 在软件开发过程中,架构设计的好坏直接影响系统的可维护性、可扩展性和性能。因此,软件架构评估(Software Architecture Evaluation)成为确保架构质量的关键步骤。本文将介绍几种主流的架构评估方法,包括ATAM、SA…...

场景可视化与数据编辑器:构建数据应用情境​

场景可视化是将数据与特定的应用场景相结合,借助数据编辑器对数据进行灵活处理和调整,通过模拟和展示真实场景,使企业能够更直观地理解数据在实际业务中的应用和影响,为企业的决策和运营提供有力支持。它能够将抽象的数据转化为具…...

MATLAB导出和导入Excel文件表格数据并处理

20250507 1.MATLAB使用table函数和writetable函数将数据导出Excel表格文件 我们以高斯函数为例子,高斯函数在数学和工程领域有着广泛的应用,它的一般形式为: 其中是均值,决定了函数的中心位置; 是标准差,决…...

2025年渗透测试面试题总结-渗透岗位全职工作面试(附回答)(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 一、通用基础类问题 1. 自我介绍 2. 职业动机与规划 3. 加班/出差接受度 二、安全技术类问题 1. 漏…...

【django.db.utils.OperationalError: unable to open database file】

解决platform.sh 环境下,无法打开数据库问题 场景 在platform.sh 执行python manage.py createsuperuser是提示 django.db.utils.OperationalError: unable to open database file 错误 原因 由于settings.py文件中 本地数据库配置在线上配置后,导致…...

【人工智能】解锁AI潜能:LM Studio多模型并行运行DeepSeek与开源大模型的实践指南

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大语言模型(LLM)的快速发展,LM Studio作为一款本地化部署工具,以其简单易用的图形化界面和强大的模型管理能力受到广泛关注。本文深…...

集群免密登录

免密登录原理 核心步骤 在hadoop100上 生成密钥对。把hadoop100的公钥发到hadoop101上。在hadoop100上登录hadoop101,验证效果 具体操作 登录 hadoop100。使用finalshell连接。在hadoop100上,运行命令:ssh-keygen -t rsa。然后根据提示连续敲…...

【C/C++】errno/strerror 和 GetLastError()/FormatMessage 的区别

strerror 和 errno 详解 printf("Error: %s\n", strerror(errno));这行代码用于在 C 语言中输出系统错误信息,但它与 Windows 的 GetLastError() 有重要区别。下面我将详细解释每个部分及其工作原理。 1. 组件解析 errno 定义:errno 是一个…...

ASP.NET MVC4 技术单选及多选题目汇编

一、单选题(共50题,每题2分) 1、ASP.NET MVC4 的核心架构模式是什么? A. MVP B. MVVM C. MVC D.三层架构 答案:C 2、在 MVC4 中,默认的路由配置文件名是? A. Global.asax B. RouteConfig.cs C.…...

趣味编程:梦幻万花筒

目录 1.效果展示 2.源码展示 3.代码逻辑详解 3.1 头文件与宏定义 3.2 HSV函数转RGB颜色函数 3.3 主函数 初始化部分 循环部分 线条绘制部分 刷新和延时部分 结束部分 4.小结 本篇博客主要介绍趣味编程用C语言实现万花筒小程序。 1.效果展示 2.源码展示 #define…...

使用 Selenium 截图功能,截不到原生 JavaScript 弹窗

本篇内容源自ai注意甄别 Selenium WebDriver 的标准截图 (getScreeenshotAs) 捕获的是浏览器渲染的 DOM 内容,而 JavaScript 的 alert()、confirm()、prompt() 这类弹窗是浏览器级别的原生 UI 元素,它们不属于页面的 DOM 结构。 为什么会这样&#xff…...

dubbo-token验证

服务提供者过滤器 import java.util.Map; import java.util.Objects;/*** title ProviderTokenFilter* description 服务提供者 token 验证* author zzw* version 1.0.0* create 2025/5/7 22:17**/ Activate(group CommonConstants.PROVIDER) public class ProviderTokenFilt…...

C++入门之认识整型

目录 一、变量 1.导入 2.变量 2.1 变量的作用 2.2 变量的定义方式 2.3 变量的“规矩” 二、数据类型 1.概念 2.int整型 三、C的常见运算 四、输入操作 4.1 cin 4.2 try 1 try 4.2.1 cin>> 4.2.2 定义的整数类型,输入字母会怎么样? …...

【数据结构入门训练DAY-28】蓝桥杯算法提高VIP-产生数

文章目录 前言一、题目二、解题思路结语 前言 本次训练内容 训练高精度乘法。训练解题思维。 一、题目 给出一个整数 n 和 k 个变换规则。规则:一位数可变换成另一个一位数:规则的右部不能为零。例如:n234。有规则(k&…...

学习笔记:黑马程序员JavaWeb开发教程(2025.3.29)

11.5 案例-文件上传-阿里云OSS-入门 出现报错:Process exited with an error: 1 (Exit value: 1),点击exec那一行,出现错误原因:Command execution failed. 在CSDN上找到了解决方法: 之后出现新的报错:Caug…...

大语言模型中的“温度”参数到底是什么?如何正确设置?

近年来,市面上涌现了大量调用大模型的工具,如 Dify、Cherry Studio 等开源或自研平台,几乎都提供了 “温度”(Temperature) 选项。然而,很多人在使用时并不清楚该如何选择合适的温度值。 今天,…...

【C++】C++中的类型转换

🚀write in front🚀 📜所属专栏: C学习 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我最大…...

Go语言基础学习详细笔记

文章目录 初步了解Go语言Go语言诞生的主要问题和目标Go语言应用典型代表Go语言开发环境搭建经典HelloWorld 基本程序结构编写学习变量常量数据类型运算符 条件语句if语句switch 语句 跳转语句常用集合和字符串数组切片Map实现Set**字符串** 函数**基本使用用例验证** 面向对象编…...

初始图形学(7)

上一章完成了相机类的实现,对之前所学的内容进行了封装与整理,现在要学习新的内容。 抗锯齿 我们放大之前渲染的图片,往往会发现我们渲染的图像边缘有尖锐的"阶梯"性质。这种阶梯状被称为"锯齿"。当真实的相机拍照时&a…...

Linux 安装交叉编译器后丢失 `<asm/errno.h>` 的问题及解决方案

前言 在 Linux (Ubuntu等)环境下安装某些软件或开发环境时,我们可能会意外地引入交叉编译工具链,尤其是用于 ARM 架构的交叉编译器,比如 gcc-arm-linux-gnueabi 等。而这种行为会修改系统原有的开发环境,甚至导致无法编译原生程序。本文记录一次在 Ubuntu 18.04 上编译 …...

无人机上的热成像相机可以单独使用吗?

想知道无人机上的热成像相机是否可以单独使用,这需要从多个方面来分析。首先,得理解热成像相机的工作原理和依赖条件。热成像本身需要传感器和处理器来捕捉和处理红外辐射,所以无人机是否必须作为载体呢? 无人机上的热成像相机是否…...

go基于redis+jwt进行用户认证和权限控制

go基于redisjwt进行用户认证和权限控制: 基于 jwt 实现用户认证 基于 redis 记录用户的角色和权限 效果 实现 用户认证 和 权限控制 核心实现 下面的例子:有三个用户,分别为三个角色:admin、user、manager 路由: …...

深入理解Java三大特性:封装、继承和多态

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...

复刻低成本机械臂 SO-ARM100 上位机控制调试

视频讲解: 复刻低成本机械臂 SO-ARM100 上位机控制调试 SO-ARM100机械臂组装并且标定完成后,下一步就是整臂的调试,由于只做了follower这个从臂,所以要使用lerobot仓库中遥操作控制的方式就不行了,这里发现了bambot这个…...

代码随想录图论part4

图论part04 字符串接龙 代码随想录 该题本质是最短路径问题,方法:广搜 通过逐个修改字符完成从一点到另一点的变换 具体是通过对栈顶字符串的每个字符用26个字母逐个替换 每次替换要判断是否抵达终点 抵达终点返回结果 没有抵达终点就判断是否是已…...

台州智惠自动化签约智橙PLM,让创新持续发生

日前,台州智惠自动化科技有限公司(以下简称“智惠自动化”)正式签约了智橙PLM,本次签约是工业自动化领域的革新者和工业研发创新平台的“新新联合”,对“制造之都”台州的制造业转型有着重要意义和深远影响。 智惠自动…...

南京大学OpenHarmony技术俱乐部正式揭牌 仓颉编程语言引领生态创新

2025年4月24日,由OpenAtom OpenHarmony(以下简称“OpenHarmony”)项目群技术指导委员会与南京大学软件学院共同举办的“南京大学OpenHarmony技术俱乐部成立大会暨基础软件与生态应用论坛”在南京大学仙林校区召开。 大会聚焦国产自主编程语言…...

实现一个漂亮的Three.js 扫光地面 圆形贴图扫光

实现一个漂亮的Three.js 扫光地面 圆形贴图扫光 https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idcircleWave import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { GUI } fr…...

第16章 Python数据类型详解:列表(List)与运维开发实践

文章目录 第16章 Python数据类型详解:列表(List)与运维开发实践一、列表的基础和入门1. 基本操作2. 常用方法3. 列表推导式(List Comprehension)二、AIOps运维视角下的列表应用1. 日志分析与异常检测2. 时间序列数据处理3. 自动化决策与响应三、DevOps运维开发视角下的列表…...

浅谈广告投放从业者底层思维逻辑

世界上的人分为两种:一种是“思辨者”,而另一种就是“吃瓜群众”。——周国元 绝大多数人因潜意识懒惰和不愿走出思维舒适区放弃思考,乐于成为“吃瓜群众”。 深以为然。 工作中,我接触的投手较多,有时候和投手A交谈…...

报表的那些事:四部演进史——架构视角下的技术跃迁与实战思考

引言 作为企业数据流转的核心载体,报表系统的设计与演进始终面临‌高性能、灵活性、可扩展性‌的平衡挑战。本文从架构师视角,以四阶段演进为脉络,结合电商等高并发场景,分享报表系统从定制化开发到混合计算体系的演进实践&#x…...

Pdf转Word案例(java)

Pdf转Word案例&#xff08;java&#xff09; 需要导入aspose-pdf.jar 需要先手动下载jar包到本地&#xff0c;然后通过systemPath在pom文件中引入。 下载地址&#xff1a;https://releases.aspose.com/java/repo/com/aspose/aspose-pdf/25.4/ <dependency><groupId&…...

HTML基础2-空元素,元素属性与页面的结构

目录 空元素&#xff08;Void Element&#xff09; 元素属性 &#xff08;Attribute&#xff09; 页面结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"w…...

2025FIC初赛(手机)

前言 记录一下自己的学习过程&#xff0c;网上已经有很多大佬出来全篇教程&#xff0c;但是我还是写出小部分&#xff0c;希望自己可以以点破面&#xff0c;什么都会等于不会&#xff0c;肯定是拿自己和大佬比&#xff0c;大佬都是全栈的。 手机取证 1. 请分析检材二&#x…...

《Python星球日记》 第43天:机器学习概述与Scikit-learn入门

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、什么是机器学习?1. 机器学习的三大类型1.1 监督学习1.2 无监督学习1.3 强化学习二、Scikit…...

Carlink 技术:搭建汽车与手机的智能桥梁

随着汽车智能化浪潮的推进&#xff0c;手机与车机的无缝连接已成为现代出行体验的重要组成部分。在这一背景下&#xff0c;ICCOA联盟推出的Carlink技术应运而生。 一、什么是Carlink Carlink是由智慧车联开放联盟(ICCOA)主导开发的新一代车机互联协议&#xff0c;旨在实现安卓…...

嵌入式学习--江协51单片机day2

今天学的不多&#xff0c;内容为&#xff1a;静态、动态数码管的控制&#xff0c;模块化编程和lcd1602调试工具 数码管的控制 由于内部电路的设计&#xff0c;数码管每次只能显示一个位置的一个数字&#xff0c;动态的实现是基于不同位置的闪烁频率高。 P2_4,P2_3,P2_2控制位…...

LLaMA-Omni 2:基于 LLM 的自回归流语音合成实时口语聊天机器人

LLaMA-Omni 2 是基于 Qwen2.5-0.5B/1.5B/3B/7B/14B/32B-Instruct 模型的一系列语音语言模型。与 LLaMA-Omni 类似&#xff0c;它可以同时生成文本和语音应答&#xff0c;从而实现高质量、低延迟的语音交互。通过新引入的流式自回归语音解码器&#xff0c;LLaMA-Omni 2 与 LLaMA…...

CODESYS开发环境下的快捷键和软件操作汇总

CODESYS访问变量属性无需添加应用路径的方法 CODESYS访问变量(属性)无需添加引用路径的方法_attribute qualified only-CSDN博客文章浏览阅读410次。CODESYS平台下的变量相关知识介绍大家还可以参考下面文章连接:CODESYS面向对象编程:方法/动作/属性的使用-CSDN博客文章浏览阅…...

英伟达发布Llama-Nemotron系列新模型,性能超越DeepSeek-R1

近期&#xff0c;英伟达重磅推出开源模型系列 Llama-Nemotron&#xff0c;以强悍的推理能力与高效性能引发广泛关注&#xff0c;被认为可能重新定义开源AI的技术格局。 该系列模型在推理速度上全面超越DeepSeek-R1&#xff0c;内存使用效率与吞吐表现也大幅提升。其训练策略融合…...

堆与二叉树——C语言

一、顺序表底层 #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h>typedef int data; typedef struct Heap {data* arr;int size;int capacity; }Heap;void HeapInit(Heap* php); void HeapDestroy(Heap* php); //把已有堆进行排序 vo…...

如何检查 Watchtower 是否正常工作及更新未生效的排查方法【日常排错】

文章目录 前言一、验证 Watchtower 是否正在运行1. 检查 Watchtower 容器状态2. 查看 Watchtower 日志 二、检查5分钟间隔设置是否正确1. 确认启动命令2. 验证环境变量 三、排查更新未生效的原因1. 检查是否有镜像更新2. 检查容器标签3. 检查监控范围 四、测试 Watchtower 功能…...

网站网页经常 400 错误,清缓存后就好了的原因剖析

目录 一、HTTP 400 错误的常见起因(一)URL 有问题(二)缓存或 Cookie 出状况(三)文件尺寸超标(四)请求头信息不对劲二、清缓存为何能奏效三、其他可以尝试的解决办法(一)重新检查 URL(二)暂时关闭浏览器插件(三)切换网络环境(四)更新浏览器版本(五)检查服务器…...

Linux系统基本指令和知识指南

一、Linux系统简介 Linux是一种自由和开放源代码的类UNIX操作系统&#xff0c;由林纳斯托瓦兹在1991年首次发布。它以稳定性、安全性和灵活性著称&#xff0c;广泛应用于服务器、嵌入式系统和个人计算机。 Linux主要特点&#xff1a; 开源免费 多用户、多任务 良好的安全性…...

Dify平台下基于搜索引擎SearXNG 和文本转换工具Marp的PPT助手搭建

marp-cli安装&#xff1a; Marp 是一个基于 Markdown 的开源幻灯片制作工具&#xff0c;可以轻松将 Markdown 文档转换为精美的幻灯片。其核心是 Marpit 框架&#xff0c;支持可定制主题、多种输出格式和动态功能。 Marp 支持的功能 通过插件快速制作&#xff1a;支持 VS Co…...