解密TCP三次握手与四次挥手的秘密(程序员必看实战指南)

通信协议 | 三次握手、七次握手、四次挥手 客户端想要通过 HTTP 请求访问服务端时,需要经过三次握手;通过 HTTPS 访问服务端时,需要额外增加四次握手。TCP 协议需要通过三次握手建立可靠连接。想要建立 HTTPS 安全连接,需要在 TCP 可靠连接基础上使用 TLS 协议。TLS 协议需要四次握手才能建立安全连接。终止 TCP 可靠连接时需要四次挥手。需要注意的是,本文所说的三次握手、七次握手、四次挥手都是基于特定版本的协议,不同版本的协议所需握手次数可能不同。 阅读详情

当网络开始"谈恋爱":三次握手那些事儿

各位老铁!今天咱们来聊聊网络世界里最经典的"相亲故事"——TCP三次握手(敲黑板!重点来了)。想象一下你的电脑要和服务器处对象,总得先确认双方都有诚意对吧?

第一次握手:客户端(小哥哥)发出SYN=1的求爱信号,附带随机序列号x(就像递出名片:“Hi小姐姐,这是我的ID”)

第二次握手:服务端(小姐姐)回SYN=1+ACK=1的响应,序列号y,确认号x+1(“收到啦这是我的ID,确认你在线哦”)

第三次握手:客户端发送ACK=1,确认号y+1(“确认收到!咱们开始交往吧!”)

这里有个灵魂拷问:为什么非要三次?两次不行吗?(问得好!)假设网络延迟导致老SYN包突然复活,两次握手就会产生"僵尸连接",就像收到前任突然发来的复合短信一样尴尬!

分手也要体面:四次挥手的艺术

分手可比牵手复杂多了!来看经典的四次挥手流程:

第一次挥手:主动方发送FIN=1(“我想分手了…”)

第二次挥手:被动方回ACK(“收到分手请求”)

第三次挥手:被动方发送FIN=1(“我也想好了,同意分手”)

第四次挥手:主动方回ACK(“好的,江湖再见”)

等等!这里有个隐藏考点:为什么要有TIME_WAIT状态?(重点标记!!!)想象分手后突然收到前任的未读消息,这个2MSL等待期就是用来处理这种网络延迟的"幽灵数据包"的!

实战踩坑日记:来自一线程序员的血泪教训

去年我在做高并发IM系统时,遇到过惊悚的CLOSE_WAIT堆积问题(后背发凉)。监控显示服务器上有10w+的CLOSE_WAIT连接!后来发现是代码里没正确关闭socket导致的——就像提了分手却堵着门不让对方离开!

解决方案:

# 错误示范(会残留CLOSE_WAIT)
sock.shutdown(socket.SHUT_WR) 

# 正确姿势(Python示例)
try:
    sock.shutdown(socket.SHUT_RDWR)
finally:
    sock.close()

抓包实战:Wireshark现场教学

上硬菜!打开Wireshark抓个HTTP请求看看(此处应有截图):

  1. 三次握手阶段:

    • [SYN] Seq=0
    • [SYN, ACK] Seq=0 Ack=1
    • [ACK] Seq=1 Ack=1
  2. 数据传输阶段:

    • HTTP请求/响应清晰可见
  3. 四次挥手阶段:

    • [FIN, ACK] Seq=1 Ack=1
    • [ACK] Seq=1 Ack=2
    • [FIN, ACK] Seq=1 Ack=2
    • [ACK] Seq=2 Ack=2

注意看序列号的变化规律(这里藏着TCP可靠传输的魔法)!

高频面试题破解(附参考答案)

Q:TCP为什么是可靠传输?
A:三板斧保证——顺序号确认机制、超时重传、流量控制(滑动窗口)

Q:TIME_WAIT状态过多怎么办?
A:调整内核参数(比如net.ipv4.tcp_tw_reuse),但要注意NAT环境下可能的问题

Q:SYN Flood攻击原理?
A:疯狂发送SYN包不完成握手,耗尽服务端资源(防御方案:SYN Cookie)

进阶冷知识:TLS握手对TCP的影响

现代HTTPS通信要先完成TCP三次握手,再进行TLS握手(相当于相亲成功后的背景调查)。整个过程会多出2个RTT时间,这也是QUIC协议诞生的原因之一!

