TCP三挥四握

news2024/9/20 21:31:19

TCP三挥四握

TCP最关键的三个步骤:建立连接、数据传输、释放连接,这里的三次握手实现的是服务端和客户端建立连接;四次握手实现的是服务端和客户端释放连接。
三次握手: 建立数据连接
TCP连接需要三次握手的原因:
三次握手为了确保连接的可靠性和正确性,这样可以让双方都能够确认彼此的身份和能力,以便于在数据传输过程中建立可靠的链接。(本质上来说就是为了解决网络信道不可靠的问题)
在这里插入图片描述
三次握手一定是三次吗?为什么?
三次握手不一定是三次,可能是更多次,但绝对不会是两次或一次。三次握手是指在建立TCP连接时,客户端和服务器之间进行的一系列通信步骤。这个过程通常包括三个阶段:

  1. 客户端向服务器发送一个连接请求报文段(SYN)
  2. 服务器端收到请求后,回复一个确认报文段(SYN-ACK)
  3. 客户端再次回复一个确认报文段(ACK)

这种情况下,三次握手确保了客户端和服务器之间的双向通信,但是在某些特殊情况下,可能会发生额外的握手步骤。
例如说,如果客户端发送的第一个SYN报文段丢失,服务器将无法收到连接请求。这种情况下,客户端将重新发送SYN报文段,这将导致四次握手(第一次握手失败,重新开始三次握手)
此外,还可能发生网络延迟或丢包的情况,导致握手过程中的报文段丢失或重传,从而导致握手的次数超过三次

为什么是三次握手而不是两次握手呢?换句话说,为什么不在服务端回复完SYN+ACK之后就建立连接呢?
这里我们假设采用两次握手来建立连接,客户端向服务端发送一个SYN包来请求建立连接,因为某些未知原因并没有到达服务器,在中间某个网络节点产生了滞留。此时,为了建立连接客户端会重发SYN包,这次数据包正常送达,服务器回复SYN+ACK之后建立起了连接,但是第一包数据阻塞的网络节点突然恢复,第一包SYN包有送达到服务器,这时服务器端会误认为是客户端又发起的一个新的连接,服务端认为是两个连接,而客户端认为是一个连接,这就造成了状态不一致。
如果在三次握手的情况下,服务端收不到最后的ACK包就自然不会认为连接建立成功。

**四次挥手:**释放连接
在这里插入图片描述
四次挥手是指在TCP连接中,终止连接时需要进行四个步骤。这四个步骤分别是:
4. 发送方发送一个FIN报文,表示数据发送完毕。(发送方发送FIN报文仅代表自己不会再发送数据,并不代表自己不会继续接收数据)
5. 接收方收到FIN报文后,发送一个ACK报文,表示确认收到FIN报文。
6. 接收方发送一个FIN报文,表示自己也没有数据要发送了,同意关闭连接的请求
7. 发送方收到FIN报文后,发送一个ACK报文,表示确认收到FIN报文。
这四个步骤的目的是为了确保双方都不会再进行数据传输并同意关闭连接。因此四次挥手是必要的,不能缺少任何一步。

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

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

相关文章

【Free】基于主从博弈的主动配电网阻塞管理

目录 1 主要内容 程序亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 《基于主从博弈的主动配电网阻塞管理》文献介绍:主要采用一种配电网节点边际电价统一出清的主从博弈双层调度框架。上层框架解决用户在负荷聚合商引导下的用电成本最小化问题&#xff0…

力扣题库刷题笔记18--四数之和

1、题目如下: 2、个人Python代码实现: 首先看到这题就会想到两种方式,一是四层循环暴力破解,二就是基于前面的三数之和外面加加一层嵌套。 先看一下暴力破解: 这里可以看到,当数据量足够大时,依…

Openresty原理概念篇(十)为什么 lua-resty-core 性能更高一些

一 为什么 lua-resty-core 性能更高一些 ① 回顾 lua-resty-core和lua-nginx-module各自都有哪些API? --> 看下面两个仓库的文档 lua-nginx-module lua-resty-core 下面:一起看下Lua C API和FFI 的实现有何不同之处,这样可以对它们的性能有个直观认识…

14. python从入门到精通——GUI编程

目录 常用的GUI框架 wxPython:比较常用 PyQt6:比较常用 Kivy Flexx Tkinter 安装PyQt5 要开发PyQt5程序需要安装三个模块: 安装命令: 安装 安装命令: window安装: PyCharm软件安装&#xff1a…

Android跳转具体应用权限管理,三种方式

背景:Android越来越安全合规,在应用里,需要给用户所有可选择和取消的明确方式。 比如:设置了权限,也要给用户关闭权限的入口。被要求在应用的设置里,提供权限管理入口。 解决方式有三: 方式一…

ansible实训-Day2(ansible基本问题及部署安装)

