UDP (User Datagram Protocol)
UDP es un protocolo de capa de transporte, principalmente orientado a la velocidad por
encima de la integridad. Trabaja al mejor esfuerzo, es decir que no garantiza que los
paquetes lleguen correctamente y a su vez, es un protocolo no orientado a la conexion, lo
que significa que no traza un camino previo a la comunicación, no forma un conducto
entre emisor y receptor. Al ser un protocolo que trabaja al mejor esfuerzo, la aplicación es
la encargada de corregir errores. Si la aplicación detecta que un datagrama es erroneo, lo
descarta.
En los protocolos UDP y TCP se introduce el concepto de Puertos. El protocolo IP funciona
para especificar un host o una conexion, pero al momento de llegar al host, no se sabe
exactamente donde tiene que ir el paquete. Ahi es donde entran los protocolos UDP y TCP
para indicar el puerto especifico al cual va dirigido el paquete. Existen un total de 65535
puertos, tanto para UDP y para TCP, donde cada puerto puede alojar una aplicacion o
servicio.
Paquete UDP
Donde:
Source Port: Indicia el puerto emisor
Destination Port: Indica el puerto destino
Length: Numero de octetos del header mas el payload.
UDP Checksum: Es Opcional. Suma de verificación de todo el segmento UDP (pseudo
header + header + datos).
Pseudo encabezado
El pseudo encabezado es una propiedad que existe tanto en UDP como en TCP, en la que
se utiliza ciertos campos del encabezado de la capa de red (capa 3) para crearlo. Su
objetivo es verificar la integridad de los datos y asegurarse de que están destinados al
host correcto, permitiendo así una doble verificación en el proceso de entrega. Aunque
este modelo rompe con la independencia de capas, un principio fundamental del modelo
OSI, se justifica por la necesidad de asegurar que los datos se entreguen correctamente,
especialmente en protocolos que requieren fiabilidad.
Este pseudo encabezado suele tener un tamaño de unos 12 bytes y contiene los
siguientes campos
Encapsulado UDP
Multiplexación y Demultiplexación
En el contexto de UDP, la multiplexación se refiere a la capacidad del protocolo de manejar
múltiples flujos de datos simultáneamente a través de un solo dispositivo o una misma red,
diferenciando entre esos flujos mediante el uso de números de puerto.
En UDP, a diferencia de TCP, no se establece una conexión previa, esta cualidad permite
que varias aplicaciones o procesos envíen y reciban datagramas simultáneamente a traves
de una sola interfaz de red. Este proceso es posible gracias a la multiplexación.
Multiplexación en el envió
Un dispositivo puede tener multiples aplicaciones enviando datos simultáneamente a
través de la misma conexión de red. Cada una de estas aplicaciones se distingue
individualmente en los datagramas a través del puerto de origen (campo del header UDP),
lo que permite que los datagramas de cada aplicación se identifiquen y se transmitan
correctamente a través de la red, aunque utilicen la misma IP.
Demultiplexación en la recepción
Cuando un dispositivo recibe un datagrama UDP, el sistema operativo utiliza el número de
puerto de destino para dirigir el datagrama a la aplicación correcta. Esto significa que
varios datagramas pueden llegar al mismo dispositivo en la misma interfaz de red (misma
dirección IP), pero el número de puerto de destino permite multiplexar y asegurarse de
que cada datagrama llegue a la aplicación correcta.
Ejemplo práctico
Imagina un servidor que aloja varias aplicaciones diferentes:
La aplicación A escucha en el puerto UDP 5000.
La aplicación B escucha en el puerto UDP 6000.
Cuando los clientes envían datagramas a este servidor, cada uno de ellos envía el
datagrama dirigido al puerto apropiado según la aplicación que desean contactar:
Si un cliente quiere enviar datos a la aplicación A, enviará un datagrama UDP al puerto
5000 del servidor.
Si otro cliente quiere comunicarse con la aplicación B, enviará el datagrama al puerto
6000.
El servidor utiliza la multiplexación para determinar a qué aplicación dirigir cada datagrama
según el número de puerto, sin confundir los mensajes entre ambas aplicaciones, aunque
lleguen a través de la misma dirección IP.
Características Importantes
UDP no puede conocer una dirección IP a menos que interactúe con la capa de red.
UDP esta fuertemente integrado al protocolo IP
Se viola la independencia de capas.
El multiplexado y demultiplexado en UDP ocurre a través de los puertos.
Si un datagrama UDP no corresponde a un puerto en uso, se envía un error ICMP y se
descarta el datagrama
Máximo Tamaño UDP
Tamaño máximo de datagrama -> Bytes (
2
16
65535 )
Tamaño del Header UDP -> Bytes 8
Tamaño del Header IP -> Bytes
20
Máximo tamaño de datos UDP -> Bytes
65507
TCP (Transmission Control Protocol)
TCP (Transmission Control Protocol) es uno de los principales protocolos de Internet. Es
un protocolo de capa cuatro (Transporte) el cual esta orientado a la conexión y a intentar
garantizar la integridad de los datos. A diferencia de UDP, este establece una conexión
previa con el destino, a través de un handshake. Estas características, hacen que TCP
ofrezca un servicio de transferencia de datos eficiente y confiable.
Características Principales
Orientado a la Conexión: Traza un camino previo desde el origen al destino,
implementando el famoso handshake de 3 pasos (SYN -> SYN/ACK -> ACK).
Full Duplex: Una vez establecida la conexión, ambas partes pueden enviar y recibir
datos simultáneamente.
Fiable: La combinación entre la conexión previa y el uso de paquetes de
reconocimiento ACK, hace que TCP sea un protocolo mucho mas fiable en cuanto a
integridad de los datos se refiere.
Flujo de Bytes Controlado: Ambas partes pueden gestionar la cantidad de datos a
enviar o recibir con el objetivo de asegurar que el receptor pueda manejar la carga de
información.
Segmentación: Los paquetes se pueden dividir en paquetes mas chicos.
Transmisión Uno a Uno: El host origen transmite directamente al host destino.
Confiabilidad
La confiabilidad se logra a partir del uso de paquetes de reconocimiento ACK.
Una vez transmitido un paquete, se inicia un temporizador. Si el temporizador finaliza y el
paquete de reconocimiento ACK aun no ha sido recibido, se da el paquete por perdido y se
retransmite.
Problema de Latencia
El esquema anterior, muestra una falencia clara en rendimiento, ya que se deben enviar los
paquetes secuencialmente y esperar el reconocimiento para transmitir el siguiente. Para
solucionar esto, se implementa en UDP un esquema similar al utilizado en el protocolo de
capa 2 Go-Back-N o Vuelta a N . Donde el emisor transmite varios paquetes, los cuales
están identificados y en el caso de no recibir un ACK por parte de alguno de ellos, lo
retransmite. Para lograr esto, es necesario identificar cada paquete, es por eso que cada
datagrama TCP, cuenta con dos identificadores: Sequence Number (Paquete Transmitido)
y Acknowledgment Number (Paquete que espero que me envíen).
En el campo Sequence Number, siempre va el numero del paquete que yo envió,
mientras que en ACK, va el numero del paquete que espero recibir. Esto se mantiene
incluso en una comunicación con un flujo largo de paquetes, donde estos números se
van incrementando secuencialmente
Encapsulación TCP
Formato de Trama
Donde:
Source Port: Puerto de origen
Destination Port: Puerto destino
Sequence Number: Numerador de paquetes enviados.
Acknowledgment Number: Numerador del proximo paquete a recibir.
HLEN: Tamaño del Header.
Not Used: Campo reservado para uso futuro. Va siempre en 0
Code Bits: Estos bits son conocidos como control flags o banderas, y permiten el
control de la conexión TCP.
Window: Tamaño de la ventana de recepción, que indica la cantidad de bytes que el
receptor está dispuesto a aceptar.
Checksum: Suma de verificación de todo el segmento TCP (pseudo header + header
+ datos)
Urgent PTR: Apunta al byte dentro del flujo de datos que es urgente. Solo es valido
cuando el bit URG está activo.
Valores de Code Bit
Bit Nombre Descripción
0 NS Protección contra interferencias con bits de congestión (RFC
(Nonce) 3540).
1 CWR Indica que el emisor ha reducido la ventana de congestión.
2 ECE Indica que el emisor puede manejar notificaciones de congestión.
3 URG Señala que el campo Urgent Pointer es válido y debe ser
procesado.
4 ACK Indica que el campo Acknowledgment es válido.
5 PSH Solicita la entrega inmediata de los datos al receptor.
Bit Nombre Descripción
6 RST Restablece la conexión.
7 SYN Inicia una nueva conexión.
8 FIN Finaliza la conexión.
Tiempo de Viaje Redondo (RTT)
El tiempo de viaje redondo (RTT) es el tiempo que tarda un paquete en viajar desde un
origen a un destino y de vuelta, es decir, el tiempo total de ida y vuelta.
El RTT suele ser utilizado para determinar el tiempo que se debe esperar para considerar
un paquete emitido como perdido.
Problema de tiempos variables
El principal problema a la hora de configurar un temporizador para considerar un paquete
como perdido suele ser la duración del mismo. ¿Cuánto debe durar el temporizador? La
gráfica anterior plantea la volatilidad de los RTT en una red congestionada, donde algunos
paquetes tienen un RTT muy bajo, mientras que otros tienen un RTT muy alto. Por lo tanto,
es necesario calcular el RTT de una manera más estable y confiable.
Como se calcula un SRTT (Smoothed Round-Trip Time)
El SRTT es el resultado de aplicar un algoritmo de suavizado, que ajusta dinámicamente el
valor del RTT basado en las mediciones recientes de los tiempos de ida y vuelta. Este valor
se calcula mediante la siguiente fórmula:
SRTT = A × SRTT + (1 − A) × NRTT
La fórmula anterior NO es una igualdad
Donde:
A es un factor de ponderación o constante de suavizado, que toma valores entre 0 y 1.
Si A está cerca de 1, se le da más peso al SRTT anterior, lo que significa que la red es
más estable. Si A está cerca de 0, se le da más peso al NRTT (último RTT medido), lo
que sugiere fluctuaciones recientes en la red. En TCP, A suele tener un valor estándar
de 0.875.
SRTT es el valor suavizado del RTT, basado en el tiempo que tarda un paquete NO
RETRANSMITIDO en llegar a su destino y recibir una respuesta.
NRTT es el último RTT medido, es decir, el tiempo de ida y vuelta reciente para un
paquete específico.