写给开发者的建议(避坑指南)

  1. 网络编程时一定要处理各种异常状态(比如对方突然断线)
  2. 设置合理的超时时间(别让连接吊在半空中)
  3. 使用netstat命令定期检查连接状态
  4. 理解底层原理才能写出健壮的代码(别当API调用工程师!)

下次当你发送一个简单的HTTP请求时,想想背后这场精心编排的"网络交际舞"吧!理解这些底层机制,才能在出现网络问题时快速定位原因(比如突然暴增的延迟或连接失败)。记住,好的程序员不仅要会写代码,更要懂代码背后的"网络社交礼仪"!

Wireshark实战:从三次握手到四次挥手,透视TCP连接全生命周期 本文通过Wireshark实战演示,详细解析了TCP连接的全生命周期,包括三次握手和四次挥手的完整过程。文章提供了抓包环境搭建、报文解析技巧以及常见网络问题的排查方法,帮助读者深入理解TCP协议的工作原理和实际应用。 阅读详情

相关推荐

用Wireshark解密TCP三次握手:从抓包到微信消息发送的全过程

本文通过Wireshark抓包实战,生动解析了微信消息发送背后的TCP三次握手全过程。文章从消息发送失败场景切入,详细演示了如何捕获并分析SYN、ACK等关键数据包,将抽象的TCP连接建立机制可视化,帮助读者直观理解网络通信的底层原理与故障排查方法。

efc12345678的博客 521

TCP为什么采用三次握手而不是二次握手

TCP采用三次握手而非二次握手,主要解决网络延迟导致的重复报文和初始序列号同步问题。三次握手能防止历史连接占用资源,确保双方序列号同步,并增强抗攻击能力。服务端在收到第三次ACK后才建立连接,避免过早分配资源。相比二次握手,三次握手能更有效处理延迟报文,减少无效连接,并防御SYN洪泛攻击,确保可靠的全双工通信。

2401_87259519的博客 1214

听懂TCP三次握手:从SYN到ESTABLISHED的实战真相

TCP连接不是简单的‘建立通道’,而是客户端与服务端通过序列号、窗口、时间戳等参数完成的状态同步与能力协商过程。其核心原理在于利用三次握手实现可靠初始化,抵御丢包、延迟与乱序干扰,从而为后续数据传输奠定可信基础。这一机制直接决定高并发建连成功率、IoT设备在线稳定性及直播首屏时延等关键指标。深入理解SYN/SYN-ACK/ACK每个报文携带的MSS、SACK、TSval等选项含义,结合ss、tcpdump、Wireshark等工具诊断真实链路行为,是网络调优与故障排查不可替代的技术能力。

aobai7842的博客 437

网络-如果第一次握手旧的序列号先到怎么办?

这是因为TCP协议要求一个连接(由源IP、源端口、目标IP、目标端口四元组唯一标识)在任意时刻只能有一个活跃的状态。当服务端已经在处理一个SYN请求时,收到相同连接的新SYN,会被视为异常情况。所以它会回复Challenge ACK,使用之前记住的确认号91。由于服务端已经在SYN_RCVD状态,并且记住了之前的连接信息。客户端应该先等待之前的连接超时或显式发送RST关闭。它会认为这可能是一个重复的或者过期的SYN。记住了这个连接的状态(包括序列号90)或者使用不同的源端口发起新连接。

Hanyaoo的博客 309

计网实验:从Wireshark抓包实战看TCP/UDP协议核心机制

本文通过Wireshark抓包实战深入解析TCP/UDP协议核心机制,涵盖三次握手、数据传输序列号、四次挥手等关键环节,并对比UDP协议特性。文章提供实验环境搭建指南、高级分析技巧及常见问题排查方法,帮助读者从实践角度理解网络协议工作原理。

weixin_30825581的博客 377

SSH协议实战:用Wireshark解密你的第一次远程登录全过程(附抓包截图)

本文通过Wireshark抓包实战,详细解析了SSH远程登录的全过程。从TCP三次握手、SSH版本协商,到核心的密钥交换(Key Exchange)与用户认证,逐步揭示了SSH协议如何构建安全加密隧道。文章结合具体抓包截图,帮助读者直观理解SSH的安全机制,提升对网络协议与安全运维的实践认知。

Apple的专栏 958

三次握手&四次挥手(通俗易懂版)

