Saltar al contenido
Open Security
Redes e Internet Inicial · 30 min

Una request no es magia: DNS, TCP, HTTP y logs

Qué pasa de verdad entre que escribís una URL y ves una respuesta. Resolución de nombres, conexión, request, respuesta y dónde mirar cuando falla.

#redes#dns#http

Antes de empezar necesitás

  • Una terminal con dig y curl (Linux, WSL o macOS)
  • Conexión a internet

Al terminar vas a poder

  • Resolver un nombre a una IP con dig y entender el resultado
  • Seguir una request HTTP completa con curl -v
  • Leer status codes y headers sin adivinar
  • Medir la latencia de cada etapa de una request
  • Saber dónde mirar cuando algo falla en la red

Escribís una URL, apretás Enter y aparece una página. Parece instantáneo y parece magia. No lo es: es una secuencia de pasos bien definida, y cada uno puede fallar, demorar o mentirte. Si conocés los pasos, dejás de adivinar.

1. DNS: del nombre a la IP

Las computadoras no hablan con ejemplo.com, hablan con una IP. DNS es la guía telefónica que traduce uno en otro.

vt@labs:~
dig +short example.com

Eso te devuelve la IP, limpia. Para ver el detalle completo:

vt@labs:~
dig example.com

Mirá la sección ANSWER: ahí está el registro, su tipo (A para IPv4, AAAA para IPv6) y el TTL, los segundos que se puede cachear esa respuesta.

2. La request completa, en vivo

curl -v (verbose) te muestra cada etapa: la conexión, el handshake TLS, los headers que mandás y los que recibís.

vt@labs:~
curl -v https://example.com

Leelo por símbolos:

  • Líneas con * → lo que hace curl por debajo (conectar, TLS, etc.).
  • Líneas con >lo que vos enviás (tu request y tus headers).
  • Líneas con <lo que el servidor responde (status y sus headers).

3. Status codes: no los adivines

La primera línea de la respuesta trae el código. No hace falta memorizarlos todos, sí entender las familias:

2xx  ✓ salió bien            (200 OK, 204 No Content)
3xx  → andá a otro lado      (301 movido, 304 no cambió)
4xx  ✗ error tuyo            (401 sin auth, 403 sin permiso, 404 no existe)
5xx  ✗ error del servidor    (500 explotó, 502/504 problema de gateway)

4. Headers: el contexto de la conversación

Los headers son metadata. Algunos que importan seguido:

  • Content-Type: qué formato tiene el cuerpo (application/json, text/html).
  • Authorization: tus credenciales (un token, por ejemplo).
  • Cache-Control: si la respuesta se puede cachear y por cuánto.
  • Set-Cookie: el servidor te pide guardar una cookie.

5. Latencia: ¿dónde se va el tiempo?

“La página tarda” no es un diagnóstico. ¿Tarda el DNS? ¿La conexión? ¿El servidor en responder? curl -w te lo desglosa:

vt@labs:~
curl -o /dev/null -s -w \
  "dns:    %{time_namelookup}s\nconexion: %{time_connect}s\ntls:    %{time_appconnect}s\ntotal:  %{time_total}s\n" \
  https://example.com

Ahora “está lento” se convierte en una pregunta concreta: ¿qué etapa es la que pesa? Si es time_namelookup, es DNS. Si es time_total pero las demás son bajas, el servidor tarda en pensar la respuesta.

El diagrama mental

sequenceDiagram
participant N as Navegador
participant D as DNS
participant S as Servidor
N->>D: 1. resolver nombre (dig)
D-->>N: IP
N->>S: 2. abrir conexión (TCP + TLS)
N->>S: 3. GET /ruta + headers
S-->>N: 4. status + headers + body
Note over N: render
El recorrido completo de una request. Cuando algo falle, sabés en qué flecha mirar.

Guardá ese diagrama. Cada flecha es una etapa que podés medir con curl -w y un lugar donde algo puede fallar.

Lo que practicás en este lab

Llevátelo a tu repo si querés, pero no es obligatorio: es tu aprendizaje.

  • Un trace de curl -v de una request real, con el dominio que elijas
  • Diagrama simple del flujo navegador → DNS → servidor → respuesta
  • Tabla con los tiempos de cada etapa (DNS, conexión, TLS, total)

Reto

Elegí un sitio, medí con curl -w el tiempo de DNS, conexión y total. Cambiá el dominio por su IP directa y compará. Explicá en dos líneas qué etapa desapareció y por qué.

Resolvelo y escribí dos líneas explicando qué pasó. Con eso lo fijás.

¿Hiciste el lab?

Si querés, guardá lo que hiciste (comandos, notas, un repo) para volver después. Y si encontrás un error o querés mejorar este lab, contribuí al repo. El progreso se guarda solo en tu navegador.