# Redes de computadores/Comutação de circuitos e de pacotes

Comutação segundo o dicionário Michaelis significa permutação, substituição. Em computação, a Comutação de circuitos e pacotes é utilizada, por exemplo, em sistemas de comunicação onde o tráfego é constante.
Uma imagem sobre comutação pode ser encontrada neste link.
Autor: David Sudjiman
Website: davidsudjiman.info.

## Histórico

Inicialmente as redes comutadas surgiram por uma necessidade da área de telecomunicações. Com o surgimento e ampliação das redes telefônicas, houve a necessidade de interligar os pontos. A princípio eram interligadas uma a uma, mas esta opção gradativamente tornou-se inviável devido à grande quantidade de fios exigida.
Iniciou-se então a comutação manual onde cada telefone era interligado a uma central com um telefonista e este era encarregado de transferir a ligação. Porém, era também inconveniente pois além de ter a demora natural do operador, ainda perdia-se a privacidade, uma vez que o operador poderia ouvir toda a conversa.
Observando a necessidade de um mecanismo mais eficiente, em 1891 foi criada a primeira central telefônica automaticamente comutada. Para seu funcionamento, foi necessária a adaptação da aparelhagem. Os telefones passaram a ter o sinal decádico, que representavam os números de 0 a 9. A interpretação dos sinais pelos comutadores gerava uma cascata interligada destes até o estabelecimento da ligação.
Entre 1970 e 1980 houve o desenvolvimento e implantação de centrais telefônicas eletrônicas, ou seja, os comutadores operados eletromecanicamente foram substituídos por sistemas digitais operados computacionalmente, tudo graças às tecnologias de digitalização da voz.
A expansão dos conceitos para transmissão de dados foi quase imediata, gerando os paradigmas de comunicação comutada existentes.
Tambem se divide em sub-etapas:
* Estabelecimento do circuito
* Conversação
* Desconexão do circuito

## Comutação por Circuitos

A comutação por circuitos exige que as estações comunicantes possuam um caminho dedicado exclusivo, que pode ser estabelecido de quatro maneiras:
* Circuito físico
* Frequency Division Multiplexing (FDM - multiplexação por canais de frequência)
* Time Division Multiplexing (TDM - multiplexação por canais de tempo)
* Statistical Time Division Multiplexing (STDM - multiplexação estatística por canais de tempo)
Este paradigma de comunicação é executado em três passos distintos e específicos:
* Estabelecimento do circuito
* Troca de informações
* Desconexão ponto a ponto
Caso uma destas etapas tenha problemas, há quebra da conexão. Um exemplo claro é uma ligação telefônica, onde há a necessidade de um canal dedicado em ambos terminais. Outro exemplo é a internet discada.

### Circuitos físicos

As vantagens dos circuitos físicos são a exclusividade do canal que agiliza a velocidade de troca de informações e consequentemente o tempo. A contrapartida é um método oneroso, que exige manutenção individual constante, com uso excessivo de fiação. É interessante seu uso somente para pequenas aplicações em distâncias curtas, pois sua expansão é trabalhosa.

### FDM - Frequency Division Multiplexing

Imagem de FDM disponível no Flickr.
A divisão em canais de frequencia cria circuitos virtuais com banda mais estreita que o canal do comutador com a rede, de forma que a soma de todos circuitos é igual ou menor à banda do comutador.
A grande vantagem é o uso de menos fiação para promoção do serviço, porém o problema é a rápida saturação dos canais. Conforme a figura ilustra, os canais necessitam uma banda de comunicação e uma faixa de segurança. Outro problema está na expansão do sistema: será necessário reconfigurar todos os terminais para as novas larguras de banda.
Em geral, utiliza-se FDM em sinais analógicos.

### TDM - Time Division Multiplexing

Imagem de TDM disponível no Flickr.
A divisão de canais no tempo gera circuitos virtuais entre os terminais e o roteador. Este possui um ciclo de tempo em que deve se comunicar com todas estações. Para tanto, o tempo é alocado igualmente para cada terminal comunicar-se.
Este método exclui parcialmente o problema da expansibilidade, já que não exige reconfiguração, apenas disponibilidade de recursos. A disputa ocorre somente no momento da conexão, após estabelecida não há problemas. O grande problema no entanto é que, conforme a rede aumenta, os recursos são alocados e o tempo de resposta aumenta aritmeticamente.
Em geral, utiliza-se TDM em sinais digitais.

### STDM - Statistical Time Division Multiplexing

Imagem de STDM disponível no Flickr.
O método STDM funciona identicamente o método TDM, porém soluciona parcialmente o problema do tempo de resposta. Ele utiliza métodos estatísticos e diferencia as estações ativas das ociosas. O segundo passo é alocar recursos somente às estações ativas, e escutar as ociosas, de forma que não seja perdida a conexão com as mesmas. No entanto, quando todas as estações estão ativas o tempo de resposta se mantém igual ao TDM.
Este procedimento foi denominado Fast Connect Circuit Switching. Um problema do STDM é a perda de conexão. Caso uma estação ociosa fique ativa e o roteador não possua recursos livres, a conexão é perdida.

