TCP连接异常终止(RST包)场景分析

TCP连接异常终止(RST包)场景分析一、TCP异常终止(reset报文)TCP的异常终止是相对于正常释放TCP连接的过程而言的,我们都知道,TCP连接的建立是通过三次握手完成的,而TCP正常释放连接是通过四次挥手来完成。但是有些情况下,TCP在交互的过程中会出现一些意想不到的情况,导致TCP无法按照正常的三次握手建立连接或四次挥手来释放连接。如果此时不通过其他的方式来释放TCP连接的话,这个TCP连接将会一直存在,占用系统的资源。在这种情况下,我们就需要有一种能够释放TCP连接的机制,这种机制就是TCP的reset报文。reset报文是指

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、TCP异常终止(reset报文)

TCP的异常终止是相对于正常释放TCP连接的过程而言的,我们都知道,TCP连接的建立是通过三次握手完成的,而TCP正常释放连接是通过四次挥手来完成。但是有些情况下,TCP在交互的过程中会出现一些意想不到的情况,导致TCP无法按照正常的三次握手建立连接或四次挥手来释放连接。如果此时不通过其他的方式来释放TCP连接的话,这个TCP连接将会一直存在,占用系统的资源。在这种情况下,我们就需要有一种能够释放TCP连接的机制,这种机制就是TCP的reset报文。reset报文是指TCP报头的标志字段中的reset位置一的报文,如下图所示:

TCP连接异常终止(RST包)场景分析

 

二、TCP异常终止的常见情形

我们在实际的工作环境中,导致某一方发送reset报文的情形主要有以下几种:

1.  客户端尝试与服务器未对外提供服务的端口建立TCP连接,服务器将会直接向客户端发送reset报文。

TCP连接异常终止(RST包)场景分析

 

2.  客户端和服务器的某一方在交互的过程中发生异常(如程序崩溃等),该方系统将向对端发送TCP reset报文,告之对方释放相关的TCP连接,如下图所示:

TCP连接异常终止(RST包)场景分析

 

3.  接收端收到TCP报文,但是发现该TCP的报文,并不在其已建立的TCP连接列表内,则其直接向对端发送reset报文,如下图所示:

TCP连接异常终止(RST包)场景分析

 

4.  在交互的双方中的某一方长期未收到来自对方的确认报文,则其在超出一定的重传次数或时间后,会主动向对端发送reset报文释放该TCP连接,如下图所示:

TCP连接异常终止(RST包)场景分析

 

5.  有些应用开发者在设计应用系统时,会利用reset报文快速释放已经完成数据交互的TCP连接,以提高业务交互的效率,如下图所示: 

TCP连接异常终止(RST包)场景分析

三、Reset报文的用途

1. 安全设备利用reset报文阻断异常连接

安全设备(如防火墙、入侵检测系统等)在发现某些可疑的TCP连接时,会构造交互双方的reset报文发给对端,让对端释放该TCP连接。比如入侵检测检测到黑客攻击的TCP连接,其构造成被攻击端给黑客主机发送reset报文,让黑客主机释放攻击连接。

2. 利用reset报文实施攻击

安全设备可以利用reset报文达到安全防护的效果,黑客和攻击者也可以利用reset报文实现对某些主机的入侵和攻击,最常见的就是TCP会话劫持攻击。关于TCP会话劫持的相关知识请参考第三章《TCP会话劫持》一文。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187179.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • MySQL默认隔离级别是RR,但是为什么一些大厂会改成RC?

    MySQL默认隔离级别是RR,但是为什么一些大厂会改成RC?为什么默认隔离级别是RR?可能大部分人都只知道MySQL的隔离级别有4个,分别是RU读未提交、RC读已提交、RR可重复读和Serializable可串行化,很少有人知道MySQL默认的隔离级别是RR,Oracle默认的隔离级别是RC。那就更少有人知道为什么MySQL默认的隔离级别是RR了。我也是刚刚工作之余看到了一篇文章,里面简单提了一下这个问题,我就四处找寻了一下答案,将自己所理解的记录下来,希望对大家有帮助。理解脏读、不可重复读、幻读脏读:某个事务对一份数据执行了更新操作,另一个事务在此时读

  • ArrayList 扩容规则[通俗易懂]

    ArrayList 扩容规则[通俗易懂]ArrayList()会使用长度为零的数组ArrayList(intinitialCapacity)会使用指定容量的数组publicArrayList(Collection<?extendsE>c)会使用c的大小作为数组容量add(Objecto)首次扩容为10,再次扩容为上次容量的1.5倍addAll(Collectionc)没有元素时,扩容为Math.max(10,实际元素个数),有元素时为Math.max(原容量1.5倍,实际元素个数.

  • python与anaconda安装(先安装了python后安装anaconda,基于python已存在的基础上安装anaconda)——逼死强迫症、超详解[通俗易懂]

    python与anaconda安装(先安装了python后安装anaconda,基于python已存在的基础上安装anaconda)——逼死强迫症、超详解[通俗易懂]目录欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入#一、安装python欢迎…

  • cannot open image file 1:-1_linux C

    cannot open image file 1:-1_linux C关于使用《FirstOrderMotionModelforImageAnimation》Github项目中所遇到的OSError:Failedtoopenfileb’C:\\Users\\\xe6\x96\x87…\\AppData\\Local\\Temp\\scipy-xxxxx报错原因:路径中包含中文解决方案:修改计算机环境变量中的Temp文件夹路径OSError:Failedtoopenfileb’C:\Users\\xe6\x96\x87…\AppDa

  • 搭建SpringBoot源码环境的正确姿势(避坑必备)

    搭建SpringBoot源码环境的正确姿势(避坑必备)最近打算拉取SpringBoot源码,各种编译报错,各种问题。参考很多网上的教程,仍然是各种错误。最终研究出来了搭建SpringBoot源码环境的正确姿势。SpringBootGithub地址:https://github.com/spring-projects/spring-boot0、环境准备安装maven3.5或者以上版本。安装JDK8或者以上。1、fork到自…

  • iosclient暑期“动画屋“活动项目总结[通俗易懂]

    iosclient暑期“动画屋“活动项目总结

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号