๐ŸŒ

Redes & Protocolos

๐Ÿ‘จโ€๐Ÿณ Chef

Como viaja un mensaje por internet

Imagina enviar una carta. No la tiras al aire esperando que llegue. La pones en un sobre con direccion, la llevas al correo, pasa por centros de distribucion, y finalmente llega.

Internet funciona igual, pero en milisegundos.


El modelo OSI simplificado

7 capas es mucho. Piensa en 4:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  APLICACION  (HTTP, DNS, SMTP)      โ”‚ โ† Tu codigo vive aqui
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  TRANSPORTE  (TCP, UDP)             โ”‚ โ† Entrega confiable o rapida
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  RED         (IP, ICMP)             โ”‚ โ† Direcciones y rutas
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  ENLACE      (Ethernet, WiFi)       โ”‚ โ† Cables y ondas
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

TCP vs UDP

TCP: El cartero confiable

Cliente                           Servidor
   โ”‚                                 โ”‚
   โ”‚โ”€โ”€โ”€โ”€ SYN โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’โ”‚
   โ”‚โ†โ”€โ”€โ”€ SYN-ACK โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚
   โ”‚โ”€โ”€โ”€โ”€ ACK โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’โ”‚
   โ”‚                                 โ”‚
   โ”‚  (Conexion establecida)         โ”‚
   โ”‚                                 โ”‚
   โ”‚โ”€โ”€โ”€โ”€ Datos โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’โ”‚
   โ”‚โ†โ”€โ”€โ”€ ACK โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚
  • Garantiza entrega: Reintenta si se pierde
  • Ordenado: Llega en orden correcto
  • Mas lento: Por el handshake y confirmaciones

Usa TCP para: HTTP, Email, archivos, cualquier cosa que no puede perder datos.

UDP: El mensajero rapido

Cliente                           Servidor
   โ”‚                                 โ”‚
   โ”‚โ”€โ”€โ”€โ”€ Datos โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’โ”‚
   โ”‚โ”€โ”€โ”€โ”€ Datos โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’โ”‚
   โ”‚โ”€โ”€โ”€โ”€ Datos โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’โ”‚
   โ”‚                                 โ”‚
   โ”‚  (Sin confirmacion)             โ”‚
  • No garantiza: Puede perder paquetes
  • Sin orden: Llegan como pueden
  • Rapido: Sin overhead de conexion

Usa UDP para: Video streaming, juegos, DNS, VoIP.


HTTP a fondo

Metodos y su semantica

MetodoUsoIdempotenteBody
GETObtener datosSiNo
POSTCrear recursoNoSi
PUTReemplazar completoSiSi
PATCHModificar parcialNoSi
DELETEEliminarSiNo

Status codes que debes conocer

2xx Exito
โ”œโ”€โ”€ 200 OK - Todo bien
โ”œโ”€โ”€ 201 Created - Recurso creado
โ””โ”€โ”€ 204 No Content - Exito sin body

3xx Redireccion
โ”œโ”€โ”€ 301 Moved Permanently - URL cambio para siempre
โ”œโ”€โ”€ 302 Found - Redireccion temporal
โ””โ”€โ”€ 304 Not Modified - Usa tu cache

4xx Error del cliente
โ”œโ”€โ”€ 400 Bad Request - Request mal formada
โ”œโ”€โ”€ 401 Unauthorized - Necesita autenticacion
โ”œโ”€โ”€ 403 Forbidden - Autenticado pero sin permiso
โ”œโ”€โ”€ 404 Not Found - Recurso no existe
โ””โ”€โ”€ 429 Too Many Requests - Rate limited

5xx Error del servidor
โ”œโ”€โ”€ 500 Internal Server Error - Bug en el server
โ”œโ”€โ”€ 502 Bad Gateway - Proxy no pudo conectar
โ”œโ”€โ”€ 503 Service Unavailable - Server sobrecargado
โ””โ”€โ”€ 504 Gateway Timeout - Proxy timeout

HTTPS y TLS

El handshake TLS

