(学习笔记-TCP连接建立)三次握手丢失后分别会发生什么?

news2024/11/24 13:00:50

第一次握手丢失

当客户端想和服务端建立TCP连接后,首先第一个发的就是SYN报文,然后进入到SYN_SENT状态。

在这之后如果客户端迟迟没有收到服务端的SYN-ACK报文(第二次握手),就会触发[超时重传]机制,重传SYN报文,而且重传的SYN报文的序列号都是一样的。

不同版本的操作系统可能超时时间不同,有的1秒,有的3秒,这个超时时间是写死在内核里的,如果想要修改则需要重新编译内核,比较麻烦。

当客户端在1秒后没收到服务端的SYN-ACK报文后,客户端就会重发SYN报文,那么重发几次呢?

在Linux系统里,客户端的SYN报文最大重传次数由tcp_syn_retries内核参数控制,这个参数是可以自定义的,默认值一般是5.

# cat /proc/sys/net/ipv4/tcp_syn_retries
5

通常,第一次超时重传是在1秒后,第二次超时重传是在2秒后,第三次超时重传是在4秒后...每一次超时重传的时间都是上一次的2倍

总耗时  = 1+2+4+8+16+32 = 63秒

 

 具体过程:

  • 当客户端超时重传3次SYN报文后,由于tcp_syn_retries为3,已达到最大重传次数,于是再等待一段时间(时间为上一次超时时间的2倍),如果还是没能收到服务器的第二次握手,那么客户端就会断开连接。

第二次握手丢失

当服务端收到客户端的第一次握手后,就会回SYN-ACK报文给客户端,这个就是第二次握手,此时服务端会进入SYN_RCVD状态。

第二次握手的SYN-ACK报文有两个目的:

  • 第二次握手的ACK,是对第一次握手的确认报文
  • 第二次握手的SYN,是服务器端发起建立TCP连接的报文

如果第二次握手丢失了:

因为第二次握手报文里包含对客户端的第一次握手的ACK确认报文,所以,如果客户端迟迟没有收到第二次握手,那么客户端就觉得可能自己的SYN报文(第一次握手)丢失了,于是客户端就会触发超时重传机制,重传SYN报文。

然后,因为第二次握手中包含服务端的SYN报文,所以当客户端收到后,需要给服务端发送ACK确认报文(第三次握手),服务端才会认为该SYN报文被客户端收到了。

那么,如果第二次握手丢失了,服务端就收不到第三次握手,于是服务端这边会触发超时重传机制,重传SYN-ACK报文

在Linux下,SYN-ACK报文的最大重传次数由tcp_synack_retries内核参数决定,默认值是5

# cat /proc/sys/net/ipv4/tcp_synack_retries
5

因此,当第二次握手丢失了,客户端和服务端都会重传:

  • 客户端会重传SYN报文,也就是第一次握手,最大重传次数由tcp_syn_retries内核参数决定;
  • 服务端会重传SYN-ACK报文,也就是第二次握手,最大重传次数由tcp_syn_retries内核参数决定;

举个例子,假设tcp_syn_retries参数值为1,tcp_synack_retries参数值为2,那么当第二次握手一直丢失时,发生的过程如下图:

 具体过程:

  • 当客户端超时重传1次SYN报文后,由于tcp_syn_retries为1,已达到最大重传次数,于是再等待一段时间(时间为上次超时时间的2倍),如果还是没能收到服务端的第二次握手(SYN-ACK报文),那么客户端就会断开连接。
  • 当服务端超时重传2次SYN-ACK报文后,由于tcp_synack_retries为2,已达到最大重传次数,于是再等待一段时间(时间为上次超时时间的2倍),如果还是没能收到客户端的第三次握手(ACK报文),那么服务器就会断开连接。

第三次握手丢失

客户端收到服务端的SYN-ACK报文后,就会给服务端回一个ACK报文,也就是第三次握手,此时客户端状态进入到ESTABLISH状态。

因为这个第三次我收的ACK是对第二次握手SYN的确认报文,所以当第三次握手丢失了,如果服务端那一方迟迟收不到这个确认报文,就会触发超时重传机制,重传SYN-ACK报文。直到收到第三次握手,或者达到最大重传次数。

