Vor kurzem hatte ich eine Diskussion mit jemandem, der mit den Firewall-Einstellungen seines Unternehmens in Konflikt geraten war. Die Firewall löscht in ihrer Statustabelle jede Verbindung, die länger als 10 Minuten inaktiv war. Wenn die Firewall ein Segment für eine Verbindung empfängt, die nicht in ihrer Statustabelle enthalten ist, wird das Segment leider stillschweigend gelöscht. Das bedeutet, dass es bis zu 8 Minuten dauern kann, bis eine STCP-Anwendung erkennt, dass sie nicht mehr mit ihrem Endpunkt kommunizieren kann, und die Verbindung wiederherstellt. Dies war für seine Benutzer sehr ärgerlich.
An diesem Punkt schlug ich vor, die Anwendung so zu ändern, dass sie eine konfigurierbare Keepalive-Meldung der Anwendungsschicht enthält. Leider ist es nicht möglich, die Anwendung zu ändern. Die Anwendung setzt auch nicht die Socket-Option SO_KEEPALIVE, so dass selbst eine Änderung des systemweiten Keep-alive-Timers von der Standardeinstellung von 2 Stunden auf 9 Minuten das Problem nicht lösen wird.
Die Lösung ist ein Keep-Alive-Segment der TCP-Schicht eines Drittanbieters. Dabei handelt es sich um ein Keep-Alive-Segment der TCP-Schicht, das scheinbar von der Anwendung stammt (mit der IP-Adresse des Moduls als Quelladresse und dem TCP-Port der Anwendung als Quellport) und an die IP-Adresse und den Port des entfernten Hosts gesendet wird. Die Firewall vermerkt dies als Aktivität und hält die Verbindung in ihrer Statustabelle fest.
Die Erklärung und die Beispiele für mein 3rd_party_keep_alive-Tool sind zu lang für diesen Blogbeitrag, daher finden Sie die Details hier.