TCP的三握四挥

news2024/9/27 15:22:23

本文是向大家介绍tcp的三次握手四次挥手的全过程,能够让我们更熟悉面向连接的传输层控制协议的原理,保证了数据传输的稳定性和可靠性。


如果我们把网络体系按照OSI模型划分,那么不论是从上往下还是从下往上数,处于最中间的都是传输层,简直就是夹心面包中间的精华,也就是说传输层是一个承上启下的作用,传输层主要就干一件事,建立端到端的连接。

什么是端到端?

比如我们的客户端到服务端就是端到端,在进一步了解握手和挥手之前,我们先来了解一下电影《中国机长》

飞机有自己实时的飞行地址,空管局管制中心有自己的固定地址,正如客户端和服务端都有各自的IP地址,飞机上如果有什么情况就可以直接和管制中心联系,管制中心会有特定的工作人员对这辆飞机进行答复,飞机和管制中心有各自的地址,第一机长和第二机长有各自的端口号,管制中心的工作人员有各自的端口号,这样就能进行特定的联系了,就如同套接字socket是握手之前的核心条件。


什么是三次握手?

现在飞机遇到了故障,机长和管制中心汇报故障,申请一下高度,这里其实就是三次握手了,因为飞机在飞行过程中需要调整高度或者返航等操作需要得到同意才能执行,如果在没有得到同意飞机直接调整高度那么就很容易发生撞机。在计算机的世界也是一样的道理,在使用TCP连接的时候需要进行三次握手。但是怎么样的握手才能判断出哪些请求或者哪些响应需要丢弃,这才是握手机制的核心。

TCP报文里有SYN,ACk和FIN等标识,如果设置1就是开启这些标识,设置0就是关闭这些标识,首先在客户端发送TCP报文的时候,会把SYN开启,SYN原意是同步的意思,客户端表示想和服务端进行数据的同步,三次握手以后,客户端就可以和服务端互相发送信息,毕竟TCP是全双工的,所以可以互发信息,只是把SYN开启是不够的,报文里面还有一个重要的字段Sequence序号。

为什么还需要序号呢?

因为应用程序可能会连续发送多个序号给服务器,保证通道的唯一性,假设初始序号为8633,当服务端收到SYN以后就需要作出响应了,这时候服务器会在TCP报文中把SYN和ACK开启,ACK表示确认的意思,合起来就是确认同步的意思,那么服务器也生成自己的序号,假设序号是303,光序号还不够,还需要确认号,这个确认号就根据对方的序号+1得到,这样客户端在收到号码后-1就知道是不是自己发送的TCP报文了,最后客户端还需要确认,因为不确认的话,服务器不知道自己发送出去的“确认同步”是否被接收,于是必须再发送一次TCP报文来使连接正式建立,这里客户端会把ACK开启,这里的序号就用对方的确认号生成,并且在对方的序号+1,也就是303+1,那么问题又来了,如果每一次发送的SYN,服务器都要记住其序号,并且新生成自己需要记住的序号,那服务器就需要非常多的资源,如果黑客借此不断发送SYN又不进行下一步,就会导致服务器崩溃,就是典型的DDos攻击,因此服务器干脆不保存自己的序号,而是根据服务器的IP地址和端口号等私有信息进行算法运算得到序号。

过程

  • 1握:客户端发送 syn 包给服务器端,进入 SUNC_SENT 状态

  • 2握:服务器端发送 syn+ack包,同时也发syn包,从listen到syn-rcvd状态

  • 3握:客户端接收来着服务端的syn+ack包,向服务器端发送确认包ack包


握手之后的下个步骤是什么呢?

分手吗?

握手之后就建立了连接,这时候客户端就可以发送HTTP请求了。

然后服务端响应内容,假设现在内容都交流完毕了,现在各自就会发送关闭连接的要求了,这个过程就是我们说的四次挥手,注意客户端和服务端都能主动发起关闭。


什么是四次挥手?

