如何设置TCP连接重置
一起学嵌入式
20浏览
0评论
0点赞
2024-12-18
连接建立失败并不仅仅包含无响应问题,还有一种常见的情况,即RST(Reset)包的发送。RST包是TCP协议中用来进行“连接重置”的数据包,本文将围绕RST包进行详细展开讨论。
TCP连接中为何会有RST包?TCP RST包,即TCP头部中RST位设置为1的数据包。根据RFC 793,TCP RST包用于终止一个现有的连接或拒绝一个连接请求。当一个TCP端点希望立即终止一个连接时,它会发送一个RST包。因此,当客户端或服务器的任意一方需要拒绝连接,或认为连接出现错误时,即可以发送RST包重置当前TCP连接。RST包在TCP时序图中的体现如图1所示:图1:时序图中的TCP RST包 连接建立阶段的RST包如何分析?在连接建立阶段,服务器可发送RST包拒绝连接建立,如图2所示,在连接建立阶段,服务器发送RST包,表示服务器拒绝连接。图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包,表示客户端拒绝连接。图3:客户端在收到SYN/ACK包后发送RST图4:客户端在三次握手成功后立即发送RST对于图3、图4中出现的情况,可以直接判断为客户端发生异常或客户端正在发起端口扫描攻击。其中图3的流量为典型客户端发起TCP SYN端口扫描时序图,图4的流量为典型的客户端发起TCP Connect端口扫描时序图,如遇到此类时序图,请使用策略封禁该客户端IP地址,并检查客户端IP地址的其它流量,观察其有无其它攻击行为。 数据传输阶段的RST包如何分析?在数据传输阶段,客户端和服务器均可能随时发出RST,此时RST的原因一定是连接出现异常。对于此类故障,常见如下原因:
图5:多次重传后,服务器认为会话错误发送RST
图6:120秒无交互后,服务器认为会话超时发送RST如果在会话交互阶段出现了RST的情况,建议通过分析时序图判断重置的原因是错误或超时。如果怀疑RST包是从中间设备发出,可以通过对比多个位置的同时段流量,确定RST包来源,从而进一步排查故障原因。 被防火墙阻断的会话时序图是什么样的?当ACL或安全策略匹配后的动作为Reject时,或安全设备是旁路部署无法直接丢弃流量时,安全设备会采用发送RST包方式去处理策略命中的会话。被RST的会话会因此中断。被安全策略阻断的会话如图7所示图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所示:图8:“假RST”与“真RST”的TTL不同图9则描述了一种更加容易理解的旁路阻断:客户端发送ClientHello包后,中间的旁路设备阻断了客户端,但未向服务器发送RST,导致服务器认为会话未中断,还在继续发送后续ServerHello数据包:图9:旁路阻断RST总之,如果会话过程中出现RST包,需要考虑该RST包是否由中间旁路阻断设备发出,可以通过该RST包的RST位、序列号、IP TTL等方式,或是直接多点抓包对比分析,综合判断。 连接断开阶段的RST包如何分析?在连接断开阶段,也可能出现RST包,这种情况一般是由于接收FIN包的一方或中间的负载、安全设备存在关于连接断开的优化机制。因为会话如果经过FIN包四次断开结束,先发FIN包的一方会经过TCP TIME_WAIT状态,经过2MSL时间才会进入到close状态,彻底关闭连接。在2MSL时间段内,此socket不可用。而被RST重置的会话,则不存在TIME_WAIT状态,因此,一些连接在出现FIN包后,负载/安全设备认为该连接已经可以被结束,于是发送RST包快速关闭会话。这种方法虽然快捷但不符合TCP协议标准。被RST加速断开的会话如图10和图11所示:图10:客户端FIN后出现RST快速断开连接图11:服务器FIN后出现RST快速断开连接在TCP连接的生命周期中,RST包扮演了一个关键角色,通过时序图观察RST包出现时机的分析,我们可以看到RST包在连接建立、数据传输、异常阻断、连接断开阶段的出现原因和影响。了解RST包的发送原因,是维护网络稳定性和安全性的重要技能。通过细致的RST包分析,可以有效地分析网络故障、优化网络性能和提升网络的安全性来源:科来文章来源于网络,版权归原作者所有,如有侵权,请联系删除。
声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
-
AT89C51是40针微控制器,属于8051系列微控制器。它有四个端口,每个端口有8位P0,P1,P2和P3。AT89C51具有4K字节的可编程闪存。端口P0覆盖引脚32至引脚39,端口P1覆盖引脚1至引脚8,端口P2覆盖引脚21至引脚28,端口P...
-
对于pic单片机的学习,很多朋友总是能充满激情,不断利用闲余时间研究pic单片机的各类技术。而谈及pic单片机,必须牵扯至51、AVR单片机。因此本文中,将探讨pic单片机以及51、AVR单片机对于IO口的操作。对于本文,希...
-
对于pic单片机,大家或多或少均有所耳闻。但是,大家对pic单片机有多少了解呢?是否熟知不同类型的pic单片机呢?本文中,将探讨pic单片机的类型分类以及特征。此外,本文的探讨基于pic 8位单片机而进行。
由美国Micro...
-
单片机编程软件是单片机编程不可或缺的利器,一款好的单片机编程软件更能极大程度提高开发效率。在本文中,主要为大家介绍IAR单片机编程软件的菜单栏,以帮助大家更好了解这款单片机编程软件。
Ⅰ、写在前面
IAR软件...
-
单片机编程软件数量不多,Keil和IAR为当前主流的单片机编程软件。对于每门单片机编程软件的学习,总需耗费一定必要的时间。为最大化减少大家对单片机编程软件学习时间的投入,本文特地带来IAR单片机编程软件相关教程...
-
好的单片机编程软件受到众多开发人员青睐,而对单片机编程软件了解较多的朋友都知道,目前市场上主要流通的单片机编程软件为Keil和IAR。本文中,主要为大家讲解IAR单片机编程软件的基础教程。如果你对IAR存在一定兴...
-
1、P1口某一位的内部电路结构如下图所示,在51单片机的P0,P1,P2,P3口中,P1口的结构最简单,用途也最单一。仅仅只作为普通的数据输入/输出(I/O)端口使用。从图中可以看出,P0口与P1口的主要差别在于:P1端口用内...
-
C51最小系统电路在网上一搜一大把,大同小异。我略做改动后如图:
加一个11.0592MHZ的晶振是为了以后做串口通信时和PC有相同的波特率。可用短路帽切换。
说说板子的布局:网上卖的最小系统都是把板子做的非常小,...
-
51单片机没有PWM输出功能,可以采用定时器配合软件的方法实现,对精度要求不高的场合是非常实用的。采用高速光隔6N137输出,并将PWM的信号倒相。
一、 工作原理
二、PWM输出
1. 固定脉宽PWM输出
用T0定时器完成PWM输...
-
-
-