## Comutação por Pacotes

A comutação por pacotes não exige o estabelecimento de um circuito dedicado para a comunicação, o que implica menores custos com meios físicos. Este paradigma utiliza a ideia da segmentação de dados em partes discretas, compostas de cabeçalho (com bits de verificação de integridade), corpo e rodapé (onde é realizada a verificação cíclica de redundância), que são denominados pacotes(ou outros nomes, como quadro, bloco, célula, segmento, dependendo do contexto).
Neste tipo de comutação é usada a multiplexação estatística (STDM). Diferentemente do paradigma rival (por circuitos), neste o tempo é alocado para os terminais mais ativos prioritariamente, porém sem o risco da quebra da conexão.
Um exemplo são as conexões Ethernet, que comutam por pacotes e não perdem conexão.
Os comutadores de pacotes utilizam uma das três técnicas seguintes:
* Cut-through(corte de caminho)
* Store-and-forward(armazena e passa adiante)
* Fragment-free(livre de fragmentos)

### Cut-through

Este comutador recebe e armazena apenas parte do cabeçalho (6 primeiros bytes), para saber qual receptor do pacote, e já encaminha os dados diretamente. A princípio, há um enorme ganho em velocidade. No entanto, por não haver nenhuma verificação de erros (neste caso a verificação ocorre nos terminais), frequentemente é necessário o reenvio do pacote. Na prática é muito pouco utilizado sozinho.

### Store-and-forward

O comutador recebe e armazena os dados até possuir completamente o pacote em um buffer de entrada. Após, efetua verificação por erros cíclicos e outros, passa o pacote para o buffer de saída e retransmite o pacote para o outro comutador ou o terminal. Caso ele encontre algum erro, descarta o pacote.
Este tipo de comutador é mais robusto e eficiente, porém devido ao grande número de requisições geralmente ocorrem muitos choques de pacotes a atrasos. A implementação mista do store-and-forward e do cut-through é a configuração mais utilizada.

### Fragment-free

O funcionamento deste comutador é muito semelhante ao cut-through, porém ele armazena os 64 primeiros bytes antes de enviar. Esta implementação é baseada em observações estatísticas: a grande maioria dos erros, bem como todos os choques de pacotes, ocorrem nos primeiros 64 bytes.
O deslocamento dos pacotes é nó a nó (e não fim a fim como na por circuito), sendo que cada passagem para o próximo nó é denominada hop. A cada hop o terminal ou comutador transmite apenas um pacote e aguarda para transmitir o restante.
Há basicamente duas implementações: circuitos virtuais e datagramas.

### Circuitos Virtuais

Cada roteador grava em uma tabela seus circuitos virtuais (VCs) e os identifica unicamente (para este comutador, dois roteadores podem referenciar um terceiro por identificadores diferentes). As tabelas são montadas por ordem hierárquica, ou seja, dos mais abrangentes para os menos.
Após a identificação e montagem das tabelas, é necessário primeiramente o comutador estabelecer um circuito para então iniciar a transferência de dados. O circuito implica que todos os pacotes seguirão o mesmo caminho durante a conexão. Há uma grande desvantagem neste método, pois ele é vulnerável a pontos cegos. Caso um comutador saia do ar e este faça parte do circuito virtual há uma perda da conexão.
O funcionamento assemelha-se ao sistema de uma transportadora, onde são definidas rotas para a entrega de mercadorias.

#### SVC Switched Virtual Circuit

O circuito é estabelecido dinamicamente, sob demanda, e encerrado assim que finda a transmissão. Seu estabelecimento segue os mesmos passos de uma comutação por circuitos.
A alocação temporária de banda permite a disponibilidade quase constante de recursos, uma vez que assim que concluída a comunicação é encerrada a conexão. No entanto, há um alto consumo de banda no estabelecimento e no encerramento dos circuitos, pois é necessário percorrer todos os nós.

#### PVC Permanent Virtual Circuit

Nesta implementação,permanentemente, ficando dedicado à transferência de dados. Os circuitos virtuais permanentes (PVC) são bastante utilizados por fornecedores de serviços públicos ATM para criar e estabelecer uma complexa infra-estrutura baseada em ATM para as respectivas redes internas. Em muitos casos, a infra-estrutura interna ATM da rede é construída utilizando PVCs com ligações ponto a ponto que ocorrem em circuitos virtuais comutados (SVC, switched virtual circuit).
Há também um menor consumo de banda no estabelecimento e encerramento da conexão, no entanto a alocação permanente satura a rede por garantir banda e tráfego constantes.
E é muito utilizada em aplicações que exigem fluxo constante de informações.

### Datagramas

