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

计算机网络---TCP三握四挥

文章目录

  • TCP
    • TCP 的核心特点
    • TCP 与 UDP 特性对比
    • TCP 标志位
  • TCP 的三次握手(建立连接)
    • TCP 三次握手概述
    • 图解 TCP 三次握手
    • 为什么需要三次握手,而不是两次
    • 为什么要三次握手,而不是四次
    • 三次握手连接阶段,最后一次 ACK 包丢失,会发生什么?
  • TCP 的四次挥手(连接断开)
    • 图解 TCP 四次挥手
    • 为什么连接的时候是三次握手,关闭的时候却是四次挥手?
    • 为什么客户端的TIME-WAIT状态必须等待2MSL?
    • 如果已经建立了连接,但是客户端出现故障了怎么办?


TCP

TCP 的核心特点

1.面向连接

TCP 要求通信双方在传输数据前通过‌三次握手‌建立连接,结束后通过‌四次挥手‌释放连接,确保通信的可靠性和顺序性‌。

2.可靠传输

  • 确认应答(ACK)与重传机制‌:接收方对收到的数据发送确认信号,发送方未收到 ACK 时自动重传‌。
  • 数据顺序保证‌:通过序号和确认号字段确保数据按发送顺序重组和传递‌。
  • 错误检测‌:利用校验和验证数据完整性,发现错误则触发重传‌。

3.全双工通信

支持双向数据传输,允许双方同时发送和接收数据,通过独立的发送/接收缓存实现高效交互‌。

4.面向字节流

将应用层数据视为无结构的字节序列传输,动态划分报文段以适应网络条件和接收方窗口大小‌。

5.流量控制

通过‌滑动窗口协议‌动态调整发送速率,避免接收方缓冲区溢出导致数据丢失‌。

6.拥塞控制

采用‌慢启动、拥塞避免、快速重传‌等算法,根据网络拥塞程度调整数据发送速率,保障整体网络稳定性‌。

7.网络适应性

设计上兼容异构网络环境(如带宽、延迟差异),通过动态机制应对网络故障和拓扑变化,确保端到端通信的健壮性‌。

TCP 与 UDP 特性对比

特性TCPUDP
连接方式面向连接无连接
可靠性可靠(重传、确认机制)不可靠(无确认机制)
传输效率较低(需建立连接)较高(直接发送数据报)
适用场景文件传输、实时性要求低视频流、在线游戏

TCP 标志位

TCP 标志位的值代表了当前请求的目的。

  1. SYN:发送/同步标志,用来 建立连接,和下面的第二个标志位 ACK 搭配使用。连接开始时,SYN = 1,ACK = 0,代表连接开始但是未获得响应。当连接被响应的时候,标志位会发生变化,其中 ACK 会置为 1,代表确认收到连接请求,此时的标志位变成了 SYN = 1, ACK = 1。

  2. ACK:确认标志,标识 确认收到请求

  3. PSH:表示 推送操作,就是指数据包到达接收端以后,不对其进行队列处理,而是尽可能的将数据交给应用程序处理

  4. FIN:结束标志,用于 结束一个 TCP 会话

  5. RST:重置复位标志,用于 复位对应的 TCP 连接

  6. URG:紧急标志,用于保证 TCP 连接不被中断,并且督促中间层设备尽快处理

此外,还有两个序号:

  1. Sequence number(seq) :顺序号,发送数据包中的第一个字节的序列号,一般为小写的 seq。
  2. Acknowledge number(ack):确认号,响应前面的 seq,值为 seq+1,可以理解为期望下次发出的序列号为 seq+1;

TCP 的三次握手(建立连接)

TCP 三次握手概述

所谓三次握手(Three-way Handshake),是指 建立一个 TCP 连接时,需要客户端和服务器总共发送 3 个包。 三次握手的 目的是连接服务器指定端口,建立 TCP 连接, 并同步连接双方的顺序号和确认号并交换 TCP 信息。

举个栗子
公安局长王哥 和 陈某打电话

公安局:你好!陈某,听得到吗?(一次会话)
陈某:听到了,王哥,你能听到吗 (二次会话)
公安局:听到了,你过来自首吧 (开始会话)(三次会话)

通过这个例子我们可以知道三次会话的目的就是为了确保双方的连接正常,同理,TCP 三次握手也是这个过程,下面用图文形式来解释一下 TCP 三次握手。