一、前言 该篇是对ansible实训第二天内容的归纳总结,主要包括ansible的一些基本问题以及ansible的部署安装。 二、理论部分 Q1:什么是ansible Ansible是一种自动化IT工具,它可以帮助管理和自动化IT基础架构。使用Ansible,管理员…

神仙级编程神器,吹爆!

Visual Studio 编程领域公认的“最强IDE”,Visual Studio是目前最流行的Windows平台应用程序的集成开发环境,提供了高级开发工具、调试功能、数据库功能和创新功能,帮助在各种平台上快速创建当前最先进的应用程序,开发新的程序。 …

界面控件DevExpress ASP.NET中文 - 如何自定义编辑表单运行时布局?

在DevExpress ASP.NET控件v19.2版本中就针对ASP. NET WebForms和MVC平台的ASP. NET GridView和CardView控件添加了一个主要增强功能。 DevExpress ASP.NET v23.1正式版下载(Q技术交流:523159565) 当您使用预定义的或 自定义的编辑表单时,经…

网易兑换礼包码分析

🍋前言 由于C站版权太多,所有的爬虫相关均为记录,不做深入! 接到了一个项目大概是电商老板想弄一个自动化工具,方便自己处理买家买的兑换码,一个一个的兑换有点累人,代码写到一半才发现由于自己的原因分析错了,刚刚开始我以为他的验证码是在html上的,就像这样 <…

SpringBoot02:运行原理初探

目录 一、运行原理探究 1、pom.xml文件 1.1、父依赖 1.2、启动器Spring-boot-starter 2、主启动类 2.1、默认的主启动类&#xff1a; 2.2、分析主启动类注解&#xff1a;SpringBootApplication 1、Target(ElementType.TYPE) 2、Retention(RetentionPolicy.RUNTIME) 3…

【C语言初阶(3)】循环语句:for 循环

文章目录 1. 语法结构2. for 语句的执行流程3. for 循环中的 break 和 continue3.1 for 循环中的 break3.2 for 循环中的 continue 4. for 循环语句的循环控制变量5. for 循环的变种5.1 for( ; ; )5.2. for 循环的嵌套5.3 使用多个变量控制循环 6. for 循环笔试题 1. 语法结构 …

【读书笔记】《数据结构C语言版》

目录 第一章 线性表 第二章 栈和队列 第三章 字符串 第四章 广义表 第五章 树 第六章 图 第七章 查找 第八章 内排序 第一章 线性表 一个线性表是n个数据元素的优先序列线性表可分为顺序存储结构&#xff08;数组&#xff09;和链式存储结构&#xff08;链表&#xff…

安科瑞WHD智能型温湿度控制器

安科瑞WHD智能型温湿度控制器 安科瑞 崔丽洁

前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码

前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码&#xff0c; 请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13207 效果图如下&#xff1a; 实现代码如下: # cc-codeDialog #### 使用方法 使用方法 <!-- show:是…

【uniapp】uniapp反向代理解决跨域问题

背景介绍 前段时间&#xff0c;在拿uniapp开发的时候&#xff0c;出现了跨域问题&#xff0c;按理说跨域应该由后端解决&#xff0c;但既然咱前端可以上&#xff0c;我想就上了&#xff08;顺手装个13&#xff09; 什么是跨域 出于浏览器的同源策略&#xff0c;在请求时&…

React 简单实现 v-if和v-show的元素控制效果

react中并没有直接的想模板引擎那样的命令可以直接控制元素展示 但是 我们了解了 v-if和v-show之后 还是大有文章的 我们在 项目的 src下创建 components 文件夹 创建dom.jsx 编写代码如下 import React from "react" export default class dom extends React.Comp…

Ubuntu查看显卡信息

查看显卡信息&#xff0c;终端输入 lspci | grep VGA 输出结果 0000:65:00.0 VGA compatible controller: NVIDIA Corporation Device 24b0 (rev a1) 发现是十六进制码&#xff0c;进入网址PCI Devices查询&#xff0c;输入 24b0 并点击 Jump&#xff0c;得到结果 显卡型号…

Inline Assembly 内联汇编总结

The language used for inline assembly in Solidity is called Yul. 在solidity中&#xff0c;用于写内联汇编的语言是Yul. Inline assembly is a way to access the Ethereum Virtual Machine at a low level. This bypasses several important safety features and checks …

中国信通院联合腾讯安全发布《数据安全治理与实践白皮书》

6月26日&#xff0c;由中国通信标准化协会和中国信息通信研究院联合主办的“2023大数据产业发展大会”在北京启幕&#xff0c;大会发布了多项中国信息通信研究院及相关机构在数智化领域最新研究和实践成果。 腾讯云安全总经理李滨出席了数据安全高质量发展论坛&#xff0c;分享…