Agregación de enlace IP redundante para operación de failover sin detección de falla de ruta

7

Estoy buscando una tecnología para lograr la tolerancia a fallas de conexión TCP con la ayuda de dos enlaces entre hosts y sin demoras para la detección de fallas de ruta. Algo como esto:

                       link1   packet1copy1->
                     --------------------------
      packet1->     /                          \    packet1copy1/packet1copy2->
host1--------router1                            router2 ------------------------host2
                    \  link2   packet1copy2->  /
                     --------------------------

host1y host2están conectados a través de router1y router2con dos enlaces entre ellos. Cada enrutador duplica cada paquete que proviene de los hosts antes de reenviarlos a ambos enlaces simultáneamente. Luego, el enrutador par o la pila IP del host de destino se encargan de la eliminación redundante de paquetes.

Editar: De hecho, esta es una búsqueda de una solución de tolerancia a fallas por replicación de uso general para el transporte TCP (IP). La solución debe ser del tipo sin necesidad de recuperación en lugar de enfoques razonablemente rápidos de recuperación como BGP / OSPF / Cisco IP SLA, etc. Algunas soluciones de redundancia de paquetes patentadas ya son conocidas, aunque no lo suficientemente universales. En particular, Engage Communication ofrece IP Tube Protector para VoIP. Desafortunadamente, esta solución 1) es más un equipo que una tecnología estándar y 2) se limita solo al dominio VoIP. También puede valer la pena señalar la tecnología de redundancia de paquetes de Juniper , aunque parece limitarse a un solo enlace y no a enlaces redundantes.

Me pregunto por qué no puedo encontrar algo similar de Cisco ... ¿Alguna tecnología estándar o al menos de propósito general aborda esto?

Sergey Ushakov
fuente
3
tcp retransmite segmentos perdidos, si desea cero pérdida de paquetes sin retransmisión necesita otra tecnología además de tcp ... ¿qué problema comercial está resolviendo?
Mike Pennington
1
sí, TCP retransmite segmentos perdidos, pero con protocolos de enrutamiento como BGP, lleva bastante tiempo descubrir que la ruta que se considera operativa ahora está inactiva; finalmente, los enrutadores se dan cuenta de esto y cambian las rutas activas, pero lleva tiempo, y el protocolo a nivel de aplicación puede sufrir ... mi problema comercial es el procesamiento de transacciones financieras en línea.
Sergey Ushakov
1
el tiempo de espera estándar a nivel de aplicación es de 40 s; de hecho, podemos permitir unos 20 segundos para la detección de fallas en la ruta para evitar fallas en las transacciones; sí, la solicitud ya está escrita pero puede modificarse; no se usa cifrado a nivel de aplicación; solo los enlaces redundantes de larga distancia están asegurados con IPsec
Sergey Ushakov
44
ejecute su propio protocolo de enrutamiento igp a través de los túneles ipsec, opcionalmente con ip sla y falle según sea necesario ... este es un diseño bastante estándar
Mike Pennington
1
¿Qué estás usando para terminar los enlaces ipsec? Cisco ASA o un enrutador, o ??? No puede depender de la detección unilateral ... SLA de IP en ambos lados, o un protocolo de enrutamiento solucionará sus problemas de detección de fallas si ajusta los temporizadores de saludo de manera apropiada
Mike Pennington

Respuestas:

0

Con los enrutadores Mikrotik, puede usar la vinculación en modo de transmisión, ver vinculación . Hice algunas pruebas a través de una conexión de enlace 4G, reduce la pérdida de paquetes de 1 a 2 y me beneficio de las mejoras de velocidad de TCP. Las pérdidas de paquetes no se eliminan por completo, pero ir a 3 enlaces no mejora más. Investigaría a continuación en TCP codificado en red.

