SkillGridAprende informática practicando

Como encuentra su camino un paquete

Tablas de rutas, coincidencia del prefijo mas largo y la puerta de enlace predeterminada, ademas de por que internet es una red de redes y por que traceroute puede ver los saltos.

16 min · 50 XP

En el nivel junior dividiste 192.168.1.0/24 en subredes mas pequenas y calculaste que direcciones estan en el mismo enlace. Eso respondia una pregunta sobre direcciones. No respondia la siguiente: un paquete sale de tu maquina con una direccion de destino, y esta maquina tiene exactamente un cable, una radio Wi-Fi y ninguna idea de donde esta fisicamente el destino. Encontrar el camino es un trabajo aparte, hecho salto por salto por los enrutadores.

Cada host y cada enrutador mantiene una tabla de rutas: una lista de destinos que ya sabe como alcanzar. Cada entrada es un prefijo de red mas dos cosas: el siguiente salto (a que vecino entregar el paquete) y la interfaz de salida (en que cable o radio ponerlo). Nada en la tabla describe la ruta completa. Cada entrada describe un paso, y el siguiente enrutador tiene una tabla propia.

$ ip route

default via 192.168.1.1 dev wlan0 proto dhcp metric 600
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.42Una tabla de rutas tipica de un portatil: tres entradas cubren toda internet.

Cuando un destino coincide con mas de una entrada, el enrutador no usa la primera coincidencia ni le importa el orden de las lineas. Usa la coincidencia de prefijo mas largo: gana la entrada con mas bits de red, porque es la afirmacion mas especifica. /32 es una sola maquina, /24 es una subred, /16 es un grupo de subredes, /0 coincide con todas las direcciones existentes y por lo tanto es el ultimo recurso. Esa ultima entrada es la ruta por defecto, y su siguiente salto es la puerta de enlace por defecto —normalmente el enrutador que conecta tu red con el proveedor.

destination        next hop        matched by
-----------------  --------------  ------------------
10.8.0.7           direct (tun0)   /24   10.8.0.0/24
10.8.5.7           192.168.1.1     /16   10.8.0.0/16
everything else    192.168.1.1     /0    defaultLa misma tabla, tres destinos diferentes.

El reenvio es salto por salto, y cada salto repite la misma decision de forma independiente. Tu maquina comprueba si el destino esta en una red conectada directamente; si no lo esta, el paquete va a la puerta de enlace. La puerta de enlace hace la misma comprobacion contra su propia tabla y entrega el paquete mas adelante, y asi sucesivamente. Cada enrutador reescribe la cabecera de capa de enlace —la direccion MAC del siguiente salto— pero deja intactas las direcciones IP. Nada en el paquete registra el camino que ha recorrido, y por eso una respuesta puede volver por una ruta completamente distinta.

laptop 192.168.1.42  --ttl 64-->  router 203.0.113.1
router 203.0.113.1   --ttl 63-->  transit 198.51.100.9
transit 198.51.100.9 --ttl 62-->  server 93.184.216.34

reply comes back on a different path: routing is per packet, not per connectionEl TTL disminuye en cada salto. Cuando llega a cero, el enrutador descarta el paquete.

El TTL existe para que un paquete no pueda dar vueltas para siempre cuando dos enrutadores no estan de acuerdo. Traceroute convierte esa caracteristica de seguridad en un instrumento de medicion. Envia un paquete con TTL 1: el primer enrutador lo decrementa a cero y responde con un mensaje ICMP time exceeded, revelando su direccion. Luego TTL 2, luego 3, y las respuestas se alinean en orden. Un asterisco en lugar de una direccion significa que ese enrutador fue configurado para no responder: la ruta sigue existiendo, simplemente no puedes ver ese salto. Esta es tambien la razon por la que traceroute sobre un puerto TCP es la prueba honesta: muchas redes descartan ICMP mientras reenvian el trafico que realmente te importa.

$ traceroute -n 93.184.216.34
 1  192.168.1.1      1.204 ms
 2  10.44.0.1        7.881 ms
 3  203.0.113.9     12.115 ms
 4  198.51.100.9    95.402 ms
 5  93.184.216.34  103.771 ms

$ traceroute -n -T -p 443 93.184.216.34
 5  93.184.216.34  103.902 msLos saltos aparecen en orden porque el TTL crece de uno en uno en cada ronda.

Dentro de una organizacion, los enrutadores aprenden rutas automaticamente con un protocolo interior como OSPF. Entre organizaciones existe BGP, y la unidad no es un enrutador sino un sistema autonomo: una red bajo una sola administracion, identificada por un numero como AS64500. Cada sistema autonomo anuncia los bloques de direcciones que puede alcanzar, y sus vecinos reenvian esos anuncios, agregando su propio numero a la ruta. Por lo tanto un enrutador mantiene varios caminos posibles hacia el mismo prefijo y elige uno por politica: longitud de la ruta, acuerdos comerciales, preferencia local. No guarda un mapa de internet, solo un conjunto de afirmaciones sobre ella.

