TCP协议中的三次握手

news2025/1/13 5:50:42
WHAT:什么是三次握手?

建立TCP需要三次握手才能建立,而断开连接则需要四次挥手。

TCP链接是全双工的, 因此每个方向上都必须要关闭

三次握手一定是B向S发起,但是四次挥手可以是B向S也可以是S向B发起的

比如:如果客户端长时间没有发出相应,服务器端也可能主动发起挥手

WHY:为什么需要进行三次握手?

理论上建立传输连接只需一个请求和一个响应。但是,实际网络通信可能导致请求或响应丢失,可采用超时重传解决此问题,即请求或响应的丢失会造成定时器超时溢出,客户端将被迫再次发起连接请求,通过重传连接请求来建立连接。但这又有可能导致重复连接的问题。为避免这些问题,确保传输的可靠性,在建立TCP连接时采用三次握手(Three-way Handshaking,又译三向握手)方法。该方法要求对所有报文段进行编号,每次建立连接时都产生一个新的初始序列号。

 

HOW:三次握手连接的过程

(1)客户端(作为源主机)通过向服务器(作为目的主机)发送TCP连接请求(又称SYN段),其中标志SYN=1, ACK=0;序列号为客户端初始序列号(简称ISN);目的端口号为所请求的服务对应的端口;还包括最大段长度(MSS)选项。这个SYN段不携带任何数据,但是它消耗一个序列号。这一步客户端执行主动打开(Active Open)。

(2)服务器在指定的端口等待连接,收到TCP连接请求后,将回应一个TCP连接应答(又称SYN/ACK段),其中标志SYN=1, ACK=1;序列号为服务器初始序列号;确认号为客户端初始序列号加1;目的端口号为客户端的源端口号。这个SYN/ACK段不携带数据,但消耗一个序列号。这一步服务器执行被动打开(Passive Open)。

(3)客户端再向服务器发送一个TCP连接确认报文(又称ACK段),其中标志SYN=0, ACK=1;序列号为客户端初始序列号加1;确认号为服务器的初始序列号加1。一般来说,这个ACK段不携带数据,因而不消耗序列号。某些实现中,该段可以携带客户端的第1个数据块,此时必须有一个新的序列号来表示数据中的第1个字节的编号。

经过上述3次握手后,TCP连接正式建立。双方都置ACK标志,交换并确认了对方的初始序列号,可以通过连接互相传输数据。

 

三次握手如何区分?

主要通过SYN和ACK区分,第一次只有SYN,第二次包含SYN和ACK,第三次只有ACK

 

 

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

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

相关文章

【中仕公考怎么样】公务员行测考什么内容?

行政职业能力测验,也就是我们常说的“行测”。是公务员考试笔试环节中的核心科目,占据总成绩的50%。主要考察考生在言语理解与表达、数量关系、判断推理、资料分析和常识判断方面的能力。 国考行测分为副省级、地市级以及行政执法类,题目数量…

MyBatis入门(上)---初识

在应⽤分层学习时, 我们了解到web应⽤程序⼀般分为三层,即:Controller、Service、Dao . 之前的案例中,请求流程如下: 浏览器发起请求, 先请求Controller, Controller接收到请求之后, 调⽤ Service进⾏业务逻辑处理, Service再调⽤Dao, 但是Da…

[C++]set和map的介绍及使用

关于set和map的接口函数部分&#xff0c;只重点介绍一些相较于别的容器有特殊地方的接口&#xff0c;set和map的接口可以触类旁通。 一、概念 &#xff08;一&#xff09;、关联式容器 关联式容器存储的元素是一个个的键值对<key,value>。通过键&#xff08;key&#x…

多线程中常见问题

1、为什么不建议使用Executors来创建线程池&#xff1f; 除开有可能造成的OOM外&#xff0c;使用Executors来创建线程池也不能自定义线程的名字&#xff0c;不利于排查问题&#xff0c;所以建议是直接使用ThreadPoolExecutor来定义线程池&#xff0c;这样可以灵活控制 2、线程…

队列操作(深入理解FreeRTOS队列之队列实战)

文章目录 一、队列的操作二、学习总结 在FreeRTOS中&#xff0c;队列的本质是环形缓冲区。 一、队列的操作 1、创建队列 2、写队列 3、读队列 详细可看此篇博客&#xff1a;FreeRTOS——队列&#xff08;基于百问网DshanMCU-F103实现挡球板游戏改造&#xff09;-CSDN博客 基…

css之grid布局(网格布局)

简述&#xff1a; 网格布局顾名思义就是将元素呈现为网状的整齐布局 简单使用&#xff1a; <div><div class"test"><div class"item">1</div><div class"item">2</div><div class"item">…

开发一个免费的图表网站 Free Charts

Free Charts 项目背景 最近在使用图表网站时&#xff0c;发现许多都需要收费&#xff0c;因此萌生了自己做一个免费图表网站的想法。 不仅给自己做一个&#xff0c;也准备给大家做一个&#xff01; 项目历程 经过两三周的努力&#xff0c;完成了一个图表网站。以下是技术栈的…

Tomcat热加载和热部署

