TCP为什么要三次握手,为什么?

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。为了实现可靠数据传输,TCP 协议的通信双方,都必须维护一个序列号,以标识发送出去的数据包中,哪些是已经被对方收到的。

三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤。如果只是两次握手,至多只有连接发起方的起始序列号能被确认,另一方选择的序列号则得不到确认。

具体来说,在三次握手的过程中,客户端和服务器之间会发送三个数据包:

  1. 第一次握手:客户端向服务器发送一个带有 SYN(Synchronization,同步)标志的数据包,请求建立连接。这个数据包中包含了客户端的初始序列号。
  2. 第二次握手:服务器收到客户端的请求后,会回复一个带有 SYN 和 ACK(Acknowledgement,确认)标志的数据包。这个数据包中包含了服务器的初始序列号,以及对客户端初始序列号的确认。
  3. 第三次握手:客户端收到服务器的回复后,会再次向服务器发送一个带有 ACK 标志的数据包,确认已经收到了服务器的初始序列号。

通过这三次握手,客户端和服务器都知道了对方的初始序列号,并且确认了对方已经收到了自己的序列号。这样就可以保证后续的数据传输是可靠的,不会出现数据包丢失或重复的情况。

 

TCP 使用三次握手(Three-Way Handshake)来建立连接,而不是两次握手,主要是出于以下几个关键原因:

  1. 防止历史连接的初始化造成混乱:如果只使用两次握手,当客户端发送的连接请求(SYN)在网络中滞留并延迟到达服务器时,客户端可能已经重启或者放弃该连接尝试,并重新发送了新的SYN。在这种情况下,如果服务器仍然对第一个滞留的SYN做出响应并建立了连接,就会导致一个无效(或称为“幽灵”)的连接占用服务器资源。

  2. 同步双方的初始序列号:三次握手过程允许双方确认对方的初始序列号。序列号对于TCP的可靠数据传输至关重要,它帮助检测数据包的丢失、重复和乱序。两次握手无法确保双方都已知晓并确认了对方的序列号初始化。

  3. 确保连接的双向性:三次握手确认了客户端到服务器以及服务器回到客户端的路径都是畅通的。这一步是必要的,因为它验证了双方都有发送和接收数据的能力,而两次握手无法完全保证这一点。

  4. 避免资源浪费:通过第三次握手,客户端确认收到了服务器的SYN+ACK,这样服务器就知道客户端确实准备好了进行数据通信,避免了服务器为一个客户端不打算使用的连接分配资源。

简而言之,三次握手提供了额外的安全性和可靠性保障,确保连接是双方都同意的、新鲜的,并且双方的通信参数已经被正确初始化,这些都是两次握手所不能提供的。

 

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

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

相关文章

Typescript高级: 深入理解工厂函数类型

工厂函数类型 代表任意一个类的构造函数【等价JS的构造函数】的函数类型在TS中无法使用 new 来直接实例化一个 function现在通过几个小case来测试下这种类型 1 )模拟一个动物的行为接口(简单) 创建几个实现了这个接口的类来展示接口的用途和如何使用它 下面是一个…

计算机精选期刊特辑

文章目录 一、征稿简介二、合作期刊三、投稿咨询四、咨询 一、征稿简介 艾思科蓝依托互联网信息与数据库技术、整合渠道与合作资源,提供EI/SCI/SCIE/SSCI期刊论文的内容审查、发表支持等服务。艾思科蓝与多所知名出版社达成战略合作关系,持续开展合作征…

利用神经网络学习语言(一)——自然语言处理的基本要素

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下:regression2chatgpt/ch10_rnn/tokenizer.ipynb 本系列文章将深入探讨一种应用广泛的神经…

syncthing文件夹同步与版本管理

1 前言 syncthing可以用来同步文件夹里的所有文件,并且有不错的版本管理,基本每次更改文件,20-40秒就被扫描到了,非常丝滑;这次以此来同步obsidian的插件和文件,达到多端同步; 我家里有一台台…

Android HAL到Framework

一、为什么需要Framwork? Framework实际上是⼀个应⽤程序的框架,提供了很多服务: 1、丰富⽽⼜可扩展的视图(Views), 可以⽤来构建应⽤程序,它包括列表(lists),⽹格&am…

闲话 .NET(4):为什么要跨平台?

前言 .NET Core 有一个关键词就是跨平台,为什么要跨平台呢?Windows 操作系统不香吗?今天我们来聊聊这个 原因一:安全考虑 Windows OS 是闭源的,而 Linux 是开源的,因此有些公司的技术负责人就认为 Linux…

