TCP为什么握手是三次,而挥手是四次

TCP(传输控制协议)使用三次握手(3WHS)来建立一个可靠的连接,并使用四次挥手(4WHS)来终止连接。以下是每个步骤的详细解释:

三次握手(3WHS)建立连接:

  1. SYN(同步序列编号)

    • 客户端选择一个初始序列号x,并发送一个带有SYN标志的TCP段给服务器,请求建立连接。此时,TCP段的序列号字段设置为x。
  2. SYN-ACK(同步-确认)

    • 服务器收到客户端的SYN段后,如果同意建立连接,则会发送一个SYN-ACK段作为响应。服务器选择自己的初始序列号y,并在ACK(确认)字段中确认客户端的序列号x+1(期望接收到的第一个字节的序列号)。同时,SYN标志位也被设置。
  3. ACK(确认)

    • 客户端收到服务器的SYN-ACK段后,发送一个带有ACK标志的TCP段给服务器,确认服务器的初始序列号。客户端在ACK字段中填入y+1。

完成这三个步骤后,TCP连接就成功建立,客户端和服务器可以开始发送数据。

为什么需要三次握手:

  • 防止已失效的连接请求报文段突然传到服务器,因而产生错误:如果使用两次握手,服务器端收到一个旧的连接请求并响应,可能会导致服务器错误地建立一个新连接。
    例子:
  • 允许双方确认彼此的初始序列号:三次握手确保了客户端和服务器都能够确认对方的接收能力和发送能力。

四次挥手(4WHS)终止连接:

  1. FIN(结束)

    • 当一方完成数据传输并希望关闭连接时,它发送一个带有FIN标志的TCP段,表示已经没有数据要发送了。
  2. ACK(确认)

    • 对方收到FIN段后,发送一个ACK段确认这个FIN。
  3. FIN(结束)

    • 对方完成数据传输后,也发送一个带有FIN标志的TCP段。
  4. ACK(确认)

    • 最初发送FIN的一方收到这个FIN段后,发送最后一个ACK段确认。

完成这四个步骤后,TCP连接被关闭。

为什么需要四次挥手:

  • TCP连接是全双工的:意味着数据可以在两个方向上独立传输。因此,每个方向上的连接都需要单独关闭。
  • 确保数据传输完成:四次挥手允许一方在关闭自己的发送部分后,仍然接收来自对方的剩余数据。

上述为什么要三次握手第一个原因的理解

为什么TCP连接建立需要三次握手,而两次握手可能不足以防止"已失效的连接请求"的问题。

假设场景:

假设客户端A想要与服务器B建立TCP连接,但是客户端A发送的第一个连接请求(SYN)在网络中延迟了,没有立即到达服务器B。

第一次握手(SYN):
  • 客户端A发送一个SYN报文(假设序列号为1000)给服务器B,请求建立连接。
网络延迟:
  • 这个SYN报文在网络中延迟,没有立即到达服务器B。
第二次握手(SYN+ACK,如果是两次握手):
  • 假设我们只使用两次握手,客户端A在发送第一个SYN报文后,由于没有收到响应,会重新发送另一个SYN报文(假设序列号为2000)。
第三次握手(ACK,如果是两次握手):
  • 服务器B最终收到了第二个SYN报文(序列号2000),并发送了一个SYN+ACK报文作为响应,同意建立连接。
延迟的报文到达:
  • 此时,客户端A收到了服务器B的SYN+ACK报文,并发送了一个ACK报文确认,完成了两次握手过程。但是,之前延迟的第一个SYN报文(序列号1000)现在终于到达了服务器B。
问题出现:
  • 如果服务器B在两次握手后没有收到客户端A的最终ACK确认,它可能会认为连接没有成功建立。因此,当服务器B收到延迟的SYN报文(序列号1000)时,它可能会错误地认为客户端A又发送了一个新的连接请求,并尝试重新建立一个新的连接。
