我有客户端和服务器组件。服务器可以安装在防火墙或负载均衡器后面。许多站点/论坛建议使用TCP保持活动功能,以避免由于不活动而终止连接。 问题是来自客户端的保持活动消息是否实际到达服务器? 我尝试使用tcptrace实用程序模拟部署,并发现保持活动消息未到达服务器仍然客户端正在获取保持活动消息的ACK。 我不确定LB / FW是否以相同的方式工作。
在防火墙和负载均衡器的情况下,保持活动是否可以避免由于套接字上的不活动而导致连接终止?
答案 0 :(得分:0)
答案当然是:"它取决于"。
许多防火墙和负载平衡器维护单独的前端和后端TCP连接,例如 :
client <-- TCP --> firewall/balancer <-- TCP --> server
对于这种情况,使用TCP keepalive将不按预期工作。为什么不? TCP keepalive仅适用于 TCP会话,而keepalive探测包更像是&#34;管理开销&#34;数据包承载的数据包。这意味着在客户端使用TCP keepalive的 a)仅意味着保持TCP连接到防火墙/平衡器,并且 b)防火墙/平衡器没有&#34;转发&#34;那些keepalive探测包到后端连接。
那么使用TCP keepalive有用吗?是。 其他类型的代理在OSI堆栈的较低层工作,执行转发这些数据包;使用TCP keepalive有助于通过这些类型的网络中介保持您的空闲连接。
如果您的客户端/服务器应用程序使用通过防火墙/平衡器的长期,可能空闲的TCP连接,那么确保该连接不会被拆除的最佳方式(有时是礼貌地,例如防火墙/平衡器发送的RST
数据包,有时是静默的)是使用&#34; ping&#34;或&#34;心跳&#34;应用程序层的消息。 (将此视为&#34;应用程序keepalive&#34;。)这只是从客户端向服务器发送例如的某种消息。一种简单有效的技术是让客户端定期向服务器发送一些字节,服务器回送给客户端。客户端知道它发送了哪些字节,当它从服务器接收到相同的字节时,它知道网络路径中的所有内容仍然按预期工作。
希望这有帮助!