呵呵呵呵呵

萝莉有三好,柔体 轻音 易推倒。女神有三宝,干嘛 呵呵 去洗澡。宅男有三好:Dota 基友 破电脑。


TCP连接过程中常见RST标志情况说明

在一段连接正常的程序中,运行一段时间后,TCP连接莫名的断开,使用Wireshark.exe抓包,发现如下奇怪数据:

2014-09-11 21:02:34.417786000    192.168.17.199    192.168.17.15    TCP    54    51028 > 1004 [RST, ACK] Seq=6146 Ack=9206 Win=0 Len=0

客户端PC发送了RST标志,断开了与服务器的连接。

是 什么原因导致了RST的情况呢?我们知道,在TCP协议中RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。发送RST包关闭连接 时,不必等缓冲区的包都发出去,直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。

下面我列出常见的RST的情况:

最常见的,是在这个网络时代,访问一些网站,比如访问一下www.baidu.jp网站,在firefox中就会提示如下:

The connection was reset

The connection to the server was reset while the page was loading.


在Wireshark的规则中,输入tcp.flags.reset==1,即可看到记录。

可以看到记录如下:

11617    2014-09-12 00:02:14.188966000    119.63.198.132    192.168.1.105    TCP    60    http > 30736 [RST, ACK] Seq=1 Ack=288 Win=15544 Len=0

还有一种是端口未打开的情况下的连接也会导致RST的出现。

服务器程序端口未打开而客户端来连接。这种情况是最为常见和好理解的一种了。去telnet一个未打开的TCP的端口可能会出现这种错误。这个和操作系统的实现有关。在某些情况下,操作系统也会完全不理会这些发到未打开端口请求。
比如在下面这种情况下,主机241向主机114发送一个SYN请求,表示想要连接主机114的40000端口,但是主机114上根本没有打开40000这个端口,于是就向主机241发送了一个RST。这种情况很常见。

69038    2014-09-12 00:04:31.973733000    192.168.1.1    192.168.1.105    TCP    60    21013 > 30836 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0

更多内容:

BCB6删除Indy9的方法
BCB6升级Indy的详细方法步骤说明

本文链接地址:http://www.hehehehehe.cn/i/4.html