TCP 的三次握手

ops/2024/12/1 8:14:44/

TCP 的三次握手


1. TCP 三次握手(Three-Way Handshake)

目的:三次握手的目的是为了在客户端和服务端之间建立可靠的 TCP 连接,确保双方能够同步,并且为数据传输做好准备。

三次握手的过程:
  1. 第一次握手:SYN

    • 客户端 → 服务端:客户端发送一个 SYN(同步)包,表示请求建立连接,并告知服务端客户端的初始序列号(seq)。
    • 目的:客户端通知服务端自己希望建立连接。
  2. 第二次握手:SYN-ACK

    • 服务端 → 客户端:服务端收到客户端的 SYN 包后,发送一个 SYN-ACK 包。该包包括服务端的初始序列号,并且确认客户端的 SYN 包(通过确认号 ack)。
    • 目的:服务端响应客户端的连接请求,并将自己的序列号同步给客户端。
  3. 第三次握手:ACK

    • 客户端 → 服务端:客户端收到服务端的 SYN-ACK 包后,发送一个 ACK 包确认响应,确认号是服务端的序列号 + 1。
    • 目的:客户端确认服务端的连接响应,最终建立起双向的可靠连接。

2. TCP 两次握手的潜在问题

如果使用 两次握手(即客户端发送 SYN 包,服务端发送 SYN-ACK 包后连接立即建立),会导致以下问题:

1) 缺少客户端确认
  • 在两次握手中,客户端没有进行最后的确认。虽然服务端已发送了 SYN-ACK 包,表明同意连接,但客户端没有向服务端发送确认信息,导致服务端无法确定客户端是否真的准备好建立连接。
  • 客户端可能已经认为连接已建立,但服务端却没有得到最终确认,因此可能还会继续等待客户端的确认包。
2) 历史连接(半开连接)问题
  • 假设在某些情况下,服务端已发送 SYN-ACK 包,并等待客户端的确认。然而,客户端由于网络问题、崩溃或其他原因没有及时发送 ACK 确认包,导致服务端仍然保持“等待确认”状态,无法知道客户端是否成功接收并准备建立连接。
  • 此时,服务端仍然认为连接正在进行中,形成了 历史连接半开连接(Half-open Connection)。这种连接没有完全建立,且服务端可能会将其错误地作为有效连接处理,浪费资源。
3) 误连接(连接干扰)
  • 网络中可能会存在延迟、丢包等现象,导致一个已经关闭的连接请求(历史连接)再次到达服务端。
  • 如果没有三次握手的确认机制,服务端可能会误认为这是一个新的连接请求,从而错误地处理已经关闭的连接,导致连接状态不一致。

3. 三次握手的解决方案与优势
1) 同步序列号与状态确认
  • 三次握手的第三次确认步骤(客户端发送 ACK 包)确保了双方连接状态的同步。客户端通过发送确认包来确认服务端的响应,服务端也确认客户端准备好进行数据传输。
  • 这个步骤避免了服务端错误地认为连接已经建立,且确保双方的初始序列号同步。
2) 防止历史连接与半开连接问题
  • 如果客户端未能成功接收到服务端的 SYN-ACK 响应(例如由于客户端崩溃或网络断开),服务端会保持等待状态,直到超时并关闭连接。这种机制避免了历史连接的重现。
  • 半开连接问题也得以避免,只有当客户端和服务端都完成了确认后,才认为连接完全建立,避免了资源的浪费。
3) 更强的可靠性
  • 三次握手确保了连接建立过程中每一步都得到确认,避免了中间丢失消息的风险。这样能保证数据传输的可靠性。
  • 由于第三次握手的确认,服务端在建立连接后就能确定客户端准备好接收数据,从而避免误操作或不必要的等待。

4. 两次握手与三次握手的比较
特性两次握手三次握手
握手次数两次三次
连接建立是否可靠不完全可靠,可能产生“半开连接”或历史连接问题完全可靠,确保双方同步
客户端与服务端状态确认客户端未明确确认服务端响应客户端明确确认服务端响应,确保连接完整
连接干扰可能出现误连接(历史连接)避免了历史连接问题
资源浪费可能导致服务端浪费资源,等待无效连接资源得到了有效利用,避免等待无效连接
连接是否能完全建立连接可能没有完全建立,客户端和服务端可能对连接状态不一致连接完全建立,双方同步准备好进行数据传输

5. 结论
  • 两次握手 虽然在理论上看似可以简化连接建立过程,但会引发 历史连接半开连接 等严重问题,导致连接状态不一致,浪费系统资源。
  • 三次握手 通过增加第三次确认包,确保连接完全建立并且双方对连接状态达成一致,从而提供了 可靠性资源有效使用避免半开连接 等优点,是保证 TCP 连接可靠性的关键机制。

http://www.ppmy.cn/ops/138140.html

相关文章

【论文笔记】Frequency Domain Model Augmentation for Adversarial Attack

Abstract 对于黑盒攻击,替代模型与受害模型之间的差距通常较大,表现为较弱的攻击性能。基于对抗样本的可迁移性可以通过同时攻击不同模型来提高的观察,提出了利用变换图像模拟不同模型的模型增强方法。 然而,现有的空间域变换并没…

小F的矩阵值调整

问题描述 小F得到了一个矩阵。如果矩阵中某一个格子的值是偶数,则该值变为它的三倍;如果是奇数,则保持不变。小F想知道调整后的矩阵是什么样子的。 测试样例 样例1: 输入:a [[1, 2, 3], [4, 5, 6]] 输出&#xff1a…

[在线实验]-Redis Docker镜像的下载与部署

镜像下载 dockerredis镜像资源-CSDN文库 加载镜像 使用以下命令从redis.tar文件中加载Docker镜像 docker load --input redis.tar 创建映射目录 为了确保Redis的数据能够持久化,我们需要创建一个本地目录来存储这些数据 mkdir -p datasource/docker/redis 运…

Oracle, PostgreSQL 字符串排序不一致及调整

有一个使用了不同数据库的应,Oracle 和 PostgreSQL,数据库中的记录完全相同,相同的查询语句(相同的排序,至少从字面上来说是的)取到的记录排序却不同,从而产生了 Bug。 简单演示一下默认排序各自在这两种数据库中的行为…

Cookie跨域

跨域:跨域名(IP) 跨域的目的是共享Cookie。 session操作http协议,每次既要request,也要response,cookie在创建的时候会产生一个字符串然后随着response返回。 全网站的各个页面都会带着登陆的时候的cookie …

centos7.6升级cmake+编译pcm工具

PCM工具是一个用于监控INTEL处理器全面性能的工具,全称是: Intel Performance Counter Monitor (Intel PCM) github下载位置 https://github.com/intel/pcm 按照README编译即可。 mkdir build cd build cmake .. cmake --build . 编译过程中遇到问题…

代理IP与百度在信息时代的交互

目录 一、代理IP的基本概念和工作原理 二、代理IP在百度搜索中的多重作用 解决网络延时问题,提高搜索速度 提高网络安全 隐藏用户的真实IP地址,保护个人隐私 突破访问限制,拓宽网络视野 三、代理IP在百度关键词排名优化中的应用 模拟…

JDK、JRE、JVM的区别

JDK(Java Development Kit)、JRE(Java Runtime Environment)和JVM(Java Virtual Machine)是Java技术栈中的三个核心组件,它们各自有不同的功能和用途: 1. JDK(Java Deve…