Codificação e Transmissão de Voz na Internet: um Estudo de Caso sobre o Software SKYPEs Rogério B. Lourenço Escola de Engenharia – Universidade Federal Fluminense (UFF) Rua Passos da Pátria, 156. Bloco D, 5o Andar – 24.210-240 – Niterói – RJ – Brasil Laboratório de Pesquisas em Comunicação de Dados Multimídia Mestrado em Telecomunicações [email protected] Resumo. Esta monografia tem como motivação o entendimento técnico do software mais popular de telefonia em redes de pacotes, o Skype, onde o grande desafio é compreender os fatores técnico-econômicos que fazem da aplicação de voz sobre IP (VoIP) a mais utilizada no mundo atualmente. O objetivo é apresentar suas características tais como: o processo de login e estabelecimento de chamadas, sua pretensão em trabalhar com o protocolo NAT e seu comportamento quando na utilização de firewalls nas redes domésticas ou empresariais, abordaremos seus codificadores de voz (codecs), seu acesso a banco de dados dos usuários, além da abordagem de transferência de mídia e conferência. Ao longo de todo o texto estaremos fazendo breves comparações com seus poderosos concorrentes, destacando MSN e Yahoo Messenger para avaliarmos imparcialmente a melhor qualidade de voz entre eles e apresentaremos uma conclusão a partir da análise desenvolvida no decorrer do texto. No apêndice A podem ser encontrados dados práticos dos testes realizados. 1. Skype: Um Caso de Sucesso Skype é uma aplicação VoIP baseada em redes Peer-to-Peer (P2P), desenvolvida pelo Skype Technologies S.A.[25]. A companhia foi fundada por Janus Friis e Niklas Zennstrom, os mesmos empresários que desenvolveram o software de troca de arquivos KaZaa, em 2003. Porém, ao contrário de seu antecessor, que gerava receita através de anúncios e propagandas, Skype não tem a intenção de atuar da mesma forma, sendo completamente livre de propagandas, e hoje vende serviços de chamadas telefônicas através da integração da rede de dados com a telefonia convencional analógica (PSTN) e telefonia móvel, sob contratos de interconexão com as operadoras locais, de longa distância e celulares, utilizando um provedor proprietário de telefonia IP como gateway para integração entre as operadoras. Estes serviços são conhecidos como SkypeOut[22], que permite através da compra de créditos, realizar ligações do seu micro para qualquer telefone do mundo, fixo ou móvel, com tarifas extremamente reduzidas, o SkypeIn[22], o qual fornece um número de telefone fixo, através do pagamento de uma pequena anuidade, para que os usuários possam receber no Skype chamadas originadas de telefones comuns e ainda há o serviço pago de secretária eletrônica. As ligações de micro para micro são gratuitas. O modelo de computação Peer-to-Peer bem característico da rede Skype e amplamente implementado na Internet possui várias diferenças em relação ao esquema cliente-servidor. No padrão de comunicação cliente-servidor o fluxo de transmissão é assimétrico, pois a maioria do tráfego ocorre no sentido servidor-cliente, sendo o cliente, na maioria das vezes, um participante passivo na transmissão. Nos sistemas P2P todos os integrantes da rede possuem o mesmo programa (código-fonte) e cada membro da rede pode atuar como cliente e servidor de recursos. As redes P2P são sistemas distribuídos sem controle centralizado, nos quais o programa que é executado em cada integrante da rede é equivalente em funcionalidade. Os participantes do sistema Peer-to-Peer podem agir como clientes ou servidores de recursos. Eles constroem uma rede virtual sobre a rede física (geralmente a Internet) e colaboram uns com os outros em tarefas específicas, como o compartilhamento de arquivos, responsável pela ampla popularização dos softwares Napster e Kazaa. Assim a rede P2P de telefonia tornou-se um próximo passo natural da evolução e teve um impacto significante com a empresa Skype, que foi fundada para desenvolver a primeira rede de telefonia P2P. Esse tipo de computação representa uma alternativa ao modelo cliente-servidor largamente conhecido e possui um potencial ainda não explorado em sua totalidade. Cada tipo de aplicação P2P possui seus próprios requisitos de segurança. Entre os requisitos fundamentais de segurança, está o controle de acesso, permitindo que cada nó ou comunidade coloque em prática sua própria política de autorização. Assim, cada participante pode estabelecer quem são as entidades que podem acessar os seus recursos e quais as condições que elas devem cumprir para terem esse direito. Além dos requisitos de segurança, o êxito de uma rede Peer-to-Peer depende de fatores como o protocolo de comunicação utilizado, a possibilidade de operar em ambientes protegidos como, por exemplo, aqueles que adotam firewalls, a arquitetura de distribuição empregada que pode ser totalmente descentralizada ou não, o tempo decorrido desde uma solicitação até o recebimento de respostas, o número de usuários participantes do sistema e o suporte a ambientes que utilizam a tradução de endereços de rede (NAT) para possibilitar a comunicação entre elementos com endereços IP privados e endereços IP válidos na Internet. 1.1. Arquitetura e Conexão Todas as características das redes P2P são válidas para o Skype, apesar de haver certas particularidades em alguns aspectos que fazem do software uma rede P2P não totalmente pura, isto é, sua infra-estrutura conta com um servidor central de autenticação para validação de usuários na rede e atualizações de software, que são assinados digitalmente pela chave privada RSA1 embutida em seus executáveis. Outra característica de sua arquitetura é ser composta por apenas dois tipos de nós sendo que os próprios clientes rodam localmente a aplicação, chamado de cliente Skype (CS), onde alguns deles podem atuar como super usuários ou super nós (SN), que podem ser entendidos como ponto de borda da nuvem Skype, atuando como proxy para os nós/usuários comuns da rede, como pode ser observado na Figura 1. Para atuar com estas características, os nós devem possuir alguns pré-requisitos, como, por exemplo, possuir um endereço IP público, não possuir restrições quanto a firewall, CPU e memória suficientes e uma determinada banda mínima de acesso à Internet, entre outras. Outra importante entidade da rede é o servidor de login Skype, que é único, se constituindo no único elemento de rede centralizado e localizado em Amsterdam, Holanda. Quando recursos como SkypeIn ou SkypeOut são utilizados, a comunicação passa necessariamente através de servidores localizados em vários países e áreas de discagem. Figura 1: Ilustração da arquitetura de rede Skype. O processo de conexão é simples e se encontra ilustrado no Apêndice A. A aplicação cliente (CS) efetua o login na rede se registrando no servidor de logins, cujo endereço foi informado por outros hosts pertencentes à rede. _____________________________________________________________________________________________ RSA 1 A criptografia RSA é um sistema de criptografia onde a chave de codificação é pública, permitindo então que qualquer pessoa codifique mensagens, e a chave de decodificação é privada. A impossibilidade de se quebrar o sistema de criptografia RSA ocorre em razão da não existência de algoritmos eficientes para o processo de divisão de inteiros. Atualmente são utilizados números com 150 algarismos, para os quais, com a capacidade de computação atual, o processo de fatoração levaria milhares de anos[30]. Por se tratar de uma rede descentralizada, após o login cada CS deve construir e manter atualizada uma tabela para identificar os super nós conhecidos, a esta tabela damos o nome de host cache (HC), que contém o endereço IP e o respectivo número da porta dos super nós que estiverem on line e está localizada no registro do sistema operacional2. Pelo menos uma entrada válida deve existir nos CS e um máximo de 200 entradas, caso contrário o CS não poderá se conectar a rede e irá reportar um erro do tipo login failure. Skype também mantém outra listagem local criptografada armazenada no registro do sistema operacional, que é a lista de contatos. Caso o usuário se conecte com sua conta em outro computador, ele terá que reconstruir manualmente sua lista de contatos, pois esta não se encontra armazenadas em servidores na rede. A estratégia de utilizar o máximo possível o hardware do usuário também pode ser entendida como um grande fator de sucesso, pois podemos perceber que a rede só é responsável pelas informações de login, ficando a cargo dos nós todo o processamento e armazenamento das informações. O seu suporte a redes locais com IPs não válidos e com firewall em seus roteadores são pontos importantes de seu funcionamento, onde as referências nos sugerem a utilização dos protocolos STUN[17] e TURN [18] ou variações instaladas localmente em cada nó e não ao uso de um servidor NAT. Isso acontece, pois o excesso de tráfego relacionados às informações de controle intercambiadas entre o cliente e o servidor NAT seria decisivo para a qualidade final da chamadas telefônicas, sem contar com as trocas devido ao refresh entre as conexões. 1.2. Protocolos e Codecs Em relação à codificação de suas chamadas, Skype utiliza codecs de banda larga e banda estreita, permitindo freqüências entre 50 – 8000 Hz. Podemos observar a utilização dos codecs iLBC[10], iSAC[15] e iPCM-wb[14] e Enhanced G.711[29] desenvolvidos pela empresa Global IP Sound [23], que é parceira do Skype e desenvolve codecs para diversos softwares e hardwares de diversos fabricantes mundiais, apenas o primeiro deles é padronizado. Skype decide qual codec utilizar automaticamente em tempo real de acordo com a disponibilidade de banda e condições de tráfego. Não há supressão de silêncio no principal codec do Skype (iLBC), conforme pudemos comprovar através dos testes práticos (Figura 13). _____________________________________________________________________________________________ 2 No sistema operacional Windows 98 a tabela host cache se localiza em HKEY_CURRENT_USER / SOFTWARE / SKYPE / PHONE / LIB / CONNECTION / HOSTCACHE. Seus protocolos da camada de transporte são o TCP para sinalização e TCP e UDP para o transporte de mídia, e portas distintas são utilizadas para trafego de sinalização e informação útil propriamente dita, sendo que esta última pode ser configurada pelo usuário na caixa de diálogo na aba de configuração do programa. Caso o usuário não configure, o CS define aleatoriamente o número da porta durante a instalação, diferentemente do protocolo SIP que possui portas TCP e UDP default e bem definidas. Além disso, o CS disponibiliza a porta 80 (HTTP) e a porta 443 (HTTPS) por default. Para a realização dos testes nesse trabalho, estas duas portas foram desabilitadas para fazer melhor a distinção e obter maior controle sobre a comunicação. 1.3. Funções As funções do Skype[7] podem ser classificadas em startup, login, procura de usuário, estabelecimento de chamadas e fim da conexão, além de transferência de arquivos e mensagens, sendo descritas a seguir. 1.3.1. Startup Quando o CS roda pela primeira vez depois da instalação, ele envia uma mensagem de requisição HTTP 1.1 GET para o servidor Skype. A primeira linha do pedido contém a palavra código installed. Os próximos startups serão apenas para verificar se há atualizações do programa, onde a primeira linha do comando GET passará a ter a palavra código getlatestversion. 1.3.2. Login O processo de login talvez seja a função mais crítica de todas as operações e a mais difícil de ser mapeada, como pode ser visto pelo Apêndice A. A autenticação ocorre, como sabemos, no servidor de login, sendo notificada a presença do nó na rede. Além disso, ocorre o processo de determinação do tipo de NAT e firewall que se encontra no lado do cliente e ainda, verifica-se todo o processo de descoberta dos nós da rede com endereços IP públicos que estão on line, isto é, os super nós, com objetivo dar continuidade a conexão com a rede Skype. A figura 2 representa um esquemático do processo de login. Primeiramente, a tabela HC se encontra vazia e logo após a primeira instalação o CS recebe uma atualização de endereços IP e pares de portas bem conhecidos dos super nós, para que o CS possa se conectar na rede. O CS tenta estabelecer uma comunicação através de pacotes UDP e caso não tenha resposta satisfatória, tenta se conectar através do protocolo TCP utilizando a mesma tabela inicial HC e seu endereço IP e sua porta 80 (HTTP). Em caso de nova falha, o CS tenta conectar-se através do IP contido em HC e porta 443 (HTTPS). O CS aguarda por mais 6 segundos e caso a conexão não seja estabelecida, todo o processo entra em loop por mais quatro vezes até que ao final a falha no login é reportada caso não ocorra sucesso, podendo esta falha ser devido ao fato de não haver uma tabela HC válida. No caso da utilização de um firewall, o CS pode estar bloqueado para tráfego UDP e habilitado para TCP. Mesmo assim, o programa irá funcionar normalmente, com a vantagem de não trocar pacotes UDP, reduzindo, portanto, o número de passos para efetuar a conexão e, conseqüentemente, o fluxo de bits. Figura 2: Diagrama de estados do algoritmo de login. A autenticação com o servidor de login não foi demonstrada. 1.4. Comunicação 1.4.1. Primeira Conexão Após inserir login e senha no programa, o CS estabelece a comunicação com o(s) super nó(s), a partir da tabela HC. O CS envia pacotes UDP para pelo menos quatro endereços de SN contidos na tabela HC, e os SN que responderem passam a trocar mensagens TCP com o CS, embora necessite de apenas um SN para manter a conexão. Após a troca de alguns pacotes TCP com o SN, o CS adquire o endereço do servidor de login, que também é bem conhecido 80.160.91.11, e cujo nome é ui.skype.com, localizado aparentemente em Amsterdam. Após o processo de validação de nome e senha, o CS mantém a conexão com o SN até que um dos dois encerre a sessão, caso o SN seja desconectado, CS estabelece outra conexão TCP com outro SN baseado em sua tabela HC. Esse processo é demonstrado no Apêndice A. Para clientes Skype que estejam inseridos em ambiente com NAT, todo o processo é transparente para o usuário e todo o processo de conexão segue as mesmas regras que clientes com IP válidos na Internet. Como a rede Skype é por definição muito dinâmica, CS deve manter atualizada sua “tabela de roteamento” ou tabela de SNs que estão on line. Para isso, após o processo de login, o CS envia pacotes UDP para um número em torno de 22 nós distintos e provavelmente atualiza sua tabela HC com aqueles nós que reponderam a solicitação, desde que sua conexão não esteja impedindo tráfego UDP devido a um firewall. 1.4.2. Busca de Contatos Outra funcionalidade que pode ser considerada importante no Skype é a busca de contatos, o que torna o software mais flexível e fundamental quando um usuário deseja procurar alguma pessoa que esteja cadastrada na rede pelo mundo, mesmo que esta esteja utilizando NAT. O Skype utiliza a tecnologia Global Index3 [16] (GI) para pesquisar novos usuários na rede, que se apresenta como capaz de localizar qualquer usuário conectado na rede nas últimas 72 horas. Para os clientes localizados em endereços públicos, são enviados pacotes TCP para seu SN, que informa inicialmente quatro outros SN que possam saber a localização do CS procurado. Desta forma, o CS se cominuca com estes quatro novos SNs através de mensagens UDP, caso a busca não seja bem sucedida, o SN que mantinha contato com o CS lhe envia oito novos SNs que possam conhecer o CS procurado, que por sua vez, pode não ser reconhecido por estes novos SNs. Então o SN envia outros SNs para o CS que está procurando seu contato até que o CS de destino seja alcançado ou a busca seja encerrada por timeout. A única diferença para CS protegidos por firewall e utilizando NAT é que as mensagens de busca são enviadas sobre TCP. O Apêndice A também apresenta o teste de busca de contatos. 1.4.3. Chamadas As chamadas são sempre criptografadas fim-a-fim, utilizando AES[19] (Advanced Encryption Standard) e chave de 256 bits. Skype mantém varias conexões abertas para a mesma chamada e determina dinamicamente a melhor conexão a ser utilizada naquele instante. Isso tem grande efeito na redução da latência, principalmente, e também na percepção da qualidade da voz na rede. _____________________________________________________________________________________________ 3 Global Index A tecnologia define uma rede multi-camadas onde super nós se comunicam de tal modo que todos os nós na rede têm o total conhecimento de todos os usuários disponíveis e recursos. Durante a conversação propriamente dita, as duas pontas da rede que possuem endereços válidos trocam informações TCP diretamente sem a presença do SN, assim como nas mensagens de sinalização. Dentre elas podemos citar mensagens de sincronização (SYNC) e reconhecimento (ACK). Caso necessite mudar de SN, mensagens UDP são enviadas. Nos casos em que um dos dois nós esteja utilizando NAT, as mensagens de voz e de sinalização não seguem diretamente entre os terminais, e ao invés disso, o nó chamador envia mensagens TCP de sinalização para um ou mais de um SN, que encaminha a chamada para o nó de destino também sobre TCP. Este SN também auxilia no encaminhamento dos pacotes de voz para o destino sobre UDP e vice-versa. Para o caso em que os dois nós utilizam NAT, o processo é análogo ao anterior. Também foi observado que mensagens de refresh são enviadas pelo CS sobre TCP a cada 60s quando o software estava sendo utilizado. O encerramento das conversações segue a mesma idéia da descrita no parágrafo anterior para nós em endereços públicos ou privados. 1.5. Segurança Outro fator importante é a questão da segurança em relação às contas de usuário, quando estes realizam chamadas destinadas a rede telefônica convencional ou mesmo entre a rede de pacotes e também no que se refere à transferência de arquivos. A segurança das chamadas tem muitos aspectos envolvidos e é difícil de ser analisada como um todo, pois o Skype não publica seu algoritmo de troca de chaves, seu protocolo e o básico do desenho de seus certificados. Outros fatores também influenciam, como a segurança da máquina que roda o software em relação a sua conexão com a Internet, a existência de programas do tipo spyware, o fato de que estamos utilizando redes não centralizadas, etc. Não podemos saber, portanto, a precisão e o grau de segurança e a que tipos de ataques a rede e a aplicação podem suportar. A segurança dos dados enviados sobre uma conexão criptografada depende de muitos fatores, incluindo o tipo de algoritmo de embaralhamento, como as chaves são determinadas e trocadas, como o algoritmo é implementado, o protocolo que transporta o algoritmo e sua implementação. Pesquisas acreditam que, através de analisadores de tráfego, uma combinação de protocolos é utilizada para o registro na rede, na busca de contatos on line e na própria chamada telefônica. Portanto, a conclusão é que o nível de segurança implementado pela Empresa pode ser pobre ou altamente complexo, principalmente porque não sabemos muito sobre seu protocolo de comunicação, diferentemente de outras aplicações VoIP que são bem conhecidas. Porém, ainda não há registros sobre clonagens de contas de usuários, e sabe-se que a segurança é um aspecto mais poderoso quando comparado com redes PSTN, entretanto são mais vulneráveis quando comparado com sistemas de VoIP sobre VPNs. Outras preocupações com relação às questões de segurança na implementação do software propriamente dito podem ser: o default do programa é guardar um histórico do áudio das conversas em arquivo; podemos saber quando outros usuários estão conectados a um dado instante por default; não se sabe ao certo se os SNs que encaminham as mensagens podem interceptá-las, pois o tráfego é processado localmente e por fim, os serviços SkypeIn e SkypeOut podem ser vulneráveis em pontos onde a chamada trafega pelas redes convencionais de telefonia, pois nestes pontos as chamada são desencriptadas. 1.6. Resiliência As redes de pacotes possuem uma extraordinária capacidade de se auto-recuperarem de diversos tipos de falhas, devido a seu imenso conjunto de nós e a rápida convergência dos algoritmos de roteamento. Em muitos casos a conexão no Skype pode ser restaurada mais rapidamente que nas redes de telefonia existentes. A rede Skype mantém seu serviço mesmo em constantes mudanças físicas e lógicas da rede, independente da localização e do endereço IP do usuário. 1.7. Outros Serviços Skype permite que um usuário esteja conectado em sua conta em mais de uma máquina simultaneamente, assim as chamadas para este usurário são roteadas para todas as localidades, e ao ser atendida em um determinado terminal, as chamadas para os demais pontos de login são canceladas. No caso das mensagens instantâneas, o processo é o mesmo. Ao contrário do MSN Messenger, que possui um sistema de registro que permite o login em apenas um computador. 1.7.1. Chamada em Espera A chamada em espera é mais um recurso do software, tecnicamente CS envia mensagens periódicas sobre TCP para SN para manter a conexão. 1.7.2. Audioconferência A audioconferência suporta até quatro pessoas conversando ao mesmo tempo em qualquer lugar do mundo com acesso Internet e o Skype, que utiliza codecs de banda estreita e banda larga, sendo este último utilizado com sérias restrições pelo software, entraremos em detalhe a partir da próxima seção. Este serviço também é gratuito, mas não foi motivo de teste deste documento. 2. CODIFICAÇÃO DE VOZ COM iLBC Com o objetivo de alcançar uma baixa taxa de transmissão, uma técnica de compressão de voz é utilizada. O principal objetivo na configuração de um codificador de voz é alcançar a melhor qualidade possível com a menor taxa de bits, com reservas em relação à complexidade e ao delay. O caminho mais óbvio para oferta de baixa taxa de bits é determinar uma baixa freqüência de amostragem. De longe, as duas mais populares escolhas em relação à freqüência de amostragem são 8 e 16 KHz. Codificadores que utilizam 8 KHz como freqüência de amostragem são denominados codificadores de banda estreita e aqueles que utilizam 16 KHz como freqüência de amostragem são chamados de codificadores de banda larga. Diminuindo a taxa de bits, pelo emprego de técnicas de codificação mais poderosas, resulta numa maior distorção. Porém explorando as características do ouvido humano, técnicas de mascaramento desta distorção podem ser utilizadas para alcançar um alto percentual de qualidade a baixa taxas de bits. As soluções de telefonia tradicional são de banda estreita, limitada em 300 – 3400 Hz (VoIP não está limitada obrigatoriamente à codificação em banda estreita). Além disso, a telefonia tradicional sofre sérios limites de qualidade, como distorções provocadas pela má qualidade dos fios de par trançado entre a operadora até a casa do assinante, ruídos devido ao uso de telefones sem fio analógicos, além de outras fontes significantes de distorção de qualidade. Essas penalidades não são observadas em implementações VoIP. Iremos discutir agora como codificadores VoIP evitam tais distorções e ainda podem alcançar uma qualidade muito melhor do que estamos acostumados pelas limitações da PSTN. Os três principais fatores associados a redes de pacotes que possuem impacto significativo na percepção da qualidade da voz são delay, jitter e perda de pacotes. Os codificadores devem prever tratamento a estes parâmetros, além de outros como ruído no canal, condições de tráfego, eco e outros fatores de qualidade. Apesar da utilização de buffers pelas aplicações, as maiores penalidades provocadas pelo alto delay são o surgimento de eco e crosstalk, que podem causar uma redução de qualidade para o sistema. Nenhum dos padrões atuais de codificadores de voz da UIT foi desenvolvido para tratamento de perdas de pacotes e, portanto são muito sensíveis a esse fenômeno. A presença de jitter em redes de pacotes complica o processo de decodificação porque o decodificador necessita ter pacotes de dados prontamente disponíveis em intervalos regulares para produzir a continuidade suavizada da voz. Um buffer tem que ser empregado para garantir que o pacote estará disponível quando necessário. 2.1. O Codec Os principais codificadores de voz da UIT como o G.729 e o G.723.1, por exemplo, são baseados em Code Excited Linear Prediction (CELP), onde se observa uma boa qualidade da voz a baixas taxas[12]. Seu princípio básico se destaca como sendo eficiente, pois utiliza amostras anteriores da voz para codificar a amostra atual, isto é, há uma interdependência entre a codificação das amostras no tempo. Portanto, sua performance é extremamente dependente do histórico de amostras e isso pode se tornar maléfico na medida em que erros são propagados pela rede comutada de pacotes, resultando em amostras equivocadas e perdas de pacotes. Concluímos que o CELP foi projetado para se recuperar de erros de bits e não da perda de pacotes. O codec iLBC foi aceito em março de 2002 pelo Internet Engineering Task Force (IETF) como o primeiro codec de áudio/voz a ser padronizado[4], e hoje o codec está em processo final de padronização pelo IETF, como parte do IETF Audio Visual Transport (AVT) Working Group, e passa a ser livre de patentes. iLBC é o codificador mais utilizado pelo Skype durante as chamadas e trata cada pacote de voz independente, ou seja, qualquer erro no pacote atual não influencia na decodificação dos demais, visto que estamos trafegando pacotes de voz em um ambiente com relativo número de perdas e erros de pacotes. A métrica mais relevante para um codificador de voz utilizado em cenários onde perda de pacotes está presente é o numero de frames que o algoritmo leva para se recuperar a partir de um pacote perdido. No caso do iLBC este numero é zero, ou seja, o primeiro pacote seguido de um outro que foi perdido é sempre decodificado exatamente como pretendido. iLBC é um codificador de voz de banda estreita. Utiliza por completo seus 4 KHz de banda disponíveis, enquanto que a maioria dos codificadores de banda estreita utiliza apenas a faixa padrão de 300 Hz até 3400 KHz, aumentando, portanto, a inteligibilidade da voz, pois pode reproduzir um som mais próximo do real. É amostrado em 8 kHz e seu algoritmo utiliza codificação preditiva linear4 (LPC) com bloco independente. Se o bloco é recebido corretamente, LPC apenas registra o estado do bloco atual para ser usado por uma possível perda de pacotes no futuro. No caso de uma perda, o decodificador recebe um aviso correspondente e, para estes blocos, se utiliza do Packet Loss Cancealment (PLC), método de mascarar a perda de pacotes simplesmente repetindo o último pacote recebido com sucesso, ao invés de reproduzir o som de silêncio no lugar do pacote perdido, para se criar um sinal decodificado suavizado, que mascara o efeito da perda de pacotes. iLBC tem suporte a dois comprimentos básicos de frames: 20 ms a uma taxa de 15.2 kbit/s e 30 ms com taxas de 13.33 kbit/s, isto é, quando o codec opera em blocos de comprimento de 20 ms, produz 304 bits por bloco. Similarmente, em blocos de comprimento 30ms produz 400 bits por bloco. Os dois modos para os diferentes tamanhos de pacotes operam de forma muito similar. Nos resultados da descrição do algoritmo nos sistemas de codificação de voz, observa-se uma resposta ao controle de perda de pacotes similar ao conhecido pulse code modulation (PCM) com cancelamento de perda de pacotes (PLC) como nos padrões da ITU-T G.711 standard, que opera a uma taxa fixa de 64 kbit/s. E ao mesmo tempo, o algoritmo habilita a codificação à taxa fixa de bits com o limiar de qualidade versus taxa de bits muito próximo aos codecs que implementam o CELP. Testes da AT&T[12] no seu Voice Quality Assessment Lab também mostram que não há diferença significante de performance entre os modos 20 ms e 30 ms no iLBC, exceto sob condições de perda de pacotes, onde o frame de 20 ms pareceu ser mais robusto. ______________________________________________________________________ 4 LPC Técnica Linear Predictive Coding que se baseia num modelo do trato vocal. O codificador analisa um bloco de sinal de voz, tipicamente 20 ms, e produz um modelo temporal da excitação do trato vocal e da função de transferência. Os parâmetros do modelo e da especificação da excitação para o bloco de sinal são transmitidos e usados no decodificador por um sintetizador que reproduz a voz fazendo passar a excitação recebida por um modelo matemático do trato vocal. A codificação conduz a um débito de 16 Kbit/s. Esta é uma técnica de codificação de fonte. As figuras a seguir são úteis na avaliação do seu desempenho e utilizam a classificação MOS5 como padrão de medida. Podemos visualizar que o algoritmo iLBC provê um excelente limiar de qualidade versus taxa de bits. Na figura 3 o MOS do iLBC em 15% de perda está perto do G.729 sob 8% de perda, apesar da taxa de bits do iLBC ser um pouco mais alta, já que codifica todo frame independentemente. Figure 3. Comparação de performance do iLBC, G.729A e G.723.1 pela Dynastat, Inc. Os testes acima mostram que iLBC não apenas tem performance melhor que os outros padrões de codecs atuais (G.723.1, G.728, G.729, GSM, etc) em relação à perda de pacotes, mas também se apresenta com igualdade de condições, ou melhor, que padrões sobre canais sem congestionamento, isto é, sem perda de pacotes, como pode ser demonstrado na Figura 4. _____________________________________________________________________________________________ 5 MOS Em comunicações de voz, particularmente em telefonia através da internet, o Mean Opinion Score (MOS) fornece uma medida numérica da qualidade da voz humana do circuito. Este esquema faz uso de testes subjetivos através de opiniões que são matematicamente computados e que pela sua média são obtidos indicadores de qualidade da performance do sistema. Para determinar o MOS, um número de ouvintes percebem a qualidade da voz através da leitura em voz alta de sentenças ao longo do circuito de homens e mulheres. O ouvinte fornece as notas de cada sentença como o seguinte: (1) ruim; (2) pobre; (3) razoável; (4) bom; (5) excelente. MOS é a média aritmética de todas as notas individuais e pode variar de 1 (pior) a 5 (melhor). Figura 4 – Performance baseada em MOS do iLBC, G.729 (8 kb/s) e G.723.1 (6.3 kb/s) em canal livre e sob perda de pacotes. 2.2. PAYLOAD RTP O codec iLBC usa frames de 20 ou 30 ms e um clock de 8 KHz, de forma que o timestamp do RTP tem que estar em unidades de 1/8000 segundos. O payload do RTP para iLBC tem o formato apresentado na figura 5. Não é necessário nenhum cabeçalho adicional. Este formato foi constituído para situações onde os dois lados da comunicação enviam um ou mais frames por pacotes. 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | RTP Header | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | | + One or more frames of iLBC | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Figure 5 - Formato do pacote RTP. O uso dos bits no RTP Header deve ser como o especificado na RFC do padrão[28]. O padrão do protocolo define o bit M em seu cabeçalho, que deve ser utilizado dentro do perfil RTP, por exemplo, a RFC 3551 especifica que se o transmissor não estiver utilizando supressão de silencio, o bit M sempre será zero. Quando mais de um frame do codec iLBC está presente em um único pacote RTP, o timestamp é, como sempre, o mais antigo frame de dados representado no pacote RTP. O transmissor deve seguir algumas restrições que são: não deve incluir mais frames iLBC em um único pacote RTP que caiba na MTU do protocolo de transporte do RTP; os frames não podem ser divididos entre pacotes RTP e frames de diferentes modos (20 ms e 30 ms) não podem ser incluídos no mesmo pacote. Há recomendações que o número de frames contidos num pacote RTP deve ser consistente com a aplicação, isto é, no caso da voz, quanto menos frames por pacotes RTP tiver na transmissão, menos sensível será o delay e a sensibilidade a perda de pacotes ou também a restrições quanto à banda, por exemplo. Porém, a informação do número de frames contidos no pacote RTP não está prevista no payload. A forma de contar o número de frames é contabilizando o número total de octetos dentro do pacote RTP, e dividir o octeto pelo número de octetos por frame esperado (32/50 por frame). 2.3. BITSTREAM Na definição do bitstream, os bits são distribuídos em três classes de acordo com sua sensibilidade a perdas. Os bits mais sensíveis pertencem à classe 1 e são alocados primeiro no bitstream de cada frame. Os bits menos sensíveis são aqueles pertencentes à classe 2, alocados em seguida aos bits de classe 1. A menor parcela dos bits sensíveis é alocada na classe 3 e no final do bitstream de cada quadro. Analisando as classes de bits em função dos dois comprimentos de quadro (20/30 ms) temos: os bits da classe 1 ocupam um total de 6/8 bytes (48/64 bits), os bits de classe 2 ocupam 8/12 bytes (64/96 bits) e os de classe 3, 24/30 bytes (192/240 bits). Esta distribuição de bits proporciona um maior nível de proteção, já que os bits estão posicionados no pacote de forma a serem menos penalizados por erros (Uneven Level Protection - ULP). Quando um índice de quantização é distribuído entre mais classes, os bits mais significativos pertencem às classes mais baixas. Nas próximas seções, destacaremos os outros codecs menos utilizados pelo Skype, sendo estes proprietários da GIPS e resumidos na figura 6. Figura 6 – Codecs utilizados pelo Skype 2.4. GIPS iPCM-wb iPCM-wb™ [14] é um codec de banda larga que provê uma qualidade de som mais alta que PSTN, por isso também pode ser utilizado em caso de necessidades especiais, tais como videoconferência e áudio conferências. É extremamente tolerante a perda de pacotes e quando utilizado em conjunto com NetEQ™ 6 [13] proporciona uma grande redução do delay em comparação com soluções alternativas. _____________________________________________________________________________________________ 6 NetEQ™ é uma solução proprietária no processamento de voz, pode atuar como codificador de banda larga e banda estreita. É compatível com todos os padrões de codecs de áudio. O objetivo é atuar em conjunto com outros codecs e realizar maior controle sobre jitter através de buffers dinâmicos e tratamento de perda de pacotes. iPCM-wb foi construído baseado na funcionalidade denominada Voice Activity Detection (VAD), que reduz a taxa de bits aproximadamente em 36 kbit/s devido à supressão do silencio, ou seja, o canal só transmite, ou o codec só codifica quando há informação útil, isso é, a voz dos interlocutores. A figura 7 demonstra sua robustez a perda de pacotes quando comparado com outros codecs. A Tabela 1 resume as especificações técnicas do codificador. Figura 7 – Performance do Codificador iPCM-wb™. Fonte: Comsat Tabela 1 – Especificações Técnicas do Codificador iPCM-wb™. 2.5. GIPS iSAC iSAC™[15] é um codificador de voz adaptativo, por isso é capaz de equalizar a qualidade da voz em taxas típicas de banda larga e banda estreita de acordo com a velocidade de conexão existente a partir da taxa oferecida por modem dial-up. Quantitativamente, sua taxa de transmissão pode varia desde de 10 kbps até um máximo de 32 kbps. iSAC suporta não apenas conversação, mas também transmissão de músicas e som ambiente, variando a sua banda e taxa de transmissão. Também pode ser utilizado em conjunto com NetEQ™, alcançando alta qualidade em ambientes não controlados, com alto jitter e perda de pacotes. A Tabela 2 resume as especificações técnicas do codificador. Tabela 2 – Especificações Técnicas do Codificador iSAC™. 2.6. GIPS Enhanced G.711 GIPS Enhanced G.711[29] é uma versão aprimorada do padrão G.711, procurando manter a alta qualidade de voz sob redes altamente sobrecarregadas. Seu verdadeiro ganho em relação ao G.711se refere à robustez a perda de pacotes. GIPS Enhanced G.711 pode ser combinado com NetEQ™ para prover qualidade de voz a PSTN em taxas de perdas de pacotes de até 10%, e pequena degradação em taxas de perdas de pacotes de até 30%. E prevê suporte ao VAD. A Figura 8 apresenta um gráfico comparativo do desempenho do codificador e a Tabela 2 resume as especificações técnicas do codificador. Figura 8 – Performance do Codificador Enhanced G.711 Tabela 3 – Especificações Técnicas do Codificador Enhanced G.711 3. CONCLUSÃO Skype é o primeiro cliente baseado em redes ponto-a-ponto a utilizar telefonia sobre redes de comutação IP, não utiliza protocolo de padrão aberto e suas mensagens são criptografadas, de modo que sua análise e descrição torna-se um pouco mais difícil. Porém, conseguimos mapear algumas de suas principais funções e componentes através de documentação técnica e a partir da própria análise de seu funcionamento, apesar de algumas de suas técnicas de comunicação não terem sido ainda totalmente mapeadas, como o fato de não sabermos por completo o conteúdo das mensagens trocadas entre o cliente e o servidor de nomes, nem as informações por ele guardadas, por exemplo. O propósito deste trabalho foi identificar os motivos técnicos pelos quais fazem do Skype um software tão especial em comparação com outros operadores de telefonia IP, capaz de na sua primeira semana de operação computar mais de 60 mil downloads (Agosto de 2003). Pela primeira vez na história da internet, protocolos que trabalham em complexos ambientes de rede sobreviveram e tornaram-se amplamente difundidos. Não comparamos diretamente, mas o protocolo de padrão aberto Session Initiation Protocol (SIP) ainda tem suas limitações, como o fato de ter muita dificuldade de trabalhar com NAT[9]. Hoje temos um cenário em que o tráfego na Internet é grande, porém os rendimentos são ainda baixos. Com isso o investimento em hardware se torna um investimento sem retorno e o Skype obtém a funcionalidade da sua rede baseada nos microcomputadores de usuários, sendo a Empresa responsável pelo controle de acesso através de servidores de autenticação com certa redundância, desenvolvimento de software e uma pequena dose de marketing. Sua popularização se deve ao fato do software e de sua rede serem gratuitos, da excepcional qualidade da voz na maior parte do tempo de conexão quando comparado com a rede de telefonia analógica tradicional e aos seus concorrentes diretos MSN e Yahoo IM, demonstrado pelo uso de seus codecs. Além disso, também não é necessário possuir um endereço público na Internet e a instalação, que por sua simplicidade (não precisa ser configurado) também se destaca como fator de sucesso. Sem contar com sua facilidade de instalação e difusão nos players de voz que acabaram por absorver o software, como: Applications/Soft phones: Skype, Nortel, Webex, Hotsip, Marratech, Gatelinx, KPhone, XTen; IP Phones: WorldGate, Grandstream, Pingtel; Chip: Audiocodes, TI Telogy, LeadTek, Mindspeed. Sistemas Operacionais: Windows 9x ou superior, Pocket PC, Linux, Mac OS X. Skype também soma outros recursos como mensagem instantânea, busca, e transferência de arquivos, de modo que não há necessidade de se utilizar mais de um software para comunicação pela Internet. 4.1. FUTURO O futuro é uma das questões mais interessantes e intrigantes deste mundo, todos queremos saber o rumo a ser tomado. Com relação ao Skype, a empresa tem planos de embutir seu software em terminais telefônicos móveis através de parcerias com fabricantes de hardware, possibilitando seus usuários estarem conectados a todo o instante e realizar chamadas quase que gratuitas entre os sistemas móveis. Certamente irá causar uma revolução no âmbito das operadoras de telefonia celular, sendo obrigadas a rever seu planejamento estratégico. Outra possibilidade é a integração da conectividade do SIP com o Skype, possibilitando a interoperabilidade com outros sistemas VoIP, criando, portanto, um cenário de interconexão similar ao existente hoje na telefonia convencional e na celular. Dessa forma, a telefonia pela Internet pode alcançar status de a mais ampla rede de telecomunicações existentes, com a coexistência das redes legadas. Porém, antes de tudo é necessário que a Skype consiga manter as suas fontes de receita; manter a liderança frente à concorrência que aumenta exponencialmente; competir com os padrões abertos de telefonia IP, visto que seu algoritmo ainda é desconhecido; superar questões de regulamentação; lidar com as questões regionais e expandir sua base de clientes com novos serviços que de certo surgirão. 4. REFERÊNCIAS [1] Davidson, J. e Peters, J., “Voice of IP Fundamentals”, Cisco Press, Indianapolis, 2000. [2] Collins Daniel, “Carrier Grade Voice over IP”, Second Edition, Mc Graw Hill, USA, 2003. [3] Malher, Paul,”VoIP Telephony with Asterisk”, USA, 2004 [4] Andersen, S., Duric, A., Astrom, H., Hagen, R., Kleijn, W., and J. Linden, "Internet Low Bit Rate Codec (iLBC)", RFC 3951, December 2004. http://www.ietf.org/rfc/rfc3951.txt [5] Real-time Transport Protocol (RTP) Payload Format for internet Low Bit Rate Codec (iLBC) Speech. , RFC 3952, December 2004 http://www.ietf.org/rfc/rfc3952.txt [6] Simson L. Garfinkel, “VoIP and Skype Security”, January 26, 2005 [7] S. A. Baset and H. Schulzrinne, “An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol.”, Columbia University, September 15, 2004 [9] Tapio, Antti, “Future of telecommunication – Internet telephony operator Skype”, Helsinki University of Technology, April 26, 2005. [10] iLBC codec. http://www.globalipsound.com/pdf/gips_iLBC.pdf [11] S. V. Andersen et. al., “iLBC - A Linear Predictive Coder with Robustness to Packet Losses," in IEEE Speech Coding Workshop, (Tsukuba, Japan), October 2002. [12] ILBC , “ILBC – Designed For The Future”, iLBC White Paper, October 15, 2004 [13] Global IP Sound, “GIPS NetEQ – A Combined Jitter Buffer Control/Error Concealment Agorithm for VoIP Gateways” [14] GIPS iPCM-wb http://www.globalipsound.com/datasheets/iPCM-wb.pdf [15] GIPS iSAC codec. http://www.globalipsound.com/pdf/gips_iSAC.pdf [16] Global Index (GI): http://www.skype.com/skype_p2pexplained.html [17] J. Rosenberg, J. Weinberger, C. Huitema, and R. Mahy. STUN: Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs). RFC 3489, IETF, Mar. 2003. [18] J. Rosenberg, R. Mahy, C. Huitema. TURN: traversal using relay NAT. Internet draft, Internet Engineering Task Force, July 2004. Work in progress. [19] Advanced Encryption Standard (AES) Ciphersuites for Transport Layer Security (TLS). RFC 3268, IETF, Jun 2002. [20] http://www.skype.com/skype_p2pexplained.html [21] http://www.ilbcfreeware.org/ [22] http://en.wikipedia.org/wiki/Skype [23] http://www.globalipsound.com/ [24] http://www.skypejournal.com/ [25] http://www.skype.com/ [26] Ethereal http://www.ethereal.com [27] Skype conferencing white paper by PowerModeling: http://www.powermodeling.com/files/whitepapers/Conference%20Test%20feb%2009.p df [28] Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson, "RTP: A Transport Protocol for Real-Time Applications", STD 64, RFC 3550, July 2003. [29] GIPS Enhanced G.711 http://www.globalipsound.com/datasheets/EG711.pdf [30] http://www.rsasecurity.com/ APÊNDICE A Esta monografia envolve características práticas, de forma que não poderíamos realizála sem apresentar qualquer resultado experimental. O principal objetivo é apresentar alguns estados durante o processo de comunicação do software. Foram feitos alguns testes ainda que simples com o software Skype com a seguinte configuração: Computador Pentium III, 128 Mb de RAM e IP dinâmico 192.168.1.253. Sistemas Operacionais utilizados: Windows XP/ Linux Conectiva 10 Roteador Linksys IP 192.168.1.250 Modem e conexão ADSL 300Kbps Skype versão 1.4.0.84, com apenas porta 60103 habilitada para o tráfego. Ethereal[26] versão 0.10.13 Firewall ZoneAlarm Os testes foram medidos através do analisador de protocolos Ethereal a partir da rede local com as especificações acima descritas, e o nó chamado utilizando Windows XP, Virtua 300Kbps com NAT. As figuras a seguir demonstram o tráfego referente as etapas de login, busca de contatos, conversação, chat, chat com transferência de arquivos e logout, respectivamente. Os gráficos apresentam legendas, para o tráfego UDP utilizamos a cor vermelha, TCP verde e a curva na cor preta representa o total de tráfego. Outros protocolos também foram mapeados, mas não representam o tráfego do Skype e mostra todos os protocolos identificados na conexão. O teste da busca de contatos foi realizado duas vezes, na primeira o usuário não foi localizado e o outro a busca foi realizada com sucesso ( três registros foram retornados e apenas um foi adicionado aos meus contatos). Este teste foi proposital para se observar o comportamento do dois eventos. Há uma maior geração de tráfego para o último caso, onde o buscador e o contato localizado trocam informações TCP e UDP. Login Figura 9 – Notificação do firewall do pedido de login do Skype Figura 10 – Gráfico do volume tráfego de login com legenda. Figura 11 – Tráfego de rede do login. Busca de contatos Figura 12 - Tráfego requisitado pela busca de contatos sem sucesso e com sucesso, respectivamente. Conversação Utiliza uma média de 3 a 16 KB/s dependendo das condições dos pontos da rede e dos computadores. Figura 13 – tráfego do áudio com momento proposital de completo silêncio Chat Figura 14 – Gráfico contínuo do bate-papo Figura 15– Gráfico contínuo do bate-papo com variação de escala. Chat com Transferência de Arquivos Foram transferidos dois arquivos de 4 KB e outro de 2 MB, respectivamente. Não havia conversação no momento das transferências. Figura 16 – Gráfico com o volume de tráfego da transferência de arquivos Logout Figura 17 – Tráfego de Logout Observação1: A tabela HC não foi acompanhada e nem demonstrada, porque utilizamos o sistema operacional Windows XP, onde não sabemos ao certo a nova localização da tabela no registro do sistema, apesar das tentativas de busca. Observação2: Os arquivos com os detalhes dos gráficos contendo todas as estatísticas, tempo de conexão, intervalo entre comunicação, origem e destino da comunicação, protocolos, e outras informações podem ser solicitadas através do e-mail [email protected] para serem visualizas com maior riqueza de detalhes no software Ethereal.