我试图弄清楚为什么我的应用程序的TCP / IP连接每10分钟(准确地说是在1-2秒内)不断打h。我运行Wireshark,发现在闲置10分钟后,另一端正在发送设置了重置(RST)标志的数据包。谷歌搜索告诉我“ RESET标志表示接收器已变得混乱,因此想中止连接”,但这与我需要的详细信息略有不同。是什么原因造成的?沿途有路由器负责吗,还是总是来自另一个端点?
编辑:在我的计算机和另一个端点之间有一个路由器(特别是Linksys WRT-54G)-在路由器设置中我应该寻找什么吗?
我试图弄清楚为什么我的应用程序的TCP / IP连接每10分钟(准确地说是在1-2秒内)不断打h。我运行Wireshark,发现在闲置10分钟后,另一端正在发送设置了重置(RST)标志的数据包。谷歌搜索告诉我“ RESET标志表示接收器已变得混乱,因此想中止连接”,但这与我需要的详细信息略有不同。是什么原因造成的?沿途有路由器负责吗,还是总是来自另一个端点?
编辑:在我的计算机和另一个端点之间有一个路由器(特别是Linksys WRT-54G)-在路由器设置中我应该寻找什么吗?
Answers:
一个“路由器”可能正在做任何事情-特别是NAT,它可能涉及到任何数量充斥着错误的混乱的流量...
设备将发送RST的原因之一是响应收到封闭套接字的数据包。
很难给出一个坚定而笼统的答案,因为自TCP诞生以来,所有可能的变态都已经在TCP上进行了访问,并且各种各样的人可能正在插入RST来试图阻止流量。(例如,某些“国家防火墙”的工作原理是这样的。)
如果连接闲置了x分钟,某些防火墙会这样做。一些ISP也出于各种原因将其路由器设置为执行此操作。
在这个时代,您将需要妥善处理(根据需要重新建立)该条件。
要注意的一件事是许多Linux netfilter防火墙配置错误。
如果您有类似的东西:
-A前进-m状态-状态相关,已确定-j接受
-A FORWARD -p tcp -j REJECT --reject-with tcp-reset
然后,数据包的重新排序可能导致防火墙认为数据包无效,从而生成重置,这将破坏正常的连接。
无线网络特别可能会进行重新排序。
相反,它应该是:
-A前进-m状态-状态相关,已确定-j接受
-A FORWARD -m状态--state无效-j DROP
-A FORWARD -p tcp -j REJECT --reject-with tcp-reset
基本上只要您有:
... -m状态-状态相关,已确定-j接受
随后应立即:
... -m状态-状态无效-j DROP
最好先丢弃一个数据包,然后生成可能破坏tcp重置的协议。当重置被证明是正确的东西时,重置会更好……因为这样可以避免超时。但是,如果有可能它们是无效的,那么它们会引起这种痛苦。