¿En qué circunstancias el TCP sobre TCP tiene un rendimiento significativamente peor que el TCP solo (2014)?


25

Muchos administradores siguen perpetuando, en ServerFault y en otros lugares, lo mala que es la idea de TCP sobre TCP, por ejemplo, en VPN. Que incluso la más mínima pérdida de paquetes hará que uno sufra de una degradación de rendimiento al menos severa si no se produce una fusión de TCP, y que TCP-sobre-TCP, por lo tanto, debe evitarse estrictamente. Y eso probablemente alguna vez fue cierto, por ejemplo, 2001 cuando se escribió este artículo al que todavía se hace referencia.

Pero desde entonces hemos visto grandes avances en tecnología y protocolos. Hoy en día tenemos 'ACK selectivo' implementado en casi todas partes, y la ley de Moore nos ha dado mucha más memoria, y con ella vinieron grandes buffers TCP optimizados para enlaces ascendentes Gbit. Además, la pérdida de paquetes es un problema mucho menor en estos días en enlaces que no son de radio. Todo esto debería aliviar significativamente el problema de TCP sobre TCP, ¿no?

Tenga en cuenta que hay escenarios del mundo real en los que, por ejemplo, las VPN basadas en TCP son más fáciles de implementar y operar que las basadas en UDP / ESP (ver más abajo). Por lo tanto mi pregunta:

¿En qué circunstancias (pérdida de paquetes de enlace y latencia) el rendimiento de TCP sobre TCP es significativamente peor que el de TCP solo, suponiendo compatibilidad con SACK y almacenamientos intermedios de TCP de tamaño decente en ambos extremos?

Sería genial, así que vea algunas mediciones que muestran las correlaciones entre la pérdida / latencia de paquetes (conexión externa) y el rendimiento / fluctuación (conexión interna) - para TCP sobre TCP y solo para TCP. encontré este interesante artículo , pero parece estar preocupado solo por la latencia y no abordar la pérdida de paquetes (externos).

Además: ¿Hay configuraciones recomendadas (por ejemplo, opciones de TCP, configuraciones de búfer, reducción de MTU / MSS, etc.) para reducir la brecha de rendimiento entre TCP y TCP sobre TCP?


Actualización: nuestra razón de ser.

Esta pregunta sigue siendo muy relevante en algunos escenarios del mundo real. Por ejemplo, implementamos dispositivos integrados en grandes edificios que recopilan datos de sensores y los introducen en nuestra plataforma a través de VPN. El problema al que nos enfrentamos son los firewalls y los enlaces ascendentes configurados incorrectamente que no estamos bajo nuestro control, combinados con los reticentes departamentos de TI. Vea un ejemplo detallado discutido aquí .

En muchos de estos casos, cambiar de una VPN que no sea TCP a una basada en TCP (muy fácil si usa OpenVPN como nosotros) es una solución rápida que nos permite evadir las batallas ascendentes de señalar con el dedo. Por ejemplo, a menudo el puerto TCP 443 generalmente está permitido (al menos a través de proxy), o podemos superar los problemas de Path-MTU simplemente reduciendo la opción MSS de TCP.

Sería bueno saber en qué circunstancias una VPN basada en TCP puede considerarse una alternativa viable, por lo que podemos tomar una decisión informada que supere los pros y los contras de cualquiera de las opciones. Por ejemplo, sabemos que TCP-VPN está bien para nosotros en enlaces que no son de radio, pero tenemos una buena cantidad de clientes remotos en enlaces ascendentes 3G con pérdida significativa de paquetes y alta latencia: ¿cómo funcionaría un TCP-VPN allí?

Traté de mejorar el título y la pregunta central en consecuencia; espero que tenga sentido.


Notará rápidamente la diferencia entre TCP sobre TCP frente a UDP (etc.) sobre TCP VPN cuando las use para sesiones interactivas, por ejemplo, ssh. Notarás latencia si no se cae la sesión. YMMV, TIAS
Daniel S. Sterling

Solo si la conexión 'externa' está sujeta a un cierto grado de latencia o pérdida de paquetes en primer lugar. Tengo muchas sesiones SSH sobre VPN basadas en TCP, y muchas funcionan bien sin retraso notable.
Nils Toedtmann

De hecho, funciona cuando tienes una buena red. Si no siempre tiene una buena red, no siempre funciona
Daniel S. Sterling

¿Qué es una buena red? Si todo se ejecuta en una sola región de AWS, ¿la red es lo suficientemente buena?
Rich Remer

Respuestas:


7

Creo que en realidad es más debatido de lo que lo haces aparecer. Hay muchas preguntas frecuentes relacionadas con Linux: http://www.tldp.org/HOWTO/VPN-HOWTO/

He usado un PPP-over-ssh-over-ADSL durante más de 12 años, y nunca me falló, así que, por mi experiencia, me atrevería a decir que los agoreros probablemente exageran en gran medida. TCP sobre TCP es probablemente una mala idea con conexiones RTC, enlaces satelitales y otros enlaces con muy bajo rendimiento o retrasos muy largos, pero para la mayoría de los usos simplemente funciona .

Ahora la verdadera pregunta es: ¿por qué usarías TCP sobre TCP? en absoluto ? Cuando configuré mi PPP-over-ssh, fue en gran parte porque en aquel entonces era, con mucho, la forma más fácil de construir una VPN rápida; entonces lo he usado desde entonces por pura pereza.

Hoy en día, existen herramientas prácticas y fáciles de configurar, como OpenVPN, IPSec VPN, por lo que nunca debería tener que molestarlo con este problema de TCP sobre TCP.


1
Hay situaciones en las que TCP sobre TCP es una solución simple a una serie de problemas de red. Agregué una sección que explica nuestra razón de ser.
Nils Toedtmann

Espero una respuesta que sea más específica sobre las condiciones bajo las cuales TCP-sobre-TCP se convierte en un problema. Uno de nuestros casos de uso son los enlaces de radio que tienen diversos grados de latencia y pérdida de paquetes.
Nils Toedtmann

TCP sobre TCP sobre TCP (el tráfico TCP en un TCP OpenVPN al que se accede a través de un reenvío TCP SSH) me costó aproximadamente 5Mb / s. Nunca me falló, pero no lo recomendaría solo porque es un gran desperdicio.
Sirenas
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.