Perché BGP implementa il suo keepalive invece di usare tcp keepalive?


14

BGP non utilizza TCP keepalive, ma utilizza il proprio meccanismo keepalive. La mia domanda è: perché bgp non può accendere SO_KEEPaLIVE di TCP e vivere felicemente? perché non usa tcp keepalive e non implementa il proprio keepalive?

Risposte:


19

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.