quinta-feira, 22 de setembro de 2011

Como evitar ataques de SQL Injection no PHP e MySQL

A melhor função para proteger sistemas em PHP e MySQL contra SQL Injection é a mysql_real_escape_string(). Ela faz escapar os caracteres especiais, como aspas simples e duplas, antes de enviar para o banco de dados.

Esta função não funciona em todas as versões do PHP, então devemos verificar se ela existe, e caso não exista, utilizar a função mysql_escape_string().

Também devemos ter em mente que se a diretiva get_magic_quotes_gpc() está ligada ela acrescenta barras invertidas automaticamente antes de aspas simples e duplas. O problema é que ela envia para o banco de dados com as barras invertidas, estragando o texto. Para contornar isso usamos a função stripslashes() para remover essas barras invertidas.

Então vamos montar a nossa função com o nome de anti_sql_injection():

function anti_sql_injection($str) {
     if (!is_numeric($str)) {
          $str = get_magic_quotes_gpc() ? stripslashes($str) : $str;
          $str = function_exists('mysql_real_escape_string') ? mysql_real_escape_string($str) : mysql_escape_string($str);
          }
     return $str;

Note que em nossa função primeiro verificamos se o valor informado não é numérico, ou seja, que precisa ser tratado. Em seguida verificamos se a diretiva get_magic_quotes_gpc() está ativada. Se estiver usamos a função stripslashes(). Em seguida verificamos se existe a função mysql_real_escape_string(). Se existir usamos ela, caso contrário, usamos a função mysql_escape_string().

Veja um exemplo de como usar a função:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
     $usuario = trim($_POST['POST']);
     $senha = trim($_POST['senha']);

     $sql = 'SELECT COUNT(id_usuario) ';
     $sql .= 'FROM usuarios ';
     $sql .= 'WHERE usuario = \'' . anti_sql_injection($usuario) . '\' ';
     $sql .= 'AND senhha = \'' . anti_sql_injection($senha) . '\' ';
     $query = mysql_query($sql) or die('Erro na consulta: ' . mysql_error());
     $total = mysql_result($query, 0);
     if ($total > 0) {
          echo 'Usuário e senha corretos.';
     } else {
          echo 'Usuário e/ou senha inválido(s).';
     }

Pronto! Estamos vacinados contra ataques de SQL Injection.

Ligue a vontade para qualquer celular ou fixo em todo o Brasil, EUA e Canadá, através do 99TelexFREE. Teste nosso serviço por 1 hora gratuitamente: http://www.telexfree.com/ad/marcelmesmo 

Netfilter, iptables

Publiquei em meu Scribd slides sobre o firewall Netfilter iptables, de uma aula do professor Sales Filho, da disciplina de Segurança de Redes do curso de Redes de Computadores do IFRN.

Clique aqui para acessar

Segurança perimetral: firewall e proxy

Postei no meu Scribd uma aula sobre firewall e proxy, do professor Sales Filho, do IFRN.

Clique aqui para acessar

Ataques e mecanismos de segurança de redes de computadores

Publiquei em meu Scribd alguns slides sobre ataques e mecanismos de segurança da informação, referentes a três aulas do professor Sales Filho, da disciplina de Segurança de Redes, do curso de Redes de Computadores do IFRN.

Clique aqui para acessar

segunda-feira, 19 de setembro de 2011

Classificação da informação

Existem quatro aspectos importantes para a classificação das informações. Cada tipo de informação deve ser examinado a partir desses aspectos para poder ser mais bem classificada:

Integridade - a informação é atual, completa e mantida por pessoas autorizadas.

Disponibilidade - a informação está sempre disponível quando necessária ao pessoal autorizado.

Confidencialidade - a informação só é acessada pelos indivíduos autorizados. 

Valor - a informação tem um alto valor para a organização.

Outro fator que deve ser considerado ao se gerar uma política de segurança é o nível de ameaça conhecido que cada informação tem. Para isso devem ser respondidas questões como: Existem concorrentes buscando a informação? É possível que ela fique indisponível? E por qual motivo isso pode acontecer? É uma informação fácil de perder a integridade, ficar desatualizada?

Níveis de segurança

Com base na análise dos parâmetros acima podemos chegar ao nível de segurança da informação. Um nivelamento de segurança pode seguir a seguinte classificação:

Irrestrito - Esta informação é pública, podendo ser utilizada por todos sem causar danos à organização. 

Interna - Esta informação é aquela que a organização não tem interesse em divulgar, cujo acesso por parte de indivíduos externos a ela deve ser evitado. Entretanto, caso esta informação seja disponibilizada ela não causa danos sérios à organização.

Confidencial - Informação interna da organização cuja divulgação pode causar danos financeiros ou à imagem da organização. Essa divulgação pode gerar vantagens a eventuais concorrentes e perda de clientes.

Secreta - Informação interna, restrita a um grupo seleto dentro da organização. Sua integridade deve ser preservada a qualquer custo e o acesso bastante limitado e seguro. Esta é a informação considerada vital para a companhia.

Para podermos chegar nestes níveis de segurança podemos nos guiar também pela seguinte tabela:

O que devemos notar é que o nível de segurança pode ser aumentado tanto pela necessidade de confidencialidade quanto pela de disponibilidade. Uma informação que deve estar sempre disponível deve ter um serviço robusto trabalhando para isso, assim como uma informação confidencial também. E existem ainda os casos onde estes fatores se somam. Por exemplo, uma informação pode ter requisitos de confidencialidade média, mas integridade alta. Assim o nível de segurança da informação deve ser definido levando em conta todos estes fatores em conjunto e não apenas um deles isoladamente. E para isso surge a próxima questão que é "quem define este nível".

Estabelecendo responsabilidades

Para definir o nível de segurança da informação de cada setor da organização a pessoa mais indicada é o próprio responsável daquele setor. Ele é quem certamente conhece melhor as informações do seu setor assim como as necessidades de confidencialidade, integridade e disponibilidade do setor.

Após esta classificação ser feita também é importante que alguém de um nível superior a ele esteja verificando a classificação para garantir que as informações que precisem transitar entre os diversos setores não sejam demais protegidas e isoladas em um setor e também que as informações que não podem transitar estejam protegidas.

Além do responsável pela classificação é preciso também estabelecer os responsáveis pela manutenção dos níveis de segurança definidos. Neste caso todos os funcionários devem ser envolvidos e deve ser criado um plano com um regime de responsabilidades claro e disponível para todos. Além disso, deve ser feito um treinamento para passar os dados deste plano e se possível deve haver um supervisor que verifique a efetivação do plano nos diversos setores da organização.

Implementando a classificação

Para a implementação da categorização devem ser consideradas as seguintes práticas:

• Identificação/marcação dos recursos informacionais;

• Armazenamento da informação;

• Transmissão de informações;

• Eliminação de informação desnecessária;

• Garantia da integridade da informação;

• Permissão de acesso apropriado;

• Estabelecimento de responsabilidades.

Vejamos alguns exemplos destas implementações:

- Para a identificação/marcação dos recursos informacionais:

- Para o armazenamento das informações, de acordo com sua classificação:

- Para transmissão das informações:

O descarte de informações

O lixo de certas empresas pode vir a ser uma grande fonte de informações confidenciais caso as mesmas não se preocupem com o descarte das informações. De nada adianta um relatório ser confidencial, acessado com uma boa senha e transmitido com criptografia caso ele seja impresso e o papel jogado no lixo sem as informações serem eliminadas.

Assim toda mídia impressa que contenha informações relevantes deve ser destruída antes de ser descartada. Isso pode ser feito por picotadores de papel.

Protegendo a integridade

Para a proteção da integridade nos documentos eles todos devem conter informações que identifiquem sua origem assim como um carimbo caso se faça necessário. No caso de documentos eletrônicos eles devem ser controlados através de esquemas de permissão de acesso, restringindo a possibilidade de gravação aos usuários autorizados.

Caso a necessidade de integridade seja alta, certos documentos devem ser armazenados em uma localização central, só podendo ser retirados sob-custódia e com tempo limitado.

O acesso às informações

O acesso às informações deve ser feito de acordo com as políticas estabelecidas para o armazenamento das mesmas. 

Responsabilidades

Após as responsabilidades serem estabelecidas e definidas e os treinamentos serem feitos cada funcionário deve assinar um termo de responsabilidade indicando sua concordância com a política estabelecida.

Um processo para a implementação da classificação

Para implantar a classificação proposta, considerando as práticas acima, podemos seguir os seguintes passos:

• Inventário;

• Classificação de risco;

• Definir política da organização;

• Definir políticas por projetos;

• Implementação de práticas de segurança;

• Treinamento;

• Identificação (marcação);

• Monitoramento.

Arquitetura TCP/IP

A arquitetura internet foi criada pelo Departamento de Defesa dos Estados Unidos, com o objetivo de se ter uma rede interligando várias universidades e órgãos do governo de maneira descentralizada (ARPANET), para evitar a sua destruição no caso de ocorrência de uma guerra. Com o passar do tempo, esta idéia inicial perdeu o sentido e a infraestrutura foi aproveitada para se tornar o que hoje é a maior rede de computadores do mundo: a Internet.

Os padrões da internet não são criados por órgãos internacionais de padronização, como a ISO ou o IEEE, mas ela é uma arquitetura muito aceita, sendo chamada por isso como padrão "de facto", ao contrário do modelo OSI, considerado padrão "de jure". O corpo técnico que coordena a elaboração de protocolo e padrões da internet é o IAB (Internet Activity Board). Qualquer pessoa pode criar um protocolo para ser utilizado pela rede internet. Para isto, basta que ela documente este protocolo através de um RFC (Request for Comments), que pode ser acessado na Internet. Estes RFC's são analisados pelos membros da IAB que poderão sugerir mudanças e publicá-lo. Se após seis meses da publicação não houver nenhuma objeção, este protocolo se torna um Internet Standard.

A arquitetura internet se destaca pela simplicidade de seus protocolos e pela eficiência com que atinge o seu objetivo de interconectar sistemas heterogêneos.

Obs: cabe comentar aqui que por rede internet entende-se qualquer rede que utiliza os protocolos TCP/IP, enquanto que o termo Internet (com I maiúsculo) é utilizado para designar a Internet (conjunto de redes baseada na ARPANET, com milhões de usuários em todo o mundo).

Arquitetura internet

A arquitetura internet se baseia praticamente em um serviço de rede não orientado à conexão (datagrama não confiável), o Internet Protocol (IP) e em um serviço de transporte orientado à conexão, oferecido pelo Transmission Control Protocol (TCP). Juntos, estes protocolos se completam, oferecendo um serviço confiável de uma forma simples e eficiente.

A arquitetura internet se baseia em um modelo com quatro camadas (figura abaixo), onde cada uma executa um conjunto bem definido de funções de comunicação. No modelo em camadas da internet, não existe uma estruturação formal para cada camada, conforme ocorre no modelo OSI. Ela procura definir um protocolo próprio para cada camada, assim como a interface de comunicação entre duas camadas adjacentes.
Modelo em Camadas da Internet

Camada de rede de comunicação

Na camada de rede de comunicação da internet, não existe um padrão para a sub-rede de acesso, possibilitando a conexão de qualquer tipo de rede, desde que haja uma interface que compatibilize a tecnologia da rede com o protocolo IP. Desta forma, um número muito grande de tecnologias pode ser utilizado na sub-rede de acesso, como Ethernet, Token Ring, FDDI, X.25, Frame Relay, ATM, etc.

Para que todas estas tecnologias possam ser "vistas" pela rede internet, existe a necessidade de uma conversão de endereçamentos do formato utilizado pela sub-rede e o formato IP. Esta conversão é realizada pelos gateways, que tornam a interconexão das redes transparente para o usuário (figura abaixo).

Além das conversões de protocolos, os gateways são responsáveis pela função de roteamento das informações entre as sub-redes.
Interconexão de Sub-Redes à Rede Internet

Camada de interrede

A camada de interrede, também chamada de internet, é equivalente à camada de rede do modelo OSI. Nela são especificados vários protocolos, dentre os quais se destaca o IP (Internet Protocol).

O IP é um protocolo não orientado a conexão, cuja função é transferir blocos de dados denominados datagramas da origem até o destino, podendo passar inclusive por várias sub-redes (a origem e o destino são hosts identificados por endereços IP). A operação no modo datagrama é uma comunicação não confiável, não sendo usado nenhum reconhecimento fim-a-fim ou entre nós intermediários, nem qualquer tipo de controle de fluxo.

Nenhum mecanismo de controle de erro de dados é utilizado, apenas um controle de verificação do cabeçalho, para garantir que os gateways encaminhem as mensagens corretamente. Algumas das principais características do protocolo IP são as seguintes:

· Serviço de datagrama não confiável;

· Endereçamento hierárquico;

· Facilidade de fragmentação e remontagem de pacotes;

· Campo especial indicando qual o protocolo de transporte a ser utilizado no nível superior;

· Identificação da importância do datagrama e do nível de confiabilidade exigido;

· Descarte e controle de tempo de vida dos pacotes interredes no gateway. 

Endereçamento IP

O roteamento dos datagramas através das sub-redes são feitos baseados no seu endereço IP, números de 32 bits normalmente escritos como quatro octetos (em decimal), por exemplo 9.179.12.66. Devido ao fato de existirem redes dos mais variados tamanhos compondo a interrede, utiliza-se o conceito de classes de endereçamento:
Formato dos Endereços IP

Os endereços IP indicam o número da rede e o número do host, sendo que a classe A suporta até 128 redes com 16 milhões de hosts cada uma, a classe B 16384 redes com até 64 mil hosts cada uma, a classe C 2 milhões de redes com até 256 hosts cada uma e a classe D, onde um datagrama é dirigido a um grupo de hosts. Os endereços a partir de 1111 estão reservados para uso futuro.

A Internet utiliza a classe C para endereçamento de suas redes e máquinas. Quando um novo provedor de acesso se conecta à ela, ele recebe 256 endereços para serem utilizados pelos seus hosts (ou "usuários"). Como um provedor pode ter mais de 256 clientes, ele utiliza um esquema de alocação dinâmica de IP, ou seja, quando o usuário se conecta ao provedor de acesso, ele recebe um endereço IP, podendo desta forma haver até 256 usuários conectados simultaneamente a um provedor de acesso.

Formato do datagrama IP

O protocolo IP recebe da camada de transporte mensagens divididas em datagramas de 64 kbytes cada um, sendo que cada um destes é transmitido através da Internet, sendo ainda possivelmente fragmentados em unidades menores à medida em que passam por sub-redes. Ao chegarem ao seu destino, são remontados novamente pela camada de transporte, de forma a reconstituir a mensagem original.

O datagrama utilizado pelo protocolo IP consiste em um cabeçalho e um payload, sendo que o cabeçalho possui um comprimento fixo de 20 bytes mais um comprimento variável (figura abaixo).
Cabeçalho IP

O campo VERS identifica a versão do protocolo que montou o quadro. O campo HLEN informa o tamanho do quadro em palavras de 32 bits, pois este pode ser variável. O campo SERVICE TYPE indica às sub-redes o tipo de serviço que deve ser oferecido ao datagrama (por exemplo, para transmissão de voz digitalizada necessita-se mais de uma entrega rápida do que um controle rigoroso de erros, ao passo que para um serviço de transferência de arquivos, o tempo de entrega pode ser sacrificado para se obter um maior controle de erro).

O campo TOTAL LENGTH armazena o comprimento total do datagrama (dados e cabeçalho), com um valor máximo de 65.536 bytes. O campo IDENTIFICATION possibilita ao host determinar a que datagrama pertence um fragmento recém-chegado (todos os fragmentos de um datagrama possuem o mesmo valor). O campo FLAGS é composto de um bit não utilizado seguido por dois bits, DF e MF.

O DF significa Don't Fragment e indica que os gateways não devem fragmentar este datagrama (por incapacidade do destino juntar novamente os fragmentos). MF significa More Fragments, e é utilizado como dupla verificação do campo TOTAL LENGTH, sendo que todos os fragmentos, menos o último possuem este bit setado.

O FRAGMENT OFFSET informa a que posição no datagrama atual pertence o fragmento. O campo TIME TO LIVE é um contador utilizado para se limitar o tempo de vida de um pacote. Quando o datagrama é criado, este campo recebe um valor inicial, que é decrementado toda vez que passa por um gateway. Quando este contador atinge o valor zero, isto indica que a rede está em congestionamento ou que o datagrama está em loop, e o datagrama é descartado.

O campo PROTOCOL indica o protocolo que gerou o datagrama e que deve ser utilizado no destino. O campo HEADER CHECKSUM é utilizado pelos gateways para se fazer uma verificação do cabeçalho (apenas do cabeçalho, não dos dados), para que o gateway não roteie um datagrama que chegou com o endereço errado.

SOURCE IP ADRESS e DESTINATION IP ADRESS são, respectivamente, os endereços de host origem e destino. O campo IP OPTIONS é usado para o transporte de informações de segurança, roteamento na origem, relatório de erros, depuração, fixação da hora e outras. O campo PADDING possui tamanho variável e é utilizado para se garantir que o comprimento do cabeçalho do datagrama seja sempre um múltiplo inteiro de 32 bits. Finalmente, o campo DATA transporta os dados do datagrama.

Roteamento

O roteamento consiste no processo de escolha do caminho através do qual deve ser enviado o dado para o sistema destino. Caso o destino esteja localizado na mesma sub-rede, esta é uma tarefa fácil. Porém quando o destino se encontra em um sub-rede diferente, a transmissão dos dados é feita através de um gateway. O gateway faz o roteamento baseado no endereço IP de destino do datagrama. Se o gateway já estiver conectado à rede para onde o dado deve ser enviado, o problema acabou. Porém, o gateway pode não estar ligado diretamente à rede de destino. Neste caso, a partir da identificação da sub-rede, o endereço físico do próximo gateway na rota é obtido, através de processos de mapeamento. É importante observar que o gateway utilizado em uma rede internet possui funcionalidades distintas das normalmente aplicadas a ele nas redes OSI.

O roteamento pode, então, ser dividido em dois tipos:

· roteamento direto: quando o destino do datagrama se encontra na mesma sub-rede;

· roteamento indireto: quando o destino se encontra em outra sub-rede, necessitando de um gateway para o roteamento;

Para realizar o roteamento indireto, os gateways utilizam tabelas de roteamento, que armazenam informações sobre como atingir cada sub-rede da rede internet. Uma tabela de roteamento possui, tipicamente, entradas do tipo (N,G), onde N é um endereço IP (de destino) e G é o endereço IP do próximo gateway a ser utilizado para se atingir N (figura abaixo):
Tabela de Roteamento

Para diminuir o tamanho das tabelas de roteamento, existem algumas técnicas a serem utilizadas. Por exemplo, pode-se utilizar rotas default (pré-estabelecidas) para quando não se encontra referência na tabela sobre uma determinada rota. Este caso se aplica tipicamente para redes que possuem um único gateway, como por exemplo, departamentos de uma universidade ligados ao backbone por apenas um gateway. Ao invés de se ter uma rota para cada sub-rede, utiliza-se a rota default.

Algoritmos de Roteamento

Um algoritmo de roteamento é a parte do software da camada de rede que tem por objetivo decidir sobre qual linha de saída um pacote que chega deve ser transmitido. Para uma rede que trabalha com datagrama, a decisão deve ser tomada para cada pacote de dados que chega. Já para a rede que trabalha com circuitos virtuais, a decisão de roteamento deve ser tomada apenas quando se estabelece um circuito virtual.

Quando uma máquina M tem um datagrama a ser enviado, ela deve executar os seguintes passos:

· retirar do datagrama o endereço IP do destinatário (IPD);

· a partir do IPD obter o id.rede da sub-rede de destino (IRD);

· caso o IRD corresponda a uma rede na qual a máquina M está diretamente conectada, enviar o datagrama diretamente a IPD (roteamento direto);

· senão, se IRD aparece na tabela de roteamento, rotear o datagrama como especificado na tabela;

· senão, se foi especificado um gateway pré-definido na tabela de roteamento, rotear o datagrama conforme especificado na tabela;

· senão, indicar situação de erro utilizando, por exemplo, o protocolo ICMP.

Existem basicamente dois tipos de algoritmos utilizados em redes internet: Vetor-Distância e Estado-do-Enlace, porém não nos compete entrar em detalhes sobre eles neste momento.

Fragmentação e Remontagem de Datagramas

Como os datagramas IP atravessam redes das mais diversas tecnologias, os tamanhos dos quadros nem sempre devem ser os mesmos. Portanto deve haver uma certa flexibilidade em termos de tamanho de pacote a ser transmitido, de forma a este pacote se adaptar à sub-rede que vai atravessar.

Esta flexibilidade se dá através da facilidade de fragmentação e remontagem de datagramas.

Quando for necessário transmitir um datagrama maior do que o suportável pela rede, deve-se particionar o pacote em fragmentos. Estes fragmentos são transportados como se fossem datagramas independentes. Para poder recompor o datagrama original no destino, são utilizados alguns campos do cabeçalho do datagrama.

Quando o destino recebe o primeiro fragmento, inicia-se uma temporização para se aguardar o conjunto completo dos fragmentos que compõem o datagrama. Caso um dos fragmentos não chegue durante este intervalo, o datagrama é descartado, acarretando em uma perda de eficiência. 

Camada de Transporte

A camada de transporte tem o objetivo de prover uma comunicação confiável entre dois processos, estando eles ocorrendo dentro da mesma rede ou não. Ela deve garantir que os dados sejam entregues
livres de erros, em seqüência e sem perdas ou duplicação.

A Arquitetura Internet especifica dois tipos de protocolos na camada de transporte: o UDP (User Datagram Protocol) e o TCP (Transmission Control Protocol). O UDP é um protocolo não orientado à conexão que pode ser considerado como uma extensão do protocolo IP, e não oferece nenhuma garantia em relação à entrega dos dados ao destino.

Já o protocolo TCP oferece aos seus usuários um serviço de transferência confiável de dados, através da implementação de mecanismos de recuperação de dados perdidos, danificados ou recebidos fora de seqüência, minimizando o atraso na sua transmissão.

A cada fragmento transmitido é incorporado um número de seqüência, de forma a não se perder a ordem dos segmentos a serem juntados para formar o datagrama. Existe um mecanismo de reconhecimento para executar essa função que funciona da seguinte forma: o reconhecimento transmitido pelo receptor ao receber o segmento X é o número do próximo segmento que o receptor espera receber (X+1), indicando que já recebeu todos os segmentos anteriores a este. Através da análise dos números de segmento, o receptor pode ordenar os segmentos que chegaram fora de ordem e eliminar os segmentos duplicados.

Com base no checksum que é adicionado a cada segmento transmitido, os erros de transmissão são tratados e os segmentos danificados são descartados. Existe ainda um controle de fluxo baseado no envio da capacidade de recebimento do receptor, contado a partir do último byte recebido, ao transmissor. Desta forma o transmissor consegue controlar a quantidade de dados que são enviados ao receptor para não haver descarte de segmentos nem necessidade de retransmissão, que ocasionam a queda do desempenho da rede.

Para permitir que vários usuários (processos de aplicação) possam utilizar simultaneamente os serviços do protocolo TCP, foi criado o conceito de porta. Para não haver problemas de identificação de usuários, o identificador da porta é associado ao endereço IP onde a entidade TCP está sendo realizada, definindo assim um socket. A associação de portas a processos de aplicação (usuários) é tratada de forma independente por cada entidade TCP. No entanto, processos servidores que são muito utilizados, como FTP, Telnet, etc, são associados a portas fixas, divulgadas aos usuários. Uma conexão é identificada pelo par de sockets ligados em suas extremidades. Um socket local pode participar de várias conexões diferentes com sockets remotos.

Uma conexão pode ser utilizada para transportar dados em ambas as direções simultaneamente, ou seja, as conexões TCP são full-duplex.

É importante observar aqui que quando se fala que o TCP é orientado à conexão, não se fala em conexão a nível físico, mas sim a nível lógico. Este conceito pode ser compreendido através da figura
abaixo.
Serviços orientados e não orientados à conexão

No caso da figura acima, a máquina A quer se comunicar com a máquina B através de uma rede em anel utilizando TCP/IP. A única conexão física que existe entre A e B é através do anel, passando pelas máquinas C e D. A nível de IP, a comunicação não é orientada à conexão, portanto é muito simples enxergar que os dados possuem apenas dois caminhos para ir de A até B: através de C ou através de D.

A nível de TCP, porém, a comunicação entre os computadores A e B ocorre como se houvesse uma conexão direta entre eles. Isso implica que, se a nível de IP os dados podem chegar fora de ordem, o TCP tem que garantir a ordenação destes dados, de forma que eles sempre chegem na ordem correta, como aconteceria se houvesse uma conexão física direta entre A e B.

Camada de aplicação

As aplicações na arquitetura Internet, ao contrário do que ocorre com as OSI, são implementadas de uma maneira isolada, ou seja, não existe um padrão que defina como deve ser estruturada uma aplicação. Cada aplicação possui seu próprio padrão, correspondente a um RFC (Request for Comments).

RPC (Remote Procedure Call)

O RPC é um mecanismo criado para suportar aplicações distribuídas baseadas em um modelo cliente/servidor.

A aplicação cliente faz uma chamada de procedimento remoto onde o RPC, de forma automática, obtém os valores dos argumentos da chamada, monta a mensagem correspondente, a envia ao servidor e aguarda a resposta, armazenando os valores retornados nos argumentos definidos na chamada. Na realidade, o que ocorre é a mesma coisa que nas chamadas de funções locais comumente encontradas em aplicações, com a diferença que a execução real da função está ocorrendo em um local remoto.
Funcionamento de uma RPC

SMTP (Simple Mail Transfer Protocol)

O SMTP é o protocolo utilizado no correio eletrônico da arquitetura TCP/IP. Ela prevê uma interface com o usuário para enviar e receber mensagens que são armazenadas, inicialmente, em uma área de transferência de mensagens do sistema para serem, posteriormente, enviadas em background, conforme a figura abaixo.
Funcionamento do SMTP

O SMTP enxerga a mensagem como que dividida em duas partes: o corpo e o cabeçalho. O corpo da mensagem é onde são enviadas as mensagens propriamente ditas, sendo que o cabeçalho contém dados de endereçamento, assunto da mensagem etc. O protocolo SMTP não provê mecanismos sofisticados de controle de envio e recebimento de mensagens, tais como notificações, segurança de violação, criptografia dentre outros.

FTP (File Transfer Protocol)

O FTP provê serviços de transferência, renomeação e remoção de arquivos, bem como criação, remoção e modificação de diretórios, entre outros. Para que um serviço FTP seja prestado, são estabelecidas duas conexões TCP entre o cliente e o servidor: uma para a transferência dos dados e outra para controle. A confiabilidade das transferências de arquivos realizadas fica por conta do protocolo TCP, já que o FTP não possui nenhuma função de controle adicional sobre os arquivos, a não ser a exigência da senha do usuário para permitir a transferência. O FTP pode transmitir dois tipos de arquivos: arquivos texto (com dados no formato ASCII ou EBCDIC) ou arquivos binários (dados enviados como uma seqüência de bytes sem qualquer conversão).

TELNET (Terminal Virtual)

O TELNET é o protocolo utilizado para se permitir que o usuário de um sistema acesse um sistema remoto através de uma sessão de terminal, operando como se estivesse diretamente conectado neste sistema.

DNS (Domain Name System)

O DNS é o mecanismo utilizado pelo TCP/IP que define um sistema de nomes baseado em uma estrutura de árvore, que possibilita uma nomeação organizada de sistemas de domínio universal. O DNS estabelece a sintaxe de nomes e regras para delegação de autoridade sobre os nomes além de implementar um algoritmo computacional eficiente para mapear nomes em endereços.

Os nomes das máquinas são divididos em partes separadas por pontos correspondendo cada parte a um novo domínio de autoridade, em que o primeiro nome corresponde ao nível mais baixo e o último ao nível mais alto da hierarquia. No caso do nível mais alto, foram designados os seguintes nomes:

· ARPA - identificação do host da ARPA;

· COM - organizações comerciais;

· COUNTRY - qualquer país que utilize o padrão ISO3166 para nomes de país;

· EDU - instituições educacionais;

· GOV - instituições governamentais;

· INT - organizações internacionais;

· MIL - grupos militares;

· ORG - outras organizações.

A figura abaixo representa uma estrutura de nomes onde, por exemplo, o nome cctmn.inatel.br representa o domínio do CCTMN do INATEL.
Estrutura de nomes utilizada pelo DNS

Gerenciamento TCP/IP

O gerenciamento de uma rede TCP/IP se baseia no protocolo SNMP - Simple Network Management Protocol. O SNMP é um protocolo da camada de aplicação que atua sobre o UDP - User Datagram Protocol. A figura abaixo mostra a configuração típica da implementação do protocolo SNMP. O protocolo UDP é um protocolo não orientado à conexão, e a sua utilização (ao invés do TCP) se explica pelo fato de que não deve haver interrupções na comunicação de mensagens SNMP. No caso do TCP, uma interrupção em uma conexão, ou rota, influiria no desempenho do sistema de gerência. 

Ao se utilizar um serviço de datagrama, apesar de se obter um serviço de menor qualidade, esta limitação é contornada, pois em caso de impossibilidade de utilização de uma rota, outra rota é automaticamente escolhida.
SNMP

O gerenciamento de uma rede TCP/IP é baseado na estrutura agente-gerente, onde o gerente faz as requisições das operações a serem executadas sobre os recursos gerenciados. Estas requisições são enviadas ao agente, que executa as operações sobre os objetos gerenciados (abstrações dos recursos gerenciados para o agente). Através de uma interface, estas operações realizadas nos objetos gerenciados se refletem nos recursos gerenciados, e geralmente uma resposta é enviada de volta ao gerente, completando a operação de gerenciamento.

O protocolo SNMP é baseado no paradigma conhecido como fecth-store (busca-armazenamento), ou seja, todas as operações previstas para este protocolo são derivadas de operações básicas de busca e armazenamento. Estas operações básicas incluem:

· get-request: leitura do valor de uma variável;

· get-next-request: leitura do valor da próxima variável;

· get-response: resposta à operação de leitura;

· set-request: gravação do valor de uma variável;

· trap: notificação da ocorrência de um evento específico.

Segundo Marshall Rose, "o impacto do gerenciamento de rede adicionado para gerenciar os nós deve ser mínimo, refletindo o menor denominador comum. Cada nó é visto como tendo algumas variáveis. 

Pela leitura dos valores destas variáveis, o nó é monitorado. Alterando os valores destas variáveis, o nó é controlado".

Em decorrência disto, os agentes SNMP são simples e executam operações elementares, como estabelecer e obter valores das variáveis. O programa que analisa, manipula, combina ou aplica algum algoritmo sobre os dados deve residir no gerente. 

Comparação entre as arquiteturas TCP/IP e OSI

Atualmente, com a necessidade da utilização de modelos abertos em sistemas de comunicação, torna-se imprescindível conhecer os dois principais modelos que visam atender esta necessidade (o modelo OSI e o modelo TCP/IP) e suas diferenças.

A principal diferença entre os dois, é que o modelo OSI evoluiu de uma definição formal elaborada por comissões da ISO para o desenvolvimento de produtos, enquanto que o TCP/IP nasceu da necessidade do mercado e da demanda de produtos para resolver o problema de comunicação e a partir daí passou por uma série de implementações onde muitos produtos foram desenvolvidos fora da arquitetura internet, passando a ser incorporados a ela.

Vale então dizer que a arquitetura OSI é considerado um modelo de jure, enquanto que arquitetura internet é considerada um modelo de facto.

Analisando-se comparativamente a estrutura dos dois modelos (figura abaixo), pode-se observar que a parte referente às sub-redes de acesso da arquitetura internet corresponde à camada física, à de enlace e, parcialmente, à de rede do modelo OSI, sem que haja nenhuma padronização neste sentido.
O IP corresponde à camada de rede, enquanto o TCP e o UDP oferecem serviços semelhantes aos prestados, respectivamente, pelos protocolos de transporte orientados e não-orientados à conexão do modelo OSI. Nas camadas superiores, a arquitetura Internet coloca sob responsabilidade da aplicação os serviços fornecidos pelas camadas de sessão, apresentação e aplicação do modelo OSI.
Comparação entre as arquiteturas OSI e TCP/IP

O fato da arquitetura TCP/IP possuir menos camadas que o modelo OSI implica na sobrecarga de algumas camadas com funções que não lhe são específicas. Por exemplo, podemos citar a transferência de arquivos: no ambiente TCP/IP, as funções correspondentes à camada de apresentação OSI são desempenhadas pelo próprio protocolo de transferência de arquivos FTP. Por outro lado, o TCP/IP nos fornece aplicações simples, eficiente e de fácil implementação a nível de produtos. Uma das maiores limitações da arquitetura TCP/IP é quanto a sua capacidade de endereçamento, que já está se tornando limitada, devido ao crescimento da Internet.

Já a arquitetura OSI sofre críticas por apresentar "modelos e soluções acadêmicas" e objetivar atendimento a requisitos de propósito geral em detrimento de soluções imediatas, compatíveis com as exigências atuais dos usuários. É também criticada por não apresentar meios de migração entre as arquiteturas atualmente em funcionamento e suas soluções.

Diante desta situação, observa-se atualmente um emergente esforço de aproximação entre as duas arquiteturas, objetivando-se aproveitar o que cada uma tem de melhor a oferecer, de forma a se encontrar soluções mistas.

sexta-feira, 16 de setembro de 2011

Acordo de Nível de Serviço

Publiquei no meu Scribd um acordo de nível de serviço - service level agreement ou SLA - fictício feito por mim como atividade avaliativa da disciplina de Gerenciamento de serviços de TI pelo modelo COBIT, da especialização em Governança de TI da Unisul.

Clique aqui para acessar

Request for Information

Publiquei no meu Scribd um RFI fictício feito por mim como atividade avaliativa da disciplina de Gerenciamento de serviços de TI pelo modelo COBIT, da especialização em Governança de TI da Unisul.

Clique aqui para acessar

Servidor DNS

História do Sistema de Nomes de Domínio

Nos anos 70, a ARPAnet era muito pequena, um simples arquivo host.txt contendo todas as informações que se precisava conhecer sobre os hosts resolvia o problema.

Quando a rede começou a crescer e se mover para o protocolo TCP/IP, os administradores de rede tiveram várias dificuldades, e dentre elas podemos citar:

Colisão de nomes - duas máquinas com IPs diferentes poderiam ter o mesmo nome, pois a manutenção dos arquivos hosts.txt se tornava complicada. Não existia nada que prevenisse que alguém adicionasse um host com um nome idêntico a outro.
Consistência - quando necessário incluir um novo host, o procedimento precisava ser replicado para todos os outros arquivos. Caso um dos arquivos hosts.txt não fosse atualizado era gerado um problema na resolução de nomes na rede.
Os arquivos hosts.txt não eram escaláveis.

Em 1984 foram liberadas as RFCs 882 e 883 que descreviam o Sistema de Nomes de Domínio.
O Sistema de Nomes de Domínio
O Sistema de Nomes de Domínio é um banco de dados distribuído.

Desta maneira formou-se um sistema robusto com alto desempenho que pudesse ser replicado e armazenado em memória.

Abaixo vemos a estrutura de uma base de nomes que é semelhante ao sistema de arquivos do UNIX.

Cada domínio tem um nome único, como em um diretório. O nome do domínio identifica a posição na base de dados, mas ao contrário do sistema de arquivos do UNIX, o nome é uma a seqüência do nó para a raiz como mostrado a seguir.

Cada domínio pode ser administrado por uma entidade diferente.

Por exemplo, a InterNIC resolve o domínio edu (educational), mas o subdomínio berkley.edu quem resolve é a universidade U.C. Berkeley.

A primeira implementação do Sistema de Nomes de Domínio era chamada JEEVES, escrita por Paul Mockapetris. Posteriormente outra implementação chamada BIND, escrita para o sistema operacional Berkeley's 4.3BSD UNIX foi escrita por Kevin Dunlap. BIND atualmente é mantida pelo Internet Software Consortium.

Os nomes para os hosts no domínio podem ter até 63 caracteres sendo o “.” reservado para a raiz.

A seguir temos alguns domínios do topo da estrutura.

Para cada país é seguida a norma ISO3166 que define dois caracteres para representação do país. Abaixo alguns exemplos.

No Brasil temos alguns subdomínios tais como:

Para maiores informações entre no site registro.br.

Configuração

Este exemplo é baseado em um computador com sistema Linux pré-instalado.

Altere o nome da máquina para ns1.teste.com.br e o gateway padrão.

nano /etc/sysconfig/network

HOSTNAME=ns1.teste.com.br
GATEWAY=192.168.0.254

Ajuste o arquivo /etc/hosts para

127.0.0.1   localhost.localdomain   localhost
::1         localhost6.localdomain6 localhost6
192.168.0.1 ns1.teste.com.br        ns1
Altere o IP da máquina virtual para 192.168.0.1

nano /etc/sysconfig/network-scipts/ifcfg-eth0
DEVICE=eth0
ONBOOT=Yes
IPADDR=192.168.0.1
NETMASK=255.255.255.0
BROADCAST=192.168.0.255
NETWORK=192.168.0.0
Altere o endereço do servidor que irá resolver os nomes em /etc/resolv.conf, coloque inicialmente o endereço do seu provedor ou dns interno.

nameserver 10.2.0.1
Reinicie a máquina virtual para começarmos a configuração do nosso servidor de nomes.
Instalação dos pacotes
Instale os pacotes necessários para o servidor de nomes

yum install bind caching-nameserver bind-chroot

Definição do domínio teste.com.br
Vamos criar o domínio teste.com.br, edite o arquivo de configuração do servidor de nomes.

nano /etc/named.caching-nameserver.conf
Troque as linhas abaixo, que aparecem no arquivo de configuração,
listen-on port 53 { 127.0.0.1; };
view localhost_resolver {
     match-clients { localhost; };
     match-destinations { localhost; };
     recursion yes;
     include "/etc/named.rfc1912.zones";
};

Por

listen-on port 53 { 127.0.0.1; 192.168.0.1;};
view interno {
     match-clients { localhost; 192.168.0.0/24;};
     allow-query { localhost; 192.168.0.0/24;};
     recursion yes;
     include "/etc/named.rfc1912.zones";
     include "/etc/teste.com.br.zone";
};

Isto fará o servidor esperar por conexões no IP 192.168.0.1 vindas da rede 192.168.0.0/24, e indicará o arquivo onde será definido o domínio teste.com.br.

Como foi instalado o bind-chroot todos os arquivos referentes ao servidor de nomes se encontram no diretório /var/named/chroot. Vamos criar a zona teste.com.br.

nano /var/named/chroot/etc/teste.com.br.zone

Adicione neste arquivo as linhas abaixo.

zone "teste.com.br" IN {
     type master;
     file "teste.com.br.hosts";
     allow-update { none; };
};

zone "0.168.192.in-addr.arpa" IN {
     type master;
     file "teste.com.br.rev";
     allow-update { none; };
};

Altere as permissões deste arquivo para somente leitura e escrita pelo usuário root, e leitura para o grupo named.

O grupo proprietário deste arquivo deve ser o grupo named.
Criação da zona teste.com.br
Edite o arquivo da zona direta onde se cadastram as máquinas.

nano /var/named/chroot/var/named/teste.com.br.hosts
O arquivo deve conter as linhas abaixo.
$TTL 86400
@ IN SOA ns1.teste.com.br. root.ns1.teste.com.br. (
     2007082501 ; serial
     3H ; refresh
     15M ; retry
     1W ; expiry
     1D ) ; minimum
     IN NS ns1.teste.com.br.
     IN NS ns2.teste.com.br.
ns1 IN A 192.168.0.1
ns2 IN A 192.168.0.2
As permissões deste arquivo devem estar como no caso anterior.

Criação da zona teste.com.br reversa

Edite o arquivo da zona direta onde se cadastram as máquinas.

nano /var/named/chroot/var/named/teste.com.br.rev

O arquivo deve conter as linhas abaixo.

$TTL 86400
@ IN SOA ns1.teste.com.br. root.ns1.teste.com.br. (
     2007082501 ; Serial
     3H ; refresh
     15M ; retry
     1W ; expiry
     1D ) ; minimum
IN NS ns1.teste.com.br.
IN NS ns2.teste.com.br.
1.0.168.192.in-addr.arpa IN PTR ns1.teste.com.br.
2.0.168.192.in-addr.arpa. IN PTR ns2.teste.com.br.
As permissões deste arquivo devem estar como no caso anterior.

Testes
Inicie o serviço

/etc/init.d/named start

Resolução do nome

nslookup ns1.teste.com.br 127.0.0.1

A resposta deve ser

Server: 127.0.0.1
Address: 127.0.0.1#53

Name: ns1.teste.com.br
Address: 192.168.0.1

Resolução do nome reverso

nslookup 192.168.0.1 127.0.0.1

A resposta deve ser

Server: 127.0.0.1
Address: 127.0.0.1#53

1.0.168.192.in-addr.arpa name = ns1.teste.com.br.

Colocando para funcionar

Altere o arquivo /etc/resolv.conf para

search teste.com.br
nameserver 127.0.0.1

Faça os testes de resolução de nomes novamente.

Configuração do Servidor de Nomes Secundário

Em outro servidor instale os mesmos pacotes instalados no servidor de nomes primário.

Repita o passo 1 colocando em listen-on a linha abaixo

listen-on port 53 { 127.0.0.1; 192.168.0.1;};
No passo 2 quando for criar as zonas direta e reversa, coloque
zone "teste.com.br" IN {
     type slave;
     file "slaves/teste.com.br.zones";
     masters { 192.168.0.1; };
};

zone "0.168.192.in-addr.arpa" IN {
     type slave;
     file "slaves/teste.com.br.rev";
     masters { 192.168.0.1; };
};

Copie a chave que está no arquivo /etc/rndc.key do servidor primário para o secundário.

Altere no servidor primário, inclua a opção para o domínio na definição da zona direta e reversa, abaixo do allow-update;

allow-transfer { 192.168.0.2; };
Testes
Inicie o servidor DNS e veja se os arquivos do domínio foram transferidos.

ls /var/named/chroot/var/named/slaves/

quinta-feira, 15 de setembro de 2011

Serviço proxy: Squid

Disponibilizo no meu Scribd uma ótima aula sobre proxy Squid. Esta aula é do ex-professor do curso de Redes de Computadores do IFRN, Bruno Pontes.

Clique aqui para acessar

Servidor de correio eletrônico

Disponibilizo no meu Scribd uma ótima aula sobre Servidor de Correio Eletrônico, especificamente em ambiente de sistema de código aberto. Esta aula é do ex-professor do curso de Redes de Computadores do IFRN, Bruno Pontes.

Clique aqui para acessar

Redes de longa distância

1. Breve história das redes WAN

A história da WAN começa em 1965 quando Lawrence Roberts e Thomas Merril ligaram dois computadores, um TX-2 em Massachussets a um Q-32 na Califórnia, através de uma linha telefônica de baixa velocidade, criando a primeira rede de área alargada (WAN).

Em geral, as redes geograficamente distribuídas contém conjuntos de servidores, que formam sub-redes. Essas sub-redes têm a função de transportar os dados entre os computadores ou dispositivos de rede.

As WAN tornaram-se necessárias devido ao crescimento das empresas, onde as LAN não eram mais suficientes para atender a demanda de informações, pois era necessária uma forma de passar informação de uma empresa para outra de forma rápida e eficiente. Surgiram as WAN que conectam redes dentro de uma vasta área geográfica, permitindo comunicação de longa distância.

2. Rede de área alargada (WAN)

As redes de área alargada (Wide Area Network) tem a dimensão correspondente a países, continentes ou vários continentes. São na realidade constituidas por múltiplas redes interligadas, por exemplo LANs e MANs. O exemplo mais divulgado é a "internet". Dada a sua dimensão e uma vez que englobam LANs e WANs, as tecnologias usadas para a transmissão dos dados são as mais diversas, contudo para que as trocas de informação se processem é necessário um elo comum sobre essa tecnologia heterogénea. Esse elo comum é o protocolo de rede.

As WANs são redes usadas para a interconexão de redes menores (LANs ou MANs) e sistemas computacionais dentro de áreas geográficas grandes (cidades, países ou até continentes). Elas possuem um custo de comunicação bastante elevado devido aos circuitos para satélites e enlaces de microondas.

São, em geral, mantidas, gerenciadas e de propriedade de grandes operadoras (públicas ou privadas), e o seu acesso é público. São exemplos de tecnologias WAN as ATM e X.25.

Por questões de confiabilidade, caminhos alternativos são oferecidos entre alguns nós. Com isso, a topologia da rede é, virtualmente, ilimitada, isto é voz, dados e vídeo são comumente integrados.

A capacidade de chaveamento da rede permite a alteração dinâmica do fluxo de dados, ao contrário das LANs, que normalmente empregam o roteamento fixo.

A interligação ("internetworking") de redes de diferentes tecnologias é assegurada por dispositivos conhecidos por "roteadores". Um roteador possui tipicamente ligação física a duas ou mais redes, recebendo dados de uma rede para os colocar na outra rede. Um exemplo tipico é a ligação de uma rede "Ethernet" a uma rede ponto-a-ponto.

2.1. Características das redes WAN

– Cobertura de grandes áreas geográficas geridas por operadores de Telecomunicações;

– Os recursos de transmissão podem ser dedicados ou partilhados;

– Usa-se diversas tecnologias de transporte (modos de transferência)

     • Comutação de circuitos (rede telefônica, RDIS)

     • Comutação de pacotes (X.25, IP)

     • Comutação de tramas (Frame Relay)

     • Comutação de células (ATM – Asynchronous Transfer Mode)

     • Comutação de etiquetas (MPLS – Multiprotocol Label Switching)

– Deve conectar computadores entre longas distâncias;

– Deve permitir que muitos computadores possam se comunicar simultaneamente sem limitação de largura de banda;

– Escalabilidade.

– São construídas a partir de muitos switches, os quais os computadores individuais se conectam.

– Para aumentar a rede, basta inserir mais switches para acomodar mais computadores.

– O dispositivo switch utilizado para as WAN são os switches de pacotes;

Os switches são combinados para formar uma rede de longo alcance. Os switches podem ser interconectados através de grandes distâncias. As combinações podem ser realizadas para acomodar mais tráfego e oferecer redundâncias nos casos de falhas.

2.2. Protocolos WAN

Um protocolo tem algumas regras que os nós devem obedecer para se comunicarem uns com os outros. O que eles fazem é criar uma linguagem comum entre diferentes máquinas. De forma geral, ele é um conjunto de regras, especificações e procedimentos que devem governar entidades que se comunicam entre si.

Elementos de um protocolo
– Sintaxe (formato dos dados, níveis de sinal, etc.)

– Semântica (informação de controle, tratamento de erros) – procedimentos

– Temporizações (adaptação de velocidades, sincronização, ordenação dos dados).

2.2.1. Protocolo ponto-a-ponto [Point-to-Point Protocol ( PPP )]:

É o protocolo mais comum para dar acesso à internet tanto em conexões discadas como dedicadas.

2.2.1.1. Topologia do PPP na rede WAN

Chama-se “topologia” à disposição física dos computadores relativamente às cablagens e dispositivos que os unem. Entretanto, são várias as topologias existentes, nomeadamente:
Estrela/Star

Este tipo de topologia ganhou terreno relativamente à topologia bus, principalmente devido à maior flexibilidade na alteração da estrutura da rede, sendo aquela que se utiliza em praticamente todas as redes Ethernet.

Une os computadores através de um hub central, do qual sai um cabo para cada máquina, formando assim uma estrela, que lhe dá o nome.

Vantagens

• Facilidade de modificação do sistema, já que todos os cabos ligam ao mesmo local;

• Baixa de um computador não afeta o resto da rede;

• Fácil detecção e isolamento de falhas;
• Simplicidade de protocolo de comunicação;
• Pode utilizar múltiplos tipos de cabo;
Desvantagens
• Maior comprimento do cabo para efetuar as ligações;
• Dificuldade em expandir o número de nós;
• Dependência do nó central, se este falhar, a rede fica inoperacional.

Anel/Ring

Na topologia em anel cada computador está ligado a outros dois ao longo de um circuito fechado. A informação circula num determinado sentido já pré-definido. Cada computador inclui um dispositivo de recepção e transmissão, o que lhe permite receber o sinal e passá-lo ao computador seguinte no caso de a informação não ser para ele.

As redes que usam esta topologia são designadas por Redes Token Ring. Os dispositivos utilizados neste tipo de rede tem de possuir uma certa inteligência para que, em caso de corte do anel, o hub consiga fazer um novo anel.

Vantagens
• Pequeno comprimento de cabo;
• Não são necessários armários de distribuição dado que as ligações são efectuadas em cada um dos nós;

• Funciona bem com muito tráfego.

Desvantagens

• A falha de um nó pode causar a falha de toda a rede;
• Dificuldade em diagnosticar falhas;
• Dificuldade em reconfigurar a rede;
• Tipicamente mais cara do que a topologia estrela.

Malha/Mesh

Cada par de componentes liga-se e comunica diretamente a outros componentes da malha e cada componente é responsável por gerir sessões.

Vantagens

• Extremamente resistente a falhas;
• De fácil manutenção.
Desvantagens
• Topologia que requer mais cablagem;
• Tipicamente a topologia mais cara.
2.2.2.  Rede X.25

É uma arquitetura de comutação de pacotes (que correspondem dois tipos de serviços: Circuitos Virtuais e Datagramas) definida nas recomendações do ITU-T. A rede X.25 fornece uma arquitetura orientada à conexão para transmissão de dados sobre uma rede física sujeita a alta taxa de erros. A verificação desses erros é feita em cada nó da rede entre a origem e o destino (store and forward), o que acarreta alta latência e inviabiliza a rede X.25 para a transmissão de voz e vídeo. A rede pode dispor de mecanismos para:

• Manter a sequência (ordenação) de pacotes nó a nó;

• Reordenação de pacotes antes da entrega;
• Detecção (e eventual recuperação) de erros.

O uso da técnica de pacotes proporciona um elevado padrão de qualidade. A determinação do caminho mais adequado para transmissão de um conjunto de pacotes permite contornar situações adversas decorrentes de falhas no sistema ou de rotas congestionadas.
2.2.2.1. Níveis do Protocolo X.25
A recomendação X.25 do ITU-T define os protocolos na interface de acesso entre um equipamento terminal e uma rede pública de comutação de pacotes especifica três níveis que correspondem aos três níveis mais baixos do OSI:

     - Nível Físico - Interface física entre o equipamento terminal (DTE) e um equipamento de terminação de Rede (DCE).

     - Nível de ligação de dados (nível trama) - LAPB (Link Access Procedures Balanced) - Especifica os procedimentos para estabelecer, manter e terminar uma ligação de dados que permite o envio confiável de tramas, sujeito a mecanismos de controle de erros e de fluxo.

     - Nível de rede (nível pacote) - Oferece um Serviço de Circuitos Virtuais. Especifica os procedimentos para estabelecer, manter e terminar circuitos virtuais e transferir pacotes de dados nos circuitos virtuais.

2.2.3. Frame Relay

É uma arquitetura de rede de pacotes que adota o modelo de comutação de Circuitos Virtuais de alta velocidade e sucessor natural da rede X.25. Permite comutação mais rápida e mais eficiente que a comutação X.25 e ultrapassa algumas limitações dos serviços em modo pacote na RDIS.

O Serviço Frame Relay é orientado à conexão, oferecendo portanto uma interface do tipo Circuito Virtual. Os Circuitos Virtuais são identificados por um identificador de ligação de dados (DLCI) no campo de endereço das tramas.

Os Circuitos Virtuais podem ser de dois tipos: 

Comutados (SVC – Switched Virtual Circuits)

     - Os circuitos virtuais comutados (chamadas virtuais) são estabelecidos e terminados por meio de procedimentos de sinalização.
Permanentes (PVC – Permanent Virtual Circuits)
     - Os circuitos virtuais permanentes são estabelecidos por meio de procedimentos de gestão.

2.2.3.1. Caracteristicas do Frame Relay

– Procedimentos de sinalização de nível 3 em canais lógicos separados;

– Multiplexagem e comutação de circuitos virtuais no nível 2;
– Ausência de controle de erros e de fluxo nó-a-nó;
– Controle de erros e de fluxo extremo-a-extremo.
2.2.3.2. Parâmetros de tráfego 

AR – Access Rate
     
     - Capacidade do canal físico para acesso ao serviço;
     - O débito instantâneo do utilizador é limitado pela capacidade do canal de acesso.
CIR – Committed Information Rate

     - Débito médio na interface de acesso que a rede deve garantir em condições normais;
     - CIR é definido num intervalo T (tipicamente da ordem de 1 segundo) não diretamente especificado.
Bc – Committed Burst Size

     - Máxima quantidade de informação que a rede aceita transferir em condições normais durante um intervalo T, indiretamente definido pela relação Bc = CIR * T;
     - É possível transmitir um burst máximo Bc com débito instantâneo AR, desde que o valor médio do débito (em qualquer intervalo T) não exceda CIR;
     - O tráfego é sujeito a policiamento pela rede em janelas de observação contínuas de duração T;

     - A geração de tráfego conforme (shaping) e o respectivo policiamento podem ser realizados com um mecanismo de controle do tipo Token Bucket.
Be – Excess Burst Size

     - Máxima quantidade de informação (para além de Bc) que a rede transmite condicionalmente durante um intervalo T; Be = EIR * T, sendo EIR a Excess Information Rate;
     - Tráfego que num período T exceda Bc + Be é descartado incondicionalmente.
2.2.3.3. Vantagens e limitações do Frame Relay

- O serviço Frame Relay não garante total confiabilidade na transferência de dados, uma vez que tramas descartadas devido a erros de transmissão ou congestionamento não são recuperadas pela rede;

O impacto deste efeito é limitado pela elevada confiabilidade dos sistemas de transmissão digital e por mecanismos de prevenção de congestionamento.
- O aumento da capacidade de comutação resultante da redução de overheads protocolares e de processamento tem como consequências o aumento do débito (throughput) possível (total e por circuito virtual) e a redução do tempo de atraso (latência) na rede.
• O serviço Frame Relay combina assim as vantagens da comutação de circuitos dedicados com as vantagens da comutação de pacotes, podendo esta ser realizada a muito alta velocidade (tipicamente até cerca de 45 Mbit/s).

2.2.4. Rede ATM (Asynchronous Transfer Mode)

É uma tecnologia de rede (que adota também o modelo de comutação de Circuitos Virtuais) usada para WAN (e também para backbones de LAN), suporta a transmissão em tempo real de dados, de voz e vídeo. A unidade de transmissão e comutação designa-se por Célula. A topologia típica da rede ATM utiliza-se de switches que estabelecem um circuito lógico entre o computador de origem e destino, deste modo garantindo alta qualidade de serviço e baixa taxa de erros.

Diferentemente de uma central telefônica, a rede ATM permite que a banda excedente do circuito lógico estabelecido seja usada por outras aplicações. A tecnologia de transmissão e comutação de dados utiliza a comutação de células como método básico de transmissão, uma variação da comutação de pacotes onde o pacote possui um tamanho reduzido. Por isso, a rede ATM é altamente escalável, permitindo velocidades entre nós da rede como: 1.5Mbps, 25Mbps, 100Mbps, 155Mbps, 622Mbps, 2488Mbps (~2,5Gbps), 9953Mbps (10Gbps).

2.2.4.1. Camada ATM

As principais funções da camada ATM são a multiplexagem e a comutação de células de diferentes conexões virtuais.

Células de uma mesma conexão transportam um identificador comum, que tem significado local em cada interface e que, por essa razão, é normalmente alterado no processo de comutação.

O identificador de conexão é estruturado em duas partes:
• VPI – Virtual Path Identifier
• VCI – Virtual Channel Identifier
O conceito de Caminho Virtual (VP – Virtual Path) permite agrupar Canais Virtuais (VC – Virtual Channels), que podem ser comutados em conjunto.

2.2.4.2. Multiplexagem e comutação em ATM

É inerente ao modo de operação do ATM que a ocupação de células de um circuito virtual seja irregular (assíncrona), não obedecendo a um padrão pré-definido.
A multiplexagem e comutação de células ATM origina variações de débito e atraso que dependem por um lado do próprio padrão de tráfego submetido em cada circuito virtual, mas também da disponibilidade de recursos.

A importância das variações instantâneas do débito e do atraso depende dos requisitos de Qualidade de Serviço (QoS). A existência de tráfego com débito variável possibilita a exploração de Multiplexagem Estatística.

• A multiplexagem estatística permite aumentar a eficiência na utilização de recursos;
• A multiplexagem estatística aumenta a probabilidade de conflitos no acesso a recursos, originando situações de sobrecarga que agravam os atrasos e podem mesmo originar perdas (overflow de buffers).

2.2.4.3. QoS em redes ATM

Parâmetros de Qualidade de Serviço

- Cell Loss Ratio (CLR) - Definido para cada conexão pela relação:
     
     Nº de células perdidas / Nº total de células transmitidas
- Maximum Cell Transfer Delay (maxCTD) - O valor especificado por conexão é o percentil (1 - α) de CTD, isto é p (CTD > maxCTD) < α.

     Para serviços de tempo real, células cujo atraso exceda um certo limite são consideradas como perdidas (inúteis).

- Peak-to-peak Cell Delay Variation (peak-to-peak CDV)
     Habitualmente designado por Delay Jitter - É a diferença entre o maxCTD e o valor das componentes fixas do atraso (que determinam o atraso mínimo).
2.2.4.4. Funções de Controle de tráfego
O ATM Forum identificou um conjunto de funções genéricas de Controle (Gestão) de Tráfego, que deverão ser suportadas em diferentes elementos de rede – equipamento terminal, nós de acesso e nós internos da rede.

- Connection Admission Control – CAC
- Feedback Control

- Usage Parameter Control – UPC

- Cell Loss Priority Control
- Traffic Shaping
- Network Resource Management
- Frame Discard
2.3. Outros protocolos usados nas WAN
DSL (Digital Subscriber Line)

Permite tráfego de alta capacidade usando o cabo telefônico normal entre a casa ou escritório do assinante e a central telefônica. Possui dois modos básicos: ADSL e HDSL.
ADSL (Asymmetric DSL)
O ADSL compartilha uma linha de telefone comum, usando um faixa de frequência de transmissão acima daquelas usadas para a transmissão de voz. É a variação do protocolo DSL onde a capacidade de transmissão é assimétrica, isto é, a banda do assinante é projetada para receber maior volume de dados do que este pode enviar. Serviço mais adequado ao usuário comum que recebe dados da internet.

HDSL (High-Bit-Rate DSL)
O HDSL fornece um enlace de alta taxa de transmissão de dados, tipicamente T1, sobre o par trançado comum, exigindo a instalação de pontes e repetidores. Esta variação do protocolo DSL onde a capacidade de transmissão, a banda do assinante, tem a mesma capacidade de envio e recebimento de dados. Serviço mais adequado ao usuário corporativo que disponibiliza dados para outros usuários comuns.