计算机网络-TCP断开连接阶段错误应对机制

news2024/11/24 7:07:48

连接断开阶段

  • 四次挥手机制:TCP连接的断开需要四次挥手,这是因为双方都需要独立地关闭数据传输。第二次和第三次挥手不能合并,因为在回复第二次挥手的时候,可能还有数据没有接收完成,所以需要先回复ACK报文,等待所有的数据接收完成之后再发送FIN报文。这样可以确保数据的完整性。

  • 延迟应答:TCP为了提高传输效率,采用了延迟应答的策略。如果没有响应数据要发送,TCP会延迟一段时间,等待是否有响应数据可以一起发送。这样可以减少网络的负载。如果在等待发送ACK期间,对方的第二个数据报文又到达了,这时就会立刻发送ACK。这样可以确保数据的及时性。如果开启了延迟应答的TCP,并且没有响应数据要发送,那么就可能看到ACK和FIN报文合并的情况。这是因为TCP为了提高效率,尽可能地将多个报文合并发送。

  • 报文丢失:如果某次挥手的报文丢失了,TCP会进行超时重传,达到最大次数之后就强制断开连接。这是因为TCP为了确保数据的可靠性,采用了超时重传的策略。如果超过一定的时间还没有收到对方的应答,就会认为报文丢失,然后进行重传。

  • 主机宕机:如果客户端/服务端建立连接后宕机/断网,会有以下几种情况:

    • 未宕机方传输数据:如果服务端向客户端传输数据的过程中发现客户端宕机并重启,客户端的TCP连接的数据结构已经丢失,那么会发送RST报文;如果客户端仍在宕机,服务端会触发超时重传,次数达上限后断开。这是因为TCP为了确保数据的可靠性,采用了超时重传的策略。
    • 宕机方传输数据:如果客户端宕机之后重启,希望与同一服务端连接,会发送SYN报文。如果客户端SYN报文中端口号与历史连接相同,服务端会认为这个SYN是乱序的,所以回复历史连接中的正确ACK(Challenge ACK),但是客户端发现这个ACK不是自己希望收到的,就会发送RST,双方断开连接。这是因为TCP为了防止乱序的报文影响到正常的连接,采用了Challenge ACK的策略。
    • 长时间无数据传输:为了防止客户端长时间不发送报文占用服务端资源,服务端可以开启TCP保活机制,发送探测报文来探测客户端还是否处于正常状态,否则只有服务端重启才能断开。这是因为TCP为了防止无效的连接占用资源,采用了保活机制。
  • 进程崩溃:如果进程崩溃,操作系统会在回收资源的时候代为进行挥手过程,这与主机宕机是不同的,因为TCP的连接信息是由内核维护的。这是因为TCP为了防止进程崩溃导致的资源泄露,采用了进程崩溃后自动断开连接的策略。

  • TIME_WAIT状态

    TIME_WAIT状态是TCP连接断开后的一个必要状态。这个状态的存在有两个主要原因:
    • 防止旧报文干扰新连接:TIME_WAIT状态可以防止“旧的重复报文”在新的连接中被错误地接收。这是通过让TCP连接在TIME_WAIT状态持续2MSL的时间,使得网络中可能存在的属于“旧连接”的报文都消失,这样新的连接就不会收到旧的报文了。
    • 保证正常关闭:TIME_WAIT状态可以确保TCP连接可靠地关闭。这是通过在TIME_WAIT状态期间等待2MSL(报文最大生存时间)来实现的,这样可以保证对方收到了我们的FIN报文,如果对方没有收到,我们可以在这个时间内重发。
  • 主动断开连接

    主动断开连接会导致有很多处于TIME_WAIT状态的TCP连接,这会占用系统资源,因此,应该尽量让客户端承受TIME_WAIT。

    TCP连接可以在以下几种情况下被主动断开:
    • 长连接数量达上限:如果长连接的数量达到了系统的上限,系统可能会主动断开一些连接以释放资源。
    • 长连接超时:如果客户端长时间无请求,长连接可能会超时,此时服务端可能会主动断开连接。
    • 没有使用长连接:如果没有使用长连接(Keep-Alive),短链接一般由服务端主动关闭
  • 快速复用

    当TIME_WAIT状态过长会导致占用系统资源过多时,可以选择快速复用,但这相当于放弃了TIME_WAIT的作用,所以最好在保证安全的情况下复用。
    • tcp_tw_reuse选项:tcp_tw_reuse选项可以快速复用处于TIME_WAIT的连接,但需要配合时间戳一同开启。虽然有了时间戳控制可以避免历史报文,但是历史RST报文只要在接收窗口内就不会丢弃,而且也无法保证被动关闭方正常关闭。
    • tcp_tw_recycle选项:tcp_tw_recycle选项也可以快速复用,但是在使用了NAT网络的情况下是不安全的,因为tcp_tw_recycle和时间戳是针对IP地址做PAWS检查的,使用NAT会导致内网下的两个主机会映射到同一个IP,此时两端传输数据包,一端的时间戳会比另一端小,在服务器看来,会认为小的那一端是非法报文,从而丢弃。
    • tcp_max_tw_buckets选项:tcp_max_tw_buckets选项可以设定当前主机最多存在的TIME_WAIT状态的TCP连接的数量,当超过这个上限就可以直接关闭。

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

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