图解 TCP 三次握手

img

最开始的时候客户端和服务器都是处于 CLOSED 关闭状态。主动打开连接的为客户端,被动打开连接的是服务器。

TCP 服务器进程先创建传输控制块 TCB,时刻准备接收客户进程的连接请求,此时服务器就进入了 LISTEN 监听状态

第一次握手:

TCP 客户进程也是先创建传输控制块 TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位 SYN = 1,同时选择一个初始序列号 seq = x,此时, TCP 客户端进程进入了 SYN-SENT(同步已发送状态)状态。 TCP 规定,SYN 报文段(SYN = 1 的报文段)不能携带数据,但需要消耗掉一个序号。

第二次握手:

TCP 服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK = 1,SYN = 1,确认号是 ack = x+1,同时也要为自己初始化一个序列号 seq = y,此时,TCP 服务器进程进入 SYN-RCVD(同步收到)状态。 这个报文也不能携带数据,但是同样要消耗一个序号。

第三次握手:

TCP 客户端收到确认后,还要向服务器给出确认。确认报文的 ACK = 1,ack = y+1,自己的序列号 seq = x+1,此时,TCP 连接建立,客户端进入 ESTABLISHED(已建立连接)状态 。 TCP 规定,ACK 报文段可以携带数据,但是如果不携带数据则不消耗序号。

为什么需要三次握手,而不是两次

主要有三个原因:

1.防止已过期的连接请求报文突然又传送到服务器,因而产生错误和资源浪费。

在双方两次握手即可建立连接的情况下,假设客户端发送 A 报文段请求建立连接,由于网络原因造成 A 暂时无法到达服务器,服务器接收不到请求报文段就不会返回确认报文段。

客户端在长时间得不到应答的情况下重新发送请求报文段 B,这次 B 顺利到达服务器,服务器随即返回确认报文并进入 ESTABLISHED 状态,客户端在收到 确认报文后也进入 ESTABLISHED 状态,双方建立连接并传输数据,之后正常断开连接。

此时姗姗来迟的 A 报文段才到达服务器,服务器随即返回确认报文并进入 ESTABLISHED 状态,但是已经进入 CLOSED 状态的客户端无法再接受确认报文段,更无法进入 ESTABLISHED 状态,这将导致服务器长时间单方面等待,造成资源浪费。

2.三次握手才能让双方均确认自己和对方的发送和接收能力都正常。

第一次握手:客户端只是发送处请求报文段,什么都无法确认,而服务器可以确认自己的接收能力和对方的发送能力正常;

第二次握手:客户端可以确认自己发送能力和接收能力正常,对方发送能力和接收能力正常;

第三次握手:服务器可以确认自己发送能力和接收能力正常,对方发送能力和接收能力正常;

可见三次握手才能让双方都确认自己和对方的发送和接收能力全部正常,这样就可以愉快地进行通信了。

3.告知对方自己的初始序号值,并确认收到对方的初始序号值。

TCP 实现了可靠的数据传输,原因之一就是 TCP 报文段中维护了序号字段和确认序号字段,通过这两个字段双方都可以知道在自己发出的数据中,哪些是已经被对方确认接收的。这两个字段的值会在初始序号值得基础递增,如果是两次握手,只有发起方的初始序号可以得到确认,而另一方的初始序号则得不到确认。

为什么要三次握手,而不是四次

因为三次握手已经可以确认双方的发送接收能力正常,双方都知道彼此已经准备好,而且也可以完成对双方初始序号值得确认,也就无需再第四次握手了。

  • 第一次握手:服务端确认“自己收、客户端发”报文功能正常。
  • 第二次握手:客户端确认“自己发、自己收、服务端收、客户端发”报文功能正常,客户端认为连接已建立。
  • 第三次握手:服务端确认“自己发、客户端收”报文功能正常,此时双方均建立连接,可以正常通信。

三次握手连接阶段,最后一次 ACK 包丢失,会发生什么?

服务端:

  • 第三次的 ACK 在网络中丢失,那么服务端该 TCP 连接的状态为 SYN_RECV, 并且会根据 TCP 的超时重传机制,会等待 3 秒、6 秒、12 秒后重新发送 SYN+ACK 包,以便客户端重新发送 ACK 包。
  • 如果重发指定次数之后,仍然未收到 客户端的 ACK 应答,那么一段时间后,服务端自动关闭这个连接。

