TCP为什么要三次握手?
TCP三次握手协议是为了在不可靠的互联网环境中可靠地建立起一个连接,三次握手可以确保两端的发送和接收能力都是正常的。
那么,为什么是三次而不是二次或四次握手呢?
为什么不是二次握手?
如果是二次握手,即客户端发送一个SYN到服务器,服务器回复一个SYN-ACK给客户端,此时就建立连接。
这种情况下,如果第一个SYN请求在网络中延迟了,并且客户端重新发送了SYN后建立了连接,那么当延迟的SYN请求到达服务器后,服务器会认为是新的连接请求,而此时客户端不会理会服务器的回应,导致服务器一直等待,浪费资源。
为什么不是四次握手?
四次握手会增加额外的延迟和复杂性,并且第四个握手并没有提供三次握手已经解决的问题的任何额外保证。
三次握手已经能够确认双方的发送和接收能力都是正常的,进一步的确认只会增加一次往返时间,降低建立连接的效率。
三次握手建立连接的过程:
-
客户端发送SYN:客户端选择一个随机的序列号x发送一个SYN报文,并进入SYN_SENT状态。
-
服务器发送SYN-ACK):服务器收到SYN报文,选择自己的序列号y,并发送一个SYN-ACK报文,服务器进入SYN_RCVD状态。
-
客户端发送ACK:客户端收到SYN-ACK报文后,会发送一个ACK报文,然后进入ESTABLISHED状态。

数据传输结束之后的四次挥手:
TCP的连接终止则需要四次挥手,这是因为TCP连接是全双工的,即通信双方都可以同时发送和接收信息。终止连接时,每个方向都需要单独关闭,所以就需要四次挥手。
-
客户端发送FIN:客户端决定数据发送完毕后,发送一个FIN报文。
-
服务器ACK:服务器收到这个FIN报文,发送一个ACK报文确认,并进入CLOSE_WAIT状态。
-
服务器发送FIN:服务器准备好关闭连接时,发送一个FIN报文。
-
客户端ACK:客户端收到FIN后,发送一个ACK报文,然后进入TIME_WAIT状态。经过一段时间后确保服务器收到ACK报文之后,客户端关闭连接。

