TCP, UDP y puertos
Qué es un puerto y qué es un socket, en qué se diferencian TCP y UDP, cómo se abre una conexión TCP y cuáles son los puertos bien conocidos que hay que llevar sabidos al examen.
Puertos, sockets y unidades de datos
La capa de red deja el paquete en la máquina correcta, pero dentro de esa máquina puede haber veinte programas esperando información. Distinguirlos es el trabajo de la capa de transporte, que para ello no se vale de direcciones, sino de puertos. Un puerto es un número de 16 bits, de 0 a 65.535, que señala a qué programa de la máquina van dirigidos los datos.
La pareja formada por una dirección IP y un puerto se llama socket, y es lo que identifica sin ambigüedad un extremo de la conversación. Una conexión completa queda definida por los dos sockets, el de origen y el de destino: por eso un mismo servidor web puede atender a cientos de clientes por el puerto 80 sin mezclarlos, porque el otro extremo de cada conversación es distinto.
| Rango | Nombre | Quién los usa |
|---|---|---|
| 0 a 1023 | Puertos bien conocidos o de sistema | Servicios estándar. Los asigna IANA |
| 1024 a 49151 | Puertos registrados o de usuario | Aplicaciones concretas que han pedido su número |
| 49152 a 65535 | Puertos dinámicos o privados | Los que el sistema operativo asigna al vuelo al cliente que abre una conexión |
La unidad de datos de esta capa recibe dos nombres según el protocolo, y es una pregunta habitual: en TCP se llama segmento y en UDP se llama datagrama, igual que en la capa de red.
Los tres cortes: 1023, 49151 y 65535. Y socket igual a dirección IP más puerto.
Para el examen
Socket: dirección IP más puerto
Bien conocidos: 0 a 1023
Registrados: 1024 a 49151
Dinámicos: 49152 a 65535
TCP: qué significa que sea garantista
TCP, protocolo de control de transmisión, es el transporte fiable de la pila. Está definido en la RFC 793 y su cabecera mide de 20 a 60 bytes. Se dice de él que es garantista, y esa palabra resume cinco compromisos concretos que conviene saber desglosar.
- Orientado a conexión: antes de mandar nada, los dos extremos acuerdan que van a hablar y con qué números de secuencia.
- Entrega ordenada: cada segmento lleva un número de secuencia, así que el receptor recompone el orden aunque lleguen desordenados.
- Acuse de recibo: el receptor confirma lo que le va llegando, y lo que no se confirma se vuelve a enviar.
- Control de flujo: el receptor anuncia cuánto puede admitir, para que el emisor no lo ahogue.
- Control de congestión: el emisor baja el ritmo cuando detecta pérdidas, para no hundir la red.
Todo eso tiene un precio: más cabecera, más mensajes de ida y vuelta y más retardo. Por eso TCP es el transporte de lo que no puede llegar mal, como una página web, un correo o una transferencia de ficheros, y no el de lo que no puede llegar tarde.
Fiable no significa rápido. TCP garantiza que llega y que llega en orden, no que llegue pronto.
Para el examen
Qué garantiza: conexión, confirmaciones, reordenación y retransmisión
Qué controla: flujo y congestión
Su precio: más cabecera y más retardo
UDP: el transporte que no promete nada
UDP, protocolo de datagramas de usuario, es lo contrario. No establece conexión, no numera lo que envía, no confirma nada y no retransmite lo perdido: coge los datos, les pone una cabecera de 8 bytes con los dos puertos, la longitud y una suma de comprobación, y los suelta a la red.
Eso no lo convierte en un protocolo defectuoso, sino en uno con otro propósito. Al no llevar acuses ni control de flujo, su sobrecoste es mínimo y su retardo también, así que es más rápido. Si la aplicación necesita fiabilidad, se la monta ella por su cuenta: en UDP la garantía, si la hay, la pone el nivel de aplicación.
Encaja cuando llegar tarde es peor que no llegar. En una llamada de voz, repetir un fragmento perdido de hace dos segundos no sirve de nada; en una consulta breve, montar una conexión entera para dos mensajes sale caro. De ahí que trabajen sobre UDP la voz y el vídeo en directo, las consultas de nombres, la sincronización de hora o el reparto de direcciones.
La cabecera de UDP son 8 bytes fijos y solo tiene cuatro campos. La de TCP va de 20 a 60.
Para el examen
Lo que no hace: ni conexión, ni confirmación, ni reordenación
Tamaño de su cabecera: 8 bytes
Para qué sirve: voz, vídeo, DNS y juegos
TCP frente a UDP
| Criterio | TCP | UDP |
|---|---|---|
| Conexión | Orientado a conexión | Sin conexión |
| Fiabilidad | Garantiza la entrega | No la garantiza |
| Orden | Entrega ordenada | No respeta el orden |
| Acuse de recibo | Sí, y retransmite lo no confirmado | No |
| Control de flujo y congestión | Sí | No |
| Cabecera | De 20 a 60 bytes | 8 bytes fijos |
| Unidad de datos | Segmento | Datagrama |
| Velocidad y sobrecoste | Más lento, más sobrecoste | Más rápido, menos sobrecoste |
| Difusión y multidifusión | No las admite | Sí las admite |
| Usos típicos | Web, correo, transferencia de ficheros, sesiones remotas | Voz y vídeo en directo, consultas de nombres, hora, reparto de direcciones |
Un matiz que se pregunta con trampa: los dos son protocolos de la capa 4 y los dos usan puertos, y ninguno de los dos entiende de direcciones IP. La diferencia no está en a quién llegan, sino en qué prometen por el camino.
Para el examen
Cabeceras: 20 bytes en TCP y 8 en UDP
Si el enunciado habla de tiempo real: la respuesta es UDP
Si habla de fiabilidad: la respuesta es TCP
Los puertos bien conocidos que hay que llevar sabidos
Esta tabla es de las que se preguntan tal cual, sin razonamiento posible. Merece la pena repasarla el día antes.
| Puerto | Servicio | Transporte |
|---|---|---|
| 20 | FTP, canal de datos | TCP |
| 21 | FTP, canal de control | TCP |
| 22 | SSH, y con él SFTP y SCP | TCP |
| 23 | Telnet | TCP |
| 25 | SMTP, entrega de correo entre servidores | TCP |
| 53 | DNS | UDP para consultas y TCP para transferencias de zona |
| 67 y 68 | DHCP, servidor y cliente | UDP |
| 80 | HTTP | TCP |
| 110 | POP3 | TCP |
| 143 | IMAP | TCP |
| 443 | HTTPS | TCP |
| 465 | SMTP sobre TLS implícito | TCP |
| 587 | SMTP de envío desde el cliente, con STARTTLS | TCP |
| 993 | IMAP sobre TLS | TCP |
| 995 | POP3 sobre TLS | TCP |
Los del correo son los que más se confunden y se ordenan mejor por parejas: el que recoge dejando el mensaje en el servidor es IMAP, 143 en claro y 993 cifrado; el que se lo descarga es POP3, 110 en claro y 995 cifrado; y el que envía es SMTP, 25 entre servidores, 587 desde el programa del usuario y 465 en su variante cifrada desde el principio.
DNS aparece aquí solo por su puerto, el 53. Su arquitectura, sus tipos de registro y su funcionamiento se estudian en el tema dedicado a los servicios de nombres.
Regla para el correo cifrado: 993 es IMAP, 995 es POP3 y 465 es SMTP. Las tres acaban en 5 salvo la primera, y van en el mismo orden que sus versiones en claro, 143, 110 y 25.
Para el examen
20 y 21, 22 y 23: FTP, SSH y Telnet
25, 53, 67 y 68: SMTP, DNS y DHCP
80 y 443: HTTP y HTTPS
110, 143 y 161: POP3, IMAP y SNMP
389: LDAP
FTP: dos canales y dos modos
FTP merece un apartado propio porque es el único servicio que usa dos puertos a la vez, y eso es exactamente lo que se pregunta de él. Una transferencia se hace en dos fases: primero se establece la conexión de control, por la que viajan los comandos, y después se abre una segunda conexión, la de datos, por la que viajan los ficheros.
| Modo | Comando que lo activa | Quién abre la conexión de datos |
|---|---|---|
| Activo | PORT | El servidor hacia el cliente |
| Pasivo | PASV | El cliente hacia el servidor |
En los dos casos es el cliente quien inicia la conexión de control contra el puerto 21 del servidor. La diferencia está en la segunda conexión: en modo activo el servidor toma la iniciativa y llama al cliente desde su puerto 20, y en modo pasivo es el cliente quien vuelve a llamar al servidor.
Esa diferencia tiene una consecuencia práctica muy conocida: el modo activo suele fallar cuando el cliente está detrás de un cortafuegos o de una traducción de direcciones, porque el servidor no puede iniciar una conexión hacia dentro. Por eso el modo pasivo es el que se usa hoy casi siempre.
Control en el 21 y datos en el 20. Activo lo abre el servidor, pasivo lo abre el cliente.
Para el examen
Puerto de control: 21
Puerto de datos: 20
Modo activo: el servidor abre la conexión de datos; choca con el cortafuegos del cliente
Modo pasivo: la abre el cliente
El segmento TCP y el saludo de tres vías
La cabecera de un segmento TCP ocupa 20 bytes en su forma mínima y llega a 60 con opciones. Sus campos explican por sí solos de dónde salen las garantías del protocolo.
| Campo | Tamaño | Para qué sirve |
|---|---|---|
| Puerto de origen | 2 bytes | Qué aplicación envía |
| Puerto de destino | 2 bytes | Qué aplicación recibe |
| Número de secuencia | 4 bytes | Posición de estos datos dentro del flujo; es lo que permite reordenar |
| Número de acuse de recibo | 4 bytes | Qué se ha recibido ya correctamente y por dónde debe seguir el otro extremo |
| Desplazamiento de datos | 4 bits | Dónde acaba la cabecera y empiezan los datos |
| Indicadores de control | Unos pocos bits | Marcan qué clase de segmento es: apertura, cierre, confirmación |
| Tamaño de ventana | 2 bytes | Cuántos datos admite el receptor sin confirmar; es el control de flujo |
| Suma de comprobación | 2 bytes | Detección de errores |
| Puntero de urgencia | 2 bytes | Señala datos que deben tratarse antes |
| Opciones | 0 a 40 bytes | Extensiones acordadas al abrir la conexión |
Antes de enviar un solo byte de datos, los dos extremos abren la conexión con un intercambio de tres mensajes, el saludo de tres vías. Lo que se acuerda ahí son los números de secuencia iniciales que va a usar cada uno, y de paso los parámetros de la sesión.
- El cliente envía un segmento SYN con su número de secuencia inicial y pasa a esperar respuesta.
- El servidor contesta con un segmento que hace dos cosas a la vez: confirma el del cliente y anuncia su propio número de secuencia inicial.
- El cliente confirma el del servidor, y a partir de ese momento la conexión está establecida por los dos lados.
Son tres mensajes, no cuatro, porque el segundo confirma y pregunta en el mismo segmento.
SYN →
El cliente propone conexión y manda su número de secuencia inicial.
← SYN + ACK
El servidor acepta, confirma el del cliente y manda el suyo.
ACK →
El cliente confirma. A partir de aquí la conexión está establecida.
Cierre en cuatro pasos
FIN y ACK en cada sentido: cada extremo cierra el suyo por separado.
Para el examen
Saludo de tres vías: SYN, SYN-ACK y ACK
Cierre ordenado: cuatro pasos, con FIN y ACK en cada sentido