A implementação por datagramas permite aos pacotes serem enviados por caminhos diferentes. A cada pacote é determinada uma rota individual, com base na tabela de roteamento presente em cada comutador e no endereço de destino. Não é garantida a chegada dos pacotes em ordem, sendo necessário a reorganização após a chegada.
A transmissão dos dados inicia-se imediatamente após hop, e devido ao fato de cada pacote possuir um caminho distinto os roteadores(comutadores) ficam menos sobrecarregados, além de prevenir a perda de conexão.
O funcionamento é semelhante a uma viagem, sabendo o destino e partindo do mesmo local muitos carros podem fazer diversas rotas e chegarem, sem garantias de ordem de chegada.

### Vantagens

* Melhor uso do meio de transmissão
* Melhor eficiência de linha
* Melhora a confiabilidade da transmissão de dados
* Pode não haver tempos de estabelecimento e desconexão de circuito(datagramas)
* Baixo tempo de transmissão desde a origem ao destino
* Os erros não precisam chegar no terminal para serem recuperados
* Possibilidade de armazenar pacotes (transmissão e recepção assíncronos)
* Alteração de encaminhamento em caso de congestionamento
* Possibilidade de aceitar pacotes em situações de trafego intenso, com posterior envio

### Desvantagens

* Disputa por banda nó a nó
* Congestionamento excessivo (choque de pacotes e atraso)
* Sem garantia de banda
* Tempos de atraso entre origem e destino variáveis no tempo
* Possibilidade de chegada de pacotes ao destino por ordem diferente da de emissão (datagramas)

## Comutação de circuitos vs. Comutação de pacotes

A comutação de circuitos e a comutação de pacotes diferem em diversos aspectos. Nesta seção, faremos uma comparação entre estas duas técnicas, no que diz respeito a configuração de chamada, forma de envio de dados/pacotes, suscetibilidade a falhas, congestionamento, transparência e tarifação.
Na comutação de circuitos, é necessário estabelecer, previamente, um caminho fim-a-fim, para que os dados possam ser enviados. Isso garante que, após a conexão ter sido efetuada, não haverá congestionamento e os dados serão enviados de forma ordenada. Entretanto, configurar um caminho com antecedência provoca reserva e provável desperdício de largura de banda. Esse tipo de comutação não é muito tolerante a falhas, sendo que na inatividade de um switch, os circuitos que o utilizam serão encerrados. Os bits fluem continuamente pelo fio e a transmissão de dados é feita de forma transparente, ou seja, o transmissor e o receptor determinam a taxa de bits, formato ou método de enquadramento, sem interferência da concessionária de comunicações, o que proporciona, por exemplo , a coexistência de voz, dados e mensagens de fax no sistema telefônico.
Já na comutação de pacotes, não é necessário estabelecer uma comunicação previamente. Assim sendo, diferentes pacotes poderão seguir caminhos distintos, dependendo das condiçoes da rede no momento em que forem enviados, não chegando, necessariamente, ao receptor de forma ordenada. Existe, entretanto, a possibilidade de atraso/congestionamento em todos os pacotes, uma vez que não é reservada, antecipadamente, largura de banda para a transmissão. Esta técnica é mais tolerante a defeitos e, em caso de inatividade de um switch, os pacotes são roteados de modo a contornar os inativos. É utilizada a transmissão store-and-forward, na qual os pacotes são reservados na memória de um roteador, e depois de inspecionados em busca de erros, são enviados ao roteador seguinte. Por fim, essa transmissão não se dá de forma transparente sendo que os parâmetros básicos, tais como taxa de bits, formato e método de enquadramento, são determinados pela concessionária de comunicações. No sistema como um todo, a comutação de pacotes é mais eficiente que a comutação de circuitos.
Após estas comparações, podemos chegar a seguinte conclusão: de uma lado temos um serviço garantido, porém com desperdício de recursos (comutação de circuitos); de outro, temos serviço não garantido, porém com velocidade maior e sem desperdício de recursos (comutação de pacotes).

## Referências

* ↑ w:Comutação_de_circuitos
* ↑ w:Comutação_de_pacotes
* ↑ http://www.davidsudjiman.info/2006/02/06/fdm-tdm-and-stdm/
* ↑ http://hsw.uol.com.br/questao525.htm
* ↑ http://informatica.hsw.uol.com.br/lan-switch8.htm
* ↑ http://informatica.hsw.uol.com.br/lan-switch8.htm
* ↑ http://informatica.hsw.uol.com.br/lan-switch8.htm
* ↑ KUROSE,J. F.; ROSS,K. W. Redes de Computadores e a Internet - Uma abordagem top-down, 3ª Edição
* ↑ http://fatosdigitais.wordpress.com/2007/07/24/redes-wan-basico/
* ↑ http://fatosdigitais.wordpress.com/2007/07/24/redes-wan-basico/
* ↑ http://pt.wikipedia.org/wiki/Roteador
* ↑ TANENBAUM, A. S. Redes de Computadores; 4ª edição