• Nenhum resultado encontrado

modelo mais robusto poderá ter em conta factores como a crescente utilização deContent

Delivery Networks (CDNs)e barreiras línguisticas entre POPs em diferentes países como factor de fricção sobre o fluxo de tráfego entre POPs. Nesta dissertação preferimos manter

o modelo simples e considerar a fricção constante. Adaptámos o modelo usado em [8],

considerando as diferentes classes de POPs que introduzimos no capítulo3.

4.2 Matrizes de tráfego distorcidas

Para estudar o impacto de usar uma distribuição de trafégo num dado instante, usando uma matriz de tráfego obtida num instante anterior, e que já não corresponde à matriz de tráfego real, precisamos de usar modelos de distorção de matrizes de tráfego. Usámos distorção proporcional apenas para testes e validação. Os outros modelos de distorção pro- curam reflectir padrões de alteração de tráfego que ocorrem em redes reais. Denotamos a

matriz de tráfego original por D e a matriz de tráfego distorcida por D.

Distorção proporcional

Este modelo distorce a matriz D multiplicando todos os elementos da matriz por um determinado factor. Como o algoritmo que usámos neste trabalho encaminha iterativa- mente proporções fixas da matriz de tráfego (por exemplo, encaminha 1% do tráfego origem-destino em cada iteração), este modelo de distorção não apresenta variações no encaminhamento resultante. Porque este resultado pode ser deduzido formalmente, po- demos usá-lo para confirmar que o algoritmo está a comportar-se de forma expectável. De notar que a ocorrência de uma distorção desta natureza numa rede real é pouco provável.

Distorção aleatória

Este modelo procura simular distorções imprevistas, dentro de um determinado intervalo de distorção. Formalmente, o intervalo de distorção I é um intervalo [1 − l,1 + l], onde l é um factor de distorção. Seja v um número real aleatório pertencente a I, o valor de que

cada elemento de Dé dado por D

x,y= v × Dx,y. Por exemplo, considerando uma matriz

unitária e l = 0.1, Dserá composta por valores aleatórios, que variam entre 0.9 e 1.1. A

variação do tráfego real tem uma natureza altamente imprevisível, e tende a agravar-se quando se considera intervalos de variação de tempo maiores, i.e., se recolhermos matrizes de tráfego de 5 em 5 minutos, o intervalo de distorção deverá ser mais pequeno que no caso de recolhermos matrizes de tráfego de 15 em 15 minutos. Assim, podemos estudar

a qualidade doShort Sighted Routing (SSR) para diferentes padrões de distorção, que

representam diferentes intervalo de tempo, e ao mesmo tempo discutir em que intervalos de tempo é razoável recalcular o encaminhamento óptimo.

CAPÍTULO 4. MATRIZES DE TRÁFEGO Ataque DDoS

Um ataque de distributed denial of service (DDoS) é um tipo de ataque que geralmente não tem especificamente como alvo um backbone, mas que pode comprometer o seu fun- cionamento de forma séria. Este ataque tem como objectivo inutilizar um determinado serviço oferecido por um servidor (ou conjunto de servidores), impossibilitando os utili- zadores de acederem a esse serviço. Tipicamente são usadas botnets para perpetuar este tipo de ataque, onde múltiplos hosts comprometidos são usadas para gerar um gigantesco volume de dados que é enviado para sistema alvo do ataque. Cerca de 70% dos ataques

são menores que 1 Gbps, enquanto que 1% dos ataques são maiores que 20 Gbps [25]. O

maior ataque registado é de aproximadamente 400 Gbps.

Um ataque desde género inunda a rede com um aumento considerável e repentino de tráfego. Para estudarmos o impacto de um ataque DDoS num backbone usámos um modelo simples: consideramos que todos os nós da rede enviam repentinamente mais tráfego para um nó alvo. Seja a o nó alvo do ataque e l um factor de aumento (ou seja,

l > 1). A matriz de deformação A é dado por:

Axy=          l se y = a 1 se y , a (4.1)

Assim, temos que D= D×A, ou por outras palavras, a coluna a da matriz D é multipli-

cada por l. Por l ser parametrizável, podemos estudar o comportamento do short sighted

routing para diferentes dimensões de ataques DDoS.

Como está patente na função 4.1, o aumento do tráfego (dado por l) é igual para

