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

TCP三次握手与四次挥手——连接管理的“仪式感“

**导读**如果说HTTP是互联网世界的通用语言那么TCP就是支撑这一切的地下管道。但这条管道不是想通就通的——它有一套严格的礼仪规范也就是我们常说的三次握手和四次挥手。今天我们就来聊聊这场网络世界的相亲与分手大戏。标签TCP协议三次握手四次挥手网络抓包连接管理一、开场白为什么TCP要搞这么多仪式想象一下你给一个陌生人打电话上来就说喂我要跟你说个事对方可能会一脸懵逼“你谁啊信号好不好我要不要拿笔记一下”TCP面临的也是类似的问题。作为面向连接的可靠传输协议它必须解决三个核心问题双方是否都能收发数据——确认通信能力从哪个序号开始传——初始化序列号窗口大小是多少——协商接收能力这三个问题不解决后面的数据传输就是盲传丢包、乱序、重复包等问题会让你怀疑人生。所以TCP设计了一套握手机制在正式传数据之前先把这些家务事掰扯清楚。二、三次握手网络世界的相亲流程 生活化比喻TCP三次握手就像相亲——男方说你好我想认识你女方说好的我也想认识你男方说那我们开始吧。少了任何一步这亲都相不成。2.1 握手流程详解┌─────────────┐ ┌─────────────┐ │ 客户端 │ │ 服务端 │ │ (Client) │ │ (Server) │ └──────┬──────┘ └──────┬──────┘ │ │ │ ① SYN 1, seq x (ISN) │ │ ─────────────SYN────────────── │ │ 我想认识你我的初始序号是x │ │ │ │ ② SYN 1, ACK 1 │ │ seq y (ISN) │ │ ack x 1 │ │ ──────────SYNACK───────────── │ │ 我也想认识你我的初始序号是y │ │ 期待收到你的x1 │ │ │ │ ③ ACK 1, seq x 1 │ │ ack y 1 │ │ ─────────────ACK────────────── │ │ 好的我收到你的y了期待y1 │ │ │ │◄──────────连接建立开始数据传输──────────►│ │ │ 图1TCP三次握手流程图2.2 每一步都在干什么① 第一次握手SYN客户端发起请求客户端发送一个SYN包携带以下关键信息SYN 1表示这是一个同步请求seq x客户端的初始序列号ISN此时客户端进入SYN_SENT状态。这个ISNInitial Sequence Number初始序列号是怎么来的RFC 793规定ISN应该是一个随时间变化的计数器每4微秒加1。现代操作系统通常采用更复杂的随机算法以防止序列号预测攻击。② 第二次握手SYN-ACK服务端回应服务端收到SYN后如果同意建立连接会回复SYN-ACK包SYN 1我也要同步ACK 1确认收到你的SYNseq y服务端的初始序列号ack x 1期待收到客户端的下一个序号此时服务端进入SYN_RCVD状态。注意这里的ack x 1它表示我已经收到了序号x及之前的所有数据下次请从x1开始发。③ 第三次握手ACK客户端确认客户端收到SYN-ACK后发送最终的ACK包ACK 1确认收到seq x 1从x1开始发送数据ack y 1期待收到服务端的y1此时客户端进入ESTABLISHED状态。服务端收到ACK后也进入ESTABLISHED状态。2.3 为什么是三次两次不行吗这是一个经典的面试题。答案是两次握手无法防止历史重复连接初始化造成的混乱。假设只有两次握手客户端发送SYNseq100但由于网络延迟这个包滞留了客户端重发SYNseq200这次成功建立连接传输数据后断开此时滞留的第一个SYNseq100突然到达服务端服务端以为是新的连接请求回复SYN-ACK进入ESTABLISHED状态但客户端早已放弃这个连接不会回复导致服务端空等**⚠️ 关键区别**三次握手时服务端收到旧的SYN后回复SYN-ACK但客户端发现ack号不对期待的ack应该是201但收到的是101会发送RST包重置连接服务端因此不会进入ESTABLISHED状态。另外三次握手还能确保双方都有收发能力第一次服务端知道客户端能发第二次客户端知道服务端能收也能发第三次服务端知道客户端能收三、四次挥手优雅的分手仪式 生活化比喻四次挥手就像分手——一方说我们分手吧另一方说好的我知道了然后说那我也同意分手最后说再见。为什么分手比相亲多一步因为分手时可能还有话没说完。3.1 挥手流程详解┌─────────────┐ ┌─────────────┐ │ 客户端 │ │ 服务端 │ │ (Client) │ │ (Server) │ └──────┬──────┘ └──────┬──────┘ │ │ │ ① FIN 1, seq u │ │ ─────────────FIN────────────── │ │ 我要关闭发送通道了 │ │ │ │ ② ACK 1, seq v │ │ ack u 1 │ │ ────────────ACK────────────── │ │ 知道了等我发完数据 │ │ │ │ 【服务端继续发送未传完的数据】 │ │ │ │ ③ FIN 1, ACK 1 │ │ seq w │ │ ack u 1 │ │ ────────────FIN────────────── │ │ 我也发完了关闭吧 │ │ │ │ ④ ACK 1, seq u 1 │ │ ack w 1 │ │ ─────────────ACK────────────── │ │ 好的再见 │ │ │ │◄──────────连接关闭进入TIME_WAIT────────►│ │ │ 图2TCP四次挥手流程图3.2 为什么挥手要四次因为TCP连接是全双工的——数据可以同时在两个方向上传输。关闭连接时每个方向都需要单独关闭。步骤方向含义第一次FIN客户端 → 服务端客户端没有数据要发了第一次ACK服务端 → 客户端服务端知道客户端要关了第二次FIN服务端 → 客户端服务端也没有数据要发了第二次ACK客户端 → 服务端客户端知道服务端也要关了注意第二步和第三步之间服务端可能还有数据要发给客户端所以不能合并。只有当服务端也发完数据后才会发送自己的FIN。四、TIME_WAIT分手后的冷静期4.1 什么是TIME_WAIT主动关闭连接的一方通常是客户端在发送最后一个ACK后不会立即关闭而是进入TIME_WAIT状态等待2MSLMaximum Segment Lifetime最大报文生存时间后才真正关闭。MSL是什么MSL是IP数据包在网络中的最大生存时间RFC 793建议值为2分钟。Linux系统中MSL通常设置为30秒或1分钟因此2MSL就是1-2分钟。4.2 为什么要等2MSL有两个原因原因一确保最后一个ACK能被对方收到如果最后一个ACK丢失服务端会重发FIN包。客户端在TIME_WAIT状态下仍能收到这个FIN并回复ACK。如果没有TIME_WAIT客户端直接关闭服务端就会一直重发FIN陷入死循环。原因二防止旧的连接数据包干扰新连接假设没有TIME_WAIT客户端立即关闭并用相同端口建立新连接。此时网络中可能还有旧连接的延迟数据包到达会被新连接误收造成数据混乱。场景没有TIME_WAIT会发生什么 时间线 ─────────────────────────────────────────────────────────► T0: 客户端关闭连接端口8080释放 │ │ 网络中还有一个延迟的数据包在游荡 ▼ T1: 客户端立即用8080建立新连接 │ │ 延迟的数据包突然到达 ▼ T2: 新连接收到旧数据包 → 数据混乱 有了TIME_WAIT2MSL等待 ─────────────────────────────────────────────────────────► T0: 客户端进入TIME_WAIT端口8080仍被占用 │ │ 等待2MSL时间... │ 延迟的数据包要么到达被丢弃要么超时消失 ▼ T1: TIME_WAIT结束端口8080释放 │ ▼ T2: 新连接建立安全无干扰 图3TIME_WAIT的作用示意图4.3 TIME_WAIT过多的问题在高并发场景下如果短连接频繁创建和关闭可能导致大量端口处于TIME_WAIT状态耗尽可用端口。# 查看当前TIME_WAIT连接数 $ netstat -an | grep TIME_WAIT | wc -l 2847 # 查看各状态连接统计 $ netstat -n | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]} ESTABLISHED 156 TIME_WAIT 2847 CLOSE_WAIT 12解决方案连接池复用连接减少频繁创建销毁长连接HTTP Keep-Alive、TCP keepalive端口复用SO_REUSEADDR和SO_REUSEPORT调低TIME_WAIT时间谨慎操作修改tcp_tw_reuse和tcp_tw_recycle五、Wireshark实战亲眼见证握手与挥手5.1 环境准备我们需要一个可以观察TCP连接的场景。最简单的方法是访问一个HTTP网站或者自己写一个客户端/服务端程序。# 简单的Python HTTP服务器用于测试 # 服务端server.py import socket def start_server(host0.0.0.0, port8080): s socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port)) s.listen(5) print(fServer listening on {host}:{port}) while True: conn, addr s.accept() print(fConnection from {addr}) data conn.recv(1024) print(fReceived: {data.decode()}) conn.send(bHello, Client!) conn.close() print(Connection closed) if __name__ __main__: start_server()# 客户端client.py import socket import time def start_client(host127.0.0.1, port8080): s socket.socket(socket.AF_INET, socket.SOCK_STREAM) print(Creating socket...) # 连接服务器三次握手发生在这里 s.connect((host, port)) print(Connected to server!) # 发送数据 s.send(bHello, Server!) data s.recv(1024) print(fReceived: {data.decode()}) time.sleep(2) # 等待一会儿再关闭 # 关闭连接四次挥手发生在这里 s.close() print(Connection closed) if __name__ __main__: start_client()5.2 Wireshark抓包步骤Step 1启动Wireshark选择要监听的网络接口通常是Wi-Fi或以太网。Step 2设置过滤条件在过滤栏输入tcp.port 8080只显示8080端口的TCP流量。Step 3运行程序先启动服务端再启动客户端观察Wireshark捕获的包。5.3 分析抓包结果你应该能看到类似下面的包序列No. Time Source Destination Protocol Info 1 0.000 127.0.0.1 127.0.0.1 TCP 50000 → 8080 [SYN] Seq0 Win65535 2 0.001 127.0.0.1 127.0.0.1 TCP 8080 → 50000 [SYN, ACK] Seq0 Ack1 3 0.001 127.0.0.1 127.0.0.1 TCP 50000 → 8080 [ACK] Seq1 Ack1 4 0.002 127.0.0.1 127.0.0.1 TCP 50000 → 8080 [PSH, ACK] Seq1 Ack1 Len14 5 0.003 127.0.0.1 127.0.0.1 TCP 8080 → 50000 [PSH, ACK] Seq1 Ack15 Len14 6 2.005 127.0.0.1 127.0.0.1 TCP 50000 → 8080 [FIN, ACK] Seq15 Ack15 7 2.005 127.0.0.1 127.0.0.1 TCP 8080 → 50000 [ACK] Seq15 Ack16 8 2.006 127.0.0.1 127.0.0.1 TCP 8080 → 50000 [FIN, ACK] Seq15 Ack16 9 2.006 127.0.0.1 127.0.0.1 TCP 50000 → 8080 [ACK] Seq16 Ack16解析包1-3三次握手SYN → SYN-ACK → ACK包4-5数据传输PSH表示推送数据包6-9四次挥手FIN → ACK → FIN → ACK5.4 常用Wireshark过滤表达式# 只显示三次握手包 tcp.flags.syn1 tcp.flags.ack0 # SYN tcp.flags.syn1 tcp.flags.ack1 # SYN-ACK # 只显示四次挥手包 tcp.flags.fin1 # 只显示RST包异常断开 tcp.flags.reset1 # 显示特定端口的所有TCP包 tcp.port 8080 # 显示特定连接的包用stream index过滤 tcp.stream 0六、序列号与确认号TCP的记账本6.1 序列号Sequence NumberTCP把发送的每个字节都编上号这就是序列号。它不是给每个包编号而是给每个字节编号。**示例**假设ISN 1000发送Hello5个字节H → seq 1000e → seq 1001l → seq 1002l → seq 1003o → seq 1004确认号ACK应该是1005表示我已经收到1004及之前的所有字节期待1005。6.2 确认号Acknowledgment Number确认号表示期望收到的下一个字节的序号。如果收到ACK1005意味着发送方知道1004及之前的所有数据都已安全到达。6.3 累积确认TCP采用累积确认机制。即使中间某些ACK丢失只要后面的ACK到达就说明前面的数据也收到了。发送方发送 seq1000, len100 发送 seq1100, len100 发送 seq1200, len100 接收方收到 1000-1099 → 可能不立即ACK延迟ACK 收到 1100-1199 → 可能不立即ACK 收到 1200-1299 → 回复 ACK1300 发送方收到 ACK1300 → 知道1000-1299都已收到 图4累积确认机制示意图七、总结与思考7.1 核心要点回顾概念关键点三次握手SYN → SYN-ACK → ACK初始化序列号确认双向通信能力四次挥手FIN → ACK → FIN → ACK全双工连接需要分别关闭两个方向TIME_WAIT等待2MSL确保ACK到达防止旧数据干扰新连接序列号给每个字节编号实现可靠传输和顺序保证确认号期望收到的下一个字节序号采用累积确认7.2 常见面试题为什么三次握手不是两次为什么四次挥手不是三次TIME_WAIT状态的作用是什么如果服务端收到大量SYN包但不回复会发生什么SYN Flood攻击什么是TCP半连接队列和全连接队列 源码获取本文所有示例代码已整理到GitHub仓库包含Python TCP客户端/服务端示例Wireshark抓包分析脚本TIME_WAIT状态监控工具GitHub地址https://github.com/yourname/tcp-handshake-demo 思考题如果你用tcpdump抓包发现三次握手只看到了两个包可能是什么原因在Linux系统中如何查看和修改tcp_fin_timeout参数这个参数和TIME_WAIT有什么关系为什么HTTP/2和HTTP/3都在努力减少TCP连接的数量这与我们今天讲的握手/挥手成本有什么关系尝试用nc命令手动模拟TCP三次握手的过程提示需要用到nc -vz和抓包工具配合。 系列文章预告网络协议系列文章持续更新中01 | HTTP/1.1 vs HTTP/2 vs HTTP/3进化之路02 | HTTPS原理详解从明文到密文的蜕变03 | TCP三次握手与四次挥手——连接管理的仪式感本文04 | TCP拥塞控制网络堵车的解决方案05 | UDP简单但不可靠为什么还有人用06 | WebSocket全双工通信的实现原理关注专栏第一时间获取更新通知如果本文对你有帮助欢迎点赞、收藏、转发有任何问题欢迎在评论区留言讨论。标签TCP协议三次握手四次挥手网络抓包连接管理

