Mudanças entre as edições de "RCO60803-2015-1"

De MediaWiki do Campus São José
Ir para: navegação, pesquisa
(Experimento 1 (TCP / UDP))
(Experimento 1 (TCP / UDP))
Linha 993: Linha 993:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
#*Por curiosidade execute:<syntaxhighlight lang=bash>
 
#*Por curiosidade execute:<syntaxhighlight lang=bash>
ss -l
+
ss -ln
ss -l -p
+
ss -lnp
ss -l -p|grep 5555
+
ss -lnp|grep 5555
 
ss -a  
 
ss -a  
ss -a -p|grep 5555
+
ss -ap|grep 5555
 
</syntaxhighlight>
 
</syntaxhighlight>
 
#* No computador transmissor faça o download [http://tele.sj.ifsc.edu.br/~msobral/res/transmissor deste programa]. Em seguida acrescente a ele permissão de execução (''chmod +x transmissor'').
 
#* No computador transmissor faça o download [http://tele.sj.ifsc.edu.br/~msobral/res/transmissor deste programa]. Em seguida acrescente a ele permissão de execução (''chmod +x transmissor'').

Edição das 02h41min de 7 de maio de 2015

Índice

IntTel: Redes de Computadores - 2015-1 - Prof. Arliones Hoeller / Prof. Túlio Ribeiro

  • Professores: Arliones Hoeller e Túlio Ribeiro
  • Turma: 6080311
  • Encontros: terças e sextas às 15:40.
  • Atendimento extra-classe:
    • Arliones:
      • Terças das 14:30 às 15:30
      • Quintas das 10:30 às 11:30
    • Tulio:
      • Segunda: 15:30 às 18:20.
      • Terça: 17:35 às 19:00.
      • Outros horários a combinar.

Plano de Ensino

Notas

Matrícula A1 A2 A3 A4 Final
141001090-2 C C
141000212-8 D A
141003098-9 C C
141000353-1 F F
141001327-8 C A
141000257-8 D D
132004789-0 B C
141001024-4 D F
141001556-4 C A
141002009-6 B A
141004595-1 B A
131001195-8 B B
141000785-5 D A
141001414-2 B B
141001454-1 C A
141000619-0 B A
141001497-5 C A
141000365-5 B A
141002993-0 C B
141000539-9 D B
132002816-0 C B
132004784-0 D A
141000444-9 D C
131003706-0 F F
132002815-2 C C
132003677-5 D B
141003357-0 D B
141001378-2 B A
141000700-6 B A
141001817-2 C A
141001760-5 D A
141000438-4 B A
141000428-7 D C
  • F: faltou

Curiosidades

Materiais de aula

Slides

Animações

É necessário utilizar a versão 1.7 do java.

Listas de exercícios

Apostilas

Diário de Aulas

06/02: Apresentação da disciplina / Revisão de Linux - Sala 07/Labs de Redes

  • Apresentação da disciplina, plano de aula, laboratórios e métodos de avaliação.

Neste laboratório serão revisados alguns conceitos relacionados ao uso de Linux que serão importantes durante o curso. Para isto, os seguintes roteiros serão executados.


10/02: Introdução a Redes de Computadores - Sala 07

13/02: Lab02: Ferramentas básicas de redes - Lab de Redes

Nesta atividade serão vistos algumas ferramentas utilizadas para obter informações relacionadas às configurações de uma rede de computadores.


20/02: Comutação de Circuitos vs Comutação de Pacotes / Modelos de serviço - Sala 07


24/02: Redes de acesso - Sala 07

27/02: Arquiteturas em Camadas / Comunicação entre processos - Sala 07

31/02: Revisão e correção das listas de exercício - Sala 07

03/03: Avaliação 01 - Sala 07

09/03: Protocolos da camada de aplicação: HTTP, FTP, SMTP, DNS, SSH - Sala 07

13/03: Laboratório: Captura de pacotes e análise do protocolo HTTP

  • Revisão - Camadas de Protocolos
  • Introdução Camada de Aplicação (protocolo HTTP)

Ver Capítulo 27 do livro Comunicação de Dados e Redes de Computadores, 4a ed., de Behrouz Forouzan.

Na arquitetura de redes da Internet, são as aplicações que se comunicam, gerando dados no transmissor e consumindo-os no receptor.

Res-camadas3.png

Aplicações residem em equipamentos de rede, e se comunicam através da rede usando os serviços das camadas inferiores

Aplicações são processos que se comunicam através da rede (lembre lá de ICO que processos são programas em execução). Exemplos de aplicações são navegadores web (Firefox, Chrome) e bate-papo (Skype, GTalk). A comunicação pode ser feita de diferentes formas, de acordo com o modelo de comunicação adotado pela aplicação em questão. O modelo de comunicação define o papel de cada participante da comunicação, e por consequência acaba determinando como a comunicação acontece (quem a inicia, quando se transmitem e recebem mensagens). Três modelos conhecidos são:

  • Cliente-Servidor: um participante é o cliente, e o outro o servidor. O cliente inicia a comunicação, ao enviar uma mensagem ao servidor pedindo algum serviço. Cabe ao servidor responder aos pedidos dos clientes. Este é o modelo mais comum de se encontrar em aplicações, tais como correio eletrônico, WWW, bancos de dados, compartilhamento de arquivos e outros.
  • Peer-to-Peer (P2P): cada participante pode ser tanto cliente quanto servidor, assim qualquer um pode iniciar uma comunicação. Tornou-se popular com aplicações como compartilhamento de arquivos (ex: BitTorrent, eDonkey) e sistemas de chamadas VoIP.
  • Publisher/Subscriber: neste modelo existem os publicadores de conteúdo (publishers) e os assinantes ou interessados (subscribers). Os assinantes registram seus interesses por demais tipos de dados (isso é, assinam canais de dados). Os publicadores eventualmente divulgam dados, que são distribuídos aos assinantes. Não é comum de ser encontrado em aplicações, porém é o modelo usado para detecção de presença em aplicações de conversa on-line (Skype, Gtalk).

