Professional Documents
Culture Documents
Trabalho
apresentado
Engenharia
de
Universidade
UFF,
como
Curso
de
Telecomunicaes
da
Federal
requisito
ao
Fluminense
para
obteno
Orientadora:
Prof.
Castro Fernandes
Dra.
Natalia
Comisso julgadora:
Agradecimentos
Primeiramente gostaria de agradecer minha famlia, meu pai Samuel, meu irmo
Natan e principalmente minha me Sandra e ao meu av Pedro (
in memoriam )
pelo
amor, carinho e por terem sempre me apoiado e acreditado no meu potencial. Gostaria de
agradecer tambm a minha namorada Patricia, que desde o ensino mdio esteve ao meu lado,
comemorando comigo os bons momentos e me apoiando nos maus. Gostaria de agradecer
aos professores, Natalia Fernandes, Ricardo Carrano, Tadeu Nagashima, Gilberto Ferreira,
e a todos os outros que me ajudaram na busca do conhecimento. Agradeo tambm ao
professor Mrcio Albuquerque (CBPF) por todo o apoio e conselhos e ao Lus Henrique
Rosati Rocha (BNDES) pelo exemplo de carter e prossionalismo. Agradeo a todos meus
amigos que direta ou indiretamente contriburam para minha formao, principalmente ao
Alan Henrique Ferreira, Gabriel Oliveira e ao Rogrio Libarino. A todos vocs, meu muito
obrigado!
Resumo
Nessa monograa, apresentado um novo paradigma em redes de computadores, as redes
denidas por software.
Esse conceito surgiu em universidades americanas em meados de 2008 e prope a retirada
da inteligncia dos dispositivos de redes como switches e roteadores. Essa inteligncia
seria concentrada em um controlador, entidade com total viso e controle da rede.
Em redes denidas por software, tm-se uma maior exibilidade, j que se pode criar
diversas aplicaes, programando o controlador da rede. Aplicaes que hoje seriam impensveis comearo a ser desenvolvidas com facilidade. Diante desse novo paradigma em redes de
computadores, uma aplicao simples desenvolvida em Python apresentada. Essa aplicao
altera o caminho de um determinado uxo mediante a uma circunstncia pr-estabelecida.
A mesma foi testada utilizando o emulador Mininet e alguns resultados de desempenho
so apresentados.
Palavras-chave: SDN, Redes denidas por software, Redes programveis, POX, Mininet.
ii
Abstract
In this monograph, a new computer networks' paradigm is presented, Software-Dened
Networking.
This concept was born in American universities around 2008 proposing removal of the
intelligence in networks devices such as switches and routers. This intelligence would be
centralized in a controller, an entity with total view and control of the network. Due this
fact, Software-Dene Networking is more exible, considering the fact that it is possible to
create several applications, simply programming the network controller. Applications that
are unthinkable nowadays, would be developed easily.
Thinking about this new computer networks' paradigm, a simple application that was
developed in Python language is introduced on this monograph. This application consists
on changing the path of a specic data ow according a pre-established condition.
The application was tested using Mininet emulator and the performance results will be
discussed on the present work.
iii
Lista de guras
2.1
2.2
. . . . . . . . . . . . . . . . . . . . . . .
2.3
2.4
2.5
2.6
. . . . . . . . . . .
. . . . . . . . . . . . . . .
10
12
13
2.7
15
3.1
18
3.2
19
3.3
. . . . . . . . . . . . . . . . . . . . . .
20
4.1
23
4.2
24
4.3
Campos de cabealho.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
4.4
25
4.5
26
4.6
. . . . . . . . . .
28
4.7
. . . . . . . . . . . . . . . . . . .
29
4.8
30
4.9
. . . . . . . . . . . . . . . . . . .
32
5.1
33
5.2
. . . . . . . . . . . . . . . . . . . .
34
5.3
34
6.1
Pacotes LLDP.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
6.2
37
6.3
37
iv
LISTA DE FIGURAS
6.4
38
6.5
. . . . . . . . . . . . . . .
38
6.6
39
7.1
41
7.2
Inicializao do Mininet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
7.3
Inicializao da aplicao.
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
7.4
42
7.5
42
7.6
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
7.7
43
7.8
7.9
44
44
. . . . . . . . . . . . .
45
45
46
46
Lista de acrnimos
API - Application Programming Interface
ARP - Address Resolution Protocol
ARPANET - Advanced Research Projects Agency Network
AS - Autonomous System
ATM - Asynchronous Transfer Mode
BYOD - Bring Your Own Device
CBE - Content-Based Emulation
CIDR - Classless Inter-Domain Routing
CLI - Command Line Interface
EGP - Exterior Gateway Protocol
EIGRP - Enhanced Interior Gateway Routing Protocol
FIB - Forwarding information base
LSA - Link State Advertisement
LLDP - Link Layer Discovery Protocol
LSP - Link State Packet
IGP - Interior Gateway Protocol
IP - Internet Protocol
ISP - Internet Service Provider
MAC - Media Access Control
MPLS - Multiprotocol Label Switching
OSPF - Open Shortest Path First
ONF - Open Network Foundation
QoS - Quality of Service
RIB - Routing Information Base
RIP - Routing Information Protocol
SDN - Software-Dened Networking
SSL - Secure Sockets Layer
TCP - Transmission Control Protocol
TLS - Transport Layer Security
ToS - Type of Service
UDP - User Datagram Protocol
VoIP - Voice over IP
vi
Sumrio
Lista de guras
iv
1 Introduo
1.1
Motivao e objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2
Organizao do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Modelo em camadas
2.2
Endereamento
2.2.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mscara de rede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3
Encaminhamento
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4
Roteamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.4.1
12
2.4.2
14
2.5
. . . . . . . . . . . . . . . . . . . . . . . . .
15
2.5.1
. . . . . . . . . . . . . . . . . . . . . . . . .
16
Classicao de pacotes
Engenharia de Trfego
3.2
17
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
4 OpenFlow
17
18
22
4.1
23
4.2
Tabela de uxos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
4.3
O canal seguro
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
4.4
Outras verses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.4.1
OpenFlow 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.4.2
OpenFlow 1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
4.4.3
OpenFlow 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
4.4.4
OpenFlow 1.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
POX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
4.5
5 Mininet
33
vii
SUMRIO
6 A aplicao desenvolvida
6.1
36
Executando a aplicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 Simulao e resultados
7.1
viii
36
40
Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
8 Concluses
48
9 Apndice A
50
9.1
. . . . . . . . . . . . . . . . . . . . . . . .
10 Apndice B
10.1 Cdigo para calcular as rotas
52
. . . . . . . . . . . . . . . . . . . . . . . . . .
11 Apndice C
11.1 Cdigo da aplicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Referncias bibliogrcas
50
52
56
56
66
Captulo 1
Introduo
As redes de computadores nos permitem fazer coisas inimaginveis h poucas dcadas.
Seu embrio teve incio no nal da dcada de 1960 com a ento denominada ARPANET
os departamentos de pesquisa norte americanos. Muito evolui desde ento. Modelos para
protocolos de comunicao foram criados e muitos protocolos foram desenvolvidos, sejam
para suprir a demanda de aplicaes, sejam para calcular os caminhos que os pacotes devem
percorrer ao longo da rede.
Devido essa evoluo de ideias, desde o incio das pesquisas sobre comutao de pacotes
e da ARPANET, juntamente com a evoluo do hardware utilizado, hoje temos inmeras
possibilidades na rede. Anexar enormes quantidades de arquivos em nossos e-mails, jogar
jogos com pessoas do mundo inteiro em tempo real, ou at mesmo realizar ligaes telefnicas
atravs da Internet.
Entretanto, talvez hoje as redes estejam na iminncia de uma mudana de paradigma,
mudana essa que possibilitar o desenvolvimento de aplicaes cuja implementao com
a tecnologia atual seria impossvel. Com a utilizao de redes denidas por software (SDN
-
Software-Dened Networking ),
MOTIVAO E OBJETIVOS
1.1
por software.
O conceito de redes programveis no novo. Como exemplo, tem-se o conceito de redes
ativas na dcada de 1990 (Feamster
Abordar conceitos como plano de controle e de dados, e sua separao nas redes denidas por software;
Apresentao de uma aplicao programada em Python, para redes denidas por software. Essa aplicao altera o caminho de um uxo pr-estabelecido, mediante a uma
alta utilizao da largura de banda do caminho principal;
ORGANIZAO DO TRABALHO
1.2
Captulo 2
Conceitos bsicos das redes de
computadores
Nesse captulo, sero abordados conceitos como modelo de camadas TCP/IP, endereamento, encaminhamento e classicao de pacotes. Conceitos esses fundamentais para o
pleno entendimento das vantagens e desvantagens das redes denidas por software.
MODELO EM CAMADAS
2.1
Na camada de aplicao, o nvel mais alto do modelo, usurios utilizam programas que
acessam servios disponveis atravs da rede TCP/IP. A aplicao ir interagir com protocolos da camada de transporte para enviar e receber dados. Como ser visto adiante, o
modelo foi concebido para que todas as outras camadas sejam transparentes para o usurio
nal, ou seja, o mesmo no precisa ter conhecimento sobre a implementao das camadas
subjacentes.
A principal funo da camada de transporte prover uma comunicao ponto-a-ponto,
ou seja, conectando uma aplicao de um dispositivo origem com uma aplicao em um
dispositivo destino, independentemente da quantidade de equipamentos intermedirios. Com
isso, a camada transporte deve aceitar dados provenientes de diversas aplicaes, encapsullos, incluindo informaes que sero utilizadas para controle e para identicao da aplicao
de origem e destino e enviar esses dados encapsulados para as camadas mais baixas.
A camada de transporte pode tambm regular o uxo de informaes, podendo inclusive
oferecer um transporte convel, como por exemplo, vericando periodicamente a conexo
estabelecida e assegurando que os dados esto sendo enviados e recebidos corretamente,
Datagram Protocol )
Address
Resolution Protocol ), protocolo da camada de rede, far a traduo do endereo lgico para
ENDEREAMENTO
2.2
Figura 2.2: Em (a) tem-se a viso do usurio da rede e em (b) a estrutura fsica com os enlaces
e roteadores representados.
2.2 Endereamento
Sendo a camada de internet uma das mais importantes do modelo TCP/IP, torna-se
interessante o entendimento da diviso e endereamento lgicos dos dispositivos, assim como
tambm interessante entender como ocorre o roteamento e encaminhamento dos pacotes.
Em uma rede TCP/IP, cada adaptador de rede existente em um dispositivo identicado
por um nmero chamado endereo IP. Tomando-se como base o IP verso 4, esse endereo IP
consiste em quatro conjuntos de 8 bits. Esses octetos, quando representados, so separados
por pontos.
ENDEREAMENTO
2.2
(2013):
do endereo IP, seguido de uma barra (/) e da quantidade de bits que so correspondentes
poro de rede.
ENCAMINHAMENTO
2.3
Logo, como foram utilizados oito bits para a mscara de rede acima, temos a seguinte
notao:
10.0.0.1/8
Um outro exemplo segue abaixo:
IP : 11000000.10101000.00000000.00000001 = 192.168.0.1
Mscara: 11111111.11111111.11111111.00000000 = 255.255.255.0
Notao CIDR: 192.168.0.1/24
Logo, os 24 primeiros bits representam a poro do IP destinado rede e os ltimos 8 bits
representam o dispositivo daquela rede. Para representar o endereo de rede, completa-se a
parte do endereo IP referente ao dispositivo com bits zero.
Logo para os dois exemplos apresentados tm-se as redes:
10.0.0.0/8
192.168.0.0/24
Os conceitos de mscaras de rede e de endereo de rede so importantes, pois os mesmos
sero utilizados nos roteadores para a realizao do encaminhamento que ser abordado a
seguir.
2.3 Encaminhamento
Para que o conceito de encaminhamento de pacotes em redes de computadores atuais
possa ser compreendido, importante diferenciar-se os tipos de servios que a camada de
internet pode oferecer.
A camada de internet oferece dois tipos distintos de servios. O servio orientado a
conexo e o servio no orientado a conexo. As redes orientadas a conexes so denominadas
redes de circuitos virtuais. Como exemplos, tm-se as redes ATM (
Mode )
Frame Relay.
Asynchronous Transfer
Multiprotocol Label
ENCAMINHAMENTO
2.3
Dene a unidade bsica de dados que ser transmitida atravs da rede TCP/IP, especicando o formato dos pacotes utilizados por todos os dados.
O IP dene uma srie de regras, como por exemplo, como dispositivos e roteadores devem processar os pacotes e as condies sob as quais os pacotes podem ser descartados.
Comer
(2013)
ENCAMINHAMENTO
2.3
10
dever percorrer at chegar ao destino. Precisa saber apenas qual o prximo salto, e para
isso, o mesmo ir vericar sua tabela de encaminhamento (FIB -
base ).
Forwarding information
ROTEAMENTO
2.4
11
2.4 Roteamento
Na seo anterior, foi visto o encaminhamento desempenhado pelo IP, onde dado um
determinado pacote IP, feita a vericao do prximo salto na tabela de encaminhamento
e o direcionamento desse pacote para o mesmo.
As rotas da tabela de encaminhamento podem ser originadas basicamente de trs formas.
A primeira so as rotas diretas. So as redes as quais o roteador se conecta diretamente. A
segunda a forma esttica, onde o gestor da rede precisa congurar cada rota manualmente.
Pode ser utilizada em pequenas redes domsticas, entretanto em redes mais complexas, onde
existiro diversos roteadores organizados em uma malha, existindo diversos enlaces entre eles,
essa congurao manual torna-se muito onerosa. A congurao das rotas manualmente
tambm torna-se um problema devido necessidade de reagir dinamicamente s mudanas
da rede, como por exemplo devido falhas de um enlace ou ainda quando novos roteadores
so acrescentados.
J na terceira forma, chamada de roteamento dinmico, as rotas sero conguradas
automaticamente, de acordo com os protocolos de roteamento e como ser visto, existem
basicamente dois tipos predominantes, os protocolos do tipo vetor distncia e do tipo estado
de enlace.
Antes de vericar-se o roteamento dinmico, torna-se interessante a distino de protocolos IGP (
e EGP (
A Internet,
Autonomous System ),
ROTEAMENTO
2.4
12
Figura 2.5: Ilustrao do aprendizado de rotas pelo roteador e distino entre as bases de infor-
Fonte: Farrel
(2004)
Information Base ).
Routing
A RIB apresenta diversas informaes sobre as rotas disponveis na rede. Parte dessa
informao pode sugerir vrias rotas para um nico destino, e um mecanismo de deciso de
roteamento aplica polticas de roteamento para determinar as melhores rotas. A RIB dar
origem a FIB. A FIB oferece informaes no ambguas ao componente do roteador que
encaminha os pacotes de dados.
ROTEAMENTO
2.4
13
a quantidade de saltos (
estar a zero saltos de distncia. Se um datagrama precisa passar por N roteadores para
chegar ao destino, o destino est a N saltos de distncia.
Quando um roteador novo X inserido, primeiramente ele ir se anunciar aos vizinhos.
Os vizinhos propagaro a informao dizendo que podem chegar at X com um salto de
distncia e assim sucessivamente.
Quando uma mensagem, por exemplo, proveniente de X, chega em Y, Y tomar as
seguintes aes:
Se X conhece um destino que Y no, Y ir adicionar esse destino a sua tabela de
roteamento, congurando como prximo salto X e somando 1 ao custo para se chegar a
determinado destino;
Se X conhece um caminho mais curto para o destino, Y substitui a entrada em sua
tabela de roteamento, congurando o prximo salto para X e corrigindo o custo;
Se a entrada para um determinado destino j existe em Y, sendo o prximo salto para
a mesma, X e X anuncia um valor de custo diferente ao anterior, Y ir atualizar sua
tabela, corrigindo o custo;
Exemplo de tabela de encaminhamento pode ser visto na Figura 2.6.
Figura 2.6: Em (a), tabela de encaminhamento presente no roteador `Y. (b) ilustra uma mensa-
Essa modalidade de protocolos, torna-se ideal para redes pequenas a mdias, uma vez
que a transmisso de toda a tabela de roteamento para cada vizinho lenta e a ocorrncia de
perdas pode causar loops, demandando um longo tempo para a convergncia das informaes.
Como vantagens, tm-se a baixa complexidade de implementao e os baixos requisitos de
processamento e memria.
Routing
ROTEAMENTO
2.5
14
down.
up,
Aps a descoberta dos vizinhos, o roteador envia periodicamente mensagens para informar aos outros roteadores da rede sobre os status de cada um de seus links (mensagens
LSP -
- ou LSA -
- de acordo o protocolo).
importante enfatizar que essas mensagens de status no especicam rotas, informam apenas
se a comunicao possvel entre o par de roteadores referidos na mensagem.
Esse processo de inundao das mensagens simples. O roteador recebe um LSP e verica
em seu banco de dados de estado de enlace se j conhece o enlace referido na mensagem.
Se conhecer, ele descartar o LSP, mas caso no conhea, ele acrescentar o enlace ao seu
banco de dados e enviar o novo LSP em cada uma de suas interfaces, exceto a interface em
que a mensagem foi recebida originalmente.
Logo, aps a rede convergir, cada roteador possuir um mapa completo e idntico da
rede.
Para calcular as rotas entre os enlaces disponveis na rede, os roteadores executam o
algoritmo de Dijkstra, algoritmo esse que ir calcular o melhor caminho entre o roteador
local e todos os outros destinos.
First ),
tm uma mtrica padro proporcional largura de banda dos enlaces. Com isso,
o melhor caminho sempre ser o mais rpido, ao contrrio do vetor distncia, que usa o
caminho com menor nmero de saltos.
Uma outra vantagem dos protocolos de estado de enlace que cada roteador realiza
os clculos das rotas independentemente, usando os mesmos dados de status originais, no
dependendo de roteadores intermedirios como o vetor distncia. Esse tipo de protocolo
ideal para redes grandes, pois sua percepo de problemas ou de novos roteadores e a
consequente propagao dessas informaes so rpidas. Mas, como desvantagem, o clculo
das alteraes nas tabelas de roteamento exige bastante processamento.
So exemplos de protocolos o OSPF e o IS-IS.
Nessa seo, termina-se uma breve introduo ao funcionamento das redes de computadores atuais. A prxima seo, tem como objetivo apresentar a comutao baseada em
rtulos, que ser a base da tecnologia MPLS. Devido exibilidade de roteamento existente
em tal tecnologia, torna-se interessante a citao da mesma, para posterior compreenso das
redes denidas por software.
2.5
15
Internet
2.5
16
payloads. Na prtica,
Roteadores na borda da rede do ISP iro examinar cada datagrama e decidir se utilizar
algum caminho da rede MPLS para encaminhar os dados ou se lidar com o datagrama com
o encaminhamento convencional.
O MPLS permite ao ISP oferecer servios especiais para clientes individuais. Por exemplo,
considere uma grande empresa com escritrios no Rio de Janeiro e em Porto Alegre. Supondo
que a empresa deseje uma conexo segura entre essas duas localidades com performances
garantidas, o ISP pode estabelecer um caminho na rede MPLS entre esses dois escritrios e
pode congurar os roteadores ao longo do caminho para garantir o desempenho contratado.
array
determinado pacote corresponde a um trfego web, basta vericar alguns bytes. Como por
exemplo, vericar os bytes correspondentes ao
Ethernet type,
IP, vericar os bytes correspondentes ao campo protocolo, no pacote IP, para saber se o
protocolo utilizado o TCP e vericar os bytes correspondentes a porta de destino, para
vericar se os mesmos correspondem porta 80. Comer
(2013)
array
de bytes. O sistema de
Captulo 3
SDN - Redes Denidas por Software
As redes de computadores atuais so compostas de inmeros dispositivos diferentes como
roteadores, switches e hosts que implementam diversos protocolos complexos. Conforme as
mesmas foram crescendo e se tornando parte essencial da infraestrutura de nossa sociedade,
tornou-se rdua a tarefa de testar e implementar novos protocolos.
Com esse cenrio em mente, a ideia de redes programveis foi proposta com o objetivo
de facilitar futuras evolues nas redes de computadores. Nesse captulo, sero apresentados
os conceitos fundamentais das redes denidas por software, uma forma de programar a rede
que vem se destacando consideravelmente nos ltimos anos.
um novo paradigma que tem como objetivo facilitar substancialmente a gerncia de
redes e permitir inovaes e evolues que o nosso modelo ossicado atual no permite
Nunes
et al.
(2014).
17
3.2
18
et al.
(2014).
O conceito base das redes denidas por software consiste em separar o plano de controle
do plano de dados e retir-lo dos dispositivos. Com isso, a rede ser formada por dispositivos
burros encaminhadores de pacotes e por uma camada de software programvel onde haver
um controlador de rede que coordenar todas as aes dos dispositivos. Esses dispositivos
encaminhadores de pacotes sero programados atravs de uma interface aberta, como, por
exemplo, a interface denida pelo OpenFlow, que ser visto no prximo captulo.
Atualmente, encontram-se no mercado switches OpenFlow (nomenclatura dada aos dispositivos burros) tanto puros quanto hbridos. Os puros, no apresentam nenhum plano de
3.2
19
controle, conando completamente no controlador para lhe dizer como encaminhar os pacotes. J os hbridos, suportam comandos do controlador em adio s operaes e protocolos
atuais Nunes
et al.
(2014).
Figura 3.2: Congurao bsica SDN, com um controlador externo congurando o dispositivo de
rede.
Vale salientar que as redes denidas por software suportam tanto controladores externos
totalmente centralizados, ou seja, apenas um controlador com viso total da rede, quanto
distribudos, onde h alguns controladores controlando a rede (mesmo que de forma lgica
aparentem ser apenas um).
Na imagem 3.3, segue uma representao de dispositivos de redes genricos, com um
sistema operacional externo conhecedor de toda a topologia rodando no controlador e programas de controle diversos, sejam novos ou j em uso, como por exemplo, protocolos de
roteamento como OSPF e RIP.
Por ser um novo modelo, existem benefcios e desaos/desvantagens com a sua implementao. Seguem abaixo alguns benefcios:
Visualizao unicada da rede - Com as redes denidas por software, passa-se a ter
uma viso global de toda a rede atravs do controlador, simplicando conguraes e
gerncia dos dispositivos.
Recuperao mais rpida das falhas - Devido ao controle global, seja a falha em um
link ou em um n da rede, a rede se reorganizar e convergir mais rapidamente para
3.2
20
Upgrade e implementao de novas aplicaes - Uma das maiores vantagens desse novo
paradigma a implementao de novas aplicaes para a rede. Novos protocolos e novas
formas de encaminhar os dados podero ser testadas e implementadas rapidamente,
pois no dependem mais de modicaes no rmware do switch ou do roteador. Alm
disso, o controlador pode ter seu software atualizado e alterado sem haver perda de
pacotes em uma rede em produo.
onde os
Conceito novo - As redes denidas por software assim como sua implementao mais
difundida, o OpenFlow, ainda se encontram imaturos. Muitos aspectos ainda precisam
ser amadurecidos e novas padronizaes realizadas. Como exemplo, qual o nvel de
3.2
21
a baixa prioridade e saturao do link principal. Aps rpidos ajustes no controlador, o link
secundrio (redundncia) que antes estava ocioso, passou a ser utilizado e o streaming foi
feito corretamente.
Outro exemplo de implementao foi apresentado pelo Google em 2012 na
Summit
Open Network
(2012).
Como visto, as redes denidas por software j so uma realidade, mesmo que ainda de
forma tmida. Muito precisa ser evoludo e amadurecido. Questes relativas segurana
precisam ser devidamente estudadas e analisadas. Mas a liberdade proporcionada por esse
modelo no deixa dvidas de que num futuro prximo as redes sero muito mais dinmicas
e programveis que as atuais, seja utilizando o paradigma SDN ou algum outro que venha
a ser derivado do mesmo.
Captulo 4
OpenFlow
Aps a denio do conceito das redes denidas por software, vista no captulo anterior,
algumas dvidas podem vir a surgir como:
As respostas para tais perguntas podem ser encontradas na implementao mais difundida das redes denidas por software, o padro OpenFlow.
Criado originalmente na universidade de Stanford, o OpenFlow um padro aberto,
que surgiu da necessidade dos pesquisadores executarem protocolos experimentais na rede
acadmica.
uma tecnologia proposta para padronizar a forma como o controlador se comunica com
os dispositivos de rede em uma arquitetura SDN, denindo tambm um protocolo para essa
comunicao. Dessa forma, o OpenFlow prov meios de controlar os dispositivos de rede
(switches OpenFlow) sem a necessidade dos fabricantes exporem o cdigo de seus produtos.
Lara
et al.
(2014)
Lara
et al.
(2014).
Network Foundation ).
22
Open
4.1
23
Tabela de Fluxos
Canal Seguro
Protocolo OpenFlow
et al.
(2008):
Fonte: McKeown
et al.
(2008)
O switch OpenFlow deve ser capaz de realizar trs simples aes com os uxos entrantes:
Encaminhar o uxo entrante para uma determinada interface de sada, caso haja uma
entrada equivalente para o uxo em questo em sua tabela de uxos;
Caso no haja entrada equivalente na tabela de uxos, o switch deve ser capaz de
encapsular o primeiro pacote (ou todos, de acordo com a necessidade) e encaminh-lo
para o controlador atravs do canal seguro. O controlador que ir decidir o que fazer
TABELA DE FLUXOS
4.2
24
com esse pacote. Inclusive, decidir se uma entrada na tabela de uxos do switch ser
adicionada ou no;
Por ltimo, o switch OpenFlow tambm deve ser capaz de descartar pacotes;
Fonte: Foundation
(2009)
Fonte: Foundation
(2009)
Cada campo do cabealho pode ser ou no denido. Por exemplo, para o switch OpenFlow
funcionar como um roteador, basta especicar o campo IP de destino.
Quanto aos contadores existem quatro tipos diferentes: Os contadores por tabela, por
uxo, por porta e por la. Os mesmos sero incrementados sempre que uxos correspondentes
s entradas na tabela entrem no switch e sero utilizados em mensagens de estatsticas,
tambm denidas pelo OpenFlow.
A Figura 4.4 apresenta os contadores disponveis:
TABELA DE FLUXOS
4.2
25
Fonte: Foundation
(2009)
Quanto s aes que devero ser tomadas com os pacotes, existem aes obrigatrias
que todos os switches OpenFlow devem implementar e outras opcionais. Ao se conectar
ao controlador, o switch deve informar quais aes opcionais o mesmo implementa. Cada
entrada na tabela de uxos associada a uma ou mais aes. Se para uma determinada
entrada na tabela no houver uma ao especicada, os pacotes desse uxo sero descartados.
Abaixo seguem os tipos de aes:
Encaminhamento
Obrigatrio
Opcional
TABELA DE FLUXOS
4.3
26
Descartar (obrigatria)
Setar Vlan ID
Modicar ToS
Fonte: Foundation
(2009)
Vale salientar que, assim como nos roteadores rotas para sub-redes mais especcas tm
prioridade, entradas na tabela de uxos que especiquem exatamente o uxo entrante, ou
seja, entradas na tabela que no apresentem campos coringa, tero sempre a mais alta
prioridade.
O CANAL SEGURO
4.3
27
Assncronas - Geradas pelo switch para atualizar o controlador sobre eventos da rede
e mudanas no estado do switch;
Simtricas - Podem ser geradas tanto pelo controlador quanto pelo switch. So enviadas
sem solicitao;
Controlador-Switch
Caractersticas (
Conguration )
Congurao (
do switch;
Modicao de estado (
Leitura de estado (
Envio de pacote (
Barreira (
Barrier )
Assncrona
Entrada de pacotes (
no switch.
Remoo de uxo (
um uxo removido da tabela. Seja por Idle Timeout, Hard Timeout ou por uma
mensagem de modicao da tabela de uxos que delete a entrada em questo;
O CANAL SEGURO
4.3
Port-Status )
Estado da porta (
28
Erro (
Simtrica
Hello
estabelecida;
Echo
tncia de conectividade;
Vendor
funcionalidades adicionais;
No estabelecimento de uma comunicao OpenFlow, cada um dos lados (controlador e
switch) devem enviar imediatamente uma mensagem
Hello
(OFPT_HELLO), contendo a
mais alta verso do protocolo OpenFlow suportada pelo dispositivo. Ao receber a mensagem,
o dispositivo deve escolher a menor verso do OpenFlow entre a que foi enviada e recebida.
Se as verses forem compatveis, a comunicao tem continuidade. Caso no sejam, uma
mensagem de erro gerada (OFPT_ERROR) e a conexo encerrada.
interessante informar tambm que, caso haja alguma perda de conexo entre o switch
e o controlador, o switch tentar se conectar ao controlador back-up, caso exista. Caso essa
conexo tambm falhe, o switch entrar em modo de emergncia, modo esse que utilizar
apenas as entradas na tabela de uxos marcadas com um bit de emergncia e todas as outras
entradas sero deletadas.
Para modicar as tabelas de uxos dos switches, o controlador poder gerar cinco tipos
de mensagens diferentes. A Figura 4.6 ilustra esses tipos:
Fonte: Foundation
MODIFY
ADD
(2009)
idle_timeout
ou
OUTRAS VERSES
4.4
hard_timeout
idle_timeout
29
segundos
ser apagada.
Fonte: Foundation
(2011a)
OUTRAS VERSES
4.4
30
Figura 4.8: Fluxograma detalhando o uxo de pacotes atravs do switch OpenFlow 1.1
Fonte: Foundation
(2011a)
Logo, um uxo de pacotes ao entrar no switch OpenFlow, poder passar por vrias
tabelas de uxos, para que diversas aes diferentes sejam realizadas.
A tabela de grupo um tipo especial de tabela projetada para executar aes que sejam
comuns para diversos uxos.
Metadata
MPLS label e MPLS
Alm disso, na verso 1.1.0 , trs novos campos de cabealho foram includos:
(pode ser usada para passar informaes entre as tabelas no switch),
trac class.
Lara
et al.
(2014).
OUTRAS VERSES
4.4
31
medies (
simples operaes de QoS, como limitao de taxas de transmisso e pode ser combinada
com as las por porta para criar polticas de QoS mais complexas. Alm disso, a verso
1.3 permite ao switch criar conexes auxiliares para o controlador, ajudando a melhorar o
desempenho de processamento do switch, explorando o paralelismo presente na maioria dos
switches Foundation (2012a).
Eviction
Vacancy events
uxos quem cheias, j que as mesmas tem capacidades nitas. Nas especicaes anteriores
quando uma tabela de uxos enchia, novos uxos no eram inseridos nas tabelas e uma
mensagem de erro era enviada para o controlador. Entretanto, atingir tal situao era problemtico e poderia causar interrupes no servio. O
Eviction
permite ao switch apagar automaticamente as entradas nas tabelas de uxos que tenham
menor importncia. J o
Vacancy events
ao ser atingido, faz o switch enviar mensagens de alerta para o controlador. Isso permite
que o controlador possa reagir com antecedncia, evitando que as tabelas de uxos quem
cheias Foundation (2012b).
As subsees acima deram apenas uma viso global sobre as caractersticas das verses do OpenFlow posteriores 1.0.0. Maiores detalhes e outras caractersticas podem ser
encontradas nas especicaes tcnicas, citadas na bibliograa.
POX
4.5
32
4.5 POX
Como visto anteriormente, o controlador parte fundamental nas redes denidas por software, j que sero os mesmos que iro denir a lgica de encaminhamento atravs das regras
que iro congurar nos switches OpenFlow. Atualmente, existem alguns disponveis para o
uso, como o NOX (Gude
Maestro (Cai
et al. ,
et al. ,
Fonte: Nunes
et al.
(2014)
O controlador utilizado nesse trabalho foi o POX. O mesmo derivado do NOX clssico,
um dos primeiros controladores OpenFlow. O POX apresenta como vantagens o fato de ser
implementado em Python, sendo ideal para o ambiente acadmico. Alm disso, o mesmo
apresenta diversos componentes reusveis e bibliotecas interessantes como as seguintes:
para
up
openow.spanning_tree: Esse componente utiliza o discovery para contruir uma viso da topologia da rede e constri uma
spanning tree
Event ;
threads e timers ;
Captulo 5
Mininet
O ambiente utilizado para o desenvolvimento da aplicao e realizao dos testes foi o
Mininet. Este se trata de um emulador de redes, desenvolvido por pesquisadores da Universidade de Stanford nos Estados Unidos, com o objetivo de apoiar pesquisas colaborativas
permitindo prottipos autnomos de redes denidas por software, para que qualquer pessoa
et al. (2010).
O Mininet um emulador do tipo CBE (Container-Based Emulation ) que emprega a vir-
tualizao a nvel de processo, uma forma mais leve de virtualizao onde muitos recursos do
sistema so compartilhados. Compartilhando recursos como tabela de paginao, estruturas
de dados do
kernel
que outras que realizam uma emulao completa, ou seja, usando uma mquina virtual para
cada dispositivo da rede Heller (2013).
Na Imagem 5.1 apresentada uma topologia simples que servir de base para as Imagens
5.2 e 5.3. Nessas duas ltimas as diferenas citadas acima, entre CBE e a virtualizao
completa, podem ser visualizadas.
33
5.0
34
Links: Um par Ethernet virtual atua como um cabo conectando duas interfaces virtuais.
Pacotes enviados atravs de uma interface so entregues na outra e cada interface se
comporta como uma interface Ethernet completa e funcional para todo o sistema e
aplicao.
Host: simplesmente um processo do shell movido para o seu prprio espao de nome
da rede, ou seja, cada host apresenta uma instncia da interface de rede independente.
Cada dispositivo apresenta uma ou mais interfaces virtuais e um
5.0
35
Lantz
et al.
(2010).
Para controlar e gerenciar todos os dispositivos emulados, o Mininet fornece uma CLI
Command Line Interface ) conhecedora de toda a rede, ou seja, atravs de um nico console,
pode-se controlar todos os dispositivos emulados. Outra grande vantagem desse emulador
a facilidade de criao de topologias customizadas atravs de uma API (
Application Pro-
Mininet, incluindo uma comparao entre os tipos de plataformas para pesquisas em redes
de computadores mais comuns, os simuladores, testbeds e emuladores.
Em Handigol
et al.
Captulo 6
A aplicao desenvolvida
Com a tecnologia de redes de computadores atual, torna-se invivel o teste de novos
protocolos em redes que estejam em produo, j que as mesmas foram implementadas com
hardwares especcos, que no permitem uma reprogramao.
Conforme visto nos captulos anteriores, com as redes denidas por software, essa limitao j no mais existir. Equipamentos especcos se tornam genricos e a gura do
controlador aparece para que possa existir uma rede programvel e para que mudanas na
forma de encaminhar os pacotes possam ser realizadas rapidamente.
A aplicao desenvolvida busca mostrar essa facilidade presente nas redes denidas por
software.
A mesma foi desenvolvida para alterar o roteamento de um uxo pr-determinado,
quando o uso da largura de banda do caminho inicial estiver alto. Para tal, foram utilizados conceitos do algoritmo de Dijkstra para o clculo dos caminhos e mdulos presentes
no POX, como ser visto adiante.
36
EXECUTANDO A APLICAO
6.1
37
Conforme a descoberta vai sendo feita, um peso atribuido aos enlaces. Esse peso pode ser
interpretado como o
delay
que quanto maior o valor, pior o enlace. Para a emulao realizada, se utilizou um gerador
de nmeros aleatrios para a denio dos pesos de cada enlace. Aps a topologia ser salva,
com a descoberta de todos os switches e a atribuio dos pesos, o algoritmo de Dijkstra ,
ento, executado em um codigo complementar.
Esse cdigo complementar (Anexo 10.1), utiliza conceitos do algoritmo de Dijkstra para
realizar o clculo da melhor e da segunda melhor rotas entre os switches OpenFlow. O cdigo
recebe como parmetros o n origem e a topologia e retorna duas listas, uma contendo o
menor custo e a outra contendo o segundo menor custo para se chegar aos outros ns.
A Figura 6.2 apresenta um uxograma representando essa primeira etapa:
Como pode ser visto no uxograma acima, toda vez que ocorrer um evento de link, ou
seja, quando um link for descoberto ou quando um link car
seja, o controlador informa ao switch apenas qual deve ser a ao a ser tomada para um
pacote, no havendo modicao da tabela de uxos do switch. A Figura 6.3, mostra os
Packet-In
Packet-Out
do controlador:
EXECUTANDO A APLICAO
6.1
Flow-Mod
38
que ir
inserir uma entrada na tabela de uxos do switch, como pode ser visto na Figura 6.4.
Para cada par de switches origem e destino, a aplicao monitora a taxa de transmisso,
fazendo requisies peridicas de estatsticas do uso da interface. A quantidade de bytes
transmitidos pela porta conectada ao prximo switch (prximo switch de acordo com o
melhor caminho calculado) salva em uma varivel e ser comparada com a quantidade da
coleta anterior.
Como na topologia denida para o teste (Anexo 9.1) os links foram denidos com uma
largura de banda de 100 Mbps, feito um clculo com a diferena de bytes transmitidos
em duas coletas e verica-se se a quantidade de bits transmitidos por segundo menor que
um determinado limiar. Esse limiar foi determinado nos testes como 70 Mbps. Caso seja,
todos os uxos destinados ao mesmo IP de destino passam pelo melhor caminho. Caso a
quantidade de bits por segundo seja maior que 70 Mpbs, os uxos que apresentem porta
UDP igual a 2000 so chaveados para a segunda melhor rota.
EXECUTANDO A APLICAO
6.1
39
Como pode ser visto no uxograma da Figura 6.6, com o objetivo de evitar que quem
ocorrendo mudanas de rotas a todo momento, foi implementada uma histerese. Assim,
existe um contador que salva o nmero de ocorrncias do evento. Para mudar para o segundo
caminho, o mesmo deve ser maior ou igual a 2 (10 segundos). Para que o uxo volte para
o melhor caminho, o uso da banda do melhor caminho deve car abaixo de 70Mbps por
no mnimo o tempo que cou acima desse limiar. Vale ressaltar que o valor mximo desse
contador 5 (25 segundos).
O incremento desse contador, assim como outros detalhes menores, no foi indicado no
uxograma
A aplicao mostra como o controlador pode agir proativamente com o objetivo de evitar
sobrecarga do link e descartes ou at mesmo para a implementao de polticas de QoS de
forma facilitada. Vale ressaltar, que a escolha da porta UDP 2000 foi feita de forma aleatria
e, com facilidade, o cdigo pode ser generalizado para quaisquer portas ou at mesmo para
que altere a rota levando em considerao quaisquer outros campos de cabealho denidos
em 4.2.
O cdigo completo desenvolvido pode ser analisado no Anexo 11.1.
1 Em
um primeiro momento, optou-se pela captura da quantidade de pacotes descartados pela interface.
Quando o mesmo chegasse a um limiar estabelecido, ocorreria o chaveamento do uxo para o segundo melhor
caminho. Entretanto mesmo aps estressar o link, o contador dos pacotes descartados no foi incrementado.
Acreditando ser uma limitao do Mininet, optou-se ento pela anlise da utilizao da largura de banda
Captulo 7
Simulao e resultados
Para a realizao dos testes, foi utilizada uma topologia redundante
Como a proposta dessa monograa apresentar as redes denidas por software, mostrando a facilidade com que aplicaes podem ser desenvolvidas, uma topologia simples foi
escolhida para a realizao dos testes.
Nela, foram congurados trs hosts e cinco switches. Todos os enlaces foram denidos
com as mesmas caractersticas, com o objetivo de facilitar os testes e a anlise dos resultados.
As principais caractersticas so:
1 Descrio
40
METODOLOGIA
7.1
41
7.1 Metodologia
Na topologia congurada, o host 3 foi denido como o servidor, e os hosts 1 e 2 como
clientes. Logo, os hosts 1 e 2 geraro trfegos para o host 3. Deniu-se que os pacotes enviados
pelo host 1 seriam pacotes UDP com a porta de destino 1000. J o host 2 envia pacotes
UDP, usando como porta de destino a 2000. Alm disso, ambas comunicaes tentaro
utilizar 100% da largura de banda e ambos os uxos so gerados por 180 segundos, ao
mesmo tempo, como pode ser visto nas Figuras 7.4 e 7.5.
Primeiramente, foram realizados os testes com os dois hosts clientes enviando uxos por
caminhos diferentes, ou seja, o primeiro host enviando pelo melhor caminho e o segundo host
enviando pelo segundo melhor caminho. O objetivo desse procedimento conhecer os erros
intrnsecos de cada caminho, para que se tenha uma base de comparao para os prximos
procedimentos.
Cada um dos procedimentos foi repetido seis vezes, sendo cada um deles executados aps
a inicializao do Mininet e do controlador.
METODOLOGIA
7.1
42
METODOLOGIA
7.1
43
Figura 7.6: Percentual da perda de pacotes com os uxos sendo enviados sempre por caminhos
diferentes.
Figura 7.7: Teste com dois hosts enviando por caminhos diferentes.
Em seguida, foram realizados os testes com ambos os uxos sendo enviados pelo melhor
caminho. O objetivo vericar qual a porcentagem dos pacotes perdidos, sem utilizar o
chaveamento para o segundo melhor caminho.
O grco com o percentual de perda dos pacotes, nos seis testes realizados, apresentado
na Figura 7.8.
Na Figura 7.9 segue resposta do servidor aps o primeiro teste.
METODOLOGIA
7.1
44
Figura 7.8: Percentual da perda de pacotes com ambos os uxos sendo enviados sempre pelo melhor
caminho.
Figura 7.9: Teste com dois hosts enviando pelo mesmo caminho.
Por m, realiza-se o teste com o chaveamento dinmico ativado. A congurao do caminho alternativo efetuada caso a utilizao da largura de banda que acima de 70Mbps.
O resultado pode ser visto na Figura 7.10.
A Figura 7.11 apresenta a resposta do servidor aps o primeiro teste.
Na Figura 7.12, segue a tabela de uxos do switch 1, mostrando a modicao da interface
de sada para os uxos que tenham porta UDP igual a 2000.
METODOLOGIA
7.1
45
Figura 7.10: Percentual da perda dos pacotes, realizando a mudana de rota dinamicamente.
METODOLOGIA
7.1
46
7.1
METODOLOGIA
47
Captulo 8
Concluses
Esse trabalho teve como objetivo introduzir um paradigma diferente da atual implementao de redes de computadores. Modelo esse que pode vir a ser o predominante em poucos
anos.
Buscando ajudar na compreensso das redes denidas por software, no Captulo 2, conceitos bsicos de redes de computadores foram explanados. Conceitos como modelo em camadas, encaminhamento, roteamento e classicao de pacotes, serviram como uma base
para os conceitos seguintes.
O Captulo 3 dene as redes denidas por software, modelo que prope a separao dos
planos de controle e dados, planos esses encontrados nos dispositivos de redes como switches
e roteadores. Com sua separao, possivel ter um controle total da rede. J no so mais
necessrios hardwares especcos, mas hardwares genricos podem ser utilizados e, atravs
do controlador, podem ser programados.
O Captulo 4 apresenta o OpenFlow, implementao mais difundida das redes denidas
por software. Um enfoque maior dado a verso 1.0.0, a verso mais utilizada do OpenFlow.
Entretanto, as diferenas entre as verses mais novas como as verses 1.1, 1.2, 1.3 e 1.4 so
citadas. Nesse captulo, apresentado tambm o POX, controlador implementado em Python
e que foi utilizado nesse trabalho.
No Captulo 5, o Mininet apresentado. O mesmo um emulador de redes desenvolvido
na universidade de Stanford, cuja principal vantagem o fato de empregar uma forma mais
leve de virtualizao, onde muitos recursos do sistema so compartilhados.
Nos Captulos seguintes, a aplicao nalmente descrita e seus resultados mostrados.
Como foi visto, uma topologia simples com cinco switches e trs hosts foi utilizada. Fluxos
so gerados por dois hosts clientes para o servidor e de acordo com a utilizao da largura
de banda, o caminho de um desses uxos pode ser alterado.
Como visto, foram realizados trs procedimentos. No primeiro, foram realizadas uma srie
de testes com o objetivo de descobrir a perda intrnseca dos caminhos. Ao fazer isso, encontrase uma base, com a qual podero ser comparados os resultados dos prximos procedimentos.
No segundo procedimento, testes so realizados com os dois uxos sendo enviados pelo
48
8.0
49
mesmo caminho. O objetivo vericar a quantidade de pacotes que esto sendo perdidos
devido utilizao do mesmo link.
No terceiro procedimento, os testes realizados utilizam a aplicao para realizar o chaveamento de um uxo especco (no caso, o uxo cuja porta UDP de destino seja 2000).
O mesmo passa a utilizar o segundo melhor caminho calculado pelo algoritmo de Dijkstra,
caso a utilizao do link principal seja maior ou igual a 70Mbps.
No nal do captulo, um grco comparativo dos trs procedimentos apresentado. Nele,
percebe-se que a utilizao do algoritmo que realiza a troca de rotas dinamicamente reduziu
em torne de 5% a perda de pacotes.
Logo, a prova de conceito foi realizada com sucesso. Os resultados caram dentro do esperado e da proposta inicial. Ainda, o cdigo da aplicao futuramente pode ser modicado,
buscando deix-lo mais genrico ou adequando-o a uma outra situao especca.
Captulo 9
Apndice A
9.1 Cdigo para criao da topologia
#T o p o l o g i a 5 s w i t c h e s 3 h o s t s
s1
s2
s3
s4
s5
=
=
=
=
=
self
self
self
self
self
. addSwitch (
. addSwitch (
. addSwitch (
. addSwitch (
. addSwitch (
' s1 '
' s2 '
' s3 '
' s4 '
' s5 '
)
)
)
)
)
#Adicionando l i n k s
50
9.1
51
Captulo 10
Apndice B
10.1 Cdigo para calcular as rotas
# Executa a l g o r i t m o de D i j a k s t r a , c a l c u l a n d o o melhor e o segundo melhor
caminho ;
for no in nos :
v i z i n h o s [ no ] = [ ]
for i in t o p o l o g i a :
i f ( no == i [ 0 ] ) :
v i z i n h o s [ no ] . append ( [ i [ 2 ] , i [ 1 ] ] )
i f ( no == i [ 2 ] ) :
v i z i n h o s [ no ] . append ( [ i [ 0 ] , i [ 1 ] ] )
i f ( no != no_origem ) :
d i s t a n c i a s [ no ] =[ 1, 1, 0 ]
52
10.1
i f ( no_segundo == i [ 2 ] ) :
vizinhos_segundo [ no_segundo ] . append ( [ i [ 0 ] , i [ 1 ] ] )
i f ( no_segundo != no_origem ) :
d i s t a n c i a s _ s e g u n d o [ no_segundo ] =[ 1, 1, 0 ]
for j in v i z i n h o s [ no_origem ] :
distancias [ j [ 0 ] ] = j
d i s t a n c i a s [ j [ 0 ] ] . append ( 0 )
while v i s i t a d o == 0 :
peso_minimo = 1
no_custo_minimo = None
visitado = 1
for j in d i s t a n c i a s :
i f ( d i s t a n c i a s [ j ] [ 2 ] == 0) :
i f ( d i s t a n c i a s [ j ] [ 1 ] != 1) :
i f ( ( peso_minimo == 1) or ( peso_minimo > d i s t a n c i a s [ j ] [ 1 ] ) ) :
peso_minimo = d i s t a n c i a s [ j ] [ 1 ]
no_custo_minimo = j
visitado = 0
i f v i s i t a d o == 0 :
for v i z i n h o in v i z i n h o s [ no_custo_minimo ] :
i f v i z i n h o [ 0 ] != no_origem :
i f ( d i s t a n c i a s [ no_custo_minimo ] [ 1 ] + v i z i n h o [ 1 ] <= d i s t a n c i a s [
v i z i n h o [ 0 ] ] [ 1 ] ) or ( d i s t a n c i a s [ v i z i n h o [ 0 ] ] [ 1 ] == 1) :
d i s t a n c i a s [ v i z i n h o [ 0 ] ] [ 0 ] = d i s t a n c i a s [ no_custo_minimo ] [ 0 ]
d i s t a n c i a s [ v i z i n h o [ 0 ] ] [ 1 ] = d i s t a n c i a s [ no_custo_minimo ] [ 1 ] +
vizinho [ 1 ]
d i s t a n c i a s [ no_custo_minimo ] [ 2 ] = 1
vi si tad o_ se gun do = 0
while vi si tad o_ se gun do == 0 :
53
10.1
peso_minimo_segundo = 1
no_custo_minimo_segundo = None
vi si ta do_ se gun do = 1
for j in d i s t a n c i a s _ s e g u n d o :
i f ( d i s t a n c i a s _ s e g u n d o [ j ] [ 2 ] == 0) :
i f ( d i s t a n c i a s _ s e g u n d o [ j ] [ 1 ] != 1) :
i f ( ( peso_minimo_segundo == 1) or ( peso_minimo_segundo >
distancias_segundo [ j ] [ 1 ] ) ) :
peso_minimo_segundo = d i s t a n c i a s _ s e g u n d o [ j ] [ 1 ]
no_custo_minimo_segundo = j
vi si tad o_ se gun do = 0
i f vi si tad o_ se gun do == 0 :
for v i z i n h o in vizinhos_segundo [ no_custo_minimo_segundo ] :
i f v i z i n h o [ 0 ] != no_origem :
soma_distancias = d i s t a n c i a s _ s e g u n d o [ no_custo_minimo_segundo ] [ 1 ]
+ vizinho [ 1 ]
i f ( ( soma_distancias < d i s t a n c i a s _ s e g u n d o [ v i z i n h o [ 0 ] ] [ 1 ] ) or (
d i s t a n c i a s _ s e g u n d o [ v i z i n h o [ 0 ] ] [ 1 ] == 1) ) :
i f ( ( soma_distancias > d i s t a n c i a s [ v i z i n h o [ 0 ] ] [ 1 ] or
d i s t a n c i a s _ s e g u n d o [ no_custo_minimo_segundo ] [ 0 ] !=
d i s t a n c i a s [ no_custo_minimo_segundo ] [ 0 ] ) ) :
distancias_segundo [ vizinho [ 0 ] ] [ 0 ] = distancias_segundo [
no_custo_minimo_segundo ] [ 0 ]
d i s t a n c i a s _ s e g u n d o [ v i z i n h o [ 0 ] ] [ 1 ] = soma_distancias
i f ( ( d i s t a n c i a s _ s e g u n d o [ v i z i n h o [ 0 ] ] [ 0 ] == d i s t a n c i a s [ v i z i n h o
[ 0 ] ] [ 0 ] ) and ( d i s t a n c i a s _ s e g u n d o [ v i z i n h o [ 0 ] ] [ 1 ] == d i s t a n c i a s
[ vizinho [ 0 ] ] [ 1 ] ) ) :
i f ( d i s t a n c i a s [ no_custo_minimo_segundo ] [ 0 ] !=
distancias_segundo [ vizinho [ 0 ] ] [ 0 ] ) :
d i s t a n c i a s _ s e g u n d o [ v i z i n h o [ 0 ] ] [ 0 ] = no_custo_minimo_segundo
distancias_segundo [ vizinho [ 0 ] ] [ 1 ] = d i s t a n c i a s [
no_custo_minimo_segundo ] [ 1 ] + v i z i n h o [ 1 ]
else :
d i s t a n c i a s _ s e g u n d o [ v i z i n h o [ 0 ] ] [ 0 ] = no_custo_minimo_segundo
distancias_segundo [ vizinho [ 0 ] ] [ 1 ] = distancias_segundo [
no_custo_minimo_segundo ] [ 1 ] + v i z i n h o [ 1 ]
d i s t a n c i a s _ s e g u n d o [ no_custo_minimo_segundo ] [ 2 ] = 1
54
10.1
try :
for chaves in vizinhos_segundo . keys ( ) :
i f vizinhos_segundo [ chaves ] [ 0 ] != no_origem :
i f len ( vizinhos_segundo [ chaves ] ) == 1 and d i s t a n c i a s _ s e g u n d o [
chaves ] [ 0 ] == 1:
d i s t a n c i a s _ s e g u n d o [ chaves ] [ 1 ] = d i s t a n c i a s _ s e g u n d o [
vizinhos_segundo [ chaves ] [ 0 ] [ 0 ] ] [ 1 ] + vizinhos_segundo [ chaves
][0][1]
d i s t a n c i a s _ s e g u n d o [ chaves ] [ 0 ] = d i s t a n c i a s _ s e g u n d o [
vizinhos_segundo [ chaves ] [ 0 ] [ 0 ] ] [ 0 ]
d i s t a n c i a s _ s e g u n d o [ chaves ] [ 2 ] = 1
except Exception :
pass
return d i s t a n c i a s , d i s t a n c i a s _ s e g u n d o
#C a l c u l a q u a n t o s nos ha na t o p o l o g i a ;
rotas
55
Captulo 11
Apndice C
11.1 Cdigo da aplicao
from pox . c o r e import c o r e
from pox . l i b . r e v e n t import
import pox . openflow . libopenflow_01 as o f
import pox . openflow . d i s c o v e r y
import pox . openflow . spanning_tree
from random import randrange
import djakstra_v2
from time import s l e e p
from pox . l i b . a d d r e s s e s import IPAddr
from pox . l i b . r e c o c o import Timer
from pox . openflow . of_json import
l o g=c o r e . getLogger ( )
c l a s s switch_multi ( object ) :
mac_map={}
d e l a y _ l i n k s ={}
def __init__ ( s e l f ) :
def s t a r t u p ( ) :
c o r e . openflow . a d d L i s t e n e r s ( s e l f , p r i o r i t y =0)
c o r e . openflow_discovery . a d d L i s t e n e r s ( s e l f )
#L i s t e n e r para e v e n t o s e s t a t i s t i c o s
56
CDIGO DA APLICAO
11.1
self
self
self
self
self
self
self
self
. mac_map = {}
. topologia = [ ]
. d e l a y _ l i n k s = {}
. p o r t a s = {}
. dij_1_melhor = [ ]
. dij_2_melhor = [ ]
. dij_1_segundo = [ ]
. dij_2_segundo = [ ]
s e l f . count = 0
s e l f . link_count = 0
s e l f . tx_1 = 0
s e l f . tx_2 = 0
s e l f . diferenca = 0
s e l f .LINK_OK = True
s e l f .JA_ENTROU = F a l s e
=
=
=
=
57
CDIGO DA APLICAO
11.1
i f s e l f . count >= 1 2 :
s e l f . dij_1_melhor ,
s e l f . topologia )
s e l f . dij_2_melhor ,
s e l f . topologia )
s e l f . dij_3_melhor ,
s e l f . topologia )
s e l f . dij_4_melhor ,
s e l f . topologia )
s e l f . dij_5_melhor ,
s e l f . topologia )
58
CDIGO DA APLICAO
11.1
s e l f . c o n n e c t i o n s . add ( event . c o n n e c t i o n )
def h a n d l e _ p o r t s t a t s _ r e c e i v e d ( s e l f , event ) :
segundo_switch = s e l f . dij_1_melhor [ 5 ] [ 0 ]
chave = str ( "1" ) + str ( segundo_switch )
for i in event . s t a t s :
print "CHAVE " , chave
i f i . port_no == s e l f . p o r t a s . g e t ( chave ) :
s e l f . tx_1 = i . tx_bytes
i f ( s e l f . tx_2 != 0) :
s e l f . d i f e r e n c a = ( ( s e l f . tx_1 s e l f . tx_2 ) 8) /5
s e l f . tx_2 = i . tx_bytes
s t a t s = f l o w _ s t a t s _ t o _ l i s t ( event . s t a t s )
def _timer_func ( s e l f ) :
print " Entrou timer_func "
c o r e . openflow . getConnection ( 1 ) . send ( o f . o f p _ s t a t s _ r e q u e s t ( body=o f .
ofp_flow_stats_request ( ) ) )
c o r e . openflow . getConnection ( 1 ) . send ( o f . o f p _ s t a t s _ r e q u e s t ( body=o f .
ofp_port_stats_request ( ) ) )
def l i n k _ t e s t ( s e l f ) :
#A cada 5 s e g u n d o s h a v e r a v e r i f i c a c a o do l i n k . O s e l f .LINK_OK comeca
como True . Se a d i f e r e n c a apos 10 s e g u n d o s f i c a r acima de 70000000
59
CDIGO DA APLICAO
11.1
i f s e l f . link_count >= 2 :
s e l f .LINK_OK = F a l s e
i f s e l f .JA_ENTROU == F a l s e :
msg = o f . ofp_flow_mod ( )
msg . match . dl_type = 0 x800
msg . match . nw_proto = 17
msg . match . nw_dst = IPAddr ( " 1 0 . 0 . 0 . 3 " )
msg . match . tp_dst = 2000
msg . i d l e _ t i m e o u t = 10
msg . hard_timeout = 60
prox_salto2 = s e l f . dij_1_segundo [ 5 ] [ 0 ]
chave2 = str ( 1 )+str ( prox_salto2 )
porta_saida2 = s e l f . p o r t a s . g e t ( chave2 )
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = porta_saida2 ) )
c o r e . openflow . getConnection ( 1 ) . send ( msg )
60
CDIGO DA APLICAO
11.1
i f event . dpid == 1 :
prox_salto = s e l f . dij_1_melhor [ 5 ] [ 0 ]
chave = str ( 1 )+str ( prox_salto )
porta_saida = s e l f . p o r t a s . g e t ( chave )
e l i f event . dpid == 2 :
prox_salto = s e l f . dij_2_melhor [ 5 ] [ 0 ]
chave = str ( 2 )+str ( prox_salto )
porta_saida = s e l f . p o r t a s . g e t ( chave )
e l i f event . dpid == 3 :
prox_salto = s e l f . dij_3_melhor [ 5 ] [ 0 ]
chave = str ( 3 )+str ( prox_salto )
porta_saida = s e l f . p o r t a s . g e t ( chave )
e l i f event . dpid == 4 :
prox_salto = s e l f . dij_4_melhor [ 5 ] [ 0 ]
chave = str ( 4 )+str ( prox_salto )
porta_saida = s e l f . p o r t a s . g e t ( chave )
#ARP
i f event . dpid == 5 :
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = 1) )
else :
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = porta_saida ) )
event . c o n n e c t i o n . send ( msg )
else :
i f s e l f .LINK_OK:
msg = o f . ofp_flow_mod ( )
msg . match . dl_type = 0 x800
msg . match . nw_proto = 17
msg . match . nw_dst = IPAddr ( " 1 0 . 0 . 0 . 3 " )
msg . match . tp_dst = PORTA_DESTINO
msg . i d l e _ t i m e o u t = 10
61
CDIGO DA APLICAO
11.1
msg . hard_timeout = 60
msg . data = event . ofp
msg . b u f f e r _ i d = event . ofp . b u f f e r _ i d
i f event . dpid == 5 :
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = 1) )
else :
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = porta_saida ) )
event . c o n n e c t i o n . send ( msg )
else :
msg = o f . ofp_flow_mod ( )
msg . match . dl_type = 0 x800
msg . match . nw_proto = 17
msg . match . nw_dst = IPAddr ( " 1 0 . 0 . 0 . 3 " )
msg . match . tp_dst = PORTA_DESTINO
msg . i d l e _ t i m e o u t = 10
msg . hard_timeout = 60
msg . data = event . ofp
msg . b u f f e r _ i d = event . ofp . b u f f e r _ i d
i f event . dpid == 5 :
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = 1) )
else :
i f PORTA_DESTINO != 2 0 0 0 :
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = porta_saida ) )
else :
i f event . dpid == 1 :
prox_salto2 = s e l f . dij_1_segundo [ 5 ] [ 0 ]
chave2 = str ( 1 )+str ( prox_salto2 )
porta_saida2 = s e l f . p o r t a s . g e t ( chave2 )
e l i f event . dpid == 2 :
chave2 = str ( 2 )+str ( 5 )
porta_saida2 = s e l f . p o r t a s . g e t ( chave2 )
e l i f event . dpid == 3 :
chave2 = str ( 3 )+str ( 5 )
porta_saida2 = s e l f . p o r t a s . g e t ( chave2 )
62
CDIGO DA APLICAO
11.1
e l i f event . dpid == 4 :
chave2 = str ( 4 )+str ( 5 )
porta_saida2 = s e l f . p o r t a s . g e t ( chave2 )
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = porta_saida2 )
)
event . c o n n e c t i o n . send ( msg )
i f event . dpid == 2 :
prox_salto = s e l f . dij_2_melhor [ 1 ] [ 0 ]
chave = str ( 2 )+str ( prox_salto )
porta_saida = s e l f . p o r t a s . g e t ( chave )
e l i f event . dpid == 3 :
prox_salto = s e l f . dij_3_melhor [ 1 ] [ 0 ]
chave = str ( 3 )+str ( prox_salto )
porta_saida = s e l f . p o r t a s . g e t ( chave )
e l i f event . dpid == 4 :
prox_salto = s e l f . dij_4_melhor [ 1 ] [ 0 ]
chave = str ( 4 )+str ( prox_salto )
porta_saida = s e l f . p o r t a s . g e t ( chave )
e l i f event . dpid == 5 :
prox_salto = s e l f . dij_5_melhor [ 1 ] [ 0 ]
chave = str ( 5 )+str ( prox_salto )
porta_saida = s e l f . p o r t a s . g e t ( chave )
#ARP
63
CDIGO DA APLICAO
11.1
i f event . dpid == 1 :
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = porta ) )
else :
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = porta_saida ) )
else :
i f s e l f .LINK_OK:
msg = o f . ofp_flow_mod ( )
msg . match . dl_type = 0 x800
msg . match . nw_dst = IPAddr (IP_DESTINO)
msg . i d l e _ t i m e o u t = 10
msg . hard_timeout = 30
msg . data = event . ofp
msg . b u f f e r _ i d = event . ofp . b u f f e r _ i d
i f event . dpid == 1 :
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = porta ) )
else :
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = porta_saida ) )
else :
msg = o f . ofp_flow_mod ( )
msg . match . dl_type = 0 x800
msg . match . nw_dst = IPAddr (IP_DESTINO)
msg . match . nw_proto = 17
msg . match . tp_src = PORTA_ORIGEM
msg . i d l e _ t i m e o u t = 10
msg . hard_timeout = 30
msg . data = event . ofp
msg . b u f f e r _ i d = event . ofp . b u f f e r _ i d
i f event . dpid == 1 :
64
CDIGO DA APLICAO
11.1
else :
i f (PORTA_ORIGEM != 2000) :
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = porta_saida ) )
else :
i f event . dpid == 2 :
chave2 = str ( 2 )+str ( 1 )
porta_saida2 = s e l f . p o r t a s . g e t ( chave2 )
e l i f event . dpid == 3 :
chave2 = str ( 3 )+str ( 1 )
porta_saida2 = s e l f . p o r t a s . g e t ( chave2 )
e l i f event . dpid == 4 :
chave2 = str ( 4 )+str ( 1 )
porta_saida2 = s e l f . p o r t a s . g e t ( chave2 )
e l i f event . dpid == 5 :
prox_salto2 = s e l f . dij_5_segundo [ 1 ] [ 0 ]
chave2 = str ( 5 )+str ( prox_salto2 )
porta_saida2 = s e l f . p o r t a s . g e t ( chave2 )
msg . a c t i o n s . append ( o f . ofp_action_output ( p o r t = porta_saida2 )
)
event . c o n n e c t i o n . send ( msg )
def launch ( ) :
c o r e . r e g i s t e r N e w ( switch_multi )
Cdigo 11.1: Cdigo app.py em Python, aplicao que realiza a troca dinmica das rotas
65
Referncias bibliogrcas
Cai et al. (2010) Zheng Cai, Alan L. Cox e T.S. Eugene Ng.
Comer (2013)
Douglas E. Comer.
and Architecture.
Adrian Farrel.
Filho (2013) Joo Eriberto Mota Filho. Anlise de trfego em redes TCP/IP.
Novatec, 1
Foundation (2009)
Foundation (2011a)
Foundation (2011b)
Foundation (2012a)
Foundation (2012b)
Google (2012)
Shenker, Justin Pettit e Nick McKeown. Nox: Towards an operating system for networks.
Citado na(s) pg(s).: 32
66
REFERNCIAS BIBLIOGRFICAS
11.1
67
Lantz e Nick McKeown. Reproducible network experiments using container-based emulation. Citado na(s) pg(s).: 35
Heller (2013)
tion.
Brandon Heller.
http://archive.openow.org/wp/learnmore/ () http://archive.openow.org/wp/learnmore/.
Documentation. http://archive.openow.org/wp/learnmore/. ltimo acesso em Maio de
2014. Citado na(s) pg(s).:
https://openow.stanford.edu/display/ONL/POX+Wiki
https://openow.stanford.edu/display/ONL/POX+Wiki.
//openow.stanford.edu/display/ONL/POX+Wiki.
()
Pox
wiki.
https:
http://trema.github.io/trema/ ()
http://trema.github.io/trema/.
Trema.
http://
http://www.noxrepo.org/pox/about pox/ ()
http://www.noxrepo.org/pox/about
iperf.fr ()
na(s) pg(s).: 40
Redes de Computadores e a
pg(s).:
Lara et al. (2014) Adrian Lara, Anisha Kolasani e Byrav Ramamurthy. Network innovation
using openow: A survey. Citado na(s) pg(s).: 22, 30
20
Scott Shenker, Jonathan Turner, Hari Balakrishnan e Jennifer Rexford. Openow: Enabling innovation in campus networks. Citado na(s) pg(s).: 2, 23
mininet.org () mininet.org.
Nunes et al. (2014) Bruno Astuto A. Nunes, Marc Mendona, Xuan-Nam Nguyen, Katia
Obraczka e Thierry Turletti. A survey of software-dened networking: Past, present ad
future of programmable networks. Citado na(s) pg(s).: 17, 19, 32
Opennetworking ()
Opennetworking.
Documentation.
https://www.opennetworking.
REFERNCIAS BIBLIOGRFICAS
11.1
68
Wikipdia ()
Wikipdia.
Software-dened networking.
http://en.wikipedia.org/wiki/
Fundamentals of sdn