相关文章:

TCP三次握手与四次挥手——连接管理的“仪式感“

**导读:**如果说HTTP是互联网世界的"通用语言",那么TCP就是支撑这一切的"地下管道"。但这条管道不是想通就通的——它有一套严格的"礼仪规范",也就是我们常说的三次握手和四次挥手。今天,我们就来聊…...

AI大神Karpathy的学习心法,普通人也能直接抄作业

美国时间2026年5月19日,AI 圈被一条重磅消息刷屏:大牛 Andrej Karpathy 在社交媒体上正式宣布加入 Anthropic。对于整个科技圈而言,他的动向影响力堪比当年乔丹宣布重返 NBA 大联盟 。这一次,他加入了 Anthropic 的预训练团队&…...

Apache Doris多模态能力深度解析:从技术架构到大厂落地实践

这篇文章是个人的学习总结,AI时代下的Doris在多模态能力的支持上越来越完善,个人总结了背景、技术方案以及各大公司落地场景,方便查阅,大家可以点击收藏。前言Apache Doris 4.0正式引入原生向量索引、AI 函数与混合检索能力&#…...

全志 V821 韦东山 Avaota-F1-B (3) I2C CST816T触摸屏适配

功能还在调试一、硬件连接/**********CST816T********** 1.引脚连接 PD18 -> i2c_clk PD18 -> i2c_sda PD22 -> tp_rst PD23 -> tp_int二、设备树修改tina-v821-v1.3/device/config/chips/v821/configs/avaota_f1/linux-5.4-ansc/board.dtstwi1_pins_default: twi1…...

YOLOv8 ROS:机器人视觉从2D感知到3D空间理解的架构演进

YOLOv8 ROS:机器人视觉从2D感知到3D空间理解的架构演进 【免费下载链接】yolov8_ros Ultralytics YOLOv8, YOLOv9, YOLOv10, YOLOv11, YOLOv12 for ROS 2 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8_ros 在机器人智能化浪潮中,视觉感知…...

AArch64架构SMCR_EL3寄存器详解与SME向量计算优化

1. AArch64系统寄存器与SMCR_EL3概述在Armv8-A/v9架构中,系统寄存器是处理器状态和功能控制的核心枢纽。作为特权级软件与硬件交互的接口,每个系统寄存器都承担着特定的控制、配置或状态监控职责。SMCR_EL3(SME Control Register at EL3&…...

Armv8/v9架构系统寄存器解析:SCXTNUM与SMCR深度剖析

1. AArch64系统寄存器概述 在Armv8/v9架构中,系统寄存器是处理器状态和控制的核心枢纽。与通用寄存器不同,系统寄存器专门用于配置处理器功能、监控运行状态以及实现安全隔离。AArch64架构通过精心设计的寄存器命名规范,使得寄存器的功能和访…...

Armv8/v9架构SCTLRMASK_EL2寄存器解析与应用

1. AArch64系统控制寄存器基础解析在Armv8/v9架构中,系统控制寄存器(System Control Registers)是处理器状态配置的核心组件,它们分布在不同的异常级别(EL0-EL3),用于管理处理器行为、内存系统、安全状态等关键功能。这些寄存器通常通过MRS/M…...

AArch64 SCTLR_EL3寄存器解析与安全配置实践

1. AArch64 SCTLR_EL3系统控制寄存器深度解析在Armv8-A/v9-A架构的安全世界中,SCTLR_EL3寄存器扮演着系统控制中枢的角色。作为EL3(最高特权级别)的系统控制寄存器,它直接决定了安全监控模式(Secure Monitor&#xff0…...

ARMv8/v9虚拟化核心:SCTLR_EL2寄存器详解与配置实践

1. AArch64 SCTLR_EL2系统寄存器深度解析在ARMv8/v9架构的异常级别(Exception Level)设计中,EL2作为虚拟化管理的核心层级,其系统控制寄存器SCTLR_EL2承载着关键的系统配置功能。这个64位寄存器不仅控制着EL2自身的内存管理和系统…...

AI科技热点日报 | 2026年5月22日

文章目录AI科技热点日报 | 2026年5月22日1、大模型技术突破OpenAI高管离职:安全主管Aleksander Madry转向AI经济研究Google发布Gemini Omni:多模态视频生成与编辑新突破ChatGPT集成Microsoft PowerPoint:AI生成演示文稿功能上线2、AI投融资动…...

解锁答辩新方式:依托 paperxie 智能 AI 轻松打造高质量毕业论文答辩 PPT

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create 前言 临近毕业阶段,毕业论文定稿之后,答辩 PPT 制作就成为同学们首要攻克的任务。答辩 PPT 承载着整…...

毕业答辩效率突围!Paperxie AI 一键搞定高质量毕业论文PPT

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPThttps://www.paperxie.cn/ppt/createhttps://www.paperxie.cn/ppt/create 每一年毕业季,绝大多数高校学生都会陷入同一个困境:论文定稿万事俱备,却卡在了毕业论文答…...

科研创作提质增效|依托 PaperXie 智能写作,高效完成期刊论文全流程创作

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/期刊论文https://www.paperxie.cn/ai/journalArticleshttps://www.paperxie.cn/ai/journalArticles 一、引言 学术研究领域中,期刊论文是展现科研成果、完成学业考核、学术成果发表的核心载体。…...

FlexNeRFer架构:动态精度MAC与稀疏计算优化解析

1. FlexNeRFer架构设计解析 1.1 多精度MAC单元设计原理 FlexNeRFer的核心创新在于其可动态调整精度的MAC(乘加运算单元)架构。传统固定精度MAC在面对NeRF这类需要混合精度计算的场景时,要么存在计算资源浪费(高精度模式&#xff…...

2026学数据分析对产品岗位的价值分析

一、数据分析在产品岗位中的核心价值数据分析能力帮助产品经理更精准地理解用户需求,优化产品决策。通过数据驱动的方法,减少主观臆断,提升产品迭代效率。数据可视化工具(如Tableau、Power BI)和统计分析能力&#xff…...

2026营销策划岗位学数据分析能提升职场能力吗

一、数据分析在营销策划中的核心价值数据驱动决策取代经验主义,精准定位用户需求与行为模式 实时监测市场趋势与竞品动态,优化营销策略的敏捷性 量化评估活动效果,提升ROI与资源分配效率二、2026年营销策划岗位的数据分析技能需求基础能力&am…...

李力/张明亮/周雍进等合作Nat Com | 山梨酸的高效异源生物合成

近日,福建师范大学李力教授团队与中国科学院大连化学物理研究所周雍进合作在天然产物生物合成与合成生物学领域取得重要突破,相关研究成果以“Toward sustainable food preservatives: high-level production of sorbic acid in engineered Saccharomyce…...

3步快速掌握AKShare:零基础获取金融数据的完整指南

3步快速掌握AKShare:零基础获取金融数据的完整指南 【免费下载链接】akshare AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库 项目地址: https://gitcode.com/gh_mirrors/aks/aksha…...

同事悄悄告诉我,他月薪比我高1.8万,岗位一模一样。我去问HR,HR说,薪资保密。我才明白,保密的从来不是他的,是我的

最近看到一个帖子,有人说,他在公司干了三年,一直以为自己的薪资还算正常,直到有一天,关系不错的同事喝多了,把工资条拍给他看。两个人同一天入职,同一个岗位,同一个绩效评级。差了1.…...

API网关设计与实现完全指南

API网关设计与实现完全指南 前言 API网关是微服务架构中的统一入口,负责请求路由、负载均衡、安全认证、限流熔断等功能。一个设计良好的API网关可以极大地简化微服务架构的复杂度,提升系统的可维护性和安全性。本文将详细介绍API网关的设计理念、核心功…...

5分钟掌握抖音资源批量下载:开源douyin-downloader终极指南

5分钟掌握抖音资源批量下载:开源douyin-downloader终极指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...

服务注册与发现完全指南

服务注册与发现完全指南 前言 在微服务架构中,服务注册与发现是实现服务间通信的基础设施。服务注册中心维护着所有服务的实例信息,使得服务消费者能够动态地发现和调用服务提供者。本文将详细介绍服务注册与发现的核心概念、实现机制以及最佳实践。 一、…...

服务通信模式选择完全指南

服务通信模式选择完全指南 前言 在微服务架构中,服务间通信是核心基础设施之一。选择合适的通信模式直接影响系统的性能、可靠性和可维护性。本文将详细介绍同步通信和异步通信的各种模式,以及如何根据业务场景做出最佳选择。 一、服务通信概述 1.1 通信…...

Bazzite 42.20250417深度解析:云原生游戏操作系统的技术革命

Bazzite 42.20250417深度解析:云原生游戏操作系统的技术革命 【免费下载链接】bazzite Bazzite makes gaming and everyday use smoother and simpler across desktop PCs, handhelds, tablets, and home theater PCs. 项目地址: https://gitcode.com/gh_mirrors/…...

C++ 重载与重写的区别与实现

1 . 前言在面向对象语言中,经常提到重载与重写,以下内容直观描述两者差异成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同;…...

3分钟完成缠论分析:ChanlunX通达信插件实现自动画中枢

3分钟完成缠论分析:ChanlunX通达信插件实现自动画中枢 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 还在为缠论分析的手动画线而烦恼吗?ChanlunX缠论插件为你带来终极解决方案&a…...

QtScrcpy键鼠映射实战指南:5分钟打造专业级手机游戏控制体验

QtScrcpy键鼠映射实战指南:5分钟打造专业级手机游戏控制体验 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtS…...

10分钟搭建个人游戏云:Sunshine开源游戏串流服务器完全指南

10分钟搭建个人游戏云:Sunshine开源游戏串流服务器完全指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否梦想过在任何设备上畅玩PC游戏?想要在客厅…...

微软逐步淘汰 SMS 身份验证,通行密钥带来更强安全保障!

ZDNET 要点总结微软正在逐步淘汰将 SMS 作为身份验证方式,因为 SMS 消息未加密,易受黑客攻击。微软账户所有者将被提示设置通行密钥。通常登录或找回在线账户时会收到 SMS 验证短信,但这并非安全的身份验证方式,如今微软对使用微软…...