¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Fundamentos de redes definidas por software

Aquí está la lección completa para leer. Crea una cuenta gratuita para practicarla en un laboratorio en vivo.

Laboratorio de máquina virtual10 min de lectura7 comandos

Una regla, cien conmutadores

Un centro decide que la wifi de invitados nunca debe llegar a los ordenadores de administración. En una red normal, alguien entra en cada conmutador y lo cambia a mano. En una red definida por software, los conmutadores solo siguen una tabla, y un único programa escribe esa tabla para todos.

Al terminar esta lección

Nota

Puedo decir qué hace un flujo y qué añade un controlador.

Palabras clave

  • Flujo: una regla de un conmutador, hecha de una condición y una acción.
  • Tabla de flujos: la lista de flujos que el conmutador recorre para cada paquete.
  • Condición (match): la parte de un flujo que dice a qué paquetes se aplica.
  • Acción: lo que el conmutador hace con un paquete que coincide.
  • Controlador: un programa que escribe los flujos de un conmutador.
  • OpenFlow: el lenguaje que hablan un conmutador y su controlador.

Para empezar: lo que ya sabes

Nota

Responde mentalmente. 1. ¿Qué te dice ping? 2. ¿Qué es una dirección MAC? 3. ¿Qué hace un conmutador normal con una trama que no ha visto antes? Necesitas la tercera respuesta enseguida.

Antes de empezar

Nota

Pulsa Iniciar el laboratorio en la barra de la parte superior de esta lección. Este laboratorio es una máquina Ubuntu completa para ti, con una red pequeña montada dentro, así que tarda un poco más en arrancar que un contenedor. Cada botón Ejecutar escribe su comando en el terminal de la máquina, uno tras otro en la misma sesión. Si uno dice que la máquina aún está arrancando, espera unos segundos y púlsalo otra vez. Para verlos, o para escribir los tuyos, pulsa Abrir terminal en la barra.

Un conmutador es una tabla que se puede leer

Aquí el conmutador es br0, creado por Open vSwitch. Tiene conectados tres ordenadores: h1, h2 y h3, cada uno en su propio espacio de nombres de red, con su propia dirección. sdnlab status muestra el conmutador, sus tres puertos numerados, los ordenadores y los flujos. La última parte está vacía. Fíjate en que el conmutador está en fail-mode secure, que significa: no hacer nada que los flujos no permitan.

Comando
sudo sdnlab status

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Una tabla vacía lo descarta todo

Un conmutador normal aprende por sí solo. Un conmutador OpenFlow solo hace lo que dice su tabla de flujos. ovs-ofctl dump-flows muestra esa tabla, y no tiene ningún flujo: solo vuelve la línea de cabecera. Así que cuando h1 hace ping a h2, el primer paquete no encuentra ningún flujo que coincida y se descarta. El ping muestra 100% packet loss.

Comando
sudo ovs-ofctl -O OpenFlow13 dump-flows br0

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
sudo ip netns exec h1 ping -c 1 -W 1 10.0.0.2

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comprueba

Consejo

¿Por qué falló el ping si nada está roto? Respuesta: la tabla de flujos está vacía, así que ningún flujo coincidió con el paquete y el conmutador lo descartó.

Un error frecuente

Advertencia

Mucha gente cree que todo conmutador aprende solo dónde están los ordenadores. Un conmutador Ethernet normal lo hace. Un conmutador OpenFlow solo hace lo que dicen sus flujos, y sin flujos no reenvía nada. Aunque lo que deba aprender seas tú o un controlador, alguien tiene que escribir los flujos.

Mininet construye una red entera

Mininet crea una red de prueba en una sola máquina: equipos, un conmutador y un controlador, que arranca y detiene por ti. --test pingall hace ping entre cada pareja de equipos e imprime cuántos se perdieron. Aquí la respuesta es 0% dropped (2/2 received). Su controlador escribió los flujos que el conmutador necesitaba. Cuando Mininet termina, borra todos los conmutadores de Open vSwitch, br0 incluido, así que el paso siguiente vuelve a montar el laboratorio.

Comando
sudo mn --mac --test pingall

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comprueba

Consejo

¿Quién hizo que funcionaran los pings en Mininet? Respuesta: su controlador, que dijo al conmutador qué hacer con los paquetes que no conocía.

Un controlador escribe los flujos

sdnlab controller vuelve a montar el laboratorio y conecta br0 a un programa controlador en esta máquina. Es el inacabado de tu laboratorio y, tal como se entrega, envía cada paquete por todos los demás puertos, como un hub. Ahora el ping de h1 a h3 funciona. La tabla tiene un solo flujo: priority=0 actions=CONTROLLER. Envía al controlador cualquier paquete sin un flujo mejor, y n_packets sube con cada paquete. Terminar este controlador es la parte 3 del laboratorio.

Comando
sudo sdnlab controller

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
sudo ip netns exec h1 ping -c 2 -W 1 10.0.0.3

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
sudo ovs-ofctl -O OpenFlow13 dump-flows br0

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ahora haz el laboratorio

Consejo

Has visto una tabla vacía, un controlador y un conmutador que le pregunta por cada paquete. Tu laboratorio te pide escribir la tabla a mano y después enseñar al controlador a aprender, para que la mayoría de los paquetes no salgan nunca del conmutador. Abre el README.md de tu carpeta personal con cat README.md en el terminal.

Comprobación final

Consejo

Responde sin volver atrás. 1. ¿Cuáles son las dos partes de un flujo? 2. ¿Qué hace un conmutador OpenFlow con un paquete cuando su tabla está vacía? 3. ¿Qué escribe un controlador? 4. ¿Qué comando muestra la tabla de flujos? Respuestas: una condición y una acción; lo descarta; flujos; ovs-ofctl dump-flows.

Para el profesorado

Consejo

Esta lección es un pequeño ejemplo de una lección que se trabaja en un laboratorio: los pasos y los botones Ejecutar son la lección, y el laboratorio es la copia de cada alumno. Se trabaja en un laboratorio de VM: cada alumno tiene su propia máquina Ubuntu con un conmutador y tres ordenadores dentro, y un botón Ejecutar escribe en su terminal y muestra lo que se imprimió. Puntos clave: 1. Un flujo es una condición y una acción. 2. Un conmutador OpenFlow sin flujos lo descarta todo. 3. Un controlador escribe los flujos. Error frecuente: creer que todo conmutador aprende solo. Material: el laboratorio y un navegador. Consejo: antes del ping, pregunte a la clase qué pasará y por qué. El propio laboratorio tiene una comprobación que califica la tabla de flujos y el conmutador con aprendizaje. Copie la lección en su propio módulo para cambiarla, o construya una desde cero con el menú Laboratorio del constructor de lecciones.

Sobre este laboratorio y su código: Laboratorio de redes definidas por software: Open vSwitch, Mininet y un controlador OpenFlow en una VM

¿Enseñas a una clase? Asigna estas lecciones a tus estudiantes con calificación y un laboratorio para cada uno.