注意,ACK报文是不会有重传的,当ACK丢失了,就由对方重传对应的报文

具体过程:

  • 当服务端超时重传2次SYN-ACK报文后,由于tcp_synack_retries为2,由于已经达到了最大重传次数,于是再等待一段时间(时间为上一次超时时间的2倍),如果还是没能收到客户端的第三次握手(ACK报文),那么服务端就会断开连接。

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

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

相关文章

【淘宝API接口开发系列】item_review-获得淘宝商品评论

淘宝/天猫获得淘宝商品评论 API 返回值说明 taobao.item_review 公共参数 请求地址:注册Key和secret接入 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地…

韧性数据安全体系组成:运行保障与底线防御安全 |CEO专栏

「构建适应性进化的韧性数据安全体系」专栏,为你解读美创科技在数据安全的最新探索实践。 上期内容(点击此处跳转),专栏重点分享了韧性数据安全体系的重要组成——资产和资产安全。数据资产是网络中最为确定性的存在,以…

qgis以某个字段(属性)的类目值来分类显示不同的颜色和调整每个类别的绘制顺序(一个类别在另一个类别上面不被覆盖)和将某字段(属性)的值当成图层标签进行显示

前言 我这里的样例以北京景区的点shp数据为例,属性表如下所示: 我们将以景区的等级划分成五类,分别显示不同的颜色,并且5A景区绘制在4A景区上方不被遮挡…,并且将景区的名称显示在景区点的上方。 一、分类不同颜色显示 1、自动分配颜色 首先,我们双击图层文件,打开…

小程序源码二开多端合一

1.注册与登录: 用户可以注册账号并登录到小程序,以便进行后续操作和管理。 2.货物管理: 用户可以添加、编辑和删除货物信息。 货物信息包括货物名称、数量、重量、尺寸、装载方式等。 3.拉货服务: 用户可以选择拉货服务&…

TransmittableThreadLocal 原理分析

前言 注:在看此篇文章前,你需要了解 ThreadLocal、InheritableThreadLocal 的原理。 这里先总体的介绍TransmittableThreadLocal (下文以 ttl 作为简称)的原理再去分析一些核心的源码,旨在先有个整体的认识&#xff0…

(学习笔记-连接断开)TCP四次挥手

TCP四次挥手过程 TCP断开连接是通过四次挥手实现的,双方都可以主动断开连接,断开连接后主机中的资源将被释放,四次挥手的过程如下: 客户端打算关闭连接时,会发送一个TCP首部FIN标志位为1的报文,也就是FIN报…

预警先行,问题零失控,提升物流的重要利器

每一次大促活动,都是商家们的大卖良机,然而出单之后,最怕出现发货异常的问题。比如包裹长时间未揽收、物流长时间未更新...稍有不慎就会影响店铺权重,甚至深陷各种取消订单、退款赔偿的泥潭。 这时物流监控预警就显得格外重要了。…

浏览器书签栏的小图标设置

在我们写项目中肯定需要自定义这些浏览器的图标 , 那么如何设置呢 <link rel"icon" href"favicon.png" type"image/x-icon" /> 其中的href是选择路径 像vue中 , 基本上都是在文件夹public中的index.html设置浏览器标题跟图标 , 图片的大小…

数据库数据恢复-Oracle数据库文件有坏块损坏的数据恢复案例

Oracle数据库故障&检测&#xff1a; 打开oracle数据库报错&#xff1a;“system01.dbf需要更多的恢复来保持一致性&#xff0c;数据库无法打开”。 北亚企安数据恢复工程师检测数据库文件发现sysaux01.dbf有坏块&#xff0c;sysaux01.dbf文件损坏。数据库无备份&#xff0c…

Windows10环境下安装Kibnana

Windows10环境下安装Kibnana 一、Kibana 介绍1. 数据可视化&#xff1a;2. 仪表板&#xff1a;3. 查询和过滤&#xff1a;4. 地理信息系统&#xff08;GIS&#xff09;支持&#xff1a;5. 实时监控和警报&#xff1a; 二、安装步骤1. 官网地址&#xff1a;2. 选择操作系统3. 解…