客户端:

  • 客户端认为这个连接已经建立,如果客户端向服务端发送数据,服务端将以 RST 包(Reset,标示复位,用于异常的关闭连接)响应。此时,客户端知道第三次握手失败。

TCP 的四次挥手(连接断开)

建立 TCP 连接需要三次握手,终止 TCP 连接需要四次挥手

举个例子
张三和李四的对话

张三:好的,那我先走了
李四:好的,那你走吧
李四:那我也走了?
张三:好的,你走吧

图解 TCP 四次挥手

img

数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于 ESTABLISHED 状态,然后客户端主动关闭,服务器被动关闭。

第一次挥手:

客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN = 1,其序列号为 seq = m(等于前面已经传送过来的数据的最后一个字节的序号加 1),此时,客户端进入 FIN-WAIT-1(终止等待 1)状态。 TCP 规定,FIN 报文段即使不携带数据,也要消耗一个序号。

第二次挥手:

服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=m+1,并且带上自己的序列号seq=n,此时,服务端就进入了CLOSE-WAIT 关闭等待状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

第三次挥手:

客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手:

客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=p+1,而自己的序列号是seq=m+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成。

为什么连接的时候是三次握手,关闭的时候却是四次挥手?

四次挥手:服务器在收到客户端(第一次)的FIN报文段后,可能还有一些数据要传输,所以不能马上关闭连接,但是会做出应答(第二次),返回ACK报文段。

接下来可能会继续发送数据,在数据发送完毕后,服务器会向客户端发送FIN报文(第三次),表示数据已经发送完毕,请求关闭连接。服务器的ACK和FIN一般都会分开发送,从而导致多了一次,因此一共需要四次挥手。

为什么客户端的TIME-WAIT状态必须等待2MSL?

主要有两个原因:

1.确保ACK报文能够到达服务端,从而使服务端正常关闭连接。

第四次挥手时,客户端第四次挥手的ACK报文不一定会到达服务端。服务端会超时重传FIN/ACK报文,此时如果客户端已经断开连接,那么就无法响应服务端的二次请求,这样服务端迟迟收不到FIN/ACK报文的确认,就无法正常断开连接。

MSL 是报文段在网络上存活的最长时间。客户端等待 2MSL 时间,即「客户端 ACK 报文 1MSL 超时 + 服务端 FIN 报文 1MSL 传输」,就能够收到服务端重传的 FIN/ACK 报文,然后客户端重传一次 ACK 报文,并重新启动 2MSL 计时器。如此保证服务端能够正常关闭。

如果服务端重发的 FIN 没有成功地在 2MSL 时间里传给客户端,服务端则会继续超时重试直到断开连接。

2.防止已失效的连接请求报文段出现在之后的连接中。

TCP 要求在 2MSL 内不使用相同的序列号。客户端在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以保证本连接持续的时间内产生的所有报文段都从网络中消失。这样就可以使下一个连接中不会出现这种旧的连接请求报文段。或者即使收到这些过时的报文,也可以不处理它。

如果已经建立了连接,但是客户端出现故障了怎么办?

或者说,如果三次握手阶段、四次挥手阶段的包丢失了怎么办?如“服务端重发 FIN丢失”的问题

简而言之,通过定时器+超时重传机制,尝试获取确认,知道最后会自动断开连接。

具体而言,TCP 设有一个保活计时器。服务器每收到一次客户端的数据,都会重新复位这个计时器,时间通常是设置为 2 小时。若 2 小时还没有收到客户端的任何数据,服务器就开始重试:每隔 75 分钟发送一个探测报文段,若一连发送 10 个探测报文后客户端依然没有回应,那么服务器就认为连接已经断开了。

相关文章:

计算机网络---TCP三握四挥

文章目录 TCPTCP 的核心特点TCP 与 UDP 特性对比TCP 标志位 TCP 的三次握手(建立连接)TCP 三次握手概述图解 TCP 三次握手为什么需要三次握手,而不是两次为什么要三次握手,而不是四次三次握手连接阶段,最后一次 ACK 包…...

linux基础知识

