¿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

Cómo aprende un switch las direcciones MAC

Después de esta lección: Puedo explicar cómo un switch aprende en qué puerto está cada dirección MAC.

Lección de 60 min12 comandosLaboratorio de redes definidas por software: Open vSwitch, Mininet y un controlador OpenFlow en una VM

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

PalabraQué significaEjemplo
Tramaun paquete tal como viaja por la red local
MAC de origenla dirección de quien envía la trama
MAC de destinola dirección de quien debe recibirla
Tabla de direccionesla lista de MAC con el puerto de cada unaaa:01 en el puerto 1
Inundarrepetir la trama por todos los puertos menos por el que llegó
Difusiónuna 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

TramaEntra porEl switch aprendeEl switch decide
De A para BPuerto 1A está en el 1No conoce B: inunda
De B para APuerto 2B está en el 2Conoce A: sale por el 1
De A para BPuerto 1A sigue en el 1Conoce B: sale por el 2
De C para APuerto 3C está en el 3Conoce 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

Comando
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=3

Se 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

Comando
sudo ovs-ofctl -O OpenFlow13 del-flows sw1

Se 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

Comando
sudo ovs-ofctl -O OpenFlow13 add-flow sw1 actions=NORMAL

Se 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

Comando
sudo ovs-appctl fdb/flush sw1

Se 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

Comando
sudo ovs-ofctl -O OpenFlow13 packet-out sw1 1 NORMAL ffffffffffff00000000000a1234

Se 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

Comando
sudo ovs-appctl fdb/show sw1 | awk 'NR>1 {print $1, $3}' | sort

Se 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

Comando
sudo ovs-ofctl -O OpenFlow13 packet-out sw1 2 NORMAL 00000000000a00000000000b1234

Se 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

Comando
sudo ovs-appctl fdb/show sw1 | awk 'NR>1 {print $1, $3}' | sort

Se 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

Comando
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

Comando
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

Comando
sudo ovs-ofctl -O OpenFlow13 packet-out sw1 3 NORMAL ffffffffffff00000000000a1234

Se 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

Comando
sudo ovs-appctl fdb/show sw1 | awk 'NR>1 {print $1, $3}' | sort

Se 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.

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 este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.