为什么TCP需要三次握手?一次不行吗?
文章目录
- 1. 三次握手的过程
- 2. 为什么需要三次握手?
- 3. 握手过程中每一步的具体作用
- 4. 简单比喻
- 5. 为什么是三次握手,而不是两次或四次?
- 6. 三次握手中的序列号有什么作用?
- 7. 总结
1. 三次握手的过程
三次握手是建立 TCP 连接的过程,目的是确保通信双方能够可靠地建立连接。它的基本过程如下:
- 第一次握手:客户端发送一个 SYN 报文给服务器,表示请求建立连接。
- 第二次握手:服务器收到 SYN 后,发送 SYN+ACK 报文给客户端,表示确认收到请求,并同意建立连接。
- 第三次握手:客户端收到 SYN+ACK 后,发送 ACK 报文给服务器,确认连接建立。
当这三步完成后,TCP 连接正式建立,双方可以开始通信。

2. 为什么需要三次握手?
三次握手的主要目的是防止已失效的连接请求报文被误接收,从而引发错误。
例如:如果没有三次握手,假设客户端第一次发送的 SYN 报文因网络延迟滞留很久,服务器收到后误以为是新的连接请求,发送 SYN+ACK,而客户端实际上已经关闭或不需要连接了。这样,服务器就会白白等待,浪费资源。
三次握手通过让客户端确认服务器的响应,确保双方都明确知道对方的通信能力,从而建立可靠的连接。
3. 握手过程中每一步的具体作用
第一次握手(SYN):
- 客户端主动发送一个 SYN 报文,标志着它想要建立连接,同时携带一个序列号(Sequence Number,简写为 Seq)。
- 作用:客户端告诉服务器,“我想和你建立连接,同时我的序列号是 X。”
第二次握手(SYN+ACK):
- 服务器收到 SYN 报文后,会回复一个 SYN+ACK 报文,表示同意连接,并告知客户端它的初始序列号。
- 作用:服务器告诉客户端,“我同意你的请求,我的序列号是 Y,同时我收到你的序列号 X。”
第三次握手(ACK):
- 客户端收到 SYN+ACK后,再发送一个 ACK 报文,确认连接已建立。
- 作用:客户端告诉服务器,“我确认收到你的序列号 Y,同时你也收到了我的序列号 X,我们可以正式通信了。”
4. 简单比喻
假设一个日常场景:你和朋友约好电话联系。
第一次握手: 你拨通朋友的号码,电话响了(客户端发送SYN)。
- 作用:表示你希望和朋友建立通话。
第二次握手: 朋友接起电话并回应:“喂,你好”(服务器发送 SYN+ACK)。
- 作用:朋友同意与你通话,并向你确认他可以正常接收你的声音。
第三次握手: 你说:“你好,我能听到你,我们可以聊天了。”(客户端发送ACK)。
- 作用:确认双方的通信能力正常,通话开始。
5. 为什么是三次握手,而不是两次或四次?
两次握手的问题:
- 如果仅用两次握手,服务器在收到客户端的第一次 SYN 后就认为连接已经建立,这可能导致服务器被无效连接请求拖累。三次握手让客户端确认了服务器的响应,避免了这种情况。
为什么不需要四次握手?
- 四次握手会浪费一次额外的交互,在双方都已确认的情况下没有必要。三次握手已经足够确保双方的通信能力和连接的可靠性。
6. 三次握手中的序列号有什么作用?
序列号用于保证数据传输的有序性和可靠性。在握手中,双方交换初始序列号,后续传输中,数据会按照序列号排列并校验,以避免丢包、乱序等问题。
比如,客户端的初始序列号是 100,服务器的初始序列号是 200,那么双方的后续数据传输会以这两个值为起点,确保数据能被正确接收。
7. 总结
三次握手的精妙之处在于:既确保了双方的通信能力,又避免了不必要的资源浪费,同时为后续可靠通信奠定了基础。
相关文章:
为什么TCP需要三次握手?一次不行吗?
文章目录 1. 三次握手的过程2. 为什么需要三次握手?3. 握手过程中每一步的具体作用4. 简单比喻5. 为什么是三次握手,而不是两次或四次?6. 三次握手中的序列号有什么作用?7. 总结 1. 三次握手的过程 三次握手是建立 TCP 连接的过程…...
具身系列——NLP工程师切入机器人和具身智能方向
职位高频词汇:VLM调优经验、核心算法(Diffusion、RL、VIT)、pytorch、仿真环境(Isaac Gym、Mujoco、webots) 基于当前具身智能行业发展趋势和岗位需求,以下是为NLP工程师设计的转型路径与策略,…...
SpringBoot2集成Elasticsearch8(使用spring-boot-starter-data-elasticsearch)
写在前面 使用spring-boot-starter-data-elasticsearch集成Elasticsearch8? What? 官方写的不支持啊?让我们来看下官方给出的版本建议。 官方地址: https://docs.spring.io/spring-data/elasticsearch/reference/elasticsearch/versions.…...
【平台优化】持续调度参数在高负载大集群中的影响
持续调度参数在高负载大集群中的影响 背景介绍2种调度通信方式对集群的影响社区相关的讨论结论 背景介绍 这几年经历了我们大数据的Yarn集群的几次扩容,集群从原先的800多台增加到1300多台到现在的1600多台,在集群规模不断增加的过程中,有遇…...
军事级加密通信系统——基于QML的战术地图加密传输
目录 基于QML的战术地图加密传输一、引言二、理论背景与安全需求2.1 战术地图数据的敏感性与安全性要求2.2 QML与PyQt5集成优势2.3 加密算法与数据传输模型三、系统架构与数据流图四、QML前端界面设计与交互功能4.1 QML界面优势与设计理念4.2 功能要求4.3 QML文件示例五、加密传…...
ElasticSearch 可观测性最佳实践
ElasticSearch 概述 ElasticSearch 是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别(大数据时代)的数据。ES 也使用 Java 开…...
(一)飞行器的姿态欧拉角, 欧拉旋转, 完全数学推导(基于坐标基的变换矩阵).(偏航角,俯仰角,横滚角)
(这篇写的全是基矢变换矩阵)不是坐标变换矩阵,坐标变换矩阵的话转置一下,之后会有推导. 是通过M转置变换到P撇点....
基于Spring Boot + Vue的银行管理系统设计与实现
基于Spring Boot Vue的银行管理系统设计与实现 一、引言 随着金融数字化进程加速,传统银行业务向线上化转型成为必然趋势。本文设计并实现了一套基于Spring Boot Vue的银行管理系统,通过模块化架构满足用户、银行职员、管理员三类角色的核心业务需求…...
数据库基础知识点(系列一)
1.数据库的发展历史分哪几个阶段?各有什么特点? 答:数据库技术经历了人工管理阶段、文件系统阶段和数据库系统三个阶段。 1)人工管理阶段 这个时期数据管理的特点是: 数据由计算或处理它的程序自行携带…...
Android Compose 层叠布局(ZStack、Surface)源码深度剖析(十三)
Android Compose 层叠布局(ZStack、Surface)源码深度剖析 一、引言 在 Android 应用开发领域,用户界面(UI)的设计与实现一直是至关重要的环节。随着技术的不断演进,Android Compose 作为一种全新的声明式…...
JVM常用概念之身份哈希码
问题 当我们调用Object.hashCode时,如果没有用户没有提供哈希码,会发生什么? System.identityHashCode如何工作?它是否获取对象地址? 基础知识 在 Java 中,每个对象都有equals和hashCode ,即…...
vue 对接 paypal 订阅和支付
一个是支付一个是订阅,写的时候尝试把他们放到一个里面,但是会报错,所以分开写了 我们的页面,前三个为订阅最后一个是支付,我把他们放到一个数组里面循环展示的,所以我们判断的时候只要判断id是否为4&#…...
Spring Boot - 动态编译 Java 类并实现热加载
为什么需要动态编译? 想象这样一个场景:你的系统需要实时更新业务规则,但重启服务会导致用户体验中断;或者你正在开发一款低代码平台,允许用户编写自定义逻辑并即时生效。这时,动态编译并加载 Java 类的能…...
基于javaweb的SpringBoot实习管理系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
流影---开源网络流量分析平台(一)(小白超详细)
目录 流影介绍 一、技术架构与核心技术 二、核心功能与特性 流影部署 流影介绍 一、技术架构与核心技术 模块化引擎设计 流影采用四层模块化架构:流量探针(数据采集)、网络行为分析引擎(特征提取)、威胁检测引擎&…...
Spring Boot事件机制详解
Spring Boot事件机制详解 1. 事件机制基础 1.1 什么是事件驱动架构 事件驱动架构(Event-Driven Architecture, EDA)是一种软件设计模式,其中系统组件通过事件的发布与订阅进行通信。在Spring Boot中,事件机制为应用程序提供了松耦合的组件间通信方式&…...
【商城实战(63)】配送区域与运费设置全解析
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
2025高频面试算法总结篇【字符串】
文章目录 直接刷题链接直达无重复字符的最长子串给定一个数,删除K位得到最小值至多包含 K 个不同字符的最长子串字符串的排列至少有K个重复字符的最长子串 直接刷题链接直达 如何找出一个字符串中的最大不重复子串 3. 无重复字符的最长子串 给定一个数࿰…...
Python散点密度图(Scatter Density Plot):数据可视化的强大工具
在数据驱动决策的时代,能够高效地处理和可视化多变量数据是一项 crucial 的技能。今天,我们就来深入探讨散点密度图(Scatter Density Plot),这是一种将散点图和核密度估计相结合的数据可视化技术,主要用于展示大量数据点在二维平面上的分布情况。 一、散点密度图的特点 …...
Oracle 数据库安全评估(DBSAT)简明过程
下载DBSAT 从这里下载。 实际是从MOS中下载,即:Oracle Database Security Assessment Tool (DBSAT) (Doc ID 2138254.1)。 最新版本为3.1.0 (July 2024),名为dbsat.zip,近45MB。 $ ls -lh dbsat.zip -rw-rw-r-- 1 oracle oins…...
【T2I】Divide Bind Your Attention for Improved Generative Semantic Nursing
CODE: GitHub - boschresearch/Divide-and-Bind: Official implementation of "Divide & Bind Your Attention for Improved Generative Semantic Nursing" (BMVC 2023 Oral) ABSTRACT 新兴的大规模文本到图像生成模型,如稳定扩散(SD),已…...
【2025】基于springboot+uniapp的企业培训打卡小程序设计与实现(源码、万字文档、图文修改、调试答疑)
基于 Spring Boot uniapp 的企业培训打卡小程序设计与实现 系统功能结构图如下: 一、课题背景 在当今快节奏的商业环境中,企业培训对于员工的成长和企业的发展至关重要。为了满足企业对高效培训管理和员工便捷学习的需求,基于 Spring Boot …...
腾讯面经,有点难度~
今天分享组织内的朋友在腾讯安全的实习面经。 内容涵盖了QPS测试方法、SQL聚合查询、Linux进程管理、Redis数据结构与持久化、NAT原理、Docker隔离机制、Go语言GMP调度模型、协程控制、系统调用流程、变量逃逸分析及map操作等等知识点。 下面是我整理的面经详解: …...
LeetCode(704):二分查找
二分查找 题目链接 题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 #include<stdio.h> //左闭…...
探索AI的无限可能,体验智能对话的未来,大模型 API 演示
探索AI的无限可能,体验智能对话的未来,大模型 API 演示 效果展示: 项目概述 这是一个基于 Vue 3 TypeScript Vite 构建的 Vista AI 演示项目,旨在提供一个简洁易用的界面来展示 Vista AI 大语言模型的能力。项目包含 API 演示…...
26考研——图_图的存储(6)
408答疑 文章目录 二、图的存储图的存储相关概念邻接矩阵存储方式邻接矩阵的定义顶点的度计算邻接矩阵的特点邻接矩阵的局限性 应用场景邻接矩阵的幂次意义(了解即可) 邻接表存储方式邻接表定义邻接表结构邻接表的特点 邻接矩阵和邻接表的适用性差异十字…...
Spark读取文件系统的数据(sbt打包测试)-入门级别Demo
学习目标 通过本关卡练习,您将学到: 如何使用Spark访问本地文件和HDFS文件Spark应用程序的编写、编译和运行方法 相关知识 操作系统:Ubuntu 16.04; Spark版本:2.4.0; Hadoop版本:3.1.3。 编…...
5.1 位运算专题:LeetCode 面试题 01.01. 判定字符是否唯一
1. 题目链接 LeetCode 面试题 01.01. 判定字符是否唯一 2. 题目描述 实现一个算法,确定一个字符串的所有字符是否全部唯一(即没有重复字符)。要求如下: 不使用额外的数据结构(如哈希表)字符串仅包含小写…...
datawhale组队学习--大语言模型—task4:Transformer架构及详细配置
第五章 模型架构 在前述章节中已经对预训练数据的准备流程(第 4 章)进行了介绍。本章主 要讨论大语言模型的模型架构选择,主要围绕 Transformer 模型(第 5.1 节)、详细 配置(第 5.2 节)、主流架…...
Python虚拟环境:从入门到实战指南
目录 一、为什么需要Python虚拟环境? 二、如何创建Python虚拟环境? 1. 使用venv(Python 3.3内置) 2. 使用virtualenv(第三方工具) 3. 使用conda(适合数据科学项目) 三、虚拟环…...