Netflow
fuente
Las recomendaciones de productos o recursos están explícitamente fuera de tema aquí, al igual que los dispositivos de nivel de consumidor, por ejemplo, MikroTik.
Ron Maupin
@Netflow Gracias por notar la vinculación en modo de transmisión, independientemente de Mikrotik :) No estoy seguro de si podré intentarlo en un futuro cercano, pero aún así es bueno saber que parece haber un enfoque basado en estándares. ..
Sergey Ushakov
10

Estoy buscando una tecnología para lograr la tolerancia a fallas de conexión TCP con la ayuda de dos enlaces entre hosts y sin demoras para la detección de fallas de ruta. Algo como esto:

                       link1   packet1copy1->
                     --------------------------
      packet1->     /                          \    packet1copy1/packet1copy2->
host1--------router1                            router2 ------------------------host2
                    \  link2   packet1copy2->  /
                     --------------------------

Hay algunas cosas que funcionan en contra de su propuesta ...

  1. Hará que host1 y host2 trabajen muy duro para desenredar su esquema de duplicación de paquetes intencional sin una buena razón
  2. Está quemando potencia en sus puntos de encriptación ipsec sin ninguna buena razón
  3. TCP se ha refinado durante más de tres décadas para recuperarse automáticamente de fallas y fallas de la infraestructura; "ayudar" a TCP de tal manera corrige el problema incorrecto. Debe hacer que su infraestructura reaccione para mitigar los problemas, no debe colocar cinta adhesiva TCP para sobrevivir a la infraestructura problemática.

Voy a responder con el mismo comentario que hice, ya que sus requisitos de detección de fallas son veinte segundos ...

Construya 2 túneles IPSec con diversidad de ISP según sea necesario. Ejecute un protocolo de enrutamiento a través de sus túneles IPSec y ajuste los temporizadores de protocolo para fallar alrededor de la pérdida sostenida de paquetes de infraestructura. Si tiene Cisco de extremo a extremo, EIGRP ha tenido una convergencia muy rápida en torno a las fallas, aunque los protocolos de estado de enlace se están volviendo lo mismo en estos días con las implementaciones alternativas sin bucle IETF.

Opcionalmente, use IP SLA en ambos lados para derribar un túnel que no cumpla con los requisitos de jitter / delay / packet loss.

Mike Pennington
fuente
Mike, con el debido respeto, no puedo aceptar su crítica por las siguientes razones: 1) mi pregunta busca una tolerancia a fallas por tipo de solución de replicación , mientras que sus soluciones son de tolerancia a fallas por tipo de redundancia ; ambos enfoques normalmente se consideran válidos, pero tienden a producir diferentes niveles de calidad de servicio, y busco un mejor nivel de servicio; 2) la tolerancia a fallas por replicación tiende a ser más costosa, pero no tomaría la palabra "costosa" demasiado en serio aquí :) que decía, por favor acepte mi "gracias" y vote por una buena visión general, pero me abstengo de aceptar su respuesta
Sergey Ushakov
1
@ sn-ushakov, como dije ... si desea tolerancia a fallas por replicación, está utilizando el protocolo incorrecto. TCP fue hecho para tolerancia a fallas por redundancia. Si desea tolerancia a fallas por replicación, ¿puedo presentarle a nuestro amigo conocido como UDP ? UDP es mucho más adecuado para lo que quieres; sin embargo, eso significa que está a punto de reescribir su aplicación comercial principal solo porque está enamorado de un diseño de red extraño (sin hardware conocido para implementar esta replicación de paquetes bidireccional, podría agregar)
Mike Pennington
bueno, a veces el protocolo de nivel de aplicación no es nuestra elección ... y el conocimiento de su infraestructura de pares puede ser limitado en el mundo de los negocios ... y podría ser genial tener, por ejemplo, HTTP diseñado e implementado sobre UDP :) y hablando en serio, gracias por señalar los protocolos de estado de enlace, pueden ser un alivio, aunque no la solución final; Por cierto, el propio TCP ya ha provisto al menos para una parte de la solución que se busca: el TCP debe recuperarse de los datos que están ... duplicados ... - RFC 793, sección 1.5, subsección "Confiabilidad"
Sergey Ushakov
66
Siéntase libre de citar RFC 793, Sección 1.5 ... en respuesta, citaré RFC 1925, Sección (3) :With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea.
Mike Pennington
2
Engage Communications está vendiendo una solución TDM sobre IP. Está solicitando una solución TCP sobre IP ... podría superponer IP sobre TDM sobre IP, pero de nuevo ... esto es realmente una locura. Deberías contratar a un ingeniero de redes real
Mike Pennington
4

