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

news2024/11/26 20:28:05

号主:老杨丨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年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

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

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

相关文章

kubernetes中微服务部署

微服务 问:用控制器来完成集群的工作负载,那么应用如何暴漏出去? 答:需要通过微服务暴漏出去后才能被访问 Service 是一组提供相同服务的Pod对外开放的接口借助Service,应用可以实现服务发现和负载均衡Service 默认只…

网优学习干货:王者荣耀游戏用户体验洞察及质差识别(1)

一、课题背景 二、课题目的 针对热点游戏(王者荣耀)进行业务质量评估,并通过对端到端定界分析,从无线、核心网、互联网维度识别影响用户体验关键因素,为游戏用户的体验优化提供依据。 三、课题实施进度 王者荣耀卡顿特…

基于STM32的智能门锁

基于STM32的智能门锁 在现代家居安全领域,智能门锁已经成为提升居住安全和便利性的关键技术之一。本文将介绍一个基于STM32微控制器的智能门锁项目,该项目集成了多种模块,包括步进电机、矩阵键盘、OLED显示屏、蓝牙模块和RFID刷卡模块&#…

小程序项目实践(一)--项目的初始化以及前期的准备工作

目录 1.起步 1.1 uni-app 简介 1.2 开发工具 1.2.1 下载 HBuilderX 1.2.2 安装 HBuilderX 1.2.3 安装 scss/sass 编译 1.2.4 快捷键方案切换 1.2.5 修改编辑器的基本设置 1.3 新建 uni-app 项目 1.4 目录结构 1.5 把项目运行到微信开发者工具 1.6 使用 Git 管理项目 …

DDIM扩散模型相关原理

DDIM扩散模型相关原理 Denoising Diffusion Implicit Models 论文下载地址:https://arxiv.org/abs/2010.02502

CentOS 安装 nvm+Node.js

CentOS 安装 nvmNode.js 文章目录 CentOS 安装 nvmNode.js一、安装nvm①:更新系统包②:安装依赖③:安装 NVM④:配置 NVM⑤:验证安装 二、安装 Node.js①:查看可安装版本②:安装(指定…

腾讯广告-web转化数据api自归因对接记录

文章目录 前言一、参考文档记录二、使用步骤1.整体流程(可以根据官方最新的文档来做)2.关于上报代码参考3.关于uniapp网页在history模式下接收不到url参数的问题 总结 前言 项目中需要做对扫码加粉的监测,于是用到了腾讯广告的Web转化数据AP…

七载耕耘,全面盘点:Zabbix实战文章精华大全分享

在数字化转型的加速推进中,IT监控系统的稳定与高效性已成为企业IT运维战略的核心要素。Zabbix作为开源监控领域的佼佼者,凭借其卓越的功能集成、灵活的定制能力以及相对经济的运营成本,成功吸引了全球范围内众多企业的目光。 在国内&#xf…

zynq sdk裸机开发调试问题,不能进入中断问题

zynq sdk裸机开发总是时不时的就不能进入中断了, 找来找去的找不到原因. 后来我经过多次尝试. 将问题限位到非常小的范围. 只用了最普通的内部定时器, 开启中断也是偶尔会进去偶尔会进不去. 我的版本是 2018.3 后来多次尝试慢慢的摸索出经验规律, 只要修改过代码重新开始调试.就…

Math.js 基础使用:常用的数值操作

一. 引言 在进行数学计算和处理时,JavaScript 提供了许多强大的工具函数,其中最常用且广泛应用的就是 Math 对象中的函数。无论是进行简单的数值操作还是复杂的数学运算,Math 工具函数都能发挥出强大的作用。 本篇文章将带您探索 JavaScrip…

汽车3d动效的作用!云渲染实现3d动效

在汽车营销领域,3D动效技术以其独特的视觉冲击力和交互体验,正成为吸引消费者注意力的新利器。而云渲染技术的应用,更是让这些动效如虎添翼,实现了高效、低成本的3D视觉内容制作与分享。本文将探讨汽车3D动效的作用,并…

闯关leetcode——70. Climbing Stairs

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/climbing-stairs/description/ 内容 You are climbing a staircase. It takes n steps to reach the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you cl…

GPT 生成绘画_Java语言例子_超详细

基于spring ai :简化Java AI开发,提升效率与维护性 过去在使用Java编写AI应用时,主要困境在于缺乏统一的标准化封装,开发者需要针对不同的AI服务提供商查阅各自独立的文档并进行接口对接,这不仅增加了开发的工作量&am…

Halcon Tuple数组的增删查改

read_image (Image33, E:/Halcon数据/资源图片/33.png) dev_get_window (WindowHandle) dev_set_draw (margin) get_image_size (Image33, Width, Height) query_font (WindowHandle, Font) FontWithSize : Font[0]-30 set_font (WindowHandle, FontWithSize) 增加 NewTT1T2 …

学习如何将Spring Boot Jar包注册成Windows服务

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 在开发Spring Boot应用时,我们通常通过命令行或IDE手动启动项目。然而,在生产环境中,为了提升效率和稳定性,我们更希望应用能够自动启动,并且作为Wi…

2024年软件设计师中级(软考中级)详细笔记【5】软件工程基础知识上(分值10+)

第5章软件工程 目录 前言第5章 软件工程基础知识(上)(分值10)5.1 软件工程概述5.1.4 软件过程 5.2 软件过程模型5.2.1 瀑布模型 (Waterfall Model)5.2.2 增量模型5.2.3 演化模型5.2.4 喷泉模型(Water Fountain Model&a…

java继承-cnblog

类的继承 继承本身 一个类要继承另一个类需要使用关键字extends 关键字extends的使用 class a extend b{}由于java只支持单继承,所以同时继承多个父类是错误的 在创造子类对象时,会先执行父类的构造方法,再执行子类的构造方法 举例说明 …

Linux 云服务器部署kafka(单机版)

进入对应安装目录 cd /usr/local/ 下载对应的安装包 wget https://downloads.apache.org/kafka/3.8.0/kafka_2.13-3.8.0.tgz 解压缩 tar zxf kafka_2.13-3.8.0 进入安装目录 cd /usr/local/kafka_2.13-3.8.0/ 修改配置文件 vim ./config/server.properties 主要修改…

Flexbox弹性盒子详解

弹性盒子模型详解 Flex弹性盒子模型详解Flex布局的基本概念Flex布局的常见属性及用法1. 主轴方向2. 主轴换行方式3. flex-flow(分开写更好)4. 主轴对齐方式5. 侧轴对齐方式5.1 一行的情况5.2 多行的情况 6. 伸缩性6.1 flex-basis6.2 flex-grow&#xff0…

常州威雅学校:课外拓展活动 用热爱营造无限可能

作为全人教育理念的躬行实践,常州威雅中小学部的课外拓展活动(E&X)也伴随着初秋温和的风紧锣密鼓地铺展开来。 常州威雅为中小学部的学生们提供了几十项的课外拓展活动,从入门到进阶,展现了艺术、音乐、体育、科技…