Risposte:
TCP "keepalive" è una funzionalità che non è presente su tutti i sistemi operativi. Non è nello stesso standard TCP e non è affidabile. RC1122 lo specifica, ma afferma esplicitamente:
Gli implementatori POSSONO includere "keep-alive" nelle loro implementazioni TCP, sebbene questa pratica non sia universalmente accettata. Se sono inclusi keep-alive, l'applicazione DEVE essere in grado di attivarli o disattivarli per ogni connessione TCP e DEVONO essere disattivati per impostazione predefinita.
Ancora più importante:
È estremamente importante ricordare che i segmenti ACK che non contengono dati non vengono trasmessi in modo affidabile dal TCP. Di conseguenza, se viene implementato un meccanismo keep-alive, NON DEVE interpretare la mancata risposta a qualsiasi sonda specifica come connessione morta.
TCP keepalive utilizza il protocollo TCP in un modo speciale, inviando un ACK duplicato senza dati collegati. La cosa è: non puoi contare sul fatto che sia disponibile. Inoltre alcuni firewall filtrano keepalive TCP.
Affinché BGP funzioni correttamente è necessario un modo per implementare timer specifici per keepalive (con quale frequenza inviamo un messaggio) e tenere premuto (dopo tale periodo dichiariamo che un peer non risponde) che vengono inviati in modo affidabile . Quindi BGP sta usando il proprio messaggio keepalive che non è un sacco di overhead (19 byte) rispetto al keepalive TCP.