Qué es un switch de aprendizaje
Un switch de aprendizaje averigua por qué puerto se llega a cada dirección MAC mirando de dónde vienen las tramas. Con esa tabla reenvía cada trama solo por el puerto correcto, en lugar de repetirla por toda la red.
En una sala con 24 ordenadores, el switch arranca sin saber nada. En pocos minutos conoce a todos, sin que nadie le escriba una sola regla.
Al final de esta lección
Nota
Puedo explicar cómo un switch aprende en qué puerto está cada dirección MAC.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Trama | un paquete tal como viaja por la red local | |
| MAC de origen | la dirección de quien envía la trama | |
| MAC de destino | la dirección de quien debe recibirla | |
| Tabla de direcciones | la lista de MAC con el puerto de cada una | aa:01 en el puerto 1 |
| Inundar | repetir la trama por todos los puertos menos por el que llegó | |
| Difusión | una trama para todos, con destino ff:ff:ff:ff:ff:ff |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
El switch aprende mirando la MAC de origen
Cada trama trae dos direcciones MAC: la de quien la envía y la de quien debe recibirla. El switch hace dos cosas con cada trama.
Primero aprende: apunta que la MAC de origen está en el puerto por el que entró. Después decide: si conoce la MAC de destino, la envía por su puerto. Si no la conoce, la repite por los demás puertos.
Ejemplo: cuatro tramas y la tabla que crece
| Trama | Entra por | El switch aprende | El switch decide |
|---|---|---|---|
| De A para B | Puerto 1 | A está en el 1 | No conoce B: inunda |
| De B para A | Puerto 2 | B está en el 2 | Conoce A: sale por el 1 |
| De A para B | Puerto 1 | A sigue en el 1 | Conoce B: sale por el 2 |
| De C para A | Puerto 3 | C está en el 3 | Conoce A: sale por el 1 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Con la acción NORMAL el switch aprende solo
Open vSwitch puede hacer de switch de aprendizaje corriente. Se lo pides con un flujo cuya acción es NORMAL: el switch aprende y decide por su cuenta.
No hay ordenadores conectados a sw1, así que le inyectamos tramas escritas a mano. Una trama de 14 bytes son seis de destino, seis de origen y dos de tipo.
Crea sw1 con tres puertos
sudo ovs-vsctl --may-exist add-br sw1 -- set bridge sw1 datapath_type=system protocols=OpenFlow13 fail-mode=secure -- --may-exist add-port sw1 p1 -- set interface p1 type=internal ofport_request=1 -- --may-exist add-port sw1 p2 -- set interface p2 type=internal ofport_request=2 -- --may-exist add-port sw1 p3 -- set interface p3 type=internal ofport_request=3Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Vacía la tabla de flujos
sudo ovs-ofctl -O OpenFlow13 del-flows sw1Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pide el comportamiento de un switch normal
sudo ovs-ofctl -O OpenFlow13 add-flow sw1 actions=NORMALSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Vacía la tabla de direcciones
sudo ovs-appctl fdb/flush sw1Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Difusión del equipo A por el puerto 1
sudo ovs-ofctl -O OpenFlow13 packet-out sw1 1 NORMAL ffffffffffff00000000000a1234Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Mira qué ha aprendido el switch
sudo ovs-appctl fdb/show sw1 | awk 'NR>1 {print $1, $3}' | sortSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Trama de B para A por puerto 2
sudo ovs-ofctl -O OpenFlow13 packet-out sw1 2 NORMAL 00000000000a00000000000b1234Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Mira la tabla otra vez
sudo ovs-appctl fdb/show sw1 | awk 'NR>1 {print $1, $3}' | sortSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Una MAC desconocida hace que el switch inunde
La tabla ya conoce a A y a B. Si llega una trama para A, el switch la envía solo por su puerto. Si llega una para un equipo C que no ha hablado, inunda.
Las tablas también cambian. Si un equipo se mueve a otro puerto, su próxima trama corrige la fila. Y si un puerto se cae, sus filas dejan de ser ciertas.
Una trama para una MAC conocida
sudo ovs-appctl ofproto/trace sw1 in_port=2,dl_src=00:00:00:00:00:0b,dl_dst=00:00:00:00:00:0a | grep -A2 '^ 0\.'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Una trama para una MAC desconocida
sudo ovs-appctl ofproto/trace sw1 in_port=2,dl_src=00:00:00:00:00:0b,dl_dst=00:00:00:00:00:0c | grep -A2 '^ 0\.'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
A aparece ahora por el puerto 3
sudo ovs-ofctl -O OpenFlow13 packet-out sw1 3 NORMAL ffffffffffff00000000000a1234Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Mira cómo cambió la fila de A
sudo ovs-appctl fdb/show sw1 | awk 'NR>1 {print $1, $3}' | sortSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que el switch aprende la dirección de destino de cada trama. No puede: el destino es alguien que aún no ha hablado. El switch solo aprende de la MAC de origen, porque esa persona acaba de hablar por un puerto concreto.