Linux版本 内核版和开发版 奇数为开发板 偶数为稳定版 Debian 属于自由开源稳定的linux发行版本,可以由用户进行维护,目前被教育机构、商业公司、非盈利组织和政府机构使用 Red Hat Enterprise Linux(RHEL) 由red hat公司开发的开源linux版本 RHEL服…...

快检查达梦库怎么了

扁鹊的弟弟来了 要求5分钟定位达梦数据库问题 #!/bin/bash## content 实例个数 告警日志 实例状态 用户连接 活动会话 锁 集群状态 服务状态 磁盘空间 cpu mem 侦听及日志 ## scope 单机、DW、DSC Linux 多实例 ## example 将脚本保存为d.sh,用root用执行&#…...

Python可视化大框架的研究与应用

## 摘要 随着数据科学和人工智能的快速发展,数据可视化成为了数据分析中不可或缺的一部分。Python作为一种功能强大且易于学习的编程语言,提供了多种可视化工具和库。本文旨在探讨Python可视化的主要框架,分析其特点、应用场景以及未来发展趋…...

【智能音频新风尚】智能音频眼镜+FPC,打造极致听觉享受!【新立电子】

智能音频眼镜,作为一款将时尚元素与前沿科技精妙融合的智能设备,这种将音频技术与眼镜形态完美结合的可穿戴设备,不仅解放了用户的双手,更为人们提供了一种全新的音频交互体验。新立电子FPC在智能音频眼镜中的应用,为音…...

jeecgboot项目idea启动项目(二)

文章目录 一、IntelliJ IDEA1.安装2.配置maven3.配置jdk 二、IDEA启动项目三、IDEA2024.1.4破解 一、IntelliJ IDEA ‌IntelliJ IDEA是一款由JetBrains开发的集成开发环境(IDE),主要用于Java和Kotlin编程,但也支持多种其他编程语…...

【计算机网络基础】-------计算机网络概念

1.什么是计算机网络 定义: 图解: 2.最简单的计算机网络 其中: 结点可以是计算机、集线器、交换机、路由器等链路可以是有线链路、无线链路 2.1集线器 2.2交换机 3.互连网(internet)与 路由器 路由器 与 家用路由…...

MCAL-存储器驱动

存储器驱动由内部EEPROM驱动、内部Flash驱动、RAM测试和Flash测试四部分组成。 (1)内部EEPROM驱动 内部EEPROM驱动提供初始化服务,以及对内部EEPROM的读、写、擦除等操作。该驱动模块一次只能接受一个任务。这意味着在任何给定的时间点,只能有一个操作被处理 (2)内部F…...

爬虫系列之【数据解析之正则】《二》

目录 前言 一、正则基本使用 1.1 导包 1.2 接口方法 1.3 换行匹配问题 二、实战案例 完整代码 前言 在爬虫工作中,我们主要会遇到两种类型的文本数据: JSON格式数据 HTML文档数据 对于JSON字符串数据,通常使用Python的字典操作进行键…...

【每日学点HarmonyOS Next知识】全局调整字体、h5选择框无法取消选中、margin不生效、Length转换为具体值、Prop和link比较

【每日学点HarmnoyOS Next知识】全局调整字体、h5选择框无法取消选中、margin不生效、Length转换为具体值、Prop和link比较 1、HarmonyOS 是否存在统一调整全局字体大小的方法? 是否存在统一调整全局字体大小的方法 可以用动态属性,自定义class实现At…...

ORM Bee V2.5.2.x 发布,支持 CQRS; sql 性能分析;更新 MongoDB ORM分片

Bee, 一个具有分片功能的 ORM 框架. Bee Hibernate/MyBatis plus Sharding JDBC Jpa Spring data GraphQL App ORM (Android, 鸿蒙) 小巧玲珑!仅 940K, 还不到 1M, 但却是功能强大! V2.5.2 (2025・LTS 版) 开发中... **2.5.2.1 新年 ** 支持 Mong…...

【CVPR2024】基于小波的傅里叶信息交互与频率扩散调整的水下图像恢复

论文信息 题目: Wavelet-based Fourier Information Interaction with Frequency Diffusion Adjustment for Underwater Image Restoration 基于小波的傅里叶信息交互与频率扩散调整的水下图像恢复 源码:https://github.com/ChenzhaoNju/WF-Diff 论文创新点 基于频…...

《今日AI-编程-人工智能日报》

