Netscaler:突然ACK,RST数据包

时间:2015-11-30 13:40:48

标签: java networking tcp connection-reset

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

根据netscaler docs,Win重置数据包字段包含错误代码,在这种情况下为9300,意味着'清空空闲连接',这意味着netscaler运行“僵尸”进程,它清除空闲连接,并且此进程已将我们的连接识别为空闲。

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

更新 这里有更完整的通讯日志: enter image description here

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

好的,这是我读过的,并且已经说过了:

  1. 在TCP级别上,挂起连接的协议没有问题(即,在延长的时间段内没有发送任何内容,并且没有连接终止序列);
  2. 然而,问题在更高级别上升(为每个连接分配系统资源),并且为了解决这个问题,有一个非官方的(因为它容易出错)解决方案为挂起连接:为了优雅地终止连接,任何一方连接可能会发送keepalive个数据包(探测),并在发送几个数据包后才会采取措施,并且没有收到来自其他方的响应。
  3. Netscaler通过两种方式响应挂起连接的问题:在某些(可配置的)时间后关闭挂起的连接,或者它可以使用keepalive-probe apporach(并且还有可配置的参数)
  4. 虽然我们的客户确实发现了更深层次的问题,这些问题隐藏在服务实现中(长请求处理),但我们也可以应用keepalive-probe方法来停止连接重置。

    链接:

    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/