Die Situation ist wie folgt:
http client ----> corporate firewall ----> http server
Aufgrund eines Keepalive würden Server und Client TCP-Verbindungen offen halten und der Client würde einen Verbindungspool für HTTP-Anforderungen verwenden.
Die Firewall hat die Regel, langjährige TCP-Verbindungen nach 1 Stunde zu "beenden". Das Problem ist, dass unser HTTP-Client nicht erkennt, dass die TCP-Verbindung zerstört wurde, und versucht hat, im Wesentlichen tote Verbindungen wiederzuverwenden, die auf unserer Seite so aussahen, als ob der Client nach einer gewissen Zeit "hängen geblieben" wäre. Eine Anfrage würde hängen bleiben, dann würde die nächste funktionieren, vermutlich weil eine neue Verbindung hergestellt wurde.
Hier stellt sich die Frage, mit welchem Mechanismus die Firewall TCP-Verbindungen so beendet, dass unser HTTP-Client sie nicht erkennen konnte. Ich habe versucht, dieses Verhalten auf verschiedene Arten lokal zu reproduzieren:
- Beenden Sie TCP-Verbindungen auf unserem Vyos-Router. Wireshark auf der Clientseite hat TCP FIN-ACK erfasst. OK
- Wenn Sie die TCP-Verbindungsclientseite in TCPView unter Windows beenden, hat Wireshark TCP-RST auf der Clientseite erkannt. OK
- Das Blockieren des Ports nach dem Herstellen der Verbindung zur clientseitigen Firewall führte zu einer Ausnahme beim Zurücksetzen des Sockets. OK
Ich habe einen Wireshark-Dump auf der Serverseite und habe versucht herauszufinden, ob die Firewall eine FIN oder RST mit sendet, ip.dst==serverip && (tcp.flags.reset==1 || tcp.flags.fin==1)
aber es wurde nichts angezeigt.
Darüber hinaus zeigt die Wireshark-Erfassung auf der Clientseite das Problem, wenn die HTTP-Anforderung ausgeht, gefolgt von einem Dutzend TCP-Neuübertragungen, die letztendlich nirgendwo hingehen.
Der HTTP-Client ist ein nativer Java- und / oder Jetty-HTTP-Client (beide ausprobiert). Beide konnten keine tote TCP-Verbindung erkennen. Ich möchte das Verhalten lokal reproduzieren, kann jedoch nicht herausfinden, auf welche zweifelhafte Weise die Firewall die Verbindungen beendet, und suche daher nach möglichen Antworten.