Cada aplicação usa diretamente os serviços da camada de transporte, e indiretamente os de camadas inferiores. Assim, para uma aplicação é a camada de transporte que envia e recebe suas mensagens. Como visto na aula passada, um serviço importante da camada de transporte é classificar e separar os pacotes recebidos de acordo com a aplicação que deve recebê-los, e para isso se um número chamado de port. O número de port pode ser entendido como um endereçador de aplicações dentro de um mesmo host. Vimos também que a camada de transporte na Internet apresenta dois protocolos, e ambos usam números de port para separar os pacotes de acordo com a comunicação que os contém:

  • TCP: usado por aplicações quando há necessidade de ter certeza de que os dados foram recebidos. Esse protocolo faz retransmissões automáticas no caso de perdas de mensagens. Para estabelecer a comunicação, ele usa o conceito de conexão (em que os dois participantes entram em acordo sobre a comunicação, e lembram disso a cada mensagem enviada e recebida) e realiza confirmações das mensagens recebidas. Este é o protocolo de transporte mais usado.
  • UDP: usado quando não é imprescindível ter certeza de que cada mensagem chegou ao destino, ou o custo de fazer isso com TCP não compensar. Não há conexões, tampouco confirmações. Exemplos de uso são chamadas VoIP e consultas DNS.

O estudo das aplicações da Internet inicia com WWW, que foi responsável por popularizar a Internet nos anos 90 e ainda é a aplicação mais difundida e acessada.

WWW e protocolo HTTP

WWW (World Wide Web) é um sistema de documentos em hipermidia que são ligados e acessados na Internet (FONTE: Wikipedia). Tendo início em 1990 como uma aplicação experimental desenvolvida por Tim Berners-Lee, que então trabalhava no CERN, na Suíça, em pouco tempo caiu no gosto de demais usuários e se difundiu. WWW se tornou tão popular que para muitos passou a ser sinônimo de Internet (equivocadamente). Por trás da sua rápida aceitação há um protocolo de aplicação simples e funcional, além claro do modelo de informação em hipermidia que agradou as pessoas.

Se o WWW é um sistema de documentoshipermidia online mantido de forma distribuída na Internet, o protocolo HTTP (Hypertext Transfer Protocol) é o protocolo usado para acessá-los. Esse protocolo segue o modelo cliente-servidor, e as comunicações são feitas com mensagens de pedido e resposta. Um cliente (navegador web) envia uma mensagem HTTP de pedido a um servidor web, que a responde com uma mensagem de resposta contendo o conteúdo solicitado. O protocolo HTTP usa o protocolo TCP para transmitir suas mensagens.

Mensagens de pedido HTTP

Mensagens HTTP de pedido possuem a seguinte estrutura:

Método URI HTTP/versão_do_protocolo
Cabeçalho1: valor do cabeçalho1
Cabeçalho2: valor do cabeçalho2
Cabeçalho3: valor do cabeçalho3
CabeçalhoN: valor do cabeçalhoN

corpo da mensagem

A primeira linha usa o campo método para indicar o tipo de pedido a ser realizado. O método HTTP pode ser entendido como um comando a ser realizado pelo servidor. Os métodos mais comuns são:

  • GET: obtém um documento.
  • POST: envia algum conteúdo e obtém como resposta um documento.
  • HEAD: obtém informações sobre um documento.

O campo URI (Uniform Resource Indicator) identifica o documento que o servidor deve acessar. Ele se aparenta com um caminho de arquivo (pathname), porém possui algumas extensões para poder enviar informação adicional.

Os cabeçalhos servem para complementar o pedido, informando ao servidor mais detalhes sobre o que está sendo requisitado. Por fim, o corpo da mensagem é opcional, podendo conter dados a serem enviados ao servidor quando necessário.

Tendo entendido os componentes de um pedido HTTP, segue abaixo um exemplo de uma requisição real (note que ela não possui corpo de mensagem):

GET /wiki/ HTTP/1.1
Host: wiki.sj.ifsc.edu.br
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: wiki2010UserID=614; wiki2010UserName=Msobral; wiki2010Token=4ed97239498a2fc74596b0f0a62331b5; wiki2010_session=f4e6b1hl4ctlkbpe5gc5gkosi4
Connection: keep-alive
If-Modified-Since: Mon, 20 May 2013 00:38:20 GMT

Mensagens de resposta HTTP

Mensagens HTTP de resposta possuem a seguinte estrutura:

HTTP/versão_do_protocolo status info 
Cabeçalho1: valor do cabeçalho1
Cabeçalho2: valor do cabeçalho2
Cabeçalho3: valor do cabeçalho3
CabeçalhoN: valor do cabeçalhoN

corpo da mensagem

A linha inicial informa o resultado do atendimento do pedido (se teve sucesso ou não), contendo um código numérico de status seguido de uma breve descrição. Os códigos numéricos e info mais comuns são:

  • 200 OK: pedido atendido com sucesso.
  • 302 Moved Temporarily: o pedido pode ser atendido em outra URL.
  • 401 Authorization Required: acesso negado, pois exige-se autenticação.
  • 403 Forbidden: acesso negado em definitivo.
  • 404 Not Found: documento não encontrado.

Após a linha inicial há os cabeçalhos, usados da mesma forma que em pedidos HTTP. Por fim, pode haver o corpo da mensagem (opcional). Um exemplo de mensagem de resposta segue abaixo:

HTTP/1.1 200 OK
Date: Thu, 23 May 2013 20:43:31 GMT
Server: Apache
Last-Modified: Fri, 10 May 2013 14:09:58 GMT
ETag: "757236-40-4dc5db8df272a"
Accept-Ranges: bytes
Content-Length: 64
Vary: Accept-Encoding
Connection: close
Content-Type: text/plain; charset=UTF-8

Este é um pequeno arquivo de teste, sem informação útil ...


Atividades Práticas

Roteiro Wireshark + HTTP
Instalando um webserver básico

