Redes Multimídia (diário 2014-1)
Endereço encurtado desta página: http://bit.ly/rmu20141
Sobre a disciplina
Metodologia
Metodologia orientada a projeto, sendo esse o desenvolvimento de uma solução de comunicação segura entre diversos nós espalhados pela Internet. Será usado, para tal, um concentrador que atuará como autenticador e ponto de integração com outras redes. A comunicação entre os nós poderá ser intermediada pelo concentrador ou mesmo direta entre os terminais. É obrigatória a segurança de todos os dados trafegados (sinalização e transmissão de mídia). A qualidade de serviço será necessária, seja intra-rede ou entre redes locais conectadas à Internet. Como o IFSC será uma dessas redes locais, o uso de IPv6 será necessário - tendo assim pilha dupla de operação. Novas tecnologias serão contempladas, como WebRTC e novos codecs projetados para redes IP.
Ferramentas
- Este diário de bordo.
- Netkit.
- Repositório dos arquivos do Netkit:
- Controle de versão com Git via HTTPS: https://tele.sj.ifsc.edu.br/projetos/rmu20141.
- Credenciais: acesso anônimo para cópia (leitura) do repositório, acesso autenticado para escrita mediante solicitação.
Avaliação
- Serão realizadas avaliações por temática/projeto em sala.
- Para aprovação: no máximo 2 Ds, e para cada D um A correspondente. Exceção: para o último projeto o conceito mínimo deve ser C.
Aulas
Apresentação da disciplina e oportunidades
10/02
- Apresentação da disciplina: metodologia e avaliação.
12/02
- Definição da metodologia e escopo do problema: a rede de comunicação.
17/02
Não houve aula.
19/02
Com a possibilidade de troca de professor da disciplina, foi tratado um tema relevante: o mercado de trabalho de Telecomunicações na Grande Florianópolis.
Sinalização
24/02
- Estudo de caso: Dropbox e transmissão de vídeo para várias plataformas.
- Telefona IP, sinalização, H.323, SIP e XMPP com a extensão Jingle.
- Material de apoio.
- Convidado(?): Carlos Eduardo Wagner.
26/02
- O protocolo SIP - RFC 3261.
10/03
- SIP, intracentral.
- Um cenário possível para o experimento:
- Geral
global[compact]=False
global[mem]=64
global[vm]=4
global[clean]=False
global[path]=/tmp/rmu20141/cenario0/lab
- Roteador
rt0[type]=router
- Rede 0
- Equipamentos
r0sw0[type]=switch
r0pbx0[type]=pbx
r0pc0[type]=generic
r0pc1[type]=generic
- Enlaces intra-rede
r0sw0[eth0]=p00
rt0[eth0]=p00:ip=192.168.0.254/24
r0sw0[eth1]=p01
r0pbx0[eth0]=p01:ip=192.168.0.1/24
r0sw0[eth2]=p02
r0pc0[eth0]=p02:ip=192.168.0.100/24
r0sw0[eth3]=p03
r0pc1[eth0]=p03:ip=192.168.0.101/24
- Rotas
r0pbx0[default_gateway]=192.168.0.254
r0pc0[default_gateway]=192.168.0.254
r0pc1[default_gateway]=192.168.0.254
- Arquivos a salvar
r0pbx0[preserve]=/usr/local/asterisk/etc/asterisk/sip.conf:/usr/local/asterisk/etc/asterisk/extensions.conf
r0pc0[preserve]=/root/pjsua.cfg
r0pc1[preserve]=/root/pjsua.cfg
- Rede 1
- Equipamentos
r1sw0[type]=switch
r1pbx0[type]=pbx
r1pc0[type]=generic
r1pc1[type]=generic
- Enlaces intra-rede
r1sw0[eth0]=p10
rt0[eth1]=p10:ip=192.168.1.254/24
r1sw0[eth1]=p11
r1pbx0[eth0]=p11:ip=192.168.1.1/24
r1sw0[eth2]=p12
r1pc0[eth0]=p12:ip=192.168.1.100/24
r1sw0[eth3]=p13
r1pc1[eth0]=p13:ip=192.168.1.101/24
- Rotas
r1pbx0[default_gateway]=192.168.1.254
r1pc0[default_gateway]=192.168.1.254
r1pc1[default_gateway]=192.168.1.254
- Arquivos a salvar
r1pbx0[preserve]=/usr/local/asterisk/etc/asterisk/sip.conf:/usr/local/asterisk/etc/asterisk/extensions.conf
r1pc0[preserve]=/root/pjsua.cfg
r1pc1[preserve]=/root/pjsua.cfg
</syntaxhighlight>
Experimentos
Ligação direta entre terminais
Foi utilizado o aplicativo siprtp em ambos os terminais:
- Terminal 0, r0pc0 (192.168.0.100), que operará como UAS:
siprtp -i 192.168.0.100
</syntaxhighlight>
- Terminal 1, r0pc1 (192.168.0.101), que operará como UAC:
siprtp -i 192.168.0.101 sip:192.168.0.100
</syntaxhighlight>
Ligação intermediada por SIP Registrar/Proxy
Foi utilizado o aplicativo pjsua nos terminais e Asterisk no servidor:
- Servidor r0pbx0 (192.168.0.1) como SIP Registrar e Proxy. Foram configurados duas contas SIP no arquivos /etc/asterisk/sip.conf:
[100]
type=friend ; ambos os sentidos
host=dynamic
defaultuser=100
context=rmu20141
canreinvite=no
[101]
type=friend
host=dynamic
defaultuser=101
context=rmu20141
canreinvite=no
</syntaxhighlight>
- E no arquivo /etc/asterisk/extensions.conf o plano de discagem:
[rmu20141]
exten => _1XX,1,Dial(SIP/${EXTEN})
exten => _1XX,n,Hangup()
</syntaxhighlight>
- Ainda no mesmo servidor, foi iniciado o serviço e verificadas as configurações (quem pode ligar, peers, e quem pode receber, users):
asterisk -c
sip show peers
sip show users
dialplan show rmu20141
</syntaxhighlight>
- Depois, foi configurada a primeira conta (100) no terminal r0pc0, no arquivos /root/pjsua.cfg:
--registrar sip:192.168.0.1
--proxy sip:192.168.0.1;lr
--realm *
--id sip:100@192.168.0.1
--username 100
--local-port 5060
--null-audio
</syntaxhighlight>
- O mesmo foi feito para a segunda conta (101), em r0pc1 (mesmo arquivo):
--registrar sip:192.168.0.1
--proxy sip:192.168.0.1;lr
--realm *
--id sip:101@192.168.0.1
--username 101
--local-port 5060
--null-audio
</syntaxhighlight>
- Para acompanhar o registro, foi ativada a depuração de mensagens SIP no servidor (na CLI do Asterisk):
sip set debug on
</syntaxhighlight>
- E, em cada terminal (r0pc0 e r0pc1), foi executado o comando que inicia o registro das contas SIP:
pjsua --config-file=/root/pjsua.cfg
</syntaxhighlight>
Por fim, faltou apenas iniciar uma chamada telefônica.
12/03
- SIP, aplicação em sala de ligação intracentral.
17/03
- SIP, intercentrais e modelo hierárquico e federado (com DNS).
- Adicionada a ferramenta de controle de versão dos arquivos.
24/03
Entrega: sinalização com SIP. A seguir, o roteiro.
- Em cada VM, iniciar o monitor de rede tshark (onde <maquina> é o nome da VM):
tshark -i eth0 -f "udp" -w /tmp/<maquina>.pcap &
</syntaxhighlight>
- Realizar a ligação entre: r0pc0 e r1pc1 (r0pc0-r0pbx0-r1pbx0-r1pc1) e r1pc0 e r0pc1 (r1pc0-r1pbx0-r0px0-r0pc1).
- Encerrar as ligações.
- Encerrar o monitor de rede. Em cada VM:
killall -TERM tshark
sleep 2
killall -KILL tshark
</syntaxhighlight>
- Copiar os arquivos gerados (*.pcap) para a máquina virtualizadora. O diretório /hostlab da VM se refere ao diretório lab da máquina real. Em cada VM (onde <maquina> é o nome da VM):
cp /tmp/<maquina>.pcap /hostlab/
</syntaxhighlight>
- Enviar, por email os 6 (seis) arquivos .pcap:
- lab/r0pc0.pcap
- lab/r0pc1.pcap
- lab/r0pbx0.pcap
- lab/r1pc0.pcap
- lab/r1pc1.pcap
- lab/r1pbx0.pcap
Descrição de Mídia
26/03
- Estudo de caso: Skype e o codec SILK.
- Descrição de mídia, SIP/SDP, codecs.
31/03
- SIP com SDP, definição de codecs.
- Roteiro utilizado
cat > ${HOME}/.gitconfig << EOF
[http]
sslVerify = no
EOF
cd /tmp/
git clone https://tele.sj.ifsc.edu.br/projetos/rmu20141
cd /tmp/rmu20141/cenario0
~/netkit/bin/gnome-netkit
em cada VM: tshark -i eth0 -f udp -w /tmp/MAQUINA.pcap -q &
nos PBXs: /usr/local/asterisk/sbin/asterisk -c
nos terminais: pjsua --config-file=pjsua.cfg
r0pc0: ligar para D (r1pc1): m, sip:0101@192.168.0.1
qualidade da ligação: dq
r1pc1: atender a ligação: a, 200
qualidade da ligação: dq
r0pc0: parar o processo pjsua: Ctrl + z
cp /tmp/r0pc0.pcap /hostlab/
retomar o processo pjsua: fg
r1pc1: parar o processo pjsua: Ctrl + z
cp /tmp/r1pc1.pcap /hostlab/
retomar o processo pjsua: fg
no ambiente real: wireshark /tmp/rmu20141/cenario0/lab/r0pc0.pcap
wireshark /tmp/rmu20141/cenario0/lab/r1pc1.pcap
nos PBXs: parar o processo asterisk: Ctrl + z
editar os codecs: vi /etc/asterisk/sip.conf
[100]
disallow=all
allow=alaw
[101]
disallow=all
allow=alaw
[r0pbx0-r1pbx0]
disallow=all
allow=alaw
[r1pbx0-r0pbx0]
disallow=all
allow=alaw
retomar o asterisk: fg
atualizar a configuração: sip reload
r0pc0: desligar a atual ligação: h
ligar para D (r1pc1): m, sip:0101@192.168.0.1
qualidade da ligação: dq
r1pc1: atender a ligação: a, 200
qualidade da ligação: dq
r0pc0: parar o processo pjsua: Ctrl + z
cp /tmp/r0pc0.pcap /hostlab/
retomar o processo pjsua: fg
r1pc1: parar o processo pjsua: Ctrl + z
cp /tmp/r1pc1.pcap /hostlab/
retomar o processo pjsua: fg
</syntaxhighlight>
02/04
- Entrega: codecs personalizados por canal/tronco:
cat > $HOME/.gitconfig << EOF
[http]
sslVerify=no
EOF
cd /tmp
rm -rf rmu20141
git clone https://tele.sj.ifsc.edu.br/projetos/rmu20141
cd rmu20141/cenario0
gnome-netkit
abrir o laboratório /tmp/rmu20141/cenario0/lab.conf
4 casos de ligações entre A-M-N-D e C-N-M-B (8 no total):
1) as ligações são estabelecidas utilizando apenas G711 lei A (alaw); ou seja, em ambos os sentidos em cada ligação.
2) as ligações são estabelecidas utilizando apenas GSM (gsm).
3) as ligações não podem ser estabelecidas por incompatibilidade de codec.
4) as ligações podem ser estabelecidas porque há um 'gateway' de mídia; ou seja, a transcodificação é necessária - em ambos os sentidos.
O que ajuda no Asterisk:
core show translation
core show channels
core show channel (nome do canal)
Transmissão de Mídia
- Estudo de caso: Há quase 10 anos, já se falava em compartilhamento e controle remoto de tela com RTP.
- Transmissão de mídia, RTP/RTcP.
- Entrega: análise latência, jitter e perda de pacotes e impacto na mídia.
Qualidade de Serviço
07/04
- Estudo de caso: Implementando qualidade de serviço para VoIP usando Cisco.
- Qualidade de serviço.
09/04
- TOS, DSCP, RSVP/RSVP-TE/NSIS.
14/04
- Filas e priorização em redes sem QoS.
16/04
- Filas e priorização em redes sem QoS.
- Entrega: ambiente com e sem protocolo de QoS.
Segurança
21/4
- Estudo de Google Hangouts.
- Criptografia.
- Convidado: Patricia Domingos e/ou Paulo Vitor Chirolli Almeida.
23/4
- SSL, TLS, SIP com TLS.
28/4
- SRTP e zRTP.
30/4
- Criptografia opcional e obrigatório.
- Entrega: sinalização e mídia criptografados sob demanda, opcional e obrigatório.
Novas Tecnologias
05/05
- Estudo de caso: WebRTC.
- Novas tecnologias e a WWW.
- Convidado: Felipe Silva Borges.
07/05
- Servidor Web, HTML5, Javascript.
12/05
- HTML5, Javascript, WebRTC.
14/05
- HTML5, Javascript, WebRTC.
- Entrega: ligação entre ramal analógico e canal WebRTC.
IP
19/05
- IPv4, NAT, STUN, ICE, túneis (seguros ou não).
21/05
- IPv4, NAT, STUN, ICE, túneis (seguros ou não).
26/05
- IPv6.
28/05
- IPv6.
02/07
- IPv6.
04/07
- IPv6.
- Entrega: ligação entre canais com terminações IPv4 e IPv6.