Computación Centrada en Redes (Computer Networks) — Programa del curso

Docente: Gerson Garrido

1. Descripción

Este curso explica cómo funciona Internet y cómo se construye software que depende de ella. No se queda en describir capas: ustedes van a capturar paquetes reales, configurar routers, conectar redes entre sí, provocar fallas y escribir en C un protocolo de transporte confiable. Seguimos el libro Computer Networking: A Top-Down Approach de Kurose y Ross, aunque en otro orden: como en los cursos de ETH Zürich y UC Berkeley, primero vemos cómo llega un paquete a su destino y después construimos todo lo que corre encima. El curso se organiza en cinco partes:

  1. Fundamentos — arquitectura de Internet, retardo y pérdida, capas y programación con sockets.
  2. Redes locales e IP — enlace, Ethernet, VLANs, direccionamiento, forwarding, NAT e IPv6.
  3. Routing — algoritmos de routing, OSPF, BGP, políticas entre redes y seguridad de BGP.
  4. Transporte y aplicaciones — entrega confiable, TCP, control de congestión, DNS, HTTP, TLS 1.3, QUIC y CDNs.
  5. Redes modernas — data centers, SDN, redes para cargas de IA, Wi-Fi, 5G y seguridad de redes.

El proyecto del semestre recorre el mismo camino: empieza con sockets, sigue con una red propia conectada a un pequeño Internet y termina con un servicio web que funciona sobre un protocolo de transporte escrito por ustedes.

Los términos técnicos van en inglés cuando así se dicen y así aparecen en la documentación (router, switch, socket, handshake); los que de verdad se usan en español (red, enlace, capa, paquete) van en español, con el inglés entre paréntesis la primera vez. El glosario reúne los principales. Las lecturas, los RFC y la documentación de las herramientas están en inglés.

2. Carga horaria

Componente Horas/semana Formato
Teoría 4 h Dos sesiones de 2 h (Sesión A y Sesión B)
Laboratorio 2 h Una sesión práctica guiada

3. Resultados de aprendizaje

Al finalizar el curso, el estudiante será capaz de:

  1. Explicar la arquitectura de Internet, sus capas y sus principios de diseño, y estimar retardo, pérdida y throughput de un camino de red.
  2. Escribir programas cliente-servidor en C con la API de sockets y analizar su tráfico con Wireshark y tcpdump.
  3. Diseñar el direccionamiento de una red y configurar switching, VLANs, forwarding y NAT, explicando el recorrido de un paquete salto por salto.
  4. Explicar los algoritmos de routing por estado de enlace y por vector de distancias, y configurar OSPF y BGP con políticas entre sistemas autónomos.
  5. Implementar en C un protocolo de transporte confiable con ventana deslizante y control de congestión, y evaluar su desempeño con mediciones.
  6. Explicar cómo funcionan DNS, HTTP, TLS 1.3 y QUIC, y diagnosticar fallas de aplicaciones usando capturas de tráfico.
  7. Describir las redes de data center, SDN, Wi-Fi y 5G, identificar ataques comunes a las redes y aplicar defensas como firewalls, VPNs y RPKI.

4. Bibliografía

Texto principal: James F. Kurose y Keith W. Ross. Computer Networking: A Top-Down Approach, 9.ª edición. Pearson, 2025. Sitio del libro: https://gaia.cs.umass.edu/kurose_ross/

El libro no es gratuito: se lee en la biblioteca o en una copia propia. Lo elegimos porque su novena edición cubre HTTP/3, QUIC, BBR, TLS 1.3 y 5G, y porque sus autores publican material abierto. Para que nadie dependa solo del libro, cada semana tiene además al menos una lectura gratuita en línea:

Este material se enlaza, no se copia: los ejemplos, ejercicios, figuras y enunciados del curso son propios. Cuando un laboratorio use una captura o una actividad de Kurose y Ross, se indica la fuente.

Material de apoyo:

5. Calendario

Este es el calendario del curso, por número de semana. Cada semana enlaza a su guía con lecturas, objetivos y actividades de laboratorio. Las sesiones marcadas con ✂️ se pueden comprimir o pasar a lectura autónoma si se pierden clases por feriados. Las semanas 8 y 16 son de exámenes y no tienen clases regulares.

