🔎 Buscar

📡 Redes de computadores

Cómo viaja un paquete por internet: el modelo de capas, TCP/IP, UDP, HTTP/HTTPS, DNS, sockets y diagnóstico. La base para backend, bases de datos remotas y system design.

Fundamentos CS📖 Contenido

Redes de computadores

Cuando tu backend recibe una petición HTTP, cuando tu base de datos escucha en el puerto 5432, cuando tu curl sale a internet… hay una torre de protocolos trabajando en conjunto. Entender redes no es teoría de universidad: es la base para diagnosticar por qué algo no conecta, por qué algo va lento, y cómo diseñar sistemas distribuidos.

Esta página te da el mapa completo. La wiki del sitio tiene el tema a fondo en TCP/IP y el viaje de un paquete — lee ambas.

El modelo de capas

La red se organiza en capas, cada una resolviendo un problema. El modelo OSI (7 capas) y el TCP/IP (4 capas):

Capa Problema que resuelve TCP/IP Ejemplos
Aplicación Formato del dato Aplicación HTTP, DNS, SSH, SMTP, WebSocket
Transporte Entrega entre procesos (de extremo a extremo) Transporte TCP, UDP
Red Encaminar entre máquinas Internet IP, ICMP, BGP
Enlace Mover tramas entre máquinas vecinas Acceso a red Ethernet, Wi-Fi, ARP
Física Señales, cables Cables, ondas

💡 Truco mental: cada capa resuelve un problema. Aplicación = formato del dato. Transporte = entrega entre procesos. Internet = entre máquinas. Enlace = entre vecinos inmediatos.

Encapsulación

Cada capa envuelve los datos de la superior con su cabecera:

Datos HTTP ──▶ [TCP] ──▶ [IP] ──▶ [Ethernet] ──▶ cable
| Cabecera Ethernet (14B) | Cabecera IP (20-60B) | Cabecera TCP (20-60B) | Datos | FCS |

Al llegar se desenvuelve en orden inverso (desencapsulación). Esa sobrecarga (~54 bytes por paquete) es por qué las peticiones HTTP pequeñas “desperdician” ancho de banda: casi todo es cabecera.

TCP vs UDP

El transporte tiene dos protagonistas:

Característica TCP UDP
Conexión Handshake de 3 vías Sin conexión
Fiabilidad Ordenado, sin pérdidas, con ACKs Mejor esfuerzo
Control de flujo Ventana deslizante + control de congestión Ninguno
Cabecera 20-60 bytes 8 bytes
Velocidad Más lenta Más rápida
Uso típico HTTP, SSH, bases de datos DNS, VoIP, juegos, QUIC/HTTP/3

Handshake TCP (3 vías)

Cliente                         Servidor
  │  SYN ───────────────────────▶ │
  │  SYN-ACK ◀─────────────────── │
  │  ACK ───────────────────────▶ │
  │        conexión establecida   │

TCP garantiza entrega ordenada y sin errores gracias a números de secuencia y confirmaciones (ACKs). El costo: latencia. Cada byte tiene un número de secuencia; el receptor confirma con ack = último recibido + 1.

💡 Puertos: IP:puerto identifica un proceso en todo internet. 192.168.1.20:5432 = máquina 192.168.1.20, proceso en el puerto 5432. Puertos famosos: 22 (SSH), 80 (HTTP), 443 (HTTPS), 3306 (MySQL), 5432 (PostgreSQL), 6379 (Redis).

IP y direccionamiento

  • IPv4: 32 bits, ~4.3 mil millones de direcciones (insuficientes → NAT e IPv6).
  • IPv6: 128 bits, hex: 2001:db8::1.
  • CIDR: 192.168.1.0/24 = los 24 primeros bits son la red (256 direcciones, 254 utilizables).
Rango privado (RFC 1918) Uso
10.0.0.0/8 Redes grandes, nubes
172.16.0.0/12 Docker, VPCs
192.168.0.0/16 Redes domésticas
127.0.0.1 Loopback (localhost)

⚠️ Las direcciones privadas no son enrutables en internet. Tu máquina habla por la IP pública del router, que aplica NAT (mapea 192.168.1.20:543288.x.x.x:50231).

DNS: de nombre a dirección

DNS traduce x.com → IP. Es distribuido y jerárquico — no hay una sola máquina que lo sepa todo:

Cliente → resolutor (8.8.8.8, tu router)
  → raíz (.) → "pregunta a .com"
  → servidor .com → "pregunta a los NS de x.com"
  → servidor autoritativo de x.com → 104.244.42.1
  → guarda en caché (TTL)
dig +trace x.com      # muestra los saltos
dig x.com A           # registro de dirección
dig x.com MX          # servidores de correo
Registro Para qué sirve
A / AAAA IPv4 / IPv6
CNAME Alias de otro nombre
MX Servidores de correo
NS Autoritativos del dominio
TTL Cuánto cachear la respuesta

