Mudanças entre as edições de "RMU-2012-2"
Linha 472: | Linha 472: | ||
#*'''alunos''': Contas 100 e 101 | #*'''alunos''': Contas 100 e 101 | ||
#*'''professores''': Contas 200 e 201 | #*'''professores''': Contas 200 e 201 | ||
− | #*'''coordenacao:''' Contas 300 e 301 | + | #*'''coordenacao:''' Contas 300 e 301<br>{{collapse top | sip.conf}} |
+ | <syntaxhighlight lang=text> | ||
+ | [general] | ||
+ | type=friend ; pode efetuar e receber chamadas | ||
+ | host=dynamic ; pode conectar-se a partir de qualquer endereço IP | ||
+ | insecure=port,invite ; a segurança está associada ao registro do canal (primeiro | ||
+ | passo), | ||
+ | ; assim como acontece em sessões Web | ||
+ | disallow=all | ||
+ | allow=gsm ; habilita este codec para o João. Os vários codecs serão vistos em se | ||
+ | guida, | ||
+ | ; já que cada um deles tem suas particularidades. | ||
+ | allow=alaw ; outro codec | ||
+ | allow=ulaw ; mais um codec | ||
+ | qualify=yes; mostra a qualidade, em ms, da conexão entre UAC e UAS. | ||
+ | |||
+ | [alunos](!) | ||
+ | context=alunos | ||
+ | |||
+ | [professores](!) | ||
+ | context=professores | ||
+ | |||
+ | [coordenacao](!) | ||
+ | context=coordenacao | ||
+ | |||
+ | [100](alunos) | ||
+ | username=100 | ||
+ | secret=100 | ||
+ | |||
+ | [101](alunos) | ||
+ | username=101 | ||
+ | secret=101 | ||
+ | |||
+ | [200](professores) | ||
+ | username=200 | ||
+ | secret=200 | ||
+ | |||
+ | [201](professores) | ||
+ | username=201 | ||
+ | secret=201 | ||
+ | |||
+ | [300](coordenacao) | ||
+ | username=300 | ||
+ | secret=300 | ||
+ | |||
+ | [301](coordenacao) | ||
+ | username=301 | ||
+ | secret=301 | ||
+ | </syntaxhighlight> | ||
+ | {{collapse-bottom}} | ||
# Criar um plano de discagem de forma que as contas SIP do contexto alunos só possam atingir outras contas SIP deste contexto. Faça o mesmo para o contexto professores. Contas SIP do contexto coordenação poderão atingir, além das contas SIP desse contexto, as contas dos contextos ''alunos'' e ''professores''. | # Criar um plano de discagem de forma que as contas SIP do contexto alunos só possam atingir outras contas SIP deste contexto. Faça o mesmo para o contexto professores. Contas SIP do contexto coordenação poderão atingir, além das contas SIP desse contexto, as contas dos contextos ''alunos'' e ''professores''. | ||
# Execute duas instâncias do Jitsy, sendo que uma delas deve ser configurada para usar a porta 5060, e a outra deve usar a porta 5061. Essas portas servirão para efetuar trocas de mensagens SIP, que é o protocolo usado para iniciar e terminar as chamadas VoIP. | # Execute duas instâncias do Jitsy, sendo que uma delas deve ser configurada para usar a porta 5060, e a outra deve usar a porta 5061. Essas portas servirão para efetuar trocas de mensagens SIP, que é o protocolo usado para iniciar e terminar as chamadas VoIP. |
Edição das 14h21min de 23 de outubro de 2012
Redes Multimidia: Diário de Aula 2012-2
Professor: Marcelo Maia Sobral
Lista de email (forum): rmu-ifsc@googlegroups.com
Encontros: 3a feira/13:30, 5a feira/15:40
Atendimento paralelo: 3a de 10:00 às 11:00 h
Bibliografia
- Livros sobre Redes de Computadores (por ordem de preferência):
- KUROSE, James F. e ROSS, Keith W. Redes de computadores e a Internet, Uma abordagem Top-Down. 5a edição. Editora Addison Wesley SP, 2010.
- Sérgio Colcher, Antônio Tadeu Azevedo Gomes, e Anderson Oliveira da Silva. VoIP: Voz sobre IP. Campus, 1a edição, 2005.
- STALLINGS, W. Redes e sistemas de comunicação de dados. Editora Elsevier RJ, 2005.
- TANENBAUM, Andrew S. Redes de Computadores, tradução da quarta edição. Editora Campus RJ, 2003
- FOROUZAN, Behrouz. Comunicação de Dados e Redes de Computadores, 3a/4a edicão. Editora Bookman, 2004.
Curiosidades
Listas de exercícios
Avaliações
Aluno | 1a prova | 2a prova | 3a prova | Trabalho VoIP | Trabalho Firewalls | FINAL |
---|
Obs: D* = não fez a avaliação.
Softwares
04/10: Apresentação
Apresentação da disciplina: conteúdo, bibliografia e avaliação, laboratório.
Redes multimidia
Uso de redes de dados para transmitir conteúdo de diferentes midias:
- Video streaming (ex: Netflix, Youtube)
- Internet radio (ex: Icecast)
- VoIP e telefonia IP (SIP com Asterisk, Freeswitch ou FreePBX; Skype)
- Video e áudio conferência
- Telemedicina
- Jogos
- ... outros ?
Algumas questões sobre essas aplicações:
- Como funcionam esses serviços ? Como os conteúdos são acessados ?
- Como os dados são representados ?
- Como os dados são transportados através da rede ? Quais os protocolos envolvidos e como os dados são encapsulados em suas PDUs ?
- Que requisitos quanto à transmissão pela rede possuem para um bom funcionamento ?
Exemplo 1: video streaming
Video streaming é a transmissão de video por uma rede de dados, com sua visualização ocorrendo à medida que for sendo recebido pelo cliente. Um exemplo muito conhecido de serviço de video streaming é fornecido pelo YouTube. Outros exemplos de video streaming são Netflix, que possibilita assistir filmes via Internet mediante o pagamento de uma assinatura, e a transmissão de jogos de futebol via Internet por algumas emissoras de TV aberta. Apesar de a experiência dos usuários parecer a mesma (ou quase ...) para esses serviços, existem diferenças na forma como são implementados.
Experimente visualizar os videos abaixo. Em todos eles observe quanto tempo demora para iniciar a tocar o video e sua continuidade (se ele interrompe ou degrada a imagem). Experimente também avançar o video, como por exemplo para perto de seu final.
- Video 1: execute mplayer rtsp://172.18.200.251:8000/teste.sdp ou vlc rtsp://172.18.200.251:8000/teste.sdp
- Video 2: usando um tocador Flash.
- Video 3: usando HTML5
- Video 4: execute vlc http://tele.sj.ifsc.edu.br/~msobral/rmu/videos/x.mp4
- Video 5: execute vlc http://mmsobral.no-ip.org:8080/armacao/coisas/slalom.avi
- Video 6: execute vlc http://mmsobral.no-ip.org:8080/armacao/coisas/slalom2.avi
Como é feito o acesso a esses videos, e como eles são transportados pela rede ?
- Execute o wireshark e repita o acesso aos videos. Enquanto a captura acontece, faça um reposicionamento do video - i.e. avance-o para perto de seu final. Observe as mensagens trocadas entre sua aplicação cliente e o servidor do video.
- Você conseguiria descrever como funcionam seus acessos e tranmsmissões ?
- Você pode notar alguma diferença entre as diferentes formas de transmissão do video ?
Exemplo 2: Internet radio
Atualmente muitas estações de rádio transmitem suas programações também pela Internet. Existem inclusive muitas estações cujas transmissões são feitas somente pela rede - i.e. a rigor, não fazem transmissão por rádio. Com isso, pessoas conseguem escutar a programação de uma estação de rádio de outro país. Um atrativo dessas estações via Internet é informarem o gênero de música transmitida, além de apresentarem uma boa qualidade sonora. Esse tipo de serviço se popularizou tanto que existem diretórios de estações, que podem ser acessados por aplicativos e assim possibilitar que os usuários escolham que tipo de música desejam escutar.
Um aplicativo do Linux que oferece fácil acesso a Internet radio é o Rhytmbox. Ele pode ser executado no menu Aplicativos->Som e video. Execute o Rhytmbox em seu computador, e escolha uma estação de radio. Observe quanto tempo demora para que a música comece a tocar, a qualidade do som, e sua continuidade.
Como é feito o acesso às estações de rádio, e como as músicas são transportadas pela rede ?
- Execute o wireshark e repita o acesso à estação. Enquanto a captura acontece, observe os protocolos envolvidos e as mensagens que fluem entre seu computador e o servidor da estação. Observe também onde a estação se localiza (país/cidade).
- Você conseguiria descrever como funcionam seus acessos e transmissões ?
09/10: Caracterização de midias
Compressão de video
Técnicas usadas para compressão de video:
- Remoção de redundância espacial - codificação intraquadros (ex: JPEG)
- Remoção de redundância espacial e temporal - codificação intraquadros e interquadros (H.261, MPEG)
Remoção de redundância temporal: iniciando com um intraquadro (quadro I), quadros sucessivos contém atualizações relativas a quadros anteriores (quadros P) ou a quadros anteriores e posteriores (quadros B). O conjunto de quadros entre quadros I se chama GOP (Group of Pictures):
Exemplos de codecs de video
- MPEG-2
- H-264
- XVID
- Theora
Exemplos de formatos de video usados em MPEG2 (i.e. em DVD):
Atividade
1) Copie este video para seu computador. Visualize-o com mplayer ou vlc, observando sua qualidade de imagem. Veja também o tamanho desse arquivo de video, que está codificado com MJPG.
2) Codifique esse video para outros formatos de compressão:
- MPEG-2: mencoder -o sr-mpeg2.mpg -of mpeg -ovc lavc -lavcopts vcodec=mpeg2video:vbitrate=250 -oac copy sr.mjpg
- XVID: mencoder -o sr-xvid.avi -ovc xvid -xvidencopts bitrate=250 -oac copy sr.mjpg
- H-264:
mencoder -o sr-h264.mp4 -ovc x264 -x264encopts pass=1:turbo -oac mp3lame sr.mjpg
mencoder -o sr-h264.mp4 -ovc x264 -x264encopts bitrate=250:pass=2 -oac mp3lame sr.mjpg - Theora:
mencoder -o sr-theora.mp4 -of mpeg -ovc lavc -lavcopts vcodec=libtheora:vpass=1:turbo -oac mp3lame sr.mjpg
mencoder -o sr-theora.mp4 -of mpeg -ovc lavc -lavcopts vcodec=libtheora:vpass=2 -oac mp3lame sr.mjpg
3) Compare os tamanhos dos arquivos de video resultantes das codificações. Toque-os e veja se há diferença de qualidade de imagem entre eles.
4) Um software de processamento de video disponível para Linux se chama gopchop. Abaixo segue um texto explicativo sobre esse programa:
Interprete as informações contidas no texto acima, e experimente usar o gopchop.
TAREFA: mecanismos de distribuição de midia
Faça uma breve descrição de um mecanismo de distribuição de midia, que pode estar armazenada ou ser ao vivo. Explique como os dados são codificados, que protocolos são usados e que mensagens são trocadas para que o acesso a midia se realize. Inclua diagramas para ajudar a explicar seu funcionamento, e forneça exemplos de sua aplicação.
Algumas sugestões de mecanismos:
- HTTP Live streaming
- HTTP Pseudo-streaming
- HTTP Dynamic-streaming
- RTSP streaming
- P2P streaming
- ... outros ?
IMPORTANTE: Na próxima aula (16/10) sortearei dois alunos para que apresentem seus trabalhos. Se fizerem uma boa apresentação ficarão com crédito (que poderá melhorar seu conceito final). Se não apresentarem ou não trouxerem um bom material, ficarão com um ponto negativo (i.e. conceito final pode ser arredondado pra baixo).
Sobre distribuição P2P
11/10: Caracterização de midias
Compressão de audio
Técnicas usadas:
- Remoção de silêncio
- Uso de psicoacústica
- Remoção de redundância
Exemplo de codificação:
Atividade
1) Copie este arquivo de audio para seu computador. Escute-o e confira sua qualidade sonora. Veja também o tamanho do arquivo.
2) Codifique esse arquivo com os seguintes codecs:
- PCM: time mplayer -vc dummy -vo null -af format=s8,resample=8000:0:0,channels=1,volume=0 -ao pcm:waveheader:file="musica2.wav" musica.wav
- MP3: time lame musica.wav musica.mp3
- Ogg: time oggenc -o musica.ogg musica.wav
- Flac: time flac musica.wav -o musica.flac
- Speex: time speexenc --bitrate 8 musica.wav musica.spx
3) Toque os arquivos de audio codificados, comparando suas qualidades sonoras. Compare também os tamanhos dos arquivos.
Transmissão de dados multimidia
- Atrasos devido a transmissão
- O tráfego de midia pode variar o uso de banda dependendo da codificação:
Estratégias para tratar a variação de atraso
Mecanismos para compensar atraso e variação de atraso da rede:
- Numerar cada mensagem com um número de sequência.
- Registrar o instante em que cada mensagem foi gerada (i.e. registrar seu timestamp).
- Atrasar a reprodução do conteúdo no receptor, para compensar variações de atraso.
Esses mecanismos são combinados nas seguintes estratégias para compensar variação de atraso:
Atraso de reprodução fixo
Compensa atrasos de mensagens com a imposição de um atraso fixo q no reprodutor de midia. Mensagens recebidas após seu instante de reprodução (i.e. chegam após timestamp + q) são descartados.
Atraso de reprodução: midia será tocada somente no instante , sendo que . O atraso q corresponde ao atraso de reprodução imposto do lado do cliente, para compensar variações de atraso das mensagens.
Por exemplo, uma sequência de mensagens pode ser reproduzida da seguinte forma se for imposto um atraso fixo:
Atraso de reprodução adaptativo
Procura minimizar o atraso de reprodução, estimando o atraso da rede e sua variação. O atraso de reprodução assim calculado é imposto no receptor antes de cada rajada de mensagens (isso faz mais sentido em transmissão de voz).
Por exemplo, uma sequência de mensagens pode ser reproduzida da seguinte forma se for imposto um atraso adaptativo:
Se uma determinada mensagem se atrasar além do tolerável, será descartada (não reproduzida):
Exercícios
Resolver os exercícios contidos no final das transparências.
16/10: Transmissão de dados multimidia
- Não houve aula ... fomos ver a apresentação de TCC1 no auditório.
Atividade: atraso de reprodução (extra ... fazer fora da aula)
Use este programa para simular um buffer de reprodução com atraso fixo. Para testá-lo faça o seguinte
- Execute-o com o comando:
python playbuffer.py
- Visualize o video transferido por esse buffer:
mplayer slalom2.mpg
- Experimente variar o atraso de reprodução, editando o programa e redefinindo a variável global Atraso. Teste colocá-la com o valor 0 para desativar o atraso de de reprodução.
Quais devem ser o atraso e variação de atraso do streaming de video que fizemos na aula de 04/10 ? Poderíamos estimar essas características de transmissão para o video que estava em um servidor dentro do IF-SC São José, e para aquele outro que estava em um computador fora da escola.
- Qual deveria ser o atraso de reprodução mínimo, em cada caso, para que o video pudesse ser reproduzido sem perdas ?
- Qual seria o valor desse atraso mínimo, se fosse calculado segundo o procedimento para determinar o atraso de reprodução adaptativo ?
Estratégias para abrandar a perda de mensagens
Reprodução de mensagens perdidas inadequada para aplicações interativas
- Mensagens que realmente não chegaram
- Mensagens que chegaram após instante de reprodução
Técnicas para abrandar a perda de mensagens e preservar uma boa (?!) qualidade de áudio
- Correção antecipada de erros (FEC - Forward Error Correction)
- Intercalação
Correção antecipada de erros
Emissor envia dados redundantes em suas mensagens, também conhecidos como um código de correção de erro.
Exemplo 1: envio de uma mensagem redundante para cada grupo de n mensagens. A mensagem redundante é calculada fazendo XOR das demais mensagens do grupo.
- Tolera a perda de 1 mensagem
- Aumento de banda de 1/n
Uso de mensagem redundante com XOR
Exemplo 2: envio de fluxos redundantes de diferentes qualidades.
- Pode-se enviar um fluxo de qualidade inferior junto com o fluxo principal.
Intercalação
Consiste no resequenciamento das unidades de áudio antes de transmiti-las, de forma que unidades que estavam originalmente próximas sejam separadas por uma certa distância no fluxo a ser transmitido.
No exemplo abaixo, cada unidade de áudio tem 5 ms, e cada mensagem contém quatro unidades (totalizando 20 ms).
Atividade
Pesquise sobre o uso de técnicas de abrandamento de perdas de mensagens em diferentes tipos de transmissão de midia: VoIP, video, radio on-line, ...
18/10: VoIP e Asterisk
- Transparências
- Site oficial do Asterisk
- Asterisk Guru
- Dicas sobre Asterisk
- Livro online gratuito sobre Asterisk
- Introdução a VoIP e SIP
- Livro Asterisk: Guia de Configuração - 5a geração, de Flávio Gonçalves.
Asterisk: uma solução completa de PABX baseado em software, permitindo ligar o mundo IP ao mundo da rede pública de telefonia comutada.
Características Básicas: faz tudo que um PABX pequeno e simples faz e pouco mais
- Transferência, música de espera, siga-me, etc.
- Conferência, correio de voz, URA, fila de chamadas, monitoramento de chamadas, integração com o Jabber (Google talk)
Características Avançadas: o que seria interessante para grandes empresas
- Uso de banco de dados (MySQL), integração com o LDAP, DUNDi, DNS SRV, geração de bilhetagem
Exemplo de cenário de uso do Asterisk
Plano de discagem
O plano de discagem define como cada chamada deve ser processada. As instruções de processamento residem no arquivo de configuração extensions.conf. O fluxo de processamento de chamadas pode ser visto resumidamente abaixo:
Um exemplo de plano de discagem simples pode ser visto abaixo:
[alunos]; o nome deste contexto
# Chamadas para o número 101 são feitas via SIP para o canal "maria"
exten=>101,1,Dial(SIP/maria)
same=>n,Hangup()
# Chamadas para "teste" serão atendidas com um som de beep, seguido
# da reprodução do arquivo de som "hello-world", em seguida outro beep e
# enfim se encerra a chamada.
exten=>teste,1,Playback(beep)
same=>n,Wait(1)
same=>n,Playback(hello-world)
same=>n,Wait(1)
same=>n,Playback(beep)
same=>n,Hangup
A estrutura do plano de discagem é composta por extensões (um termo específico do Asterisk). Cada extensão identifica um número (ou usuário) que pode ser chamado, e como essa chamada deve ser processada. A sintaxe pode ser vista abaixo:
exten=>identificador,prioridade,aplicação
- identificador: o número ou usuário chamado
- prioridade: a prioridade da extensão. Isso determina a ordem de execução das extensões que tratam do mesmo identificador.
- aplicação: uma ação a ser realizada quando a extensão for processada. Por exemplo, a aplicação Dial determina que deve ser encaminhada a outro canal.
Como o processamento de uma chamada usualmente envolve uma sequência de extensões, existe uma sintaxe opcional para simplificar a declaração:
exten=>identificador,prioridade,aplicação
same=>prioridade,aplicação
- same: declara uma nova extensão com mesmo identificador da extensão imediatamente anterior
Por fim, a prioridade (que define a ordem com que as extensões são processadas) declarada com o valor n equivale à prioridade da extensão imediatamente anterior incrementada em uma unidade:
exten=>101,1,Dial(SIP/101)
same=>n,Hangup; a prioridade aqui terá o valor 2
Canais SIP
Cada telefone SIP deve ter seu identificador cadastrado no Asterisk. O identificador pode tanto ser um número, análogo a um ramal, ou uma string alfanumérica. No terminologia do Asterisk, cada telefone SIP é chamado de canal SIP, e deve estar declarado em /etc/asterisk/sip.conf:
; Canal 2000 (um exemplo)
[2000]
username=2000 ; o nome do usuário para fins de autenticação
secret=kabrum
type=friend ; pode efetuar e receber chamadas
host=dynamic ; pode conectar-se a partir de qualquer endereço IP
insecure=port,invite ; a segurança está associada ao registro do canal (primeiro
passo),
; assim como acontece em sessões Web
context=alunos ; o contexto padrão do João. O arquivo extensions.conf o definirá
disallow=all
allow=gsm ; habilita este codec para o João. Os vários codecs serão vistos em se
guida,
; já que cada um deles tem suas particularidades.
allow=alaw ; outro codec
allow=ulaw ; mais um codec
qualify=yes; mostra a qualidade, em ms, da conexão entre UAC e UAS.
; Canal joao (outro exemplo)
[joao]
username=joao ; o nome do usuário para fins de autenticação
secret=blabla
type=friend ; pode efetuar e receber chamadas
host=dynamic ; pode conectar-se a partir de qualquer endereço IP
insecure=port,invite ; a segurança está associada ao registro do canal (primeiro
passo),
; assim como acontece em sessões Web
context=alunos ; o contexto padrão do João. O arquivo extensions.conf o definirá
disallow=all
allow=gsm ; habilita este codec para o João. Os vários codecs serão vistos em se
guida,
; já que cada um deles tem suas particularidades.
allow=alaw ; outro codec
allow=ulaw ; mais um codec
qualify=yes; mostra a qualidade, em ms, da conexão entre UAC e UAS.
Como se pode notar, a declaração de um canal SIP envolve muitos parâmetros que envolvem autenticação, controle de acesso, localização na rede, codecs e possivelmente outras capacidades. Como os valores de alguns parâmetros podem ser iguais para vários canais, o Asterisk possibilita a declaração de perfis (templates):
; Perfil alunos
[alunos](!); a sequência "(!)" define isto como um perfil
type=friend ; pode efetuar e receber chamadas
host=dynamic ; pode conectar-se a partir de qualquer endereço IP
insecure=port,invite ; a segurança está associada ao registro do canal (primeiro
passo),
; assim como acontece em sessões Web
context=alunos ; o contexto padrão do João. O arquivo extensions.conf o definirá
disallow=all
allow=gsm ; habilita este codec para o João. Os vários codecs serão vistos em se
guida,
; já que cada um deles tem suas particularidades.
allow=alaw ; outro codec
allow=ulaw ; mais um codec
qualify=yes; mostra a qualidade, em ms, da conexão entre UAC e UAS.
; Canal 2000
[2000](alunos); a sequência "(alunos)" copia as definições do perfil "alunos"
username=2000 ; o nome do usuário para fins de autenticação
secret=kabrum
; Canal joao
[joao](alunos)
username=joao ; o nome do usuário para fins de autenticação
secret=blabla
Atividade
Para realizar esses exercícios você deve primeiro instalar o Asterisk na máquina virtual rmu-server. Para testar as chamadas, use o softphone jitsy na máquina real.
- Criar as seguintes contas SIP e contextos:
- alunos: Contas 100 e 101
- professores: Contas 200 e 201
- coordenacao: Contas 300 e 301
sip.conf | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
[general]
type=friend ; pode efetuar e receber chamadas
host=dynamic ; pode conectar-se a partir de qualquer endereço IP
insecure=port,invite ; a segurança está associada ao registro do canal (primeiro
passo),
; assim como acontece em sessões Web
disallow=all
allow=gsm ; habilita este codec para o João. Os vários codecs serão vistos em se
guida,
; já que cada um deles tem suas particularidades.
allow=alaw ; outro codec
allow=ulaw ; mais um codec
qualify=yes; mostra a qualidade, em ms, da conexão entre UAC e UAS.
[alunos](!)
context=alunos
[professores](!)
context=professores
[coordenacao](!)
context=coordenacao
[100](alunos)
username=100
secret=100
[101](alunos)
username=101
secret=101
[200](professores)
username=200
secret=200
[201](professores)
username=201
secret=201
[300](coordenacao)
username=300
secret=300
[301](coordenacao)
username=301
secret=301
TAREFA: Leitura da SemanaO texto desta semana diz respeito à sinalização SIP, usada em VoIP. Leiam até a página 10 deste artigo, e preparem-se para discuti-lo (e apresentá-lo) nesta 3a feira, 23/10.
23/10: A sinalização SIPAtividade 1: Ligação SIP ponto a ponto
Atividade 2: Ligações SIP tendo um PABX Asterisk
Questões:
25/10: A sinalização SIP e Protocolos de Tempo-Real
AtividadeEssa atividade busca ilustrar os fluxos RTP com um exemplo:
30/10: Entrocamento SIP entre PBX AsteriskEm um entroncamento SIP (SIP trunking), um PBX pode encaminhar chamadas através de um tronco SIP. Essas chamadas podem ser originadas de diferentes formas, tais como telefones IP ou convencionais. Entre os PBX do entroncamento, as chamadas são sinalizadas com SIP e transmitidas com RTP e algum codec. A ativação de um entroncamento SIP entre dois PBX Asterisk pode ser feita seguindo o exemplo abaixo: PBX Norte
PBX Sul
Atividade: estabelecendo chamadas entre diferentes PBX AsteriskNesta atividade, vamos realizar chamadas entre softphones registrados em diferentes PBX Asterisk. Para isso, precisaremos estruturar o laboratório de forma que cada PBX Asterisk possua um tronco SIP com cada um de seus vizinhos. Os usuários SIP serão identificados por 4MM, sendo MM o número do computador de cada aluno (ex: micro 1 tem usuário 401). Assim, é possível fazer um plano de discagem para encaminhar corretamente as chamadas. 01/11: Prática com Asterisk: aplicações e funções típicas de PBXAlgumas funções típicas de PBX são:
Essas funcionalidades podem ser implementadas no próprio PBX ou no telefone. No caso do Asterisk, elas podem ser disponibilizadas diretamente pelo próprio Asterisk, ou ser implementadas no plano de discagem. A figura abaixo ilustra essas possibilidades:
Para criar essas funções em um PBX Asterisk, é necessário conhecer os recursos que ele oferece. Dentre esses recursos, há aplicações, variáveis, e características (features). Hoje serão vistos alguns deses recursos, que usaremos para implantar algumas das funções enumeradas acima. Extensões especiaisAlém das extensões criadas pelo usuário, o Asterisk apresenta algumas extensões especiais, tais como:
AplicaçõesAs aplicações são usadas no plano de discagem. Assim, o processamento de uma chamada se faz pela execução sucessiva de aplicações, de forma a se obter o efeito desejado. NoOpNão faz nada, sendo útil para depurar o plano de discagem. Exemplo: exten=>100,1,NoOp(${CONTEXT})
GoToPula para um contexto (opcional), extensão, prioridade específica. Exemplo: exten=>100,1,GoTo(vendas,s,1)
GoToIfTrata-se do comando GoTo condicional. Sua sintaxe é: GoToIf(condição?[rótulo se verdade]:[rótulo se falso]) Os rótulos podem assumir a forma: [[contexto],extensão,]prioridade Exemplo: [alunos]
exten=>6111,1,GoToIf($["${CALLERID(num)}" != "6112"]?2:4)
same=> n,Dial(SIP/6111,30)
same=> n,Hangup
same=> n,Answer
same=> n,Playback(hello-world)
same=> n,Hangup
BackgroundToca um arquivo de som como música de fundo. Esse arquivo deve estar em /usr/share/asterisk/sounds, e ser codificado com codec PCM ou WAV. Exemplo: exten=>666,1,Answer
same=>n,Background(hello-world)
same=>n,Hangup
PlaybackToca um arquivo de som. A diferença em relação a Background é que Playback devolve o controle ao Asterisk (i.e. ao plano de discagem) somente após tocar todo o arquivo. Esse arquivo deve estar em /usr/share/asterisk/sounds, e ser codificado com codec PCM ou WAV. Exemplo: exten=>666,1,Answer
same=>n,Playback(hello-world)
same=>n,Hangup
WaitForça uma espera durante o processamento da chamada. Exemplo: exten=>666,1,Answer
same=>n,Playback(hello-world)
same=>n,Wait(1)
same=>n,Playback(beep)
same=>n,Hangup
Answer e HangupAnswer atende uma chamada. Hangup termina uma chamada. Exemplo: exten=>666,1,Answer
same=>n,Playback(hello-world)
same=>n,Hangup
SetModifica o valor de uma variável. Exemplo: exten=>666,1,Set(Tentativas=1)
same=>2,Dial(SIP/666,10)
same=>3,Set(Tentativas=${Tentativas}+1)
same=>4,GoToIf($[${Tentativas} < 2]?2:5)
same=>5,Hangup
LogGrava um texto qualquer no log do Asterisk. Exemplo: exten=>666,1,Log(DEBUG,"Chamada para 666")
same=>n,Dial(SIP/666,10)
same=>n,Hangup
VariáveisO uso de variáveis no Asterisk possui funcionamento semelhante àquele encontrado nas linguagens de programação, permitindo ao “programador” utilizar variáveis já definidas pelo Asterisk bem como definir suas próprias variáveis. As definições das variáveis devem ser feitas no arquivo extensions.conf. A sintaxe para trabalhar com variáveis no Asterisk é semelhante a do c-shell, porém as variáveis definidas pelo usuário não são sensíveis a caixa, ou seja, VAR e var referem-se à mesma variável.
Existem três tipos de variáveis:
Abaixo se pode ver um exemplo de plano de discagem que usa variáveis: [globals]
; definicao de uma variavel global
VENDAS=SIP/6112
[alunos]
; definicao de uma variavel global atraves do comando Global e aplicacao Set
exten=> 6666,1,Set(GLOBAL(COMPRAS)=SIP/6113)
exten=> 6666,2,NoOp(${GLOBAL(COMPRAS)})
; definicao de uma variavel especifica ao canal
exten=> 7777,1,Set(teste=1)
exten=> 7777,n,NoOp(${teste})
exten=> 7777,n,Set(teste=$[${teste} + 1])
exten=> 7777,n,NoOp(${teste})
exten=> 7777,n,Hangup
Funções implementadas no próprio AsteriskMúsica de esperaO Asterisk permite o uso de MP3 como música de espera, porém MP3 são arquivos complicados de se trabalhar pois requerem o uso de aplicações externas para que possam ser reproduzidos, como por exemplo mpg123. Seu funcionamento também pode não agradar muito já que em alguns casos a música pode ser reproduzida em alta rotação além de elevar a carga de processamento da máquina no caso de soluções de grande porte. A partir da versão 1.2 do Asterisk se sugere não mais usar o mpg123. O melhor é converter arquivos MP3 para um formato que o Asterisk trate nativamente, como por exemplo, wav ou pcm (μLaw). A ferramenta ffmpeg pode ser usada para converter arquivos MP3 para WAV ou PCM. # convertendo o arquivo musica.mp3 para musica.wav e musica.pcm
ffmpeg -i musica.mp3 -ar 8000 -ac 1 -ab 64 musica.wav -ar 8000 -ac 1 -ab 64 -f mulaw
musica.pcm -map 0:0 -map 0:0
Os arquivos de música devem ficar em um diretório especificado para cada contexto, conforme definido no arquivo musiconhold.conf: # configuracao no arquivo musiconhold.conf
[alunos]
mode=files
directory=/var/lib/asterisk/moh
sort=random
# deve-se colocar os arquivos wav e/ou pcm no diretorio especificado acima
Para testar a música em espera no plano de discagem, pode-se usar a aplicação MusicOnHold: exten=>667,1,Set(CHANNEL(musicclass)=alunos)
same=>n,Answer
same=>n,MusicOnHold()
same=>n,Dial(SIP/667)
same=>n,Hangup
Filas de atendimentoAmplamente utilizadas nos sistemas de 0800. A configuração é feita no arquivo queues.conf: [fila-suporte]
musicclass=default
strategy=ringall; roundrobin, rrmemory
timeout=10
wrapuptime=30
periodic-announce = em-breve
periodic-announce-frequency=60
member=>SIP/6111
member=>SIP/6112
No plano de discagem a fila de atendimento pode ser usada da seguinte forma: [suporte]
exten=> s,1,Set(CHANNEL(musicclass)=suporte)
exten=> s,2,Playback(bem-vindo)
exten=> s,3,Queue(fila-suporte)
Captura de chamadasA captura possibilita que se puxe uma chamada de um colega no mesmo grupo de chamadas. Isso evita que se tenha que levantar para atender um telefone do seu vizinho que não para de tocar. A captura pode ser feita discando *8 (isso pode ser alterado no arquivo features.conf).
Para habilitar a captura de chamadas é suficiente definir a que grupo de chamadas cada canal pertence (parâmetro callgroup), e de que grupos se pode capturar chamadas (parâmetro pickupgroup). No caso de canais SIP isso fica em sip.conf: [joaozinho]
callgroup=1
pickupgroup=1,2
...
Estacionamento de chamadasO estacionamento de chamadas é feito no arquivo features.conf fazendo uso dos seguintes parâmetros:
Abaixo se pode ver um exemplo de plano de discagem que usa estacionamento de chamadas: [vendas]
include=>parkedcalls
exten=>6200,1,Dial(SIP/6200,30,tT)
exten=>6200,n,Hangup
AtividadeNesta aula faremos experimentos usando ATA, Telefone IP e softphones junto com o Asterisk. Em seguida, testaremos algumas das funções de PBX apresentadas hoje.
06/11: Prática com Asterisk (continuação)Atividade 1: implantando funções de PBX
Atividade 2: criando uma infraestrutura com múltiplos servidores AsteriskNesta atividade vamos integrar os servidores Asterisk de todos os alunos no laboratório. Usaremos uma estrutura hierárquica como ilustrado abaixo:
As funções de PBX imlementadas nas atividades anteriores devem ser preservadas.
08/11: Prática com Asterisk: STUN e integração com DNSSTUN: Session Traversal Utilities for NAT
NAT e AsteriskO Asterisk pode ajudar a viabilizar a comunicação com telefones VoIP que estão atrás de gateways NAT. Na definição de cada canal SIP devem-se incluir as opções: nat=yes
qualify=yes
directmedia=no
Aqui tem uma boa explicação sobre o que fazem essas opções. OBS: isso só funciona quando o Asterisk está no caminho da stream de áudio. No caso de telefones VoIP que conversam diretamente, só resta STUN ou alguma outra técnica do tipo ... Servidores STUNExiste uma implementação de um servidor STUN para Linux (disponível no Ubuntu via apt). Assim, basta instalá-lo em um computador e usá-lo como servidor STUN, contanto que ele esteja do outro lado do NAT. No entanto, existem inúmeros servidores STUN públicos, conforme mostrado na listagem abaixo: provserver.televolution.net
sip1.lakedestiny.cordiaip.com
stun1.voiceeclipse.net
stun01.sipphone.com
stun.callwithus.com
stun.counterpath.net
stun.endigovoip.com
stun.ekiga.net (alias for stun01.sipphone.com)
stun.ideasip.com (no XOR_MAPPED_ADDRESS support)
stun.internetcalls.com
stun.ipns.com
stun.noc.ams-ix.net
stun.phonepower.com
stun.phoneserve.com
stun.rnktel.com
stun.softjoys.com (no DNS SRV record) (no XOR_MAPPED_ADDRESS support)
stunserver.org see their usage policy
stun.sipgate.net
stun.sipgate.net:10000
stun.voip.aebc.com
stun.voipbuster.com (no DNS SRV record) (no XOR_MAPPED_ADDRESS support)
stun.voxalot.com
stun.voxgratia.org (no DNS SRV record) (no XOR_MAPPED_ADDRESS support)
stun.xten.com
numb.viagenie.ca (http://numb.viagenie.ca) (XOR_MAPPED_ADDRESS only with rfc3489bis magic number in transaction ID)
stun.ipshka.com inside UA-IX zone russsian explanation at http://www.ipshka.com/main/help/hlp_stun.php
Maiores detalhes sobre servidores STUN Integração com DNSUma rede representada por um determinado domínio DNS pode ter seu próprio servidor SIP. Seria conveniente que o endereço desse servidor pudesse ser obtido com uma mera consulta DNS. Isso se assemelha ao caso do correio eletrônico, em que o endereço do MTA de um domínio pode ser descoberto consultando-se seu registro MX. De fato, existe uma forma de descobrir o servidor SIP associado a um domínio DNS. Para isso, deve-se explorar o uso de registros DNS do tipo SRV. Um registro SRV, cuja definição se encontra na RFC 2782, possibilita descobrir o nome DNS e o port (TCP ou UDP) de um servidor que responde por um determinado serviço. No caso do SIP de um domínio, o registro SRV deve ser especificado da seguinte forma: _sip._udp SRV 0 5060 nome.do.servidor.sip. ... sendo 0 a prioridade desse servidor (positivo, e quanto menor, maior a prioridade), 5060 o port onde ele atende requisições, e nome.do.servidor.sip seu nome DNS. O próprio serviço STUN pode ser obtido usando registros SRV, mas isso depende do telefone VoIP (ou do PBX, caso ele esteja fazendo papel de participante em uma chamada VoIP). Nesse caso, o registro SRV deve ser definido da seguinte forma: _stun._udp SRV 0 3478 nome.do.servidor.stun. AtividadeHoje vamos continuar a atividade da semana passada, em que se criou uma infraestrutura com múltiplos PBX Asterisk. Vamos incrementá-la implantando as seguintes melhorias:
13/11: Prática com Asterisk: URAO que é uma URA (Unidade de Resposta Audível) ? Clique na imagem abaixo ... Uma URA implementa um menu audível para auto-atendimento. Sua construção é feita toda no plano de discagem, como se pode ver no exemplo abaixo: [default]
exten => 666,1,Goto(ura,s,1)
[ura]
exten => s,1,Answer
exten => s,2,NoOp(Ligação entrou na URA)
exten => s,n,Background(/var/lib/asterisk/sounds/benvindo)
exten => s,n,NoOp(Digite a opção/1-suporte/2-comercial/3-financeiro)
exten => s,n,WaitExten(6); caso nada tenha sido digitado durante a mensagem "benvindo", espera mais 6 segundos no máximo
exten => 1,1,NoOp(Chamada foi para Suporte)
same => n,Dial(SIP/2402,60)
same => n, Hangup
exten => 2,1,NoOp(Chamada foi para Comercial)
same => n,Dial(SIP/2801,60)
same => n, Hangup
exten => 3,1,NoOp(Chamada foi para Financeiro)
same => n,Dial(SIP/2000,60)
same => n, Hangup
exten => i,1,NoOp(Extensão inválida)
same => n,Play(beep)
same => n,GoTo(s,3); volta para o menu
exten => t,1,NoOp(Tempo esgotado)
same => n,Dial(SIP/3401,60)
same => n,Hangup
A URA é composta por mensagens de voz, que instruem o usuário sobre o que ele pode fazer (isto é, apresentam as opções), e músicas, que o entreteem (!?) enquanto aguarda uma operação ser realizada. Assim, para criar uma URA minimamente funcional são necessários esses arquivos de voz. Para gravá-los, pode-se criar uma extensão especial que atenda por 9005nome_de_um_arquivo. Ao chamar essa estensão, pode-se pronunciar a mensagem de voz assim que o Asterisk atender. Para encerrar a mensagem, deve-se digitar #. O arquivo de voz resultante estará no diretório /var/lib/asterisk/sounds, ou em qualquer outro diretório especificado na aplicação record. exten=_9005.,1,answer()
exten=_9005.,n,record(/var/lib/asterisk/sounds/${EXTEN:4}.wav,5,t)
exten=_9005.,n,playback(/var/lib/asterisk/sounds/${EXTEN:4})
exten=_9005.,n,hangup()
Atividade
20/11: Trabalho AsteriskUma empresa possui uma matriz e uma filial em outra cidade. As redes dessas unidades da empresa possuem ambas um link para Internet, sendo que seus roteadores fazem NAT. Para implementar os ramais telefônicos internos, optou-se por usar uma infraestrutura composta por um PBX Asterisk na matriz e outro na filial. Todos os ramais da empresa foram implantados com telefones IP ou telefones convencionais acoplados a um ATA. Por fim, o acesso a PSTN é realizado por um PBX proprietário capaz de falar o protocolo IAX2. Implante essa estrutura, assumindo que o PBX com acesso a PSTN já existe, e possui IP 172.18.200.251. O tronco IAX2 com esse PBX deve ser autenticado com usuário EquipeXX e senha SenhaXX. Além disso, a estrutura deve atender a estes requisitos:
Orientações:
Como criar a rede de desenvolvimentoA rede para desenvolver o trabalho pode ser feita com máquinas virtuais (VM) Virtualbox. Existem diferentes formas de configurar essas VM, sendo uma delas a mostrada abaixo:
Como criar o tronco IAX2Para criar o tronco IAX2 com o Asterisk PSTN, insira a seguinte configuração em /etc/asterisk/iax.conf: [EquipeXX]
type=friend; pode iniciar e receber chamadas
username=EquipeXX; identidade do asterisk da outra ponta do canal
context=seu_contexto; contexto em que processa chamadas recebidas
callerid="PBX EquipeXX"
secret=SenhaXX; senha para autenticar a chamada (iniciadas e recebidas)
host=172.18.200.251; endereço IP do asterisk na outra ponta do tronco
peercontext=rmu; contexto que deve processar a chamada no asterisk destino
No plano de discagem você deve encaminhar chamadas por esse canal IAX2. Por exemplo, se quiser chamar o número 33812850, a aplicação Dial no plano de discagem deve ser invocada assim: exten=>33812850,1,Dial(IAX2/EquipeXX/033812850)
Note que esse exemplo deve ser adaptado no seu plano de discagem para que fique genérico, possibilitando chamar qualquer número da PSTN através desse canal IAX2. Tronco IAX2 entre matriz e filialEsse tronco pode ser criado de forma muito parecida com o tronco entre matriz e Asterisk PSTN. Basta acrescentar em /etc/asterisk/iax.conf a configuração do novo tronco: [matriz-filial]; nome da seção, o qual identifica o canal IAX2
type=friend
username=matriz-filial; note que isso deve ser igual ao nome da seção
context=seu_contexto
callerid="PBX Matriz_ou_Filial"
secret=Sua_Senha
host=IP_da_matrix_ou_filial
peercontext=contexto_destino
qualify=yes
22/11: Avaliação 127/11: Introdução à qualidade de serviço (Qos)Como medir a qualidade de serviço de uma rede ?
Uma pequena experiênciaNessa experiência, todos vão realizar um download simultâneo de um grande arquivo. Enquanto isso, um dos alunos vai visualizar um video via streaming.
TAREFA: leitura de um textoLeiam este texto sobre um problema relacionado aos atrasos de transmissão percebidos na Internet: Na aula de 4a feira (14/03) sortearei um aluno para explicar o conteúdo desse artigo. Bom fim de semana ! 29/11: Simulação com OpnetHoje serão feitos experimentos com o simulador de redes Opnet. Esses experimentos mostrarão os descartes de pacotes, além de atrasos de entrega e variação de atraso, para diferentes disciplinas de enfileiramento nos roteadores.
29/11: Simulação com OpnetContinuação da aula anterior. Obs: deve-se usar o Crossover para rodar o simulador no Ubuntu 10.04. Para facilitar iniciar o simulador, salve este script na sua área de trabalho. Use-o para excutar o simulador. Os modelos de simulação criados na aula passada (pasta op_models) devem ser restaurados em: .cxoffice/Unsupported/drive_c/windows/temp/op_models TAREFA: leitura da semana ...Leiam este textos: As regras são as mesmas: dois alunos serão sorteados para apresentarem explanações sobre esses textos. 04/12: IntServ: Serviços Integrados na InternetIntServ: serviços integrados para provimento de QoS fim-a-fim. Nesse modelo, fluxos de pacotes entre um transmissor e um receptor têm seus requisitos de QoS atendidos pela infraestrutura de rede. Para isso, são efetuadas reservas de recursos (largura de banda, priorização) em todos os roteadores ao longo do caminho entre transmissor e um receptor.
Obs: o pedido de reserva feito pelo transmissor (mensagens PATH) deve ocorrer periodicamente. Caso os roteadores ou o receptor fiquem um certo tempo sem receber uma mensagem PATH, as reservas correspondentes são canceladas.
AtividadePara visualizar o efeito de usar IntServ, iremos utilizar o simulador Opnet.
06/12: DiffServ: Serviços Diferenciados na InternetModelo para provimento de QoS para Internet, em que fluxos são classificados e então tratados de forma diferenciada dentro da rede. A proposta, contida na RFC 2475, visa definir um modelo flexível e escalável para atendimento de requisitos de QoS.
Obs: as figuras abaixo foram obtidas em um artigo da Cisco
Os comportamentos por salto podem ser:
Atividade
TAREFA: RSVP-TELeia este artigo da Cisco sobre engenharia de tráfego em redes MPLS. Em particular, estude a seção que trata de RSVP-TE, uma versão do protocolo RSVP adaptada para o uso em MPLS. 11/12: Laboratório: roteador LinuxNesta 2a parte da disciplina pretende-se implantar uma rede com suporte a QoS. Para isso deve-se seguir o modelo Diffserv, usando-se roteadores Linux como roteadores de borda e núcleo - i.e. como classificadores e condicionadores de tráfego. No entanto, essa plataforma possui diversas peculiaridades quanto aos mecanismos a serem usados para implantar Diffserv. Para que todos se familiarizem com esses mecanismos e entendam como utilizá-los, além de eles serem apresentados em aula serão feitos exercícios para ilustrá-los. Nesta aula será feita uma revisão sobre roteadores Linux. Boa parte do que será visto não deve ser novidade para quem fez Redes 3, mas sempre há algum detalhe novo. Serão mostrados comandos e utilitários necessários para configurar interfaces de rede e rotas. Além disso, serão apresentados alguns utilitários para mostrar informações sobre o tráfego nas interfaces de rede, ou para descobrir a capacidade da rede entre dois nós. As atividades a serem desenvolvidas devem fornecer a base para a implantação de mecanismos de Qos nas próximas aulas.
13/12: QoS em um roteador Linux
Disciplinas de filas (qdisc)Disciplinas de filas são mecanismos para condicionar a saída de pacotes por uma interface de rede. Com elas se podem priorizar pacotes e limitar taxas de bits de fluxos de saída.
As filas contidas nas qdisc podem ser tratadas de diferentes formas. Isso vai determinar a ordem e o ritmo com que os pacotes são desenfileirados para serem transmitidos. Alguns exemplos de qdisc implementadas no Linux:
Os diagramas abaixo ilustram algumas dessas qdisc:
AtividadePara realizar os exercícios abaixo, deve-se criar uma rede composta por um roteador e um computador. 1) Em uma rede deseja-se que os fluxos de entrada (que vem de fora da rede) sejam balanceados. Isso significa que nenhum dos fluxos deve poder monopolizar o link de saída dessa rede. Usando o utilitário tc implemente esse condicionamento de tráfego no seu roteador Linux.# Cria uma qdisc SFQ, que balanceia os fluxos estatisticamente
# OBS: assume-se que a interface de saída seja eth0
tc qdisc add dev eth0 root handle 1:0 sfq
# Cria uma qdisc PRIO, que usa três filas (bandas) para priorizar fluxos.
# -- a fila mais prioritária tem handle 1:1
# -- a próxima fila tem handle 1:2
# -- a fila menos prioritária tem handle 1:3
# OBS: assume-se que a interface de saída seja eth0
tc qdisc add dev eth0 root handle 1:0 prio
# Datagramas vindos da rede 172.18.0.0/16 vão pra fila mais prioritária.
tc filter add dev eth0 parent 1: prio 1 protocol ip u32 match ip src 172.18.0.0/16 flowid 1:1
# Demais datagramas vão para a fila intermediária.
tc filter add dev eth0 parent 1: prio 2 protocol ip u32 match ip src 0.0.0.0/0 flowid 1:2
# Cria uma qdisc PRIO, que usa três filas (bandas) para priorizar fluxos.
# -- a fila mais prioritária tem handle 1:1
# -- a próxima fila tem handle 1:2
# -- a fila menos prioritária tem handle 1:3
# OBS: assume-se que a interface de saída seja eth0
tc qdisc add dev eth0 root handle 1:0 prio
# Balanceia os fluxos nas duas filas da qdisc PRIO que serão usadas
tc qdisc add dev eth0 parent 1:1 handle 2:0 sfq
tc qdisc add dev eth0 parent 1:2 handle 3:0 sfq
# Datagramas vindos da rede 172.18.0.0/16 vão pra fila mais prioritária.
tc filter add dev eth0 parent 1: prio 1 protocol ip u32 match ip src 172.18.0.0/16 flowid 1:1
# Demais datagramas vão para a fila intermediária.
tc filter add dev eth0 parent 1: prio 2 protocol ip u32 match ip src 0.0.0.0/0 flowid 1:2
4) Nessa rede, decidiu-se que fluxos vindos da rede 172.18.0.0/16 devem ter garantidos para si 70 % da capacidade do link, sendo o restante usado para os demais fluxos. Além disso, os fluxos devem estar balanceados. Implemente esse condicionamento de tráfego no seu roteador. 5) O utilitário wondershaper se propõe a facilitar a limitação das taxas de download e upload. Experimente utilizá-lo, e confira como ele usa qdisc para fazer isso. TAREFA: leitura da semanaO texto a seguir continua a leitura desta semana, tratando da implantação de uma estrutura Diffserv na borda da rede. 18/12: QoS em roteador Linux
qdisc com estado (stateful)Com exceção da qdisc PRIO, até o momento foram vistas somente qdisc capazes de conter uma única classe. Regras de priorização e condicionamento de tráfego mais elaboradas precisam, no entanto, combinar qdisc hierarquicamente. Isso pode ser percebido com um primeiro exemplo. Em um enlace, deseja-se limitar em 100 kbps o tráfego de um conjunto de aplicações. No entanto, cada aplicação também deve ter um limite de uso do enlace, de acordo com o descrito a seguir:
# adiciona a qdisc raiz na interface eth0
tc qdisc add dev eth0 root handle 1:0 htb default 23
# cria a classe filha, que impõe o limite de banda global desta HTB
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 100kbps ceil 100kbps
# cria as classes das aplicações
tc class add dev eth0 parent 1:1 classid 1:21 htb rate 40kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:22 htb rate 40kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:23 htb rate 20kbps ceil 100kbps
# cria os filtros para classificar os datagramas
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 80 0xffff flowid 1:21
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 443 0xffff flowid 1:21
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 22 0xffff flowid 1:22
A qdisc HTB funciona da seguinte forma:
Atividade
1) Na rede usada nos exercícios da semana passada, decidiu-se que fluxos vindos das redes 172.18.0.0/16 ou 200.135.37.64/26 devem ter garantidos para si 70 % da capacidade do link, sendo o restante usado para fluxos vindos de outras redes. Além disso, os fluxos devem estar balanceados. Implemente esse condicionamento de tráfego no seu roteador usando a qdisc HTB. 2) Modifique as regras de QoS do exercicio 1 para que seja garantido o pleno atendimento de ate 4 streams de audio (VoIP), independente da origem. 3) Um provedor oferece três planos de acesso:
4) A disciplina de filas WFQ, existente em roteadores Cisco e usada para garantir banda para classes de serviço, não está implementada no controle de tráfego do Linux. Com as disciplinas existentes no Linux seria possível emular a WFQ ? Caso sim, como isso poderia ser feito ? Classificação com iptablesAlém de filtros criados com o utilitário tc, a classificação de pacotes pode ser feita também com o auxílio do iptables. Isso possibilita que se usem os seletores do filtro IP, os quais oferecem muitas possibilidades de classificação. Para fins de classificação, deve-se usar a tabela mangle. Além disso, o uso do iptables pode ser feito de duas formas:
AtividadeModifique as regras criadas nos exercícios anteriores para que usem:
20/12: Avaliação 205/02: Diffserv em roteador Linux
Visão geralUma visão geral sobre DiffServ já foi apresentada no início do semestre. Um domínio DiffServ é composto por rotadores com comportamentos predefinidos (PHB - Per Host Behavior), e que policiam e condicionam fluxos de acordo com suas classes. Dentre os quatro grupos de classes, vale destacar estes dois:
As outras classes são Default PHB, que corresponde a um serviço melhor esforço, e Class Selector PHB, que se baseia na interpretação convencional do campo ToS do cabeçalho IP. A implantação de um domínio DiffServ usando roteadores Linux implica usar as regras de controle de tráfego do Linux (via utilitários tc e iptables) para criar essas classes. Para isso precisamos ter claro o seguinte:
Marcação DiffServNo DiffServ, o campo DSCP de datagramas IP é usado para indicar a classe a que pertence cada datagrama. Com base nesse valor, cada roteador pode aplicar seu PHB e assim condicionar o tráfego. Existem duas formas de marcar o campo DSCP e usar esse valor para classificação:
Policiamento de tráfegoO policiamento de tráfego ocorre na recepção de pacotes por um roteador. Essa função é responsável por assegurar que os pacotes estejam dentro de limites definidos para sua classe. Caso um pacote não satisfaça a condição de policiamento, pode ser descartado ou reclassificado como melhor esforço. Assim, evita-se que fluxos com taxas maiores que a contratada entrem no roteador. Porém isso funciona plenamente somente com a qdisc CBQ, que por ser muito complexa não foi estudada aqui. De qualquer forma, filtros com policiamento podem ser usados para limitar tráfego de entrada usando a qdisc especial ingress. Essa qdisc não possui parâmetros, pois seu propósito é somente conter filtros para fins de policiamento. Seu funcionamento é limitado, pois provê apenas duas possibilidades: aceitar ou descartar pacotes. Exemplo: # Cria a qdisc ingress
tc qdisc add dev eth0 ingress
# Limita o tráfego de entrada vindo de 172.18.0.0/16 a 100kbps, descartando o que exceder esse limite.
tc filter add dev eth0 parent ffff: protocol ip u32 match ip src 172.18.0.0/16 police rate 100kbps buffer 10k drop flowid :1
AtividadeUm pequeno provedor possui uma rede como mostrado abaixo. Essa rede é usada para interligar seus clientes, no caso as empresas Ajax e Tabajara.
Para implantar a estrutura DiffServ, deve-se começar com o seguinte: i) Os roteadores de borda (B1 e B2) devem ser capazes de marcar, policiar e condicionar os datagramas dos clientes. A marcação deve ser feita de acordo com as classes de serviço escolhidas em cada caso. ii) O roteador de núcleo (N1) deve ter um PHB capaz de atender tanto classes do tipo Encaminhamento Assegurado (AF) quanto Encaminhamento Acelerado (EF). A diferenciação nesse roteador deve ser feita de acordo com a marcação contida nos datagramas - e que foi realizada nos roteadores de borda. OBS: os links dentro da rede do provedor estão superdimensionados, portanto não apresentam gargalos.
Tendo a estrutura inicial preparada, resolva os seguintes problemas:
2) O cliente Ajax precisa usar parte da capacidade contratada para transmitir streams de audio (voz). Assumindo que as streams estarão codificadas com codec Speex em modo WB (Wide Band), e que pode haver até 5 streams simultâneas, use a sua estrutura DiffServ para atender essa necessidade. 3) O cliente Tabajara precisa transmitir streams de audio e videoconferência. Assumindo que possam haver até 4 streams de audio simultâneas, codificadas com Speex em modo NB (Narrow Band), e a stream de video use 256 kbps, use a estrutura DiffServ para atender essa demanda. 07/02: DiffServ em roteador Linux (continuação)TAREFA: Leitura da semanaLeiam até a seção 3.2 (inclusive) deste texto sobre MPLS e Diffserv e preparem-se para apresentá-lo na pŕoxima aula (4a feira - 09/05): 08/11: FirewallUma introdução ao iptablesO filtro IP do Linux se chama NetFilter, e suas regras são configuradas por meio do utilitário iptables (ver também seu manual). Com iptables se podem adicionar ou remover regras do Netfilter, além de consultar estatísticas sobre essas regras (ex: contadores dos pacotes e bytes que selecionaram cada regra). As regras são agrupadas em conjuntos denominados chains ("cadeias"), as quais estão relacionadas com o contexto que cada pacote está sendo analisado. Existem três chains predefinidas:
Assim, usando-se o iptables podem ser adicionadas regras a cada uma dessas chains, dependendo do policiamento de tráfego a ser implantado no firewall.
Por exemplo, a regra abaixo permite o encaminhamento de todos os segmentos TCP destinados a porta 80:
Salvando e restaurando regras do iptablesUma vez obtido um conjunto de regras que funcione como desejado, deve-se poder salvá-lo para que possa ser reativado sempre que desejado (ex: no boot). Existem dois utilitários que auxiliam nessa tarefa, sendo eles:
AtividadeCada aluno deve implantar a seguinte rede virtual em seu computador:
# Obs: substitua X pelo número do seu computador
pc[type]=generic
firewall[type]=gateway
pc[eth0]=link:ip=10.1.X.1/24
firewall[eth1]=link:ip=10.1.X.254/24
firewall[eth0]=uplink:bridge=eth0:ip=192.168.2.100+X/24
pc[default_gateway]=10.1.X.254
firewall[default_gateway]=192.168.2.1
No caso do Netkit, execute o programa gnome-netkit para executar a rede virtual. Selecione o menu File->Load and run e carregue o arquivo Lab.conf. Se for usado o Virtualbox, use a máquina virtual Rmu-server para ser o firewall, e Rmu-cliente para ser o Pc. Inicie-as, certificando-se de que suas interfaces de rede estejam em modo bridge. Configure os endereços IP de suas interfaces e também suas rotas default. Cenário 1: Uma rede pequena sem servidoresEm uma rede pequena e que não oferece serviços, todos os fluxos se originam internamente. Assim, o firewall deve impor que somente fluxos internos possam passar. Com base nisso, configure seu firewall das seguintes formas:
13/11: Firewall... continuação da aula anterior: Caso 2 do cenário 1 em diante. TAREFA: leitura da semanaLeia o seguinte texto sobre SLA (Service Level Agreement) e Diffserv, e se prepare para discutir seu conteúdo na aula de 12/04 (5a feira). 20/11: Firewall
Dicas para NAT
Ativando e desativando as regras do filtro IP (iptables)O seguinte script, que deve ser salvo com o nome firewall.sh, pode ser usado para ativar e desativar as regras do filtro IP: #!/bin/bash
# Variaveis
DEV_LAN=eth0
DEV_WAN=eth1
fw_start(){
# Adicionando regras
iptables -A INPUT -i $DEV_LAN -j ACCEPT
}
fw_stop(){
# Limpando as regras
iptables -P INPUT ACCEPT
iptables -t filter -F
}
fw_uso(){
# Mensagem de ajuda
echo "Sintaxe errada..."
echo "./$0 (start|stop)"
}
case $1 in
start)
fw_start
;;
stop)
fw_stop
;;
*)
fw_uso
;;
esac
Atividade 1: firewall/roteador para rede domésticaUma pequena rede possui um firewall com algumas regras básicas para protegê-la do mundo externo:
Atividade 2: serviço SMTP rodando em rede com NAT
Obs: para monitorar quantos pacotes estão casando com as regras: watch iptables -t filter -L -v
Obs: para limitar a taxa de pacotes deve-se usar o módulo limit (ver maiores detalhes no manual). Por exemplo: # limita as cconexões ao servidor web: no máximo 2 por segundo
iptables -A FORWARD -p tcp -m limit -m multiport -m state -d IP_servidor_web --dports 80,443
--state NEW --limit-rate 2/second -j ACCEPT
22/11: Lista de exercícios: FirewallNesta aula a turma se organizará em grupos, que devem resolver o seguinte problema:
Crie as regras do filtro IP no firewall para que os serviços indicados nos servidores da DMZ possam ser acessados de fora. Essas regras devem também permitir o acesso irrestrito dos computadores da rede interna à Internet (ex: o Pc). Os servidores da DMZ, por sua vez, não podem iniciar conexões - seja para a rede interna ou externa. Além disso, o firewall deve poder ser administrado remotamente via SSH. Por fim, devem ser registrados todos os inícios de conexões e todos os pacotes recusados. Obs: quem quiser fazer o exercício com o Netkit pode usar o seguinte modelo para a rede: global[compact]=1
dmz1[type]=generic
dmz2[type]=generic
pc[type]=generic
firewall[type]=gateway
# Um computador pode ser usado para representar a Internet (!?!)
internet[type]=generic
dmz1[eth0]=dmz:ip=10.0.0.1/24
dmz2[eth0]=dmz:ip=10.0.0.2/24
firewall[eth1]=dmz:ip=10.0.0.254/24
pc[eth0]=lan-interna:ip=192.168.0.1/24
firewall[eth2]=lan-interna:ip=192.168.0.254/24
firewall[eth0]=link-internet:ip=172.18.0.100/16
# A "Internet" tem só o IP 172.18.0.1 ;-)
internet[eth0]=link-internet:ip=172.18.0.1/16
dmz1[default_gateway]=10.0.0.254
dmz2[default_gateway]=10.0.0.254
pc[default_gateway]=192.168.0.254
# Se o script firewall.sh ficar em /root, ele pode ser preservado para poder ser usado
# em proximas execucoes da rede virtual. Porém para isso deve-se exportar
firewall[preserve]=/root/firewall.sh
Documento a ser entregueApresentar um shell script (comentado) com as funções start, stop, restart e uso com as devidas regras para implementação do firewall e roteador. Faça uso de variáveis para os endereços IP, endereços de rede, interfaces de rede, etc. visando assim tornar o script mais genérico. Lista de exercíciosResolver os exercícios e problemas propostos no capítulo 7 do livro Redes de Computadores e a Internet, 5a edição, de James Kurose. Em particular, resolver:
27/11: Lista de exercícios sobre firewall (continuação)Concluir a resolução da lista. Estendendo as regras do firewallNa rede do exercício sobre firewall, algumas novas regras de policiamento de tráfego devem ser implantadas:
??/03: Avaliação 3 |