生活中的例子:
可以将三次握手比作电话通话。当你拨打一个电话号码时,对方接听(第一次握手),你们开始互相问候确认对方能听到(第二次握手),然后你们开始对话(第三次握手)。
如果只问候一次,你可能不确定对方是否真的听到你;如果问候多次,就显得冗余和不效率。
通话结束后,你说“再见”挂断电话(第一次挥手),对方说“再见”后也挂断(第二次挥手),这样确保了双方都明白通话结束。
在电话通话快结束的时候:
你先说“你还什么别的吗,没有我就要挂了”(第一次挥手),等待对方回应,相当于发送了FIN包。
对方回应“等我想想还有什么”(第二次挥手),相当于对方发送了ACK包,但对方可能还有点儿事要处理,所以通话还未立刻结束。
过了一会儿,对方确认说“好了,我也没话了,那挂了”(第三次挥手),这时候对方发送了FIN包。
你回应“知道了,挂了”(第四次挥手),对应发送ACK包,之后双方都可以挂断电话,结束通话。
求一键三连:点赞、分享、收藏
点赞对我真的非常重要!在线求赞,加个关注我会非常感激!@小郑说编程
相关文章:
TCP为什么要三次握手?
TCP三次握手协议是为了在不可靠的互联网环境中可靠地建立起一个连接,三次握手可以确保两端的发送和接收能力都是正常的。 那么,为什么是三次而不是二次或四次握手呢? 为什么不是二次握手? 如果是二次握手,即客户端发…...
网络防御第6次作业
防病毒网关 按照传播方式分类 病毒 病毒是一种基于硬件和操作系统的程序,具有感染和破坏能力,这与病毒程序的结构有关。病毒攻击的宿主程序是病毒的栖身地,它是病毒传播的目的地,又是下一次感染的出发点。计算机病毒感染的一般过…...
Jmeter分布式部署
前期准备: 1. 控制机一台,代理机一台,Jmeter安装包 操作步骤: 1. Linux安装Jmeter(windows安装教程自己搜一下) 1.1创建一个单独的文件夹(jmeter),用来存放Jmeter的安装包 mkdir jmeter 1.2…...
Odoo迈入开源第一低代码开发平台的重要里程碑
Odoo17的正式发布已经过去好几个月了,通过一段时间的运用,最大的感触就是,Odoo会成为企业管理软件低代码开发平台的重要一员,而V17则会成为这个过程中具有里程碑意义的版本。 时隔四个月,让我们回头来看看Odoo17带来的…...
WinForm、Wpf自动升级 AutoUpdater.NET
Github AutoUpdater.NET 目录 一、IIS部署 更新站点 二、创建Winform 一、IIS部署 更新站点 IIS默认站点目录下创建 目录 Downloads、Updates Updates目录创建文件 UpdateLog.html、AutoUpdaterStarter.xml UpdateLog.html: <html><body><h1…...
GPU不够用:语言模型的分布式挑战
引言 随着深度学习技术的飞速发展,大规模语言模型(LLM)在各种NLP任务中取得了令人瞩目的成绩。然而,这些模型的大小和复杂度也不断增加,给部署和应用带来了诸多挑战。特别是在单个GPU或服务器的内存容量有限的情况下,如何高效地利用分布式计算资源成为了一个亟待解决的问…...
深入理解Redis中的渐进式Rehash技术
1. 引言 Redis是一款高性能的键值存储系统,被广泛应用于缓存、队列、计数器等场景,因其快速、稳定的特性备受开发者青睐。在Redis的背后,有着许多复杂的数据结构和算法支撑着其高效运行,而其中之一就是Rehash操作。 Rehash是Redis中的一个关键操作,负责在数据量增加时对…...
数据结构 栈和队列 力扣例题AC——代码以及思路记录
20. 有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应…...
管理类联考--复试--英文面试--各校英文面试内容
文章目录 北京地区北京大学中国人民大学北京交通大学北京航空航天大学北方工业大学北京林业大学北京语言大学中央财经大学对外经济贸易大学首都经济贸易大学华北电力大学中国矿业大学中国石油大学北京国家会计学院中国财政科学院研究院北京理工大学北京工商大学中国农业大学 湖…...
Android修行手册-Chaquopy中opencv、numpy的初步应用
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…...
VBA将当前打开的表格生成PDF图片
前言 VBA将当前的表格存储成PDF文件进行存储 代码 Sub ExportToPDF()Dim FilePath As StringDim FileName As StringDim ExportRange As Range 设置导出文件路径及名称FilePath "D:\Users\"FileName "ExportedPDF" 设置导出区域范围Set ExportRange Ra…...
解锁AI大模型秘籍:未来科技的前沿探索
在当今这个技术高速发展的时代,人工智能(AI)已经成为了我们生活中不可或缺的一部分。从简单的个人助手到复杂的数据分析和决策制定,AI的应用范围日益扩大,其目的是为了让我们的生活变得更加智能化。本文旨在探讨AI如何…...
一文带你了解MySQL之B+树索引的原理
前言 学完前面我们讲解了InnoDB数据页的7个组成部分,知道了各个数据页可以组成一个双向链表,而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表,每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查…...
【Vue】npm run build 打包报错:请在[.env.local]中填入key后方可使用...
报错如下 根目录添加 .env.local 文件 .env.local :本地运行下的配置文件 配置:VUE_GITHUB_USER_NAME 及 VUE_APP_SECRET_KEY 原因...
中国电子学会2020年06月真题C语言软件编程等级考试三级(含详细解析答案)
中国电子学会考评中心历届真题(含解析答案) C语言软件编程等级考试三级 2020年06月 编程题五道 总分:100分一、最接近的分数(20分) 分母不超过N且小于A/B的最大最简分数是多少? 时间限制: 1000ms 内存限制: 65536kb 输入…...
WPF的DataGrid自动生成中文列头
直接将一个对象集合绑定到DataGrid上面,设置自动生成列AutoGenerateColumns"True",DataGrid会自动根据对象类的属性生成对应的列 示例类对象: public class DataModel{public int Id { get; set; }public string Name { get; set;…...
CSS【详解】居中对齐 (水平居中 vs 垂直居中)
水平居中 内部块级元素的宽度要小于容器(父元素) 方案一:文本居中对齐(内联元素) 限制条件:仅用于内联元素 display:inline 和 display: inline-block; 给容器添加样式 text-align:center<!DOCTYPE html> <html lang&q…...
【排序算法】基数排序
一:基本概念 1.1 基数排序(桶排序)介绍 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是…...
解释存储过程和函数的区别,以及它们在MySQL中的用途。如何创建和使用存储过程和函数?
解释存储过程和函数的区别,以及它们在MySQL中的用途。 存储过程和函数在MySQL中的区别及用途 区别: 返回值: 函数:必须有一个返回值,这可以是一个标量值或一个表。如果没有明确的RETURN语句,函数将返回N…...
【GPU驱动开发】-GPU架构简介
前言 不必害怕未知,无需恐惧犯错,做一个Creator! GPU(Graphics Processing Unit,图形处理单元)是一种专门用于处理图形和并行计算的处理器。GPU系统架构通常包括硬件和软件层面的组件。 一、总体流程 应…...
AIAgent架构安全审计倒计时:监管新规Q3强制实施,你还在用传统API网关日志做AI风控?
第一章:AIAgent架构安全审计与日志 2026奇点智能技术大会(https://ml-summit.org) 安全审计的核心关注点 AI Agent 架构在多模态交互、自主决策与外部系统集成过程中,面临权限越界、提示注入、推理链污染及敏感数据泄露等新型攻击面。安全审计需覆盖运…...
脑电信号解码终极指南:5个步骤实现运动想象分类
脑电信号解码终极指南:5个步骤实现运动想象分类 【免费下载链接】bcidatasetIV2a This is a repository for BCI Competition 2008 dataset IV 2a fixed and optimized for python and numpy. This dataset is related with motor imagery 项目地址: https://gitc…...
深入理解Go编译器:从源码到可执行文件的完整旅程
深入理解Go编译器:从源码到可执行文件的完整旅程 【免费下载链接】under-the-hood 📚 Go: Under The Hood | Go 语言原本 | https://golang.design/under-the-hood 项目地址: https://gitcode.com/gh_mirrors/un/under-the-hood Go语言以其高效的…...
如何用Mousecape轻松定制macOS光标主题:免费个性化指南
如何用Mousecape轻松定制macOS光标主题:免费个性化指南 【免费下载链接】Mousecape Cursor Manager for OSX 项目地址: https://gitcode.com/gh_mirrors/mo/Mousecape Mousecape是一款专为macOS设计的光标管理工具,让用户能够轻松自定义和应用各种…...
GLM-OCR环境配置保姆级教程:Windows系统下快速安装与问题排查
GLM-OCR环境配置保姆级教程:Windows系统下快速安装与问题排查 如果你在Windows电脑上尝试部署GLM-OCR时,被各种环境报错、路径问题或者神秘的“403 forbidden”搞得头大,那这篇文章就是为你准备的。我遇到过太多在Windows上卡住的朋友&#…...
图像格式解析:RAW、RGB、YUV的优缺点与应用场景
1. 为什么需要了解图像格式? 第一次接触图像处理时,我完全被各种格式搞晕了。为什么拍出来的照片有RAW格式,手机截图却是JPEG?为什么视频压缩要用YUV而不是RGB?这些问题困扰了我很久。后来在实际项目中踩过几次坑才明白…...
区块链开发最佳实践
区块链开发最佳实践:构建高效安全的去中心化应用 区块链技术正重塑金融、供应链、医疗等多个领域,但开发过程中面临性能、安全、可扩展性等挑战。掌握最佳实践是确保项目成功的关键。本文将围绕智能合约优化、节点部署策略、数据隐私保护等核心方向&…...
DeepSeek-R1-Distill-Qwen-1.5B实战教程:Python调用与流式对话实现
DeepSeek-R1-Distill-Qwen-1.5B实战教程:Python调用与流式对话实现 1. 模型简介与环境准备 1.1 DeepSeek-R1-Distill-Qwen-1.5B模型特点 DeepSeek-R1-Distill-Qwen-1.5B是DeepSeek团队基于Qwen2.5-Math-1.5B基础模型,通过知识蒸馏技术融合R1架构优势打…...
告别臃肿控制中心:AlienFX Tools如何用500KB实现Alienware设备的完全掌控
告别臃肿控制中心:AlienFX Tools如何用500KB实现Alienware设备的完全掌控 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools 你是否曾经因为Al…...
免费教程:用Fish-Speech-1.5制作有声书,亲测好用!
免费教程:用Fish-Speech-1.5制作有声书,亲测好用! 想自己制作有声书却苦于没有专业录音设备?或者觉得人工录制太耗时?今天我要分享一个超级实用的方法——用Fish-Speech-1.5语音合成模型来制作有声书。这个开源模型支…...
