Figura 4.1 Principais componentes de uma rede - PDF
Download "Figura 4.1 Principais componentes de uma rede"
Isabela Canedo Brezinski
1 Apostila de Redes de Computadores - Capítulo 4 página 1 de 51 Capítulo 4 - A camada de rede A camada de rede está relacionada à transferência de pacotes da origem para o destino. Chegar ao destino pode exigir vários hops (saltos) em roteadores intermediários ao longo do percurso. Essa função contrasta claramente com a função da camada de enlace de dados, que tem o objetivo mais modesto de apenas mover quadros de uma extremidade de um fio até a outra. Portanto, a camada de rede é a camada mais baixa que lida com a transmissão fim a fim. Para atingir seus objetivos, a camada de rede deve conhecer a topologia da sub-rede de comunicações (ou seja, o conjunto de todos os roteadores) e escolher os caminhos mais apropriados através dela. A camada de rede também deve ter o cuidado de escolher rotas que evitem sobrecarregar algumas das linhas de comunicação e roteadores enquanto deixam outras ociosas. Por fim, quando a origem e o destino estão em redes diferentes, ocorrem novos problemas, e cabe à camada de rede lidar com eles. Neste capítulo, estudaremos todas essas questões e as ilustraremos, usando principalmente a Internet e o protocolo de sua camada de rede, o IP, embora também sejam examinadas as redes sem fios Questões de projeto da camada de rede Nas seções a seguir, apresentaremos algumas das questões com que os projetistas da camada de rede devem se preocupar. Dentre elas, estão o serviço oferecido à camada de transporte e o projeto interno da sub-rede Comutação de pacotes store-and-forward Os principais componentes do sistema são mostrados na figura 4.1 o equipamento da operadora de telecomunicações (roteadores conectados por linhas de transmissão), mostrados na elipse sombreada, e o equipamento dos clientes, mostrado fora da elipse. O host H1 está diretamente conectado a um dos roteadores da operadora de telecomunicações, denominado A, por uma linha dedicada. Em contraste, H2 está em uma LAN com um roteador F pertencente ao cliente e operado por ele. Esse roteador também tem uma linha dedicada para o equipamento da operadora de telecomunicações. Mostramos F fora da elipse porque ele não pertence à operadora de telecomunicações; porém, na maioria das vezes, é bem provável que ele não seja diferente dos roteadores da operadora de telecomunicações. Figura 4.1 Principais componentes de uma rede Esse equipamento é suado da maneira descrita a seguir. Um host com um pacote a enviar o transmite para o roteador mais próximo, seja em sua própria LAN ou sobre um enlace ponto a ponto para a operadora de telecomunicações. O pacote é armazenado ali até chegar totalmente, de forma que o total de verificação possa ser conferido. Em seguida, ele é encaminhado para o próximo roteador ao longo do caminho, até alcançar o host de destino, onde é entregue. esse mecanismo é a comutação de pacotes store-and-forward.
2 Apostila de Redes de Computadores - Capítulo 4 página 2 de Serviços oferecidos à camada de transporte A camada de rede oferece serviços à camada de transporte na interface entre a camada de rede e a camada de transporte. Uma questão importante é identificar os tipos de serviços que a camada de rede oferece à camada de transporte. Os serviços da camada de rede foram projetados tendo em vista os objetivos a seguir. 1. Os serviços devem ser independentes da tecnologia de roteadores. 2. A camada de transporte deve ser isolada do número, do tipo e da topologia dos roteadores presentes. 3. Os endereços de rede que se tornaram disponíveis para a camada de transporte devem usar um plano de numeração uniforme, mesmo nas LANs e WANs. Tendo definido esses objetivos, os projetistas da camada de rede têm muita liberdade para escrever especificações detalhadas dos serviços a serem oferecidos à camada de transporte Implementação do serviço sem conexões Depois de analisar as duas classes de serviço que a camada de rede pode oferecer a seus usuários, chegou a hora de vermos como essa camada funciona por dentro. São possíveis duas organizações diferentes, dependendo do tipo de serviço oferecido. Se for oferecido o serviço sem conexões, os pacotes serão injetados individualmente na sub-rede e roteados de modo independente uns dos outros. Não será necessária nenhuma configuração antecipada. Nesse contexto, os pacotes freqüentemente são chamadas datagramas (em uma analogia com os telegramas) e a sub-rede será denominada sub-rede de datagramas. Se for usado o serviço orientado a conexões, terá de ser estabelecido um caminho desde o roteador de origem até o roteador de destino, antes de ser possível enviar quaisquer pacotes de dados. Essa conexão é chamada circuito virtual, em analogia com os circuitos físicos estabelecidos pelo sistema telefônico, e a sub-rede é denominada sub-rede de circuitos vituais. Nesta seção, estudaremos as sub-redes de datagramas; na próxima, estudaremos as sub-redes de circuitos virtuais. Vejamos agora como funciona uma sub-rede de datagramas. Suponha que o processo P1 da Figura 4.2 tenha uma longa mensagem para P2. Ele entrega a mensagem à camada de transporte, com instruções para que ela seja entregue a P2 do host H2. O código da camada de transporte funciona em H1, em geral dentro do sistema operacional. Ele acrescenta um cabeçalho de transporte ao início da mensagem e entrega o resultado à camada de rede, que talvez seja simplesmente outro procedimento no sistema operacional.
3 Apostila de Redes de Computadores - Capítulo 4 página 3 de 51 Figura Roteamento em uma sub-rede de datagramas Vamos supor que a mensagem seja quatro vezes mais longa que o tamanho máximo de pacote e, portanto, que a camada de rede tem de dividi-la em quatro pacotes, 1, 2, 3 e 4, e enviar cada um deles ao roteador A. Nesse ponto, a operadora de telecomunicações assume o controle. Todo roteador tem uma tabela interna que informa para onde devem ser enviados os pacotes a serem entregues a cada destino possível. Cada entrada da tabela é um par que consiste em um destino e na linha de saída a ser utilizada para esse destino. Somente podem ser usadas linhas conectadas diretamente. Por exemplo, na Figura 4.2, A tem apenas duas linhas de saída para D e C e assim todo pacote recebido deve ser enviado a um desses roteadores, mesmo que o destino final seja algum outro roteador. A tabela de roteamento inicial de A é mostrada na figura sob o título Initially (Inicialmente). À medida que chegaram ao roteador A, os pacotes 1, 2 e 3 foram armazenados por algum tempo. Em seguida, cada um deles foi encaminhado para C, de acordo com a tabela de A. O pacote 1 foi então encaminhado para E e depois para F. Chegando a F, ele foi encapsulado em um quadro da camada de enlace de dados e transmitido para H2 pela LAN. Os pacotes 2 e 3 seguiram a mesma rota. Entretanto, aconteceu algo diferente com o pacote 4. Quando chegou ao roteador A, ele foi enviado para o roteador B, embora seu destino também fosse F. Por alguma razão, A decidiu enviar o pacote 4 por uma rota diferente da que foi usada para os três primeiros pacotes. Talvez ele tenha tomado conhecimento de uma obstrução de tráfego em algum lugar no caminho ACE e tenha atualizado sua tabela de roteamento, como mostramos na figura sob o título "later" (Mais tarde). O algoritmo que gerencia as tabelas e toma as decisões de roteamento é chamado algoritmo de roteamento Implementação do serviço com circuitos virtuais No caso do serviço orientado a conexões, precisamos de uma sub-rede de circuitos virtuais. A idéia principal nos circuitos virtuais é evitar a necessidade de escolher uma nova rota para cada pacote enviado, como na Figura 4.2. Em vez disso, quando uma conexão é estabelecida, escolhe-se uma rota desde a máquina de origem até a máquina de destino, como parte da configuração da conexão, e essa rota é armazenada em tabelas internas dos roteadores. A rota é usada por todo o tráfego que flui pela conexão, exatamente como ocorre no sistema telefônico.
4 Apostila de Redes de Computadores - Capítulo 4 página 4 de 51 Quando a conexão é liberada, o circuito virtual também é encerrado. Com o serviço orientado a conexões, cada pacote transporta um identificador, informando a que circuito virtual ele pertence. Como exemplo, considere a situação da Figura 4.3. Nesta figura, o host H1 estabeleceu a conexão 1 com o host H2. Ela é memorizada como a primeira entrada de cada uma das tabelas de roteamento. A primeira linha da tabela de A informa que, se um pacote contendo o identificador de conexão 1 chegar de H1, ele será enviado ao roteador C e receberá o identificador de conexão 1. De modo semelhante, a primeira entrada em C faz o roteamento do pacote para E, também com o identificador de conexão 1. Agora, vamos considerar o que acontece se H3 também quiser estabelecer uma conexão para H2. Ele escolhe o identificador de conexão 1 e informa à sub-rede que ela deve estabelecer o circuito virtual. Isso conduz à segunda linha nas tabelas. Observe que nesse caso temos um conflito porque, embora A possa distinguir facilmente os pacotes da conexão 1 provenientes de H1 dos pacotes da conexão 1 que vêm de H3, C não tem como fazer o mesmo. Por essa razão, A atribui um identificador de conexão diferente ao tráfego de saída correspondente a segunda conexão. Figura Roteamento em uma sub-rede de circuitos virtuais Comparação entre sub-redes de circuitos virtuais e de datagramas Tanto os circuitos virtuais quanto os datagramas tem suas vantagens e desvantagens. Agora, vamos tentar resumir tais características. As principais questões estão listadas na Tabela 4.1. Dentro da sub-rede, existem vários compromissos entre circuitos virtuais e datagramas como, por exemplo, o compromisso entre espaço de memória do roteador e largura de banda. Os circuitos virtuais permitem que os pacotes contenham números de circuitos em vez de endereços de destino completos. Se os pacotes tenderem a ser muito pequenos, um endereço de destino completo em cada pacote poderá representar um volume significativo de overhead e, portanto, haverá desperdício de largura de banda. O preço pago pelo uso de circuitos virtuais internamente é o espaço de tabela dentro dos roteadores. Dependendo do custo relativo de circuitos de comunicação em comparação com a memória do roteador, um ou outro pode ser mais econômico. Outro compromisso é o que se dá entre o tempo de configuração e o tempo de análise de
5 Apostila de Redes de Computadores - Capítulo 4 página 5 de 51 endereço. O uso de circuitos virtuais requer uma fase de configuração, o que leva tempo e consome recursos. Entretanto, é fácil descobrir o que fazer com um pacote de dados em uma subrede de circuitos virtuais: o roteador só utiliza o número do circuito para criar um índice em uma tabela e descobrir para onde vai o pacote. Em uma sub-rede de datagramas, é necessário um procedimento de pesquisa mais complicado para localizar a entrada correspondente ao destino. Questão Figura Comparação entre sub-redes de circuitos virtuais e de datagramas Sub-rede de datagramas Configuração de circuitos Desnecessária Obrigatória Endereçamento Informações sobre o estado Roteamento Efeito de falhas no roteador Qualidade de serviço Controle de congestionamento Cada pacote contém os endereços de origem e de destino completos Os roteadores não armazenam informações sobre o estado das conexões Cada pacote é roteado independentemente Nenhum, com exceção dos pacotes perdidos durante a falha Difícil Difícil Sub-rede de circuitos virtuais Cada pacote contém um número de circuito virtual curto Cada circuito virtual requer espaço em tabelas de roteadores por conexão A rota é escolhida quando o circuito virtual é estabelecido; todos os pacotes seguem essa rota Todos os circuitos virtuais que tiverem passado pelo roteador que apresentou o defeito serão encerrados Fácil, se for possível alocar recursos suficientes com antecedência para cada circuito virtual Fácil, se for possível alocar recursos suficientes com antecedência para cada circuito virtual Outra questão é a quantidade de espaço de tabelas exigido na memória do roteador. Uma sub-rede de datagramas precisa ter uma entrada para cada destino possível, enquanto uma subrede de circuitos virtuais só precisa de uma entrada para cada circuito virtual. Porém, essa vantagem é um tanto ilusória, pois pacotes de configuração de conexões também têm de ser roteados, e eles usam endereços de destino, da mesma forma que os datagramas. Os circuitos virtuais têm algumas vantagens na garantia de qualidade de serviço e ao evitarem o congestionamento dentro da sub-rede, pois os recursos (por exemplo, buffers, largura de banda e ciclos da CPU) podem ser reservados antecipadamente, quando a conexão é estabelecida. Quando os pacotes começarem a chegar, a largura de banda e a capacidade do roteador necessárias já estarão instaladas. Com uma sub-rede de datagramas, é mais difícil evitar o congestionamento. No caso de sistemas de processamento de transações (por exemplo, lojas que telefonam para verificar compras com cartões de crédito), o overhead necessário para configurar e limpar um circuito virtual pode reduzir facilmente o uso do circuito. Caso se espere que a maior parte do tráfego seja desse tipo, o uso de circuitos virtuais comutados dentro da sub-rede fará pouco sentido. Por outro lado, circuitos virtuais permanentes, que são configurados manualmente e duram meses ou anos, talvez sejam úteis nessa situação.
6 Apostila de Redes de Computadores - Capítulo 4 página 6 de 51 Os circuitos virtuais também têm um problema de vulnerabilidade. Se um roteador apresentar uma falha e perder sua memória, mesmo que volte um segundo depois, todos os circuitos virtuais que estiverem passando por ele terão de ser interrompidos. Por outro lado, se um roteador de datagramas ficar fora do ar, somente os usuários cujos pacotes estiverem enfileirados no roteador naquele momento serão afetados, e talvez nem todos eles, dependendo do fato de já terem sido confirmados ou não. A perda de uma linha de comunicação é fatal para os circuitos virtuais que a utilizam, mas pode ser compensada com facilidade se forem usados datagramas. Os datagramas também permitem que os roteadores equilibrem o tráfego pela sub-rede, pois as rotas podem ser parcialmente alteradas durante uma longa seqüência de transmissões de pacotes Algoritmos de roteamento A principal função da camada de rede é rotear pacotes da máquina de origem para a máquina de destino. Na maioria das sub-redes, os pacotes necessitarão de vários hops para cumprir o trajeto. A única exceção importante diz respeito às redes de difusão, mas mesmo aqui o roteamento depende do fato de a origem e o destino não estarem na mesma rede. O algoritmo de roteamento é a parte do software da camada de rede responsável pela decisão sobre a linha de saída a ser usada na transmissão do pacote de entrada. Se a sub-rede utilizar datagramas internamente, essa decisão deverá ser tomada mais uma vez para cada pacote de dados recebido, pois a melhor rota pode ter sido alterada desde a última vez. Se a sub-rede utilizar circuitos virtuais internamente, as decisões de roteamento serão tomadas somente quando um novo circuito virtual estiver sendo estabelecido. Daí em diante, os pacotes de dados seguirão a rota previamente estabelecida. Mesmo que as rotas sejam escolhidas independentemente para cada pacote ou apenas quando novas conexões são estabelecidas, certas propriedades são desejáveis em um algoritmo de roteamento: correção, simplicidade, robustez, estabilidade, eqüidade e otimização. Os itens correção e simplicidade são autoexplicativos, mas, em princípio, talvez a necessidade de robustez seja menos óbvia. Uma vez que uma rede de maior porte é instalada, espera-se que ela funcione continuamente durante anos sem apresentar qualquer falha no sistema. Durante esse período, haverá falhas de hardware e software de todos os tipos. Os hosts, os roteadores e as linhas irão falhar repetidamente, e a topologia mudará muitas vezes. O algoritmo de roteamento deve ser capaz de aceitar as alterações na topologia e no tráfego sem exigir que todas as tarefas de todos os hosts sejam interrompidas e que a rede seja reinicializada sempre que algum roteador apresentar falha. A estabilidade também é um objetivo importante do algoritmo de roteamento. Existem algoritmos que nunca convergem para o equilíbrio, independente do tempo em que são executados. Um algoritmo estável alcança o equilíbrio e permanece nesse estado. Devemos, agora, decidir o que estamos buscando otimizar. A minimização do retardo médio de pacote é uma candidata, e o mesmo vale para a maximização do throughput total da rede. Além disso, esse dois objetivos também estão em conflito, pois operar qualquer sistema de enfileiramento em uma velocidade próxima a de sua capacidade máxima implica um longo retardo de enfileiramento. Como meio-termo, muitas redes tentam minimizar o número de hops que um pacote deve percorrer, pois a redução do número de hops tende a melhorar o retardo e também a reduzir o volume de largura de banda consumido o que, por sua vez, também tende a melhorar o throughput. Os algoritmos de roteamento podem ser agrupados em duas classes principais: adaptativos e não adaptativos. Os algoritmos não adaptativos não baseiam suas decisões de roteamento em medidas ou estimativas do tráfego e da topologia atuais. Às vezes, esse procedimento é chamado roteamento estático. Em contraste, os algoritmos adaptativos mudam suas decisões de roteamento para
7 Apostila de Redes de Computadores - Capítulo 4 página 7 de 51 refletir mudanças na topologia e, normalmente, também no tráfego. Os algoritmos adaptativos diferem em termos do lugar em que obtêm suas informações (por exemplo, no local, de roteadores adjacentes ou de todos os roteadores), do momento em que alteram as rotas (por exemplo, a cada ΔT segundos, quando a carga se altera ou quando a topologia muda) e da unidade métrica utilizada para a otimização (por exemplo, distância, número de hops ou tempo de trânsito estimado). Roteamento pelo caminho mais curto Vamos iniciar nosso estudo de algoritmos de roteamento práticos. A idéia é criar um grafo da sub-rede, com cada nó do grafo representando um roteador e cada arco indicando uma linha de comunicação (geralmente chamada enlace). Para escolher uma rota entre um determinado par de roteadores, o algoritmo simplesmente encontra o caminho mais curto entre eles no grafo. O conceito de caminho mais curto merece uma explicação. Uma forma de medir o comprimento do caminho é usar o número de hops. Empregando-se essa unidade de medida, os caminhos ABC e ABE da Figura 4.7 são igualmente longos. Uma outra unidade métrica é a distância geográfica em quilômetros, e nesse caso ABC é claramente muito mais longo que ABE (supondo-se que a figura tenha sido desenhada em escala). Entretanto, muitas outras unidades métricas também são possíveis além do número de hops e da distância física. Por exemplo, cada arco poderia ser identificado com o retardo médio de enfileiramento e de transmissão referente a um pacote de teste padrão, de acordo com as especificações de testes executados a cada hora. Nesse grafo, o caminho mais curto é o caminho mais rápido, e não o caminho com menor número de arcos ou quilômetros. Figura 4.7 Exemplo de árvore de roteamento No caso geral, os rótulos dos arcos podem ser calculados como uma função da distância, da largura de banda, do tráfego médio, do custo de comunicação, do comprimento médio da fila, do retardo medido e de outros fatores. Alterando-se a função de ponderação (atribuição de pesos),
8 Apostila de Redes de Computadores - Capítulo 4 página 8 de 51 o algoritmo calcularia o caminho "mais curto" medido de acordo com qualquer critério ou com uma combinação de critérios. Inundação Outro algoritmo estático é o algoritmo de inundação (flooding), no qual cada pacote de entrada é enviado para toda linha de saída, exceto para aquela em que chegou. Evidentemente, o algoritmo de inundação gera uma vasta quantidade de pacotes duplicados, na verdade um número infinito, a menos que algumas medidas sejam tomadas para tornar mais lento o processo. Uma dessas medidas é ter um contador de hops contido no cabeçalho de cada pacote; o contador é decrementado em cada hop, com o pacote sendo descartado quando o contador atingir zero. O ideal é que o contador de hops seja inicializado com o comprimento do caminho desde a origem até o destino. Se não souber o tamanho do caminho, o transmissor poderá inicializar o contador com o valor referente ao pior caso, ou seja, o diâmetro total da sub-rede. O algoritmo de inundação não é prático na maioria das aplicações, mas tem sua utilidade. Por exemplo, em aplicações militares, em que muitos roteadores podem ser destruídos a qualquer momento, a grande robustez do algoritmo de inundação é altamente desejável. Em aplicações de bancos de dados distribuídos, às vezes é necessário atualizar todos os bancos de dados ao mesmo tempo e, nesse caso, o algoritmo de inundação pode ser bastante útil. em redes sem fios, todas as mensagens transmitidas por uma estação podem ser recebidas por todas as outras estações dentro de seu alcance de rádio; na verdade, isso representa a inundação, e alguns algoritmos empregam essa propriedade. Um quarto uso possível do algoritmo de inundação é como uma unidade de medida que servirá como base de comparação com outros algoritmos de roteamento. O algoritmo de inundação sempre escolhe o caminho mais curto, pois todos os caminhos possíveis são selecionados em paralelo. Em conseqüência disso, nenhum outro algoritmo é capaz de produzir um retardo de menor duração (se ignorarmos o overhead gerado pelo próprio processo de inundação). Roteamento com vetor de distância Geralmente, as modernas redes de computadores utilizam algoritmos de roteamento dinâmicos em lugar dos algoritmos estáticos descritos aqui, porque os algoritmos estáticos não levam em conta a carga atual da rede. Dois algoritmos dinâmicos específicos, o roteamento com vetor de distância e o roteamento por estado de enlace, são os mais conhecidos. Nesta seção, vamos estudar o primeiro desses algoritmos. Na próxima seção, estudaremos o segundo. Os algoritmos de roteamento com vetor de distância operam fazendo cada roteador manter uma tabela (isto é, um vetor) que fornece a melhor distância conhecida até cada destino e determina qual linha deve ser utilizada para se chegar lá. Essas tabelas são atualizadas através da troca de informações com os vizinhos. O algoritmo de roteamento com vetor de distância era o algoritmo de roteamento original da ARPANET, e também foi utilizado na Internet, com o nome RIP. No roteamento com vetor de distância, cada roteador mantém uma tabela de roteamento indexada por cada roteador da sub-rede e que contém uma entrada para cada um desses roteadores. Essa entrada contém duas partes: a linha de saída preferencial a ser utilizada para esse destino e uma estimativa do tempo ou da distância até o destino. A unidade métrica utilizada pode ser o número de hops, o retardo de tempo em milissegundos, o número total de pacotes enfileirados no caminho ou algo semelhante. Presume-se que o roteador conheça a "distância" até cada um de seus vizinhos. Se a unidade métrica for o hop, a distância será de apenas um hop. Se a unidade métrica for o comprimento da fila, o roteador simplesmente examinará cada uma das filas. Se a unidade métrica for o retardo, o roteador poderá medi-lo diretamente com pacotes ECHO que o receptor irá
9 Apostila de Redes de Computadores - Capítulo 4 página 9 de 51 identificar com um timbre de hora e transmitir de volta o mais rápido que puder. Considere a forma como J calcula sua nova rota até o roteador G. Ele sabe que pode chegar até A em 8 ms e A alega ser capaz de chegar a G em 18 ms; portanto, J sabe que pode contar com um retardo de 26 ms até G, se encaminhar pacotes destinados a G para A. Da mesma forma, ele calcula o retardo para G via I, H e K como 41 ( ), 18 (6 + 12) e 37 (31 + 6) ms, respectivamente. O melhor desses valores é 18; portanto, J cria uma entrada em sua tabela de roteamento indicando que o retardo até G é 18 ms e que a rota a ser utilizada passa por H. O mesmo cálculo é feito para todos os outros destinos, sendo a nova tabela de roteamento mostrada na última coluna da figura. O roteamento com vetor de distância funciona na teoria, mas tem um sério inconveniente na prática: apesar de convergir para a resposta correta, ele pode fazê-lo muito lentamente. Em particular, ele reage com rapidez a boas notícias, mas reage devagar a más notícias. Imagine um roteador cuja melhor rota até o destino X seja grande. Se na próxima troca, o vizinho A repentinamente relatar um pequeno retardo até X, o roteador deixará de usar a linha que vai até A e enviará o tráfego para X. Em uma troca de vetores, a boa notícia é sempre processada. Roteamento por estado de enlace O roteamento com vetor de distância foi utilizado na ARPANET até 1979, quando foi substituído pelo roteamento por estado de enlace. Essa substituição foi motivada por dois problemas principais. Primeiro, como a unidade métrica de retardo era o comprimento da fila, não se levava em conta a largura de banda da linha quando se escolhiam rotas. Como no início todas as linhas tinham 56 kbps, a largura de banda das linhas não era importante mas, após a atualização de algumas linhas para 230 kbps e de outras para 1,544 Mbps, não considerar a largura de banda se tornou um problema importante. É claro que teria sido possível mudar a unidade métrica do retardo para decompor em fatores a largura de banda. No entanto, havia um segundo problema, ou seja, o algoritmo geralmente levava muito tempo para convergir. Por essas razões, ele foi substituído por um algoritmo inteiramente novo, agora chamado roteamento por estado de enlace. Variantes do roteamento por estado de enlace agora são amplamente utilizadas. A idéia por trás do roteamento por estado de enlace é simples e pode ser estabelecida como cinco partes. Cada roteador deve fazer o seguinte: 1. Descobrir seus vizinhos e aprender seus endereços de rede. 2. Medir o retardo ou o custo até cada um de seus vizinhos. 3. Criar um pacote que informe tudo o que ele acabou de aprender. 4. Enviar esse pacote a todos os outros roteadores. 5. Calcular o caminho mais curto até cada um dos outros roteadores. Com efeito, a topologia completa e todos os retardos são medidos experimentalmente e distribuídos para todos os outros roteadores. Quando um roteador é inicializado, sua primeira tarefa é aprender quem são seus vizinhos. Esse objetivo é alcançado enviando-se um pacote HELLO especial em cada linha ponto a ponto. O roteador da outra extremidade deve enviar de volta uma resposta, informando quem é. Esses nomes devem ser globalmente exclusivos pois, quando um roteador distante ouvir mais tarde que esses três roteadores estão todos conectados a F, é essencial que ele possa determinar se todos os três representam o mesmo F.
10 Apostila de Redes de Computadores - Capítulo 4 página 10 de 51 Figura 4.8 (a) Uma sub-rede. (b) Os pacotes de estado de enlace correspondentes a essa sub-rede O algoritmo de roteamento por estado de enlace exige que cada roteador conheça o retardo para cada um de seus vizinhos. A forma mais simples de determinar esse retardo é enviar um pacote especial ECHO pela linha que o outro lado deve transmitir de volta imediatamente. Uma vez obtidas as informações necessárias para a troca, a próxima etapa é cada roteador criar um pacote que contenha todos os dados. O pacote começa com a identidade do transmissor, seguida por um número de seqüência, e pela idade e por uma lista de vizinhos. É fornecido o retardo referente a cada vizinho. Um exemplo de sub-rede é apresentado na Figura 4.8(a), sendo os retardos mostrados como rótulos nas linhas. Os pacotes de estado de enlace correspondentes a todos os seis roteadores são mostrados na Figura 4.8(b). O roteamento por estado de enlace é amplamente utilizado em redes reais; portanto, vale a pena fazer alguns comentários sobre alguns exemplos de protocolos que o utilizam. O protocolo OSPF, amplamente utilizado na Internet, emprega um algoritmo de estado de enlace. O OSPF será descrito mais adiante. Outro protocolo de estado de enlace é o IS-IS (Intermediate System-Intermediate System sistema intermediário-sistema intermediário), projetado para a DECnet e adotado mais tarde pela ISO para uso com seu protocolo da camada de rede sem conexões, o CLNP. Desde então, ele foi modificado para tratar de outros protocolos também; dentre eles, destacamos o IP. O protocolo IS-IS é utilizado em alguns backbones da Internet (incluindo o antigo backbone NSFNET) e em alguns sistemas celulares digitais como o CDPD. Basicamente, o IS-IS distribui uma visão instantânea da topologia de roteador, a partir da qual são calculados os caminhos mais curtos. Cada roteador anuncia, em suas informações de estado de enlace, quais endereços da camada de rede ele pode alcançar diretamente. Esses endereços podem ser IP, IPX, AppleTalk ou quaisquer outros endereços. O IS-IS é capaz até mesmo de aceitar vários protocolos da camada de rede ao mesmo tempo. Muitas das inovações projetadas para o IS-IS foram adotadas pelo OSPF. Dentre essas inovações estão as seguintes: um método de autoestabilização de atualizações de estado de enlace por inundação, o conceito de um roteador designado em uma LAN, e o método de cálculo e suporte de divisão de caminhos, além de várias unidades métricas. Conseqüentemente, há pouca diferença entre o IS-IS e o OSPF. A mais importante delas é que o IS-IS é codificado de tal forma que se torne simples e natural transportar simultaneamente informações sobre vários protocolos da camada de rede, um recurso de que o OSPF não apresenta. Essa vantagem é especialmente valiosa em grandes ambientes de vários protocolos. Roteamento hierárquico À medida que as redes aumentam de tamanho, as tabelas de roteamento dos roteadores crescem proporcionalmente. Não apenas a memória do roteador é consumida por tabelas cada vez maiores, mas também é necessário dedicar maior tempo da CPU para percorrê-las e mais largura
11 Apostila de Redes de Computadores - Capítulo 4 página 11 de 51 de banda para enviar relatórios de status sobre elas. Em um determinado momento, a rede pode crescer até o ponto em que deixará de ser viável cada roteador ter uma entrada correspondente a cada outro roteador, então o roteamento terá de ser feito de forma hierárquica, como na rede telefônica. Quando o roteamento hierárquico for utilizado, os roteadores serão divididos naquilo que denominaremos regiões, com cada roteador conhecendo todos os detalhes sobre como rotear pacotes para destinos dentro de sua própria região, mas sem conhecer nada sobre a estrutura interna de outras regiões. Quando diferentes redes estão interconectadas, é natural que cada uma seja vista como uma região separada, a fim de liberar os roteadores de uma rede da necessidade de conhecer a estrutura topológica das outras redes. Roteamento por difusão Figura Roteamento hierárquico Em algumas aplicações, os hosts precisam enviar mensagens a muitos outros hosts (ou a todos os outros hosts). Por exemplo, um serviço de distribuição de relatórios sobre o tempo, atualizações do mercado de ações ou programas de rádio ao vivo poderiam funcionar melhor pela difusão das informações a todas as máquinas, permitindo que aquelas que estivessem interessadas lessem os dados. O envio de um pacote a todos os destinos simultaneamente é chamado difusão (broadcasting); foram propostos vários métodos para implementar esse recurso. Um método de difusão que não exige recursos especiais da sub-rede permite à origem simplesmente enviar um pacote específico a cada destino. O método não só desperdiça largura de banda como também exige que a origem tenha uma lista completa de todos os destinos. O algoritmo de inundação é outro candidato óbvio. O problema da inundação como técnica de difusão é o mesmo problema que ela tem como um algoritmo de roteamento ponto a ponto: gera pacotes demais e consome largura de banda em excesso. Um terceiro algoritmo é o roteamento para vários destinos. Se esse método for utilizado, cada pacote conterá uma lista de destinos ou um mapa de bits indicando os destinos desejados. Quando um pacote chega a um roteador, este verifica todos os destinos para determinar o conjunto de linhas de saída que serão necessárias. O roteador gera uma nova cópia do pacote para cada linha de saída a ser utilizada e inclui em cada pacote somente os destinos que vão usar a linha. Na verdade, o conjunto de destinos é particionado entre as linhas de saída. Após um número suficiente de hops, cada pacote transportará somente um destino e poderá ser tratado como um pacote normal. O roteamento para vários destinos é como utilizar pacotes endereçados separadamente, exceto pelo fato de, quando vários pacotes tiverem de seguir a mesma rota, um deles pagará toda a passagem, e os restantes viajarão de graça. Um quarto algoritmo de difusão faz uso explícito da árvore de escoamento para o roteador que inicia a difusão ou qualquer outra árvore de amplitude conveniente. Uma árvore
12 Apostila de Redes de Computadores - Capítulo 4 página 12 de 51 de amplitude é um subconjunto da sub-rede que inclui todos os roteadores, mas não contém nenhum loop. Se cada roteador souber quais de suas linhas pertencem à árvore de amplitude, ele poderá copiar um pacote de difusão de entrada em todas as linhas da árvore de amplitude, exceto aquela em que o pacote chegou. Esse método faz excelente uso da largura de banda, gerando o número mínimo absoluto de pacotes necessários para realizar essa tarefa. O único problema é que cada roteador deve ter conhecimento de alguma árvore de amplitude para que o método seja aplicável. Às vezes, essas informações estão disponíveis (por exemplo, com o roteamento por estado de enlace), mas às vezes não. Roteamento por multidifusão Algumas aplicações exigem que processos amplamente separados funcionem reunidos em grupos; por exemplo, um grupo de processos que implementa um sistema de bancos de dados distribuídos. Nessas situações, muitas vezes é necessário que um processo envie uma mensagem a todos os outros membros do grupo. Se o grupo for pequeno, ele poderá simplesmente enviar a cada um dos outros membros uma mensagem ponto a ponto. Se o grupo for grande, essa estratégia se tornará dispendiosa. Às vezes, a difusão pode ser utilizada; no entanto, o uso da difusão para informar a 1000 máquinas de uma rede com um milhão de nós é ineficiente, porque a maioria dos receptores não está interessada na mensagem. Desse modo, precisamos de um meio para enviar mensagens a grupos bem definidos que têm um tamanho numericamente grande, mas que são pequenos em comparação com a rede como um todo. O envio de uma mensagem a um desses grupos denomina-se multidifusão (multicasting) e seu algoritmo de roteamento é chamado roteamento por multidifusão. Roteamento para hosts móveis Hoje em dia, milhões de pessoas têm computadores portáteis, e em geral desejam ler suas mensagens de correio eletrônico e acessar seus sistemas de arquivos normais onde quer que estejam. Esses hosts móveis criam uma nova complicação: antes de rotear um pacote para um host móvel, primeiro a rede precisa localizá-lo. A questão da incorporação de hosts móveis a uma rede é muito recente, mas nesta seção faremos um apanhado geral do assunto e forneceremos uma solução possível. O modelo do mundo que os projetistas de redes normalmente utilizam é mostrado na Figura Nessa figura, temos uma WAN que consiste em roteadores e hosts. Conectadas à WAN há LANs, MANs e células sem fios do tipo que estudamos no Capítulo 2. Os hosts que nunca se movem são chamados estacionários. Podemos distinguir dois outros tipos de hosts. Os hosts migrantes são basicamente hosts estacionários que se deslocam de um local fixo para outro de tempos em tempos, mas que utilizam a rede apenas quando estão fisicamente conectados a ela. Os hosts visitantes realmente utilizam seus computadores em trânsito e querem manter suas conexões à medida que se deslocam. Utilizaremos a expressão hosts móveis para designar as duas últimas categorias, isto é, todos os hosts que estão fora de suas bases e que ainda querem se manter conectados. O grande problema neste caso é a mobilidade. Existem alguns algoritmos que tratam deste problema, para nós interessa somente que ele deverá tratar da trânsito dos hosts móveis, sem perda de conexão.
13 Apostila de Redes de Computadores - Capítulo 4 página 13 de 51 Figura Uma WAN à qual estão conectadas LANs, MANs e células sem fios Roteamento em redes ad hoc Vimos como realizar o roteamento quando os hosts são móvel, mas os roteadores são fixos. Um caso ainda mais extremo é aquele em que os próprios roteadores são móveis. Entre as possibilidades estão: 1. Veículos militares em um campo de batalha sem qualquer infra-estrutura. 2. Uma frota de navios no mar. 3. Trabalhos de emergência em calamidades que destroem a infra-estrutura. 4. Um grupo de pessoas com notebooks em uma área que não tem instalações Em todos esses casos e em outros, cada nó consiste em um roteador e um host, em geral no mesmo computador. Redes de nós que simplesmente estão próximas entre si são chamadas redes ad hoc ou MANETs (Mobile Ad hoc NETworks). O que torna as redes ad hoc diferentes das redes fisicamente conectadas é que todas as regras habituais a respeito de topologias fixas, vizinhos fixos e conhecidos, relacionamento fixo entre endereço IP e localização e outras são repentinamente abandonadas. Os roteadores podem ir e vir, ou aparecer em novos lugares de um momento para outro. Com uma rede fisicamente conectada, se um roteador tiver um caminho válido para algum destino, esse caminho continuará a ser válido indefinidamente (desde que não ocorra uma falha em algum lugar no sistema). No caso de uma rede ad hoc, a topologia pode se alterar o tempo todo, e assim o interesse e até mesmo a validade dos caminhos podem se alterar de modo espontâneo, sem qualquer aviso. É desnecessário dizer que essas circunstâncias tornam o roteamento em redes ad hoc bem diferente do roteamento nas redes equivalentes fixas. Foram propostos diversos algoritmos de roteamento para redes ad hoc. Um dos mais interessantes é o algoritmo de roteamento AODV (Ad hoc On-demand Distance Vector). Tratase de um algoritmo semelhante ao algoritmo de roteamento com vetor de distância, mas adaptado para funcionar em um ambiente móvel e que leva em conta a largura de banda limitada e a baixa duração das baterias nesse ambiente. Outra característica incomum é que ele é um algoritmo por demanda, isto é, determina uma rota até algum destino apenas quando alguém deseja enviar um pacote a esse destino. Agora, vamos ver o que isso significa.
14 Apostila de Redes de Computadores - Capítulo 4 página 14 de Algoritmos de controle de congestionamento Quando há pacotes demais presentes em (parte de) uma sub-rede, o desempenho diminui. Essa situação é chamada congestionamento. A Figura 4.25 ilustra o sintoma. Quando o número de pacotes depositados na sub-rede pelos hosts está dentro de sua capacidade de transporte, eles são todos entregues (exceto alguns que sofram com erros de transmissão), e o número entregue é proporcional ao número enviado. Entretanto, quando o tráfego aumenta muito, os roteadores já não são capazes de suportá-lo e começam a perder pacotes. Isso tende a piorar a situação. No caso de tráfego muito intenso, o desempenho entra em colapso total, e quase nenhum pacote é entregue. Vale a pena destacar explicitamente a diferença entre controle de congestionamento e controle de fluxo, pois o relacionamento entre eles é sutil. O controle de congestionamento se baseia na garantia de que a sub-rede é capaz de transportar o tráfego oferecido. É uma questão global, envolvendo o comportamento de todos os hosts, de todos os roteadores, do processamento de operações store-and-forward dentro dos roteadores e de todos os outros fatores que tendem a reduzir a capacidade de transporte da sub-rede. Por outro lado, o controle de fluxo se baseia no tráfego ponto a ponto entre um determinado transmissor e um determinado receptor. Sua tarefa é garantir que um transmissor rápido não possa transmitir dados continuamente com maior rapidez do que o receptor é capaz de absorver. O controle de fluxo quase sempre envolve algum feedback direto do receptor para o transmissor. Dessa forma, o transmissor fica sabendo como tudo está sendo feito na outra extremidade. Na camada de rede, a escolha entre circuitos virtuais e datagramas afeta o congestionamento, pois muitos algoritmos de controle de congestionamento só funcionam com sub-redes de circuitos virtuais. Um bom algoritmo de roteamento pode ajudar a evitar o congestionamento espalhando o tráfego por todas as linhas, enquanto uma política ruim pode enviar muito tráfego pelas linhas já congestionadas. Controle de congestionamento em sub-redes de circuitos virtuais Nesta seção, vamos descrever algumas estratégias para controlar dinamicamente o congestionamento em sub-redes de circuitos virtuais. Nas duas seções seguintes, vamos analisar técnicas que podem ser utilizadas em qualquer sub-rede. Uma técnica amplamente utilizada para impedir que um congestionamento que já tenha começado se torne pior é o controle de admissão. A idéia é simples: uma vez que o congestionamento tenha dado alguma indicação de sua existência, nenhum outro circuito virtual será estabelecido até que o problema tenha passado. Portanto, todas as tentativas de estabelecer novas conexões da camada de transporte falharão. Admitir mais pessoas só irá piorar o problema. Apesar dessa estratégia ser um pouco grosseira, ela é simples e fácil de executar. No sistema telefônico, quando um switch fica sobrecarregado, o controle de admissão também é acionado, e não são fornecidos sinais de discagem. Uma estratégia alternativa é permitir novos circuitos virtuais, mas rotear com cuidado todos os novos circuitos virtuais em áreas problemáticas. Outra estratégia relacionada a circuitos virtuais é negociar um acordo entre o host e a sub-rede quando um circuito virtual for configurado. Normalmente, esse acordo especifica o volume e a formatação do tráfego, a qualidade de serviço exigida e outros parâmetros. Para manter essa parte do acordo, em geral a sub-rede reservará recursos ao longo do caminho quando o circuito for configurado. Esses recursos podem incluir espaço em tabelas e buffers nos roteadores, além de largura de banda nas linhas. Dessa maneira, é improvável que ocorra congestionamento nos novos circuitos virtuais, pois todos os recursos necessários estarão disponíveis.
15 Apostila de Redes de Computadores - Capítulo 4 página 15 de 51 Controle do congestionamento em sub-redes de datagramas Agora vamos examinar algumas estratégias que podem ser utilizadas em sub-redes de datagramas (e também em sub-redes de circuitos virtuais). Cada roteador pode monitorar facilmente a utilização de suas linhas de saída e de outros recursos Qualidade de serviço As técnicas que examinamos nas seções anteriores foram projetadas para reduzir o congestionamento e melhorar o desempenho das redes. Porém, com o crescimento da multimídia em rede, freqüentemente essas medidas ad hoc não são suficientes. Há necessidade de empreender tentativas sérias para garantir a qualidade de serviço por meio do projeto de redes e protocolos. Examinaremos agora o desempenho de rede, mas com um foco mais nítido sobre as alternativas para oferecer uma qualidade de serviço adequada às necessidades das aplicações. Porém, devemos observar que muitas dessas idéias ainda estão sendo desenvolvidas e podem sofrer modificações. Requisitos Uma seqüência de pacotes desde uma origem até um destino é chamada fluxo. As necessidades de cada fluxo podem ser caracterizadas por quatro parâmetros principais: confiabilidade, retardo, flutuação e largura de banda. Juntos, esses parâmetros definem a QoS (Quality of Service qualidade de serviço) que o fluxo exige. Várias aplicações comuns e a severidade de seus requisitos estão listadas na Tabela As quatro primeiras aplicações têm requisitos estritos de confiabilidade. Nenhum bit pode ser entregue de forma incorreta. Se um pacote for danificado em trânsito, ele não será confirmado e será retransmitido mais tarde. Essa estratégia proporciona alta confiabilidade. As quatro últimas aplicações (áudio/vídeo) podem tolerar erros, e assim nenhum total de verificação é calculado ou conferido. Tabela A rigidez dos requisitos de qualidade de serviço Aplicação Confiabilidade Retardo Flutuação Largura de banda Correio eletrônico Alta Baixa Baixa Baixa Transferência de arquivos Alta Baixa Baixa Média Acesso à Web Alta Média Baixa Média Login remoto Alta Média Média Baixa Áudio por demanda Baixa Baixa Alta Média Vídeo por demanda Baixa Baixa Alta Alta Telefonia Baixa Alta Alta Baixa Videoconferência Baixa Alta Alta Alta As aplicações de transferência de arquivos, incluindo correio eletrônico e vídeo, não são sensíveis ao retardo. Se todos os pacotes estiverem uniformemente atrasados alguns segundos, não haverá nenhum dano. Aplicações interativas, como navegação na Web e login remoto, são mais sensíveis ao retardo. Aplicações de tempo real, como telefonia e videoconferência, têm requisitos estritos de retardo. Se todas as palavras em uma ligação telefônica forem retardas exatamente 2,0 segundos, os usuários irão considerar a conexão inaceitável. Por outro lado, a reprodução de arquivos de áudio ou vídeo de um servidor não exige baixo retardo. As três primeiras aplicações não são sensíveis à chegada de pacotes com intervalos de
16 Apostila de Redes de Computadores - Capítulo 4 página 16 de 51 tempo irregulares entre eles. O login remoto é um pouco mais sensível a essa variação, pois os caracteres aparecerão na tela em pequenas rajadas se a conexão sofrer muita flutuação. O vídeo e, em especial, o áudio são extremamente sensíveis à flutuação. Se um usuário estiver assistindo a um vídeo transmitido pela rede e os quadros estiverem todos atrasados exatamente 2,000 segundos, não haverá nenhum dano. Porém, se o tempo de transmissão variar ao acaso entre 1 e 2 segundos, o resultado será terrível. No caso do áudio, até mesmo uma flutuação de até alguns milissegundos será bastante audível. Por fim, as aplicações diferem em suas necessidades de largura de banda. O correio eletrônico e o login remoto não necessitam de muita largura de banda, mas todas as formas de vídeo exigem um grande volume desse recurso. Técnicas para se alcançar boa qualidade de serviço Agora que sabemos algo sobre requisitos de QoS, como alcançá-los? Bem, para começar, não há nenhuma fórmula mágica. Nenhuma técnica isolada proporciona QoS eficiente e seguro de forma ótima. Em vez disso, foram desenvolvidas diversas técnicas, e as soluções práticas muitas vezes combinam várias dessas técnicas. As técnicas que os projetistas de sistemas utilizam para alcançar QoS: Superdimensionamento, Armazenamento em buffers, Moldagem de tráfego, Reserva de recursos, Controle de admissão, Roteamento proporcional e Programação de pacotes. Serviços integrados Entre 1995 e 1997, a IETF dedicou um grande esforço à criação de uma arquitetura para multimídia de fluxo. Esse trabalho resultou em mais de duas dezenas de RFCs, começando com as RFCs 2205 a O nome genérico desse trabalho é algoritmos baseados no fluxo ou serviços integrados. Ele teve como objetivo as aplicações de unidifusão e multidifusão. Um exemplo do primeiro tipo de aplicação é um único usuário que recebe um fluxo de um videoclipe transmitido por um site de notícias. Um exemplo do outro tipo de aplicação é um conjunto de estações de televisão digital que transmitem seus programas sob a forma de fluxos de pacotes IP para muitos receptores situados em diversos locais. Vamos nos conectar a seguir na multidifusão, pois a unidifusão é um caso especial de multidifusão. Em muitas aplicações de multidifusão, os grupos podem alterar seus membros dinamicamente; por exemplo, quando as pessoas entram em uma videoconferência ou se entediam e passam para uma novela ou para o canal de esportes. Nessas condições, a estratégia de fazer com que os transmissores reservem largura de banda com antecedência não funciona muito bem, pois ela exigiria que cada transmissor rastreasse todas as entradas e saídas de sua audiência. No caso de um sistema projetado para transmitir imagens de televisão a cabo, com milhões de assinantes, esse esquema não funcionaria de forma alguma. RSVP Resource reservation Protocol O principal protocolo da IETF para a arquitetura de serviços integrados é o RSVP, descrito na RFC 2205 e em outras. Esse protocolo é empregado para fazer as reservas; outros protocolos são usados para transmitir os dados. O RSVP permite que vários transmissores enviem os dados para vários grupos de receptores, torna possível receptores individuais mudarem livremente de canais e otimiza o uso da largura de banda ao mesmo tempo que elimina o congestionamento. Em sua forma mais simples, o protocolo utiliza roteamento por multidifusão com árvores de amplitude. Cada grupo recebe um endereço de grupo. Para transmitir dados a um grupo, um transmissor coloca o endereço desse grupo em seus pacotes. Em seguida, o algoritmo de roteamento por multidifusão padrão constrói uma árvore de amplitude que cobre todos os membros. O algoritmo de roteamento não faz parte do RSVP. A única diferença em relação à multidifusão normal são algumas informações extras transmitidas periodicamente ao grupo por
17 Apostila de Redes de Computadores - Capítulo 4 página 17 de 51 multidifusão, a fim de informar aos roteadores ao longo da árvore que devem manter certas estruturas de dados em suas respectivas memórias. Troca de rótulos e MPLS Enquanto a IETF estava desenvolvendo serviços integrados e serviços diferenciados, vários fabricantes de roteadores estavam trabalhando em métodos de encaminhamento melhores. Esse trabalho se concentrou na inclusão de um rótulo (label) no início de cada pacote e na execução do roteamento baseado no rótulo, e não no endereço de destino. Fazer do rótulo um índice para uma tabela interna torna a localização da linha de saída correta apenas uma questão de pesquisa em tabela. Utilizando-se essa técnica, o roteamento pode ser feito com muita rapidez, e quaisquer recursos necessários podem ser reservados ao longo do caminho. É claro que a identificação dos fluxos dessa maneira chega perigosamente perto dos circuitos virtuais. As redes X.25, ATM, frame relay e todas as outras redes com uma sub-rede de circuito virtual também incluem um rótulo (isto é, um identificador de circuito virtual) em cada pacote, realizam a pesquisa de rótulos em uma tabela e efetuam o roteamento com base na entrada da tabela. Essa "nova" idéia de comutação passa por vários nomes (patenteados), inclusive comutação de rótulos e comutação de tags. Eventualmente, a IETF começou a padronizar a idéia sob o nome MPLS (MultiProtocol Label Switching comutação de rótulos multiprotocolo). Vamos denominá-la MPLS no texto a seguir. Ela é descrita na RFC 3031 e em muitas outras RFCs. O cabeçalho MPLS genérico tem quatro campos, sendo o mais importante o campo Label, que contém o índice. O campo QoS indica a classe de serviço. O campo S se relaciona ao empilhamento de vários rótulos em redes hierárquicas (que descreveremos a seguir). Se ele alcançar 0, o pacote será descartado. Esse recurso impede a entrada em loop infinito em caso de instabilidade de roteamento. Como os cabeçalhos MPLS não fazem parte do pacote da camada de rede ou do quadro da camada de enlace de dados, considera-se o MPLS em grande parte independente de ambas as camadas. Entre outras coisas, essa propriedade significa que é possível construir switches MPLS que podem encaminhar tanto pacotes IP quanto células ATM, dependendo do tipo de objeto que surgir. Essa característica explica a palavra "multiprotocolo" no nome MPLS. Quando um pacote (ou uma célula) aperfeiçoado pelo MPLS chega a um roteador capaz de reconhecer o MPLS, o rótulo é usado como um índice para uma tabela, a fim de determinar a linha de saída que deve ser usada, e também qual o novo rótulo. Essa troca de rótulos é utilizada em todas as sub-redes de circuitos virtuais, porque os rótulos têm significado apenas local, e dois roteadores diferentes podem alimentar pacotes não relacionados com o mesmo rótulo para outro roteador, de forma que a transmissão seja feita na mesma linha de saída. Para que os pacotes possam ser reconhecidos na outra extremidade, os rótulos têm de ser remapeados a cada hop. Figura 4.12 Cabeçalho MPLS
18 Apostila de Redes de Computadores - Capítulo 4 página 18 de Interligação de redes Até agora, supomos que havia uma única rede homogênea, com cada máquina usando o mesmo protocolo em cada camada. Porém, na verdade, existem muitas redes diferentes, incluindo LANs, MANs e WANs. Diversos protocolos estão sendo bastante utilizados em cada camada. Nas seções a seguir, examinaremos cuidadosamente as questões que surgem quando duas ou mais redes são interconectadas para formar uma inter-rede. Acreditamos que sempre haverá uma variedade de redes com características (e protocolos) distintos por vários motivos. Em primeiro lugar, a base instalada dos diferentes tipos de redes é grande. Quase todos os computadores pessoais utilizam o TCP/IP. Muitas empresas de grande porte têm mainframes que utilizam a SNA da IBM. Um número significativo de companhias telefônicas opera redes ATM. Algumas LANs de computadores pessoais ainda utilizam o NovelI NCP/IPX ou o AppleTalk. Por fim, as redes sem fios constituem uma área nova com uma variedade de protocolos. Essa tendência continuará ainda durante muitos anos devido a problemas de compatibilidade com tecnologias antigas, a novas tecnologias e ao fato de que nem todos os fabricantes percebem que ela é de seu interesse, pois seus clientes são capazes de migrar facilmente para o sistema de outro fornecedor. Em segundo lugar, como os computadores e as redes estão se tornando mais econômicos, as decisões passam a ser tomadas em níveis mais baixos na hierarquia das organizações. Muitas empresas têm uma política as aquisições inferiores a dólares podem ser feitas por chefes de departamentos, sem qualquer aprovação superior. Essa situação pode levar o departamento de engenharia a instalar estações de trabalho UNIX executando o TCP/IP e o departamento de marketing a instalar computadores Macintosh com AppleTalk. Em terceiro lugar, os diferentes tipos de redes (por exemplo, ATM e sem fio) têm tecnologias radicalmente distintas; por isso, não será surpresa que, à medida que ocorrerem novos desenvolvimentos de hardware, também sejam criados novos softwares correspondentes. Como exemplo da interconexão possível entre diferentes redes, considere a situação representada na Figura Aqui temos uma rede corporativa com vários locais interligados por uma rede ATM geograficamente distribuída. Em um dos locais é usado um backbone óptico FDDI para conectar uma Ethernet, uma LAN sem fio e a rede de mainframes SNA do centro de dados corporativo. Figura Um conjunto de redes interconectadas
19 Apostila de Redes de Computadores - Capítulo 4 página 19 de 51 A finalidade de interconectar todas essas redes é permitir que usuários de qualquer delas se comuniquem com usuários de todas as outras, e também permitir que usuários de qualquer delas acessem dados armazenados em qualquer das redes. Alcançar esse objetivo significa enviar pacotes de uma rede para outra. Tendo em vista que freqüentemente as redes diferem em aspectos importantes, nem sempre é fácil transferir pacotes de uma rede para outra, como veremos agora. Diferenças entre redes As redes podem diferir em várias aspectos. Algumas dessas diferenças, como técnicas de modulação ou formatos de quadros distintos, encontram-se nas camadas física e de enlace de dados. Essas diferenças não nos interessam agora. Em vez disso, na Tabela 4.14 listamos algumas diferenças que podem ocorrer na camada de rede. Quando os pacotes enviados por uma origem em uma rede devem transitar por uma ou mais redes externas antes de chegar à rede de destino, podem ocorrer muitos problemas nas interfaces existentes entre as redes. Para começar, quando os pacotes de uma rede orientada a conexões têm de transitar por uma rede sem conexões, eles podem ser reordenados, fato que o transmissor não espera e com o qual o receptor não está preparado para lidar. Com freqüência, serão necessárias conversões de protocolos, o que talvez seja difícil caso a funcionalidade exigida não possa ser expressada. As conversões de endereços também serão necessárias, o que talvez exija algum tipo de sistema de diretórios. A passagem de pacotes de multidifusão por uma rede que não aceita esse recurso requer a geração de pacotes separados para cada destino. Os diferentes tamanhos máximos de pacotes usados por redes distintas é uma grande dor de cabeça. Como passar um pacote de 8000 bytes por uma rede cujo tamanho máximo é de 1500 bytes? As diferentes qualidades de serviço se tornam um problema quando um pacote que tem restrições de entrega em tempo real passa por uma rede que não oferece qualquer garantia nesse sentido. Tabela Algumas das muitas diferenças possíveis entre redes Item Serviço oferecido Protocolos Endereçamento Multidifusão Tamanho do pacote Qualidade de serviço Tratamento de erros Controle de fluxo Controle congestionamento Segurança Parâmetros Contabilidade de Algumas possibilidades Orientado a conexões e sem conexões IP, IPX, SNA, ATM, MPLS, AppleTalk, etc. Simples (802) e hierárquico (IP) Presente ou ausente (também difusão) Cada rede tem seu próprio tamanho máximo Pode estar presente ou ausente; muitos tipos diferentes Confiável, entrega ordenada e entrega não ordenada Janela deslizante, controle de taxa, outros ou nenhum Balde furado, balde de símbolos, RED, pacotes reguladores etc. Regras de privacidade, criptografia etc. Diferentes timeouts, especificações de fluxo etc. Por tempo de conexão, por pacote, por byte ou nenhuma Com freqüência, os controles de erro, fluxo e congestionamento apresentam diferenças entre as redes. Se a origem e o destino estiverem esperando que todos os pacotes sejam entregues em seqüência, sem erros, e uma rede intermediária simplesmente descartá-los ao pressentir uma possibilidade de congestionamento, muitas aplicações apresentarão falhas. O mesmo acontecerá se pacotes que estiverem vagando perdidos em um determinado momento forem eventualmente entregues a seu destino, se esse comportamento não tiver sido antecipado e tratado. Diferentes mecanismos de segurança, definições de parâmetro, regras de contabilidade e até mesmo leis de privacidade nacionais também podem causar problemas.
20 Apostila de Redes de Computadores - Capítulo 4 página 20 de 51 Como as redes podem ser conectadas As redes podem ser interconectadas por dispositivos diferentes, como vimos no Capítulo 3. Vamos rever rapidamente esse material. Na camada física, as redes podem ser conectadas por repetidores ou hubs, que apenas movem os bits de uma rede para uma rede idêntica. Em sua maioria, esses dispositivos são analógicos e não reconhecem nenhum aspecto dos protocolos digitais (eles simplesmente regeneram sinais). Subindo uma camada, encontramos pontes e switches, que operem na camada de enlace de dados. Eles podem aceitar quadros, examinar os endereços MAC e encaminhar os quadros para uma rede diferente, enquanto executam uma conversão de protocolos secundária no processo. Por exemplo, a conversão de Ethernet para FDDI ou Na camada de rede, temos roteadores que podem conectar duas redes. Se duas redes tiverem camadas de rede distintas, talvez o roteador seja capaz de realizar a conversão entre os formatos de pacotes, embora a conversão de pacotes agora seja cada vez mais rara. Um roteador que pode manipular vários protocolos é chamado roteador multiprotocolo. Na camada de transporte, encontramos gateways de transporte, que podem fazer a interface entre duas conexões de transporte. Por exemplo, um gateway de transporte poderia permitir que os pacotes fluíssem entre uma rede TCP e uma rede SNA, que tem um protocolo de transporte diferente, essencialmente unindo uma conexão TCP a uma conexão SNA. Por fim, na camada de aplicação, os gateways de aplicação convertem a semântica das mensagens. Como exemplo, gateways situados entre o correio eletrônico da Internet (RFC 822) e o correio eletrônico X.400 devem analisar as mensagens de correio eletrônico e alterar diversos campos de cabeçalho. Vamos nos concentrar na interligação de redes feita na camada de rede. Tunneling Lidar com a interligação de duas redes diferentes é extremamente difícil. Entretanto, existe um caso especial muito comum que proporciona bons resultados. Isso acontece quando os hosts de origem e de destino estão no mesmo tipo de rede, mas há uma rede de outro tipo entre eles. Por exemplo, imagine um banco internacional que tem uma Ethernet baseada no TCP/IP em Paris, outra rede Ethernet TCP/IP em Londres e uma WAN não IP (por exemplo, uma rede ATM) entre elas, como mostra a Figura Figura Tunneling de um pacote de Paris a Londres