OK, desde arriba;

  • Abajo vota tu pregunta de mí; su pregunta no es lo suficientemente clara según sus respuestas en los comentarios a las respuestas de otras personas. Has asumido que la solución está relacionada con la ingeniería de redes, pero no pareces saberlo, y das la impresión de que esperas que alguien te dé la respuesta que necesitas.

  • Tiene el siguiente requisito de problema;

host1 y host2 están conectados a través de router1 y router2 con dos enlaces entre ellos. Cada enrutador duplica cada paquete que proviene de los hosts antes de reenviarlos a ambos enlaces simultáneamente. Luego, el enrutador par o la pila IP del host de destino se encargan de la eliminación redundante de paquetes.

  • A menos que la conexión de su host final a su enrutador local sea el doble de la velocidad del tráfico que pasa por un solo enlace entre router1y router2, que no ha mencionado, sus hosts necesitarán dos conexiones a su enrutador local. Hay NO software nativo o producto en cualquier lugar que puede funcionar con una gama anfitriones y tomar dos flujos TCP por el mismo NIC o dos separadas y el tirón de una corriente alterna paquetes de la primera corriente de falta. ¿Cómo se esto? Debido a que no es así como funcionan las redes, IP y TCP simplemente no fueron diseñadas para funcionar así. Puede haber productos para duplicar paquetes, pero estos son un nicho, no muy extendido, porque es la respuesta incorrecta a la pregunta.

¿Por qué es esta una solicitud tan loca?

  • Parece que estás tratando de poner una clavija redonda en un agujero cuadrado. Entiendo que el requisito de su problema es que desea redundancia para los datos de su aplicación que viajan entre hosts remotos. Los datos se envían dos veces de extremo a extremo en caso de falla del enlace. Sin embargo, eso es todo lo que está protegiendo aquí con flujos TCP duales, falla de la capa física 1. Si hay una pausa en el envío de un paquete de un host a otro, llegará tarde a ambos enlaces de enrutador a enrutador. Si se produce un problema transitorio en un enlace pero no en el otro, como la congestión, el enrutador al final del enlace necesitaría rastrear ambas secuencias TCP simultáneamente para ver que cuando un paquete llega al enlace 2 con el número de secuencia en curso en su encabezado, y no ha llegado nada en link1, entonces el paquete en link1 llega tarde, y si aparece, necesita descartarlo.

    ¿Qué pasa si te encuentras en una situación en la que hay congestión en link1 pero no se cae el tráfico, debido a un buen esquema de QoS, pero son colas, los paquetes de link1 están siempre detrás de link2? ¿Qué pasa si link2 falla ahora y el enrutador pasa los paquetes en link1 a los hosts finales? Va a recibir paquetes duplicados y se detendrá y retransmitirá, etc. y causará un retraso. Aquí no se logró nada.

