【Java】TCP的三次握手和四次挥手

news/2024/5/9 19:25:08/文章来源:https://blog.csdn.net/qq_63474430/article/details/128960429

三次握手

TCP三次握手是一个经典的面试题,它指的是TCP在传递数据之前需要进行三次交互才能正式建立连接,并进行数据传递。(客户端主动发起的)TCP之所以需要三次握手是因为TCP双方都是全双工的
什么是全双工?
TCP任何一段既是发送数据方,又是接收数据方。因此就要求TCP双方既要保证自己的发送能力,又要保证自己的接收能力。这就好像打电话的过程:

  1. 我:喂!可以听到吗?
  2. 对方:可以听到,你能听到我说话吗?
  3. 我:能听到,才开始说事情

TCP的三次握手也是同样的道理,每次握手证明的能力详情如下:
在这里插入图片描述

三次握手的流程

  1. 客户端发送一个SYN给服务器,表示希望建立连接
  2. 服务器接收到消息之后,返回一个SYN和ACK(确认应答)给客户端
  3. 客户端收到SYN报文之后返回一个ACK报文

在这里插入图片描述
问题:为什么是三次握手,不能是四次或者两次?

四次?可以但是没有必要,分开传输降低效率,不如合在一起
两次?不行,意味着缺少最后一次此时客户端这边关于发送接收能力正常的情况是完整的,但是服务器这边是残缺的。服务器不知道自己的发送能力是否OK,也不知道客户端的接收能力怎么样。就像下面这张图:
在这里插入图片描述

四次挥手

建立一个连接需要三次握手,而终止一个连接要经过四次挥手(也有将四次挥手叫做四次握手的)。这由TCP的半关闭(half-close)造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。
在这里插入图片描述

四次挥手可能值客户端主动发起,也可能是服务器主动发起,中间不能合并主要原因是:
B发送ACK和发送FIN的时机是不同的

四次挥手中B给A发送的ACK是内核负责的,但是B给A发送的FIN是用户代码负责。(B中的代代码调用了关闭方法,才会触发FIN)。收到FIN内核立即返回ACK如果两者之间时间差比较大就不能合并了。如果时间差比较小,可能合并

认识两个重要的状态

  1. CLOSE_WAIT:四次挥手两次之后的状态,这个状态就是在等待代码当中调用socket.close方法,来进行后续的挥手过程!正常情况下一个服务器上不应该存在大量的CLOST_WAIT状态,如果大量存在大概率是代码的bug,关闭方法没有被执行到
  2. TIME_WAIT:谁主动发起FIN,谁就进入该状态。起到的效果就是最后一次ACK提供重传的机会。表面看起来A发送ACK之后就没有A的事情了,按理来说A应该销毁释放资源。但是并没有直接释放而是进入TIMT_WAIT状态。该状态等待一段时间之后,再来释放资源。等这一段时间是为了防止最后一个ACK丢包。如果最后一次ACK丢包,就意味着B过一会就要重传FIN。这也正是四次挥手需要等待2MSL的原因

总结

TCP需要三次握手,是因为双方都是全双工的,所以要经历三次握手才能够真正建立连接如果是两次的话,不能证明服务器的发送能力和客户端的接收能力。而需要四次挥手,是TCP的半关闭状态造成的挥手过程中会造成两个重要的状态。

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

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

相关文章

手把手教你将Eureka升级Nacos注册中心

由于原有SpringCloud体系版本比较老,最初的注册中心使用的Eureka后期官方无升级方案,配置中心无法在线管理配置,还有实时上下线的问题,因此需要将原有系统的Eureka服务升级Nacos注册心服务。原有版本SpringBoot1.5.15、SpringClou…

C#【必备技能篇】Winform跨线程更新进度条的实例

文章目录实例一:【方便理解,常用!】源码:运行效果:实例二:【重在理解代码本身】源码:运行效果:参考:实例一:【方便理解,常用!】 跨线…

独立图片服务器有什么突出之处

服务器是网络中非常重要的设施,承载着不同流量的访问,这就要求服务器具有快速的吞吐量、高稳定性和高可靠性。独立图片服务器作为独立服务器的衍生品,在数据利用方面的应用可以为企业在数据处理和分析方面带来一场革命。本文就将介绍独立图片…

Cadence OrCAD 16.6 原理图导出带标签pdf(免费软件版)

Cadence OrCAD 16.6原理图导出带标签pdf(免费软件版) Cadence OrCAD 16.6 导出有标签的原理图,页面导航、跨页符、元件封装等,更方便阅读。找了一些可用的免费软件。 安装软件 系统win10 22H2,OrCAD SPB 16.6 根据…

你评论,我赠书~【哈士奇赠书 - 13期】-〖Python程序设计-编程基础、Web开发及数据分析〗参与评论,即可有机获得

大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬 &#x1f4e…

【手写 Vuex 源码】第一篇 - Vuex 的基本使用

