我有客户端和服务器组件。服务器可能安装在防火墙或负载均衡器后面。许多站点/论坛建议使用TCP保持活动功能,以避免由于不活动而终止连接。问题是,客户端发出的保持生命的消息是否真的会到达服务器?我尝试使用tcptrace实用程序来模拟部署,发现保持活动消息没有到达服务器,而客户端仍在获取ACK以保持活动消息。我不知道LB/FW是否以同样的方式工作。
在防火墙和负载均衡器的情况下,保持存活是避免由于套接字上的不活动而导致连接终止的好选择吗?
发布于 2016-02-20 06:52:59
答案当然是:“视情况而定”。
许多防火墙和负载平衡器维护独立的前端和后端TCP连接。
client <-- TCP --> firewall/balancer <-- TCP --> server在这种情况下,使用TCP使活将使不像您所期望的那样工作。为什么不行?TCP使活只适用于该TCP会话,而持活探测包更像是承载数据包的“管理开销”数据包。这意味着:( a)在客户端使用TCP保持活动只意味着保持到防火墙/平衡器的TCP连接保持活动;( b)防火墙/平衡器不会将那些保持活动的探测数据包“转发”到后端连接。
那么,使用TCP使活是有用的吗?是。还有其他类型的代理,它们在OSI堆栈中的较低层工作,并转发这些数据包;使用TCP持活活有助于通过这些类型的网络中介体保持空闲连接的活动。
如果您的客户机/服务器应用程序通过防火墙/平衡器使用长时间的、可能空闲的TCP连接,则确保该连接不被拆除的最佳方法(有时是礼貌地,例如防火墙/平衡器发送的RST数据包,有时是静默的)是在应用层使用"ping“或”心跳“消息。(把这看作是“保持应用程序活力”)。这只是从客户端发送到服务器的某种消息。一种简单而有效的技术是让客户机定期向服务器发送一些字节,服务器将这些字节回显回客户机。客户端知道它发送了哪些字节,并且当它从服务器收到这些相同的字节时,它知道网络路径中的所有东西仍然按预期工作。
希望这能有所帮助!
https://stackoverflow.com/questions/18467293
复制相似问题