假设这里客户端主动发起关闭要求,这时候客户端会在报文里开启FIN和ACK两个控制位,FIN就是结束的意思,这里就是确认结束会话,因为在发送HTTP请求和响应的时候,序号和确认后不断递增,这里就不用固定数字来表示序号和确认号来,其他的套路和前面的一样,等服务端发送完数据以后会再发送一个FIN+ACK来确认,此时序号和确认号不需要改变,因为没有一来一回,只是多了一个控制位FIN来确认结果,最后客户端得到结果发送ACK确认,此时自己的序号需要用对方的确认号,自己的确认号用对方的序号+1,其实中间的ACK和FIN+ACK两步就可以证明,为什么要四次挥手呢?因为还可能存在未发送完毕的数据。

过程

  • 第一次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态。

  • 第二次挥手:服务端收到FIN后,发送一个ACK给客户端,服务端进入CLOSE_WAIT状态。

  • 第三次挥手: Server发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态。

  • 第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,发送ACK给服务端,服务端进入CLOSED状态,完成四次握手。

那为什么连接的时候是三次握手,关闭的时候却是四次握手?

  • 因为当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。

  • 但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”。

  • 只有等到我服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

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

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

相关文章

复赛名单公布!2022隐私计算HACKATHON大赛火热进行中!

开放隐私计算开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神,专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播,愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号O…

Python+Qt生日提醒

PythonQt生日提醒如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<PythonQt生日提醒>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应用推荐首选。文章目…

在k8s集群部署ELK

使用kubeadm或者其他方式部署一套k8s集群。 在k8s集群创建一个namespace&#xff1a;halashow 2 ELK部署架构 3.1 准备资源配置清单 Deployment中存在一个es的业务容器&#xff0c;和一个init容器&#xff0c;init容器主要是配置vm.max_map_count262144。 service暴露了9200…

MSP430F2132IRHBR功能框图TPS259824LNRGER电路保护和电源管理解决方案芯片

概述&#xff1a;MSP430F21x2 16位超低功耗微控制器 (MCU) 是MSP430系列微控制器的一部分。这些MCU采用一种架构&#xff0c;加上5种低功耗模式&#xff0c;能在便携式测量应用中延长电池的使用寿命。这些器件具有一个强大的16位 RISC CPU、16位寄存器和用于获得最大编码效率的…

Springboot整合mybatis并接收前端数据

mybatis之前记录过了。本以为可以快乐的开发项目&#xff0c;但是没想到在springboot中使用mybatis还不一样&#xff0c;那么我就在这里记录一下。 请注意&#xff0c;sprngboot中使用的mybatis是专门为springboot设计的&#xff0c;单独引用依赖的话需要在springboot找到如下…

Java性能分析

0、问题代码&#xff1a; 代码问题其实很明显&#xff0c;但是这里主要是为了练习如何使用工具进行分析 所以最好先不要看代码&#xff0c;假装不知道程序逻辑&#xff0c;而是先通过工具去分析&#xff0c;再结合分析数据去看代码&#xff0c;从而推出问题点在哪 import jav…

代码随想录NO50 |动态规划_leetcode 392.判断子序列 115.不同的子序列

动态规划_leetcode 392.判断子序列 115.不同的子序列今天继续子序列&#xff01; 392.判断子序列 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j] 表示以下标i-1为结尾的字符串s&#xff0c;和以下标j-1为结尾的字符串t&#xff0c;相同子序列的长度为dp…

靠谱的动漫绘画培训班国内有哪些

动漫绘画培训班有哪些&#xff0c;今天给大家带来的是国内专业的动漫培训机构排名&#xff0c;这5个动漫培训机构&#xff0c;相信你一定都知道&#xff0c;快来看看吧&#xff01; 一&#xff1a;动漫绘画培训机构排名 1、轻微课 轻微课是国内人气很高的板绘学习平台&#…

2.23作业ccc

检测中断到来时&#xff0c;让LED灯状态取反&#xff0c;并且在串口工具上打印一句话例如&#xff1a;当按键1按下之后&#xff0c;让LED1状态取反&#xff0c;并打印“LED1 down”当按键2按下之后&#xff0c;让LED2状态取反&#xff0c;并打印“LED2 down”当按键3按下之后&a…

vue2安装ant-design UI报错 ERR! peer vue@“>=3.2.0“ from ant-design-vue@3.2.15

