Este documento presenta una introducción a las Redes Definidas por Software (SDN) y la programación en el plano de datos (P4). Explica los problemas de las redes convencionales y cómo SDN y P4 permiten una mayor programabilidad, flexibilidad y agilidad en la red. También resume los conceptos clave como OpenFlow, controladores SDN de código abierto y casos de uso comunes para SDN.
Redes Definidas porSoftware:
Un nuevo enfoque en la Red
Javier Richard Quinto A.
javierquinto@opennetsoft.com
jquinto@inictel-uni.edu.pe
INICTEL-UNI
2.
Quien soy yo?
- Magister en Ing. de la Computación.
- Investigador del INICTEL-UNI (10’)
- Forma parte del grupo de investigación
GIRA (PUCP) e INTRIG (UNICAMP)
- Lidero el proyecto: Nuevas tecnologías
en SDN/Openflow y P4, INICTEL-UNI
- Miembro del proyecto de despliegue y
documentación de nuevos servicios para
eduroam Latino América, RNP e
INICTEL-UNI
-Mis fortalezas: SDN, P4, NFV, Cloud,
Seguridad IPv4/IPv6, AAA/802.1x
@opennetsoft
fb.com/
opennetsoft
Sigueme a:
Equipamiento de RedesPropietarias
Verticalmente integrado, complejo, cerrado y propietario!
Custom
Silicon
Switches de
redes
Componentes
No recomendable para propietarios de redes ni para
usuarios
5.
Problematicas en lasRedes Actuales
Source: Tutorial SDN & NFV LACNIC26 by Whitestack
6.
Las redes comolo aprendiste en la
escuela
Source: Martin Casado CS244 Spring 2013, Lecture 6, SDN
7.
Redes en laPráctica
Estado enlace
distribuido
Estado de
configuración estática
Source: Martin Casado CS244 Spring 2013, Lecture 6, SDN
8.
Redes en laPráctica
Teoria y práctica son lo mismos, pero en la práctica son muy
diferentes!
9.
Camino a laEvolución
Adapted from: Transforming the Network with OpenSDN by Big Switch Network
10.
Camino a laEvolución
Source: Introduction to OpenFlow, SDN and NFV, Kingston Smiler
11.
Camino a laEvolución
Custom
Silicon
Merchant
Silicon
Facebook
12.
Camino a laEvolución
Existentes
- CLIs
- Código cerrado
- Proporcionado por el
proveedor
- Aplicaciones conocidas
Nuevas
- APIs
- Código abierto
- Proporcionado por el
cliente
- Funciones de Redes
Virtuales (NFV)
Adapted from: Kyle Mestery, Next Generation Network Developer Skills
13.
La Tendencia enComputación
- Cambios en los
patrones de tráfico.
- El consumismo de IT
- El aumento de los
servicios en la nube
- Big Data significa
más ancho de banda
Rediseñar la Red!
Planode Datos:
Streaming de paquetes
Forward, Filter, Buffer, Mark, rate-limit, and
measure packets
Source: Adapted from J. Rexford
16.
Rediseñar la Red!
Planode Control:
Algoritmos Distribuidos
Seguimientos en los cambios de la topología, rutas
computarizadas, instalación de nuevas reglas
Source: Adapted from J. Rexford
17.
Rediseñar la Red!
Recogermediciones y configurar equipamientos
Plano de Gestión:
Escala de tiempo
Source: Adapted from J. Rexford
18.
Rediseñar la Red!
●Gestión más simple
No necesita invertir más en el plano de gestión
● Ritmo más rápido de inovación
Menos dependencia con los Vendors y Estándares
● Interoperabilidad más fácil
Compatibilidad solamente en los protocolos wired
● Equipamientos más simple y más fácil
Más uso de software
Redes Definidas porSoftware (SDN)
Plano logicamente centralizado
API al Plano de Datos
(e.g., OpenFlow)
Inteligente
& Lento
Tonto &
Rápido
Source: Adapted from J. Rexford
22.
Redes Definidas porSoftware (SDN)
Source: https://www.opennetworking.com
Directamente Programable
Agilidad y Flexibilidad
Centralmente gestionado
Estándares abiertos y
neutral al vendor
Funciones de RedesVirtuales (NFV)
- Hardware commodity
Source: https://www.opennetworking.com , Network Function Virtualization: Perspectivas, Realidades e Desafios
- Ahorro en espacio y
energía
- Innovación más rápida
- Asignación flexible de
recursos
- Multiplicidad de usuarios
- Mayor rentabilidad
Sources: Ahmad Rostami,Ericsson Research (Kista):
http://www.itc26.org/fileadmin/ITC26_files/ITC26-Tutorial-Rostami.pdf and Uwe Michel, T-Systems
Flexibilidad y Programabilidad en la Red
(SDN & NFV)
Modelo: Open SDN
-Estándard abiertos
- Software de código
abierto
- APIs and SDKs
- Hardware abierto
34.
Modelo: Hybrid SDN
-Conviven con redes
tradicionales
- Soportan Openflow 1.3
- Más adecuado para
migraciones en SDN
35.
Modelo: Overlay SDN
-Método de despliegue
para virtualización de
redes
- Ejecutado sobre una
red separada
logicamente
- Big Switch Network y
Vmware usan overlay
Historia de Openflow,ACM SIGCOMM2008
● Openflow se originó en
la Univ. de Stanford en
2008.
● Openflow spec. V1.0 fue
lanzado en dic. 2009.
● Desde sus inicios
Openflow es gestionado
por la ONF.
Entradas de tablade flujos
Source: https://www.sdxcentral.com/sdn/definitions/what-is-openflow/
42.
A Quick JumpInto SDN
SDN no es OpenFlow
pero ...
OpenFlow si es SDN
The physical separation of the network control
plane from the forwarding plane, and where a
control plane controls several devices.
Definición según la ONF:
43.
Openflow y SDN
Aquíes en donde Openflow
si encajaría sobre SDN
Beneficios de
Openflow
- Programabilidad
- Inteligencia
centralizada
- Abstracción
44.
OpenFlow y SDN
InterfaceProgramable
Permite el acceso directo y manipulación del
plano de forwarding de los dispositivos de redes
tales como switches y routers, ambos físicos o
virtuales (basado en hypervisor).
Las primitivas básicas que pueden ser usadas
por una app. de software externa para
programar el plano de forwarding puede ser
comparada al conjunto de intrucción de un
CPU.
45.
Versions OpenFlow
La másreciente versión de
OpenFlow es la 1.5.1
Cada nueva versión mejora el
protocolo y adiciona nuevas
características
Desafortunadamente los
dispositivos hardware con soporte
Openflow usan, en su mayoria, la
versión 1.0
Version Release
0.8.0 May, 5, 2008
0.8.1 May, 20, 2008
0.8.2 Oct, 17, 2008
0.8.9 Dec, 2, 2008
0.9.0 Jul, 20, 2009
1.0 Dec, 31, 2009
1.1 Feb, 28, 2011
1.2 Dec 2011
1.3 Jun, 25, 2012
1.3.1 Sep, 6. 2012
1.3.2 Apr, 25, 2013
1.4.0 Oct, 14, 2013
1.5.0 Dec, 19, 2014
1.5.1 Mar, 26, 2015
46.
¿Qué versión usar?
1.0vs 1.3
Los mismos conceptos
Forwarding basados en flujo.
Información acerca del control de eventos en la red y
modifcación del estado del equipamiento
Diferentes Capacidades
OpenFlow 1.3 tiene más características y cubre más aspectos que
faltan en OpenFlow 1.0
->Multiple Tables, Groups, Rate Limiting, Controller Role
OpenFlow 1.0 es más simple y más fácil de implementar que 1.3. La
mayor parte de los campos son opcionales. Removiendo éstas
características nosotros tendríamos casi la versión 1.0
47.
Switch OpenFlow
Componentes principales
GroupTable
Opciones adicionales para reenviar
paquetes Disponible desde OpenFlow 1.1
Flow Table
Lookup y forwarding
OpenFlow Channel
Comunicación entre el SW y el
controlador
Meter Table
Mecanismo simple QoS.
Disponible desde OpenFlow 1.3
48.
Tabla de Flujos
Contieneentrada de flujo
OpenFlow 1.0 Flow entry
OpenFlow 1.3 Flow entry
Analogía de la tabla de flujo vs la tabla de enrutamientoable analogy
OpenFlow 1.0 vsOpenFlow 1.3
Actions
Output
Drop
Set VLAN ID
Set VLAN priority
Strip VLAN header
Modify Ethernet, IPv4.
transport src/dst address
Enqueue
Output
Set-Queue
Drop
Group
Push-Tag/Pop-Tag
Set-Field
Change-TTL
OpenFlow 1.0 OpenFlow 1.3
54.
Tabla: Group
Disponible desdeOpenFlow 1.1
Groups permiten nuevas opciones de forwarding
Type Function
All Broadcast, Multicast
Select Algorithm chooses the bucket
Indirect Only one bucket
Fast Failover Executes first live bucket
55.
Meter Table
Mediciones ycontrol de la tasa de paquetes que hace match
de las entradas de flujos asignados al meter id
56.
Canal OpenFlow
Canal decomunicación entre el SW
openflow y el Controlador
Conexión encriptada: TCP or TLS
IANA ha asignado un puerto para
la conexión entre OpenFlow
Switch-Controller: 6653
57.
Handshake
Switch Controller
Hello Message
Despuésde establecer la conexión del TCP/TLS, ambos lados envian
mensajes “Hello Message”
Solves the OpenFlow
version
Solves the Hello. If
the version is not
supported sends an
Error message
Features Request
Features Reply
OpenFlow Connection
Established
Network OS
El controladorpuede ser visto como un sistema operativo de red
en donde las aplicaciones pueden ser construidas sobre el TOP
de éste sistema operativo.
62.
Proactive vs ReactiveFlows
Reactive
Los flujos que no se encuentran en la tabla de entrada de
flujos del switch son enviados al controlador, que instala
estos flujos basados sobre los campos del paquete. El
paquete es luego enviado nuevamente al switch para su
debido procesamiento.
Ejemplo de aplicación: Learning Switch
Proactive
El controlador instala los flujos antes que el tráfico de
paquetes llegue al switch. Éste modelo es usado
cuando nosotros ya sabemos el tráfico que queremos
manejar.
Ejemplo de aplicación: Packet Monitor
Casos de Uso(Open Source)
1. 6.4% of all Internet
Traffic (ATLAS, 2010)
2. Google has two large
Backbones networks:
Internet facing (user traffic)
Datacenter Traffic (Internal)
3. Google WAN intensive
applications:
Youtube, Websearch, Google+,
Hangouts, Maps, AppEngine,
Android and Chrome updates.
Herramientas instaladas enUbuntu
16.04
Mininet (version 2.3)
Será usado para simular los switches, hosts y enlaces de la red
Open vSwitch (version 2.5)
Switch virtual Open vSwitch usado por mininet.
Ofsoftswitch13
CPqD y Ericsson OpenFlow 1.3 software switch, basado sobre el switch de
referencia de Stanford
Ryu controller
Ryu y OpenDayLight son uno de nuestros controladores elegidos
debido a su soporte a OpenFlow 1.0 y OpenFlow 1.3
74.
Mininet
Mininet iniciará casitodo lo que necesitas. Mininet emularía
una completa red de hosts, enlaces, y switches sobre una
simple maquina. Para crear un ejemplo de dos hosts, una red
con un switch, solo sería ejecutar: ‘sudo mn’ .
Switch S1
Host H1 Host H2
Eth0 Eth1
Eth0 Eth1
75.
Mininet
El controlador dereferencia local (ref) usa OpenFlow 1.0 por
defecto. Para usar OpenFlow 1.3, indicar el parametro
“protocols=OpenFlow13”. Por ejemplo:
$ sudo mn --mac --switch ovsk,protocols=OpenFlow13 --controller ref
mininet> dpctl show -O OpenFlow13
mininet> dpctl dump-flows -O OpenFlow13
mininet> h1 ping -c 3 h2
Adicionando reglas estáticas usando dpctl
mininet> dpctl add-flow "in_port=1,actions=output:2" -O OpenFlow13
mininet> dpctl add-flow "in_port=2,actions=output:1" -O OpenFlow13
mininet > h1 ping -c 3 h2
Notas algún cambio cuando tipeas “h1 ping h2” en el prompt del
mininet?
76.
OVS-OFCTL
Comandos para enviarmensajes directamente al Open vSwitch
Switch Capabilities
mininet> sh ovs-ofctl show s1 -O OpenFlow 13
Switch Description
mininet> sh ovs-ofctl dump-desc s1 -O OpenFlow13
Add Flow
mininet> sh ovs-ofctl -O OpenFlow13 add-flow s1
priority=100,in_port=1,actions=output:2
Flow Table state
mininet> sh ovs-ofctl dump-flows s1 -O OpenFlow13
Port statistics
mininet> sh ovs-ofctl dump-ports s1 -O OpenFlow13
77.
Dpctl con switch“user”
El switch software OpenFlow 1.3 tiene una similar herramienta
al ovs-ofctl: “sudo mn --switch user --controller ref”
Capacidades del switch
$ sudo dpctl unix:/tmp/s1 features
Descripción del switch
$ sudo dpctl unix:/tmp/s1 stats-desc
Adicionar flujos
$ sh dpctl unix:/tmp/s1 flow-mod cmd=add,table=0 in_port=1 apply:output=2
$ sh dpctl unix:/tmp/s1 flow-mod cmd=add,table=0 in_port=2 apply:output=1
Estado de la tabla de flujos
$ sudo dpctl unix:/tmp/s1 stats-flow
78.
TCP bandwith
Testing TCPbandwidth entre hosts con Iperf
$ sudo mn --switch user --test iperf
Results: [‘54.9 Mbits/sec', '60.6 Mbits/sec']
$ sudo mn --switch ovsk --test iperf
Results: ['7.06 Gbits/sec', '7.06 Gbits/sec']
Note que en el primer caso se consigue un BW en Iperf TCP mucho
menor que comparado a la vista en el segundo caso usando el
switch kernel
79.
Ejecución de controladoresRyu y
ODL
# Open DayLigth (https://www.opendaylight.org/downloads)
Acceso al directorio ODL y ejecución de Karaf
cd ~/distribution-karaf-0.4.4-Beryllium-SR4
sudo ./bin/karaf
# Ryu Controller (https://github.com/osrg/ryu)
Acceso al directorio Ryu y ejecución del controlador
cd ~/ryu
sudo ./bin/ryu-manager --verbose ryu/app/simple_switch_13.py
Ryu Controller conOpenFlow 1.3
El comando debajo inicia el controlador mediante la llamada al
Handler del protocolo Openflow y la aplicación Simple Switch 1.3
cd /home/ubuntu/ryu
./bin/ryu-manager --verbose ryu/app/simple_switch_13.py
Creamos la topología del mininet. Para controladores remotos, por
defecto OpenFlow 1.3 esta configurado
sudo mn --topo single,3 --mac --controller remote --switch ovsk
Comando para listar los flujos en memoria del Open vSwitch
sudo ovs-ofctl dump-flows s1
83.
OpenDayLight con OpenFlow1.3
Hacemos lo mismo, pero usando el controlador Open DayLight
cd ~/distribution-karaf-0.4.4-Beryllium-SR4
sudo ./bin/karaf
Creamos la topología del mininet. Para controladores remotos, por
defecto OpenFlow 1.3 esta configurado
sudo mn --topo single,3 --mac --controller remote --switch ovsk
Comando para listar los flujos en memoria del Open vSwitch
sudo ovs-ofctl dump-flows s1
84.
Wireshark
Mediante el usode otro terminal, iniciar Wireshark y escoger la interface
Loopback. Escoger tipo de filtro: “openflow_v4”
85.
Simple Learning Switch
●Un “Learning switch” es un equipo un poco más
inteligente en capa 2.
● El switch aprende la MAC y el puerto desde los
paquetes que llegan a sus interfaces.
● Si el switch no sabe el destino MAC, éste inunda el
paquete a todas las interfaces y luego aprende la
MAC y el puerto. De otra manera, éste reenvia al
puerto asociado con la MAC destino.
86.
OpenFlow Learning Switch
●La aplicación “learning-switch” en OpenFlow hace lo
siguiente:
○ Cuando el switch no tiene un flujo que mapee una MAC a un
puerto, éste enviaría el paquete (packet_in) al controlador. Por
defecto, OpenFlow 1.0 envia el packet-in al controlador, el
OpenFlow 1.3 pierde dicho flujo si una entrada de flujo
explicitamente no indica esto.
○ El controlador aprenderá la MAC source y el puerto en donde
el paquete llegó, instala flujo con éstos campos y envia el
paquete de retorno (Packet Out) con una acción de salida del
tipo Flood.
○ Paquetes subsecuentes con destino igual a la MAC aprendida
son reenviadas directamente al destino.
Setup Configuration
Para elpresente tuorial, nosotros vamos a convertir un HUB a un switch de
aprendizaje MAC que programa flujos.
1. Start the ODL controller in debug mode # Terminal 1
cd $control
./karaf debug
2. Verify if the feature “sdnhub-tutorial-learning-switch” is installed
> feature:list -i |grep sdnhub-tutorial-learning-switch
If it is not installed, install it
> feature:install sdnhub-tutorial-learning-switch
Wait 30 seconds until the Learning-Switch program is installed and active
> bundle:list -s |grep learning-switch
189 | Active | 80 | 1.0.0.SNAPSHOT org.sdnhub.odl.tutorial.learning-switch.impl
89.
Setup Configuration
3. Startmininet topology # Change to a second terminal (Terminal 2)
sudo mn --topo single,3 --mac --switch ovsk,protocols=OpenFlow13
--controller remote
* We wait until the controller is connected to the mininet topology:
is_connected: true
4. Try to do ping between “host1” and “host2”
mininet> h1 ping h2
From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
Porqué el Ping falla?
5. Add the next rule and verify the ping
mininet> s1 ovs-ofctl add-flow tcp:127.0.0.1:6654 -OOpenFlow13
priority=1,action=output:controller
mininet> h1 ping -c 10 h2
90.
Setup Configuration
6. Openthe learning-switch program ($learn/TutorialL2Forwarding.java) and
pay attention in the lines #79 and #143
In the line #79 you may note that the default function of the code is in “hub
mode”. This means that our program (learning-switch) will act as hub, thus ping
between hosts would have a high RTT value, as you can see above. In the line
#143 you may note the code block related to the behavior of the program.
7. In the same file TutorialL2Forwarding.java, change the default function of the
program from “hub” to “switch”.
private String function = "hub"; # Line 79
to
private String function = "switch";
91.
Setup Configuration
8. Updatemaven from the path of the program and copy the “JAR” generated
by maven to the folder “deploy” of our controller
cd $program1 # Path of the learning-switch program
mvn install -nsu
cp $target/learning-switch-impl-1.0.0-SNAPSHOT.jar $deploy/
9. Restart “mininet” and the “controller” and do ping between h1 and h2 again:
> logout # Logout to the controller
./karaf debug # Start the controller again
mininet > exit # Exit to the mininet
$ mn -c # Clean mininet
$ sudo mn --topo single,3 --mac --switch ovsk,protocols=OpenFlow13
--controller remote
mininet > h1 ping -c 10 h2
Notas cambios en el RTT obtenido en el paso 5 y 9? Que sucedió?