¿Por qué BGP implementa su propio keepalive en lugar de usar tcp keepalive?

14

BGP no usa TCP keepalive, usa su propio mecanismo keepalive. Mi pregunta es ¿por qué bgp no puede activar SO_KEEPaLIVE de TCP y vivir felizmente? ¿Por qué no utiliza tcp keepalive e implementa su propio keepalive?

Hemanth
fuente

Respuestas:

19

TCP "keepalive" es una característica que no está presente en todos los sistemas operativos. No está en el estándar TCP en sí mismo y no es confiable. RC1122 lo especifica, pero declara explícitamente:

Los implementadores PUEDEN incluir "keep-alives" en sus implementaciones de TCP, aunque esta práctica no es universalmente aceptada. Si se incluyen las funciones de mantenimiento, la aplicación DEBE poder activarlas o desactivarlas para cada conexión TCP, y DEBEN desactivarse de manera predeterminada.

Incluso mas importante:

Es extremadamente importante recordar que los segmentos ACK que no contienen datos no se transmiten de manera confiable por TCP. En consecuencia, si se implementa un mecanismo para mantener vivo, NO DEBE interpretar la falla al responder a una sonda específica como una conexión inactiva.

TCP keepalive utiliza el protocolo TCP de una manera especial, enviando un ACK duplicado sin datos adjuntos. La cosa es: no puedes contar con que esté disponible. También algunos cortafuegos filtran keepalives TCP.

Para que BGP funcione correctamente, necesita una forma de implementar temporizadores específicos para keepalive (con qué frecuencia enviamos un mensaje) y mantener (después de ese tiempo declaramos que un par no responde) que se envían de manera confiable . Por lo tanto, BGP está utilizando su propio mensaje keepalive que no es una gran cantidad de gastos generales (19 bytes) en comparación con el keepalive TCP.

Sebastian Wiesinger
fuente