2. Tomcat热加载和热部署 在项目开发过程中&#xff0c;经常要改动Java/JSP 文件&#xff0c;但是又不想重新启动Tomcat&#xff0c;有两种方式:热加载和热部署。热部署表示重新部署应⽤&#xff0c;它的执行主体是Host。 热加载表示重新加载class&#xff0c;它的执行主体是C…

视频文件太大怎么变小?教你学会快速压缩

视频文件太大怎么变小&#xff1f;在数字时代&#xff0c;视频已成为我们日常生活中不可或缺的一部分&#xff0c;无论是工作汇报、学习资料、还是休闲娱乐&#xff0c;视频都扮演着重要角色。但高清视频往往占用了大量的存储空间&#xff0c;还可能在分享或上传时遇到诸多不便…

语雀:高效记录与整理编程学习笔记的最佳实践

目录 语雀&#xff1a;高效记录与整理编程学习笔记的最佳实践 一、编程学习笔记的要求与目的 二、记录编程学习笔记的目的 三、如何高效地记录与整理编程学习笔记 四、推荐平台&#xff1a;语雀 1、语雀的优势&#xff1a; 2、如何使用语雀整理编程学习笔记&#xff1a;…

【大模型系列篇】人工智能与智能计算的发展

&#x1f525;&#x1f525;&#x1f525; 来自 中国工程院院士、中国科学院计算技术研究所研究员 孙凝晖 第十四届全国人大常委会专题讲座上的讲稿《人工智能与智能计算的发展》 “把新一代人工智能作为推动科技跨越发展、 产业优化升级、生产力整体跃升的驱动力量&#xff0c…

项目启动端口报冲突如何处理?

你是否在Angular项目启动的时候试过端口报冲突呢&#xff1f;那么要如何解决呢&#xff1f;vue2又如何处理呢&#xff1f; 一、Angular冲突原因 Angular CLI 默认使用 4200 端口&#xff0c;如果这个端口已被占用&#xff08;比如启动了两次&#xff0c;或者本地可能有别的项目…

用IDEA创建一个SpringBoot项目和用官网创建一共SpringBoot项目导入IDEA(SpringBoot 学1)

一、用IDEA创建一个SpringBoot项目&#xff08;其实就说idea把网址集成到了软件上&#xff09; 1、选择java initializr创建项目框架 2、到下面这一步就和Maven项目的格式差不多&#xff0c;把项目名这些写上就行&#xff0c;选择对应的java版本 3、选择SpringBoot版本和勾选S…

描述一下SIFT特征提取算法的工作原理

SIFT&#xff08;Scale-Invariant Feature Transform&#xff0c;尺度不变特征变换&#xff09;是由 David Lowe 于 1999 年提出的一种特征提取算法&#xff0c;用于检测和描述图像中的局部特征点。SIFT 特征具有旋转、尺度和光照不变性&#xff0c;因此在各种计算机视觉任务中…

深入浅出链表

目录 1.链表的基本概念及结构 1.1基本概念 1.2结构 2.链表的分类 3.链表的实现&#xff08;循环链表增删查改实现&#xff09; 1.动态申请节点&#xff08;结点&#xff09;​编辑 2.单链表打印 3.单链表尾插 4.单链表头插 5.单链表尾删 6.单链表头删 7.单链表查找 …

瑞吉外卖-登录时报错:接口404异常

一、错误描述 出现“系统接口404异常”的弹窗&#xff0c;同时一直显示登录中&#xff0c;而无法跳转到后台页面。 二、解决方法 1. 检查浏览器的网址 确保为localhost:8080/backend/page/login/login.html&#xff0c;而不是idea自动生成的&#xff0c;修改过来即可。 2.确…

CSS文字描边

// 方法3 const p document.querySelector("p")p.dataset.content p.textContentmixin text-stroke($color: #fff, $width: 1px) {text-shadow: 0 -#{$width} #{$color}, #{$width} 0 #{$color},0 #{$width} #{$color}, -#{$width} 0 #{$color},-#{$width} -#{$wid…

Linux软件编程---数据库

目录 一、数据库 1.1.概念 1.2.类型 1.关系型数据库 2.非关系型数据库 1.3.SQL语言 1.4.如何在Linux安装sqlite数据库 1.确保虚拟机可以上网 2.配置apt-get工具集合 3.安装sqlite数据库 1.5.sqlite3 1.创建数据库 2.查看数据表 3.退出数据库 4.SQL语句 二、数…

XShell给Ubuntu虚拟机安装MySQL

准备工作&#xff1a;已经装好了虚拟机&#xff0c;并且已经下载了Linux系统&#xff0c;如 Linux Mint &#xff0c; Ubuntu 等&#xff0c;今天以目前较为流行的Ubuntu为示例 1.为什么选择Linux&#xff1f; 在现代软件开发中&#xff0c;Linux系统已成为开发和部署的首选平…

面试中被问到各个测试阶段的具体工作,如何详细描述

软件测试工程师面试的时候有一个问题也是一定会被问到的&#xff0c;那就是&#xff1a;你们的软件项目都会经过哪些测试阶段呢&#xff1f;每个阶段测试人员都做什么&#xff1f;接下来&#xff0c;凯哥就为各位小伙伴详细的说一说&#xff1a; 首先&#xff0c;一般的软件测…