Antworten:
TCP "keepalive" ist eine Funktion, die nicht auf allen Betriebssystemen verfügbar ist. Es ist nicht im TCP-Standard selbst und es ist nicht zuverlässig. RC1122 spezifiziert es, gibt aber explizit an:
Implementierer KÖNNEN "Keep-Alives" in ihre TCP-Implementierungen aufnehmen, obwohl diese Vorgehensweise nicht allgemein akzeptiert wird. Wenn Keep-Alives enthalten sind, MUSS die Anwendung sie für jede TCP-Verbindung aktivieren oder deaktivieren können, und sie MÜSSEN standardmäßig deaktivieren.
Noch wichtiger:
Es ist äußerst wichtig zu bedenken, dass ACK-Segmente, die keine Daten enthalten, nicht zuverlässig von TCP übertragen werden. Wenn ein Keep-Alive-Mechanismus implementiert ist, DARF dieser NICHT als eine tote Verbindung interpretiert werden, wenn auf eine bestimmte Sonde nicht reagiert wird.
TCP keepalive verwendet das TCP-Protokoll in besonderer Weise und sendet ein doppeltes ACK, an das keine Daten angehängt sind. Die Sache ist: Sie können nicht damit rechnen, dass es verfügbar ist. Einige Firewalls filtern auch TCP-Keepalives.
Damit BGP ordnungsgemäß funktioniert, müssen bestimmte Timer für das Keepalive (wie oft wird eine Nachricht gesendet) und Hold (nach Ablauf dieser Zeit wird ein Peer als nicht reagierend deklariert) implementiert werden, die zuverlässig gesendet werden. Daher verwendet BGP eine eigene Keepalive-Nachricht, die im Vergleich zu TCP-Keepalive nicht viel Overhead (19 Byte) verursacht.