三次握手的作用:
  • 通过三次握手,即使客户端A的第一个SYN报文(序列号1000)延迟到达,服务器B也不会错误地建立一个新的连接。这是因为:
    • 服务器B在收到第一个SYN(1000)后,会发送一个SYN+ACK(期望收到1000+1=1001),等待客户端的确认。
    • 客户端A收到这个SYN+ACK后,会发送一个ACK(确认1001),但由于客户端A实际上发送的是序列号2000,所以这个ACK不匹配服务器B的期望。
    • 服务器B收到不匹配的ACK后,会知道这不是对它发出的SYN+ACK的响应,因此不会错误地建立一个新的连接。

通过这个例子,你可以看到三次握手如何确保即使在网络延迟或重传的情况下,连接的建立也是可靠和有序的。它防止了因为旧的或延迟的连接请求而导致的不必要的连接建立,确保了服务器不会对已经失效或过时的连接请求做出响应。

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

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

相关文章

solidity的modifier修饰符

solidity的modifier修饰符 什么是modifier修饰符 修饰器(modifier)是solidity特有的语法,类似于面向对象编程中的decorator,声明函数拥有的特性,并减少代码冗余。 Solidity 中关键字 modifier 用于声明一个函数修改…

electron调用dll时应用程序闪退

electron调用dll时,直接闪退,且用如下方式监听无任何输出: window-all-closed 或 will-quit 此时需要检查传给dll的参数及参数类型是否正确,特别是使用ffi-napi时调用dll,使用 ref-napi定义类型,经常容易…

go 源码学习1:scanner学习