todos os nós. Um modelo mais realista talvez procurasse considerar diferentes factores de aumento l para cada nó, mas isso implicaria que: 1) o tráfego gerado pelos ataques seguisse um padrão bem conhecido que permitisse inferir quais deveriam ser os factores de aumento, o que não é verdade, ou 2) os factores de aumento seriam aleatórios, o que tornariam o modelo bem mais complexo e difícil de estudar. Por outro lado, ao usar um factor de aumento uniforme, podemos considerar que estamos perante um caso degenerativo de um caso com factores aleatórios, onde l toma o valor máximo dos valores gerados aleatoriamente. Por estarmos a estudar a robustez do algoritmo, interessa-nos estudar os piores casos e por isso, consideramos ser preferível usar o modelo mais simples.

Evento flash-crowd

Este modelo de distorção procura reflectir um padrão recorrente e que as operadoras de

backbone devem esperar na suas redes. Um evento flash-crowd é definido por um aumento

inesperado e repentino de tráfego na rede, que tipicamente é desencadeado por um evento no mundo real que leva um número elevado e anormal de utilizadores a aceder num determinado momento a um determinado serviço na Internet. Casos típicos de eventos

flash-crowd são acessos a websites noticiosos aquando de eventos catástróficos e stream de

4.2. MATRIZES DE TRÁFEGO DISTORCIDAS

vídeos de eventos culturais ou desportivos. Em relação ao primeiro caso, estes eventos são imprevisíveis, enquanto que em relação ao segundo caso os eventos são mais espectavéis, o que permite às operadores dos backbones se prepararem. Mesmo considerando eventos de

flash-crowd imprevistos, o aumento do tráfego originado geralmente não é tão repentino

e agressivo em comparação com um ataque DDoS, mas potencialmente podem atingir aumentos totais de tráfego semelhantes.

Nós modelamos este padrão considerando que há um aumento repentino de tráfego de um nó da rede para todos os outros. Consideramos que o nó visado é o nó que contém o contéudo de informação requisitado pelos utilizadores, o que no nosso modelo resulta em multiplicar a matriz de tráfego pela matriz de deformação dada pela seguinte função, onde a é o nó visado: Axy=          l se x = a 1 se x , a (4.2)

Consideramos que o volume de tráfego originado nesse nó é várias ordens de grandeza

maior que o volume de tráfego com origem nos pedidosHTTPdos utilizadores, tornando

este desprezível. Um modelo mais realista teria tido em conta também um aumento pequeno do tráfego de todos os outros nós para o nó atacado, mas preferimos usar um modelo mais simples, fácil de estudar e também representativo do pior caso, como no modelo precedente.

Mudança de política BGP

Dentro de um AS, o tráfego que nele transita pode ser proveniente de um cliente ou pode entrar na rede vindo de outro AS, através de um ponto de peering. Similarmente, o destino do tráfego pode estar dentro do AS ou pode estar fora, e neste caso deverá ser encaminhado para um AS que ofereça conectividade para esse destino. Como estamos a usar redes de backbone, i.e. redes de trânsito, a maior parte do tráfego tem origem e destino em outros ASs, e portanto consideramos esse tipo de tráfego mais representativo. Os pontos de peering por onde o tráfego entra ou sai está dependente da configuração das políticas de BGP, e assim sendo, uma mudança nestas políticas pode originar modificações na matriz de tráfego.

Procuramos simular esta distorção da matriz de tráfego escolhendo dois nós da rede, um para servir de antigo nó de saída e o outro para servir de novo nó de saída. Depois, para todos os outros nós, removemos uma fracção de tráfego com origem num destes nós e destino no antigo nó de saída e adicionamos ao tráfego com origem nesses mesmos nós e destino no novo nó de saída. Por outras palavras, estamos a redireccionar uma fracção de tráfego com destino num determinado nó de saída para outro nó de saída. Esta distorção representa um cenário onde a conectividade para um determinado prefixo IP era oferecido através de um determinado AS vizinho, e agora passou a ser oferecido por

CAPÍTULO 4. MATRIZES DE TRÁFEGO

outro AS vizinho, obrigando a mudar o destino do tráfego de um ponto de peering para outro. A fracção de tráfego que é redireccionado é um parâmetro na função de distorção.

Poderíamos também considerar um cenário onde em vez de ocorrer uma mudança de nó de saída, ocorreria uma mudança de nó de entrada. Um possível motivo para ocorrer uma mudança deste tipo é o uso de mecanismos de engenharia de tráfego Inter-Domain para equilibrar a carga em canais de peering. De qualquer modo, a distorção que este cenário provoca na matriz de tráfego é simétrico ao cenário anterior e não acrescenta mais informação, sobretudo porque estamos a usar matrizes de tráfego artificiais e redes não dimensionadas para estas matrizes. Por essa razão, apenas considerámos distorções do tipo do primeiro cenário.

