TCP连接重置,到底是怎么回事?

抓包分析RST报文 大家好,我是蓝胖子,今天我们来分析下网络连接中经常出现的RST信号,连接中出现RST信号意味着这条链接将会断开,来看下什么时候会触发RST信号,这在分析连接断开的原因时十分有帮助。本文的讲解视频已经上传在开始分析触发RST的场景之前,我们先来准备下需要的客户端和服务端代码,以方便我们进行测试。服务端代码目前先是在8080端口监听,然后将接收到的消息打印出来。客户端代码,连接8080端口然后打印hello world现在,来让我们测试下触发RST的各种场景。 阅读详情
AI摘要

本文围绕TCP连接中的RST包展开讨论。介绍了RST包用于终止或拒绝连接,分析了其在连接建立、数据传输、被防火墙阻断、连接断开阶段出现的原因及影响,还给出了排查故障的建议,有助于维护网络稳定性和安全性。

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

上午好,我的网工朋友

连接建立失败并不仅仅包含无响应问题,还有一种常见的情况,即RST(Reset)包的发送。

了解RST包的发送原因,是维护网络稳定性和安全性的重要技能。通过细致的RST包分析,可以有效地分析网络故障、优化网络性能和提升网络的安全性。

RST包是TCP协议中用来进行“连接重置”的数据包,今天就来围绕RST包进行详细展开讨论。

今日文章阅读福利:《 TCP协议详解及实战解析》

私信发送暗号“TCP”,即可获取此份独家资料。

01 TCP连接中为何会有RST包?

TCP RST包,即TCP头部中RST位设置为1的数据包。根据RFC 793,TCP RST包用于终止一个现有的连接或拒绝一个连接请求。

当一个TCP端点希望立即终止一个连接时,它会发送一个RST包。

因此,当客户端或服务器的任意一方需要拒绝连接,或认为连接出现错误时,即可以发送RST包重置当前TCP连接。

RST包在TCP时序图中的体现如图1所示:

d34603d474571921ad338d89179a4e5f.jpeg

图1:时序图中的TCP RST包

02 连接建立阶段的RST包如何分析?

在连接建立阶段,服务器可发送RST包拒绝连接建立,如图2所示,在连接建立阶段,服务器发送RST包,表示服务器拒绝连接。

a325edb240f911687022131d99217e11.jpeg

图2:服务器拒绝连接

如果服务器发送RST包拒绝连接,一般可能由如下原因导致:

  • 服务器端口未开放:服务器在该端口未运行网络服务,或服务器上客户所请求的服务失效,则服务器会通过RST拒绝新连接。

  • 服务器TCP连接数达到极限:如果服务器设置了tcp_abort_on_overflow=1,那么服务器在队列满时会发送RST包拒绝连接。

  • Time_Wait状态:如果客户端使用的当前socket在上一个连接刚刚结束,且服务器当前socket处于time_wait状态,则此时使用该socket的新连接请求会被服务器拒绝,返回RST包。

  • SYN包格式错误:客户端发送的SYN包携带了其它未经允许的标记(例如FIN、URG或其他标记),则服务器会拒绝连接并直接返回RST

  • 防火墙策略不允许:如果客户端IP被禁止连接,则会话中会出现RST包,此种情况在后文中具体讨论。

如果在会话连接建立阶段出现了服务器RST的情况,建议从服务器位置分析流量,或在系统层面排查连接建立失败的原因。

除服务器外,在连接建立阶段,客户端也有可能发送RST包,如图3、图4所示,在连接建立已经经历了SYN包、SYN/ACK包的交互后,甚至三次握手完成后,客户端突然发送RST包,表示客户端拒绝连接。

18a2165065d0371d97fcc83782fe11a6.jpeg

图3:客户端在收到SYN/ACK包后发送RST

e735c9011350ae1625b7d46a037c760d.jpeg

图4:客户端在三次握手成功后立即发送RST

对于图3、图4中出现的情况,可以直接判断为客户端发生异常或客户端正在发起端口扫描攻击。

其中图3的流量为典型客户端发起TCP SYN端口扫描时序图,图4的流量为典型的客户端发起TCP Connect端口扫描时序图,如遇到此类时序图,请使用策略封禁该客户端IP地址,并检查客户端IP地址的其它流量,观察其有无其它攻击行为。

03 数据传输阶段的RST包如何分析?

