代码之家  ›  专栏  ›  技术社区  ›  Luke

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

  •  105
  • Luke  · 技术社区  · 17 年前

    我想弄清楚为什么我的应用程序的TCP/IP连接每10分钟就会打嗝一次(确切地说,在1-2秒内)。我运行wireshark,发现在10分钟的不活动之后,另一端发送一个设置了重置(rst)标志的包。一个谷歌搜索告诉我,“重置标志意味着接收器已经变得混乱,所以想中断连接”,但这有点缺少我需要的细节。是什么导致的?是否有可能是沿途的某个路由器负责,或者这总是来自另一个端点?

    编辑: 在我的计算机和另一个端点之间有一个路由器(特别是Linksys WRT-54G)——在路由器设置中有什么我应该查找的吗?

    6 回复  |  直到 8 年前
        1
  •  75
  •   Will Dean    17 年前

    一个“路由器”可以做任何事情——特别是NAT,它可能涉及到大量的bug干扰流量……

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

    很难给出一个坚定但笼统的答案,因为自从TCP诞生以来,它已经访问了所有可能的反常行为,并且各种各样的人可能正在插入RST以试图阻塞通信。(例如,有些“国家防火墙”是这样工作的。)

        2
  •  18
  •   Alexander    17 年前

    在对等端运行一个包嗅探器(例如wireshark),看看是发送第一个还是中间的人。

        3
  •  10
  •   OutputLogic    13 年前

    我刚刚花了不少时间来解决这个问题。所有建议的解决方案都不起作用。 结果发现,我们的系统管理员错误地将相同的静态IP分配给属于不同组但位于同一网络上的两个不相关的服务器。最终结果是VNC连接断断续续地断开,浏览器需要多次刷新才能获取网页,以及其他奇怪的事情。

        4
  •  4
  •   Brian Knoblauch    17 年前

    有些防火墙会在连接空闲X分钟的情况下这样做。一些互联网服务提供商也出于各种原因将路由器设置成这样。

    在这个时代,你需要优雅地处理(根据需要重新建立)这种情况。

        5
  •  4
  •   Vishal gupta    15 年前

    RST由执行主动关闭的一侧发送,因为它是发送最后一个ACK的一侧。因此,如果它从执行被动关闭的一侧接收到错误状态的fin,它将发送一个RST包,指示另一侧发生了错误。

        6
  •  3
  •   MKII    9 年前

    如果有一个路由器在做NAT,特别是一个资源很少的低端路由器,它将首先老化最旧的TCP会话。为此,它设置 RST 包中有效地通知接收站(非常不准确地)关闭连接的标志。这样做是为了节省资源。

    推荐文章