Verfügt eine TCP-Socket-Verbindung über ein „Keep Alive“?
Im Gegensatz zu HTTP-Keep-Alives bleiben TCP-Socket-Verbindungen nicht auf unbestimmte Zeit offen . Stattdessen unterliegen sie einem durch TCP Keep-Alive erzwungenen Timeout-Limit.
Einführung
TCP-Verbindungen umfassen zwei Sockets, die sich jeweils an einem Ende der Verbindung befinden. Normalerweise bleiben diese Sockets geöffnet, bis ein Ende die Verbindung beendet, was durch ein FIN-Paket angezeigt wird. Wenn jedoch eine unbeabsichtigte Socket-Beendigung auftritt, ist TCP Keep-Alive vorhanden, um veraltete Verbindungen zu erkennen und zu schließen.
Keep-Alive-Prozess
Auf Linux-Systemen TCP Keep-Alive arbeitet mit den folgenden Standardeinstellungen:
Wenn eine Verbindung länger als tcp_keepalive_time inaktiv bleibt, wird ein ACK-Paket an das andere Ende gesendet. Wenn nach einer bestimmten Anzahl von Tests keine Antwort erfolgt, wird die Verbindung über RST beendet.
Probleme
2-Stunden-Standard: Standardmäßig , wird der Keep-Alive-Prozess erst nach 2 Stunden Inaktivität gestartet, was dazu führen kann, dass veraltete Verbindungen bestehen bleiben.
Keep-Alive ist optional: Das Reagieren auf Keep-Alive-Pakete ist optional und Bei einigen Implementierungen werden sie möglicherweise gelöscht.
TCP-Timeouts ändern
Um TCP-Timeouts zu ändern, lesen Sie die folgenden betriebssystemspezifischen Anweisungen:
Linux:
Mac OS X:
Windows:
Das obige ist der detaillierte Inhalt vonWie funktioniert TCP Keep-Alive und wie lange bleiben Socket-Verbindungen offen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!