1. Instale o servidor WWW Apache 2.

  • Documentação [1]
sudo apt-get install apache2

2. Verifique a configuração do apache

  • Nos arquivo "/etc/apache2/apache2.conf" e "/etc/apache2/sites-enabled/000-default", interprete os valores das seguintes variáveis:
    • DocumentRoot - local onde ficam as páginas web
    • ErrorLog - registro de erros (ex.: página não encontrada)
    • CustomLog - registro padrão (ex.: acessos)

3. Crie uma página WEB no servidor instalado e acesse ela.

  • Crie a página web em DocumentRoot/minha_pagina.html, com o seguinte conteúdo:
<html>
  <head>
    <title>Página de teste...</title>
  </head>
  <body>
    <p>Página Teste!</p>
  </body>
</html>

4. Acesse as páginas instaladas nos computadores de seus colegas utilizando seus IPs

5. Instale o wireshark e capture os pacotes de comunicação HTTP, identificando as mensagens GET e suas respostas, como exposto acima.

sudo apt-get install wireshark


Experimento 1: Comunicação de dados

A comunicação dados pode ser entendida como troca de informação entre dois dispositivos através de algum meio de comunicação. A comunicação ocorre no âmbito de um sistema de telecomunicações, composto por equipamentos (hardware) e programas (softwares). Um sistema básico de comunicação de dados se constitui de cinco componentes:

Rede-intro-1.png

  1. A mensagem: a informação a ser transmitida. O conteúdo da mensagem, seja um texto, música, video, ou qualquer outro tipo de informação, é representada por conjuntos de bits (dígitos binários).
  2. Transmissor: dispositivo que transmite a mensagem.
  3. Receptor: dispositivo que recebe a mensagem.
  4. Meio de comunicação: caminho físico por onde viaja a mensagem do transmissor até o receptor.
  5. Protocolo: conjunto de regras que governa a comunicação de dados.

Neste experimento, vamos interagir com um servidor web e identificar esses cinco componentes.

  1. Usando um navegador, acesse os seguintes links:
  2. Vamos repetir o acesso aos links acima, porém sem usar o navegador. A ideia é que nós façamos o papel de navegador. Isso deve ser feito com os seguintes passos:
    • Abra um terminal de texto no Linux (menu Aplicativos->Acessórios->Terminal).
    • Execute este comando:
      telnet tele.sj.ifsc.edu.br 80
      
    • Após aparecer esta linha:
      Trying 200.135.37.75...
      Connected to integrado.sj.ifsc.edu.br.
      Escape character is '^]'.
      
      digite o seguinte:
      GET /~tisemp/RES/arquivo.txt HTTP/1.0
      
      e em seguida tecle ENTER duas vezes.
    • Agora execute o seguinte para acessar o outro link:
      telnet tele.sj.ifsc.edu.br 80
      
    • Após aparecer esta linha:
      Trying 200.135.37.75...
      Connected to integrado.sj.ifsc.edu.br.
      Escape character is '^]'.
      
      digite o seguinte:
      GET /~tisemp/RES/teste.html HTTP/1.0
      
      e em seguida tecle ENTER duas vezes.
    • Compare o resultado das execuções desses comandos com o que se viu no navegador. Qual a diferença em cada caso ?
    • Identifique os componentes do sistema de comunicação de dados nesse acesso direto.


Experimento 2: transmissão de mensagens de aplicação

Neste experimento, serão observadas as mensagens transmitidas entre um navegador e um servidor web, e com base nelas devem ser identificados:

  • os protocolos envolvidos e suas respectivas camadas dentro do modelo da Internet.
  • os encapsulamentos realizados por esses protocolos.
  • as informações que possibilitam identificar univocamente o navegador e o servidor web durante sua comunicação.
  1. Execute o wireshark em seu computador: abra um terminal em Aplicativos->Terminal e execute
    sudo wireshark
    
  2. Na tela do wireshark, ative a captura na interface de rede eth0 (ela está listada no lado esquerdo).
  3. Usando um navegador, acesse o link http://tele.sj.ifsc.edu.br/~tisemp/RES/arquivo.txt.
  4. Interrompa a captura no wireshark, clicando no menu Capture->Stop.
  5. Na tela do wireshark, escreva http na caixa de edição Filter, e em seguida clique em Apply.
  6. Selecione o primeiro pacote da lista. Em seguida, clique no menu Analyze->Follow TCP Stream. Uma tela se abrirá, e nela você poderá observar os dados transmitidos pelo navegador (em vermelho) e pelo servidor web (em azul). Esses são os dados da conversação ... todo o resto são informações de outros protocolos usadas para realizar a comunicação.
  7. Voltando à lista de pacotes mostrada pelo wireshark, observe a sequência de pacotes. Com base nela identifique:
    • os protocolos envolvidos
    • em que camada cada um deles atua
    • que informações mantidas nesses protocolos possibilitam identificar o navegador e o servidor web.
  8. Cada protocolo transmite e recebe pacotes com um determinado formato, composto por cabeçalho e dados carregados (payload). Identifique nos pacotes recebidos que partes correspondem a cabeçalho e dados carregados.
  9. DESAFIO: imagine que foram capturados pacotes em uma rede, em que se monitoram as comunicações de uma determinada pessoa sob investigação. O investigador deve analisar esses pacotes em busca de arquivos que tenham sido transmitidos. Os pacotes capturados foram salvos em um arquivo de captura do wireshark, o qual se encontra aqui:

    captura.log

    Para visualizar os pacotes, use o menu File->Open do wireshark. Verifique se existem arquivos transmitidos dentro desses pacotes, e, caso afirmativo, extraia-os e visualize seus conteúdos. Para cada arquivo encontrado, informe:
    • qual o protocolo de aplicação usado para transmiti-lo
    • que computador foi usado para acessá-los, e qual servidor foi acessado.


Experimento 3: pacotes que passeiam pela rede

