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
| Metodo | Uso | Idempotente | Body |
|---|---|---|---|
| GET | Obtener datos | Si | No |
| POST | Crear recurso | No | Si |
| PUT | Reemplazar completo | Si | Si |
| PATCH | Modificar parcial | No | Si |
| DELETE | Eliminar | Si | No |
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
| Puerto | Servicio | Notas |
|---|---|---|
| 22 | SSH | Acceso remoto seguro |
| 80 | HTTP | Web sin encriptar |
| 443 | HTTPS | Web encriptada |
| 3000 | Dev servers | Node, Rails, etc. |
| 5432 | PostgreSQL | Base de datos |
| 6379 | Redis | Cache |
| 27017 | MongoDB | Base 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