Mudanças entre as edições de "PJI2-2017-1"
Linha 622: | Linha 622: | ||
{{collapse top | Aula 3}} | {{collapse top | Aula 3}} | ||
continuação da [[PJI2-2017-1#15.2F02:_Manipulando_de_arquivos_e_diret.C3.B3rios|aula de 15/02]] | continuação da [[PJI2-2017-1#15.2F02:_Manipulando_de_arquivos_e_diret.C3.B3rios|aula de 15/02]] | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | =20/02: O protocolo SIP= | ||
+ | |||
+ | {{collapse top | Aula 4}} | ||
+ | |||
+ | * [http://tele.sj.ifsc.edu.br/~msobral/rmu/slides/aula-22.pdf Transparências] | ||
+ | * [[Arquivo: manual_do_usuario_ata_gkm_1000t_e_ata_gkm_2000t.pdf]] | ||
+ | * [http://www.siptutorial.net/SIP/relation.html Mensagens, Transações, Diálogos e Chamadas SIP] | ||
+ | * [https://dl.dropboxusercontent.com/u/50936332/ComReinviteRTP.pcap Captura: com reinvite] | ||
+ | * [https://dl.dropboxusercontent.com/u/50936332/SemReinvite.cap Captura: com reinvite] | ||
+ | |||
+ | === O protocolo SIP === | ||
+ | |||
+ | O protocolo SIP segue um modelo P2P (peer-to-peer), em que dois ou mais participantes, chamados de agentes, trocam mensagens com a finalidade de estabelecerem algum tipo de sessão (de voz no nosso caso, mas pode ser de video, mensagem instantânea, ou algum outro tipo de serviço). Assim, cada agente em uma sessão SIP se comporta tanto como cliente (quando envia requisições SIP) quanto servidor (quando responde a requisições SIP). A parte que inicia requisições se chama UAC (''User Agent Client''), e a que responde requisições é denominada UAS (''User Agent Server''), estando ambas implementadas nos telefones IP e similares. | ||
+ | |||
+ | Uma sessão SIP envolve a interação entre duas entidades lógicas, que no caso de chamadas VoIP são por vezes chamadas simplesmente de ''usuários''. A diferença entre entidade lógica e agente é que a primeira é o usuário (recurso) que inicia ou recebe chamadas, e o segundo é a aplicação que contém os mecanismos para efetuar e receber chamadas - pense que a entidade seria uma pessoa, e o agente o aparelho telefônico em uma chamada telefônica convencional. Cada entidade é identificada por uma [http://tools.ietf.org/html/rfc3261#section-19.1 URI (''Uniform Resource Indicator'') SIP], semelhante a um número de telefone. Além de identificar uma entidade lógica, a informação em uma URI SIP indica a forma com que essa entidade deve ser contatada via SIP. Exemplos de URI SIP seguem abaixo: | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | # Uma URI simples, tipicamente usada em mensagens INVITE (que iniciam sessões SIP) | ||
+ | sip:1234@biloxi.example.com | ||
+ | |||
+ | # Uma URI mais elaborada, tipicamente usada em alguns cabeçalhos SIP (ex: Contact ou Refer-to) | ||
+ | sip:joseph.fourier@transform.org:5060;transport=udp;user=ip;method=INVITE;ttl=1; | ||
+ | maddr=240.101.102.103?Subject=FFT | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | As comunicações SIP seguem uma hierarquia, cujos níveis são: | ||
+ | * '''Mensagens:''' mensagens de texto individuais trocadas entre agentes. | ||
+ | * '''Transação:''' sequência de mensagens entre dois agentes iniciando com uma requisição e terminando com uma resposta final. | ||
+ | * '''Diálogo:''' uma relação entre dois agentes que persiste por algum tempo, e identificada por um ''Call-ID''. | ||
+ | * '''Chamada:''' composta por todos os diálogos originados por um agente. | ||
+ | |||
+ | [[imagem:Sip-relation.gif]] | ||
+ | <br>'''Mensagens, transações, diálogos e chamadas'' | ||
+ | |||
+ | === Mensagens SIP === | ||
+ | |||
+ | O protocolo SIP tem uma estrutura simplificada com mensagens de pedido e resposta, assemelhando-se ao protocolo HTTP. Essas mensagens possuem a seguinte estrutura: | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | Linha inicial | ||
+ | Cabeçalho1: valor do cabeçalho 1 | ||
+ | Cabeçalho2: valor do cabeçalho 2 | ||
+ | ... | ||
+ | CabeçalhoN: valor do cabeçalho N | ||
+ | <linha em branco> | ||
+ | corpo da mensagem (opcional) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | A diferença básica entre pedidos e respostas SIP está na ''linha inicial'': pedidos contém um método SIP e seus parâmetros, e respostas possuem um código de status junto com um curto texto informativo. Abaixo são mostradas duas mensagens SIP: um pedido e sua respectiva resposta. Nesse exemplo, ambas mensagens não possuem um corpo de mensagem (lembre que isso é opcional): | ||
+ | |||
+ | |||
+ | [[imagem:Sip-example1.png]] | ||
+ | |||
+ | |||
+ | '''Pedido:''' | ||
+ | <syntaxhighlight lang=text>REGISTER sips:ss2.biloxi.example.com SIP/2.0 | ||
+ | Via: SIP/2.0/TLS client.biloxi.example.com:5061;branch=z9hG4bKnashds7 | ||
+ | Max-Forwards: 70 | ||
+ | From: Bob <sips:bob@biloxi.example.com>;tag=a73kszlfl | ||
+ | To: Bob <sips:bob@biloxi.example.com> | ||
+ | Call-ID: 1j9FpLxk3uxtm8tn@biloxi.example.com | ||
+ | CSeq: 1 REGISTER | ||
+ | Contact: <sips:bob@client.biloxi.example.com> | ||
+ | Content-Length: 0 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | '''Resposta:''' | ||
+ | <syntaxhighlight lang=text>SIP/2.0 200 OK | ||
+ | Via: SIP/2.0/TLS client.biloxi.example.com:5061;branch=z9hG4bKnashd92 | ||
+ | ;received=192.0.2.201 | ||
+ | From: Bob <sips:bob@biloxi.example.com>;tag=ja743ks76zlflH | ||
+ | To: Bob <sips:bob@biloxi.example.com>;tag=37GkEhwl6 | ||
+ | Call-ID: 1j9FpLxk3uxtm8tn@biloxi.example.com | ||
+ | CSeq: 2 REGISTER | ||
+ | Contact: <sips:bob@client.biloxi.example.com>;expires=3600 | ||
+ | Content-Length: 0 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | O pedido exemplificado foi uma mensagem do tipo REGISTER, que é um tipo de método SIP. Um método pode ser entendido como um comando enviado de um participante a outro. A resposta contém o status ''200 OK'', que significa que o pedido foi atendido com sucesso. Por fim, ambas mensagens contiveram um conjunto de cabeçalhos necessários para caracterizá-las, dentre eles ''Via'', ''From'', ''To'', ''Call-Id'', ''CSeq'', ''Contact'' e ''Content-Length''. As tabelas a seguir descrevem resumidamente os principais métodos e cabeçalhos SIP. | ||
+ | |||
+ | {| border="1" cellpadding="2" | ||
+ | !Método SIP | ||
+ | !Descrição | ||
+ | |- | ||
+ | | REGISTER || Usado por um agente para notificar a rede SIP (outros agentes) sobre sua URI de contato | ||
+ | |- | ||
+ | | INVITE || Usado para estabelecer sessões entre dois agentes | ||
+ | |- | ||
+ | | ACK || Confirma respostas finais a requisições INVITE | ||
+ | |- | ||
+ | | BYE || Termina uma sessão previamente estabelecida | ||
+ | |- | ||
+ | | CANCEL|| Encerra tentativas de chamadas | ||
+ | |- | ||
+ | | OPTIONS|| Consulta um agente sobre suas capacidades | ||
+ | |- | ||
+ | |} | ||
+ | ''Tabela de métodos SIP (não exaustiva ... apenas os principais métodos)'' | ||
+ | |||
+ | |||
+ | {| border="1" cellpadding="2" | ||
+ | !Cabeçalho SIP | ||
+ | !Descrição | ||
+ | !Obrigatoriedade | ||
+ | !Uso | ||
+ | |- | ||
+ | |''Via'' ||Registra a rota seguida por uma requisição, sendo usado para que respostas sigam o caminho inverso || Requisição e resposta ||Requisição e resposta | ||
+ | |- | ||
+ | |''To'' || Identifica o destinatário de uma requisição ||Requisição e resposta||Requisição e resposta | ||
+ | |- | ||
+ | |''From''||Identifica o originador da requisição ||Requisição e resposta||Requisição e resposta | ||
+ | |- | ||
+ | |''Call-Id''||Identifica univocamente uma chamada entre um UAC e um UAS. || Requisição e resposta||Requisição e resposta | ||
+ | |- | ||
+ | |''CSeq'' ||Numera as requisições de uma mesma chamada de um mesmo UAC || Requisição ||Requisição e resposta | ||
+ | |- | ||
+ | |''Contact'' || Identifica o originador da requisição ou o recurso requisitado|| ||Requisição e resposta | ||
+ | |- | ||
+ | |''Max-Forwards'' ||Máximo número de saltos que a requisição pode atravessar || Requisição||Requisição | ||
+ | |- | ||
+ | |''Content-Length'' || Informa a quantidade de bytes do corpo da mensagem|| ||Requisição e resposta | ||
+ | |- | ||
+ | |''Date'' || Informa a data e horário de uma requisição ou resposta|| ||Requisição e resposta | ||
+ | |- | ||
+ | |''Supported'' || Lista uma ou mais opções suportadas por um UAC ou UAS|| ||Requisição e resposta | ||
+ | |- | ||
+ | |''User-Agent'' || Informa sobre o agente (o programa) originador de uma requisição || || | ||
+ | |- | ||
+ | |''Allow'' ||Informa os métodos SIP aceitos pelo UAS || ||Resposta | ||
+ | |- | ||
+ | |''Content-type''||Informa o tipo de conteúdo contido no corpo da mensagem || || | ||
+ | |- | ||
+ | |''WWW-Authenticate''||Informa que o UAC deve se autenticar para o UAS (e como isso deve ser feito) || || Resposta | ||
+ | |- | ||
+ | |''Authorization''||Contém as credenciais para autenticar o UAC para o UAS || || Requisição | ||
+ | |} | ||
+ | ''Tabela de cabeçalhos SIP (não exaustiva ... apenas os principais cabeçalhos)'' | ||
+ | |||
+ | === Diagramas de chamadas === | ||
+ | |||
+ | Alguns tipos de chamadas VoIP com SIP são recorrentes, estando representadas nas subseções a seguir. | ||
+ | |||
+ | ==== Registro de agente SIP em um proxy SIP ==== | ||
+ | |||
+ | Esta chamada ocorre entre um agente SIP e um ''servidor de registro SIP'' (''SIP Registar''), que está implementado tipicamente em um proxy SIP, um gateway de media, ou um PBX IP (este último incorpora as funções dos dois primeiros com as de um PBX). O registro do agente SIP tem por finalidade fazer com que o servidor de registro SIP conheça a localização do agente (endereço IP e port usado pelo UAS). | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | Fone 1 Proxy SIP ou PBX IP | ||
+ | | | | ||
+ | | REGISTER | | ||
+ | |---------------------------->| | ||
+ | | 401 Unauthorized | | ||
+ | |<----------------------------| | ||
+ | | REGISTER | | ||
+ | |---------------------------->| | ||
+ | | 200 OK | | ||
+ | |<----------------------------| | ||
+ | | | | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Chamada direta entre dois agentes SIP ==== | ||
+ | |||
+ | Uma chamada direta entre dois agentes envolve uma transação INVITE, em que um agente convida o outro a estabelecer uma sessão SIP com um determinado tipo de media (ex: audio). A chamada é finalizada quando um dos agentes inicia uma transação BYE. | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | Fone 1 Fone 2 | ||
+ | | | | ||
+ | | INVITE | | ||
+ | |----------------------->| | ||
+ | | 180 Ringing | | ||
+ | |<-----------------------| | ||
+ | | | | ||
+ | | 200 OK | | ||
+ | |<-----------------------| | ||
+ | | ACK | | ||
+ | |----------------------->| | ||
+ | | RTP Media | | ||
+ | |<======================>| | ||
+ | | | | ||
+ | | BYE | | ||
+ | |<-----------------------| | ||
+ | | 200 OK | | ||
+ | |----------------------->| | ||
+ | | | | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Chamada entre dois agentes SIP com intermediação de um Proxy SIP ==== | ||
+ | |||
+ | A principal diferença entre este tipo de chamada e [[RMU-2013-1#Estabelecimento_de_chamada_diretamente_entre_dois_agentes_SIP|o anterior]] é o uso de um (ou mais) proxy SIP entre os dois agentes. O proxy SIP tem por finalidade ajudar na realização das chamadas, uma vez que usualmente incorpora a função de servidor de registro. Um proxy SIP encaminha chamadas para o agente chamado, ou para outro proxy mais próximo do destino, podendo aplicar regras de controle de acesso quanto a quem pode realizar chamadas para quem. | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | Fone 1 Proxy SIP ou PBX IP Fone 2 | ||
+ | (directmedia=yes) | ||
+ | | | | | ||
+ | | INVITE | | | ||
+ | |--------------->| INVITE | | ||
+ | | 100 Trying |--------------->| | ||
+ | |<---------------| 100 Trying | | ||
+ | | |<---------------| | ||
+ | | | | | ||
+ | | | 180 Ringing | | ||
+ | | 180 Ringing |<---------------| | ||
+ | |<---------------| | | ||
+ | | | 200 Ok | | ||
+ | | 200 Ok |<---------------| | ||
+ | |<---------------| | | ||
+ | | ACK | | | ||
+ | |--------------->| ACK | | ||
+ | | |--------------->| | ||
+ | | | | | ||
+ | | RTP Media | | ||
+ | |<===============================>| | ||
+ | | | | | ||
+ | | | BYE | | ||
+ | | BYE |<---------------| | ||
+ | |<---------------| | | ||
+ | | 200 Ok | | | ||
+ | |--------------->| 200 Ok | | ||
+ | | |--------------->| | ||
+ | | | | | ||
+ | | | | | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Chamada entre dois agentes SIP com intermediação de um gateway de media ==== | ||
+ | |||
+ | Este caso é parecido com o anterior, que usa um proxy SIP. A diferença está na intermediação do fluxo de media, que é feita pelo gateway de media. Isso possibilita que dois agentes estabeleçam uma chamada mesmo usando codecs diferentes, pois o gateway de media fará a tradução entre codecs. | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | Fone 1 PBX IP Fone 2 | ||
+ | (directmedia=no) | ||
+ | | | | | ||
+ | | INVITE | | | ||
+ | |--------------->| INVITE | | ||
+ | | 100 Trying |--------------->| | ||
+ | |<---------------| 100 Trying | | ||
+ | | |<---------------| | ||
+ | | | 180 Ringing | | ||
+ | | 180 Ringing |<---------------| | ||
+ | |<---------------| | | ||
+ | | | 200 Ok | | ||
+ | | 200 Ok |<---------------| | ||
+ | |<---------------| | | ||
+ | | ACK | | | ||
+ | |--------------->| ACK | | ||
+ | | |--------------->| | ||
+ | | RTP Media | RTP Media | | ||
+ | |<==============>|<==============>| | ||
+ | | BYE | | | ||
+ | |--------------->| BYE | | ||
+ | | |--------------->| | ||
+ | | | 200 Ok | | ||
+ | | 200 Ok |<---------------| | ||
+ | |<---------------| | | ||
+ | | | | | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Chamada entre dois agentes SIP com intermediação de um gateway de media e uso de re-INVITE ==== | ||
+ | |||
+ | O uso de re-invite possibilita que o fluxo de media seja estabelecido diretamente entre os agentes SIP, caso usem o mesmo codec. Assim, evita-se a carga de processamento envolvida na intermediação pelo gateway de media. Isso é feito com o envio pelo gateway de media (representado abaixo por um PBX IP) de um novo INVITE para cada agente SIP, após a sessão SIP estar estabelecida. Esse novo INVITE contém uma descrição de media (mensagem SDP embutida no corpo da mensagem INVITE) com a localização do outro agente SIP - isso é, seu endereço IP, port UDP para a stream RTP e codec a ser usado. | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | Fone 1 PBX IP Fone 2 | ||
+ | (directmedia=yes) | ||
+ | | | | | ||
+ | | INVITE | | | ||
+ | |--------------->| INVITE | | ||
+ | | 100 Trying |--------------->| | ||
+ | |<---------------| 100 Trying | | ||
+ | | |<---------------| | ||
+ | | | 180 Ringing | | ||
+ | | 180 Ringing |<---------------| | ||
+ | |<---------------| | | ||
+ | | | 200 Ok | | ||
+ | | 200 Ok |<---------------| | ||
+ | |<---------------| | | ||
+ | | ACK | | | ||
+ | |--------------->| ACK | | ||
+ | | INVITE |--------------->| | ||
+ | |<---------------| INVITE | | ||
+ | | 200 OK |--------------->| | ||
+ | |--------------->| 200 OK | | ||
+ | | ACK |<---------------| | ||
+ | |--------------->| ACK | | ||
+ | | |<---------------| | ||
+ | | | | ||
+ | | RTP Media | | ||
+ | |<===============================>| | ||
+ | | BYE | | | ||
+ | |--------------->| BYE | | ||
+ | | |--------------->| | ||
+ | | | 200 Ok | | ||
+ | | 200 Ok |<---------------| | ||
+ | |<---------------| | | ||
+ | | | | | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Correção para o wireshark === | ||
+ | |||
+ | O wireshark instalado no Ubuntu 14.04, como nas VM do laboratório, possui um ''bug'' que impede que se visualize a análise do fluxo de chamadas VoIP. Nessa versão, quando se seleciona no menu ''Telephony->VoIP Calls'', e em seguida clica-se em uma das chamadas apresentadas e depois o botão ''Flow'', o wireshark termina a execução. A solução para esse problema envolve instalar uma [https://2.na.dl.wireshark.org/src/wireshark-1.12.13.tar.bz2 versão mais recente do wireshark]: | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | sudo add-apt-repository ppa:wireshark-dev/stable | ||
+ | sudo apt-get update | ||
+ | sudo apt-get install wireshark-gtk | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ... e após a instalação execute ''wireshark-gtk''. | ||
+ | |||
+ | <!-- <syntaxhighlight lang=bash> | ||
+ | sudo apt-get install bison flex libgtk-3-dev libnl-3-dev libnl-genl-dev libpcap-dev libcap-dev libssl-dev | ||
+ | wget https://2.na.dl.wireshark.org/src/wireshark-1.12.13.tar.bz2 | ||
+ | tar xjf wireshark-1.12.13.tar.bz2 | ||
+ | cd wireshark-1.12.13 | ||
+ | ./configure --with-qt=no --with-gtk3=yes | ||
+ | make | ||
+ | sudo make install | ||
+ | </syntaxhighlight> | ||
+ | --> | ||
+ | |||
+ | |||
{{collapse bottom}} | {{collapse bottom}} |
Edição das 14h45min de 20 de fevereiro de 2017
Endereço encurtado: http://bit.ly/pji2-20171
Presença: Neste link
Projeto Integrador I: Diário de Aula 2017-1
Professores: Marcelo Maia Sobral ( Facebook) e Simara (simara.sonaglio@ifsc.edu.br)
Encontros: 4a feira/19:00, 6a feira/19:00
Atendimento paralelo: 4a e 6a feira 18:30 h
Coordenadoria pedagógica (Graciane): graciane@ifsc.edu.br (3381-2890, 3381-2842)
Objetivo Geral
Implantar rede de dados e telefônica de pequeno porte, típica de um pequeno escritório.
Ementa
Introdução e histórico das telecomunicações e da Internet. Uso de serviços e aplicações oferecidos pelas redes de telecomunicações. Conceitos sobre redes de computadores: comutação de pacotes versus comutação de circuitos, redes locais e rede Internet. Instalação de computadores e integração a uma rede local e a Internet. Sistema operacional Linux. Introdução ao sistema telefônico: telefonia fixa e móvel, centrais de comutação, telefonia IP e convergência. Integração de serviços de voz convencionais e VoIP.
Bibliografia
- FOROUZAN, Behrouz A.; FEGAN, Sophia Chung. Comunicação de dados e redes de computadores. Tradução de Ariovaldo Griesi. 4. ed. São Paulo: McGraw-Hill, 2008. 1134 p., il. ISBN 9788586804885.
- KUROSE, J. e ROSS, K. Redes de Computadores e a Internet: Uma abordagem top-down. Tradução da 3a edição, Addison Wesley, 2006.
- COLCHER, Sérgio. VOIP: voz sobre IP. Rio de Janeiro: Elsevier, 2005.
Material de apoio
- Linux
- Redes
- Outros
Alguns textos interessantes
- A história dos telefones celulares
- Telebrasil (Associação Brasileira de Telecomunicações)
- Telecom no Brasil: um panorama
- Estatísticas sobre telecomunicações no Brasil
- Principais grupos de telecomunicações no Brasil
- Telecomunicações: O Novo Cenário (BNDES)
- Desafios e Oportunidades do Setor de Telecomunicações no Brasil (IPEA)
- Netflix abocanha 34% de todo o tráfego da internet na América do Norte
- Tráfego total VoIP na Internet
- Internet no Brasil 2014 (dados e fontes)
- Internet: como estão as velocidades nos principais países
- Apresentação sobre redes de computadores
- O Mundo Submarino da Internet
- Rede Ipê: a Rede Nacional de Pesquisa (RNP)
Oportunidades para Técnicos em Telecomunicações
- Ofertas de vagas para técnico em Telecom
- Ofertas de vagas para técnico em Telecom no SINE
- Salário médio do Técnico em Telecomunicações no Brasil
Documentários sobre telecomunicações
- História das Telecomunicações
- Inventos: Telefones Celulares (video Discovery)
- Documentário É Logo Ali: parte 1 e parte 2
- Video da Petrobras
Curiosidades
- Telex: um serviço já extinto (?!)
- Submarine Cable Map
- Mapa de Ataques
- Panorama do Tráfego - RNP
- Uma semana na vida do Administrador de Suporte do "Inferno" (humor)
- Vaga de Técnico em Redes na RNP: um exemplo de oferta de emprego
- Empoderar, dar autonomia, não esconder o código
- Carrier Grade Linux (CGL): Linux para Telecomunicações
Avaliações
As avaliações serão de dois tipos:
- Projetos: feitos em equipe, serão avaliados de acordo com o cumprimento dos objetivos previamente determinados. Na apresentação do projeto, uma entrevista será feita para definir o conceito concedido a cada membro da equipe.
- Testes: feitos individualmente, serão aplicados semanalmente no início da aula. O conteúdo para esses testes serão textos informados com uma semana de antecedência, assim como as técnicas e assuntos vistos em aula. A avaliação de cada teste será dada com um dos conceitos S (suficiente) e I (insuficiente).
O conceito final será calculado da seguinte forma:
- 9 a 10: ao menos dois projetos A e um projeto B
- 7 a 9: ao menos dois projetos B em um projeto C
- 6: ao menos C em todos projetos
Além disso, os testes ajustam o conceito final da seguinte maneira:
- Incrementa: se pelo menos 75% dos testes S, incrementa conceito final em um nível (ex: B sobe para A)
- Mantém: se pelo menos 40% dos testes S, mantém conceito final
- Decrementa: se menos de 40% dos testes S, decrementa conceito final em um nível (ex: A reduz para B)
Projetos
Nome | Projeto 1 | Projeto 2 | Projeto 3 | Conceito | Conceito após ajuste |
Faltas |
---|
- OBS: D* = Indefinido (por ausência à avaliação)
- OBS 2: conceito acompanhado de ? = falta o relatório do projeto
Testes
Nome | T1 | T2 | T3 | T4/PC | T5 | T6 | T7 | T8 | T9 | T10 | T11 | Ajuste |
---|
Obs: I* = não fez o teste
Equipes
Equipe | Membros |
---|---|
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 |
10/02: Apresentação da disciplina
Aula 1 |
---|
Hoje inicia-se a etapa 1. Ao longo dela serão estudados alguns conceitos sobre o sistema operacional Linux, e serão praticados exercícios e resolvidos pequenos desafios relacionados com procedimentos usuais do dia-a-dia. Ao final da etapa, um pequeno projeto será realizado para consolidar o conhecimento e avaliar o progresso da turma.
O que é um sistema operacional ?No curso iremos trabalhar com sistema operacional Linux. Porém o conceito de sistema operacional inclui também o Windows, Mac OS X, FreeBSD, Android, iOS, e (muitos, muitos, muitos mesmo !) outros. Para ter uma ideia do que faz um sistema operacional, vejam esta animação: A Saga do Windows Não há um video tão direto e divertido como esse que se baseie no Linux. Mas alguns documentários podem contextualizar o Linux e contar um pouco de sua história. Vocês podem assisti-lo em outro momento, caso se interessem em conhecer melhor o Linux e software livre: Revolution OS: A História do Linux, GNU e software livre The Code Linux - documentário sobre Linux
Sistemas operacionais usados em equipamentos de redeEquipamentos de rede como roteadores, pontos de acesso, modems adsl, switches ethernet e mesmo centrais telefônicas podem ser considerados computadores especializados. Todos possuem algum sistema operacional sobre o qual outros softwares são usados para implementar as funções de cada equipamento.
Interface com o usuárioHoje, em particular, precisaremos explorar um pouco dos conceitos de interface com o usuário, arquivos e aplicativos. A interface a ser usada inicialmente é a interface gráfica (GUI - Graphical User Interface). A figura a seguir mostra essa interface, conforme a que existe nos computadores do laboratório:
Algumas atividades para o uso do sistema operacionalAo longo da disciplina, diversas atividades precisarão ser realizadas com o sistema operacional. Algumas delas são bastante corriqueiras, e por isso acabam sendo realizadas desde as primeiras vezes em que se usa o sistema. Elas envolvem:
Atividade
|
15/02: Manipulação de arquivos e diretórios
Aula 2 |
---|
Objetivo da aula: usar o sistema operacional Linux para manipular arquivos e diretórios utilizando interface gráfica e linha de comando. Uma tarefa usual em um sistema operacional é localizar arquivos. Essa procura pode ser baseada no nome ou parte do nome de arquivo, na data de criação ou última modificação, no nome do usuário ou grupo dono, ou outros atributos do arquivo. Pode ser inclusive baseada numa combinação dessas informações. Por exemplo, pode ser necessário procurar todos os arquivos de música ou video, ou então todos os programas (arquivos executáveis) que pertençam ao superusuário (usuário root). Existem programas capazes de fazer tais buscas tanto no ambiente gráfico quanto no modo texto. As buscas a serem realizadas são:
Para iniciar, vamos usar programas gráficos para fazer buscas. Usando o ambiente gráficoO primeiro programa gráfico a ser usado é o caja (ou nautilus em outras versões do Ubuntu que não o Mate), o gerenciador de arquivos disponível no Ubuntu Linux. Para usá-lo para fazer buscas selecione a opção de pesquisa:
Usando a linha de comando (modo texto)O caja funciona como um gerenciador de arquivos e diretórios, possibilitando investigar que arquivos existem em cada diretório, entre outras coisas. Com ele é simples listar o conteúdo de um ou mais diretórios, bastando navegar por sua interface. Mas na linha de comando não há essa facilidade. Nela devem-se usar alguns programas para obter um resultado parecido. Para começar a usar a linha de comando, devem-se conhecer e saber usar programas para navegar por diretórios, listar diretórios, procurar arquivos e diretórios e copiar arquivos. Árvore de diretóriosAntes de iniciarmos o estudo de comandos dos Linux é necessário entendermos como funciona a sua organização de arquivos e diretórios. Isso é importante para conseguirmos especificar adequadamente o caminho de arquivos e diretórios que desejamos manipular quando formos utilizar os mais diversos comandos. Na figura acima é mostrado um exemplo de como são organizados arquivos e diretórios no Linux. Como é possível notar arquivos e diretórios são organizados de forma hierárquica, formando o que se chama de Árvore de Diretórios. No Linux há um diretório de nível superior chamado root que é identificado como apenas uma barra (/). Abaixo deste diretório principal estão organizados hierarquicamente todos os demais diretórios e arquivos existentes. Os diretórios que estão contidos em / são chamados de sub-diretórios. No exemplo mostrado na Figura acima podemos perceber que em / está o sub-diretório home, dentro de home está o sub-diretórios user1 e dentro de user1 estão os sub-diretórios doc e videos.
Por exemplo, o caminho absoluto do diretório doc que aparece na figura é /home/user1/doc. Já se o diretório atual do usuário for /home, o caminho relativo do diretório doc é user1/doc. Diretório atualNa linha de comando existe o conceito de diretório atual ou corrente. Quando se acessa esse tipo de interface, existe um diretório em que operações sobre arquivos são realizadas. Para descobrir o diretório atual usa-se o programa pwd, como mostrado a seguir: msobral@turing:~$ pwd
/home/aluno
Listagem de diretórioNo exemplo anterior, o diretório atual é /home/aluno. Qualquer operação sobre arquivos ou diretórios será feita tendo como base esse diretório. A operação mais simples é a listagem de diretório, que se faz com o programa ls. Aproveitando o exemplo acima, a listagem do diretório atual teria este resultado: msobral@turing:~$ ls
001.jpg iperf-2.0.5.tar.gz prova4-2011-1.odt
002.jpg juliano.tgz prova4-2011-1-rec.odt
003.jpg klaus prr.log
004.jpg livros public_html
005.jpg Makefile.in quartus.cap
006.jpg nhrp.tar radiusd_test.py
007.jpg nohup.out rco2
008.jpg passwd.web rmu
msobral@turing:~$
Mudança de diretórioA listagem apresentada revela vários arquivos e subdiretórios existentes no diretório atual. Sabendo que public_html é um subdiretório, pode-se desejar mudar o diretório atual de forma a entrar nesse subdiretório. Isso pode ser facilmente realizado com o programa cd: aluno@turing:~$ cd public_html
aluno@turing:~/public_html$ pwd
/home/aluno/public_html
Diretório atual e diretório acimaO diretório imediatamente acima é referido com .. (dois pontos). Esse é um atalho que possibilita subir um nível de diretório sem conhecer o nome do diretório imediatamente superior. Assim, para voltar ao diretório imediatamente anterior ao diretório atual pode-se fazer isto: aluno@turing:~/public_html$ cd ..
aluno@turing:~$ pwd
/home/aluno
aluno@turing:~/public_html$ pwd
/home/aluno/public_html
aluno@turing:~/public_html$ cd .
aluno@turing:~/public_html$ pwd
/home/aluno/public_html
... nada acontecerá (o diretório atual não será modificado). Criação e remoção de diretórioUm diretório pode ser criado com o comando mkdir. O uso desse comando pede apenas um argumento, que é o nome ou caminho do diretório a ser criado: aluno@M2:~$ pwd
/home/aluno
aluno@M2:~$ mkdir teste
aluno@M2:~$ cd teste
aluno@M2:~$ pwd
/home/aluno/teste
Para remover um diretório usa-se o comando rmdir. Esse diretório deve estar vazio para o comando consiga removê-lo: aluno@M2:~$ pwd
/home/aluno
aluno@M2:~$ rmdir teste
aluno@M2:~$ cd teste
cd: teste: Arquivo ou diretório não encontrado
aluno@M2:~$ rmdir Downloads
rmdir: falhou em remover “Downloads”: Diretório não vazio
Cópia de arquivosA cópia de arquivos na linha de comando envolve usar o programa cp. Com ele podem-se copiar um ou mais arquivos para um diretório de destino. Por exemplo, para copiar o arquivo 001.jpg para dentro do diretório public_html pode-se fazer o seguinte: aluno@M2:~$ cp 001.jpg public_html
O diretório de destino é sempre o último argumento passado ao programa cp. A cópia de múltiplos arquivos pode ser feita listando-os todos antes do diretório de destino: aluno@M2:~$ cp 001.jpg 002.jpg 003.jpg public_html
aluno@M2:~$ cp *.jpg public_html
aluno@M2:~$ cp 00*.jpg public_html
... em que todos os arquivos cujos nomes iniciem com 00 e terminem com .jpg serão copiados. Renomeação de arquivosArquivos podem ser renomeados com o comando mv. Ele pode ser usado de forma muito parecida com o comando cp. A diferença está na remoção do arquivo original, como se ele sumisse de seu diretório de origem e aparecesse no diretório de destino. aluno@M2:~$ mv mulher_de_40.mp3 Musicas
aluno@M2:~$ ls Musicas
mulher_de_40.mp3
aluno@M2:~$ ls mulher_de_40.mp3
não é possível acessar mulher_de_40.mp3: Arquivo ou diretório não encontrado
aluno@M2:~$ mv mulher_de_40.mp3 musica_romantica.mp3
aluno@M2:~$ ls musica_romantica.mp3
musica_romantica.mp3
aluno@M2:~$ ls mulher_de_40.mp3
não é possível acessar mulher_de_40.mp3: Arquivo ou diretório não encontrado
Remoção de arquivosArquivos podem ser removidos com o comando rm. Cuidado ao utilizá-lo ! Uma vez removido, um arquivo não pode ser recuperado ! aluno@M2:~$ rm mulher_de_40.mp3
aluno@M2:~$ ls mulher_de_40.mp3
não é possível acessar mulher_de_40.mp3: Arquivo ou diretório não encontrado
Curingas (wildcards)Curingas são caracteres especiais usados para selecionar vários arquivos ou diretórios de uma só vez. Os curingas podem ser usados em qualquer comando para especificar nomes de arquivos e diretórios. Dois curingas bastante usados são:
Curingas são muito úteis para operações sobre arquivos e diretórios. Por exemplo, para copiar todos os arquivos de música MP3 pode-se usar o curinga *' da seguinte forma: aluno@M2:~$ cp *.mp3 Musica
aluno@M2:~$ mv *.mp? Videos
Procura por arquivosA procura de arquivos e diretórios pode ser realizada na linha de comando com o programa find. Por exemplo, para localizar todos os arquivos ou diretórios chamados default, e que estejam abaixo de /etc: aluno@D1:~$ find /etc -name default -print
/etc/default
/etc/calendar/default
/etc/X11/xinit/xinput.d/default
aluno@D1:~$
find diretório [opões]
... e muitas outras (consulte o manual do find). Exercícios
|
17/02: continuação
Aula 3 |
---|
continuação da aula de 15/02 |
20/02: O protocolo SIP
Aula 4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
O protocolo SIPO protocolo SIP segue um modelo P2P (peer-to-peer), em que dois ou mais participantes, chamados de agentes, trocam mensagens com a finalidade de estabelecerem algum tipo de sessão (de voz no nosso caso, mas pode ser de video, mensagem instantânea, ou algum outro tipo de serviço). Assim, cada agente em uma sessão SIP se comporta tanto como cliente (quando envia requisições SIP) quanto servidor (quando responde a requisições SIP). A parte que inicia requisições se chama UAC (User Agent Client), e a que responde requisições é denominada UAS (User Agent Server), estando ambas implementadas nos telefones IP e similares. Uma sessão SIP envolve a interação entre duas entidades lógicas, que no caso de chamadas VoIP são por vezes chamadas simplesmente de usuários. A diferença entre entidade lógica e agente é que a primeira é o usuário (recurso) que inicia ou recebe chamadas, e o segundo é a aplicação que contém os mecanismos para efetuar e receber chamadas - pense que a entidade seria uma pessoa, e o agente o aparelho telefônico em uma chamada telefônica convencional. Cada entidade é identificada por uma URI (Uniform Resource Indicator) SIP, semelhante a um número de telefone. Além de identificar uma entidade lógica, a informação em uma URI SIP indica a forma com que essa entidade deve ser contatada via SIP. Exemplos de URI SIP seguem abaixo: # Uma URI simples, tipicamente usada em mensagens INVITE (que iniciam sessões SIP)
sip:1234@biloxi.example.com
# Uma URI mais elaborada, tipicamente usada em alguns cabeçalhos SIP (ex: Contact ou Refer-to)
sip:joseph.fourier@transform.org:5060;transport=udp;user=ip;method=INVITE;ttl=1;
maddr=240.101.102.103?Subject=FFT
As comunicações SIP seguem uma hierarquia, cujos níveis são:
Mensagens SIPO protocolo SIP tem uma estrutura simplificada com mensagens de pedido e resposta, assemelhando-se ao protocolo HTTP. Essas mensagens possuem a seguinte estrutura: Linha inicial
Cabeçalho1: valor do cabeçalho 1
Cabeçalho2: valor do cabeçalho 2
...
CabeçalhoN: valor do cabeçalho N
<linha em branco>
corpo da mensagem (opcional)
A diferença básica entre pedidos e respostas SIP está na linha inicial: pedidos contém um método SIP e seus parâmetros, e respostas possuem um código de status junto com um curto texto informativo. Abaixo são mostradas duas mensagens SIP: um pedido e sua respectiva resposta. Nesse exemplo, ambas mensagens não possuem um corpo de mensagem (lembre que isso é opcional):
REGISTER sips:ss2.biloxi.example.com SIP/2.0
Via: SIP/2.0/TLS client.biloxi.example.com:5061;branch=z9hG4bKnashds7
Max-Forwards: 70
From: Bob <sips:bob@biloxi.example.com>;tag=a73kszlfl
To: Bob <sips:bob@biloxi.example.com>
Call-ID: 1j9FpLxk3uxtm8tn@biloxi.example.com
CSeq: 1 REGISTER
Contact: <sips:bob@client.biloxi.example.com>
Content-Length: 0
Resposta: SIP/2.0 200 OK
Via: SIP/2.0/TLS client.biloxi.example.com:5061;branch=z9hG4bKnashd92
;received=192.0.2.201
From: Bob <sips:bob@biloxi.example.com>;tag=ja743ks76zlflH
To: Bob <sips:bob@biloxi.example.com>;tag=37GkEhwl6
Call-ID: 1j9FpLxk3uxtm8tn@biloxi.example.com
CSeq: 2 REGISTER
Contact: <sips:bob@client.biloxi.example.com>;expires=3600
Content-Length: 0
O pedido exemplificado foi uma mensagem do tipo REGISTER, que é um tipo de método SIP. Um método pode ser entendido como um comando enviado de um participante a outro. A resposta contém o status 200 OK, que significa que o pedido foi atendido com sucesso. Por fim, ambas mensagens contiveram um conjunto de cabeçalhos necessários para caracterizá-las, dentre eles Via, From, To, Call-Id, CSeq, Contact e Content-Length. As tabelas a seguir descrevem resumidamente os principais métodos e cabeçalhos SIP.
Tabela de métodos SIP (não exaustiva ... apenas os principais métodos)
Tabela de cabeçalhos SIP (não exaustiva ... apenas os principais cabeçalhos) Diagramas de chamadasAlguns tipos de chamadas VoIP com SIP são recorrentes, estando representadas nas subseções a seguir. Registro de agente SIP em um proxy SIPEsta chamada ocorre entre um agente SIP e um servidor de registro SIP (SIP Registar), que está implementado tipicamente em um proxy SIP, um gateway de media, ou um PBX IP (este último incorpora as funções dos dois primeiros com as de um PBX). O registro do agente SIP tem por finalidade fazer com que o servidor de registro SIP conheça a localização do agente (endereço IP e port usado pelo UAS). Fone 1 Proxy SIP ou PBX IP
| |
| REGISTER |
|---------------------------->|
| 401 Unauthorized |
|<----------------------------|
| REGISTER |
|---------------------------->|
| 200 OK |
|<----------------------------|
| |
Chamada direta entre dois agentes SIPUma chamada direta entre dois agentes envolve uma transação INVITE, em que um agente convida o outro a estabelecer uma sessão SIP com um determinado tipo de media (ex: audio). A chamada é finalizada quando um dos agentes inicia uma transação BYE. Fone 1 Fone 2
| |
| INVITE |
|----------------------->|
| 180 Ringing |
|<-----------------------|
| |
| 200 OK |
|<-----------------------|
| ACK |
|----------------------->|
| RTP Media |
|<======================>|
| |
| BYE |
|<-----------------------|
| 200 OK |
|----------------------->|
| |
Chamada entre dois agentes SIP com intermediação de um Proxy SIPA principal diferença entre este tipo de chamada e o anterior é o uso de um (ou mais) proxy SIP entre os dois agentes. O proxy SIP tem por finalidade ajudar na realização das chamadas, uma vez que usualmente incorpora a função de servidor de registro. Um proxy SIP encaminha chamadas para o agente chamado, ou para outro proxy mais próximo do destino, podendo aplicar regras de controle de acesso quanto a quem pode realizar chamadas para quem. Fone 1 Proxy SIP ou PBX IP Fone 2
(directmedia=yes)
| | |
| INVITE | |
|--------------->| INVITE |
| 100 Trying |--------------->|
|<---------------| 100 Trying |
| |<---------------|
| | |
| | 180 Ringing |
| 180 Ringing |<---------------|
|<---------------| |
| | 200 Ok |
| 200 Ok |<---------------|
|<---------------| |
| ACK | |
|--------------->| ACK |
| |--------------->|
| | |
| RTP Media |
|<===============================>|
| | |
| | BYE |
| BYE |<---------------|
|<---------------| |
| 200 Ok | |
|--------------->| 200 Ok |
| |--------------->|
| | |
| | |
Chamada entre dois agentes SIP com intermediação de um gateway de mediaEste caso é parecido com o anterior, que usa um proxy SIP. A diferença está na intermediação do fluxo de media, que é feita pelo gateway de media. Isso possibilita que dois agentes estabeleçam uma chamada mesmo usando codecs diferentes, pois o gateway de media fará a tradução entre codecs. Fone 1 PBX IP Fone 2
(directmedia=no)
| | |
| INVITE | |
|--------------->| INVITE |
| 100 Trying |--------------->|
|<---------------| 100 Trying |
| |<---------------|
| | 180 Ringing |
| 180 Ringing |<---------------|
|<---------------| |
| | 200 Ok |
| 200 Ok |<---------------|
|<---------------| |
| ACK | |
|--------------->| ACK |
| |--------------->|
| RTP Media | RTP Media |
|<==============>|<==============>|
| BYE | |
|--------------->| BYE |
| |--------------->|
| | 200 Ok |
| 200 Ok |<---------------|
|<---------------| |
| | |
Chamada entre dois agentes SIP com intermediação de um gateway de media e uso de re-INVITEO uso de re-invite possibilita que o fluxo de media seja estabelecido diretamente entre os agentes SIP, caso usem o mesmo codec. Assim, evita-se a carga de processamento envolvida na intermediação pelo gateway de media. Isso é feito com o envio pelo gateway de media (representado abaixo por um PBX IP) de um novo INVITE para cada agente SIP, após a sessão SIP estar estabelecida. Esse novo INVITE contém uma descrição de media (mensagem SDP embutida no corpo da mensagem INVITE) com a localização do outro agente SIP - isso é, seu endereço IP, port UDP para a stream RTP e codec a ser usado. Fone 1 PBX IP Fone 2
(directmedia=yes)
| | |
| INVITE | |
|--------------->| INVITE |
| 100 Trying |--------------->|
|<---------------| 100 Trying |
| |<---------------|
| | 180 Ringing |
| 180 Ringing |<---------------|
|<---------------| |
| | 200 Ok |
| 200 Ok |<---------------|
|<---------------| |
| ACK | |
|--------------->| ACK |
| INVITE |--------------->|
|<---------------| INVITE |
| 200 OK |--------------->|
|--------------->| 200 OK |
| ACK |<---------------|
|--------------->| ACK |
| |<---------------|
| |
| RTP Media |
|<===============================>|
| BYE | |
|--------------->| BYE |
| |--------------->|
| | 200 Ok |
| 200 Ok |<---------------|
|<---------------| |
| | |
Correção para o wiresharkO wireshark instalado no Ubuntu 14.04, como nas VM do laboratório, possui um bug que impede que se visualize a análise do fluxo de chamadas VoIP. Nessa versão, quando se seleciona no menu Telephony->VoIP Calls, e em seguida clica-se em uma das chamadas apresentadas e depois o botão Flow, o wireshark termina a execução. A solução para esse problema envolve instalar uma versão mais recente do wireshark: sudo add-apt-repository ppa:wireshark-dev/stable
sudo apt-get update
sudo apt-get install wireshark-gtk
... e após a instalação execute wireshark-gtk.
|