2013-08-27 20 views
1

我有客户端和服务器组件。服务器可能安装在防火墙或负载平衡器后面。许多站点/论坛建议使用TCP保持活动功能以避免由于不活动导致连接终止。 问题是来自客户端的保持活动消息是否会真正到达服务器? 我试图模拟部署使用tcptrace实用程序,并发现保持活动消息没有达到服务器仍然客户端获取ACK保持活着的消息。 我不确定LB/FW是否以相同的方式工作。保持活动可用于负载均衡器和防火墙

在防火墙和负载均衡器的情况下,是否保持活动状态以避免由于套接字处于非活动状态而导致连接终止?

回答

0

答案当然是:“取决于”。

许多防火墙和负载均衡器维护独立的前端和后端TCP连接,例如

client <-- TCP --> firewall/balancer <-- TCP --> server 

对于这样的情况下,使用TCP存活将工作如你所期望。为什么不? TCP keepalive仅适用于,即 TCP会话,并且keepalive探测包更像是“数据承载包”的“管理开销”包。这意味着,在客户端上使用TCP保持连接的仅仅意味着保持TCP连接到防火墙/平衡器活动,并且b)防火墙/平衡器不会将那些保持活动的探测分组“转发”到后端连接。

那么使用TCP keepalive有用吗?是。有其他类型的代理工作在低层OSI堆栈,并且哪些转发这些数据包;使用TCP keepalive有助于通过这些类型的网络中介保持空闲连接的活跃。

如果您的客户端/服务器应用程序通过防火墙/均衡器长寿命,可能是空闲的TCP连接,最好的办法,以确保该连接未拆除(有时是有礼貌,通过发送RST包防火墙/平衡器有时会默默地)在应用层使用“ping”或“heartbeat”消息。 (将此视为“应用程序保持活动”。)这只是某种类型的消息,例如发送给例如从客户端到服务器的。一种简单而有效的技术是让客户端周期性地向服务器发送一些字节,服务器将这些字节回送给客户端。客户端知道发送了哪些字节,以及何时从服务器接收到相同的字节,它知道网络路径中的所有内容仍按预期工作。

希望这有助于!