在数据传输阶段,客户端和服务器均可能随时发出RST,此时RST的原因一定是连接出现异常。

对于此类故障,常见如下原因:

  • 重传次数超限:TCP具有重传机制,当TCP尝试多次重传而无法收到对方的确认(或对方发来的确认无法被接收处理,例如序列号错误、校验和错误等种种字段错误)后,重传的一方将会认为连接出现错误,停止重传并发送RST包重置连接。如图5所示。

8d72e4d74ecafa1f63dbc47e9c04b12d.jpeg

图5:多次重传后,服务器认为会话错误发送RST

  • 连接长时间无数据交互:当客户端和服务器之间长时间(例如120秒)无数据交互时,其中一方可能认为会话超时,会向发送RST包重置连接。如图6所示。在客户端和服务器中间流量经过负载均衡或防火墙的场景,RST包也可能由负载或防火墙发出。

fb3b27fc4596ed6ab5acff076679b435.jpeg

图6:120秒无交互后,服务器认为会话超时发送RST

如果在会话交互阶段出现了RST的情况,建议通过分析时序图判断重置的原因是错误或超时。如果怀疑RST包是从中间设备发出,可以通过对比多个位置的同时段流量,确定RST包来源,从而进一步排查故障原因。

04 被防火墙阻断的会话时序图是什么样的?

当ACL或安全策略匹配后的动作为Reject时,或安全设备是旁路部署无法直接丢弃流量时,安全设备会采用发送RST包方式去处理策略命中的会话,被RST的会话会因此中断。被安全策略阻断的会话如图7所示

2ac656488eff852692bc8e942139dc8a.jpeg

图7:连接被其他设备RST阻断

通过图7可以看出,服务器响应了SYN/ACK包,而立刻回复了一个RST,这是由于发送RST包的设备为中间的安全设备,在进行旁路阻断时,只能通过发送RST进行阻断,而无法拦截服务器已发出的SYN/ACK包。

因此,从客户端处能够看到服务器“同时回复”了SYN/ACK包和RST包。

如果要问,为什么能判断这个RST一定是旁路阻断包,那可以仔细观察这些RST包,本文图1、图2、图4、图5、图6中的RST包,均为携带RST,ACK这两个标志位的“真RST包”,而图3、图7中的RST包是仅携带RST标志位的“假RST包”。

另外,如果能够对比RST包和SYN/ACK包的IP TTL,则可以发现这两个包的IP TTL可能不同(也有部分设备能对TCP RST包的IP TTL拟真),说明其来自于两个不同的网络位置,如图8所示:

f5153e1aecea82d1663506a00456c171.jpeg

图8:“假RST”与“真RST” 的TTL不同

图9则描述了一种更加容易理解的旁路阻断:客户端发送ClientHello包后,中间的旁路设备阻断了客户端,但未向服务器发送RST,导致服务器认为会话未中断,还在继续发送后续ServerHello数据包:

b33d7a1e04215c66757439e9628d2c7e.jpeg

图9:旁路阻断RST

总之,如果会话过程中出现RST包,需要考虑该RST包是否由中间旁路阻断设备发出,可以通过该RST包的RST位、序列号、IP TTL等方式,或是直接多点抓包对比分析,综合判断。

05 连接断开阶段的RST包如何分析?

在连接断开阶段,也可能出现RST包,这种情况一般是由于接收FIN包的一方或中间的负载、安全设备存在关于连接断开的优化机制。

因为会话如果经过FIN包四次断开结束,先发FIN包的一方会经过TCP TIME_WAIT状态,经过2MSL时间才会进入到close状态,彻底关闭连接。

在2MSL时间段内,此socket不可用。而被RST重置的会话,则不存在TIME_WAIT状态,因此,一些连接在出现FIN包后,负载/安全设备认为该连接已经可以被结束,于是发送RST包快速关闭会话。

这种方法虽然快捷但不符合TCP协议标准。被RST加速断开的会话如图10和图11所示:

cd239565abfaae3429c073cf0b4b8a7a.jpeg

图10:客户端FIN后出现RST快速断开连接

dce7fd4b77460803242f523b5c2cab37.jpeg

图11:服务器FIN后出现RST快速断开连接

在TCP连接的生命周期中,RST包扮演了一个关键角色,通过时序图观察RST包出现时机的分析,我们可以看到RST包在连接建立、数据传输、异常阻断、连接断开阶段的出现原因和影响。

整理:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

