非正常的连接释放以及可能引起的结果的分析总结

2024-01-03 15:10

本文主要是介绍非正常的连接释放以及可能引起的结果的分析总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、正常的连接释放

正常的连接释放过程需要完成四次挥手的过程。(图 1)第一次,客户端向服务器发出一个连接释放的报文。FIN=1,seq=u,告诉服务器,我需要发送的数据已经全部发送过去了。然后服务器收到客户端的释放连接请求后,向客户段发出确认报文,ACK=1,seq=v,ack=u+1,表示服务器已经知道客户端之后不会发送任何数据报文,但是此时服务器可能还有数据没有发送,所以服务器可能在接下来一段时间都在发送数据。当服务器在发送完最后的数据后,向客户端发出连接释放确认报文,FIN=1,ACK=1,seq=w, ack=u+1,实现第三次挥手,告知客户端,我的数据也全部发完了,我也想要释放连接了。第四次挥手,是客户端手袋服务器连接释放的报文之后,向服务器发出确认报文,ACK=1,seq=u+1,ack=w+1.服务器收到确认报文后,立即关闭连接,客户端在等待2MSL时长后,如果没有异常,将关闭连接。到此TCP连接实现释放。

以上过程中,也可是服务器的数据先发送完,具体过程类似。

TCP连接的释放过程

 二、非正常的连接释放的类型总结

在TCP连接过程中可能因为报文丢失或者报文到达的顺序等问题,引起非正常的连接释放结果。比如说,如果

  1. 双方同时发出连接释放请求,又同时发送确认;——同时关闭
  2. 若是双方同时发出连接释放请求,同时发送的确认中发生丢失。
  3. 若是双方同时发出连接释放请求,同时关闭后,收到确认报文。

(4)当客户端关闭并发送FIN报文的时候后,同收到FIN+ACK报文。

(5)A/B的连接已经释放,连接中在网络中的残留的TCP报文字段重现到达,这个报文字段可能是数据段,也可能是FIN段,也可能是ACK段。

(6)在B已经关闭连接,A还没有关闭连接的时候,已失效的连接请求字段到达B。

TCP状态迁移变化图

 三、各种非正常连接释放可能引起的后果

1. 双方同时发出连接释放请求,又同时发送确认

如果客户机和服务器同时发送连接释放请求,即客户机发送报文FIN=1,seq=u,同时服务器发送报文FIN=1,seq=v,当客户机收到服务器发送的请求连接释放的报文后,向其发送确认关闭连接的报文:ACK=1,seq=u+1,ack= v+1;同时当服务器收到客户机发送的连接释放请求的报文后,向其发送确认报文:ACK=1,seq=v+1,ack=u+1。当服务器收到客户机发送的确认报文后,就关闭连接。当客户机收到服务器发送的确认报文后,就关闭连接。如果中间没有报文丢失的话,服务器和客户机会同时关闭连接。

同时发送释放连接的请求

 2.若是双方同时发出连接释放请求,同时发送的确认中发生丢失。

(1)若只有一方丢失,则双方一定不是同时关闭。比如如果客户端发给服务器的确认报文丢失。首先不影响客户端收到服务器发送的确认报文,客户端在收到确认报文之后,会立即释放连接。而服务器虽然收不到确认报文,但是因为它发送过确认报文,他会在发送过确认报文之后的2MSL的时间后,释放连接。最终,客户机和服务器完成TCP连接的释放。

同时发送报文,一方确认报文丢失

 (2)若双方均丢失确认报文。则服务器和客户端均会在发送过确认报文后,等待2MSL时间后,释放连接。最终,服务器和客户机完成TCP连接释放。

同时发送报文,双方丢失确认报文

 3. 若是双方同时发出连接释放请求,同时关闭后,收到确认报文

 比如在第二种情况下,确认报文并没有丢失,而是确认报文到达的时间长于等待的2MSL,此刻已经释放连接,收到的客户机(/服务器)会拒绝,因为根本没有发起连接请求。

4. 当客户端关闭并发送FIN报文的时候后,同收到FIN+ACK报文

即如果客户机在发送释放连接请求后,服务器还有数据没有发完,但是发送了确认报文丢失,继续发送数据报文,当数据报文发送完之后,发送了FIN和ACK报文。根据报文的seq大小,因为v<w,拒收旧报文,并不影响客户机发送确认服务器释放的报文,当服务器收到确认报文,会释放连接。而服务器在等待2MSL时间后,也会释放连接。至此服务器和客户机间的连接得到释放

走失的报文返回

 5. A/B的连接已经释放,连接中在网络中的残留的TCP报文字段重现到达,这个报文字段可能是数据段,也可能是FIN段,也可能是ACK

即假设服务器已经释放连接,网络中残留的报文在客户机TIME-WAIT阶段收到数据报文或FIN段或ACK段。客户机会拒收,因为seq的值不对。然后在到达2MSL时间后,释放连接。

走失的报文在TIME_WAIT阶段走回

 6. 在B已经关闭连接,A还没有关闭连接,正处在TIME_WAIT阶段,已失效的连接请求字段到达A

此时特指A服务器,B特指客户机。此时服务器会拒绝,因为此刻还没有和客户机完全释放连接,服务器还没有释放连接。这里不能看seq的序号大小,因为也可能时新的连接请求,每一次建立连接请求的时候seq开始的值是随机的。如果是新的连接,超过设定等待时间后,客户机会重新发送连接请求,此时若服务器等待了2MSL后,已经释放了连接。可以再接受新的连接请求。总之,不会造成混乱。

失效的连接请求在TIME_WAIT阶段到达

 四、总结

序号seq很重要。TCP的计时器也很重要,尤其是时间等待计时器的2MSL。

这篇关于非正常的连接释放以及可能引起的结果的分析总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/566116

相关文章

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入

IDEA连接达梦数据库的详细配置指南

《IDEA连接达梦数据库的详细配置指南》达梦数据库(DMDatabase)作为国产关系型数据库的代表,广泛应用于企业级系统开发,本文将详细介绍如何在IntelliJIDEA中配置并连接达梦数据库,助力... 目录准备工作1. 下载达梦JDBC驱动配置步骤1. 将驱动添加到IDEA2. 创建数据库连接连接参数

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接