💡 Cuando un dominio “tarda en propagarse”, lo que ocurre es que los resolutores intermedios mantienen la respuesta en caché hasta que expira el TTL.

HTTP y HTTPS

HTTP es el protocolo de la web (página completa en la wiki: HTTP y REST APIs). Lo esencial:

Petición

GET /usuarios/42 HTTP/1.1
Host: api.misitio.com
Accept: application/json

Respuesta

HTTP/1.1 200 OK
Content-Type: application/json

{"id": 42, "nombre": "Ana"}

Métodos y códigos que debes saber

Método Uso Código Significado
GET Leer 200 OK
POST Crear 201 Creado
PUT/PATCH Actualizar 204 Sin contenido
DELETE Borrar 400 Petición mala
401 No autenticado
403 Prohibido
404 No encontrado
500 Error del servidor
503 Servicio no disponible

HTTPS = HTTP + TLS

HTTPS cifra la comunicación con TLS (la evolución de SSL). Antes de la petición, hay un handshake TLS que negocia cifrado y autentica el servidor con su certificado (la “cerradura” del navegador).

HTTP  (texto plano: cualquiera en la red lo lee)
HTTPS = HTTP sobre TLS (cifrado + autenticación)

💡 TLS en una frase: el cliente y el servidor acuerdan una clave de sesión sin que nadie más la sepa (usando cifrado asimétrico con certificados), y a partir de ahí cifran todo con cifrado simétrico (rápido).

Qué pasa al hacer curl https://x.com

Cuenta los round-trips:

  1. DNS: x.com → IP (1 round-trip, con caché si ya se preguntó).
  2. TCP: handshake de 3 vías (1 round-trip).
  3. TLS: handshake de cifrado (1 round-trip).
  4. HTTP: la petición ya sale.

= 3 round-trips antes de la petición HTTP. De ahí que la caché DNS, keep-alive y HTTP/2 reduzcan tanto la latencia percibida.

curl -v https://x.com 2>&1 | head -20

💡 Diagnóstico por capas: si curl -v se queda en Trying <ip>:443... → problema de red/TCP (firewall, puerto cerrado). Si conecta y se queda en el handshake TLS → problema de TLS (certificado, cipher). Divide y vencerás por capas.

Sockets

Un socket es la interfaz de programación de red: el extremo de una conexión en tu proceso. Todo backend los usa (aunque tu framework lo oculte).

# Cliente TCP con socket en Python
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("api.misitio.com", 443))   # TCP
s.sendall(b"GET / HTTP/1.1\r\nHost: api.misitio.com\r\n\r\n")
data = s.recv(4096)
print(data[:100])
s.close()
# Con las herramientas del SO
netstat -tulpn          # puertos en escucha y conexiones
ss -tulpn               # igual, más moderno
lsof -i :5432           # qué proceso usa el puerto 5432
ping google.com         # ICMP: ¿está vivo y a qué latencia?
traceroute google.com   # los saltos hasta el destino

Cheatsheet de herramientas de diagnóstico

Herramienta Para qué
ping ¿La máquina responde? latencia (ICMP)
traceroute / tracert Los saltos hasta el destino
dig / nslookup Resolución DNS
curl -v Petición real, muestra todos los pasos
netstat / ss Puertos en escucha, conexiones
nc (netcat) Probar un puerto a mano: nc -zv host 443
tcpdump / wireshark Capturar y analizar paquetes

Terminología clave

Término En una frase
Paquete Unidad de datos en la red (IP)
Trama Unidad de datos en el enlace (Ethernet)
Segmento Unidad de datos del transporte (TCP/UDP)
Encapsulación Envolver datos con cabeceras capa a capa
Round-trip Un ida y vuelta entre cliente y servidor
Latencia Tiempo de ida y vuelta
Ancho de banda Cuántos bytes por segundo
Firewall Filtro de tráfico por reglas
NAT Traducción de direcciones privadas a públicas
Proxy Intermediario (reverse proxy: nginx frente al backend)
CDN Red de caché distribuida geográficamente
TLS/SSL Cifrado de la comunicación
Socket Interfaz de red de tu proceso
Puerto Identifica el proceso dentro de la máquina

Práctica propuesta

  1. Ejecuta curl -v https://google.com y identifica cada paso en la salida (DNS, TCP, TLS, HTTP).
  2. Con dig +trace google.com observa los saltos DNS. ¿Cuántos niveles pasan?
  3. Levanta un servidor HTTP mínimo en Python (python3 -m http.server 8000) y conéctate con nc localhost 8000.
  4. Escribe un cliente TCP que se conecte a google.com:80 y envíe una petición HTTP a mano (como el ejemplo).
  5. Con ss -tulpn identifica los puertos en escucha de tu máquina.
  6. Abre Wireshark (o tcpdump) y captura un ping o una petición HTTP: mira la encapsulación real.

Para profundizar

Estudio · Recursos de todo el mundo (inglés, chino, japonés, español, francés, ruso…) curados y traducidos al español.