• No results found

Draft article 12 Non-refoulement

Los puertos OpenFLow son puertos Ethernet que pueden ser lógicos, físicos y reservados. Los puertos físicos son aquellos que se corresponden con una interfaz física del switch. Por ejemplo, en un switch convencional los puertos se mapean en relación uno a uno con las interfaces físicas. En el caso de un switch OpenFLow, este podría estar virtualizado sobre el hardware de un switch (para tener varias instancias) o el hardware de una máquina convencional. En estos casos, un puerto físico OpenFlow podría representar sólo una porción virtual de la interfaz hardware del switch. Para comprender este concepto mejor, conviene imaginarse un dispositivo hardware con varios switches virtuales ejecutándose dentro. Algunos de esos switches tendrán que compartir las interfaces físicas de la máquina donde están alojados, aunque cada uno gestione un tipo de tráfico diferente. En este caso, los puertos físicos de los switches virtuales OpenFlow tendrán asociados una porción de la interfaz física con la que están mapeados, y no la interfaz entera, pues la tienen que compartir con otros switches virtuales.

Los puertos lógicos son puertos definidos por el switch que no se corresponden directamente con una interfaz hardware. Este tipo de puertos se utilizan cuando, por ejemplo, se tiene una instancia de un switch virtual y varios contenedores ejecutando en el mismo anfitrión. En este caso, para conectar los contenedores al switch, puesto que es todo virtual y por tanto no hay interfaces físicas, se crearían puertos lógicos en el switch para conectar las interfaces virtuales de los contenedores. Aunque se hablará más delante de este tipo de situaciones, conviene entender que el uso de puertos lógicos está muy orientado a conectar dispositivos virtuales. Hasta ahora se ha hablado de tipos de puertos genéricos que podrían encontrarse en cualquier switch convencional. Los puertos reservados son los más interesantes, pues son necesarios para el funcionamiento de OpenFlow, y es de los que se hablará más en profundidad. Se trata de puertos abstractos que especifican acciones genéricas de encaminamiento, como enviar mensajes al controlador, inundar los puertos con un paquete o enviar el paquete sin utilizar OpenFlow. De hecho, para comprenderlos mejor, podría considerarse que más que puertos se trata de acciones a realizar sobre el paquete. Los puertos reservados apenas han evolucionado desde la versión 1.0. Hubo algunos cambios en OpenFlow 1.1 y desde entonces han permanecido invariables. Son los siguientes [36]:

• ALL • CONTROLLER • TABLE • INGRESS PORT • LOCAL • NORMAL • FLOOD • ANY

ALL: representa todos los puertos que puede utilizar el switch para enviar un paquete. Se puede utilizar únicamente como puerto de salida. En ese caso, una copia del paquete es enviado por todos los puertos estándar.

ESTUDIO Y ANÁLISIS DEL PROTOCOLO OPENFLOW

29

CONTROLLER: representa el canal de comunicación con el controlador SDN. Se puede utilizar

como un puerto de entrada o de salida. Si se utiliza como puerto de entrada, identifica el paquete como un mensaje del controlador. Si se utiliza como puerto de salida, encapsula el mensaje en un paquete de tipo PACKET_IN y se encamina.

TABLE: representa el comienzo del pipeline de OpenFlow. Este puerto solo es válido como

puerto de salida si se encuentra la acción “output” en el action set de un mensaje de tipo PACKET_OUT (los que envía el controlador a los switches). Sirve para mandar el paquete enviado por el controlador a la tabla 0 del switch para que pueda ser procesado por el pipeline de OpenFlow visto anteriormente.

IN_PORT: representa el puerto por donde ha llegado el paquete. Solo puede ser utilizado como

puerto de salida, pues sirve para enviar el paquete por el puerto por donde ha llegado. Este puerto debe ser utilizado con cuidado para evitar que se generen bucles.

ANY: se trata de un valor especial utilizado en algunas peticiones OpenFlow en las que no se especifica el puerto.

UNSET: puerto muy específico utilizado para indicar que no se ha especificado el puerto de salida

en el action set de un paquete. No se puede utilizar como puerto de entrada ni de salida. Sirve para para enviar los metadatos asociados al action set de un paquete por un puerto concreto.

LOCAL: representa la pila de red local del switch y la pila de administración. Se puede utilizar

como puerto de entrada o de salida. Este puerto permite a entidades remotas interactuar con el switch a través de la red OpenFlow, en vez de usar una red de control diferente.

NORMAL: representa el encaminamiento usando el funcionamiento normal de un switch

multinivel sin utilizar el pipeline OpenFlow, está pensado para switches OpenFlow híbridos (aquellos que también pueden funcionar en modo normal). Solo se puede utilizar como puerto de salida.

FLOOD: representa el envío broadcast, pero sin utilizar el pipeline OpenFlow, a diferencia de

ALL. Solo puede utilizarse como puerto de salida. Enviará el paquete por todos los puertos estándar excepto por el que fue recibido o aquellos que estén bloqueados.

Los puertos reservados pueden ser de dos tipos, obligatorios y opcionales. Todos son obligatorios excepto los tres últimos mencionados (LOCAL, NORMAL, FLOOD), que son opcionales [37].

ESTUDIO Y ANÁLISIS DEL PROTOCOLO OPENFLOW

30

Ilustración 15. Representación de los caminos que siguen los paquetes según el puerto reservado que tienen asociado. Fuente: [6]