Socket KeepAlive-Parameterkonfiguration für Windows und Linux

Linux-System

Wenn der Client bei einer TCP-Verbindung aufgrund einiger anormaler Bedingungen, die die Netzwerktrennung verursachen, keine FIN-Close-Nachricht an den Server initiiert, bleibt die Verbindung für einen bestimmten Zeitraum bestehen, wenn der Server die Survival-Erkennung nicht einstellt Die Zugriffsressourcen des Servers sind erschöpft, wodurch die Annahme fehlschlägt. Um dieses Problem zu lösen, können Sie die Heartbeat-Paketmethode verwenden, um festzustellen, ob die Verbindung aktiv ist. Die SO_KEEPALIVE-Option existiert im Socket, die verwendet werden kann, um das gerade erwähnte Problem zu lösen.

Die Verwendung von SO_KEEPALIVE erkennt, ob der Host der anderen Partei abgestürzt ist, um zu verhindern, dass der Server die Eingabe der TCP-Verbindung für immer blockiert. Wenn nach dem Setzen dieser Option innerhalb von 2 Stunden kein Datenaustausch in beide Richtungen dieses Sockets stattfindet, sendet TCP automatisch einen Keepalive-Probe an die andere Partei.

An diesem Punkt treten die folgenden drei Situationen auf:

1. Die andere Partei empfängt alles normal: antwortet mit dem erwarteten ACK. Nach 2 Stunden sendet TCP einen weiteren Keepalive-Probe.

2. Der andere Teilnehmer ist abgestürzt und neu gestartet: Antworten Sie mit RST. Die ausstehenden Fehler des Sockets werden auf ECONNRESET gesetzt, und der Socket selbst wird geschlossen.

3. Es gibt keine Antwort von der Gegenstelle: Das TCP von Berkeley sendet weitere 8 Erkennungssegmente, eines im Abstand von 75 Sekunden, und versucht, eine Antwort zu erhalten. Geben Sie auf, wenn 11 Minuten und 15 Sekunden nach dem Senden des ersten Sondensegments immer noch keine Antwort erfolgt. Die ausstehenden Fehler des Sockets werden auf ETIMEOUT gesetzt, und der Socket selbst wird geschlossen. Im Pfad /proc/sys/net/ipv4/ können Sie drei Dateien sehen: tcp_keepalive_intvl, tcp_keepalive_probes und tcp_keepalive_time, die entsprechen: dem Zeitintervall zwischen zwei KeepAlive-Probes (75) und der Anzahl der KeepAlive-Probes vor der Trennung ( 9) , Die Zeitgeberzeit zum Einleiten der KeepAlive-Erkennung (7200).

Es gibt zwei Möglichkeiten, diese Einstellungen zu ändern:

1. Parameter direkt in die drei Dateien schreiben, aber sie müssen nach dem Neustart des Systems zurückgesetzt werden: sysctl -w net.ipv4.tcp_keepalive_intvl=30

2. Ändern Sie die Datei /etc/sysctl.conf und fügen Sie die Datei hinzu:

        net.ipv4.tcp_keepalive_intvl = 30

        net.ipv4.tcp_keepalive_probes = 3

        net.ipv4.tcp_keepalive_time = 300

Windows-System

1. KeepAliveTime   

Der Wert von KeepAliveTime steuert, wie oft das System versucht zu überprüfen, ob eine Verbindung im Leerlauf noch intakt ist. Wenn die Verbindung eine Zeit lang nicht aktiv war, sendet das System ein Keepalive-Signal, und wenn das Netzwerk in Ordnung und der Empfänger aktiv ist, antwortet es. Erwägen Sie, diesen Wert zu reduzieren, wenn Sie auf verlorene Empfänger empfindlich reagieren müssen, d. h. wenn Sie schneller herausfinden müssen, ob ein Empfänger verloren geht. Wenn es jedoch viele Instanzen von langfristig inaktiven Leerlaufverbindungen, aber weniger Instanzen von verlorenen Empfängern gibt, sollten Sie diesen Wert möglicherweise erhöhen, um den Overhead zu reduzieren.   

Wenn eine inaktive Verbindung 7200000 Millisekunden (2 Stunden) lang keine Aktivität aufweist, sendet das System standardmäßig eine Keepalive-Nachricht. Es wird generell empfohlen, diesen Wert auf 1800000 Millisekunden einzustellen, damit ein Verbindungsabbruch innerhalb von 30 Minuten erkannt wird.

Spezifischer Vorgang: Navigieren Sie zum Registrierungsunterschlüssel HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters, erstellen oder ändern Sie einen REG_DWORD-Wert mit dem Namen KeepAliveTime unter dem Unterschlüssel Parameters, und legen Sie eine geeignete Anzahl von Millisekunden für diesen Wert fest.

2. KeepAliveInterval   

Der Wert von KeepAliveInterval gibt die Häufigkeit an, mit der das System das Senden des "Keep Alive"-Signals wiederholt, wenn keine Antwort von der anderen Partei für das "Keep Alive"-Signal empfangen wird. Wenn die Anzahl aufeinanderfolgender "Keep-alive"-Signale, die ohne Antwort gesendet werden, den Wert von TcpMaxDataRetransmissions (unten beschrieben) überschreitet, wird die Verbindung abgebrochen. Wenn die Netzwerkumgebung schlecht ist und eine längere Antwortzeit zulässt, sollten Sie diesen Wert erhöhen, um den Overhead zu reduzieren; wenn Sie so schnell wie möglich überprüfen müssen, ob der Empfänger verloren gegangen ist, sollten Sie diesen Wert oder den Wert von TcpMaxDataRetransmissions verringern.   

Standardmäßig wartet das System 1000 Millisekunden (1 Sekunde), bevor es das „Keep Alive“-Signal erneut sendet, ohne eine Antwort zu erhalten, die je nach Bedarf geändert werden kann \Parameters-Registrierungsunterschlüssel, erstellen oder ändern Sie einen REG_DWORD-Wert mit dem Namen KeepAliveInterval unter dem Parameters-Unterschlüssel, und legen Sie die entsprechende Anzahl von Millisekunden für diesen Wert fest.

3. TCPMaxDataRetransmissions   

Der Wert von TcpMaxDataRetransmissions zeigt TCP-Datenneuübertragungen an, die Häufigkeit, mit der das System nicht reagierende Datensegmente auf bestehenden Verbindungen erneut überträgt. Wenn die Netzwerkumgebung schlecht ist, müssen Sie diesen Wert möglicherweise erhöhen, um eine effektive Kommunikation aufrechtzuerhalten und sicherzustellen, dass der Empfänger die Daten empfängt.   

Standardmäßig sendet das System das Datensegment, das keine Antwort zurückgegeben hat, fünfmal erneut, was je nach Bedarf geändert werden kann.

Spezifischer Vorgang: Navigieren Sie zum Registrierungsunterschlüssel HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters, erstellen oder ändern Sie den REG_DWORD-Wert namens TcpMaxDataRetransmissions unter dem Unterschlüssel Parameters, der Wert reicht von 0 bis 4294967295, und der Standardwert ist 5. Legen Sie entsprechend fest zur tatsächlichen Situation.

Guess you like

Origin blog.csdn.net/mawei7510/article/details/118191199