什么导致TCP / IP重置(RST)标志被发送?

我试图找出为什么我的应用程序的TCP / IP连接保持打嗝每隔10分钟(正好在1-2秒内)。 我运行了Wireshark,发现在10分钟的不活动状态下,另一端正在发送一个包含复位(RST)标志的数据包。 谷歌search告诉我“RESET标志表示接收器已经变得困惑,所以想中止连接”,但是这是有点缺乏我需要的细节。 什么可能导致这个? 有可能是路由器上的某个路由器负责它,或者它总是来自另一个端点?

编辑:有一个路由器(特别是一个Linksys的WRT – 54G)坐在我的电脑和另一个端点之间 – 有什么我应该找的路由器设置?

一个“路由器”可以做任何事情 – 特别是NAT,这可能涉及任何数量的错误缠身交通…

设备发送RST的一个原因是响应接收封闭套接字的数据包。

很难给出一个坚定的,但一般的答案,因为每一个可能的变态已经被TCP访问,并且各种各样的人可能会插入RST来阻止stream量。 (例如,有些“国家防火墙”就是这样工作的。)

运行一个数据包嗅探器(例如,Wireshark),也可以看到对方是谁发送RST或中间的某人。

我花了一些时间解决这个问题。 没有提出的解决scheme工作。 原来,我们的系统pipe理员错误地分配了相同的静态IP给属于不同组的两个不相关的服务器,而是坐在同一个networking上。 最终结果是断断续续地断开了vnc连接,浏览器必须刷新几次以获取网页,以及其他奇怪的事情。

由于是发送最后一个ACK的一方,所以RST是由主动closures发送的。 所以如果从错误的状态收到被动closures端的FIN,它会发送一个RST包,表明对方发生了错误。

如果连接空闲了x分钟,某些防火墙会这样做。 一些ISP也设置他们的路由器出于各种原因。

在这个时代,你需要优雅地处理(根据需要重新build立)该条件。

如果有一台路由器在做NAT,特别是一个资源很less的低端路由器,它将会老化最早的TCP会话。 要做到这一点,它在数据包中设置RST标志,有效地告诉接收站(非常不正常地)closures连接。 这是为了节省资源。