为什么TCP需要三次握手?一次不行吗?

news2025/3/26 4:41:53

文章目录

    • 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. 总结

三次握手的精妙之处在于:既确保了双方的通信能力,又避免了不必要的资源浪费,同时为后续可靠通信奠定了基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2321720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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多台,在集群规模不断增加的过程中,有遇…

ElasticSearch 可观测性最佳实践

ElasticSearch 概述 ElasticSearch 是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别(大数据时代)的数据。ES 也使用 Java 开…

(一)飞行器的姿态欧拉角, 欧拉旋转, 完全数学推导(基于坐标基的变换矩阵).(偏航角,俯仰角,横滚角)

(这篇写的全是基矢变换矩阵)不是坐标变换矩阵,坐标变换矩阵的话转置一下,之后会有推导. 是通过M转置变换到P撇点.

基于Spring Boot + Vue的银行管理系统设计与实现

基于Spring Boot Vue的银行管理系统设计与实现 一、引言 随着金融数字化进程加速,传统银行业务向线上化转型成为必然趋势。本文设计并实现了一套基于Spring Boot Vue的银行管理系统,通过模块化架构满足用户、银行职员、管理员三类角色的核心业务需求…

数据库基础知识点(系列一)

1.数据库的发展历史分哪几个阶段?各有什么特点? 答:数据库技术经历了人工管理阶段、文件系统阶段和数据库系统三个阶段。 1)人工管理阶段 这个时期数据管理的特点是: 数据由计算或处理它的程序自行携带…

JVM常用概念之身份哈希码

问题 当我们调用Object.hashCode时,如果没有用户没有提供哈希码,会发生什么? System.identityHashCode如何工作?它是否获取对象地址? 基础知识 在 Java 中,每个对象都有equals和hashCode ,即…

vue 对接 paypal 订阅和支付

一个是支付一个是订阅,写的时候尝试把他们放到一个里面,但是会报错,所以分开写了 我们的页面,前三个为订阅最后一个是支付,我把他们放到一个数组里面循环展示的,所以我们判断的时候只要判断id是否为4&#…

基于javaweb的SpringBoot实习管理系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

流影---开源网络流量分析平台(一)(小白超详细)

目录 流影介绍 一、技术架构与核心技术 二、核心功能与特性 流影部署 流影介绍 一、技术架构与核心技术 模块化引擎设计 流影采用四层模块化架构:流量探针(数据采集)、网络行为分析引擎(特征提取)、威胁检测引擎&…

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 …

探索AI的无限可能,体验智能对话的未来,大模型 API 演示

探索AI的无限可能,体验智能对话的未来,大模型 API 演示 效果展示: 项目概述 这是一个基于 Vue 3 TypeScript Vite 构建的 Vista AI 演示项目,旨在提供一个简洁易用的界面来展示 Vista AI 大语言模型的能力。项目包含 API 演示…

26考研——图_图的存储(6)

408答疑 文章目录 二、图的存储图的存储相关概念邻接矩阵存储方式邻接矩阵的定义顶点的度计算邻接矩阵的特点邻接矩阵的局限性 应用场景邻接矩阵的幂次意义(了解即可) 邻接表存储方式邻接表定义邻接表结构邻接表的特点 邻接矩阵和邻接表的适用性差异十字…

datawhale组队学习--大语言模型—task4:Transformer架构及详细配置

第五章 模型架构 在前述章节中已经对预训练数据的准备流程(第 4 章)进行了介绍。本章主 要讨论大语言模型的模型架构选择,主要围绕 Transformer 模型(第 5.1 节)、详细 配置(第 5.2 节)、主流架…

《TCP/IP网络编程》学习笔记 | Chapter 21:异步通知 I/O 模型

《TCP/IP网络编程》学习笔记 | Chapter 21:异步通知 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 21:异步通知 I/O 模型同步与异步同步异步对比同步 I/O 的缺点异步 I/O 的优点 理解异步通知 I/O 模型实现异步通知 I/O 模型WSAEventSelect 函数和通知…

Qt6相对Qt5的主要提升(AI总结)

我: Qt 6 相对于5 有哪些新功能? Qt 6 相对于 Qt 5 有诸多新功能和改进,以下是主要的新增特性: 1. 架构和核心库的重构 模块化设计:Qt 6 采用了更加灵活的模块化设计,开发者可以按需引入必要的功能模块&a…

MyBatis操作数据库进阶——动态SQL

动态 SQL 是根据程序运行时的条件灵活生成不同 SQL 语句‌的技术。它的核心目的是在不修改代码‌ 的前提下&#xff0c;通过条件判断、循环等逻辑&#xff0c;动态拼接 SQL 片段&#xff0c;解决传统 SQL 语句死板、难以应对复杂业务场景的问题。 一、<if> 标签 先来观…

使用LLama-Factory的简易教程(Llama3微调案例+详细步骤)

引言&#xff1a;一套快速实现 Llama3 中文微调的教程 主要参考&#xff1a;胖虎遛二狗的 B 站教学视频《【大模型微调】使用Llama Factory实现中文llama3微调》 ✅ 笔者简介&#xff1a;Wang Linyong&#xff0c;西工大&#xff0c;2023级&#xff0c;计算机技术 研究方向&am…