TCP RST报文深度解析:常见连接重置场景与排查方法论 TCP协议是现代网络通信的基石,而连接频繁被重置往往让开发和运维人员措手不及。TCP RST(Reset)报文是协议栈用于强制终止连接的控制标志,与FIN的优雅关闭不同,它直接切断通信并清除两端状态。掌握RST的判定规则,可以借助tcpdump和Wireshark等工具快速定位故障。在实际生产中,端口未监听、防火墙拦截、backlog溢出、半关闭后对端继续发送数据、NAT表项老化以及Keepalive超时等场景都会触发RST。通过分析抓包特征与内核行为,不仅能够理清连接重置的来龙去脉,更能构建一套系统的排查 阅读详情

相关推荐

TCP-连接管理

本文主要内容: TCP连接的建立与终止 TCP参数选项 TCP的路径最大传输单元发现 TCP状态转换 重置报文段 TCP服务器选项 与TCP连接管理相关的攻击

惜暮 6946

从TCP协议的原理来谈谈rst复位攻击

在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是怎么传输数据的、TCP的flag标志位里RST在哪些情况下出现。下面我会画一些尽量简化的图来表达清楚上述几点,之后再了解下RST攻击是怎么回事。   1、TCP是什么? TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输。我来用土语解释下上面...

iteye_10227的博客 5422

TCP的连接建立与释放

TCP --- 传输控制协议 报头格式: (1)源端口和目的端口:与UDP类似,TCP的分用是通过端口实现的。 (2)序号:TCP是面向字节流的,在TCP连接中传送的字节流的每一个字节都是有顺序的,整个要传送的字节流的起始序号必须要在连接建立时设置。首部中的序号字段值表示本报文段的数据的第一个字节的序号。该字段也称为“报文段序号”。 (3)确认号:是期望收到对方下一个报文段的第一个

YANG 9881

TCP协议的RST标志

下文中的内容多数来自【参考】中的文章,这边进行一个整理和总结,后续会慢慢增加各个 RST 包的测试代码,便于理解。

有理论,有实验,有结论,可为一篇文章 5211

几种TCP连接中出现RST的情况

在TCP协议中RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。 其实在网络编程过程中,各种RST错误其实是比较难排查和找到原因的。下面我列出几种会出现RST的情况。

机场数据治理系列介绍(1):机场行业数据中台中的数据管理顶层设计方案

民航机场行业的数据中台中,有关数据管理顶层设计方案需要结合机场行业的业务特点和技术需求进行具体的设计,今日我们简要考量设计提供一个参考方案:

机场信息系统研究员的专栏 1605

TCP连接重置,到底怎么回事?还是得网工大佬来分析!

通过图7可以看出,服务器响应了SYN/ACK包,而立刻回复了一个RST,这是由于发送RST包的设备为中间的安全设备,在进行旁路阻断时,只能通过发送RST进行阻断,而无法拦截服务器已发出的SYN/ACK包。除服务器外,在连接建立阶段,客户端也有可能发送RST包,如图3、图4所示,在连接建立已经经历了SYN包、SYN/ACK包的交互后,甚至三次握手完成后,客户端突然发送RST包,表示客户端拒绝连接。因此,当客户端或服务器的任意一方需要拒绝连接,或认为连接出现错误时,即可以发送RST包重置当前TCP连接。

mengmeng_921的博客 2242

从PWM到精准电流:双光耦与LM317构建的4-20mA隔离输出方案

本文详细介绍了基于双光耦与LM317的4-20mA隔离输出方案,适用于工业自动化中的PWM信号转换。该方案通过电气隔离和精准电流调节,显著提升抗干扰能力和信号传输精度,同时降低成本60%。文章还分享了电路设计、参数计算及调试经验,为工程师提供实用参考。

weixin_32006655的博客 283

原来墙,是这么把我TCP连接干掉的!

要伪造一个能关闭 TCP 连接的 RST 报文,必须同时满足「四元组相同」和「序列号是对方期望的」这两个条件。今天给大家介绍了两种关闭 TCP 连接的工具:tcpkill 和 killcx 工具。这两种工具都是通过伪造 RST 报文来关闭 TCP 连接的,但是它们获取「对方下一次期望收到的序列号的方式是不同的,也正因此,造就了这两个工具的应用场景有区别。

IT界那些事儿 6200

ANSYS Twin Builder实战:5步搞定数字孪生模型部署(附ROM配置技巧)

