Comprendiendo la Capa de Transporte: Sockets, Puertos, TCP, UDP y NAT

Responsabilidades de la Capa 4

  • Seguimiento ininterrumpido de la comunicación entre aplicaciones en los hosts de origen y destino.
  • Segmentación de datos, gestión de cada porción y reensamblaje de segmentos en flujos de datos de aplicación.
  • Identificación de las diferentes aplicaciones.
  • Ofrecer un servicio confiable en redes no confiables.

Servicios y Primitivas de Transporte

Para que los usuarios accedan al servicio de transporte, la capa de transporte debe contar con operaciones para los programas de aplicación, es decir, una interfaz del servicio de transporte. Cada servicio de transporte tiene su propia interfaz. El usuario puede utilizar las primitivas para solicitar dichos servicios.

Primitiva: forma en la que el usuario se comunica con el sistema operativo.

Sockets y Puertos

Como no se puede utilizar sólo la dirección IP para dichos servicios, se recurre a los sockets. Los sockets son puntos de acceso que una aplicación puede crear para acceder a los servicios de comunicación que ofrecen las pilas de protocolos. Estos sockets almacenan el par (IP, puerto) de origen y destino junto con los datagramas a enviar o recibir, dependiendo de la acción.

Los puertos son direcciones asignadas por números enteros que identifican los distintos servicios de la computadora.

Rangos de Puertos (16 bits):

  • Puertos privilegiados: 0 – 1023
  • Puertos no privilegiados: 1024 – 65535 (=216 – 1)

Ejemplo: el puerto 80 corresponde al servicio web (HTTP).

A veces, hay redes privadas (intranets) que requieren de estos servicios, pero se ven imposibilitadas de utilizarlos, ya que sus direcciones IP son privadas (cada dirección IP de la red privada es privada) y, por lo tanto, no enrutables a Internet.

NAT (Traducción de Direcciones de Red)

La Traducción de Direcciones de Red (NAT) es la reescritura por parte de un enrutador de campos de la cabecera IP de los datagramas que encamina: cambiar la IP y el puerto origen en el tráfico saliente, y cambiar la IP y el puerto destino en el tráfico entrante. Su propósito es paliar la escasez de direcciones IP, permitiendo que una organización utilice direcciones privadas internamente y tenga una sola IP global (o unas pocas).

Direccionamiento con NAT

Todos los ordenadores de la red interna usan direcciones privadas. El enrutador que da acceso a Internet tiene una dirección pública. Se realiza NAT siempre que haya disponibles menos direcciones IP públicas que máquinas en la red interna.

Tráfico Saliente: Mecanismo Básico

El enrutador NAT cambia la IP de origen, sustituyendo la IP privada de la máquina que creó el datagrama por la IP pública del enrutador. La máquina que recibe el datagrama cree que el origen del mismo es el propio enrutador NAT.

Tráfico Saliente: Mecanismo Detallado

El enrutador NAT mantiene una tabla con los cambios que realiza en el tráfico saliente para poder revertirlos en el tráfico entrante. Si varias máquinas de la red privada utilizan el mismo puerto de origen para distintas comunicaciones, el enrutador NAT asignará puertos externos únicos para cada una. Así, modifica la IP de origen (por su IP pública) y el puerto de origen (por el puerto externo asignado) del datagrama saliente.

Tráfico Entrante que Responde al Saliente

El enrutador NAT cambia en el datagrama entrante la IP destino y el puerto destino por la IP interna y el puerto interno correspondientes a la entrada en su tabla NAT, basándose en la IP destino (la IP pública del enrutador) y el puerto destino del datagrama entrante (el puerto externo que asignó).

Tráfico Nuevo Entrante

Por defecto, un enrutador NAT descarta el tráfico entrante nuevo (no solicitado). Soluciones:

  1. Incluir en la configuración del enrutador una IP interna (por ejemplo, una DMZ o un host específico) a la que redirija todo el tráfico nuevo no reconocido.
  2. Abrir puertos (Port Forwarding): Añadir manualmente (y a priori) entradas en la tabla NAT para el tráfico entrante nuevo, en función del puerto destino al que va dirigido. Al abrir un puerto, se puede especificar que haya un cambio del puerto destino a un valor diferente para la red interna. Esto permite, por ejemplo, que dos servidores en distintas máquinas de la red privada operen en el mismo puerto internamente, pero sean accesibles desde el exterior a través de puertos externos distintos.