4.3 Conclusões

Para procedermos ao estudo vamos usar matrizes de tráfego geradas sinteticamente a partir do modelo de gravidade. Como não conhecemos as capacidades da redes e não

as dimensionamos para uma matriz de tráfego, ver capítulo 3, as matrizes podem ser

distorcidas proporcionalmente multiplicando cada elemento da matriz pelo mesmo factor. Este tipo de distorção não é muito interessante pois não acrescenta nova informação.

Para testar a nossa estratégia de encaminhamento usaremos outro tipo de distorção de matrizes de tráfego, nomeadamente a distorção aleatória, ataque DDoS, evento flash-crowd e mudança de política BGP.

C

a

p

í

t

u

l

o

5

Descrição do algoritmo

A engenharia de tráfego tem por objectivo determinar uma solução de encaminhamento do tráfego que optimize a utilização da capacidade disponível na rede, com vista a mini- mizar a congestão. Geralmente, a rede é definida usando os modelos desenvolvidos em Teoria dos Grafos, de que um exemplo será apresentado a seguir. O tráfego é definido

através de matrizes de tráfego como foi introduzido no capítulo4.

Quanto à optimização da utilização da capacidade disponível, é comum usar como critério a minimização da taxa de ocupação de todos os canais da rede. Nesse caso, a qualidade de uma solução pode ser associada a um indicador único: a taxa de ocupação

do canal mais ocupado na rede, designando esta taxa por Maximum Link Utilization

(MLU). O uso deste indicador é muito comum na literatura (e.g., [1,8,13,24,28])). Tratando-se de um problema de optimização é possível determinar uma solução usando programação linear, bastando para isso definir uma função objectivo e um con- junto de restrições. Existem diversas formulações para este problema, dependentes de mais ou menos liberdade na escolha dos caminhos. Com efeito, denotando por f o fluxo do nó x para o nó y, isto é, o valor D(x,y) da matriz de tráfego D, é possível admitir so- luções em que f é encaminhado usando todos os caminhos disponíveis entre x e y sem restrições, usando apenas um subconjunto bem definido desses caminhos e, no caso limite, usando apenas um caminho.

As soluções em que se usam mais de que um caminho são designadas por soluções multicaminho, enquanto que as soluções que usam um só caminho são designadas por soluções unicaminho. Quanto mais caminhos se puderem usar, maior é a oportunidade de baixar o MLU mas, naturalmente, aumenta o espaço de pesquisa das soluções, fre-

quentemente sem ganhos significativos (ver [8]). Por outro lado, não só a implementação

CAPÍTULO 5. DESCRIÇÃO DO ALGORITMO

pacotes de um mesmo fluxo de transporte chegarem por ordens diferentes, o que é pro-

blemático para os protocolos de transportes, nomeadamente para o protocoloTCP.

Por esta razão, na prática é frequente restringir o espaço de pesquisa, limitando os caminhos pelos quais f pode ser encaminhado a um pequeno conjunto de caminhos, ou no limite, a apenas a um caminho. Segundo alguns autores, usando 3, 4 ou 5 caminhos o resultado final é praticamente equivalente ao que se obtém usando encaminhamento multicaminho sem restrições.

Por outro lado, existem algoritmo concretos que permitem obter uma solução de forma mais eficiente que utilizando um solver genérico. É esta a via que explorámos e que pretendemos usar neste trabalho pelo que neste capítulo vamos introduzir o algoritmo

que designamos por Optimal Multi-Path (OMP). Este algoritmo pode ser usado para

calcular uma distribuição do tráfego dado por uma matriz de tráfego D numa rede G, usando um subconjunto de caminhos em G previamente calculados, e que minimiza o MLU.

O algoritmo OMP é inspirado do CSPF, o qual contém como solução particular.

5.1 Definições importantes

Algumas das definições aqui apresentadas são adaptadas do artigo [28]. Dada uma topo-

logia da rede e uma matriz de tráfego, o algoritmo Optimal Multipath (OMP) calcula um encaminhamento aproximadamente óptimo, em termos de minimização do MLU. Seja

G = (V ,E) um grafo simples (sem lacetes nem arcos paralelos), conexo e pesado, sendo