本文详细解析了ANSYS Twin Builder在数字孪生模型部署中的实战应用,重点介绍了ROM(降阶模型)配置技巧。通过5个关键步骤,从环境搭建到工业部署,帮助工程师高效实现高精度三维仿真到轻量化数字孪生的转化,提升预测性维护和系统仿真效率。

weixin_27330481的博客 661

FPGA调试利器:VIO与ILA在Vivado中的实战应用指南

本文详细介绍了Vivado中FPGA调试工具VIO与ILA的实战应用技巧。VIO作为虚拟输入/输出工具,可实时调整参数;ILA作为集成逻辑分析仪,能高效捕获内部信号。文章通过具体案例展示了如何配置ILA采样深度、触发条件,以及VIO的动态参数调整功能,帮助开发者提升上板调试效率,解决常见通信失败、数据不同步等问题。

weixin_42553471的博客 424

与服务器的连接被重置_TCP 重置攻击的工作原理

原文链接:https://fuckcloudnative.io/posts/deploy-k3s-cross-public-cloud/ TCP 重置攻击 是使用一个单一的数据包来执行的,只有几个字节大小。攻击者制作并发送一个伪造的 TCP 重置包来干扰用户和网站的连接,欺骗通信双方终止 TCP 连接。我们伟大的 xx 长城便运用了这个技术来进行 TCP 关键字阻断。 理解 TCP 重置攻击并不...

weixin_39680208的博客 1989

Jetson Orin NX 单目标跟踪算法实战

本文对比了NanoTrack和MixFormerV2两种目标跟踪算法在Jetson Orin NX边缘设备上的实际表现。通过天空小目标跟踪场景测试发现,NanoTrack虽然表征能力较弱,但具有目标身份一致性强、失败模式可控、计算负担小等优势,更适合作为边缘端默认算法。MixFormerV2则适用于高速运动等特定场景。实验数据显示NanoTrack在Orin NX上可达200FPS,远高于MixFormerV2的38-120FPS。建议先采用NanoTrack构建稳定系统,后续再评估复杂算法的适用性。

karmueo46的博客 625

TCP重置攻击

指的是使用伪造的TCP重置包扰用户和网站的连接。这个技术可以在善意的防火墙中应用,但也可用于网络审查或是攻击,恶意中断TCP连接,是一种。

weixin_40191861的博客 934

Gitlab+Jenkins+Docker+Harbor+K8s+Rancher集群搭建CICD平台

本文以诺依项目为例详细记录了Kubernetes集群的部署过程以及配套DevOps环境的搭建。主要内容包括:1) 配置8个节点的软硬件环境;2) 基础环境准备(网络、防火墙、Docker等);3) 三节点Kubernetes集群部署;4) GitLab代码仓库安装;5) Harbor私有镜像仓库搭建;6) Jenkins持续集成工具配置;7) 基于若依项目的CI/CD实践;8) Rancher集群管理工具部署。

hickman2023的博客 1206

Halcon 色彩标定:RGB空间下实现白平衡与CCM矩阵合成静态HDR图像

摘要 本文介绍了一种基于Halcon的色彩校正方法,结合白平衡与灰轴约束最小二乘法实现精准颜色还原。方法分为三步:1)自动定位色卡区域并提取灰阶块计算白平衡增益;2)通过前三列色块建立测量值与标准值的映射关系;3)引入灰轴约束条件求解色彩校正矩阵(CCM),确保中性灰区域不偏色。算法采用中位数计算白平衡增益以提高鲁棒性,并通过旋转校正处理色卡倾斜问题。实验表明,该方法能有效消除相机采集的系统色偏,适用于颜色测量、表面检测等机器视觉场景。文末提供了完整代码实现。

LIN943168247的博客 406

TCP连接被意外重置的原因

明显服务器端上层读取过慢了, 窗口填满了 今天在做服务器压力测试的时候,出现了很奇怪的情况,与服务器建立连接会成功,但是很快会被重置(RESET)掉。花了半天时间,终于找到原因所在,我把过程和结果写下来与大家分享。       服务器正常逻辑是:接受连接,等待用户注册报文,处理其他请求,如果连接一段时间没有活动,则主动关闭连接。       客户端逻辑是:与服务器建立连接后,马上发送注册

晴天的专栏 1万+

Qt6.10 | Qt Bluetooth 蓝牙