npm install ant-design-vue --save 安装报错&#xff0c;使用的是vue2&#xff0c;如图&#xff0c; npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: default0.1.0 npm ERR! Found: vue2.7.14 npm ERR! v…

13.Jenkins集成sonarqube

Jenkins集成sonarqube1.jenkins集成sonarqube2.jenkins以maven的方式集成sonarqube scanner报错1报错21.jenkins集成sonarqube 1.在jenkins插件管理中安装sonarqube scanner 2.jenkins要知道sonarqube服务端是谁&#xff0c;需要配置&#xff08;系统管理–系统配置–sonarq…

Knife4j文档请求异常错误

一、问题描述 springboot项目配置Knife4j后&#xff0c;访问地址http://xxxx/doc.html出现错误&#xff1a;Knife4j文档请求异常错误。 二、解决问题 使用google浏览器F12查看控制台后&#xff0c;发现有错误提示&#xff1a; 大致意思是某部分字段不能被有效解析为json。在…

因果推断方法(一)合成控制

知道的跳过下面的简单介绍&#xff1a; 就是比如广告主投放了10w元&#xff0c;那么他的收益怎么算&#xff1f;哪些订单就是广告带来的&#xff0c;哪些是不放广告也会购买&#xff1f; 合成控制法是目前我实际应用发现最好用的。置信度高&#xff0c;且容易理解。 简单讲下思…

iOS_苹果内购详细步骤

iOS苹果内购详细步骤iOS开发支付的两种方式1 Apple Pay 调取外部支付&#xff0c;例如支付宝、微信、银联等2 苹果内购IAP&#xff08;In-App Purchase&#xff09;1 IAP规则详解1.1 适用范围1.2 IAP类型1.2.1 Consumable products &#xff08;消耗型商品&#xff09;1.2.2 N…

python和C++代码实现图片九宫格切图程序(附VS2015配置Opencv教程)

1、python代码实现图片分割成九宫格 需要包含的库&#xff0c;没有下载安装的&#xff0c;需要自己安装哦。 实现原理很简单&#xff0c;就是用PIL库不断画小区域&#xff0c;切下来存储成新的小图片。 假设每一个格子的宽和高分别是w、h&#xff0c;那么第row行&#xff08…

【Maching Learning】深度学习常用评价指标(分类+回归)

深度学习分类、回归问题评价指标一、分类评价指标1.1混淆矩阵1.2准确率&#xff08;Accuracy&#xff09;1.3精确率&#xff08;Precision&#xff09;1.4召回率&#xff08;Recall&#xff09;1.5 F1{F}_{1}F1​分数&#xff08;F-Score&#xff0c;调和平均&#xff09;和 Fβ…

vue实现预览、下载和打印后端返回的pdf文件流

需求&#xff1a;后端返回pdf文件流&#xff0c;前端能够预览、下载打印。 后端返回的文件流部分截图 需要实现的效果图 前面第1步只是为了展示后台返回数据流&#xff0c;完成功能的时候&#xff0c;不需要调用接口的&#xff0c;只需要利用调用接口的url。 实现步骤&am…

Aspose.Imaging for .NET V23

Aspose.Imaging for .NET V23 Aspose.Imaging for.NET是帮助开发人员在自己的应用程序中创建、编辑、绘制或转换图像的类库。它包括在不安装Photoshop或任何其他图像编辑器的情况下以Adobe Photoshop原生格式保存的功能。Aspose.Imaging for.NET是一个灵活稳定的API&#xff0c…

frp内网穿透容器化快速部署

关于frp frp可以作为一个流量代理代发&#xff0c;可以将公网的流量转发到内网访问&#xff0c;从而实现访问公网即可访问到内网。 使用例子&#xff1a;两个不同局域网之间ssh访问 GitHub官网见&#xff1a;frp 详细使用见&#xff1a;frp详细使用 机器选择 为便于快速部署…

(考研湖科大教书匠计算机网络)第六章应用层-第六节:电子邮件

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;电子邮件&#xff08;1&#xff09;概述&#xff08;2&#xff09;举例二&#xff1a;简单邮件传送协议SMTP&#xff08;1&#xff09;SMTP基本工作…