¿Qué protocolo es mejor?: TCP vs UDP, descubre cuándo usar cada uno

TCP y UDP son dos protocolos fundamentales para las comunicaciones a través de Internet, ya que estos dos protocolos se sitúan en la capa de transporte del modelo TCP/IP, y es la primera capa donde origen y destino se comunican directamente, ya que las capas inferiores (capa de red y capa de acceso al medio) no realizan esta función. Hoy en RedesZone os vamos a explicar las principales características del protocolo TCP y del protocolo UDP, cuándo se utiliza cada uno, diferencias y usos principales.
Protocolo TCP: ¿qué es y cómo funciona?
El protocolo TCP (Protocolo de Control de Transmisión) es uno de los protocolos fundamentales en Internet, nos permite que las aplicaciones puedan comunicarse con garantías independientemente de las capas inferiores del modelo TCP/IP. Esto significa que los routers (capa de red en el modelo TCP/IP) solamente tienen que enviar los segmentos (unidad de medida en TCP), sin preocuparse si van a llegar esos datos correctamente o no. TCP da soporte a múltiples protocolos de la capa de aplicación, como, por ejemplo, HTTP (web), HTTPS (web segura), POP3 (correo entrante) y SMTP (correo saliente) así como sus versiones seguras utilizando TLS. También se utiliza TCP en protocolos tan importantes como FTP, FTPES y SFTP para transferir archivos desde un origen a un destino, e incluso el protocolo SSH para administrar equipos de forma local y remota de manera segura utiliza el protocolo TCP.
Principales características
Debido a que TCP sirve a una gran cantidad de protocolos de la capa de aplicación, es fundamental que los datos (segmentos) lleguen correctamente al destinatario, sin errores, y, en orden. Si en la transmisión de los segmentos, se corrompiesen o perdiesen, automáticamente el protocolo TCP inicia la retransmisión, sin intervención de la capa de aplicación. De esta manera, se garantiza que los datos llegan al destinatario sin errores, ya que este protocolo se encarga de solucionar cualquier tipo de problema.
El MSS (Maximum Segment Size) es el tamaño máximo en bytes que TCP puede recibir en un solo segmento, es similar al MTU, pero el MSS es a nivel de capa de transporte. Con el fin de obtener el mejor rendimiento, el MSS debe ser lo suficientemente pequeño para evitar fragmentación IP. El MSS se anuncia normalmente en cada lado del canal de comunicación, a través de la propia cabecera de TCP. Normalmente el tamaño del MSS es el MTU (1500 bytes normalmente) menos la cabecera de TCP (que tiene longitud variable de al menos 20 bytes) menos la cabecera IP (que tiene longitud variable de al menos 20 bytes). MSS = MTU (1.500 bytes) – 20 bytes cabecera TCP – 20 bytes cabecera IP
TCP tiene un mecanismo complejo de control de errores, se utiliza una técnica de ventana deslizante para que todos los segmentos lleguen correctamente. Esta característica utiliza diferentes métodos para detectar posibles errores que se produzcan:
- Checksum
- Numeración de todos los segmentos para llevar correctamente el control
- Confirmaciones ACK selectivas, aunque también permite «acumular» segmentos para que con un úncio ACK se confirmen varios.
- Temporizadores: si pasa mucho tiempo, automáticamente TCP retransmite el segmento que se ha «perdido».
- Se descartan los segmentos duplicados: en caso de que llegue un segmento duplicado (porque uno ha tardado más de lo normal y se ha vuelto a enviar) lo elimina.
Por supuesto, si TCP detecta un error, iniciará la retransmisión automáticamente sin que la capa de aplicación tenga que hacer absolutamente nada.
Otra característica muy importante la información que viaja desde un origen hasta un destino, es que los datos lleguen en orden, es decir, en el mismo orden que fueron emitidos, ya que el protocolo IP es un protocolo best-effort, hace todo lo que puede para que los paquetes lleguen en orden y correctos, pero no es confiable ya que no garantiza nada. TCP dispone de una ventana deslizante en el emisor y en el receptor, de tal forma que, si recibimos un segmento que no está en orden, automáticamente «esperará» hasta que llegue el segmento que falta, o sino, pedirá una retransmisión únicamente del segmento que falte. Con cada segmento recibido por el receptor, se enviará un ACK indicando al emisor que todo está llegando correctamente, no obstante, en la vida real las implementaciones de TCP permiten que se envíe un ACK para confirmar la recepción de varios segmentos simultáneamente, con el objetivo de no saturar la red de tantas confirmaciones.
El protocolo TCP permite realizar control de flujo, es decir, es capaz de mitigar la posible saturación de la red o del host remoto. En el caso de que un equipo esté transmitiendo a una velocidad de 500Mbps, y el equipo de destino solamente pueda recibir información a 100Mbps, el protocolo TCP se adapta dinámicamente. De esta forma, el protocolo TCP siempre intentará aprovechar al máximo el ancho de banda disponible entre origen y destino. El funcionamiento de la esta ventana deslizante es complejo, pero funciona básicamente en que el receptor tiene una ventana TCP disponible con una cantidad de bytes que puede almacenar en un buffer, el emisor podrá enviar datos hasta llenar esta cantidad. Para que el emisor envíe más datos, es necesario que el receptor le envíe un ACK indicando que todo está correcto y que procede a «subirlo» a capa de aplicación.
TCP también dispone de control de congestión, esto nos permite que no se pierdan paquetes en Internet porque haya congestión en los routers. Si el router no es capaz de procesar o reenviar paquetes al ritmo que los recibe, el propio router los descartará y se perderá, ya que su buffer se llenará. No debemos confundir control de flujo (que hemos explicado anteriormente) con el control de congestión. La ventana de congestión (es complementaria a la ventana de recepción) es lo que se utiliza para gestionar el control de congestión en TCP. En una situación de no congestión, la ventaja de congestión es igual que la ventana de recepción, si se produce congestión, el tamaño de la ventaja de congestión se va reduciendo, y si desaparece, va aumentando. El número máximo de bytes que puede enviar el emisor es el mínimo de ambos tamaños de ventana (si la ventana de congestión son 1500 bytes, y la ventana de recepción son 2000 bytes, entonces se envían 1500 bytes, el menor).
Con el fin de evitar la congestión, y que podamos exprimir al máximo el ancho de banda disponible entre origen y destino, hay un total de tres fases. La fase de arranque lento (slow start) se encarga de hacer crecer exponencialmente (así que realmente no se puede considerar arranque lento) la ventana de congestión, posteriormente la fase de evitación de congestión que se encarga de que crezca la ventana de congestión linealmente, y, finalmente, la fase constante donde la ventana de recepción es la misma que la ventana de congestión.
Actualmente TCP dispone de diferentes algoritmos para gestionar de manera eficiente la congestión, los primeros fueron TCP Tahoe y Reno, aunque también tenemos otros como TCP Vegas, pero, a lo largo de los años, con las nuevas redes de datos TCP/IP, han aparecido otros algoritmos que son más eficientes. Por ejemplo, tenemos TCP BRR que nos permite enviar información lo más rápidamente posible, ya que es mucho más eficiente que el protocolo TCP original (tendremos mayor velocidad). También tenemos TCP Cubic el cual es el control de congestión que utilizan los sistemas operativos Linux y Unix.
Por último, otra característica interesante de TCP es que nos permite multiplexar datos, de esta forma, podremos recibir información de diferentes hosts simultáneamente. También nos permite Full-Dúplex, ya que podremos enviar y recibir datos simultáneamente por el mismo canal de comunicación.
Establecimiento de la conexión entre cliente y servidor, y desconexión en TCP
La principal característica del protocolo TCP es que es un protocolo orientado a conexión, para poder establecer una conexión entre cliente y servidor, es totalmente necesario establecer una conexión previa con dicho servidor.
Esta conexión previa se denomina 3-way handshake, y consiste básicamente en que el cliente (el que inicia la conexión) envía un mensaje SYN al servidor (el que recibe la conexión). Posteriormente, el servidor le enviará un mensaje de tipo SYN-ACK, indicando que puede empezar a enviar información, finalmente, el cliente envía un ACK indicando que lo ha recibido correctamente, y ya se empieza a enviar toda la información entre cliente y servidor de manera bidireccional. Un detalle muy importante de TCP es que, genera números de secuencia por cada lado, ayudando que no se puedan establecer conexiones falsas entre ellos, aunque si el atacante está «en el medio», entonces sí se podría realizar un ataque MitM de tipo ARP Spoofing o similares, pero no a través de Internet.
Una de las vulnerabilidades de TCP radica en el envío de una gran cantidad de segmentos TCP SYN, con el objetivo de «saturar» de conexiones al receptor. Algunas posibles soluciones para mitigar este ataque de denegación de servicio son:
- Limitar el número de conexiones, ya sean conexiones globales o por IP.
- Aceptar solamente conexiones a direcciones IP confiables.
- Retrasar la asignación de recursos usando «cookies», o también denominado como SYN Cookies.
Para finalizar la conexión, el que quiere finalizar la conexión envía un mensaje FIN, y el host que lo recibe enviará un mensaje ACK junto con otro mensaje FIN, de tal forma que, el equipo que ha iniciado la finalización de la conexión, le envíe un último ACK y se cerrará el socket abierto. Un detalle importante es que podemos tener una conexión «medio abierta», si un host finaliza la conexión y el otro no, el lado que ha finalizado la conexión no podrá enviar más datos, pero el que no la ha cerrado sí podrá seguir enviando información.
Cabecera de TCP
TCP añade 20 bytes de cabecera en cada segmento como mínimo, ya que tenemos un campo de «opcionales». En esta cabecera TCP encontraremos el puerto de origen y puerto de destino de la conexión (socket), también encontraremos el número de secuencia, número de ACK, y los diferentes FLAGS de TCP como SYN, ACK, RST, FIN, URG y otros. En esta cabecera también tenemos una parte muy importante para el funcionamiento de la ventana deslizante, y es que tendremos un campo de 16 bits que indica el tamaño de la ventana de recepción que os hemos explicado antes.
Los puertos (Source Port y Destination Port) son fundamentales para el buen funcionamiento de TCP. TCP usa estos números de puertos para identificar un socket, es decir, una aplicación que emite datos o que recibe datos. Los puertos TCP van desde el 0 hasta el 65535, pero tenemos tres tipos de puertos diferentes:
- Puertos conocidos: del 0 al 1023. Estos puertos están reservados por la IANA para determinadas aplicaciones, como servidor HTTP, FTP, SSH, y muchos otros puertos bien conocidos.
- Puertos registrados: de 1024 al 49151. Estos puertos están reservados para aplicaciones concretas, como sistemas gestores de bases de datos, BitTorrent, y muchas otras aplicaciones.
- Puertos privados: de 49152 a 65535. Estos puertos no están reservados por ninguna aplicación, y puedes usarlos libremente sin que afecte a ningún otro protocolo.
Vulnerabilidades
Como hemos visto previamente, uno de los ataques más utilizados hoy en día es el de inundación de paquetes. Este tiene el objetivo de provocar la denegación del servicio, lo cual hace que el servidor no sea capaz de atender a todas las peticiones de forma correcta. La intención no es la de sobrecargar ni acabar con la memoria del servidor, si no que el objetivo suele ser el acabar con las conexiones no terminadas en el mismo. Esto puede ocurrir con cierta facilidad.
La defensa ante estos ataques, es básicamente realizar un filtrado de direcciones IP que están atacando. En cambio esto requiere gran cantidad de recursos, ya que es necesario una monitorización constante de los servidores y conexiones pendientes. Por otro lado, las direcciones IP pueden ser falsificadas. Por lo cual en muchos casos puede ser realmente complicado prevenir estos ataques.
Por otro lado, también es posible establecer una limitación de nuevas conexiones. Esto evitaría que el atacante pueda enviar paquetes con una dirección de origen falsa. Pero no son los únicos métodos, si no que tenemos más. Uno de ellos en SYN CACHE, y otro es SYN COOKIES. Los cuales han demostrado ser muy eficaces contra estos ataques de inundación. Esto requiere realizar ajustes a nivel de kernel y establecer reglas específicas en los firewall y sistema operativo.
Lo realmente importante es contar con medidas defensivas. Proteger los datos de los usuarios y de las empresas, es de vital importancia. Siendo en muchos casos algo que trasciende a los puramente informático, llegando a ser un problema económico.
Hoy en día estos ataques están a la orden del día, ya que en muchos casos basta con ejecutarlo desde un solo equipo. En todo caso, estos son delito. Y en muchos países es considerado como un motivo de cárcel. Entre ellos, toda la Unión Europea y Estados Unidos. Por lo cual es algo que se debe pensar dos veces antes de llegar a realizarlo.
Ventajas y desventajas del protocolo TCP
Entre las principales ventajas de este protocolo podemos resaltar las siguientes:
- Es un modelo estándar de la industria que se puede implementar de manera efectiva en problemas prácticos de redes.
- Es interoperable, es decir, permite comunicaciones multiplataforma entre redes heterogéneas.
- Es una suite de protocolo abierto. No es propiedad de ningún instituto en particular y, por lo tanto, puede ser utilizado por cualquier individuo u organización.
- Es una arquitectura cliente-servidor escalable. Esto permite agregar redes sin interrumpir los servicios actuales.
- Asigna una dirección IP a cada ordenador en la red, lo que hace que cada dispositivo sea identificable en la red. Asigna a cada sitio un nombre de dominio. Proporciona servicios de resolución de nombres y direcciones.
- Utiliza tres mecanismos diferentes para verificar errores y garantizar la integridad de los datos en el momento de la entrega. Esto lo hace altamente confiable. TCP comprueba si hay errores mediante:Restricción de la conexión después de un período de tiempo de espera: la conexión tiene un período de tiempo de espera designado. Si el servidor o el cliente no recibe un mensaje de reconocimiento dentro de este período, la conexión se cerrará y deberá restablecerse antes de que pueda transferir datos.Incluir un campo de suma de verificación en el encabezado: los paquetes de datos incluyen un valor de 16 bits en el encabezado, conocido como campo de suma de verificación. TCP incluye un campo de suma de verificación para cada segmento de datos, cuya integridad se evalúa durante la transmisión.Envío y recepción de reconocimientos: cuando se establece una conexión o se envían datos, el servidor transmite un mensaje de reconocimiento o ACK. El cliente recibe el acuse de recibo y devuelve su mensaje agregando uno al valor del mensaje ACK.Estas tres medidas aseguran que los flujos de datos correctos se transmitan a través de TCP sin pérdida ni corrupción, se transmiten a través de TCP. Por el contrario, UDP solo ejecuta una verificación de error básica utilizando una suma de verificación.
- Una de sus principales virtudes es que nos facilita el establecimiento de interconexiones entre diferentes tipos de equipos y ordenadores, así como también, nos permite la interconexión de redes de distintas organizaciones.
Por el contrario, encontramos también las siguientes desventajas:
- No es de carácter genérico. Por lo tanto, no puede representar ninguna pila de protocolos que no sea la suite TCP/IP. Por ejemplo, no puede describir la conexión Bluetooth.
- No separa claramente los conceptos de servicios, interfaces y protocolos. Por lo tanto, no es adecuado describir nuevas tecnologías en nuevas redes.
- No distingue entre el enlace de datos y las capas físicas, que tienen funcionalidades muy diferentes. La capa de enlace de datos debe ocuparse de la transmisión de tramas. Por otro lado, la capa física debe establecer las características físicas de transmisión. Un modelo adecuado debería segregar las dos capas.
- Originalmente fue diseñado e implementado para redes de área amplia. No está optimizado para redes pequeñas como LAN (red de área local) y PAN (red de área personal).
- Entre su conjunto de protocolos, TCP e IP fueron cuidadosamente diseñados y bien implementados. Algunos de los otros protocolos se desarrollaron ad hoc y, por lo tanto, demostraron ser inadecuados a largo plazo. Sin embargo, debido a la popularidad del modelo, estos protocolos se utilizan incluso 30 o 40 años después de su introducción.
- Uno de los inconvenientes que presenta, es que, no ofrece una separación entre sus servicios, interfaces y protocolos que sea clara para el usuario o administrador de las redes.
Protocolo UDP: ¿qué es y cómo funciona?
El protocolo UDP (Protocolo de Datagramas de usuario) es uno de los protocolos fundamentales en Internet, nos permite que las aplicaciones puedan comunicarse con garantías independientemente de las capas inferiores del modelo TCP/IP. Esto significa que los routers (capa de red en el modelo TCP/IP) solamente tienen que enviar los datagramas (unidad de medida en UDP). UDP da soporte a múltiples protocolos de la capa de aplicación, como los populares DNS e incluso el protocolo DHCP para obtener (y proporcionar) direccionamiento IP automáticamente.
Principales características
El protocolo UDP permite el envío de datagramas sin necesidad de establecer previamente una conexión, tan solo es necesario tener abierto un socket en el destino para que acepte los datagramas del origen. UDP es un protocolo no orientado a conexión, es decir, no ocurre como en TCP donde hay una fase de establecimiento de la conexión, aquí directamente se envían sin establecimiento previo «aviso».
Este protocolo no proporciona ningún tipo de control de flujo, si un equipo es más rápido que otro y envía información, es muy posible que se pierda información debido a que colapsará al más lento, y tendremos que proceder al reenvío de la información. Un detalle importante es que la gestión de reenvío de los datagramas la realiza la capa de transporte, ya que UDP es muy simple y no dispone de mecanismos de control de reenvío de datagramas por haberse perdido.
UDP tampoco proporciona ningún tipo de control de congestión, si hay congestión en la red, se podrían perder paquetes, y, lógicamente no se va a encargar de reenviarlos como sí ocurre con TCP. Por tanto, UDP al no disponer de control de congestión, control de flujo ni control de errores, se podría decir que UDP es un protocolo no fiable. Además, tampoco proporciona orden en los datagramas enviados, ni información si un datagrama ha llegado correctamente, ya que no hay confirmación ni de entrega ni de recepción. Cualquier tipo de garantías para la transmisión de la información deben ser implementadas en capas superiores.
Este protocolo se utiliza principalmente en DHCP y DNS donde es más importante la rapidez que la fiabilidad. UDP es muy utilizado en tareas de control de transmisiones de audio y vídeo a través de una red. UDP sólo añade multiplexado de aplicación y suma de verificación de la cabecera y la carga útil.
Cabecera de UDP
UDP añade 8 bytes de cabecera en cada datagrama. En esta cabecera UDP encontraremos el puerto de origen y puerto de destino de la conexión (socket), la longitud del datagrama y el checksum de dicho datagrama para comprobar que no tiene errores ni la cabecera ni los datos del datagrama. Los puertos (Source Port y Destination Port) son fundamentales para el buen funcionamiento de UDP. UDP usa estos números de puertos para identificar un socket, es decir, una aplicación que emite datos o que recibe datos.
Gracias a la cabecera tan pequeña que tiene UDP, vamos a poder ahorrarnos una gran cantidad de tráfico de red en transmitir las cabeceras, ya que la mayoría será carga útil que no se va a despercidiar.
Ventajas y desventajas del protocolo UDP
Este protocolo tiene una serie de ventajas para diferentes tipos de aplicaciones, entre las que podemos destacar:
- Sin retrasos en la retransmisión: UDP es adecuado para aplicaciones sensibles al tiempo que no pueden permitirse retrasos en la retransmisión de paquetes descartados. Los ejemplos incluyen Voz sobre IP (VoIP), juegos en línea y transmisión de medios.
- Velocidad: la velocidad de UDP lo hace útil para protocolos de consulta y respuesta como DNS, en los que los paquetes de datos son pequeños y transaccionales.
- Adecuado para transmisiones: la falta de comunicación de extremo a extremo de UDP lo hace adecuado para transmisiones, en las que los paquetes de datos transmitidos son direccionados como recibidos por todos los dispositivos en Internet. Las difusiones UDP pueden ser recibidas por un gran número de clientes sin sobrecarga del lado del servidor.
- UDP no se encuentra, en ningún caso, restringido bajo ningún modelo puntual de comunicación basado en conexión, y es por eso que, con él, podemos disfrutar de una latencia tan baja, sobre todo en el inicio de aplicaciones que se encuentran distribuidas.
- Puede utilizarse como aplicación intensiva de ancho de banda ya que, aunque no garantice el orden de envío de paquetes, tiene la habilidad de soportar su pérdida, por lo que evita la congestión si un paquete no llega a su destino.
A pesar de los beneficios mencionados anteriormente, la falta de requisitos de conexión y verificación de datos en el protocolo UDP puede acarrear una serie de problemas en cuanto a la transmisión de paquetes entre los que se encuentran los siguientes:
- No se garantiza el orden de envío de los paquetes.
- No hay verificación de la disponibilidad de la ordenador o equipo para recibir el mensaje.
- No cuenta con protección contra paquetes duplicados.
- No existe ninguna garantía de que el destino recibirá todos los bytes transmitidos. Sin embargo, UDP proporciona una suma de verificación para verificar la integridad de los paquetes individuales.
- Este protocolo no dispone de ningún tipo de control ni de congestión ni de flujo, esto quiere decir que la implementación debe ser realizada enteramente por parte una aplicación gestionada por el propio usuario.
TCP vs UDP en los diferentes protocolos VPN
TCP y UDP son dos protocolos de la capa de transporte, son ampliamente utilizados por servicios como los de VPN. Generalmente se hace uso del protocolo UDP para la interconexión de los clientes con el servidor VPN, por el simple hecho de que es más eficiente, su cabecera es más pequeña y no tendremos tantos sistemas para comprobar que un paquete ha llegado o no. Teniendo en cuenta que, cuando usamos una VPN con UDP podemos «perder» datos en el túnel al ser UDP y no garantizar la fiabilidad, las capas superiores que están dentro del túnel VPN se encargarán de volver a pedir la información, ya que generalmente hacen uso del protocolo TCP. Sin embargo, en la próxima versión de HTTP/3.0 esto ya no será así, sino que se usará el protocolo QUIC que utiliza el protocolo UDP «vitaminado», por lo que no siempre es TCP lo que hay dentro del túnel. Otro tráfico que hay dentro del túnel y es UDP es el tráfico de DNS, este tráfico, a no ser que uses DNS over HTTPS o DNS over TLS siempre será a través de UDP que es más rápido.
OpenVPN
OpenVPN es un protocolo para crear redes privadas virtuales que nos permiten asegurar la comunicación punto a punto, ya que todo el tráfico del túnel va cifrado y autenticado. OpenVPN permite el uso de redes privadas virtuales de tipo acceso remoto, para clientes móviles que se quieran conectar a un servidor VPN de forma remota y navegar por Internet a través de la IP pública del servidor, esto incluye también el acceso a los recursos compartidos de la red doméstica o profesionales. Este protocolo también nos permite configurar un túnel Site-to-Site, con el objetivo de intercomunicar diferentes sedes entre ellas y compartir archivos de manera totalmente segura y confidencial gracias a los protocolos criptográficos incorporados.
OpenVPN hace uso de un canal de control y un canal de datos, en el canal de control podremos utilizar TLS 1.2 y también la última versión TLS 1.3, para proteger adecuadamente todo el tráfico de la negociación. En el canal de datos podremos hacer uso del algoritmo de cifrado simétrico AES-256-GCM, aunque en las últimas versiones también han incorporado compatibilidad con CHACHA20-POLY1305, un algoritmo de cifrado simétrico que incluye también AEAD gracias a Poly1305 para la autenticación de los datos. De esta forma, toda el establecimiento y los datos transferidos en el túnel VPN estarán perfectamente protegidos. En RedesZone tenéis un completo tutorial sobre cómo configurar un servidor OpenVPN y conectarnos a él fácilmente.
OpenVPN nos permite utilizar tanto el protocolo TCP como UDP para el túnel de datos, tal y como habéis visto, TCP y UDP son muy diferentes, y siempre es recomendable utilizar UDP porque es muy rápido, el establecimiento de las comunicaciones es claramente más rápido con UDP que si utilizamos TCP. Si hacemos uso de TCP, tendremos a nuestra disposición el control de flujo, control de congestión, control de errores y muchas otras características que hacen que una conexión sea fiable. Sin embargo, cuando hacemos uso de una VPN siempre tenemos protocolos en la capa de aplicación que volverán a pedir los datos si estos llegan dañados, por tanto, tenemos redundancia, y lo que más nos interesa en una VPN es rapidez en el establecimiento y también velocidad en la transferencia de los datos. Por este motivo, lo mejor es usar UDP, si hay algún tipo de problema en la transferencia, los protocolos de la capa de aplicación como HTTP (el cual utiliza TCP por debajo) se encargarán de realizar las retransmisiones si fueran necesario, por lo que la conexión sí sería fiable (control de flujo, congestión, errores etc) aunque el túnel cifrado punto a punto utilice UDP.
Un aspecto muy importante es que un servidor OpenVPN con UDP, será capaz de aceptar más conexiones entrantes simultáneamente si utilizas UDP que si usas TCP, además, también tendremos un mayor ancho de banda ya que no se le añade una «carga» adicional, debido a que UDP es mucho más «liviano».
WireGuard
WireGuard es un nuevo protocolo de VPN que utiliza una criptografía completamente renovada y simple, ya que únicamente utiliza los algoritmos de cifrado simétrico, asimétrico y de hashing más seguros y eficientes que existen actualmente. En RedesZone ya hemos hablado en detalle y os hemos enseñado cómo configurar WireGuard para conectarnos de forma segura a nuestro hogar.
WireGuard hace uso de únicamente el protocolo de la capa de transporte UDP, esta decisión es porque UDP es mucho más rápido que TCP, tanto en el establecimiento de la conexión como posteriormente en la comunicación ya que su cabecera es mucho más pequeña. Uno de los puntos fuertes de WireGuard, es que nos permite realizar «roaming VPN» de manera fácil y muy rápida, esto significa que si estamos conectado a nuestro Wi-Fi y tenemos un túnel VPN establecido, si pasamos a la red 4G, este túnel VPN re-negocia muy rápidamente sin que casi te enteres. Si en lugar de usar UDP, usara TCP, este roaming VPN sería más lento, ya que habría que establecer previamente la comunicación TCP y posteriormente TLS.
TCP vs UDP en la web
Actualmente cuando navegamos por diferentes webs, hacemos uso del protocolo TCP, ya que HTTP y HTTPS utilizan TCP por debajo. Si hacemos uso de HTTP, el puerto por defecto es TCP 80, en caso de hacer uso de HTTPS, el puerto por defecto es TCP 443. Al usar TLS 1.2 o TLS 1.3, por debajo hacemos uso siempre del protocolo TCP. Gracias al protocolo TCP, nos garantiza que la información va a llegar completa y que no va a haber ningún problema. Hasta la versión de HTTP 2.0 siempre se ha utilizado el protocolo TCP, ya sea con TLS por encima para asegurar las comunicaciones punto a punto con criptografía, o directamente si hacemos uso de HTTP que va todo sin cifrar.
Ya es oficial que el próximo estándar HTTP 3.0 utilizará el protocolo de la capa de transporte QUIC, un protocolo realmente rápido y fiable, mucho más rápido que TCP y más fiable que UDP, además, es obligatorio que todo el tráfico vaya cifrado punto a punto, no hay posibilidad de no utilizar HTTPS cuando se utiliza HTTP/3 únicamente.
Una de las novedades de HTTP/3 es el uso de QUIC, un nuevo protocolo de comunicación que se está empezando a utilizar ampliamente, el cual funciona por encima de UDP en lugar de TCP, para proporcionar una mayor velocidad. QUIC se encargará de proporcionar la conectividad desde el cliente hasta el servidor web, y lo hará usando TLS 1.2 o TLS 1.3, ya que lógicamente, también tenemos soporte para estos protocolos de comunicación seguros.
¿Cuál es mejor para videoconferencias y juegos?
Los controles de flujo de TCP, aunque confiables, no pueden recuperar los datos perdidos lo suficientemente rápido como para ser útiles en las comunicaciones de vídeo en tiempo real. Y si bien la integridad de los datos es importante, debe equilibrarse con la velocidad para garantizar que el ritmo de la comunicación no se vea obstaculizado.
Es por eso que las aplicaciones web y de escritorio de aplicaciones como Lifesize se han desarrollado para priorizar UDP sobre TCP para el transporte de medios, mientras que sus sistemas de salas de reuniones Icon utilizan exclusivamente UDP para medios en tiempo real. Además, Lifesize emplea estrategias como la ocultación de errores, la corrección de errores y los controles de velocidad para conexiones sólidas de medios UDP sin demoras ni latencia.
Por ejemplo, Lifesize recomienda enfáticamente habilitar el acceso a través de UDP hacia sus servidores en la nube, ya que esto puede ayudar a lograr la mejor experiencia de usuario posible.
Comparando directamente ambos protocolos a nivel general, podemos llegar a conclusiones bastante claras, lo primero que podemos destacar es que el protocolo TCP resulta ideal ya que tiene una sobrecarga asociada, esto quiere decir, que cuando gran parte de dicha sobrecarga se encuentra en la conexión, la aplicación permanece conectada por un periodo de tiempo indefinido y eso proporciona mucha versatilidad.
Por otro lado, como mencionamos en otro apartado, UDP resulta ideal para utilizarlo en situaciones donde se requiere el uso constante de paquetes multimedia como es el caso de VoIP o videoconferencias, así como también resulta muy útil al momento de si necesitamos enviar paquetes por separado tanto a nivel de cliente como de servidor y no podemos permitir que dichos paquetes sufran ningún tipo de retraso, un claro ejemplo de esto, son los juegos multijugador.
Evolución de los protocolos
Cada día que pasa Internet es más grande, y esto no solo es un gran cambio para los usuarios que tienen más información a su disposición, si no que para los protocolos que rigen internet también supone un gran reto. Mantenerse actualizados y no quedarse obsoletos es el principal objetivo de estos, para que todo siga funcionando con normalidad. Algunos de los retos a los que se enfrentan son:
- Limitaciones de rendimiento: Siempre que aparece algún problema estructural en algún protocolo de transporte y aplicación, surgen problemas que hacen que las redes no funcionen de forma eficiente. Esto acaba afectando a los usuarios en forma de latencia que pueden hacer que la experiencia de uso de internet sea mala. Por lo cual uno de los factores donde los protocolos deben y evolucionan, es en el rendimiento que son capaces de ofrecer.
- Personalización: Muchas empresas y grandes organizaciones, tratan de adaptar los protocolos a sus necesidades, lo cual estaba permitido por los estándares. El problema llega cuando estos cambios, incluso cuando suponían algún tipo de mejora, resultaba complicado implantarlos de forma masiva, y el proceso de estandarización era muy complejo.
- Cifrado: La seguridad es un factor cada vez más importante en internet, y a lo que los protocolos se deben adaptar sin ninguna excusa. Cada día aparecen nuevas amenazas con diferentes riesgos para los equipos y usuarios de internet. Muchas veces son los propios ISP quienes nos protegen en su red, y a nivel de los usuarios, con herramientas de seguridad instaladas en los equipos. Pero sin duda, esto es algo que no puede pasar desapercibido en los protocolos, los cuales tienen que adaptarse a nuevos estándares de seguridad.
Todo lo que se encuentra en internet, debe evitar caer en el estancamiento, sobre todo cuando de ello depende la comunicación más básica que podemos encontrar, de la cual depende que internet funcione de forma correcta y eficiente. Tal y como habéis visto, tanto TCP como UDP son dos protocolos fundamentales de Internet, y cada uno de ellos se encargan de diferentes protocolos de la capa de aplicación.