scanner所在包是scanner.go type scanner struct {// 步骤是一个函数,用于执行下一个转换。// 也尝试使用整数常量和单个函数以及带有开关的函数,// 但是直接使用函数在64位Mac Mini上快了10%,// 而且阅读起来更直观。step func(*scanner, …

域名区分英文大小写吗?

在互联网的早期,域名系统(DNS)的设计并没有考虑大小写敏感性。然而,随着技术的发展和用户需求的多样化,域名的大小写问题逐渐引起了人们的关注。本文将探讨域名是否区分英文大小写,以及这一特性对网站运营和用户体验的影响。 一、…

【Android】Git Patch生成的文件怎么合并到项目里面和遇到的一些问题

前言 Git patch是一种描述文件,它记录了一系列的文件变更(如新增、修改、删除)以及变更的具体内容。通过使用patch文件,可以将这些变更应用到其他代码库中,从而实现代码的同步和更新。 Git 提供了两种补丁方案&#…

Java使用OpenCV计算两张图片相似度

业务:找出两个表的重复的图片。 图片在表里存的是二进制值,存在大量由于一些特殊情况例如扫描有差异,导致图片存的二进制值不同,但图片其实是一样来的。 所以找出两个表重复相同的图片,不可能只是单纯的比较二进制值…

flask招聘数据分析及展示平台-计算机毕业设计源码39292

目 录 摘要 1 绪论 1.1研究意义 1.2国内外研究进展 1.3flask框架介绍 2 1.4论文结构与章节安排 3 2 招聘数据分析及展示平台分析 4 2.1 可行性分析 4 2.2 系统流程分析 4 2.2.1数据增加流程 5 2.3.2数据修改流程 5 2.3.3数据删除流程 5 2.3 系统功能分析 5 2.3.1 功能性分…

亚马逊新品如何快速吸引流量?自养号测评助卖家一臂之力

在亚马逊平台上每天都会有大量的新品推出,而这些新品中有部分可能并没有什么流量和订单,有些可能上架后立马就能获得流量了,那么亚马逊上新品一般几天出单? 一、亚马逊上新品一般几天出单? 亚马逊上新品出单的时间因…

DispatcherTimer应用

DispatcherTimer 是 WPF 中用于执行定时任务的类,用于在指定的时间间隔内执行任务。它与 UI 线程的 Dispatcher 相关联,因此可以用来更新 UI 元素,而不必担心线程安全问题。 关键特性: 线程安全:DispatcherTimer 确保…

人工智能时代,想转型AI产品经理?这篇文章你不应该错过

前言 在这个日新月异的智能时代,人工智能(AI)已经从未来概念转变为推动各行各业发展的核心驱动力。作为连接技术与市场的桥梁,AI产品经理的角色愈发关键,他们不仅是技术的翻译者,更是创新的推动者。如果你…

Mintegral解析休闲游戏如何靠创意素材吸引玩家

核心玩法简单清晰、容易让人无限上头的休闲游戏,玩法机制一般比较明确、简单,如果要在短时间内吸引玩家注意,除了完整展示游戏流程以外,开发者需要在素材中设置更多亮点性的内容,如吸睛的剧情、爆炸性的视听效果等元素…

组件的注册和引用

在Vue中,开发者可以将页面中独立的、可重用的部分封装成组件,对组件的结构,样式和行为进行设置。组件是 Vue 的基本结构单元,组件之间可以相互引用。 一.注册组件 当在Vue项目中定义了一个新的组件后,要想在其他组件中…

Vue3_对接腾讯云COS_大文件分片上传和下载

目录 一、腾讯云后台配置 二、安装SDK 1.script 引入方式 2.webpack 引入方式 三、文件上传 1.new COS 实例 2.上传文件 四、文件下载 腾讯云官方文档: 腾讯云官方文档https://cloud.tencent.com/document/product/436/11459 一、腾讯云后台配置 1.登录 对…

[职场] 为什么不能加薪? #学习方法#知识分享#微信

为什么不能加薪? 不能加薪的根本原因,终于被我找到了! 朋友们!职场这个地方是个很神奇的世界,有些规则并不是你想象的那样。我们都希望能在这个世界里施展自己的才华,获得升职加薪的荣耀。然而&#xff0c…

seerfar丨OZON运营工具,OZON选品插件

随着全球电商市场的蓬勃发展,OZON作为俄罗斯及东欧地区的重要电商平台,吸引了众多中国商家的目光。然而,如何在OZON平台上脱颖而出,实现高效的商品运营,成为了众多商家亟待解决的问题。在这样的背景下,seer…

tailwindcss的@apply使用

tailwindcss的apply是把在html写的tailwindcss可以挪到style里面 简化页面的可读性 没写之前的 <section class"block-risk absolute flex flex-col items-center p-4 text-center left-0 text-white;" :style"{ top, left: 60px }"> </section…

浅析软件开发技术的发展历程与展望

随着信息技术的飞速发展&#xff0c;软件开发技术也在不断演进。本文旨在深入探讨软件开发技术的发展历程&#xff0c;并分析其未来的发展趋势和展望。 软件开发技术的发展历程 在回顾软件开发技术的发展历程时&#xff0c;我们不禁惊叹于这一领域的飞速进步。从早期的手工编写…

被拖欠6000万,代工大厂倒闭了····

6月7日消息&#xff0c;据综合媒体报道&#xff0c;电子烟代工大厂佳斯特电子&#xff08;东莞&#xff09;发布公告&#xff0c;将自6月3日起停止一切经营活动&#xff0c;开始自行清算工作。根据佳斯特电子科技&#xff08;东莞&#xff09;有限公司的通告&#xff0c;由于公…

pyqt6 任务栏不显示设置的icon

添加这段代码即可解决 import ctypes myappid mycompany.myproduct.subproduct.version ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)

TypeScript环境安装与VScode编辑器的使用

说明大背景环境&#xff0c;我用的是window10系统。 1.安装node.js 。 去官网下载安装包。 虽然我去的是官网&#xff0c;但是不知为何下载了个不知名的东西&#xff0c;后来又找了个链接才下载正确了。 实际上就是一个.msi的文件。我用的版本&#xff1a;node-v18.19.0-x6…