VoIP (Voice over IP) usa o protocolo IP para transmitir voz como pacotes de dados sobre uma rede IP. Desta forma, um sistema VoIP pode ser implantado em qualquer rede que use o protocolo IP (Internet Protocol) como em Internet, intranets e redes locais.
Neste tutorial vamos utilizar um servidor SIP grátis, onde teremos uma central de PABX IP completa e funcionando. Existem diversas distribuições com esta finalidade de transformar um simples computador em um PABX IP.
O aplicativo que iremos utilizar é o
Asterisk e a distribuição
Trixbox, um servidor SIP (Session Initiation Protocol), que é o protocolo que faz toda a sinalização de todo o sistema.
Para trafegar os dados (pacotes contendo voz), o protocolo usado é o UDP (User Datagram Protocol), este protocolo é ideal para aplicações em tempo real, como é o caso da telefonia IP, sem se preocupar com a correção dos pacotes, já que não demanda tempo para correções e assim gerar atrasos na entrega dos pacotes.
No SIP, podemos configurar o servidor para funcionar de duas formas, sendo uma o servidor apenas faz a conexão e sinalização e depois, apenas monitora em intervalos a conversação, com isso, o processamento e banda no servidor é baixíssimo, já que a parte pesada que são os pacotes de dados contendo o áudio não passam pelo servidor e funcionam ponto a ponto.
Este modo é também chamado como SIP puro, conforme ilustração abaixo:
Sequência de sinalização
- O telefone IP origem envia um convite através de uma mensagem com o método INVITE que é entregue ao servidor SIP, em seguida, o servidor SIP manda essa mensagem para o telefone IP destino;
- Se for possível haver comunicação, acontece a negociação, inclusive é nesta fase que é feita a escolha do codec. O telefone IP destino responde com uma mensagem de OK para o servidor SIP, que entrega essa mensagem para o telefone origem;
- O telefone IP origem envia uma mensagem de ACK (Acknowledge) reconhecimento para o servidor SIP, que envia para o telefone destino sinalizando que ambos podem se comunicar;
- Começa então a comunicação de dados RTP, que contém voz e não há mais tráfego ou processamento no servidor SIP. O servidor SIP verifica em tempos determinados se a conexão ainda está ativa, caso a conexão não esteja mais ativa entre os interlocutores, o servidor SIP finaliza a chamada deixando ambos os telefones IP disponíveis para novas chamadas.
A outra configuração é da voz passando pelo servidor SIP (Asterisk), nesta configuração existem muito mais recursos possíveis de serem configurados no Asterisk, como:
- Chamadas em conferência;
- Gravação e monitoramento das chamadas em curso;
- Transferências de chamadas em curso;
- Codificação e decodificação de chamadas em que os terminais não têm os mesmos codecs. E neste caso, o servidor SIP faz e envia ao outro terminal usando um codec que tenha no terminal etc.
Como contra partida, este tipo de configuração ocupa muito processamento do servidor SIP e banda na placa de rede e, com isso, dependendo do número de usuários, isso pode afetar o desempenho do Asterisk. Na ilustração abaixo, podemos ver esta configuração:
O importante para estas aplicações é que o pacote chegue o mais rápido possível, mesmo que, para isso, alguns pacotes sejam perdidos no percurso. Como as aplicações de voz em tempo real são sensíveis ao atraso, fica claro que o protocolo UDP é o ideal para aplicações de telefonia IP ou VoIP.
O protocolo UDP é um protocolo não orientado à conexão, não confiável, porém, muito simples e rápido. Um pacote UDP é dividido em duas partes: o cabeçalho UDP e os dados em si ou
Payload, como também é conhecido.
Os dados de voz são transportados no campo Payload do cabeçalho UDP para serem encapsulados em um protocolo de transporte chamado RTP (RFC 1889) (RFC 1890), que pode ser bidirecional ou unidirecional, dependendo de como foi realizado a negociação para a transmissão dos dados, sempre existem dois canais de mídia, um para cada sentido da conversação em tempo real.
O transporte da voz por comutação de pacotes IPs deve levar em consideração que este tipo de serviço precisa ser capaz de fornecer um nível de qualidade muito semelhante aos serviços de voz tradicionais baseados em comutação de circuitos ou TDM (Time Division Multiplexing), sob pena de causar uma grande insatisfação nos usuários, já acostumados a essas tecnologias.
Por este motivo, qualquer tecnologia que objetive prover serviços de telefonia IP em uma rede de pacotes precisa ter mecanismos que garantam ou pelo menos aproximem essa qualidade dos sistemas PSTN já conhecidos pelos usuários.
O conceito de QoS (Quality of Service) refere-se à capacidade da rede em prover o melhor serviço para determinados tipos de tráfego sobre as mais diversas tecnologias e a priorização de pacotes é fundamental nessa tecnologia.
Conforme já comentado, a voz produzida pelo sistema de telefonia IP vai trafegar na mesma rede física de dados onde temos diversas estações de trabalho, e servidores também, trafegando dados nessa rede, e isto pode impactar a rede de telefonia IP (dependendo desse volume de dados na rede).
Para minimizar este problema, algumas medidas devem ser adotadas, como criar VLANs específicas para telefonia IP (voz) separando, assim, o tráfego de dados das estações de trabalho com os dados de voz, separando logicamente a rede e fazer uso de QoS, que é uma técnica de priorização de dados que, nesse caso, a rede de telefonia IP deve ter prioridade para trafegar dados, já que a voz é em tempo real, e não pode esperar; pois isso causaria problemas e desconforto ao ouvinte de uma chamada telefônica. Se fazendo uso de QoS minimizamos muito esse transtorno, principalmente dentro da rede LAN.
QoS é uma sigla que significa, em inglês: "Quality of Service" (Qualidade do Serviço, em tradução livre), que caracteriza-se por diferenciar entre tráfego e tipo de serviços, para que o usuário possa tratar uma ou mais classes de tráfego diferente das demais.
Um determinado serviço pode ter qualidade quando atender às exigências especificadas ou acordado anteriormente. A qualidade de serviço (QoS) nas redes IP é um aspecto operacional importante e fundamental para o desempenho nas aplicações que funcionam em tempo real, como na telefonia IP ou VoIP. Assim sendo, é importante o entendimento desta técnica para um melhor desempenho das aplicações na rede que realmente necessitam de que os dados de voz tenham prioridade dentro da rede.
Na ilustração abaixo, podemos observar o fluxo de dados com priorização de dados e sem priorização, são 3 dispositivos gerando tráfego, sendo uma estação de trabalho PC e dois aparelhos de telefones IPs, ambos gerando tráfego; e na saída do switch, podemos observar o comportamento COM QoS e SEM QoS, com QoS podemos observar que os dados da estação de trabalho só saem do switch quando os telefones IPs não tiverem enviando dados.
Existem várias técnicas para implementação de QoS, principalmente em se tratando de LANs, onde todos os equipamentos pertencem a uma mesma empresa, sobre as quais se tem controle maior para se configurar este tipo de serviço, e separando logicamente a rede de dados das estações de trabalho com a rede de dados de voz.
Para a implementação de VoIP em redes de longa distância WAN (Wide Area Networks), duas abordagem de QoS podem ser adotadas: Serviços Diferenciados (DiffServ) e Serviços Integrados (IntServ).
A abordagem IntServ procura garantir qualidade de serviço fim a fim, isto é, negociando e reservando recursos exclusivos para tráfego de voz, priorizando por toda a rota entre transmissor e receptor. Baseia-se no protocolo RSVP (Resource Reservation Protocol), e necessita que todos os roteadores nessa rota implementem esse protocolo. A abordagem DiffServ baseia-se na marcação de bits ToS (Type of Service) no cabeçalho do pacote IP para atribuição de diferentes níveis de prioridade para os pacotes.
Nas WANs privadas, as empresas têm a opção de adquirir e instalar roteadores que suportem DiffServ e/ou IntServ e, desta forma, garantir efetivamente uma excelente qualidade de serviços VoIP para seus usuários.
Outro problema a ser solucionado nas redes de telefonia IP, são os atrasos (delay) na entrega do pacote e o
jitter, que é a variação de tempo do próprio atraso, a latência e o atraso são parâmetros importantes para a qualidade de serviço das aplicações, ambos os termos podem ser utilizados na especificação de QoS, embora o termo "latência", seja convencionalmente mais utilizado para equipamentos e o termo atraso seja mais utilizado com as transmissões de dados.
Normalmente, entra nessa conta tempo de fila e de entrada e saída de cada equipamento por onde o pacote passa, tempo de processamento em cada equipamento e tempo de propagação no meio físico.
Em redes que vão trafegar telefonia IP, o recomendável é que este atraso não seja superior a 150mS, apesar de funcionar com tempos superiores fica perceptível a má qualidade nas ligações, tempos maiores que 400mS é considerado uma ligação "pobre", e pode causar desconforto ou até mesmo, dificultar a comunicação dos interlocutores.
Na tabela abaixo, temos uma demonstração com os tempos válidos apenas para o codec G729.
Componentes |
Atraso (Delay) |
Codificação e Empacotamento |
25mS |
Serialização (64 kbit/s) (20% overhead) |
3mS |
Dejitter ou Buffer de Jiiter |
50mS |
Para um serviço VoIP de alta qualidade, o atraso ponto a ponto em uma única direção deve ser menor que 150mS, ou seja, o atraso na rede deve ser menor que 75mS (150mS menos 75mS do budget do codec G729).
Para outros codecs, deve ser observado que, quanto maior a compactação, maior será seu tempo de processamento, por exemplo, para o codec G723 temos um tempo de processamento ainda maior e, portanto, a rede deve ter um atraso ainda menor, em torno de 50mS.
Pior que o simples atraso ou delay, é o jitter, que é um outro parâmetro importante para a qualidade de serviço que causa não somente uma entrega com periodicidade variável, como também a entrega de pacotes fora de ordem.
O problema dos pacotes fora de ordem, neste caso, como estamos falando de UDP, estes pacotes são descartados, já que é conexão não orientada, mas para essa finalidade de voz é perfeitamente aceitável.
Para tentar reduzir o jitter, uma técnica adotada é fazer o uso de buffer, que é uma área de armazenamento que vai enfileirando os dados, e quando atinge um valor previamente determinado, é enviado ao ouvinte. Esta técnica ajuda, mas mesmo assim não resolve completamente, o jitter é um dos piores inimigos quando falamos de aplicações que funcionam em real time como o VoIP.