本文介绍了QtBluetooth模块的功能和使用方法,包括蓝牙API概述、构建配置(CMake/qmake)、权限管理、平台支持(Linux/macOS特殊处理)、日志设置及许可信息。重点说明Linux平台的后端选择机制,以及macOS上的依赖限制。最后提及蓝牙聊天示例,展示RFCOMM协议通信的实现。全文提供了蓝牙开发的技术要点和注意事项。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 400

重置报文段与TCP连接错误处理

当TCP头部中的RST位被置位时,该报文段就被称作“重置报文段”。一般来说,当发现一个到达的报文段对于相关连接而言是不正确的,TCP就会发送一个重置报文段(所谓的相关连接是指由重置报文段的TCP与IP头部的4元组所指定的连接)。重置报文段的触发通常在以下场景中。 针对不存在端口的连接请求 通常情况下,当一个连接请求到达本地却没有相关进程在目的端口侦听时就会产生一个重置报文段。UDP协议规定,当...

程序人生 1365

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

网工大佬分析TCP连接重置

通过图7可以看出,服务器响应了SYN/ACK包,而立刻回复了一个RST,这是由于发送RST包的设备为中间的安全设备,在进行旁路阻断时,只能通过发送RST进行阻断,而无法拦截服务器已发出的SYN/ACK包。除服务器外,在连接建立阶段,客户端也有可能发送RST包,如图3、图4所示,在连接建立已经经历了SYN包、SYN/ACK包的交互后,甚至三次握手完成后,客户端突然发送RST包,表示客户端拒绝连接。因此,当客户端或服务器的任意一方需要拒绝连接,或认为连接出现错误时,即可以发送RST包重置当前TCP连接。

weixin_68261415的博客 1221

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TCP/IP卷一:69---TCP连接管理之(重置报文段RST(端口不存在、终止一条连接、半开连接、时间等待错误))

一、重置报文段(RST介绍) 在上图TCP头部中,其有一个RST位字段。一个将该字段置位的报文段被称作“重置报文段”或简称为“重置” 一般来说,当发现一个到达的报文段对于相关连接而言是不正确的时,TCP就会发送一个重置报文段。(此处,相关连接是指由重置报文段的TCP与IP头部的4元组所指定的连接)。重置报文段通常会导致TCP连接的快速拆卸 本文将构建一些场景来证明重置报文段的用途 二、...

董哥的黑板报 3680

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

TCP Flag究竟是怎么回事

学习TCP Flags 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段。 它们的含义是: SYN表示建立连接, FIN表示关闭连接, ACK表示响应, PSH表示有 DATA数据传输, RST表示连接重置。 其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应, 如果只是单个的一个SYN,它表示的只是建立连接。 TCP的几次握手就是通

linux_tcpdump的博客 1169

详解TCP的重置功能和实现连接结束功能

上一节我们完成了TCP三次握手原则,当双方通过三次握手交换了各自用于传递信息的参数后,双方进入数据分发模式,在TCP协议上说双方都进入了ESTABLISHED状态。基于早期质量低下的数据传输网络,连接建立只不过是开始,在通讯过程中保持稳定和通畅是TCP协议的重要内容。 由于TCP协议目的是保持长时间数据传输的稳定,因此它必须有效应对在连接过程中出现的突然中断情况。突然中断最常见的叫"半开“过程,也...

tyler_download的专栏 3564

网络运输层之(1)TCP连接管理

TCP提供面向连接的可靠数据传输服务。它在传输层协议中占据核心地位。

梅花香自苦寒来,宝剑锋从磨砺出。 3840

【博客613】tcp重置防火墙原理:构造RST报文来终结非法活跃连接

tcpkill 工具只能用来关闭活跃的 TCP 连接,无法关闭非活跃的 TCP 连接,因为 tcpkill 工具是等双方进行 TCP 通信后,才去获取正确的序列号,如果这条 TCP 连接一直没有任何数据传输,则就永远获取不到正确的序列号。killcx 工具可以用来关闭活跃和非活跃的 TCP 连接,因为 killcx 工具是主动发送 SYN 报文,这时对方就会回复 Challenge ACK ,然后 killcx 工具就能从这个 ACK 获取到正确的序列号。

qq_43684922的博客 3965
上一篇: 什么是DHCP Snooping?到底工作在第几层?
下一篇: 华为交换机遇到二层环路怎么办?这样也太简单了!
网络工程师俱乐部
博客等级 码龄5年 7444粉丝 1072原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值