Sem. Sesión A (2 h) Sesión B (2 h) Laboratorio (2 h) Entregas
1 Presentación del curso · Qué es Internet: bordes, núcleo e ISPs Retardo, pérdida y throughput · Capas y encapsulamiento Entorno: Docker, Wireshark y traceroute P0 publicado
2 Principios de diseño: conmutación de paquetes, end-to-end y modelo de reloj de arena · ✂️ Historia: de ARPANET a ATM y Frame Relay Programación con sockets en C: TCP y UDP Un cliente y un servidor en C
3 Capa física en lo esencial · Enlace: framing y detección de errores Acceso múltiple · Ethernet, ARP, switches y VLANs Capturar ARP y configurar VLANs P0 entrega · P1 publicado
4 IP: datagramas, CIDR y forwarding · Dentro de un router ICMP, DHCP, NAT e IPv6 Subredes y NAT con Containerlab
5 Routing: estado de enlace y vector de distancias OSPF y routing jerárquico OSPF con FRRouting: una falla de enlace en vivo
6 BGP I: sistemas autónomos, eBGP e iBGP, atributos BGP II: clientes, proveedores, peers y políticas Conectar sistemas autónomos con políticas P1 entrega · P2 publicado
7 Los problemas de BGP: hijacks, route leaks y RPKI IXPs y estructura real de Internet · Repaso Provocar un route hijack y defenderse
8 Examen parcial (partes 1 a 3)
9 Transporte: multiplexación, UDP y entrega confiable Ventana deslizante: Go-Back-N y Selective Repeat Hackathon: conectar el Internet de la clase P2 entrega · P3 publicado
10 TCP: segmentos, conexiones y retransmisión TCP: control de flujo y recuperación rápida Leer TCP en capturas, sobre un enlace con pérdidas
11 Control de congestión: principios, AIMD y Reno CUBIC, BBR, bufferbloat y equidad Reno y CUBIC bajo distintos enlaces y buffers P3 entrega · P4 publicado
12 DNS: jerarquía, resolución y seguridad HTTP/1.1, HTTP/2 y caché DNS paso a paso y HTTP por dentro
13 Criptografía esencial y TLS 1.3 QUIC y HTTP/3 · CDNs y streaming Un handshake TLS y HTTP/2 frente a HTTP/3 P4 entrega · P5 publicado
14 Data centers: topologías Clos, ECMP y overlays · SDN ✂️ Redes para IA · Wi-Fi y 5G Una red leaf-spine con balanceo de carga
15 Seguridad de redes: ataques, firewalls, IPsec y VPNs Presentación de proyectos WireGuard y nftables P5 entrega
16 Examen final (todo el curso)

6. Proyectos

Un solo proyecto que crece durante el semestre: Qhapaq Ñan, un pequeño Internet inspirado en la red de caminos del Tahuantinsuyo. Cada equipo diseña y opera un sistema autónomo, lo conecta con sus vecinos mediante BGP y luego publica un servicio sobre esa red. También escribe en C rimay (“hablar” en quechua), un protocolo de transporte confiable sobre UDP, y wasi (“casa”), un servidor HTTP que funciona sobre él. Cada entrega debe pasar sus pruebas y las de las entregas anteriores que apliquen. El detalle, las reglas de entrega y cómo se corren las pruebas están en projects/README.md.

Cada equipo levanta su parte de la red en su propia laptop. Para el hackathon de la semana 9, los equipos entregan su configuración y la red de toda la clase se levanta en una sola computadora.

# Entrega Lo que agrega Publicado Entrega
P0 Calentamiento Cliente y servidor con sockets en C, y una versión propia de traceroute Sem. 1 Sem. 3
P1 Tu red Direccionamiento, VLANs, NAT y OSPF de un sistema autónomo que sobrevive a la caída de un enlace Sem. 3 Sem. 6
P2 Qhapaq Ñan BGP con clientes, proveedores y peers, políticas correctas y defensa ante un hijack Sem. 6 Sem. 9
P3 rimay: entrega confiable Protocolo con ventana deslizante sobre UDP que funciona con pérdida, duplicación y reordenamiento Sem. 9 Sem. 11
P4 rimay: congestión Control de congestión, recuperación rápida y un informe con mediciones de equidad Sem. 11 Sem. 13
P5 wasi Servidor HTTP sobre rimay, publicado en Qhapaq Ñan con un nombre en DNS, donde una descarga termina bien aunque se corte un enlace con otro camino disponible Sem. 13 Sem. 15

7. Políticas

  • Integridad académica: se puede discutir ideas, pero el código y las configuraciones entregados deben ser propios. Copiar soluciones publicadas en internet cuenta como plagio.
  • Defensa oral: cualquier integrante de un equipo puede tener que explicar, en el laboratorio, cualquier parte de lo entregado: el código, la configuración o una medición.

Uso de herramientas

Herramienta ¿Se permite?
Mensajes del compilador (-Wall -Wextra), sanitizers (-fsanitize=address,undefined), Valgrind y gdb Sí, en todo el curso.
Documentación oficial (páginas man, RFC, FRRouting, Containerlab, Wireshark) y búsquedas en la web Sí. Lo que se adapte de una fuente se cita en el README.md de la entrega o en un comentario.
Autocompletado del editor que sugiere nombres, firmas o el resto de una línea, sin generar funciones ni soluciones enteras Sí.
Correctores de ortografía, traductores y herramientas de accesibilidad Sí.
Formateadores y linters (por ejemplo, clang-format o cppcheck) Sí.
IA generativa para pedir explicaciones de conceptos, mensajes de error o salidas de comandos, sin que escriba código ni configuraciones Sí, fuera de los exámenes, y declarando su uso.
IA generativa que escribe código, configuraciones de routers o partes del informe No, en ningún trabajo del curso: proyecto, laboratorios ni exámenes.

El uso permitido de IA generativa se declara en el README.md de la entrega: qué herramienta, para qué y qué hicieron con lo que les dio, en una línea por tema consultado. Las demás herramientas de la tabla no se declaran, salvo las fuentes adaptadas, que se citan. En cualquier entrega se les puede pedir que expliquen su trabajo en forma oral, y deben poder hacerlo sin ayuda.

8. Entorno de trabajo

Todo el trabajo práctico se hace en una laptop, sin equipos de red físicos, con un contenedor Docker que trae el compilador de C, las herramientas de red y Containerlab. Cada router es un contenedor con FRRouting. Wireshark se instala aparte para abrir las capturas. Instrucciones en labs/README.md.

Un límite que conviene conocer: el kernel de Docker Desktop no siempre incluye BBR. Por eso el laboratorio de la semana 11 mide Reno y CUBIC, y BBR se estudia en clase.