三次握手四次挥手​​目的​​建立可靠连接安全断开连接​​次数​​3次4次​​关键点​​解决历史SYN问题等待对方数据发送完毕​​比喻​​打电话前的“喂喂喂”确认礼貌的“再见”和确认​​小白记忆法​三次握手:你说 → 对方答 → 你确认。四次挥手:你说要挂 → 对方同意 → 对方说要挂 → 你同意。

2301_78043557的博客 1717

HTTPS安全通信背后的秘密:用Wireshark解密TLS 1.3握手全流程

本文深入解析了HTTPS安全通信的核心机制,重点介绍如何使用Wireshark工具解密TLS 1.3握手全流程。通过详细的抓包分析和实验环境搭建,揭示TLS 1.3协议的1-RTT握手机制、加密套件精简等关键改进,帮助读者掌握网络安全通信的底层原理与实战技巧。

q1w3e5r7t9y的博客 749

TCP三次握手 & 四次挥手:一场“确认眼神”与“礼貌告别”的对话

趣味讲解TCP三次握手&四次挥手原理及缘由

T_iAn_T的博客 443

Wireshark实战:解密TLS握手协议的关键步骤

本文通过Wireshark实战演示,详细解析了TLS握手协议的关键步骤。从TCP三次握手建立连接,到Client Hello、Server Hello与证书交换,再到密钥协商与加密通道切换,文章指导读者如何配置Wireshark环境并加载RSA私钥以解密TLS流量,从而直观理解HTTPS安全连接的建立过程与内部机制。

weixin_28568819的博客 206

解密TCP三次握手背后双队列,一文让你明白,真正原因都在这里

本文深入解析了TCP服务器编程中listen系统调用的核心机制,重点剖析了其背后的两个内核队列——半连接队列(SYN Queue)和全连接队列(Accept Queue)。文章首先介绍了listen函数原型及backlog参数的历史演变,指出其现代Linux内核中仅控制全连接队列大小的特性。随后详细阐述了三次握手过程中这两个队列的运作原理,包括半连接队列对应SYN_RCVD状态的连接,全连接队列存储已完成握手的连接。文章还揭示了listen与accept的生产者-消费者协作模式,并提供了实践指导,包括如何合

weixin_45715405的博客 206

三次握手的秘密:TCP连接建立的灵魂对话

握手次数发送方核心信息解决的问题第一次客户端我的发送能力正常(SYN)服务器知客户端能发第二次服务器我能收+能发(SYN+ACK)客户端知服务器能收能发第三次客户端我能收(ACK)服务器知客户端能收✨技术本质TCP三次握手 = 双向能力验证 = SYN → SYN+ACK → ACK📚 扩展阅读《TCP/IP详解 卷1:协议》第三章动手任务:用Wireshark抓包分析你访问百度的三次握手!下次面试被问三次握手,你将降维打击!关注我,深入解析网络协议栈的每一层!

全栈开发工程师 999

再回首第二次握手---——战“疫”下的缘故市场线上增员(1).pptx

再回首第二次握手---——战“疫”下的缘故市场线上增员(1).pptx

HTTP和HTTPS的区别,TCP为何要三次握手和四次挥手

参考:https://blog.youkuaiyun.com/xiaoming100001/article/details/81109617 HTTP特点 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。 基于请求和响

Nobody_else_的博客 1715

Windows下TensorRT+YOLOv11部署避坑指南:从CUDA配置到模型加密全流程

本文详细解析了在Windows平台部署YOLOv11与TensorRT的全流程,重点涵盖从CUDA环境配置、工程编译适配到模型加密保护的实战指南。基于wang-xinyu的tensorrtx仓库,提供了详细的版本选择、编译问题修复方案,并深入探讨了如何对TensorRT引擎进行加密,以实现高效且安全的端到端部署。

vscode5coder的博客 450

别再傻傻分不清!用R语言5分钟搞定RR、AR、OR的计算与解读(附代码)

本文通过R语言实战演示,详细讲解了RR(相对风险)、AR(绝对风险)和OR(比值比)的计算方法与科学解读。提供完整的代码示例和可视化技巧,帮助医学研究者快速掌握这些核心流行病学指标的应用与常见陷阱规避。

weixin_42526015的博客 265

Wireshark 3.6 实战:3步解析 TCP 三次握手与四次挥手完整流程

本文通过Wireshark 3.6实战演示,详细解析TCP三次握手与四次挥手的完整流程。从环境配置到抓包分析,再到可视化工具的使用,帮助读者深入理解计算机网络中的核心协议,特别适合期末复习和实验题练习。