Problema: Direcciones/Puertos en la Parte de Datos

Algunos protocolos o aplicaciones incrustan direcciones IP y/o números de puerto en la carga útil (parte de datos) del datagrama IP. El enrutador NAT estándar solo modifica los encabezados IP/Transporte, por lo que estos valores en la carga útil no se cambian. Si la máquina destino utiliza estos valores incrustados, la comunicación fallará al no identificar correctamente el origen real tras NAT. Solución: El enrutador NAT debe ser consciente de la aplicación (contar con una funcionalidad de Application Layer Gateway – ALG) y conocer el protocolo específico para poder inspeccionar y modificar estos valores en la carga útil.

TCP (Protocolo de Control de Transmisión)

TCP es uno de los principales protocolos de la capa de transporte. Proporciona un servicio de entrega de flujo confiable. Es un protocolo de propósito general que se puede adaptar para utilizarlo con diversos sistemas de entrega subyacentes (como IP).

Necesidad de la Entrega de Flujo

En el nivel de aplicación, los programas a menudo necesitan enviar grandes volúmenes de datos de una computadora a otra. TCP actúa como un protocolo de propósito general que aísla a los programas de aplicación de los detalles de la red subyacente, ofreciendo una interfaz uniforme para el servicio de transferencia de flujo.

Características del Servicio de Entrega Confiable de TCP

  • Orientación de flujo: Cuando dos programas de aplicación transfieren grandes volúmenes de datos, se consideran como un flujo de bits divididos en octetos (bytes). El servicio de entrega de flujo en la máquina de destino entrega al receptor exactamente la misma secuencia de octetos que le envió el transmisor de la máquina de origen.
  • Conexión de circuito virtual: Antes de poder empezar la transferencia, los programas de aplicación (transmisor y receptor) interactúan con sus respectivos sistemas operativos, informándoles de la necesidad de establecer una conexión para la transferencia de flujo.
  • Transferencia con memoria intermedia (Buffering): Los programas de aplicación envían un flujo de datos a través del circuito virtual pasando repetidamente octetos de datos al software del protocolo TCP. TCP puede almacenar estos datos en un búfer antes de enviarlos en segmentos. En el extremo receptor, el software de protocolo entrega los octetos del flujo de datos en el mismo orden en que se enviaron, poniéndolos a disposición del programa de aplicación receptor tan pronto como se reciben y verifican. TCP puede dividir el flujo en segmentos de tamaño adecuado para la red, independientemente de cómo la aplicación entregue los datos.

Para aplicaciones donde los datos deben entregarse inmediatamente, incluso si el búfer no está lleno, se utiliza el mecanismo PUSH. En el extremo transmisor, una operación PUSH obliga al software TCP a transferir todos los datos acumulados sin esperar a que se llene el búfer. Cuando un segmento con la bandera PSH llega al extremo receptor, TCP pone los datos a disposición de la aplicación receptora sin demora.

  • Flujo no estructurado: TCP trata los datos como una secuencia de bytes sin imponer una estructura de mensajes o registros.
  • Conexión Full Dúplex: Las conexiones TCP permiten la transferencia de datos en ambas direcciones simultáneamente. Una conexión full dúplex consiste en dos flujos independientes que se mueven en direcciones opuestas, sin ninguna interacción aparente. Un proceso de aplicación puede terminar el flujo en una dirección (cierre parcial o half-close) mientras los datos continúan moviéndose en la otra dirección.

Mecanismos de Confiabilidad en TCP

El acuse de recibo positivo con retransmisión (PAR) es una técnica fundamental. Requiere que el receptor envíe un mensaje de acuse de recibo (ACK) al origen para confirmar la recepción de los datos. El transmisor mantiene un registro de cada segmento enviado y espera un ACK antes de considerar los datos como entregados (o antes de enviar más datos, dependiendo de la ventana deslizante). El transmisor también inicia un temporizador cuando envía un segmento y lo retransmite si el temporizador expira antes de que llegue el ACK correspondiente. Si el tiempo expira, el transmisor asume que el segmento se perdió y lo reenvía. Esto puede generar duplicados si un ACK se retrasa o se pierde. Los protocolos confiables como TCP detectan segmentos duplicados mediante el uso de números de secuencia, que permiten al receptor identificar y descartar duplicados. Los ACKs también incluyen números de secuencia para que el transmisor pueda asociarlos correctamente con los segmentos enviados.

Puertos, Conexiones y Puntos Extremos en TCP

