2013-08-27 54 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」消息。 (將此視爲「應用程序保持活動」。)這只是某種類型的消息,例如發送給例如從客戶端到服務器的。一種簡單而有效的技術是讓客戶端週期性地向服務器發送一些字節,服務器將這些字節回送給客戶端。客戶端知道發送了哪些字節,以及何時從服務器接收到相同的字節,它知道網絡路徑中的所有內容仍按預期工作。

希望這有助於!