一、AI编程工具与行业动态 OpenAI推出GPT-4.5“猎户座”研究预览版 OpenAI发布了迄今为止“最大、最有知识”的模型GPT-4.5“猎户座”,面向Pro用户开放,并计划下周向Plus用户开放。该模型在自然对话中展现出情感智能,但在编程性能上不及深度研…...

计算机网络---SYN Blood(洪泛攻击)

文章目录 三次握手过程SYN Flood攻击原理防御措施协议层优化网络层拦截系统配置调整 TCP协议是 TCP/IP 协议栈中一个重要的协议,平时我们使用的浏览器,APP等大多使用 TCP 协议通讯的,可见 TCP 协议在网络中扮演的角色是多么的重要。 TCP 协议…...

DeepSeek教unity------UI元素长按响应

主要功能说明: ​长按检测:通过记录指针按下的时间,判断是否达到 longClickTime,从而触发长按事件。​状态管理:使用 StateEnum 枚举管理点击项的当前状态(未按下、按下等待长按、长按已触发)。…...

virtualbox安装ubuntu,配置静态ip

一.安装virtualbox和ubuntu 在VirtualBox中安装无界面版Ubuntu(即Ubuntu Server)的步骤如下: 准备工作 下载Ubuntu Server镜像:从Ubuntu官网 https://ubuntu.com/download/server 下载ISO文件。 安装VirtualBox:确保…...

比较Spring AOP和AspectJ

1. 介绍 当前有多个可用的AOP库,这些库必须能够回答许多问题: 它与我现有的或新的应用程序兼容吗?在哪里可以实施AOP?它与我的应用程序集成的速度有多快?性能开销是多少? 在本文中,我们将着眼…...

DeepSeek掘金——DeepSeek R1驱动的PDF机器人

DeepSeek掘金——DeepSeek R1驱动的PDF机器人 本指南将引导你使用DeepSeek R1 + RAG构建一个功能性的PDF聊天机器人。逐步学习如何增强AI检索能力,并创建一个能够高效处理和响应文档查询的智能聊天机器人。 本指南将引导你使用DeepSeek R1 + RAG构建一个功能性的PDF聊天机器人…...

大模型能给舆情分析带来哪些突破?

大模型在舆情分析领域带来了多方面的突破,具体体现在以下几个方面: 1.提升分析精度与效率 大模型通过深度学习和自然语言处理技术,能够高效地处理海量数据,并从中提取关键信息。例如,大模型可以自动识别文本中的情感倾…...

C++实现3D(EasyX)详细教程

一、关于3D 我们看见,这两个三角形是相似的,因此计算很简单 若相对物体的方向是斜的,计算三角函数即可 不会的看代码 二、EasyX简介 initgraph(长,宽) 打开绘图 或initgraph(长,宽…...

Mysql100道高频面试题

一、基础概念 1. 什么是数据库?DBMS的作用是什么? 数据库:是按照数据结构来组织、存储和管理数据的仓库。它允许用户高效地访问和管理数据。 DBMS(数据库管理系统):是一种软件系统,用于创建和…...

TCP长连接与短连接

TCP长连接与短连接 TCP(传输控制协议)中的长连接和短连接是两种不同的连接管理方式,各有优缺点: 短连接 短连接是指客户端与服务器完成一次数据交换后就断开连接。下次需要通信时,再重新建立连接。 特点&#xff1…...

【ISP】AF自动对焦

自动对焦方案主要有两种: 主动式对焦:通过TOF、双目进行主动测距,然后使用tuning数据进行对焦。 被动式对焦:利用sensor内容算法进行对焦。 被动式对焦有两种主要的方法: 反差对焦:通过前后推拉镜头找到…...

基于Python Django的人脸识别上课考勤系统(附源码,部署)

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

探索Elasticsearch:认识与安装

目录 Elasticsearch的简介 Elasticsearch的定位 安装Elasticsearch 安装Kibana Elasticsearch的简介 Elasticsearch 是一款基于Apache Lucene的开源搜索引擎,在现代数据管理和分析领域占据重要地位。它以其高效的全文搜索、实时数据分析能力和灵活的分布式架构著…...

什么是DevOps

**DevOps** 是一种结合软件开发(**Development)和运维(**Operations)的方法论和文化,旨在通过自动化、协作和持续改进,缩短软件交付周期,提高系统可靠性和团队效率。其核心目标是打破开发与运维…...

Java类加载机制 双亲委派机制 八股速记版

JVM类加载机制是Java实现跨平台特性的核心机制之一,整个过程可分为以下五个阶段: 一、类加载流程 加载(Loading) 通过全限定名获取二进制字节流将字节流转换为运行时数据结构生成对应的java.lang.Class对象 验证(V…...

DeepSeek开源周Day6:DeepSeek V3、R1 推理系统深度解析,技术突破与行业启示

DeepSeek 在开源周第六天再次发文,中文原文、官方号在知乎 DeepSeek - 知乎DeepSeek-V3 / R1 推理系统概览 - 知乎deepseek-ai/open-infra-index: Production-tested AI infrastructure tools for efficient AGI development and community-driven innovation 引言 …...

校园快递助手小程序毕业系统设计

系统功能介绍 管理员端 1)登录:输入账号密码进行登录 2)用户管理:查看编辑添加删除 学生信息 3)寄件包裹管理:查看所有的包裹信息,及物流信息 4)待取件信息:查看已到达的…...

