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.
sudo sdnlab statusSe 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.
sudo ovs-ofctl -O OpenFlow13 dump-flows br0Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
sudo ip netns exec h1 ping -c 1 -W 1 10.0.0.2Se 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.
sudo mn --mac --test pingallSe 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.
sudo sdnlab controllerSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
sudo ip netns exec h1 ping -c 2 -W 1 10.0.0.3Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
sudo ovs-ofctl -O OpenFlow13 dump-flows br0Se 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.