Protocolos de Transporte: TCP y UDP
El nivel de transporte está implementado en la Arquitectura TCP/IP por dos protocolos, TCP y UDP.
El Protocolo TCP lleva a cabo las principales funciones del nivel de transporte del modelo OSI, proporciona la entrega fiable de mensajes completos desde un origen a un destino.
UDP es un Protocolo más sencillo que proporciona la entrega de mensaje de origen a destino, pero no ofrece la fiabilidad de TCP, por lo que cuando se usa UDP deben ser los protocolos del nivel de aplicación los que se encarguen del control de errores.
Una de las funciones importantes implementadas en el nivel de transporte es la definición de los puertos del Protocolo, llamados simplemente puertos, que ofrecen un mecanismo para identificar la comunicación de un proceso individual dentro de un Host. En la Arquitectura TCP/IP los puertos son números de 16 bits, es decir, el rango de puertos válidos es de 0 a 65.535.
Protocolo UDP
El Protocolo UDP (user Datagram Protocol, Protocolo de datagramas de usuario) es un Protocolo del nivel de transporte en la Arquitectura TCP/IP no orientado a conexión, que proporciona las funciones básicas necesarias para la entrega de datos de un origen a un destino. No se lleva a cabo control de flujo ni de errores, además UDP no proporciona funciones de secuenciamiento ni de reordenación de paquetes. No puede especificar el paquete dañado cuando se produce un error ni detecta paquetes perdidos.
Como se puede ver, las funciones de UDP son muy limitadas. Realmente, la principal función de UDP es proporcionar el direccionamiento de los puntos de acceso a los diferentes protocolos del nivel de aplicación, Es decir, los puertos. Por tanto, los protocolos del nivel de aplicación que utilicen UDP deben implementar mecanismos de control de flujo y de errores para llevar a cabo una comunicación fiable. El formato del paquete UDP es el siguiente:
- Dirección del puerto origen. Identificador del puerto del proceso origen.
- Dirección del puerto destino. Identificador del puerto del proceso destino.
- Longitud total. Es el tamaño en bytes del Datagrama UDP incluida la cabecera.
- Checksum. Suma de comprobación utilizada para la detección de errores.
Protocolo TCP
El Protocolo TCP (transmission control Protocol, Protocolo de control de transmisión) proporciona todas las funciones de un Protocolo de nivel de transporte, es decir, es un Protocolo orientado a conexión que permite la comunicación fiable de datos de un origen a un destino. Implementa funciones de control de flujo y control de errores.
Las unidades de datos en el Protocolo TCP se conocen como segmentos. la estructura de un segmento TCP es la siguiente:
- Puerto origen. Dirección del puerto en el proceso origen.
- Puerto destino. Dirección del puerto en el proceso destino.
- Número de secuencia. Cada uno de los segmentos en los que se dividen los datos en una comunicación por medio de TCP se numera. En este campo se envía el número asignado a cada paquete TCP.
- Número confirmación. Si el Indicador ACK está activo, este campo confirma la recepción correcta y sin errores de todos los segmentos con un número de secuencia menor o igual al indicado en este campo y que estuvieran pendientes de confirmación.
- Longitud. Este campo contiene el tamaño de la cabecera del segmento TCP expresado en grupos de 4 bytes, es decir, para un valor de 5 en este campo, la longitud de la cabecera sería 20 bytes.
- Reservado. Campo reservado de 3 bits.
- Indicadores. Este campo contiene los siguientes flags o indicadores:
–NS (Nonce Sum). Indicador utilizado para llevar a cabo funciones de control de la congestión.
–CWR (Congestion Window Reduced). Indicador utilizado para llevar a cabo funciones de control de la congestión.
–ECE (ECN-ECHO). Indicador que se activa para indicar la existencia de Información sobre congestión en el campo ECN del Datagrama IP.
-URG, indica que hay datos urgentes. El campo Puntero Urgente indica la cantidad de datos urgentes en el segmento.
–ACK, bit utilizado para validar segmentos recibidos.
-PSH, indica al receptor que entregue al nivel superior todos los datos que tenga disponibles en el buffer de recepción.
–RST, indica que se necesita reiniciar la comunicación.
-SYN, bit utilizado para sincronizar los números de secuencia.
–FIN, bit utilizado para indicar el fin de la comunicación. - Tamaño de ventana. Parámetro que tiene relación con la función del control de flujo. Se utiliza una técnica conocida como ventana deslizante y este campo indica el tamaño de dicha ventana. El tamaño de la ventana está relacionado con el número de paquetes consecutivos que pueden enviarse sin recibir una confirmación de que han llegado. Dicho tamaño depende de las condiciones de transmisión. Si las condiciones de transmisión son buenas, se puede aumentar el tamaño de la ventana, y si son malas se debe disminuir.
- Checksum. Campo utilizado para la comprobación de errores en la Información tanto de la cabecera como de los datos del paquete TCP.
- Puntero Urgente. Este campo contiene un puntero al final de los datos urgentes, por lo que, a partir de la posición indicada en este campo, comienzan los datos con prioridad normal.
- Opciones. Es un campo opcional utilizado para enviar diferentes tipos de Información adicional. Su longitud es variable se obtiene del campo Longitud de la propia cabecera TCP.
Observación! Uno de los usos del campo Opciones es el envío de un parámetro llamado MSS (Maximun Segment Size, tamaño máximo del segmento). Este parámetro se utiliza para definir cuál es el tamaño del segmento más grande que se puede enviar. Lo más óptimo es que este tamaño sea el adecuado para evitar la fragmentación de datagramas IP. Se suele enviar en el proceso de establecimiento de la conexión TCP.
Como hemos visto, TCP es un Protocolo orientado a conexión y por lo tanto implementa mecanismos para establecer y finalizar conexiones. Además, para llevar a cabo el control de flujo de los datos se emplea la técnica de ventana deslizante. El Procedimiento para establecer una conexión se lleva a cabo en tres pasos:
1) El origen de la conexión (normalmente un cliente de un servicio de red) envía un segmento TCP con un número de secuencia inicial N y el Indicador SYN activo.
2) El destinatario de la conexión (normalmente un servidor de un servicio de red) responde enviando un segmento TCP con otro número de secuencia M, el Indicador SYN activo y el ACK activo con un número de confirmación N+1.
3) El último paso, el origen de la conexión envía otro segmento TCP con el número de secuencia N+1 y con el Indicador de ACK activo y el número de confirmación M+1. la siguiente figura resume el proceso de establecimiento de una conexión TCP.
Para finalizar una conexión TCP se establece un mecanismo de cuatro pasos:
1) El proceso que desea finalizar la conexión envía un segmento TCP con el Indicador FIN activo y un número de secuencia inicial N.
2) El proceso en el otro extremo de la conexión envía entonces un segmento TCP con un número de secuencia inicial M y el Indicador ACK activo, con el número de confirmación N+1.
3) A continuación, este último proceso envía otro segmento TCP, esta vez con el Indicador FIN activo y número de secuencia M+1.
4) El primer proceso, cuando recibe los segmentos anteriores, genera un segmento TCP con número de secuencia N+1 y el Indicador acK activo con el número de confirmación M+2. en la siguiente figura se puede ver un ejemplo de finalización:
Las conexiones TCP pueden encontrarse en varios estados que definen su comportamiento inmediato:
- CLOSED: No hay conexión
- LISTEN: Un proceso servidor espera las peticiones de Procesos clientes.
- SYN-SENT: Se ha enviado una petición de conexión. En espera del reconocimiento.
- SYN-RCVD: Se ha recibido una petición de conexión.
- ESTABLISHED: Conexión establecida.
- FIN-WAIT-1: Se ha solicitado el cierre de la conexión.
- FIN-WAIT-2: El equipo remoto ha aceptado el cierre de la conexión.
- TIME-WAIT: Esperando la retransmisión de segmentos.
- CLOSE-WAIT: Un proceso servidor espera el cierre del proceso cliente.
- LAST-ACKEl: proceso servidor espera el último reconocimiento