macOS - 使用 tmux

文章目录 安装 tmux使用更多快捷键说明 安装 tmux brew install tmux使用 在终端输入 tmux 进入 tmux 界面,然后 输入 Control Option B 进入交互模式 输入 % 左右分栏," 上下分割 上一个窗格:{,下一个:} PS…...

【网络安全 | 渗透测试】GraphQL精讲一:基础知识

未经许可,不得转载, 文章目录 GraphQL 定义GraphQL 工作原理GraphQL 模式GraphQL 查询GraphQL 变更(Mutations)查询(Queries)和变更(Mutations)的组成部分字段(Fields)参数(Arguments)变量别名(Aliases)片段(Fragments)订阅(Subscriptions)自省(Introspecti…...

配置后端验证功能之validation

哈喽,好久不见。最近项目内网开发导致断更了好久。今天介绍一个简单且有意思的开发技巧吧。之前用过validation后端验证功能但没进一步了解,都只是简单用一下。假如开发中要求传参必须按照规则 不能毫无底线什么都能传,本篇介绍的就是针对此功…...

C# 多线程

概述 进程和线程 进程:指在系统中运行的一个应用程序。 线程:进程中的一个执行任务。一个进程至少有一个线程,一个进程可以有多个线程,多个线程可共享数据。 多线程 多线程:在一个程序中同时运行多个线程&#xff0…...

钉钉MAKE AI生态大会思考

1. 核心特性 1.1 底层模型开放 除原有模型通义千问外,新接入猎户星空、智普、MinMax、月之暗面、百川智能、零一万物。 1.2 AI搜索 AI搜索贯通企业和个人散落在各地的知识(聊天记录、文档、会议、日程、知识库、项目等),通过大模型对知识逻辑化,直接生成搜索的答案,并…...

自然语言处理:文本表示

介绍 大家好,博主又来给大家分享知识了。今天给大家分享的内容是自然语言处理中的文本表示。 在当今数字化信息爆炸的时代,自然语言处理作为人工智能领域的重要分支,发挥着越来越关键的作用。 而文本表示,则是自然语言处理的基…...

flutter 网络请求封装与json序列化与反序列化

一、用到的工具库 网络请求库 dioflutter pub add diojson序列化与反序列化库 json_annotation//终端直接键入下命令安装 flutter pub add json_annotation dev:build_runner dev:json_serializable二、返回结果泛化封装 以 https://www.wanandroid.com/ api 接口返回结果为例…...

生成网页链接二维码

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>生成二维码</title><script src"http…...

java关键字-instanceof

主要作用 A instanceof B主要判断以下三个内容&#xff08;即左边的类型A能否转换为右边的B&#xff09;&#xff1a; 判断对象A是否是B类的对象&#xff1b;判断对象A实现了B接口&#xff1b;判断对象A是否继承了B类&#xff1b; A表示对象&#xff0c;B表示接口/类&#x…...

验证码识别:一文掌握手机验证码的自动化处理

文章目录 一、获取手机验证码1.1 通过短信接收验证码1.2 使用第三方短信接收服务1.3 使用ADB读取手机短信1.4 通过API获取验证码1.5 通过邮件接收验证码二、解析和提取验证码2.1 正则表达式提取2.2 JSON解析三、自动化输入验证码3.1 使用Selenium自动化Web应用3.2 使用Appium自…...

Uppy - 免费开源、功能强大的新一代 web 文件上传组件,支持集成到 Vue 项目

Uppy 这个优质的前端组件&#xff0c;可以解决几乎所有的文件上传问题&#xff0c;最近发布了 TS 重写的 4.0 新版本&#xff0c;实用性更强了。 Uppy 是一个 UI 外观时尚、模块化的 JavaScript 文件上传组件&#xff0c;这个组件可以与任何 web 技术栈集成&#xff0c;不仅轻…...

神经网络参数量计算

算一个只有两层的神经网络的参数量&#xff0c;我们需要考虑两层之间的连接权重和偏置项。以下是详细的计算步骤&#xff1a; 网络结构 输入层&#xff08;第一层&#xff09;&#xff1a; 有 2 个神经元。 输出层&#xff08;第二层&#xff09;&#xff1a; 有 3 个神经元。…...

如何为Java面试准备项目经验

1 提出问题 应届生朋友或Java程序员在找Java方面的工作时&#xff0c;一定会需要准备Java项目经验&#xff0c;但事实上不少求职者&#xff0c;是没有项目经验&#xff0c;或者只具有开源社区等的学习项目经验&#xff0c;这样的话&#xff0c;就很有可能在面试时无法有效地证…...

DeepSeek 与云原生后端:AI 赋能现代应用架构

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 在当今快速发展的互联网时代&#xff0c;云原生&#xff08;Cloud Native&#xff09;架构已成为后端开发的主流趋势。云…...

自定义异常

在 Java 中&#xff0c;自定义异常是指根据特定需求创建的异常类。通过自定义异常&#xff0c;可以更好地表示应用程序中的特定错误情况&#xff0c;并提供更清晰的错误信息。以下是关于自定义异常的详细介绍和实现方法&#xff1a; 一、为什么需要自定义异常&#xff1f; 明确…...

题解:洛谷 P2199 最后的迷宫

题目https://www.luogu.com.cn/problem/P2199 显然&#xff0c;数据最大 &#xff0c;数组我们开不下&#xff0c;动态开数组。 对于每一个查询&#xff0c;从起点开始&#xff0c;走一步判断是否能看到火焰杯。 如果已经没法走了&#xff0c;直接拆墙&#xff0c;输出 Poor…...

JDK包含内容的正确说法及API文档下载

JDK包含内容的正确说法及API文档下载 正确说法&#xff1a;JDK包含JRE和JDK开发工具&#xff0c;而JRE主要包含JVM和核心类库。 因为 旧版 JRE&#xff08;Java 8 及之前&#xff09;&#xff1a;确实包含 Java 插件&#xff08;Applet&#xff09; 和 Java Web Start&#xf…...

CTF-web: 查看python代码抽象语法树

抽象语法树&#xff08;Abstract Syntax Tree&#xff0c;简称 AST&#xff09;是源代码的树状表示&#xff0c;展示了代码的语法结构。在 Python 中&#xff0c;ast 模块可以帮助你解析和操作 Python 代码的 AST。 1. 使用 ast 模块解析 Python 代码 我们可以使用 ast.parse …...

前端学习——HTML

VSCode常用快捷键 代码格式化&#xff1a;ShiftAltF 向上或向下移动一行&#xff1a;AltUp或AltDown 快速复制一行代码&#xff1a;ShiftAltUp或者ShiftAltDown 快速替换&#xff1a;CtrlH HTML标签 文本标签 定义着重文字 定义粗体文字 定义斜体文字 加重语气 删除字 无特…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_open_file

ngx_open_file 定义在src/os/unix/ngx_files.h #define ngx_open_file(name, mode, create, access) \open((const char *) name, mode|create, access)#define NGX_FILE_RDONLY O_RDONLY #define NGX_FILE_WRONLY O_WRONLY #de…...

Window C++模拟单片机控制TFT屏幕和SD卡

因为每次都要做大量的测试&#xff0c;上传到单片机实在是太费事&#xff0c;所以写了这个模拟项目用来测试 很多方法我没有补充进去&#xff0c;因为太多了&#xff0c;如果有需要请自行补充 stdafx.h #pragma once#include<iostream> #include<atlimage.h> #in…...