Neste experimento, deve-se evidenciar a transmissão de pacotes desde o transmissor até o receptor, que pode estar em outra rede. Como já foi discutido, para que isso seja possível deve haver uma forma de transmitir esses pacotes para dispositivos intermediários na rede, que os encaminham para seus destinos. Quer dizer, os pacotes devem ser roteados até seu receptor.

  1. Execute o wireshark em seu computador, e ative a captura de pacotes.
  2. Usando um navegador, acesse esta página.
  3. Observe os pacotes transmitidos entre seu computador e o computador que atendeu seu pedido e respondeu com o conteúdo da página (isso é, o servidor web).
    • que informações identificam essa comunicação ?
    • quais os protocolos envolvidos ?
  4. O servidor web está fora da rede do laboratório. Assim, os pacotes precisaram ser encaminhados pelo computador do professor para a rede da escola (lembre que o computador do professor fica entre a rede do laboratório e a do Câmpus). Portanto, nesse computador deve ser possível visualizar seus pacotes sendo transmitidos em direção ao servidor, assim como a resposta do servidor. Observe esses pacotes no wireshark executado pelo professor.
    • as informações que identificam suas comunicações são as mesmas que as identificadas em seu próprio computador ?
  5. Acesse a página da UFSC. Enquanto isso, observe na tela do projetor do laboratório o wireshark no computador do professor capturando seus pacotes.
    • que informações identificam suas comunicações ?
  6. O servidor web da UFSC está em outra rede. Com certeza vários equipamentos intermediários precisarão ajudar para que os pacotes cheguem lá, e as respostas voltem para os seus computadores. Para saber por onde seus pacotes passam, use este comando:
    traceroute -n www.ufsc.br
    
    • que informação está sendo usada para encaminhar os pacotes até o servidor web da UFSC ?
    • que protocolo mantém e usa essa informação ?

Experimento 4: Aplicação Web e o protocolo HTTP

Nas atividades abaixo sempre use o wireshark para observar as comunicações realizadas. Preste atenção aos encapsulamentos realizados e os protocolos envolvidos, assim como as informações mantidas por esses protocolos. Em particular, observe o endereço IP (mantido pelo protocolo IP na camada de rede) e números de porta (mantidos por protocolos TCP e UDP na camada de transporte).

  1. Para criar um servidor web muito simples, siga estes passos:
    1. Baixe este arquivo.
    2. Execute este comando:
      nc -l -p 8080 < resposta > pedido
      
    3. Em seu navegador, acesse a URL http://127.0.0.1:8080/.
    4. Observe o resultado na tela do seu navegador, e veja o conteúdo do arquivo pedido.
  2. Para rodar um servidor web pequeno, mas funcional, faça o seguinte:
    1. Baixe este arquivo.
    2. Execute estes comandos:
      tar xzf monkey-1.1.1.tar.gz
      cd monkey-1.1.1
      ./configure --prefix=/home/aluno/monkey
      make
      make install
      
    3. Edite o arquivo /home/aluno/monkey/conf/sites/default e modifique a seguinte linha:
      DocumentRoot /home/aluno/
      
    4. Edite o arquivo /home/aluno/monkey/conf/plugins.load e verifique se ele contém o seguinte:
          # Directory Listing Plugin
          # ========================
          # When a directory is requested, this plugin will show
          # an HTML list of the available content to the client.
          #
          Load /home/sobral/tmp/monkey/plugins/monkey-dirlisting.so
      
    5. Execute o servidor web:
      /home/aluno/monkey/bin/monkey
      
    6. Com seu navegador, acesse http://127.0.0.1:2001/
    7. Experimente navegar pelos links mostrados.
  3. Acesse as seguintes páginas, identificando o método HTTP, a URI, a versão do protocolo e os cabeçalhos enviados e recebidos. Verifique também se há corpo da mensagem no pedido ou na resposta:
  4. Acesse a página abaixo, e use o wireshark para acompanhar a comunicação. O que se pode ver de diferente em relação à atividade anterior ?
  5. Acesse a página abaixo, e observe quantas requisições HTTP são geradas a partir desse acesso. Como você explica essa quantidade de requisições ?

Para pensar

  1. Para que o protocolo HTTP é usado atualmente além de acesso a documentos na web? Faça uma pesquisa sobre isso.
  2. Pesquise o significado dos cabeçalhos HTTP vistos nos acessos feitos na aula de hoje.


Considerações finais

Os experimentos realizados buscaram introduzir alguns mecanismos envolvidos na comunicação através de uma rede de computadores. Tais mecanismos são implementados por alguns protocolos, lembrando que um protocolo especifica o formato dos pacotes transmitidos e as regras de comunicação para intercâmbio desses pacotes. Durante os experimentos, teve-se contato com alguns protocolos importantes envolvidos em comunicações na Internet, assim como algumas das principais informações definidas e usadas por esses protocolos. A visualização da hierarquia em que operam esses protocolos buscou mostrar o modelo de camadas da Internet, que define como deve funcionar um sistema que se comunica nesse tipo de rede.

Para pensar:

  • Para cada experimento, desenhe um diagrama de rede que mostre os equipamentos envolvidos. Para cada equipamento, desenhe também o modelo de camadas da Internet. Por fim, mostre o fluxo dos pacotes através dessas camadas (desde o transmissor até o receptor), indicando:
    • que protocolo foi usado em cada camada.
    • que serviço cada protocolo realizou.
    • que informações foram usadas por cada protocolo.


27/03: Laboratório: Captura de pacotes e análise dos protocolos FTP, SMTP e POP3

File Transfer Protocol - FTP

Experimento FTP

1. Configure o seu micro para permitir conexões do tipo FTP, instalando um servidor, e verifique a configuração:
sudo apt-get install proftpd-basic
2. Acesse o seu servidor FTP, o do seu vizinho, crie, modifique, apague arquivos e diretórios, etc.
3. Capture os pacotes de comunicação utilizando o wireshark e analise o que foi capturado. Quais as mensagens de aplicação utilizadas? Quais os nomes dos arquivos copiados? Foi possível visualizar os arquivos transmitidos?