一,前言 本篇开始,进入 vuex 源码学习,本篇主要介绍一下内容: 创建 vuex 源码项目;介绍 vuex 的基本使用; 二,创建 vuex 源码项目 1,使用 vue-cli 创建 vue2.x 脚手架 vue creat…

OpenSergo Spring Cloud Alibaba 带来的服务治理能力

作者:十眠、牧思 Spring Cloud 应用为何需要服务治理 随着微服务技术的发展,微服务(MicroServices) 的概念早已深入人心,越来越多的公司开始使用微服务架构来开发业务应用。 如果采用得当,微服务架构可以带来非常大的优势。微服…

linux 学习(持续更新)

一:初识linux 新装操作环境: mac intel电脑 CentOS系统版本:CentOS-8.1.1911 在这里解释一下[chenllocalhost /]$这句话的含义: chenl是用户名,也就是你自己起的名字。 是分割的符号 localhost是主机名,也…

“搜索大战”正式打响,微软发布ChatGPT版搜索引擎和浏览器

微软公司宣布推出由ChatGPT支持的最新版本Bing(必应)搜索引擎和Edge浏览器,今天上线,免费使用! 自去年开始,Stable Diffusion、ChatGPT 等 AI 工具的横空出世,貌似在告诉人们“AI 正在准备重塑整…

力扣SQL刷题7

1132. 报告的记录 II 题型:表1,对列A分组,在列B满足某种条件下,(出现在表2中的列C值个数)/(列C个数)的比例, 对A分组各类别中取均值 解答1: select 列A,count(distinct …

如何在Visual Studio、Clion、Msys2中安装和使用vcpkg

首先事情是在安装了Msys2之后,想在Clion中使用安装在Msys2中的vcpkg。但是折腾了很久还是无法解决。于是就折腾出了这篇文章,和下一篇如何在Clion使用vcpkg的文章。 不过,由于我电脑上已近配置好了vcpkg以及环境变量,要是重新删除…

@LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析

背景 最近引入了 Nacos Config 配置管理能力,说起来用法很简单,还是踩了三个坑。 Nacos Config 的 nacos 的帐号密码加密配置后,怎么解密而且在 NacosConfigBootstrapConfiguration 真正注入 Nacos Config 注入之前,而且不能触发…

小白系列Vite-Vue3-TypeScript:009-屏幕适配

上一篇我们介绍了ViteVue3TypeScript项目中mockjs的安装和配置。本篇我们来介绍屏幕适配方案,简单说来就是要最大程度上保证我们的界面在各种各样的终端设备上显示正常。通用的屏幕适配方案有两种:① 基于rem 适配(推荐,也是本篇要…

[DiceCTF 2023] rRabin

一点点学习别人的WP,这回看到一个大姥(r3kapig)的帖子,DiceCTF第二名,不过有好多东西一时还理解不了,得慢慢来。题目这个题有3个功能:rsa加密功能,p,q,N未知,e17低加密指数解密,不过…

Reflections反射包在springboot jar环境下扫描不到class排查过程

需求: 要实现指定pkg(如com.qiqitrue.test.pojo)扫描包下所有class类信息:使用代码如下 使用的版本:0.10.2(截至目前是最新版)发现只能在idea编译期间可以获取得到(也就是在开发阶段…

解读YOLO v7的代码(三)损失函数

在前两篇博客中我分析了YOLO v7的模型结构以及训练数据的准备。这里将对损失函数的代码进行分析。在train.py中,我们可以看到以下的代码是进行损失值计算的if loss_ota not in hyp or hyp[loss_ota] 1:loss, loss_items compute_loss_ota(pred, targets.to(device…

图解项目延期的原因及解决应对方案大全

项目管理中经常出现项目延期的情况,面对项目延期的风险如何应对是考验每个项目经理管理水平的时候,很多人纵然是工作多年也没有对延期的种种情况进行总结思考。咱们社区的小竹对大家常见的项目延期情况及处理方案进行了详细全面的总结,供大家…

【数据结构-JAVA】排序

排序在现实生活中的应用可谓相当广泛,比如电商平台中,选购商品时,使用价格排序或是综合排序、高考填报志愿的时候,会参考全国大学排名的情况。下面介绍一些计算机中与排序相关的概念:排序:所谓排序&#xf…

python自学之《21天学通Python》(10)——正则表达式

第13章 正则表达式 最初的正则表达式出现于理论计算机科学的自动控制理论和形式化语言理论中。在这些领域中有对计算(自动控制)的模型和对形式化语言描述与分类的研究。 程序员所用的正则表达式是指用某种模式去匹配一类具有共同特征的字符串。正则表达…

机器学习调参

机器学习调参常用调参方法举例K邻近算法(最常规版本)加入交叉验证加上网格搜索GridSearchCV函数介绍GridSearchCVcross_val_score常用调参方法举例 sklearn使得我们在很多编写代码的时候更多的工作倾向于调参数而不是去写算法本身,本篇文章整…