echarts——柱状图+折线图

var myChart echarts.init(document.getElementById(myChart)); var option {title: {text: XX增速,textStyle: {color: #2bffff,fontSize: 14,fontWeight: 100,fontFamily: "fontStyle"},left: 0,top: 0,},tooltip: {show: true,backgroundColor: rgba(38,39,40,0…

Waves 14 Complete for Mac(Waves混音效果全套插件)

Waves 14 Complete for Mac是一款音频插件套装&#xff0c;拥有多种不同的音频处理插件、高品质音效、简单易用的界面、完全兼容和兼容多平台等特点&#xff0c;可以帮助音频制作人员进行音频处理和混音&#xff0c;提高音频制作的效率和质量。 音乐创作是一个永不停歇的探索过…

Apache Doris (三十):Doris 数据导入(八)Spark Load 3- 导入HDFS数据

目录 1. 准备HDFS数据 2. 创建Doris表 3. 创建Spark Load导入任务 4. 查看导入任务状态 进入正文之前&#xff0c;欢迎订阅专题、对博文点赞、评论、收藏&#xff0c;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; 宝子们订阅、点赞、收藏不迷路&#xff01;抓紧…

【iOS】—— 属性关键字及weak关键字底层原理

文章目录 先来看看常用的属性关键字有哪些&#xff1a;内存管理有关的的关键字&#xff1a;&#xff08;weak&#xff0c;assign&#xff0c;strong&#xff0c;retain&#xff0c;copy&#xff09;关键字weak关键字assignweak 和 assign 的区别&#xff1a;关键字strong&#…

时间序列的季节性:3种模式及8种建模方法

分析和处理季节性是时间序列分析中的一个关键工作&#xff0c;在本文中我们将描述三种类型的季节性以及常见的8种建模方法。 什么是季节性? 季节性是构成时间序列的关键因素之一&#xff0c;是指在一段时间内以相似强度重复的系统运动。 季节变化可以由各种因素引起&#xf…

看见未来:定位咨询如何预测行业趋势

商业竞争时代&#xff0c;变化无处不在。科技日新月异&#xff0c;消费者需求日益多元&#xff0c;市场环境更加动态不定。在这个快速发展的时代&#xff0c;如果企业想要继续领先&#xff0c;就必须有能力预见未来&#xff0c;适应并驾驭这些变化&#xff0c;这就是定位咨询的…

【QT】使用QtCreator进行debug

使用QtCreator进行debug 简单操作 设置断点 鼠标右键在需要打断点的地方打断点 debug 点击小甲虫按钮&#xff0c;启动之后可以看到三个窗口表格 这里显示变量的值。 这里显示函数当前的执行处以及断点的地方 这三个按钮分别代表的含义是&#xff1a; step into: 单步执行&…

通过宝塔面板部署一个SpringBoot+Vue前后端分离项目的指南(三更)

采取的部署方案 阿里云服务器->FinalShell->宝塔面板。 近期需要将自己的一个SpringBootVue前后端分离项目&#xff0c;并且是分模块开发的项目部署到服务器上&#xff0c;记录一下踩坑的地方&#xff0c;结合C站大佬的解决方案&#xff0c;循循善诱一步步部署到服务器上…

部署开源项目 Casdoor 身份认证管理系统到本地

前言 Casdoor是一个基于OAuth 2.0、OIDC、SAML 和 CAS 的&#xff0c;UI-first的身份和访问管理(IAM)/单点登录(SSO)平台。使用 Go 和react开发&#xff0c;前后端分离&#xff0c;内置第三方应用登录服务。 Casdoor 有四个核心概念&#xff0c;分别是 组织(Organization)&am…

vue3+antd——项目搭建初始化配置——技能提升

vue-antd-admin vue2 版本链接&#xff1a; https://gitee.com/iczer/vue-antd-admin?_fromgitee_search vue3 版本链接&#xff1a; https://github.com/stepui/stepin-template 预览地址: https://stepui.gitee.io/stepin-template 使用文档: http://stepui.gitee.io/step…