Einzelnen Beitrag anzeigen

tgvoelker

Registriert seit: 9. Sep 2002
Ort: Oelsnitz, Vogtland
39 Beiträge
 
Delphi 2009 Professional
 
#17

AW: Dauerhafte "Onlineüberprüfung" mit Serverseitigen Befehlen

  Alt 26. Mai 2013, 20:21
TCP implementiert immer Verbindungen mit Status. "Keepalive" benötigst für TCP-Verbindungen nuraus einem Grund: um zwischen Server und Client vorhandenen Firewalls davon abzuhalten, die Verbindung nach Inaktivität zu löschen, während Server und/oder Client diese noch als "bestehend" ansehen.

Du erkennst einen Verbindungsverlust/abbau von Seiten des Clients auf Serverseite in zwei Fällen: erstens wenn der Client die Verbindung beendet und zweitens, wenn der Server was an den Client schickt und darauf kein ACK bekommt, bis der Retransmission Timer abgelaufen ist. Die Verbindungskontrolle erfolgt dabei auf Protokollebene.

Das Problem dabei ist, daß die Anti-DoS-Mechanismen von Firewalls restriktive Schranken für die Anzahl und Zeitdauer inaktiver Verbindungen haben (Hintergrund dafür ist, daß DDoS-Angriffe mit halboffenen Verbindungen geführt wurden) - was dazu führt, daß die Firewalls TCP-Verbindungen ohne periodische Aktivität schon nach kurzer Zeit aus der Verbindungsliste schmeißen. Beispiel: Ich hatte mal einen Levelone Router, der aktive FTP-Sitzung abgebrichen hat, wenn die Übertragung einer einzelnen Datei länger als 10 Minuten gedauert hat - das Ding hat FTP-DATA offengelassen und FTP-CONTROL geschlossen. Aufgefallen ist das erst am Ende der Übertragung, bei kleinen dateien ging alles.

Sauberer kannst Du das mit UDP oder auch mit ICMP implementieren, aber das erfordert, daß die Clients nicht hinter einer NAT-Firewall stecken.
Thomas Völker
  Mit Zitat antworten Zitat