Pasando a una solución;

  • Una mejor idea en mi opinión sería tener enlaces de doble capa 2 entre los dos hosts finales, extendiendo sus dominios de difusión para incluir NIC entre sí. Puede hacerlo a través de interconexiones directas de capa 2, extensión MPLS / VPLS, servicio de capa 2 de operador, elija, eso no es estrictamente relevante aquí. La extensión de la red de capa 2 entre los hosts significa que no necesita meterse con TCP o hacer ningún tipo de corrección de magia negra o curita. TCP será completamente independiente de la tecnología subyacente y aún tendrá su redundancia de capa 1 / enlace físico.

  • Si usa una solución basada en MPLS, puede usar funciones como la ingeniería de tráfico (MPLS-TE) para monitorear la latencia en los enlaces y siempre usar el enlace con la latencia más baja. Puede usar BFD con MPLS FRR, que puede obtener 50 ms ~ fallas con el tiempo entre enlaces. Sé que dijiste que no quieres una solución de falla por redundancia, pero 50ms es bastante rápido en mi opinión. Si su aplicación no puede manejar una pérdida de conectividad de 50 ms, debe volver al tablero de dibujo de la aplicación. Ningún sistema está activo el 100% del tiempo, debe planificar las fallas, el mantenimiento planificado y las interrupciones debido a intenciones maliciosas / relacionadas con la seguridad; a todos ocurren en algún momento. Debes ser realista.

En un comentario dijiste lo siguiente;

bueno, IP SLA es la tecnología que se está utilizando al menos en un extremo hasta ahora ... :) aun así, lleva bastante tiempo para que ambos extremos detecten la falla del enlace, y la aplicación se desincroniza a veces ... y los enlaces pueden a veces parpadea ... por eso estamos buscando algo sin demoras

No hay tal cosa; Debe pasar el tiempo para que los posibles eventos se conviertan en realidades. Debe repensar esto con un nivel de demora "aceptable".

También en otro comentario que dijiste;

BGP lleva bastante tiempo descubrir que la ruta que se considera operativa ahora está inactiva; finalmente, los enrutadores se dan cuenta de esto y cambian las rutas activas, pero lleva tiempo, y el protocolo de nivel de aplicación puede sufrir

BGP tiene un temporizador de saludo, esto detecta la presencia de su vecino inmediato. El valor predeterminado es 30 segundos, sospecho que esto es a lo que se refiere también. Si ambos enrutadores en su topología hablan BGP con el ISP en cada sitio o incluso directamente entre sí, sobre esos pares construya túneles IP en IP de túneles GRE o L2TP (v3) entre los dos enrutadores, sobre esos túneles ejecute BFD o IP SLA. Ahora puede detectar la pérdida de conectividad de extremo a extremo en 1 o 2 segundos y redirigir al otro túnel utilizando objetos de tachuelas.

Con todo, parece que estás mezclando diferentes capas de tecnología. Se supone que BGP no proporciona un enrutamiento rápido, no se supone que TCP esté duplicado, etc. Estás viendo los niveles incorrectos de abstracción para abordar este problema. Espero que esto haya ayudado.

jwbensley
fuente
2
No los necesita, puede ejecutar MPLS sobre GRE, por ejemplo, MPLS sobre IPSEC. ¿Podría invertir en enlaces L2 posiblemente? Quién sabe o le importa cuál es su presupuesto, no yo; No digo que mis ideas sean las mejores, simplemente estoy tratando de proporcionar soluciones al problema que sean sensatas y confiables, irrelevantes para el costo o la disponibilidad, y explicar más a fondo los problemas que enfrenta y las razones para elegir una opción sobre otra. Es una respuesta puramente técnica.
jwbensley
1
@ sn-ushakov No existe el tiempo cero
jwbensley
1
Sin embargo, no dice en ese documento, para repetirme Time must pass for possible events to become actualities: no existe el tiempo cero. La caja tiene que verificar pérdidas, retrasos, caídas, etc., eso lleva tiempo, puede ser mili o micro segundos, pero lleva algún tiempo. Al igual que BFD, por ejemplo, si establece el tiempo de saludo en 50 ms, con un tiempo de espera predeterminado de 3 veces, debe esperar 150 ms para que se produzca la conmutación por error. Ahora, deje de comparar una solución de respaldo TDM con su escenario. Por su propia naturaleza, es posible ofrecer un servicio TDM como la redundancia TCP que necesita
jwbensley
1
... porque sabe cuándo debe llegar exactamente un paquete TDM. Si no comprende completamente cómo funcionan los E1 / T1, le sugiero que lea sobre eso primero. Entonces comprenderá que una razón para tener enlaces TDM es la confiabilidad, como la latencia garantizada. Corren a una velocidad fija y velocidad de fotogramas por segundo. IP / TCP está en toda la escala. TDM es mucho más predecible y esto se ejecuta en una capa más baja que TCP, sería como duplicar tramas Ethernet en dos enlaces. El hecho de que estas cajas se están ejecutando TDM sobre IP añade en cierto potencial para el cambio y el sesgo de las dos corrientes TDM, es por eso que ...
jwbensley
1
... esas cajas tienen temporizadores sesgados y detectores de cuadros fuera de orden (lectura de números de secuencia).
jwbensley
1