如何将老板的游戏机接入阿里云自建K8S跑大模型(下)- 安装nvidia/gpu-operator支持GPU在容器中共享

文章目录 安装nvidia/gpu-operator支持GPU在容器中共享 安装nvidia/gpu-operator支持GPU在容器中共享 安装 nvidia/gpu-operator遇到两个问题: 由于我们都懂的某个原因,导致某些镜像一直现在不成功。 解决办法,准备一个🪜&#…

车间人员作业行为智能检测 AI视觉在生产车间制造中的应用

车间人员作业行为智能检测系统基于神经网络人工智能视觉算法,车间人员作业行为智能检测通过对车间监控摄像头获取的视频图像进行分析和识别,实现了对人员操作行为的智能检测。系统对工人的操作环节进行分解,根据时间、动作标准等方面制定了规…

MemoryDB 2024 论文分享

论文地址点这里。 TL;DR MemoryDB 通过底层依赖 AWS 内部系统 Multi-AZ Transaction Log 实现了 11 个 9 的持久性保证。 通过依赖 Transaction Log 的 Condition API 和租约机制来实现了一致性和可用性保证。 通过周期性调度 Off-box 节点来外部 Rewrite binlog 避免了内存…

Linux技术分享:Linux设置软链接

简介 软连接是linux中一个常用命令,它的功能是为某一个文件在另外一个位置建立一个不同的链接,类似于windows的快捷方式。作用 当我们需要在不同的目录,使用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件…

C语言基础——循环(2)+关机程序

欢迎点赞支持 个人主页:励志不掉头发的内向程序员; 专栏主页:C语言基础; 文章目录 目录 前言 一、for循环的补充 二、循环的嵌套 1、嵌套的介绍 1.1 练习: 题目解析: 优化: 三、goto语句 1、go…

3DEXPERIENCE DELMIA Role: RFP - Fabrication Robot Programmer

Discipline: Robotics Role: RFP - Fabrication Robot Programmer 在虚拟工厂中定义、验证和编程机器人弧焊和密封剂沉积系统 模拟和验证完整的焊接、密封剂沉积和搬运机器人系统,以消除代价高昂的碰撞并优化生产率提供精确的生产就绪型机器人程序,同…

Day 38 防火墙技术IPtables

一:防火墙简介 1.简介 ​ iptables其实并不是真正的防火墙,我们可以把他理解为一个客户端的代理,用户是通过iptables这个代理,将用户的安全设定执行到对应的“安全框架”中,这个“安全框架”才是真正的防火墙。这个框…

mac安装Redis

官网: https://redis.io中文网: Redis中文网 安装 brew install redis 查看版本 redis-server --version 开启关闭服务 方式一(不推荐) 这种方式不太建议,因为控制台不用输出相应的日志 开启服务 brew service…

K8S认证|CKA题库+答案| 1. 权限控制RBAC

1、权限控制RBAC 您必须在以下Cluster/Node上完成此考题: Cluster Master node Worker node k8s master …

园区网的基本了解

园区网使用的典型技术---IEEE802.3标准/IEEE802.11标准 封闭式园区网络 ---由内部人员使用,不能访问互联网。 ---制订各式各样的规章制度 ---NAC,网络接入控制 开放式园区网络 ---服务于公众的,认证 园区网的发展 第一代:…

神经网络模型结构和参数可视化

神经网络模型结构和参数可视化 一、前言二、Netron2.1Netron简介2.2TensorFlow、Keras、Caffe模型文件实测结果2.3PyTorch、scikit-learn模型文件实测结果 三、NN-SVG四、Netscope五、PlotNeuralNet六、Graphviz七、总结参考文档 一、前言 在神经网络的某些应用场景中&#xf…

.NET快速实现网页数据抓取

网页数据抓取需求 本文我们以抓取博客园10天推荐排行榜第一页的文章标题、文章简介和文章地址为示例,并把抓取下来的数据保存到对应的txt文本中。 请求地址:https://www.cnblogs.com/aggsite/topdiggs 创建控制台应用 创建名为DotnetSpiderExercise的控…

Java通用三级菜单工具类

Java通用三级菜单工具类 通常在写三级菜单时会使用递归方式去写,但是时间长了会发现很多重复的代码一直在写,改,也就改几个名字。 实现方式 抽象属性结构 常用的三个字段,子级id、父级id、其次是数组children。 将返回对象或…

【Spring security】【pig】Note01-pig登录验证过程

🌸🌸 pig 登录验证 🌸🌸 pig后端源码 一、大概执行顺序,便于理解 pig spring-security 二、配置过滤器 配置SecurityFilterChain 三、执行过程分析 请求拦截: 当客户端发送请求时,Sprin…