o peso de cada arco estritamente positivo. G modeliza a topologia da rede, onde V é o conjunto de todos os nós e E é o conjunto de todos os arcos. O peso de cada arco e ∈ E denota a capacidade do canal e é representado por c(e).

Tipicamente, quando se usam grafos para modelizar uma rede consideram-se grafos não orientados, mas neste caso é preferível considerar um grafo orientado, para simplificar a descrição e implementação do algoritmo. No entanto, necessitamos de acrescentar a

seguinte a propriedade: ∀ (vi,vj) ∈ E, ∃ (vj,vi) ∈ E, com vi, vj. Esta propriedade garante

que para todos os arcos existe um arco simétrico correspondente.

Para além da topologia da rede, o algoritmo também tem como input uma matriz de tráfego. Seja n = #V (o número total de nós no grafo). Uma matriz de tráfego D (d de

demand) é uma matriz n × n , onde cada elemento da matriz Dxycorresponde a um par

de nós origem-destino (OD) e indica o tráfego esperado com origem no nó x e destino no nó y.

Para cada par OD, existe um conjunto finito de caminhos possíveis calculados à priori

[10]. Denotamos P como o conjunto de todos os caminhos disponíveis e por Pxycomo o

conjunto de todos os caminhos disponíveis para o par OD (x,y). Neste trabalho todos os caminhos são simples, ou seja todos os nós de um caminho são diferentes (não existem ciclos).

5.1. DEFINIÇÕES IMPORTANTES

O tráfego correspondente a cada par OD pode ser encaminhado por cada um dos

caminhos disponíveis para esse par1. O algoritmo calcula qual é a fracção do tráfego D

xy

de cada par OD deve ser encaminhado por um dos caminhos disponíveis, de forma a minimizar o MLU. O resultado final é um encaminhamento definido por um conjunto

de valores f = {fxy(p) | x,y ∈ V , p ∈ Pxy}, onde fxy(p) especifica a fracção do tráfego de x

para y que é encaminhado pelo caminho p. Seja pxy(i,j) = {p ∈ Pxy|(i,j) ∈ p} o conjunto de

todos os caminhos de x para y que atravessam o arco (i,j). O total de tráfego (load) que atravessa o arco (i,j) é dado por:

l(i,j) =X

x,y

X

p∈pxy(i,j)

Dxy× fxy(p) (5.1)

O MLU de um encaminhamento f sobre uma matriz de tráfego D é definida pelo rácio máximo do total de tráfego que é encaminhado sobre um arco a dividir pela capacidade desse arco, para todos os arcos:

MLU (f ,D) = max

(i,j)∈E

l(i,j)

c(i,j) (5.2)

O encaminhamento óptimo para uma matriz de tráfego D é um encaminhamento que minimiza o MLU. Formalmente, optimal MLU é dado por:

OMLU (D) = min

f MLU (f ,D) (5.3)

O desempenho (performance) de um dado encaminhamento f sobre uma dada matriz

D é dada por:

P(f ,D) =MLU (f ,D)

OMLU (D) (5.4)

O valor obtido por P(f ,D) indica o quão longe encaminhamento f está de um enca- minhamento óptimo. Caso P(f ,D) = 1, f é um encaminhamento óptimo, caso contrário, quanto maior for o valor obtido, mais longe f está do óptimo.

1A divisão dos fluxos de pacotes com origem em x e destino a y por diferentes caminhos pode ser

conseguida usandoMPLSou outro tipo de encaminhamento explícito. Uma discussão mais aprofundada de

como estas técnicas são utilizadas para implementar encaminhamento multicaminho está fora do âmbito deste trabalho.

CAPÍTULO 5. DESCRIÇÃO DO ALGORITMO

5.2 Algoritmo

Input: um grafo G = (V ,E), um conjunto de caminhos P, e uma matriz de tráfego D

Output: um conjunto de valores f = {fxy(p) | x,y ∈ V , p ∈ Pxy}

begin

Define: p.available() = mine∈p (1 −e.assignede.capacity)

Initialize: ∀ e ∈ E, e.assigned = 0 Initialize: ∀ e ∈ E, e.capacity = c(e)

Initialize: ∀ (x,y ∈ V , p ∈ Pxy), fxy(p) = 0

for i = 1 to iterations do foreach (x,y) do

p = arg maxp∈Pxy p.available();

foreach e ∈ p do e.assigned = e.assigned + Dxy iterations end fxy(p) = fxy(p) +iterations1 end end end

