¿Cuáles son las desventajas de TCP, en términos simples, en comparación con cualquier otro protocolo de capa de transporte?

Nota: he editado el mensaje para que sea más fácil de entender según lo solicitado por la pregunta, pero traté de mantener intacta la “parte difícil”, para que cualquiera que esté dispuesto a discutir pueda unirse y comentar.

TCP permite comunicaciones bidireccionales entre dos hosts, garantizando que todos los mensajes se entreguen correctamente y lleguen en orden. TCP también maneja el control de congestión sin la necesidad de un control central, lo cual es muy importante en una gran red descentralizada como Internet. TCP admite aplicaciones comunes, como sesiones interactivas, copia de archivos, etc. Esto incluye gran parte de lo que se transporta hoy en Internet (HTTP, SMTP y muchos otros protocolos) y explica fácilmente la popularidad de TCP.

Si bien es fácil de usar y comprender, TCP es un protocolo relativamente complejo, con muchas características, que tiene un costo. Impone algunos gastos generales en términos de tamaño de paquete. El protocolo de enlace TCP también lleva más tiempo en comparación con los protocolos más simples. Y TCP no ofrece nada por sí solo cuando se trata de QoS y reserva de ancho de banda ( por cierto, esto no es técnicamente un requisito para la capa de transporte, pero sería útil hoy ).

En una red IP, es posible que no necesite todas las funciones de TCP para todas las aplicaciones, y protocolos de transporte más simples como UDP pueden ser más efectivos. DNS es un buen ejemplo de una aplicación bastante común basada en UDP: es un protocolo de consulta y respuesta sin estado muy simple y, como tal, no requiere características adicionales de TCP. Funciona más rápido y con menos sobrecarga sobre UDP. RTP (protocolo en tiempo real), que se utiliza para transmitir llamadas de voz sobre IP y otros servicios similares, también se suele transportar a través de UDP. La razón principal es que TCP intentará retransmitir los paquetes perdidos, pero para las aplicaciones multimedia en tiempo real, a menudo es mejor olvidar los paquetes perdidos, aceptar una pequeña falla y continuar con los datos en tiempo real que seguirán llegando. RTP es más simple, más eficiente en términos de espacio y más rápido.

Otras tecnologías de red (no IP) implementan las mismas características básicas de TCP en diferentes capas de la pila de red y tienen sus propias fortalezas y limitaciones. Frame Relay y ATM implementan circuitos virtuales, que proporcionan un transporte confiable con entrega de mensajes ordenados, pero lo hacen en la capa de red. Los circuitos virtuales ATM ofrecen características de ingeniería de tráfico y QoS mucho más avanzadas que TCP / IP puro, pero también es más complejo (y costoso) de configurar y requiere una infraestructura completamente diferente.

Ahora, si lo desea, tratemos de profundizar un poco más y discutir las “cosas difíciles”. Primero, TCP no es técnicamente un protocolo de capa de transporte perfecto, porque las pilas de IP y OSI no coinciden perfectamente, pero podemos ignorar esto para todos los fines prácticos aquí. Además, es difícil explicar las desventajas intrínsecas del TCP frente a las alternativas (basadas en IP o no basadas en IP) sin entrar en detalles esotéricos del protocolo. Las matemáticas del algoritmo de control de congestión TCP son realmente difíciles de entender, y para la mayoría de las personas (incluido yo) es preferible aceptar que “simplemente funciona”. Pero el problema principal es que TCP efectivamente mató a casi todos los competidores.

Hubo (comparativamente) poca investigación en los últimos 20 años para desarrollar alternativas al TCP. La mayoría de las ideas que se presentaron en este período tuvieron poco o ningún impacto en la investigación académica y en la industria. TCP es tan abrumador que incluso sus protocolos complementarios en la pila TCP / IP (por ejemplo, UDP o SCTP) son frecuentemente sustituidos por TCP a pesar de sus deficiencias para algunas aplicaciones particulares (tome por ejemplo la transmisión de video a través de HTTP, que realmente debería hacerse sobre RTP). De esta manera, la principal desventaja de TCP es su éxito .

Algunas de las deficiencias conocidas de TCP llamaron más la atención en los últimos tiempos. Un ejemplo es bufferbloat (http://www.bufferbloat.net/), que ocurre cuando tiene tuberías rápidas en todas partes, rompiendo el control de congestión de TCP. Algunos investigadores bien conocidos, como Van Jacobson y John Day, están trabajando en una investigación fundamental sobre este tema, pero incluso para ellos, es muy difícil superar el impulso extremo que TCP disfruta hoy. Ahora es más fácil solucionar las limitaciones de TCP que proponer un mejor protocolo .

TCP es un protocolo difícil de implementar entre pares de hosts que tienen una ruta de red muy fluctuante. El núcleo del algoritmo es un temporizador de retransmisión que intenta predecir si un paquete se ha perdido en vuelo en función de los tiempos de ida y vuelta de los paquetes anteriores. Si sus tiempos de ida y vuelta están cambiando, tendrá dificultades para mantener un buen rendimiento, porque las estimaciones de rtt serán incorrectas.

El caso obvio en el que es probable que esto suceda es cuando intenta mantener abierto un socket de larga duración, pero donde un extremo del socket es un dispositivo móvil. Mi experiencia favorita de esto es simplemente imaginar que estás en un Megabus a toda velocidad por Indiana usando el wifi gratuito en el autobús. A veces la conexión es buena, a veces es pésima, y ​​ocasionalmente se cae por completo.

Una solución para “el problema de Megabus” para un shell remoto es algo así como mosh – Page en mit.edu- que le da la ilusión de una conexión persistente mediante el uso de UDP para intercambiar el estado entre dos procesos diferentes de larga duración que implementan una emulación de terminal . Para las transferencias de archivos, usaría algo como Bittorrent que tolera las conexiones intermitentes.

La peor desventaja: a menudo simplemente cuelga allí. Esa es una razón por la que las páginas web se bloquean y se cargarán más rápido si solo recarga la página completa. Este es el caso de las páginas web que se cargan fácilmente cuando tienes una buena conexión a Internet, pero que apestan cuando estás en un lugar lejano en una mala línea. Una razón es que el temporizador de retransmisión crece demasiado. La otra es que la ventana de congestión va por debajo de lo que realmente causó la congestión.
A continuación, es propenso al ataque de inundación SYN y al ataque RST.
A continuación, no ofrece enmarcado. La aplicación tiene que hacer su propio marco, lo que provoca una carga innecesaria en la CPU.
Hay muchas ventajas, pero no preguntaste por ellas.