TCP三次握手与四次挥手详解

news2024/9/20 15:42:17

TCP三次握手(建立TCP连接):

建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.

第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数 据包发送给Server,Client进入SYN_SENT状态,等待Server确认

SYN:同步序列编号(Synchronize Sequence Numbers)

第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态

第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了

在这里插入图片描述

为什么需要三次握手,是为了解决下列的一个问题:

client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求于是就向client发出确认报文段同意建立连接

假设不采用三次握手,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用三次握手的办法可以防止上述现象发生

四次挥手(断开TCP连接)

四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发

1.第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送Client进入FIN_WAIT_1状态。

2.第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

3.第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态

4.第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1, Server进入CLOSED状态,完成四次挥手。
在这里插入图片描述
如果有大量的连接,每次在连接、关闭时都要三次握手,四次挥手,会很明显会造成性能低下,因此,

HTTP有一种叫做keep connection的机制,它可以在传输数据后仍然保持连接,当客户端再次获取数据时,直接使用刚刚空闲下的连接而无需再次握手

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

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

相关文章

GSN前瞻预处理

在数控加工等应用中,要求数控系统对机床进行平滑的控制,以防止较大的冲击影响零件的加工质量。 运动控制器的前瞻预处理功能可以根据用户的运动路径计算出平滑的速度规划,减少机床的冲击,从而提高加工精度。 下面用一个实例来说明…

一文了解Spring MVC(上)

目录 什么是Spring MVC 什么是MVC Spring MVC 和MVC的区别 怎么学Spring MVC Spring MVC的创建和连接 RequestMapping注解 获取参数 传递基础数据类型/包装类型(无注解) 添加RequestParam注解(使用在方法参数上) 传递自…

python——GIL锁详解

文章目录一、GIL全局解释器锁二、为什么会有GIL锁?三、多线程无法利用多核优势?计算密集型和IO密集型计算密集型——采用多进程计算密集型——采用多线程IO密集型——采用多进程IO密集型——采用多线程四、总结一、GIL全局解释器锁 1、GIL锁不是python的…

C语言 数据的存储

C语言 数据的存储一、数据与进制之间的关系1. 十进制与二进制之间的转换2. 二进制与十六进制之间的转换二、整型数据存储1. 原、反、补码2. 整型数据在内存中的存储3. 为什么整型数据存在内存中存储的是补码4. 有符号和无符号的数据类型有符号和无符号的存储范围猜想5. 关于 ch…

Java项目:SSH企业人力资源管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 企业人力资源管理系统,分为超级管理员与普通管理员两种角色,超级管理员可以对普通管理员进行添加、删除等操作; 超级管理…

【k8s】1、基础概念和架构及组件

文章目录一、kubernetes概述1、什么是kubernetes?2、应用程序部署方式的演变3、为什么要用kubernetes?二、kubernetes 特性三、Kubernetes集群架构与核心组件1、master组件1.1 kube-apiserver(中央枢纽)1.2 kube-controller-manag…

股价下跌18%后,满帮集团(YMM)的财务业绩正在加速放缓

来源:猛兽财经 作者:猛兽财经 市场与竞争 根据Beroe Advantage Procuremen的一份市场研究报告,2020年中国道路运输服务市场的规模估计为250亿美元。 这意味着这个行业近年来的复合年增长率为6.5%。 物流参与者往往集中在中国的西南和中南部地…

.NET跨平台框架选择之一 - Avalonia UI

1. Avalonia UI简介 Avalonia UI文档教程:https://docs.avaloniaui.net/docs/getting-started 随着跨平台越来越流行,.NET支持跨平台至今也有十几年的光景了(Mono开始)。 但是目前基于.NET的跨平台,大多数还是在使用B/S架构的跨平台上&…

数据分析面试重点

2022年10月求职季,疫情的影响,但是也挡不住各位小伙伴,找工作的热情。目前,数据分析行业大火,相信很多小伙伴都想去这一行业试试水。想要成功进入数据分析行业,就必须得通过数据分析面试,面试的…

计控实验(二)——积分分离PID控制实验

太原理工大学计算机控制技术实验之积分分离PID控制实验 积分分离PID控制实验实验原理实验内容实验结果思考题实验原理 上图是一个典型的PID 闭环控制系统方框图,其硬件电路原理及接线图可设计如下,图中画“○”的线需用户在实验中自行接好,对…

跟艾文学编程《Python基础》PyCharm 安装

作者:艾文,计算机硕士学位,企业内训讲师和金牌面试官,公司资深算法专家,现就职BAT一线大厂。 邮箱:1121025745qq.com 博客:https://edu.csdn.net/lecturer/894?spm1003.2001.3001.4144 内容&am…

[附源码]java毕业设计文具销售系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

6、子查询 、having、(not) exists、表中增加一列并补充数据、删除表中对应的数据-mysql

目录子查询一、需求分析与问题解决1、实际问题2、子查询的基本使用3、子查询的分类二、单行子查询1、单行比较操作符2、 代码示例3、HAVING 中的子查询4、CASE中的子查询5、 子查询中的空值问题6、 非法使用子查询三、多行子查询1、多行比较操作符2、代码示例3、空值问题四、 相…

《Flowable流程引擎从零到壹》Flowable流程引擎介绍和实战项目初始化流程引擎实例

14天学习训练营导师课程: 邓澎波《Flowable流程引擎-基础篇【2022版】》 邓澎波《Flowable流程引擎-高级篇【2022版】》 学习笔记《Flowable流程引擎从零到壹》回城传送 ❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。Java领域优质创…

mysql中的这些日志,你都知道吗?

在使用mysql的过程中,经常会听到mysql具有数据恢复能力,当我们在业务开发中误删了某些数据后,可以将数据库恢复到误删之前的状态。同时还具有故障恢复能力,当数据库所在的机器突然掉电停机后,mysql也可以保证数据一致性…

Java8 Stream 的核心秘密

小伙伴们好呀,我是 4ye,今天来分享下 Java8 Stream 的源码 核心回顾 stream 是一次性的,不是数据结构,不存储数据,不改变源数据.。API 分为终端和中间操作,中间操作是惰性的,碰到终端才去执行。…

python自动化测试

测试软件:pycharm 解释器版本:3.10.7 测试浏览器:谷歌 或 edge 谷歌web驱动下载地址:chromedriver.storage.googleapis.com/index.html edgeweb驱动下载地址:Microsoft Edge WebDriver - Microsoft Edge Developer 第一…

免费查题接口系统后台

免费查题接口系统后台 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台(点…

零基础自学javase黑马课程第十三天

零基础自学javase黑马课程第十三天 ✨欢迎关注🖱点赞🎀收藏⭐留言✒ 🔮本文由京与旧铺原创,csdn首发! 😘系列专栏:java学习 💻首发时间:🎞2022年11月7日&…

springboot视图渲染技术

目录 一、Freemarker简介及入门 二、Freemarker语法 1、取值 1.1默认值 1.2 对null值进行判断 2、条件 3、循环 4、include 5、 局部变量(assign)/全局变量(global) 一、Freemarker简介及入门 学习网址:什么是 FreeMarker? - FreeMarker 中文官方参考手册 …