TCP异常终止(reset报文)

作者:易隐者 发布于:2012-4-25 21:42 Wednesday 分类:网络分析

TCP异常终止(reset报文)

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

点击查看原图

TCP异常终止的常见情形

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

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

点击查看原图

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

点击查看原图

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

点击查看原图

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

点击查看原图

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

点击查看原图

 Reset报文的利用

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

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

2 利用reset报文实施攻击

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


 

标签: TCP异常终止 RST reset


您对本文的评分:
当前平均分: 9.7(51 次打分)

版权所有:《蚂蚁网-多维人生,三实而立!》 => 《TCP异常终止(reset报文)
本文地址:http://www.vants.org/?post=22
除非注明,文章均为 《蚂蚁网-多维人生,三实而立!》 原创,欢迎转载!转载请注明本文地址,谢谢。

评论:

格格巫不想了
2017-02-18 13:01
很好奇RESET报文由谁来发送?
加入是接收端程序崩溃退出了这种情形,发送端再发送data的时候,这个时候程序应该没有能力发出报文来吧,都已经崩溃退出了,难道是系统自动发出的?
hanpfei
2017-06-08 17:25
@格格巫不想了:TCP 协议是由操作系统内核维护的,由操作系统发 RESET 报文,有什么好奇怪的。
plivm
2016-11-21 10:51
用tcpdump 查看到了reset,如何分析是属于哪种情况呢,能不能请楼主分享一下分析方法,多谢
易隐者
2016-11-22 11:02
@plivm:看报文交互情况啊兄弟
逍遥
2016-07-08 09:16
这个查看的软件叫什么名字,可以发我一份吗?谢谢!
易隐者
2016-07-08 09:18
@逍遥:科来,wireshark都可以
haoran
2015-08-18 21:56
第三种是神马意思?
sahen
2016-09-07 16:14
@haoran:@haoran 关于第三种的意思是,TCP第一次握手,建立连接时,客户端发送syn包到服务器,并进入SYN_SEND状态,等待服务器确认.这种情况的典型场景是,内网客户端通过防火墙做目的NAT的公网IP地址访问内网WEB服务器,此时,会造成第一次握手的SYN包,与第二次握手时的syn+ack包来回路径不一致,内网客户端收到syn+ack包后,查看TCP连接表中的SYN_SEND状态,不能与之对应,因此,发送一个RESET包给服务器,告之其释放此TCP连接。
hanpfei
2017-06-08 19:11
@sahen:说一下我对这段话的理解。NAT 本身就分支持 hairpin 和 不支持 hairpin 之分,也就是是否支持回传。内网中的一台主机,通过相同内网中一台 Web 服务器的公网地址访问该 Web 服务器的时候,连接建立的 SYN 包发到 NAT 处,NAT 发现目标主机就在内网中,于是它没有为发起连接的主机做 NAT 映射,直接将包转给了目的 Web 服务器主机,此时这个包的源 IP 与目的 IP 将都是内网的私有 IP 地址。后面 Web 服务器收到 SYN 包,回一个 SYN ACK 包,由于源主机没有做 NAT 映射,此时这个 SYN ACK 包在发给连接发起的源主机时,它的目的 IP 和 源 IP 也将都是内网私有 IP。这与源主机的期待不同,它本来期待回的 SYN ACK 包的源 IP 是一个公网 IP的。

是这样理解的么?
没昵称
2015-06-14 20:48
学习
路人甲
2015-02-17 09:43
看了这篇文章,感觉就没有讲明白发送RST报文,就像博主所说的第四中情况,假如客户端突然断电,那么服务端与客户端未经过4次挥手,这个时候,服务端该怎么释放其与该客户端链接的资源?你的文章中说服务端要发送RST报文以获得资源释放,这时候服务端发送RST报文是给已经断电的客户端,如果发给断电的客户端,那还有什么意义?!如果发给自己,那这里会有什么含义?博主在这里没有说清楚呀!
易隐者
2015-02-26 12:13
@路人甲:这个RST报文还是有意义的,举个简单的例子,比如在服务器与客户端之间的防火墙设备,其在收到这个RST报文之后,会释放这个连接。
ruby97
2013-09-16 15:12
感谢分享,以后会常来学习的。
Mr.cai
2013-04-17 16:48
学习……
易隐者
2013-04-18 09:04
@Mr.cai:欢迎交流,感谢关注。

发表评论:

Powered by 易隐者 基于emlog 皖ICP备12002343号-1