Este es un problema de la capa de aplicación y no un problema de nivel de red. Esto se debe a que uno de los principios básicos de IP es evitar duplicados, especialmente cuando se invoca la retransmisión TCP.
En entornos muy críticos, el enfoque será tener 2 NIC en los hosts finales y lograr que la aplicación genere 2 paquetes únicos. Con este enfoque, puede utilizar las tecnologías existentes y los principios de red utilizando rutas y métricas variables.

tdops
fuente
lo siento, pero no puedo aceptar que este sea un problema de la capa de aplicación; la aplicación tiene derecho a esperar un enlace TCP de calidad suficiente; El propio TCP tiene disposiciones para la recuperación después de fallas menores en la red, y existen numerosas soluciones que proporcionan tolerancia a fallas de red mediante enrutamiento alternativo; desafortunadamente, todos ellos que conozco son del tipo de recuperación rápida después de una falla en lugar de uno que no necesita recuperarse ; Percibo esta tarea como una ingeniería de red redundante; después de todo, si podemos tener una RAID, ¿por qué no podemos tener una RAIN? :)
Sergey Ushakov
Dos NIC con dos sesiones tcp significa que el OP debe decidir qué sesión TCP es más confiable.
radio-free-europe
Solo para evitar malentendidos: nunca quise decir dos sesiones TCP. La sesión TCP debería ser una. Esa es la tarea de los enrutadores para cuidar la redundancia y la conmutación por error de tráfico TCP con cero retraso.
Sergey Ushakov
0

No conozco trucos o protocolos que puedan realizar este tipo de replicación directa en los dispositivos de red en cuestión; para este tipo de aplicación, recomendaría la redundancia y la detección rápida de fallas utilizando BGP fast-failover, BFD y otras herramientas. Sin embargo, me encontré con este proyecto de código abierto llamado 'Tunnel Splitter' http://coderrr.wordpress.com/2010/01/10/tunnel-splitter-accelerating-a-single-tcp-connection-over-multiple-isps/eso parece ajustarse a lo que estás buscando. En resumen, los cuadros TS instalados en cada sitio proxy las conexiones TCP entre host1 y host2, y luego dividieron el tráfico entre ellos a través de túneles. Como cada túnel tiene una dirección de origen única, se puede usar PBR (enrutamiento basado en políticas) en los enrutadores para dirigir el tráfico para tunnel1 sobre link1 y tunnel2 sobre link2. Los cuadros TS terminan los túneles y tienen una única conexión tcp a host1 y host2. Por supuesto, necesitaría probar esto realmente, ¡pero parece funcionar en la pizarra!

liso
fuente
Suena prometedor y adecuado para el proyecto de ley (aunque no es de grado industrial), pero desafortunadamente GitHub ya responde con 404 para este proyecto ... ¿sabes qué sucedió con este proyecto después?
Sergey Ushakov
des afortunadamente yo no. Puede que tenga que contactar a los autores directamente.
smoothbSE