weixin_33423874的博客 238

Zotero内存占用与存储优化:从根源解决卡顿与空间不足

文献管理软件在学术工作中扮演着重要角色,其核心原理是通过数据库管理元数据与附件文件,实现文献的快速检索与组织。然而,随着文献库规模增长,软件的资源管理机制可能面临挑战,尤其是内存占用与存储空间优化问题。从技术价值看,高效的附件管理策略不仅能提升软件响应速度,还能确保数据安全与可移植性。在实际应用场景中,研究者常遇到软件卡顿、存储目录膨胀等痛点,这通常与附件存储模式、缓存机制及数据库维护有关。本文聚焦于Zotero这一主流工具,针对其内存占用高、文件无法删除等常见问题,提供了外置存储、链接附件、数据库维护等系

weixin_34209060的博客 453

面试专栏:TCP和TLS连接专栏

客户端向服务器发送一个TCP报文,其中包含SYN(同步)标志位,以及客户端的初始序列号。这表示客户端请求建立连接,并希望开始通信。服务器接收到客户端的SYN报文后,会发送一个带有SYN和ACK(确认)标志位的报文,其中ACK用于确认客户端的请求,并同时向客户端发起自己的序列号。这表示服务器接受了连接请求,并同意建立连接。客户端接收到服务器的确认报文后,会发送一个带有ACK标志位的报文,用于确认服务器的接受。至此,连接建立完成,双方可以开始进行数据传输。

weixin_62827806的博客 2056

AI Agent Harness Engineering 监控与日志系统搭建

在生成式AI(Generative AI)与大语言模型(LLM)普及的今天,AI Agent(自主智能代理)已经成为了继「LLM API调用」「单轮/多轮对话」之后的第三代AI应用范式——Agent能够自主感知环境、制定多步决策、调用外部工具(Web搜索、数据库、RAG检索、企业系统API等)、执行复杂任务并优化自身策略。然而,随着Agent应用从Demo原型快速落地到企业生产环境,一系列与工程化落地强绑定的可观测性(Observability)问题正在成为Agent项目成功上线、稳定运行的最大瓶颈。

AI开发架构师 184

树莓派CSI/DSI二合一接口深度玩法:同时驱动MIPI摄像头和屏幕的配置秘籍

本文详细解析了树莓派5上CSI/DSI二合一接口的深度玩法,提供了同时驱动MIPI摄像头和屏幕的完整配置秘籍。从硬件连接到软件设置,包括config.txt的优化配置,帮助用户充分利用树莓派5的双多功能接口,实现高效的双设备工作模式。

weixin_30687051的博客 573

HTTPS和TCP

HTTPS和TCP

weixin_43924419的博客 489

Isaacgym使用操作指南

Isaac Gym 是一个强大的仿真工具,特别适合那些需要进行大规模并行仿真和训练的机器人和强化学习任务。通过 GPU 加速、深度学习集成和丰富的物理仿真能力,Isaac Gym 能够显著提高仿真和训练效率,是机器人学和 AI 研究中的一大利器。

Tony Wey的博客 1万+

万字长文带图,从密码学到TCP握手:HTTPS如何保证安全?

我们每天上网都使用http协议,我们每天编程也使用http协议,Spring Cloud的微服务使用Http template实现RPC调用,作为一名天天接触HTTP协议的程序员,不管是前端还是后端,怎能不了解HTTP协议呢?就连校招面试,HTTP协议也作为考官必点的一道开胃菜进行提问!不管是面试还是开发,学好http协议都是必要的~ 上期我详细讲解了HTTP协议的流程,这期我们来聊下一个话题,为什么HTTPS协议能保证通讯的安全,他与HTTP协议的不同在哪里?这其中到底发生了什么呢,泡杯咖啡,听我给你讲~

浩然的博客 2488

Ubuntu零基础入门到精通【1.2讲】:Ubuntu 与 Linux 的关系 —— 你用的到底是什么?

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

**My Coding Family** 3127

沉降预测算法-指数曲线法

沉降预测的指数曲线法原理和代码实现

yh523的博客 1009
上一篇: 手把手教你在VSCode中玩转Conda环境(Python开发必看指南)
下一篇: 手把手教你用VS Code搭建C++开发环境(保姆级教程)
「已注销」
博客等级 码龄2年 283粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值