Protocolos de Transporte TCP y UDP: Gestión de Conexiones y Asignación de Puertos
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 4,41 KB
La Capa de Transporte: Funciones Esenciales
Mientras que la capa de enlace ofrecía un servicio de entrega de mensajes entre equipos de la misma red, la capa de transporte es la encargada de entregar mensajes entre equipos aunque no estén en la misma red.
En el nivel de TCP/IP existen dos protocolos principales: uno **fiable y orientado a conexión** (**TCP**) y otro **no fiable y no orientado a conexión** (**UDP**).
El Concepto de Puerto en la Capa de Transporte
La capa de transporte introduce el concepto de **puerto**, un número de **16 bits**.
Esto permite un máximo de **65.536 puertos**. El uso de puertos es fundamental, ya que permite la existencia de **múltiples conexiones simultáneas**.
Cada aplicación que requiere de la red se asocia a uno o varios puertos, según su necesidad, tanto para el envío como para la recepción de información. Es importante notar que el puerto usado no tiene que ser (y no suele ser) el mismo en cada extremo de la conexión.
Los puertos son utilizados tanto por TCP como por UDP y son independientes para cada uno de ellos.
Clasificación de Puertos
Los puertos se clasifican en tres rangos principales:
- Puertos Bien Conocidos (*Well-Known*): Del 0 al 1023. Están asociados a aplicaciones de uso generalizado y son asignados por la **IANA** (Internet Assigned Numbers Authority).
- Puertos Registrados: Del 1024 al 49151. Pueden ser usados por aplicaciones de cliente que no tienen un puerto asignado por la IANA, o por servicios específicos.
- Puertos Temporales, Dinámicos, Efímeros o Privados: Del 49152 en adelante. Se suelen usar para conexiones temporales de cliente.
Localización de la Lista de Servicios
Podemos consultar los puertos y sus aplicaciones asociadas en los siguientes archivos del sistema operativo:
- En *Windows*:
c:\windows\system32\drivers\etc\services - En *GNU/Linux*:
/etc/services
TCP (*Transmission Control Protocol*)
TCP es un protocolo **fiable** porque garantiza que los datos lleguen correctamente. Para ello, el receptor envía una confirmación (*ACK*) por cada paquete de datos que recibe. Si, pasado un tiempo, el emisor no recibe la confirmación de algún paquete, lo retransmite. El mecanismo usado para gestionar este flujo se llama **protocolo de ventana deslizante**.
Los paquetes enviados se numeran para facilitar su reordenamiento y la gestión de estas confirmaciones.
Es un protocolo **orientado a la conexión**, ya que se establece una negociación previa a la transmisión de los datos (el *three-way handshake*) que se cierra formalmente una vez terminada la comunicación.
UDP (*User Datagram Protocol*)
**UDP** no es **fiable** porque los mensajes pueden llegar dañados, duplicados o, simplemente, no llegar.
Incorpora un mecanismo de *checksum* para verificar si los mensajes llegan dañados, pero no realiza ninguna acción para repararlos o reclamarlos.
En una transmisión UDP no se realiza una conexión previa ni un cierre ordenado. Se empieza a transmitir sin necesidad de un acuerdo previo.
La transmisión UDP es inherentemente **unidireccional** en su gestión de datagramas, y el protocolo no ofrece mecanismos para que el receptor conteste al emisor.
Monitoreo y Escaneo de Puertos
Netstat
**Netstat** es una utilidad del sistema operativo, disponible en *Windows* y *GNU/Linux* (aunque con algunas diferencias en el significado de los argumentos), que permite visualizar los puertos que está utilizando nuestro equipo, tanto para conexiones entrantes como salientes.
Escáneres de Puertos
Los **escáneres de puertos** son aplicaciones diseñadas para identificar qué servicios o aplicaciones tiene un equipo a la escucha y qué puertos utiliza.
Estas herramientas son ampliamente utilizadas en el ámbito de la **seguridad informática** y en la detección de vulnerabilidades.
NMAP (Network Mapper)
**NMAP** es considerado el escáner de puertos más avanzado. Es **gratuito** y de **código abierto**, y es capaz no solo de identificar los puertos abiertos de una máquina, sino también de determinar el servicio y la versión que se está ejecutando, la versión del sistema operativo, y si existe algún tipo de **cortafuegos** o filtro de paquetes.