Correio eletrônico

O correio eletrônico (email) é um dos principais serviços na Internet. De fato foi o primeiro serviço a ser usado em larga escala. Trata-se de um método para intercâmbio de mensagens digitais. Os sistemas de correio eletrônico se baseiam em um modelo armazena-e-encaminha (store-and-forward) em que os servidores de email aceitam, encaminham, entregam e armazenam mensagens de usuários.

Uma mensagem de correio eletrônico se divide em duas partes:

  • Cabeçalhos: contém informações de controle e atributos da mensagem
  • Corpo: o conteúdo da mensagem
From: Roberto de Matos <roberto@eel.ufsc.br>
Content-Type: text/plain;
	charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
X-Smtp-Server: smtp.ufsc.br:roberto.matos@posgrad.ufsc.br
Subject: =?iso-8859-1?Q?Teste_Ger=EAncia?=
Message-Id: <0595A764-EEAE-41E7-99F0-80DC11FB5327@eel.ufsc.br>
X-Universally-Unique-Identifier: 684c3833-bbbe-420b-8b66-d92d9a419bc0
Date: Wed, 20 Nov 2013 11:36:35 -0200
To: Roberto de Matos <roberto.matos@ifsc.edu.br>
Mime-Version: 1.0 (Mac OS X Mail 6.6 \(1510\))

Ol=E1 Pessoal,

Hoje vamos aprender o funcionamento do Email!!

Abra=E7o,

Roberto=

Na mensagem acima, os cabeçalhos são as linhas iniciais. Os cabeçalhos terminam quando aparece uma linha em branco, a partir de que começa o corpo da mensagem.

Funcionamento do email

Um usuário que queira enviar uma mensagem para outro utilizará um aplicativo cliente de e-mail, também conhecido como MUA (Mail User Agent), ou Agente de Mensagens do Usuário. Ao terminar de redigir a sua mensagem, o MUA enviará a mensagem a um MTA (Mail Transport Agent) (Agente Transportador de Mensagens) que se encarregará então de entregar a mensagem ao MTA do destinatário, caso ele se encontre em outra máquina ou simplesmente colocar a mensagem na caixa postal do destinatário, caso ele se encontre no mesmo servidor. A transferência da mensagem entre o MUA e o MTA se efetua utilizando um protocolo chamado SMTP (Simple Mail Transfer Protocol) ou Protocolo Simples de Transferência de Mensagens. O protocolo SMTP será utilizado também entre o MTA do remetente e o MTA do destinatário.

O servidor de e-mail do destinatário, ao receber uma mensagem para um dos seus usuários, simplesmente a coloca na caixa postal deste usuário. Se o usuário possui uma conta shell neste servidor, ele poderá ler os seus e-mails direto no servidor, caso contrário o usuário deverá transferir suas mensagens para sua máquina a fim de lê-las com o seu cliente de e-mail. A transferência de mensagens recebidas entre o servidor e o cliente de e-mail requer a utilização de outros programas e protocolos. Usualmente é utilizado para este fim o protocolo POP (Post Office Protocol), Protocolo de "Agência" de Correio, que recebe este nome por agir como uma agência de correios mesmo, que guarda as mensagens dos usuários em caixas postais e aguarda que estes venham buscar suas mensagens. Outro protocolo que pode ser utilizado para este mesmo fim é o IMAP (Internet Message Access Protocol), Protocolo para Acesso de Mensagens via Internet, que implementa, além das funcionalidades fornecidas pelo POP, muitos outros recursos. Os protocolos POP e IMAP são protocolos para recebimentos de mensagens, ao contrário do protocolo SMTP, que serve para enviar mensagens, logo, possuem funcionalidades diferenciadas, como por exemplo, autenticação do usuário.

Para a utilização dos protocolos POP e IMAP é necessária a instalação do servidor apropriado, que vai ser o responsável por atender as solicitações do cliente de e-mail por novas mensagens. O recebimento de mensagens pelo cliente se dá através da solicitação do MUA do usuário ao seu servidor de e-mail, que após a autenticação do usuário vai informar se existem mensagens em sua caixa postal e quantas são. A seguir o MUA solicita a transferência das mensagens para a máquina local, finalizando assim o processo de troca de mensagens entre dois usuários.

Os componentes da infraestrutura de email são:

  • MUA (Mail User Agent): o aplicativo que o usuário usa para envio e acesso a mensagens. Atualmente é bastante comum MUA do tipo webmail, mas existem outros como Mozilla Thunderbird, KMail e Microsoft Outlook.
  • MDA (Mail Delivery Agent): o servidor responsável por receber dos usuários mensagens a serem enviadas. Assim, quando um usuário quer enviar uma mensagem, usa um MUA que contata o MDA para fazer o envio. Exemplos de software são Postfix, Sendmail, Qmail e Microsoft Exchange.
  • MTA (Mail Transport Agent): o servidor responsável por transmitir mensagens até seu destino, e receber mensagens da rede para seus usuários. Comumente faz também o papel de MDA. Exemplos de softwares são Postfix, Sendmail, Qmail e Microsoft Exchange.

A figura abaixo ilustra uma infraestrutura de email típica.

Email-intro.png

Os protocolos envolvidos são:

  • SMTP (Simple Mail Transfer Protocol):
    • usado para envios de mensagens entre MTAs, e entre MUA e MDA/MTA.
  • IMAP (Internet Mail Access Protocol):
    • usado por MUAs para acesso a mensagens armazenadas em caixas de email em servidores.
    • Usa a porta 143/TCP ou 993/TCP (versão segura IMAPS)
    • Pode manter diversas pastas no servidor, além da INBOX.
    • Por default mantém as mensagens no servidor.
    • Pode movimentar mensagens em ambas as direções (entre pastas no cliente e no servidor).
  • POP (Post Office Protocol):
    • Mesma finalidade que IMAP, porém com funcionalidade mais limitada. Se destina a situações em que o normal é copiar as mensagens parao computador do usuário, e então removê-las do servidor.
    • Usa a porta 110/TCP ou 995/TCP (versão segura POP3S).
    • Considera apenas uma pasta no servidor (INBOX).
    • Por default descarrega as mensagens do servidor no cliente.
  • LMTP (Local Mail Transfer Protocol):
    • usado para entrega de mensagens entre MTA e MDA/MTA, sendo que o servidor de destino não mantém uma fila de mensagens (quer dizer, ele entrega diretamente na caixa de entrada de um usuário ou a encaminha imediatamente).