Cliente                           Servidor
   โ”‚                                 โ”‚
   โ”‚โ”€โ”€โ”€โ”€ ClientHello โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’โ”‚ (versiones TLS, ciphers)
   โ”‚โ†โ”€โ”€โ”€ ServerHello โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚ (certificado, cipher elegido)
   โ”‚                                 โ”‚
   โ”‚     (Verifica certificado)      โ”‚
   โ”‚                                 โ”‚
   โ”‚โ”€โ”€โ”€โ”€ Key Exchange โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’โ”‚ (genera clave de sesion)
   โ”‚โ†โ”€โ”€โ”€ Finished โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚
   โ”‚                                 โ”‚
   โ”‚  === Conexion encriptada ===    โ”‚

Verificar un certificado

# Ver certificado de un sitio
openssl s_client -connect google.com:443 -servername google.com 2>/dev/null | openssl x509 -text -noout

# Ver fechas de expiracion
echo | openssl s_client -connect luxia.us:443 2>/dev/null | openssl x509 -dates -noout

DNS: El directorio telefonico

Tu navegador pide: luxia.us

1. Cache local (tu maquina)
2. Router cache
3. ISP DNS resolver
4. Root DNS (.us)
5. TLD DNS (luxia.us)
6. Authoritative DNS โ†’ IP: 123.45.67.89

Comandos utiles

# Resolver dominio
nslookup luxia.us

# Mas detalle
dig luxia.us

# Ver todos los registros
dig luxia.us ANY

# Trazar la resolucion
dig +trace luxia.us

WebSockets: Comunicacion bidireccional

HTTP es request-response. WebSocket es un canal abierto.

HTTP tradicional:
Cliente โ”€โ”€requestโ”€โ”€โ†’ Servidor
Cliente โ†โ”€responseโ”€ Servidor
Cliente โ”€โ”€requestโ”€โ”€โ†’ Servidor
Cliente โ†โ”€responseโ”€ Servidor

WebSocket:
Cliente โ†โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’ Servidor
         Canal abierto, ambos
         pueden enviar cuando quieran

Cuando usar WebSocket

  • Chat en tiempo real
  • Notificaciones push
  • Juegos multiplayer
  • Colaboracion en vivo (Google Docs)
  • Actualizaciones de precio (trading)

CORS: Por que existe

Los navegadores bloquean requests de un origen a otro por seguridad.

https://mi-app.com       https://api.otro.com
       โ”‚                         โ”‚
       โ”‚โ”€โ”€โ”€โ”€ fetch() โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’โ”‚
       โ”‚                         โ”‚
       โ”‚  BLOQUEADO por CORS     โ”‚
       โ”‚  (a menos que api.otro  โ”‚
       โ”‚   lo permita)           โ”‚

Headers CORS

// En tu servidor Express
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', 'https://mi-app.com');
  res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  next();
});

Herramientas de debugging

curl: Navaja suiza de HTTP

# GET basico
curl https://api.example.com/users

# Con headers
curl -H "Authorization: Bearer TOKEN" https://api.example.com/me

# POST con JSON
curl -X POST -H "Content-Type: application/json" \
  -d '{"name":"John"}' https://api.example.com/users

# Ver headers de respuesta
curl -I https://example.com

# Ver todo el intercambio
curl -v https://example.com

# Medir tiempos
curl -w "@curl-format.txt" -o /dev/null -s https://example.com

ping y traceroute

# Verificar conectividad
ping google.com

# Ver ruta de paquetes
traceroute google.com  # Linux/Mac
tracert google.com     # Windows

netstat/ss: Conexiones activas

# Ver puertos escuchando
ss -tlnp   # Linux
netstat -an | grep LISTEN  # Mac

# Ver conexiones establecidas
ss -tn

Puertos comunes

PuertoServicioNotas
22SSHAcceso remoto seguro
80HTTPWeb sin encriptar
443HTTPSWeb encriptada
3000Dev serversNode, Rails, etc.
5432PostgreSQLBase de datos
6379RedisCache
27017MongoDBBase de datos

CDN: Contenido cerca del usuario

Sin CDN:
Usuario (Mexico) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ†’ Servidor (USA)
                   200ms

Con CDN:
Usuario (Mexico) โ”€โ”€โ†’ Edge (Mexico)
                   20ms

El contenido estatico se replica en edges
alrededor del mundo.

Recursos


Practica

-> Network Debugging - Diagnostica problemas de red reales