相关文章

css面试题---场景应用

1、实现一个三角形 css一般用border属性实现三角形。 div {width: 0;height: 0;border: 100px solid;border-color: orange blue red green; } // 三角形一 div {width: 0;height: 0;border-top: 50px solid red;border-right: 50px solid transparent;border-left: 50px soli…

竞赛 图像识别-人脸识别与疲劳检测 - python opencv

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是…

免费HTTPS证书在线申请

申请HTTPS证书的流程如下: 1. 确定证书类型: - 根据你的网站用途(如个人博客、企业官网、电商、金融等)和信任级别要求,选择适合的证书类型,如DV(域名验证)、OV(组织验证…

[论文笔记] Pai-megatron Qwen1.5-14B-CT 后预训练 踩坑记录

1. 模型权重转换报错 hf2mcore_1.5_v2.py 报错为: /mnt/cpfs/kexin/dlc_code/qwen1.5/PAI-Megatron-Patch/toolkits/model_checkpoints_convertor/qwen/hf2mcore_1.5_v2.py 正确文件替换如下,更改了477行,删除了 args.hidden_size 这个维度,在tp>1时也支持转换: eli…

如何将h5网页打包成iOS苹果IPA文件

哈喽,大家好呀,淼淼又来和大家见面啦,最近有很多小伙伴都被难住了,是什么问题给他们都难住了呢,许多小伙伴都说想要把h5网页打包成iOS苹果IPA文件,但是却不知道具体怎么操作,是怎么样的一个流程…

强化学习的数学框架:马尔科夫决策过程 MDP

文章目录 1. 什么是马尔科夫过程2. 强化学习与MDP的关系3. 价值函数的贝尔曼方程[^1]3.1 状态价值函数的贝尔曼方程3.2 动作价值函数的贝尔曼方程3.3 价值函数递推关系的转换 4. 最优价值函数5. MDP计算最优值函数实例[^2] 1. 什么是马尔科夫过程 马尔科夫过程(Mar…

如何用酷鸟云进行iOS上架?

众所周知,大部分苹果开发者通常会上架多个马甲包应用,以获得更多流量和收益。这个过程需要进行账号、IP、设备隔离,这会需要很多电脑,但又没有那么mac 电脑的话,可以借助酷鸟云来进行上架,它是VPS云服务器&…

工作日常随记-总

软件测试主管工作日常随记-总 前言 接下来,我将开始散文式地记录我作为一位从业3年多的软件测试人员的软测经验。这是我在繁忙的日常工作的中跋涉出来又又投入的另一工作(bushi)另一兴趣中去。 我将简单(偏流水线向)…

性能升级,INDEMIND机器人AI Kit助力产业再蜕变

随着机器人进入到越来越多的生产生活场景中,作业任务和环境变得更加复杂,机器人需要更精准、更稳定、更智能、更灵敏的自主导航能力。 自主导航技术作为机器人技术的核心,虽然经过了多年发展,取得了长足进步,但在实践…

windwos安全加固

一、账号管理 按用户类型分配账号 目的:根据系统要求,设定不同账户和组,管理员、数据库 sa、审计用户、来宾用户等 实施方法: 打开本地用户和计算机管理器 ​ 1.打开运行,输入lusrmgr.msc 2.根据用户要求将账户加入…

一文涵盖Lambda,Stream,响应式编程,从此爱上高效率编程

一文涵盖Lambda,Stream,响应式编程,从此爱上高效率编程 前言 本文结构为 先是一个例子,带你快速体验,之后再去深究里面的方法。以及一些底层原理是如何实现的。从如何用,到如何用好,如何用精。学习操作,学…

设计模式——2_7 状态(State)

欲买桂花同载酒,终不似,少年游 ——刘过《唐多令芦叶满汀州》 文章目录 定义图纸一个例子:如何模拟一个转笔刀自动转笔刀PencilPencilSharpener 投诉和改善钝刀BladePencilSharpener 没有铅笔PencilSharpener if if ifStatePencilSharpener 碎…

雪亮工程视频联网综合管理/视频智能分析系统建设方案(一)

一、行业背景 雪亮工程主要是针对农村地区治安防控的监控项目,在乡村的主干道、路口、人群聚集地部署高清摄像头,通过三级综治中心和指挥平台,将视频图像信息系统纵向下延至县、乡、村,同时利用系统拓展在安防、社会治理、智慧交…

细胞世界:4.细胞分化(划区域)与细胞衰老(设施磨损)

(1)细胞凋亡 1. 概念:细胞凋亡可以比作城市的规划者主动拆除某些建筑来更新城市或防止危险建筑对市民的潜在伤害。这是一个有序的过程,由城市(细胞内部)的特定规划(基因)所决定。 2. 特征:细…

LeetCode-1143. 最长公共子序列【字符串 动态规划】

LeetCode-1143. 最长公共子序列【字符串 动态规划】 题目描述:解题思路一:动规五部曲解题思路二:1维DP解题思路三:0 题目描述: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。…

【攻防世界】Confusion1

php的标志是大象,Python的标志是蛇 。Python 的 Flask 框架( Flask 使用 Jinja2 作为模板引擎 ) 点进register.php 输入{{3*4}} 输入 {{config}} 也有回显,ssti 判断是否存在ssti注入: 1. {{8*8}} 2. {{config}} 过滤了关键字&#xff0…

详解Qt添加外部库

在Qt项目中添加外部库是一项常见任务,无论是静态库还是动态库都需要正确的配置才能让项目顺利编译链接。以下是详细步骤和不同场景下的配置方法: 方法一:手动编辑.pro文件 添加头文件路径: 在Qt项目中的.pro文件中使用INCLUDEPAT…

在线视频教育平台|基于Springboot的在线视频教育平台系统设计与实现(源码+数据库+文档)

在线视频教育平台目录 基于Springboot的在线视频教育平台系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台: 2、后台 用户功能模块 教师功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&a…

Kingbase(人大金仓数据库)(总结全网精华,虚拟机:从安装到操作数据库一条龙)

前言: 前一阵子一直在捣鼓人大金仓数据库,虽然国产化的数据库很值得夸赞,但是网上的资料确实少的可怜。特此记录一下我在学习这个数据库的心酸历程。 安装就看这个大哥的,我之前安装就是看的他的,非常靠谱。 linux安装…

海外代理IP如何助力YouTube广告投放?

一、海外代理的角色与优势 拓展地理访问: 海外代理允许您从其他国家或地区的IP地址进行网络访问。通过使用海外代理,您可以绕过部分限制,实现访问YouTube和其他平台的目的。扩展受众: 利用海外代理,您可以将广告投放面…