Endereçamento

Endereços de email estão intimamente ligados ao DNS. Cada usuário de email possui um endereço único mundial, definido por um identificador de usuário e um domínio de email, escritos usando-se o símbolo especial @ (lê-se at, do original em inglês) para conectá-los:

tele@ifsc.edu.br

Nesse exemplo, o identificador de usuário é tele, e o domínio é ifsc.edu.br.

Os domínios de email tem correspondência direta com domínios DNS. De fato, para criar um domínio de email deve-se primeiro criá-lo no DNS. Além disto, o domínio DNS deve ter associado a si um ou mais registros MX (Mail exchanger) para apontar os MTAs responsáveis por receber emails para o domínio. Por exemplo, o domínio DNS ifsc.edu.br possui esse registro MX:

> dig ifsc.edu.br mx

;; QUESTION SECTION:
;ifsc.edu.br.                   IN      MX

;; ANSWER SECTION:
ifsc.edu.br.            3581    IN      MX      5 hermes.ifsc.edu.br.

... e o domínio gmail.com:

> dig gmail.com mx

;; QUESTION SECTION:
;gmail.com.                     IN      MX

;; ANSWER SECTION:
gmail.com.              3600    IN      MX      20 alt2.gmail-smtp-in.l.google.com.
gmail.com.              3600    IN      MX      30 alt3.gmail-smtp-in.l.google.com.
gmail.com.              3600    IN      MX      40 alt4.gmail-smtp-in.l.google.com.
gmail.com.              3600    IN      MX      5 gmail-smtp-in.l.google.com.
gmail.com.              3600    IN      MX      10 alt1.gmail-smtp-in.l.google.com.

Captura de pacotes SMTP e POP

Experimento 1: Captura de pacotes SMTP e POP3 usando cliente de e-mail

Para que seja possível capturar pacotes dos protocolos SMTP e POP3, é necessário utilizar um programa MUA para que estes protocolos sejam utilizados.

  1. Inicie o programa Wireshark e filtre pacotes dos protocolos SMTP e POP;
  2. Inicie o programa Thunderbird e configure uma conta de e-mail utilizando:
    1. SMTP para envio de e-mails
    2. POP3 para buscar e-mails no servidor
  3. Envie mensagens para as contas configuradas dos colegas e verifique os pacotes capturados, analisando a estrutura dos protocolos.

Experimento 2: Envio de e-mail manual utilizando o programa telnet

  1. Conectar-se a um servidor de email, e enviar manualmente uma mensagem. Fazer primeiro com um programa (Thunderbird) e depois manualmente (com telnet).
    1. Acesso: usando telnet para enviar uma mensagem
      • Conecte-se ao servidor de email do laboratório (note que ele é acessado via port TCP 25):
        telnet 200.135.233.48 25
        
      • Converse com o servidor de email usando o protocolo SMTP, que é textual:
        helo mail
        250 m1
        mail from: aluno@alunosrco.sj.ifsc.edu.br
        250 2.1.0 OK
        rcpt to: aluno1@alunosrco.sj.ifsc.edu.br
        250 2.1.5 OK
        data
        354 End data with <CR><LF>.<CR><LF>
        From: Aluno <aluno@alunosrco.sj.ifsc.edu.br>
        To: Aluno 1 <aluno1@alunosrco.sj.ifsc.edu.br>
        Subject: Teste de envio manual ...
        
        Testando o envio de uma mensagem na unha ...
        
        .
        250 2.0.0 Ok: queued as 57C486819C
        quit
        221 2.0.0 Bye
        
        Obs: as linhas que iniciam com números correspondem a respostas do servidor SMTP.
      • Verifique se a mensagem foi de fato enviada.

Experimento 3: Acessar o servidor de e-mail seguro pelo terminal

Neste experimento será utilizado o programa openssl através do Terminal do Ubuntu para realizar o envio de um e-mail.

1. Para se conectar ao servidor utilizando uma conexão segura, utilize o comando:

openssl s_client -starttls pop3 -connect <servidor de email>:<porta> </syntaxhighlight> 2. Na utilização do protocolo POP3, a conexão com o servidor é realizada através da utilização das seguintes diretivas:

user <e-mail do usuário> pass <senha do usuário> </syntaxhighlight> 4. Neste momento, caso as respostas para ambos os comandos tenha sido +OK, é possível utilizar os comandos vistos em aula para realizar operações sobre os e-mails:

list retr <índice do e-mail> quit </syntaxhighlight> 5. Verifique os pacotes enviados utilizando o Wireshark, para verificar a estruturação do pacote de acordo com as informações utilizadas na montagem do pacote.

Experimento 4: Envio de e-mail utilizando o programa openssl

Neste experimento será utilizado o programa openssl através do Terminal do Ubuntu para realizar o envio de um e-mail.

1. Para se conectar ao servidor utilizando uma conexão segura, utilize o comando:

openssl s_client -starttls smtp -connect <servidor de email>:<porta> </syntaxhighlight> 2. Assim que a conexão for estabelecida, utilize o seguinte comando para verificar as ações disponibilizadas pelo servidor:

ehlo <servidor de email> </syntaxhighlight>

Se uma das opções for 250-AUTH PLAIN LOGIN, quer dizer que o servidor oferece a opção de login autenticado pelo terminal, caso contrário é necessário utilizar outro servidor.

3. Para realizar a autenticação no servidor, é necessário gerar uma string codificada em base 64 bits do usuário e da senha, utilizando o comando abaixo (preferencialmente em outra janela do Terminal):

