【问题标题】:Netscaler: sudden ACK,RST packetNetscaler:突然的 ACK,RST 数据包
【发布时间】:2016-03-04 04:07:49
【问题描述】:

我们的一个客户使用 Netscaler 作为 Fuse 服务器和我们的 Tomcat 托管软件之间的平衡器中间件。 目前,我们的软件和 netscaler 之间遇到了奇怪的通信行为(我们正在使用 Spring-WS 发出 SOAP 请求):一段时间后,由于正在向 netscaler 发出请求并且正在等待响应,因此 netscaler 发送 ACK、RST 数据包到我们的服务器,因此,Java 抛出“连接重置”IOException。 tcp转储如下:

根据 netscaler 文档,重置数据包的 Win 字段包含错误代码,在这种情况下为 9300,表示“清理空闲连接”,这又意味着 netscaler 运行“僵尸”进程,该进程清理建立空闲连接,并且该进程已将我们的连接识别为空闲。

为什么在这种情况下,netscaler 会将连接视为idle

更新 这是更完整的通信日志:

【问题讨论】:

    标签: java networking tcp connection-reset


    【解决方案1】:

    服务器和重置数据包之间的时间差是多少?您可以在 netscaler 虚拟服务器上为空闲的客户端调整空​​闲超时值,在服务上为需要很长时间才能响应的服务器调整空闲超时值。

    【讨论】:

    • 有杀掉挂起连接的设置,出现问题主要是缺乏知识(请看我的回答)
    【解决方案2】:

    好的,这就是我读过和说过的:

    1. 在 TCP 级别上,挂起连接的协议没有问题(即在很长一段时间内没有发送任何内容,并且没有连接终止序列);
    2. 尽管如此,问题在更高级别上出现(为每个连接分配系统资源),为了解决这个问题,有一个非官方的(因为它容易出错)用于挂起连接的解决方法:为了优雅地终止连接,任何一方的连接可能会发送keepalive 数据包(探测)并在发送了几个数据包且未收到另一端的响应后采取行动。
    3. Netscaler 以两种方式响应挂起的连接问题:它要么在一定(可配置的)时间后关闭挂起的连接,要么可以使用 keepalive-probe apporach(还有可配置的参数)李>

    虽然我们的客户确实发现了隐藏在服务实现中的更深层次的问题(长请求处理),但我们也可以应用 keepalive-probes 方法来停止连接重置。

    链接:

    http://www.tcpipguide.com/free/t_TCPConnectionManagementandProblemHandlingtheConnec-3.htm

    https://www.citrix.com/blogs/2012/07/26/netscaler-10-keep-alive-value-add-to-the-tcp-stack-with-profiles/

    【讨论】:

      猜你喜欢
      • 2012-08-18
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      相关资源
      最近更新 更多