我试图找出为什么我的应用程序的TCP/IP连接每10分钟(确切地说,在1-2秒内)打嗝.我运行Wireshark并发现在10分钟不活动后,另一端正在发送一个设置了重置(RST)标志的数据包.谷歌搜索告诉我"RESET标志表示接收器已经变得混乱,因此想要中止连接"但这有点不足我需要的细节.可能是什么导致了这个?并且沿途的某个路由器是否有可能对此负责,或者这总是来自另一个端点?
编辑:我的计算机和另一个端点之间有一个路由器(特别是Linksys WRT-54G) - 在路由器设置中我应该寻找什么?
一个'路由器'可能正在做任何事情 - 特别是NAT,这可能涉及任何数量的错误缠扰交通流量......
设备发送RST的一个原因是响应于接收到关闭套接字的数据包.
很难给出一个坚定但一般性的答案,因为TCP自成立以来就已经访问过每一个可能的变态,并且各种各样的人可能会插入RST以试图阻止流量.(例如,有些'国家防火墙'就像这样工作.)
在对等体上也运行数据包嗅探器(例如,Wireshark)以查看它是发送RST的对等体还是中间的某个人.
我花了很长时间来解决这个问题.所提出的解决方案都没有奏效.原来我们的系统管理员错误地将相同的静态IP分配给属于不同组但位于同一网络的两个不相关的服务器.最终结果是间歇性地丢弃连接,浏览器必须刷新几次以获取网页,以及其他奇怪的事情.
如果连接闲置了x分钟,某些防火墙会这样做。一些ISP也出于各种原因将其路由器设置为执行此操作。
在这个时代,您将需要妥善处理(根据需要重新建立)该条件。
如果存在执行NAT的路由器,尤其是资源少的低端路由器,它将首先老化最旧的TCP会话。为此,它RST
在数据包中设置标志,该标志有效地告诉接收站(非常讨厌)关闭连接。这样做是为了节省资源。
RST由执行主动关闭的一方发送,因为它是发送最后一个ACK的一方。因此,如果它从处于错误状态的被动关闭一侧接收到FIN,它将发送RST数据包,该数据包指示发生错误的另一侧。