echo -ne '\0USUARIO\0SENHA' | base64 </syntaxhighlight> 4. Utilize o resultado do comando para autenticar a conexão:

AUTH PLAIN <string codificada> </syntaxhighlight> 5. Para enviar um e-mail, utilize a sequência abaixo, digitando um comando por linha:

mail from: <e-mail do remetente> rcpt to: <e-mail do destinatário> <mensagem> quit </syntaxhighlight> 6. Verifique os pacotes enviados utilizando o Wireshark, para verificar a estruturação do pacote de acordo com as informações utilizadas na montagem do pacote.



10/04: Laboratório: Captura de pacotes e análise dos protocolos FTP, SMTP e POP3

Capturas exemplo:

Abra cada uma das capturas acima no wireshark, analise e:

  1. Qual o protocolo de aplicação?
  2. Selecione um fluxo de comunicação completo para analisar.
  3. Desenhe uma linha do tempo com as trocas de mensagens do protocolo de aplicação;
  4. Quais informações estão sendo trocadas (qual o titulo do email? de quem para quem? qual o nome do arquivo?)?
  5. Está sendo usado TCP ou UDP?


14/04: Conselho de classe

17/04: Avaliação 2

Avaliação 2

Utilize o arquivo abaixo para executar a prova distribuída pelo professor:


24/04: Camada de Transporte

Até o momento nos concentramos nas aplicações de rede. Afinal, são elas que usamos para nos comunicarmos através das redes de computadores. No entanto, aplicações dependem de outros protocolos para poderem se comunicar, os quais cuidam dos detalhes envolvidos na transmissão e recepção de mensagens em uma rede vasta como a Internet.

As aplicações se comunicam por meio de mensagens. Cada protocolo de aplicação (HTTP, POP3, DNS, IMAP, SMTP, SIP, ...) tem seu formato de mensagem. Essas mensagens podem ser pequenas (ex: DNS, SIP) ou por vezes grandes (ex: SMTP, HTTP, POP3). De qualquer forma, a aplicação precisa que suas mensagens sejam transmitidas para o outro participante da comunicação, que está em um computador remoto. Para isso ela usa um protocolo de transporte.


Res-Camadas-protocolos.png
Algumas aplicações e protocolos de transporte na Internet


Como já discutido, mais de uma aplicação pode existir em um mesmo computador. Por isso, uma das principais atribuições de um protocolo de transporte é identificar de qual aplicação é uma mensagem a ser transmitida, e para qual aplicação se destina uma mensagem recebida. Deve-se ter em mente que uma aplicação é representada por um programa em execução em um computador, portanto um protocolo de transporte possibilita a comunicação entre processos que estão sendo executados usualmente em computadores diferentes. Em nossas discussões anteriores chamamos isso de classificação das mensagens, mas o termo usado para expressar essa capacidade dos protocolos de transporte é multiplexação. No caso específico dos protocolos de transporte da Internet (TCP e UDP), um número de porta é usado para fazer essa distinção, e por isso essa função é denominada multiplexação baseada em porta.

Uma comunicação entre aplicações é composta basicamente de duas informações principais: endereços dos hosts participantes 
e números de porta dos processos. Os endereços são responsabilidade da Camada de Rede (onde há o protocolo IP), e os números 
de porta são usados na Camada de Transporte (onde estão os protocolos TCP e UDP).

Mas por que existem dois protocolos de transporte ? Talvez ajude a esclarecer essa questão se compararmos as necessidades das aplicações:

Aplicação Tolerância a perdas Tolerância a atrasos Tamanhos de mensagens
HTTP baixa média variável ... podem ser muito grandes (de poucos bytes a centenas de megabytes ou mais)
SMTP baixa alta variável ... podem ser grandes (de centenas bytes a alguns megabytes)
DNS média baixa pequenas (algumas centenas de bytes)
POP3 baixa média variável ... podem ser grandes (de centenas bytes a alguns megabytes)
SIP média média pequenas (algumas centenas de bytes)
VoIP média baixa pequenas (tipicamente < 164 bytes)

Durante o projeto e aperfeiçoamento dos protocolos da Internet, convergiu-se para a definição de dois protocolos de transporte:

  • TCP (ver RFC 793): protocolo orientado a conexão, com garantia de entrega, controle de fluxo e controle de congestionamento.
  • UDP (ver RFC 768): protocolo orientado a datagrama (não há conexão), sem garantia de entrega ou qualquer outra verificação ou controle. Basicamente faz somente a multiplexação baseada em porta.

Curiosidade: veja os anos em que foram publicados as especificações desses protocolos ...

As diferenças entre eles serão melhor detalhadas adiante. Hoje faremos alguns experimentos para ter uma ideia de como se comportam as comunicações feitas com esses protocolos.

Atividade

As atividades de hoje buscarão mostrar as características básicas de comunicações com protocolos de transporte.

Aplicações e protocolos de transporte

Faça uma rápida pesquisa e descubra que protocolos de transporte (e que portas) são usados por estas aplicações:

  • SSH
  • FTP
  • BitTorrent
  • emule
  • WINS
  • Compartilhamento de arquivos do Windows
  • Windows Terminal Service
  • NFS
  • Openvpn
  • RADIUS
  • DHCP
  • SNMP
  • NTP
  • LDAP
  • Mysql
  • Postgresql
  • Oracle RDBMS
  • Syslog
  • CUPS

Que protocolo de transporte predomina nesse conjunto ?

Tipos de protocolos de transporte: TCP x UDP

Nestes experimentos, serão evidenciadas diferenças entre os protocolos TCP e UDP.

Experimento 1 (TCP / UDP)