Algorithm 1: Optimal Multipath

5.3 Descrição

De uma forma iterativa, o algoritmo encaminha pequenas fracções do tráfego pelo ca- minho disponível com maior capacidade residual. O problema de usar fracções grandes de tráfego é que rapidamente esgota a capacidade dos arcos. Usando fracções pequenas, este problema não ocorre e o resultado final é uma distribuição mais equilibrada. Com fracções infinitamente mais pequenas, o tráfego é melhor distribuído e no limite converge para uma solução que minimiza o MLU. Na secção seguinte, discute-se experimental- mente em quantas fracções se deve dividir o tráfego para que se obtenha um resultado suficientemente próximo do óptimo.

O algoritmo começa por inicializar as variáveis que necessita de usar: a capacidade

(capacity) de todos os arcos (i,j) tomam o valor Cij, a capacidade usada (assigned) de cada

arco é inicializado a 0, e a fracção do tráfego Dxyque é encaminhado por cada caminho

(o output do algoritmo) também é inicializado a 0. Em cada iteração, para todos os pa- res OD (x,y), é selecionado o caminho possível com maior capacidade residual. Depois, actualiza-se a capacidade utilizada para cada arco pertencente a esse caminho, assim como a fracção de tráfego do par OD (x,y) que é encaminhado por esse caminho. Cada

iteração do algoritmo corresponde a encaminhar uma fracção do tráfego Dxy por um

caminho e o algoritmo termina depois de todas as fracções terem sido encaminhadas. 34

5.4. DISCUSSÃO

5.4 Discussão

Comportamento do algoritmo em redes sintécticas

Para efeitos de teste preliminar do algoritmo realizámos testes com matrizes de tráfego unitárias em redes sintécticas, nomeadamente nas redes em anel, full-mesh, hierárquica e folder clos.

Estes testes permitiram concluir que o algoritmo calcula uma distribuição pratica- mente óptima de uma matriz de tráfego unitária completa nas redes hierárquica e folder

clos, que são redes representativas de redes reais usadas em datacenters. Nestas redes, os

testes realizados com outras matrizes de tráfego também mostraram elevada estabilidade e convergência com a subida do número de iterações mas não foi possível determinar de forma clara qual a distância para a solução óptima.

Realizámos igualmente testes com matrizes unitárias completas nas redes em anel e full-mesh, mas o algoritmo não calculou uma distribuição óptima. Provavelmente este resultado está relacionado com o facto de nessas redes a heurística na qual se baseia o algoritmo não é capaz de convergir para o resultado óptimo. Para matrizes de tráfego não unitárias, os testes realizados mostram que o algoritmo também apresenta uma elevada estabilidade e convergência.

Complexidade temporal do algoritmo

Como vimos, em cada iteração do algoritmo, percorremos todos os elementos (i,j) da matriz de tráfego, escolhemos o caminho com maior capacidade residual e actualizamos a carga em cada um dos arcos desse caminho. Para escolher um caminho basta iterar sobre todos os caminhos disponíveis entre i e j e seleccionar o caminho com maior capacidade residual, e para actualizar a carga nos arcos de um caminho precisamos de percorrer todos os arcos do caminho.

Seja iterations o número de fracções em que dividimos o tráfego, i.e. o número de iterações do algoritmo, k o número de caminhos disponíveis entre cada par (i,j), l o com- primento médio dos caminhos e n o número de nós. A complexidade do algoritmo é dada

por O(iterations×n(k +l)). Na realidade, k é passado como parâmetro do algoritmo que

usámos para calcular os caminhos disponíveis, sendo portanto uma constante. Aqui pode- mos ver a importância de usarmos um subconjunto de caminhos interessantes, visto que se usássemos todos os possíveis, e como o número destes explode em relação ao tamanho do grafo, a complexidade também exploderia. Neste trabalho, usámos sempre k = 4. O comprimento médio dos caminhos l também pode ser ajustado pelo algoritmo de cálculo

de caminhos, e nas redes de backbones que descrevemos no capítulo 3o comprimento

médio máximo que observámos foi de 5. Por estar limitado por um número tão pequeno, também podemos considerar l como uma constante.

Por outro lado, apesar de iterations também ser uma constante (temos que definir o número de iterações senão o algoritmo não termina), importa salientar que se arbitarmos

CAPÍTULO 5. DESCRIÇÃO DO ALGORITMO

Documentos relacionados