AS64500 (your ISP)AS64501 (transit)AS64502 (content network)BGP UPDATE: 93.184.216.0/24 via me, path 64502BGP UPDATE: 93.184.216.0/24 via AS64501, path 64501 64502BGP UPDATE: 203.0.113.0/24 via me, path 64500each router keeps only the best path, not the whole map

Ninguna maquina central conoce toda internet. Existe en cambio una jerarquia de escalas. Dentro de tu casa un enrutador atiende una subred. Tu proveedor opera miles de enrutadores bajo un unico protocolo interior y oculta todo eso detras de un solo anuncio BGP. Por encima de eso, unos pocos miles de sistemas autonomas intercambian anuncios entre si. Cada nivel necesita conocer el nivel inferior solo como un unico bloque alcanzable, y esa es la unica razon por la que una tabla de rutas se mantiene lo bastante pequena como para buscarse en microsegundos.

Práctica

  1. Usando la tabla de rutas del bloque de teoria, que entrada elige el kernel para un paquete dirigido a 10.8.5.7, y por que?

    Pistas
    • La coincidencia de prefijo más largo ignora el orden de las líneas de la tabla y compara únicamente longitudes de prefijo.
    • El destino 10.8.5.7 está dentro de 10.8.0.0/16 pero fuera de 10.8.0.0/24.
    • Una ruta por defecto es el prefijo más corto posible: /0, que coincide con todo.
  2. Relaciona cada parte de una entrada de la tabla de rutas con lo que realmente le indica al kernel.

    Pistas
    • Pregunta cuántos bits del prefijo tiene que comparar el enrutador: 0, 24 o 32.
    • Un siguiente salto es una dirección; una interfaz de salida es un nombre de dispositivo como tun0 o wlan0.
    • Una entrada de la lista no forma parte de ninguna ruta: es el resultado de pedir una.
  3. Poner los pasos de una sola sonda de traceroute en el orden en que ocurren en el cable.

    1. 1el primer enrutador reduce el TTL a 0 y descarta el paquete
    2. 2la siguiente sonda sale con TTL 2 y llega un salto mas lejos
    3. 3ese enrutador responde con ICMP time exceeded, revelando su direccion
    4. 4enviar una sonda con TTL 1 hacia el destino
    Pistas
    • Traceroute envía paquetes con un TTL pequeño y lo aumenta en uno en cada paso.
    • El salto que responde es el enrutador que descartó el paquete, no el anterior.

Preguntas sobre esta lección

¿Para qué aprender redes?

Casi todo lo que construyes acaba hablando con otra cosa. Entender cómo viajan de verdad los datos convierte «no funciona» en una lista de cosas que puedes comprobar una a una.

¿Cuál es la diferencia real entre TCP y UDP?

TCP se asegura de que todo llegue y en orden, y reintenta lo perdido, a cambio de tiempo. UDP envía y no mira atrás; por eso el vídeo en vivo y los juegos lo prefieren: un fotograma tardío es peor que uno perdido.

¿Qué es DNS en palabras simples?

Es la guía telefónica de internet. Tú conoces el nombre, el ordenador necesita el número. DNS convierte un nombre como example.org en una dirección IP y guarda la respuesta para no preguntar cada vez.

¿Es gratis?

Sí. El primer nivel de cada materia es gratis y no necesita cuenta. Los niveles más profundos y los grados superiores son de pago: eso es lo que mantiene vivo el proyecto.

¿Para qué edad es?

Está escrito para adolescentes curiosos a partir de unos 12 años y para adultos que empiezan de cero. No se supone experiencia previa en programación; las lecciones de redes y física no necesitan matemáticas más allá del colegio.

¿Necesito saber programar ya?

No. Las rutas de lógica, física y redes empiezan desde cero. El código lo escribes en la sección de lenguajes, que también arranca desde el principio.

¿Hay que instalar algo?

No. Todo funciona en el navegador: teoría, práctica y las simulaciones interactivas. No hay nada que descargar ni que configurar.

¿Cuánto se tarda en una materia?

Una lección dura entre 10 y 15 minutos. Un grado junior son unas 12 a 20 lecciones, así que son unas semanas de práctica constante, no una tarde.

¿Hay que seguir el orden?

Dentro de un grado los niveles se abren uno tras otro, porque cada uno se apoya en el anterior. Entre materias eres libre: empieza por lógica, física o redes.