Ambos protocolos de transporte podem ser usados por aplicações que precisem se comunicar. Porém cada um deles têm certas propriedades, então a escolha precisa ser feita dependendo do tipo de comunicação a ser feita pela aplicação. Por exemplo, o que aconteceria se um arquivo fosse transferido de um computador a outro com ambos protocolos ?

  1. Abra um terminal e execute o seguinte comando para fazer o download de um arquivo a ser usado no experimento:
    wget http://tele.sj.ifsc.edu.br/~msobral/res/ubuntu.iso
    
  2. Observe o tamanho do arquivo transferido ... ele deve ter exatamente 209715200 bytes (cerca de 200 MB). Você pode fazer isso com o comando ls -l ubuntu.iso, ou executando o gerenciador de arquivos e visualizando as propriedades desse arquivo.
  3. Escolha um colega para fazer o experimento, em que o arquivo será transferido de um computador para o outro.
  4. A primeira transferência será feita usando o protocolo TCP da seguinte forma:
    • No computador receptor execute (nc = netcat):
      nc -t -l -p 5555 > /tmp/arquivoRecebido.tcp
      
    • No computador transmissor execute (X é o número do seu computador, visível em sua etiqueta):
      time nc -q 1 -t 192.168.3.X 5555 < ubuntu.iso
      
    • Quando completar a transferência, verifique o tamanho do arquivo recebido. Ele é igual ao arquivo original ? E quanto tempo levou para transmiti-lo ?
  5. A segunda transferência será feita usando o protocolo UDP:
    • No computador receptor faça o download deste programa. Em seguida acrescente a ele permissão de execução (chmod +x receptor).
    • No computador receptor execute:
      ./receptor 5555 > /tmp/arquivoRecebido.udp
      
      ou
      
      netcat -u -l -p 5555 > /tmp/arquivoRecebido.udp
      
    • Por curiosidade execute:
      ss -ln 
      ss -lnp
      ss -lnp|grep 5555
      ss -a 
      ss -ap|grep 5555
      
    • No computador transmissor faça o download deste programa. Em seguida acrescente a ele permissão de execução (chmod +x transmissor).
    • No computador transmissor execute (X é o número do seu computador, visível em sua etiqueta):
      ./transmissor 192.168.3.X 5555 < ubuntu.iso
      
      ou
      
      netcat -u -q 1 192.168.0.20 5555 < /tmp/arquivoAtransmitir.ext
      
    • Quando completar a transferência, verifique o tamanho do arquivo recebido. Ele é igual ao arquivo original ? E quanto tempo levou para transmiti-lo ?
  6. Compare as transferências feitas com TCP e UDP. O que eles têm em comum ? Que diferenças lhe pareceram mais pronunciadas ? Como isso deve afetar as aplicações que usam esses protocolos ?
Experimento 2

Transferências usando cada um desses protocolos podem apresentar características bem distintas. Neste segundo experimento, serão feitas transferências simultâneas de arquivos a partir de um mesmo servidor, comparando-se o resultado obtido com TCP e UDP. Essas transferência ocorrerão entre os computadores do laboratório e um servidor externo ao laboratório, como mostrado na figura abaixo:


Res-Exp2-transporte.png


  1. Abra um terminal em seu computador, e nele execute este comando:
    wget http://tele.sj.ifsc.edu.br/~msobral/res/ubuntu.iso
    
  2. Observe a taxa de transferência (velocidade do download) obtida. Que valores ela apresenta ? Quanto tempo levou para o arquivo ser transferido ?
  3. Após todos terem copiado o arquivo, o professor irá se logar em um dos computadores do laboratório e repetir a transferência. Porém desta vez ele irá fazê-la sozinho. Que taxas ele obteve, e quanto tempo levou ?
  4. O professor irá repetir a transferência novamente, mas desta vez ele irá pedir que um aluno também a inicie logo em seguida. Qual foi a taxa obtida por ambos ?
  5. Finalmente, o professor irá repetir a transferência porém com mais dois alunos fazendo-a ao mesmo tempo. Que se pode concluir quanto a taxa de transferência obtida ?
  6. Para poder fazer uma comparação, as transferências serão feitas novamente porém usando UDP como protocolo de transporte. Para isso siga estes passos:
    1. Abra dois terminais. Em um deles execute este comando:
      watch -n 1 ls -l arquivo
      
      ... e no outro execute:
      ./receptor 5555 > arquivo
      
    2. O professor irá transmitir o arquivo a partir do servidor. Observe o tamanho do arquivo, que deverá aumentar.
    3. Em que valor o tamanho do arquivo parou de crescer ? Quanto tempo isso levou, aproximadamente ? E esse tamanho final é o mesmo do arquivo original ?
    4. Como se comparam as transferências usando TCP e UDP ?


Experimento 3 (tcpdump + tcp + telnet)

Abra tres terminais:

No terminal 1 execute:

tcpdump -i any -X -n tcp port 5000

No terminal 2 execute:

netcat -t -l 192.168.x.x -p 5000 > /tmp/arquivoRecebido.tcp

No terminal 3 execute:

echo "SeuNome" | netcat -t -q 1 -u 192.168.x.x 5000

e logo em seguida

cat /tmp/arquivoRecebido.tcp

Ainda no terminal 3 execute o comando abaixo:

telnet 192.168.x.x 5000

Ap'os a execu'c~ao do comanto, se voc^e estiver conectado: escreva seu nome e aperte enter, escreva outras coisas e monitore no terminal 1 se os pacotes est~ao sendo transmitidos e verifique o conte'udo. Verifique como o tcpdump representa os pacotes [SYN], [SYN,ACK], [ACK] (HandShake de tr^es vias).

Esses testes s~ao apenas para compreens~ao do que est'a acontecendo.

Experimento 4 (tcpdump + udp)

Abra tres terminais:

No terminal 1 execute:

tcpdump -i any -X -n udp port 5000

No terminal 2 execute:

netcat -u -l 192.168.x.x -p 5000 > /tmp/arquivoRecebido.udp

No terminal 3 execute:

echo "Seu Nome" | netcat -q 1 -u 192.168.x.x 5000

e logo em seguida

cat /tmp/arquivoRecebido.udp

Verifique no terminal 1 se o tcpdump capturou algum pacote.