# Introdução às 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.

## 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 (Multiplexação por Canais de Frequência)

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 (Multiplexação por Divisão de Tempo)

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 (Multiplexação Estatística por Canais de Tempo)

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, costas 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 (Corte de Caminho)

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 (Armazena e Avança)

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 (Livre de Fragmentos)

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 tranmissã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).