TCP opera sobre IP en el modelo de capas de protocolos. Permite que varios programas de aplicación en una misma máquina se comuniquen de manera concurrente y realiza la demultiplexación del tráfico TCP entrante hacia los programas de aplicación correctos. Para ello, utiliza números de puerto para identificar el proceso de aplicación destino dentro de una máquina. Cada puerto tiene asignado un número entero.

TCP se diseñó según la abstracción de conexión, donde los objetos a identificar son conexiones de circuito virtual, no solo puertos individuales. TCP utiliza la conexión como su abstracción fundamental. Las conexiones se identifican mediante un par de puntos extremos (sockets). Un punto extremo es un par de números enteros (dirección IP del host, número de puerto TCP en dicho host). Como TCP identifica una conexión por medio de una tupla de 4 elementos (IP origen, puerto origen, IP destino, puerto destino), varias conexiones en la misma máquina pueden compartir un mismo número de puerto TCP local si se conectan a diferentes puntos extremos remotos, o si diferentes puntos extremos remotos se conectan a él.

Establecimiento de una Conexión TCP (Handshake de Tres Vías)

Para establecer una conexión, TCP utiliza un saludo de tres vías (three-way handshake):

  1. Primer segmento (SYN): El cliente envía un segmento con el bit SYN (Synchronize) activado en el campo de código al servidor. Este segmento también contiene el Número de Secuencia Inicial (ISN) del cliente.
  2. Segundo segmento (SYN-ACK): El servidor responde con un segmento que tiene activados tanto el bit SYN como el bit ACK (Acknowledge). Este segmento acusa recibo del SYN del cliente (incrementando el número de secuencia del cliente) e incluye el ISN del servidor.
  3. Tercer segmento (ACK): El cliente envía un segmento con el bit ACK activado, acusando recibo del SYN-ACK del servidor (incrementando el número de secuencia del servidor). Este mensaje finaliza el establecimiento de la conexión, informando al servidor que ambos extremos están de acuerdo.

Número de Secuencia Inicial

El saludo de tres vías cumple dos funciones importantes:

  1. Garantiza que ambos lados estén listos para transferir datos y que ambos sean conscientes de esta disposición mutua.
  2. Permite que ambas partes acuerden los números de secuencia iniciales (ISN) para sus respectivos flujos de datos. Estos ISN son enviados y confirmados durante el saludo. Cada máquina debe seleccionar su ISN de forma que sea difícil de predecir (generalmente pseudoaleatoria) para mejorar la seguridad de la conexión.

Terminación de una Conexión TCP

Operación CLOSE: TCP utiliza un proceso similar a un saludo de cuatro vías (o una modificación del de tres vías) para cerrar conexiones de forma ordenada.

  1. Cuando un programa de aplicación informa a TCP que ya no tiene más datos para enviar, TCP cierra la conexión en esa dirección enviando un segmento con el bit FIN (Finish) activado. La conexión entra en el estado FIN_WAIT_1.
  2. El otro extremo recibe el FIN y envía un ACK para confirmarlo. Puede continuar enviando datos si aún los tiene (la conexión está ahora semi-cerrada). Una vez que este segundo extremo también ha terminado de enviar sus datos, envía su propio segmento FIN.
  3. El primer extremo recibe este segundo FIN y envía un ACK final.
  4. Después de un período de espera (estado TIME_WAIT) para asegurar que todos los segmentos hayan llegado y que los ACKs no se pierdan, el software TCP en cada punto extremo borra sus registros de la conexión.

Ambas direcciones de la conexión se cierran de forma independiente.

UDP (Protocolo de Datagramas de Usuario)

User Datagram Protocol (UDP) o Protocolo de Datagramas de Usuario, ofrece las siguientes características:

  • Proporciona números de puerto para distinguir entre múltiples aplicaciones o servicios que se ejecutan en una misma computadora.
  • Utiliza IP para transportar mensajes entre hosts y comparte la misma semántica de entrega de datagramas que IP: sin conexión y no confiable.
  • No emplea acuses de recibo (ACK), no proporciona mecanismos de control de flujo (retroalimentación para controlar la velocidad) ni control de congestión, y no ordena los mensajes entrantes. Por lo tanto, los mensajes pueden perderse, duplicarse o llegar desordenados.
  • Demultiplexación en el host receptor: UDP utiliza el número de puerto UDP destino contenido en el encabezado del datagrama para entregar los datos al proceso de aplicación correcto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.