Java Netscaler:突然确认,RST数据包

Java Netscaler:突然确认,RST数据包,java,networking,tcp,connection-reset,Java,Networking,Tcp,Connection Reset,我们的一个客户使用Netscaler作为Fuse服务器和Tomcat托管软件之间的平衡中间件。 目前,我们在软件和netscaler之间遇到了奇怪的通信行为(我们使用SpringWS发出SOAP请求):一段时间后,由于向netscaler发出请求并等待响应,netscaler将ACK、RST数据包发送到我们的服务器,因此Java抛出“连接重置”IOException。 tcp转储如下所示: 根据netscaler文档,重置数据包的Win字段包含错误代码,在这种情况下为9300,表示“清除空闲连

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

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

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

更新 以下是更完整的通信日志:
服务器和重置数据包之间的时间差是多少?您可以在netscaler vserver上为处于空闲状态的客户端调整空闲超时值,在服务上为需要较长时间响应的服务器调整空闲超时值

好的,这就是我读到的和听到的:

  • 在TCP级别,挂起连接的协议没有问题(即,在延长的时间段内没有发送任何内容,并且没有连接终止序列)
  • 然而,问题会在更高的级别上出现(为每个连接分配了系统资源),为了解决这个问题,挂起的连接有一个非官方的(因为它容易出错)解决方法:为了优雅地终止连接,连接的任何一方都可以发送
    keepalive
    数据包(探测)并在发送多个数据包且未收到另一方的响应后采取行动
  • Netscaler以两种方式响应挂起的连接问题:它要么在一定(可配置的)时间后关闭挂起的连接,要么使用keepalive probe apporach(在该方法上也有可配置的参数)
  • 虽然我们的客户确实发现了隐藏在服务实现中的更深层次的问题(长请求处理),但我们也可以应用keepalive Probe方法来停止连接重置

    链接:


    有一个终止挂起连接的设置,出现这个问题主要是因为缺乏知识(请参阅我的答案)