RED29004-2014-2

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Diário de aula de RED - 2014-2 - Prof. Odilson T. Valle

Dados Importantes

Professor: Odilson Tadeu Valle
Email: odilson@ifsc.edu.br
Atendimento paralelo: 3ª feira das 9h40 às 10h35 e 4ª das 14h25 às 15h20. Local: Lab. de Desenvolvimento.

Avaliações

  • 3 avaliações (P1, P2 e P3)
  • Seminário (S)
  • Reavaliações (P1, P2 e P3)
  • Nota final: NF = (P1 + P2 + P3 + S) / 4
  • Conceito final:

Se NF < 6,0 = D --> Reprovado Se 6,0 =< NF < 7,5 = C --> Aprovado Se 7,5 =< NF < 9,0 = B --> Aprovado Se NF >= 9,0 = A --> Aprovado </syntaxhighlight> IMPORTANTE: o direito de recuperar uma avaliação em que se faltou somente existe mediante justificativa reconhecida pela coordenação. Assim, deve-se protocolar a justificativa no prazo de 48 horas, contando da data e horário da avaliação e aguardar o parecer da coordenação.

Plano de Ensino

Plano de Ensino
Aula Data Horas Conteúdo Recursos
1 1/8 2 Apresentação da disciplina Lab. Redes II, Projetor, Slides, Computadores
2 5/8 2 Introdução a Redes de Computadores Lab. Redes II, Projetor, Slides, Computadores
3 8/8 2 Comutação de Circuitos vs Comutação de Pacotes Lab. Redes II, Projetor, Slides, Computadores
4 12/8 2 Modelos de serviço Lab. Redes II, Projetor, Slides, Computadores
5 15/8 2 Arquitetura em camadas Lab. Redes II, Projetor, Slides, Computadores
6 19/8 2 Listas de exercícios 1 Lab. Redes II, Projetor, Slides, Computadores, Wiki
7 22/8 2 Uso de aplicações da Internet – Lab. 1 Lab. Redes II, Projetor, Slides, Computadores
8 26/8 2 Comunicação entre processos Lab. Redes II, Projetor, Slides, Computadores
9 29/8 2 Protocolos da Camada de Aplicação Lab. Redes II, Projetor, Slides, Computadores
10 2/9 2 Camada de aplicação: HTTP, FTP, SMTP, DNS – Lab. 2 Lab. Redes II, Projetor, Slides, Computadores
11 5/9 2 Camada de aplicação: HTTP, FTP, SMTP, DNS – Lab. 2 Lab. Redes II, Projetor, Slides, Computadores
12 9/9 2 Camada de aplicação: HTTP, FTP, SMTP, DNS – Lab. 2 Lab. Redes II, Projetor, Slides, Computadores
13 12/9 2 Correção das listas de exercícios (revisão) – Lab. 3 Lab. Redes II, Projetor, Slides, Computadores
14 16/9 2 Prova 1 (arquitetura em camadas, Internet, camada de aplicação) Lab. Redes II ou sala de aula
15 19/9 2 Camada de transporte: serviços oferecidos Lab. Redes II, Projetor, Slides, Computadores
16 23/9 2 Serviço não orientado à conexão: UDP Lab. Redes II, Projetor, Slides, Computadores
17 26/9 2 Transferência confiável de dados Lab. Redes II, Projetor, Slides, Computadores
18 30/9 2 Construindo um protocolo de transferência confiável – Lab. 4 Lab. Redes II, Projetor, Slides, Computadores
19 3/10 2 Protocolos dutados: Volta-N e Retransmissão Seletiva, Controle de fluxo e congestionamento Lab. Redes II, Projetor, Slides, Computadores
20 7/10 2 Protocolos orientados a conexão: TCP Lab. Redes II, Projetor, Slides, Computadores
21 10/10 2 Listas de exercícios 3, 4 e 5 Lab. Redes II, Projetor, Slides, Computadores, wiki
22 14/10 2 Correção das listas de exercícios (revisão) Lab. Redes II, Projetor, Slides, Computadores
23 17/10 2 Prova 2 (camada de transporte) Lab. Redes II ou sala de aula
24 21/10 2 Redes datagrama e circuito virtual Lab. Redes II, Projetor, Slides, Computadores
25 24/10 2 Camada de rede: roteamento e encaminhamento Lab. Redes II, Projetor, Slides, Computadores
26 31/10 2 Endereçamento e roteamento estático no IP Lab. Redes II, Projetor, Slides, Computadores
27 4/11 2 Exercícios CIDR Lab. Redes II, Projetor, Slides, Computadores, wiki
28 7/11 2 Roteamento hierárquico e Sistemas autônomos na Internet Lab. Redes II, Projetor, Slides, Computadores
29 11/11 2 Roteamento hierárquico e laboratório de roteamento estático Lab. Redes II, Projetor, Slides, Computadores
30 14/11 2 Laboratório de protocolos de roteamento Lab. Redes II, Projetor, Slides, Computadores
31 18/11 2 Introdução à camada de enlace Lab. Redes II, Projetor, Slides, Computadores
32 21/11 2 Introdução à camada de enlace Lab. Redes II, Projetor, Slides, Computadores
33 25/11 2 Laboratório de enlaces (LAN) Lab. Redes II, Projetor, Slides, Computadores
34 28/11 2 Correção das listas de exercícios (revisão) Lab. Redes II, Projetor, Slides, Computadores
35 2/12 2 Prova 3 (camadas de rede e enlace) Lab. Redes II ou sala de aula
36 5/12 2 Seminários Lab. Redes II, Projetor, Slides, Computadores
37 9/12 2 Seminários Lab. Redes II, Projetor, Slides, Computadores
38 12/12 2 Prova de recuperação Lab. Redes II ou sala de aula
TOTAL 76

Material de apoio

Applets do Kurose

Vários aplicativos com representação dinâmica de características das redes de computadores.

Listas de exercícios

Lista de exercícios 1
  1. Qual é a diferença entre um hospedeiro e um sistema final? Cite os tipos de sistemas finais. Um servidor web é um sistema final?
  2. O que caracteriza um protocolo? Dê um exemplo de um protocolo.
  3. O que é um programa cliente? O que é um programa servidor? Um programa servidor requisita e recebe serviços de um programa cliente?
  4. Quais são os dois tipos de serviços de transporte que a Internet provê às suas aplicações? Cite algumas características de cada um desses serviços.
  5. Quais são as vantagens de uma rede de comutação de circuitos em relação a uma rede de comutação de pacotes?
  6. Quais são os prós e contras da utilização de Circuitos Virtuais?
  7. Porque se afirma que a comutação de pacotes emprega multiplexação estatística? Compare a multiplexação estatística com a multiplexação que ocorre em TDM.
  8. A taxa de transmissão HFC é dedicada ou compartilhada entre os usuários? É possível haver colisões na direção do provedor – usuário de um canal HFC? Por quê?
  9. Cite cinco tecnologias de acesso. Classifique cada uma delas nas categorias acesso residencial, acesso corporativo ou acesso móvel.
  10. Modens discados, HFC e ADSL são usados para acesso residencial. Para cada uma dessas tecnologias de acesso, cite uma faixa de taxas de transmissão e comente se a largura de banda é compartilhada ou dedicada.
  11. Considere o envio de um pacote de uma máquina de origem a uma de destino por uma rota fixa. Relacione os componentes do atraso que formam o atraso fim-a-fim. Quais deles são constantes e quais são variáveis?
  12. Porque dividimos a arquitetura da Internet em camadas?
  13. Quais são as cinco camadas da pilha de protocolo da Internet? Quais as principais responsabilidades de cada uma dessas camadas?
  14. O que é uma mensagem de camada de aplicação? Um segmento da camada de transporte? Um datagrama da camada de rede? Um quadro de camada de enlace?
  15. Que camadas da pilha de protocolo da Internet um roteador implementa? Que camadas um comutador de enlace implementa? Que camadas um sistema final implementa?
Lista de exercícios 2 - Camada de Aplicação
  1. Relacione cinco aplicações da Internet não proprietárias e os protocolos da camada de aplicação que elas usam.
  2. Qual é a diferença entre arquitetura de rede e arquitetura de aplicação?
  3. De que modo um mensageiro instantâneo é um híbrido das arquiteturas cliente-servidor e P2P?
  4. Para uma sessão de comunicação entre um par de processos, qual processo é o cliente e qual é o servidor?
  5. Que informação é usada por um processo que está rodando em um hospedeiro para identificar um processo que está rodando em outro hospedeiro?
  6. Porque o HTTP, FTP, SMTP, POP3 e IMAP rodam sobre TCP e não sobre UDP?
  7. Qual é a diferença entre HTTP persistente com paralelismo e HTTP persistente sem paralelismo. Qual dos dois é utilizado pelo HTTP/1.1?
  8. Descreva como o cache Web pode reduzir o atraso na recepção de um objeto desejado. O cachê Web reduzirá o atraso para todos os objetos requisitados por um usuário ou somente para alguns objetos? Por quê?
  9. Porque o DNS não é centralizado?
  10. O que são consultas recursivas e interativas em uma consulta DNS?
  11. Por que se diz que o FTP envia informações de controle “fora da banda”?
  12. Suponha que Alline envie uma mensagem a Eduardo por meio de uma conta de e-mail da web (como o gmail), e que Eduardo acesse seu e-mail por seu servidor utilizando POP3. Descreva como a mensagem vai do hospedeiro Alline até o hospedeiro de Eduardo. Não se esqueça de relacionar a série de protocolos de camada de aplicação usados para movimentar as mensagens entre os hospedeiros.
Lista de exercícios 3 - Camada de Aplicação
  1. Em uma aplicação de compartilhamento de arquivos P2P, você concorda com a afirmação: ”não existe nenhuma noção de lados cliente e servidor de uma sessão de comunicação”? Por que sim ou por que não?
  2. Relacione alguns agentes de usuário de aplicação de rede que você utiliza no dia-a-dia.
  3. O que significa o protocolo de apresentação (handshaking protocol)?
  4. Considere um site de comércio eletrônico que quer manter um registro de compras para cada um de seus clientes. Descreva como isso pode ser feito com cookies.
  5. Imagine uma aplicação que requeira “não perda de dados” e seja também altamente sensível ao atraso.
Lista de exercícios 4 - Camada de Transporte
  1. Considere uma conexão TCP entre o hospedeiro A e o hospedeiro B. Suponha que os segmentos TCP que trafegam do hospedeiro A para o hospedeiro B tenham número de porta fonte x e número de porta destino y. Quais são os números de porta fonte e do destino para os segmentos que trafegam do hospedeiro B para o hospedeiro A?
  2. Descreva porque um desenvolvedor de aplicação pode escolher rodar uma aplicação sobre UDP em vez de sobre TCP.
  3. É possível que uma aplicação desfrute de transferência confiável de dados mesmo quando roda sobre UDP? Caso a resposta seja afirmativa, como isso acontece?
  4. Porque se diz que o TCP oferece comunicação lógica entre os processos de aplicação?
  5. Cite quais são os serviços oferecidos pelo protocolo TCP?
  6. O que são os serviços de multiplexação e demultiplexação implementados pela camada de transporte?
  7. Porque se diz que o UDP é um protocolo não orientado para conexão?
  8. Qual o papel das informações de porta origem e destino contidas nos segmentos TCP e UDP?
  9. Porque é dito que o TCP fornece transferência confiável de dados sobre um canal não confiável?
  10. Cite 3 diferenças entre os serviços oferecidos pelo TCP e UDP.
  11. O que é um timeout?
  12. Como é estabelecido o valor de timeout em uma conexão TCP? É um valor fixo?
  13. O que é um round trip time (RTT)? Escreva e descreva a equação.
  14. Para que serve um checksum em um segmento TCP ou UDP? Como ele é formado?
  15. Cite uma vantagem da abordagem Volta-N com relação à retransmissão seletiva.
  16. Cite uma vantagem da abordagem Retransmissão Seletiva com relação ao Volta-N.
  17. Qual é a grande desvantagem de uma transmissão do tipo “para e espera” com relação a uma do tipo “janelas deslizantes”?
  18. O que é um PDU (também chamado de Segmento)?
  19. O TCP oferece garantias de banda e de tempo real?
  20. Cite um motivo para um protocolo de transmissão confiável adicionar um número de seqüência em cada pacote transmitido. Justifique o uso dessa informação explicando o problema que ocorreria caso ela não fosse usada.
  21. Para que serve um relógio temporizador em um protocolo de transmissão confiável?
  22. Cite um problema que pode ocorrer caso o tempo de um relógio temporizador seja muito pequeno.
  23. Cite um problema que pode ocorrer caso o tempo de um relógio temporizador seja muito grande.
  24. Por quê os tempos dos relógios temporizadores não são estabelecidos de forma estática, e sim de forma dinâmica, calculados conforme os round-trip times medidos?
  25. O que é uma reconhecimento cumulativo?
  26. Explique o que faz um receptor caso receba um pacote fora de ordem em um protocolo do tipo:
    1. Volta-N e
    2. Retransmissão Seletiva.
  27. O que é um “Tamanho de Janela” em um protocolo do tipo Janela Deslizante? O que se leva em consideração para calcular seu valor?
  28. Em um protocolo de janela deslizante qual é um problema que pode acontecer quando o maior número de Seqüência é muito próximo do “Tamanho de Janela”?
  29. Responda verdadeiro e falso as seguintes perguntas e justifique resumidamente sua resposta:
    1. Com o protocolo SR, é possível o remetente receber um ACK para um pacote que caia fora de sua janela corrente.
    2. Com o protocolo GBN, é possível o remetente receber um ACK para um pacote que caia fora de sua janela corrente.
    3. O protocolo bit alternante é o mesmo que o protocolo SR com janela do remetente e destinatário de tamanho 1.
    4. O protocolo bit alternante é o mesmo que o protocolo GBN com janela do remetente e destinatário de tamanho 1.
  30. Considere a transferência de um arquivo enorme de L bytes do hospedeiro A para o hospedeiro B. Suponha um MSS de 536 bytes.
    1. Qual é o máximo valor de L tal que não sejam esgotados os números de sequência TCP? Lembre-se de que o campo de número de sequência TCP tem 4 bytes.
    2. Para o L que obtiver no item anterior, descubra quanto tempo demora para transmitir o arquivo. Admita que um total de 66 bytes de cabeçalho de transporte, de rede e de enlace de dados seja adicionado a cada segmento antes que o pacote resultante seja enviado por um enlace de 155 Mbits/s. Ignore controle de fluxo e controle de congestionamento de modo que A possa enviar segementos um atrás do outro e continuamente.
  31. Considere um canal que pode perder pacotes, mas cujo atraso máximo é conhecido. Modifique o protocolo rdt2.1 (livro ou transparências) para incluir esgotamento de temporização do remetente e retransmissão. Informalmente, argumente por que seu protocolo pode se comunicar de modo correto por esse canal.
  32. Dadas as máquinas de estado, figuras abaixo, de um transmissor e um receptor de um protocolo "qualquer". Faça um descrição do funcionamento de ambos. Monte pelo menos dois diagramas de mensagens, destacando e relacionando possíveis sequências temporais com as máquinas de estado dadas.
    Transmissor
    Receptor
  33. O UDP e TCP usam o complemento de 1 para suas somas de verificação. Suponha que você tenha as seguintes três palavras de 8 bits: 01010011, 01100110 e 01110100.
    1. Qual é o complemento de 1 para a soma dessas palavras? Mostre todo o trabalho.
    2. Por que o UDP toma o complemento de 1 da soma, isto é, por que não toma apenas a soma?
    3. Com o esquema de complemento de 1, como o destinatário detecta erros?
    4. É possível que o erro de 1 bit passe desapercebido?
    5. E um de 2 bits?
  34. Considere a figura abaixo (Variação do tamanho da janela). Admitindo-se que o TCP Reno é o protocolo que experimenta o comportamento mostrado no gráfico, responda às seguintes perguntas. Em todos os casos você deverá apresentar uma justificativa resumida para sua resposta.
    1. Quais os intervalos de tempo em que a partida lenta do TCP está em execução?
    2. Quais os intervalos de tempo em que a prevenção de congestionamento do TCP está em execução?
    3. Após a 16a rodada de transmissão, a perda de segmento será detectada por três ACKs duplicados ou por um esgotamento de temporização?
    4. Após a 22a rodada de transmissão, a perda de segmento será detectada por três ACKs duplicados ou por um esgotamento de temporização?
    5. Qual é o valor inicial de sstrhresh na primeira rodada de transmissão?
    6. Qual é o valor inicial de sstrhresh na 18a rodada de transmissão?
    7. Qual é o valor inicial de sstrhresh na 24a rodada de transmissão?
    8. Durante qual rodada de transmissão é enviado o 70o segmento?
    9. Admitindo-se que uma perda de pacote será detectada após 26a rodada pelo recebimento de três ACKs duplicados, quais serão os valores do tamanho da janela de congestionamento e de sstrhresh?
    10. Suponha que o TCP Tahoe seja usado (em vez do TCP Reno) e que ACKs duplicados triplos sejam recebidos na 16a rodada. Quais são o sstrhresh e o tamanho da janela de congestionamento na 19a rodada?
    11. Suponha novamente que o TCP Tahoe seja usado, e que exista um evento de esgotamento de temporização na 22a sessão. Quantos pacotes foram enviados da 17a sessão até a 22a, inclusive?
Variação do tamanho da janela

Transparências utilizadas durante as aulas

Slides do Kurose referentes ao capítulo 1

Slides do Kurose referentes ao capítulo 2, 6a. Ed.

Slides do Kurose referentes ao capítulo 2, 5a. Ed.

Slides do Prof. Emerson - DNS, FTP, Web, Email...

Slides do Kurose referentes ao capítulo 3, 6a. Ed.

Slides do Kurose referentes ao capítulo 4, 6a. Ed.

Roteiros para laboratório

Laboratório 1 -- Ping, traceroute, Web e HTTP

Laboratório 2 -- Wireshark e HTTP

Laboratório 3 - Serviço de Nomes (DNS)
  1. Usando o programa host ou dig, descubra os endereços IP associados aos seguintes nomes de domínios:
    • mail.ifsc.edu.br
    • www.sj.ifsc.edu.br
    • www.google.com
    • www.gmail.com
    • www.amazon.co.uk
    • www.gov.za
    • www.sls.com.au
  2. Agora descubra quem é o servidor DNS responsável por cada um dos domínios dos nomes acima. Para isso consulte o valor do registro NS associado a esses domínios. Por exemplo, com o programa host isso pode ser feito assim:
    host -t ns ifsc.edu.br
    
  3. Descubra qual o servidor DNS usado pelo seu computador. Para isso é mais fácil usar o programa nslookup:
    # Use o nslookup para consultar o endereço IP de um nome qualquer ...
    nslookup www.ifsc.edu.br
    
  4. Agora que já está ficando claro como funcionam as consultas DNS, deve-se investigar como se dá a comunicação entre seu computador e seu servidor DNS. Portanto, execute o wireshark:
    sudo wireshark
    
    ... e em seguida faça uma consulta DNS qualquer. Com base nisso identifique o seguinte:
    1. Quantas mensagens são trocadas entre cliente e servidor DNS para cada consulta?
    2. Que protocolo de transporte é usado? E que porta?
    3. Qual o formato das mensagens DNS? Elas são textuais como as mensagens HTTP ou SMTP?
    4. Qual o tipo de registro DNS acessado em cada consulta ?
    5. Que informações estão contidas nas respostas DNS? Há algo além do que foi pedido?
    6. Qual o tamanho das mensagens DNS?
  5. O serviço DNS fornece outras informações além do endereço IP associado a cada nome de domínio. Por exemplo, como ele se pode descobrir que host recebe emails em um determinado domínio. Isso é utilizado pelos MTA mundo afora para entregarem emails para seus destinatários (lembre que isso se faz com o protocolo SMTP). Para descobrir essa informação, deve-se consultar o registro MX de um domínio. Por exemplo:
    host -t mx ifsc.edu.br
    
    Descubra quem é o servidor que recebe emails nos seguintes domínios:
    • gmail.com
    • hotmail.com
    • uol.com.br
    • ufsc.br
  6. Outra informação útil guardada por servidores DNS é a tradução de endereço IP para nome de domínio. Isso é chamado de tradução reversa (ou DNS reverso). Usando os programas de diagnóstico já vistos, isso pode ser feito assim:
    dig -x 200.180.10.13
    
    ... o dig tem um resultado um pouco mais carregado que os outros utilitários (host e nslookup), porém neste caso é mais prático. Veja o resultado da consulta logo após a linha ;; ANSWER SECTION:. Experimente fazer a resolução reversa para cada um dos IP obtidos nas consultas realizadas no primeiro exercício desta atividade.
  7. Como explicado durante a aula, DNS é um banco de dados distribuído. Isso quer dizer que suas informações estão espalhadas em milhares (ou milhões?) de servidores DNS mundo afora. Cada servidor DNS mantém os dados dos domínios por que é responsável. Será que é possível rastrear todos os servidores DNS que devem ser consultados até chegar ao servidor do domínio procurado?
    1. Descubra quem são os servidores raiz (topo de hierarquia DNS):
      host -t ns .
      
      ou
      dig -t ns .
      
    2. Escolha um dos servidores listados, e use-o para fazer as consultas. Por exemplo:
      host -v -t a www.sj.ifsc.edu.br. j.root-servers.net.
      
      ... e observe a seção ;; AUTHORITY SECTION:. Ele contém a listagem de servidores DNS que podem atender sua consulta.
    3. Continue fazendo as consultas aos servidores DNS listados, até conseguir traduzir o nome requisitado. Quantos servidores DNS foi necessário consultar no total?
    4. Repita esse exercício para os seguintes nomes de domínio:
      • www.bbc.co.uk
      • www.amazon.com
      • www.thepiratebay.org
      • www.reeec.illinois.edu
      • www.inm.ras.ru
  8. Outros tipos de consulta usando o dig:
    1. explícita a um determinado servidor (@)
      dig @j.root-servers.net. +trace www.sj.ifsc.edu.br.
      
    2. mostra a consulta recursiva:
      dig +trace www.sj.ifsc.edu.br.
      
Laboratório 4 - Programação de sockets

Material original: Slides do Kurose referentes ao capítulo 2, 6a. Ed., pags 54 à 58

Programação de sockets: criando aplicações de rede

  • Há dois tipos de aplicações de rede:
    • Uma delas é uma execução cuja operação é especificada em um padrão de protocolo.
    • O outro tipo de aplicação de rede é uma aplicação de rede proprietária.

Descrição da aplicação a ser desenvolvida em UDP e TCP

  • Usaremos a aplicação cliente-servidor simples a seguir para demonstrar a programação de socket:
  1. Um cliente lê uma linha de caracteres (dados) do teclado e a envia para o servidor.
  2. O servidor recebe os dados e converte os caracteres para maiúsculas.
  3. O servidor envia os dados modificados ao cliente.
  4. O cliente recebe os dados modificados e apresenta a linha em sua tela.

Programação de sockets com UDP

A aplicação cliente-servidor usando UDP tem a estrutura apresentada na Figura baixo. Utilizamos a linguagem Python por expor com clareza os principais conceitos de sockets. Quem desejar pode implementar em outras linguagens, por exemplo um modelo para programação de sockets utilizando a API Posix encontra-se aqui.

Programacao socket UDP.png

Como fica evidente na Figura acima, os processos cliente e servidor rodam em máquinas distintas e se comunicam justamente enviando mensagens vis sockets, que abstrai qualquer necessidade de conhecimento das camadas subjacentes.

Um exemplo de código bem simples para o lado Cliente:

UDPClient.py

  1. Esta linha define que pode-se utilizar sockets dentro do programa

from socket import *

  1. Define o endereco ip do servidor ao qual o cliente contactara

serverName = 'ip_do_servidor'

  1. Define a porta de acesso ao servidor

serverPort = 22222

  1. Cria o socket do cliente, denominado clientSocket. O primeiro parametro indica a familia do endereco,
  2. em particular, AF_INET indica que a rede subjacente esta usando IPv4. O segundo parametro indica que
  3. o socket eh do tipo SOCK_DGRAM, o que significa que eh um socket UDP.

clientSocket = socket(AF_INET, SOCK_DGRAM)

  1. raw_input eh uma funcao interna da linguagem Python que permite a solicitacao de entrada de dados que
  2. sera armazenada em message.

message = raw_input('Entre com a sentanca em minuculas: ')

  1. O metodo sendto() acrescenta o endereco (e porta) de destino a mensagem e envia o pacote resultante
  2. pelo socket aberto.

clientSocket.sendto(message,(serverName, serverPort))

  1. Apos o envio do pacote, o cliente aguarda a resposta do servidor armazenando esta na variavel
  2. modifiedMessage e o endereço de origem eh armazenado em serverAddress. 2048 representa o tamanho do buffer.

modifiedMessage, serverAddress = clientSocket.recvfrom(2048)

  1. Imprime a mensagem recebida na tela.

print modifiedMessage

  1. Fecha o socket.

clientSocket.close() </syntaxhighlight>

O código do lado do Servidor (comentários somente nas linhas inéditas):

UDPServer.py from socket import * serverPort = 22222 serverSocket = socket(AF_INET, SOCK_DGRAM)

  1. Vincula o numero da porta, nesse caso 22222, ao socket do servidor e "abre a porta".

serverSocket.bind((, serverPort)) print "O servidor esta pronto para recepcao"

  1. Aguarda indefinidamente contatos por clientes

while 1:

message, clientAddress = serverSocket.recvfrom(2048)

       #Ao receber a mensagem do cliente converte todos os caracteres para maiusculas.

modifiedMessage = message.upper() serverSocket.sendto(modifiedMessage, clientAddress) </syntaxhighlight>


Para testar se o servidor está com a "porta aberta" podemos utilizar o aplicativo nmap, que procura por portas abertas. Como exemplo vamos verificar somente se a porta 22222 UDP (-sU) está aberta:

sudo nmap -p22222 -sU numero_do_ip_do_servidor

Programação de sockets com TCP

Diferentemente do UDP, o TCP é um protocolo orientado a conexão. Isso significa que, antes que cliente e servidor possam enviar dados uma ao outro, ele primeiramente devem se apresentar, o primeiro socket da Figura abaixo, e estabelecer uma conexão TCP, o segundo socket da Figura abaixo. Todos os dados trafegarão pelo segundo socket.

O processo TCPServer tem dois sockets:

Programacao socket TCP 1.png

A aplicação cliente-servidor usando TCP:

Programacao socket TCP 2.png

Um exemplo de código bem simples para o lado Cliente (comentários somente nas linhas inéditas):

TCPClient.py from socket import * serverName = 'ip_do_servidor' serverPort = 33333

  1. SOCK_STREAM habilita uso do TCP

clientSocket = socket(AF_INET, SOCK_STREAM)

  1. Representa o estabelecimento da conexao. E o "aperto de maos", onde o cliente e servidor trocam
  2. informacoes da portas que serao utilizadas pela conexao (socket) propriamente dito

clientSocket.connect((serverName,serverPort)) message = raw_input('Entre com a sentanca em minuculas: ')

  1. Diferentemente do UDP, aqui nao e necessario encaminhar o endereco do servidor, ja que este socket
  2. eh uma "tubulacao" direta entre ambos, basta empurrar dados

clientSocket.send(message) modifiedMessage = clientSocket.recv(1024) print 'Mensagem do servidor: ', modifiedMessage clientSocket.close() </syntaxhighlight>

O código do lado do Servidor (comentários somente nas linhas inéditas): TCPServer.py from socket import * serverPort = 33333 serverSocket = socket(AF_INET, SOCK_STREAM) serverSocket.bind((,serverPort))

  1. Escuta as requisicoes do TCP do cliente. Numero maximo de conexoes em fila = 1

serverSocket.listen(1) print 'O servidor esta pronto' while 1: #Quando o cliente bate a essa porta, o programa chama o metodo accept() para serverSocket,

       #que cria um novo socket no servidor, chamado connectionSocket, dedicado a esse cliente
       #especifico. Cliente e servidor, entao, completam a apresentacaoo, criando uma conexao TCP
       #entre o clientSocket do cliente e o connectionSocket do servidor.

connectionSocket, addr = serverSocket.accept() message = connectionSocket.recv(1024) messageMaiuscula = message.upper() connectionSocket.send(messageMaiuscula) connectionSocket.close() </syntaxhighlight>

Teste do servidor:

nmap -sT -p33333 ip_do_servidor

Roteiro de atividades

  1. Ligue a máquina virtual ARC-2-server
  2. Logue com: aluno - ARC-2-ser
  3. Configure a interface de rede

sudo ifconfig eth0 192.168.2.X # onde X=102, 103, ..., 114, para, respectivamente M2, M3, ..., M14 sudo route add -net default gw 192.168.2.1 # Adicionando o roteador padrão sudo vi /etc/resolv.conf # adicionar o DNS

 nameserver 200.135.37.65 </syntaxhighlight>
  1. Escreva o programa UDPServer.py nessa máquina e execute-o:

python UDPServer.py </syntaxhighlight>

  1. Se apresentar erros de sintaxe corrija-os
  2. Teste com o nmap para verificar se a porta está aberta.
  3. Abra um terminal da máquina real e escreva o programa UDPClient.py. Não se esqueça de adequar o endereço IP. Execute-o.
  4. Sucesso na execução do programa?
  5. Rode o WireShark, seguindo o modelo apresentado no Laboratório 2
  6. Execute novamente o cliente e servidor e capture os pacotes com o WireShark. Use um filtro do tipo: ip.addr == ip_do_servidor, assim captura-se somente os pacotes originados/destinados ao servidor.
  7. Repita os passos 4 a 10, só que agora para o protocolo TCP.
  8. Discuta com os colegas as diferenças observadas entre os protocolos UDP e TCP.
  9. Com seu cliente conecte o servidor de seu colega e vice-versa. Alguma diferença?

Desafios

  1. Modifique uma das aplicações cliente-servidor, seja UDP ou TCP, para fazer um pingue-pongue com a mensagem, ou seja, o cliente gera e envia a mensagem, o servidor a devolve, o cliente reenvia a mesma mensagem, o servidor a devolve e assim sucessivamente.
  2. Faça a "Tarefa 1: Servidor Web" do livro do Kurose, página 131, 6a ed.
Laboratório 5 - TCP x UDP

Tempo aproximado: 1h

Problemas observados: No experimento 2 diminuir o tamanho do arquivo: máximo 200 MB.

O objetivo desses experimentos é evidenciar as diferenças entre os protocolos TCP e UDP.

Experimento 1

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/~odilson/RED29004/ubuntu.iso
    
  2. Observe o tamanho do arquivo transferido ... ele deve ter exatamente 1028653056 bytes (cerca de 981 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 o netcat que abrirá uma conexão TCP na porta, por exemplo, 5555 e salvará os dados transferidos em arquivo:
      nc -l 5555 > arquivoTCP
      
    • No computador transmissor execute (X é o número do computador do seu vizinho, visível na etiqueta):
      time nc 192.168.2.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 baixe o programa receptor, acrescente a ele permissão de execução e o execute, conforme a sequência de comandos abaixo:
      wget http://tele.sj.ifsc.edu.br/~tisemp/RES/receptor
      chmod +x receptor
      ./receptor 5555 > arquivoUDP
      
    • No computador transmissor baixe o programa transmissor, acrescente a ele permissão de execução e o execute, conforme a sequência de comandos abaixo (X é o número do seu computador, visível em sua etiqueta):
      wget http://tele.sj.ifsc.edu.br/~tisemp/RES/transmissor
      chmod +x transmissor
      ./transmissor 192.168.2.X 5555 < ubuntu.iso
      
    • Quando completar a transferência, no receptor digite <CTRL + C>, 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

172.18.16.38

  1. Abra um terminal em seu computador, e nele execute este comando:
    wget http://tele.sj.ifsc.edu.br/~odilson/RED29004/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á repetir a transferência a partir de uma máquina virtual. 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 três 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. Fique observando o primeiro terminal (watch...). O professor irá transmitir o arquivo a partir do servidor remoto, um processo para cada aluno. No terminal observe o tamanho do arquivo, que deverá aumentar gradativamente. Monitore manualmente o tempo em segundos (relógio, celular ou relógio do computador), o tamanho e quando o tamanho do arquivo parou de crescer.
    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

Repita os experimentos 1 e 3 mas agora com o arquivo minimo.txt, anotando todos os tempos.

  1. Os resultados foram os esperados? Discuta sobre as possíveis diferenças de comportamento.

Tarefa extra

Use o aplicativo NetCat (nc) para fazer transferências UDP e responda:

  1. Qual o procedimento no lado transmissor e receptor?
  2. Consegue-se medir o tempo de maneira automática?
  3. Por que os processos não param ao final da transferência?
Laboratório 6 - Protocolos de roteamento

Analisar o funcionamento de protocolos de roteamento estático e dinâmico da Internet, em particular as tabelas estáticas de roteamento, o protocolo RIP e OSPF, a partir de uma estrutura física formada por roteadores e redes locais. Para isto utilizaremos o Netkit2. Leia aqui como o Netkit2 trabalha com roteadores.

Em todos os experimentos será utilizado como base a seguinte arquitetura de rede:

DynamicRoutingTriangle.png

Experimento 1: tabelas estáticas de roteamento

  1. Crie em seu computador um arquivo com nome /home/aluno/exp1.conf, com o seguinte conteúdo: # Hosts definitions

pc1[type]=generic pc2[type]=generic pc3[type]=generic

  1. Routers definitions

r1[type]=gateway r2[type]=gateway r3[type]=gateway

  1. Hosts' interfaces to local routers

pc1[eth0]=link0:ip=192.168.0.1/24 pc2[eth0]=link1:ip=192.168.1.1/24 pc3[eth0]=link2:ip=192.168.2.1/24

  1. Routers' interfaces to local networks

r1[eth0]=link0:ip=192.168.0.254/24 r2[eth0]=link1:ip=192.168.1.254/24 r3[eth0]=link2:ip=192.168.2.254/24

  1. Network "backbone" links

r1[eth1]=backbone0:ip=10.0.0.1/30 r1[eth2]=backbone1:ip=10.0.1.1/30

r2[eth1]=backbone0:ip=10.0.0.2/30 r2[eth2]=backbone2:ip=10.0.2.1/30

r3[eth1]=backbone1:ip=10.0.1.2/30 r3[eth2]=backbone2:ip=10.0.2.2/30 </syntaxhighlight>

  1. Rode o NetKit em seu computador. Em um terminal digite: NetKit2 </syntaxhighlight>
  2. No menu File - Load and Run, procure o arquivo /home/aluno/exp1.conf e clique em OK. Abrirá uma janela com 6 abas, onde cada uma delas é um terminal de configuração do respectivo equipamento: PC1-3 ou R1-3.
  3. Testes de conectividade de enlace
    1. Por exemplo, no pc1 execute o comando: ping 192.168.0.254 </syntaxhighlight> Obteve sucesso? Sim ou não e por quê?
    2. Por exemplo, no pc1 execute o comando: ping 10.0.0.2 </syntaxhighlight> Obteve sucesso? Sim ou não e por quê?
    3. Configure o roteador padrão, por exemplo no pc1: route add -net default gw 192.168.0.254 </syntaxhighlight>
    4. Teste novamente a conectividade, no pc1 execute o comando: ping 10.0.0.2 </syntaxhighlight> Obteve sucesso? O comportamento foi o mesmo do item 4.2? Sim ou não e por quê?
    5. Com o ping do item anterior ativo rode o wireshark no r1 (clique na aba r1 e em seguida no menu wireshark any). Qual a origem e destino dos pacotes? Por quê?
    6. Repita o procedimento 4.3 para todos os PCs.
  4. Iniciando o roteamento
    1. Deixe o ping do item 4.4 e o wireshark do item 4.5 rodando e estabeleça uma rota no roteador r2 com o comando: route add -net 192.168.0.0/24 gw 10.0.0.1 </syntaxhighlight> O que ocorreu com o ping e o wireshark? Por quê?
    2. Em todos os roteadores crie rotas para todas as redes. Se tudo estiver correto, todos os PCs devem pingar entre si. Teste!
  5. Testando a queda de enalce.
    1. Com todas as rotas em perfeito funcionamento, gere um ping do pc1 para o pc3 e execute wireshark any no r1 , em seguida "derrube" o enlace entre o r1 e r3. Por exemplo, no r3 execute o comando: ifconfig eth1 down </syntaxhighlight> O que ocorreu com o ping e o wireshark? Por quê? Com este enlace comprometido qual seria a solução para a continuidade de funcionamento de toda a rede?

O Pacote Quagga

O pacote Quagga fornece um conjunto de processos (daemons) com facilidades para a construção da tabela de roteamento de um sistema. O projeto Quagga é derivado do conhecido pacote Zebra. O esquema abaixo mostra a estrutura do Quagga.

EstruturaZebra.png

Acima do kernel se executam processos especializados para a configuração da tabela de roteamento. Note que a tabela de roteamento é mantida pelo kernel do Sistema Operacional Linux/Unix e qualquer modificação será realizada a partir da API (Application Programming Interface) do sistema. O processo Zebra centraliza todo o gerenciamento da tabela recebendo e repassando informações para outros processos que executam um determinado protocolo de roteamento. Por exemplo, no esquema mostrado existem 3 processos responsáveis pela execução dos protocolos BGP, RIP e OSPF. Como será visto posteriormente, é possível executar vários protocolos de roteamento dinâmico simultaneamente.

Cada processo do Quagga possui o seu próprio arquivo de configuração e um terminal para receber comandos (um processo shell chamado vtysh). Cada terminal se comunica com seu deamon por uma porta específica. No arquivo do Zebra deverão constar as configurações estáticas.

Os deamons do sistema são chamados pelos seguintes nomes:

  • zebra (acesso pela porta 2601 no vty);
  • ripd (acesso pela porta 2602 no vty);
  • ospfd (acesso pela porta 2604 no vty);
  • bgpd (acesso pela porta 2605 no vty);

Os deamons possuem arquivos de configuração por default localizados normalmente no diretório /etc/quagga e possuindo a terminação conf: por exemplo: zebra.conf para o processo zebra. Entretanto será comum usarmos arquivos de configuração fornecidos na linha de comando:

#zebra -d -f /hostlab/r1/zebra.conf.

Nos arquivos de configuração podemos colocar informações tais como senhas para o terminal vty, configurações de depuração, de roteamento e de log. O que segue aos pontos de exclamação (vale também \#) são comentários.

Através do Zebra (e seu arquivo de configuração) é possível ligar/desligar interfaces e atribuir endereços as mesmas. Também pode-se acrescentar rotas.

Experimento 2: protocolo de roteamento RIP

Baseado no mesmo diagrama do experimento anterior, usaremos serviços para rodar os protocolos de roteamento RIP e OSPF a partir do Quagga, de tal modo que as tabelas estáticas de roteamento não mais serão necessárias e o sistema se auto recuperará da queda de um único enlace (nesse caso).

  1. Reinicie o NetKit2 e releia o arquivo de configuração.
  2. Repita o item 4.3 do experimento anterior para todos os PCs.
  3. Em cada roteador, configure o serviço RIP para que que os testes da próxima etapa possam ser executados. O Netkit cria no home do usuário uma pasta chamada "lab". Nesta pasta, há uma pasta para cada equipamento da rede em teste. Neste diretório podem ser colocados arquivos de configuração de serviços a serem executados nas máquinas virtuais do Netkit. É por ali que será configurado, primeiramente, o Quagga, software de roteamento que implementa RIP, OSPF e BGP. O arquivo de configuração abaixo mostra a configuração do Quagga para o roteador r1. Salve este arquivo com o nome "zebra.conf" no diretório "lab/r1/". Em seguida, adapte o arquivo para os roteadores r2 e r3.
    hostname r1
    
    interface eth0
       ip address 192.168.0.254/24
    interface eth1
       ip address 10.0.0.1/30
    interface eth2
       ip address 10.0.1.1/30
    
    log stdout
    
  4. Crie os arquivos de configuração para o RIP em cada roteador, colocando-os dentro dos diretórios dos mesmos. O nome destes arquivos deve ser ripd.conf e o conteúdo deve ser o abaixo.
    router rip
      redistribute connected
      redistribute static
      network eth1
      network eth2
    
  5. No pc1 execute: ping 192.168.2.1 </syntaxhighlight> O ping está funcionando? Por quê? Deixe o ping rodando!
  6. Inicie o daemon quagga. service quagga start </syntaxhighlight>
  7. Execute o Quagga e o RIP a partir dos arquivos criados. Os arquivos que estão na pasta "home/usuario/lab" são montados na pasta "/homelab/" de todas as máquinas virtuais do Netkit. Para iniciar os serviços no r1, faça algo como o que está no exemplo abaixo. Repita o procedimento para r2 e r3 utilizando os arquivos corretos.
    $ zebra -d -f /hostlab/r1/zebra.conf
    $ ripd -d -f /hostlab/r1/ripd.conf
    
  8. Observando o estado do sistema. Vamos usar comandos para verificar o estado dos roteadores.
    1. Solicitar uma sessão com o vtysh no zebrad: vtysh </syntaxhighlight>
    2. Verifique o estado das interfaces usando o comando: show interface </syntaxhighlight>
    3. Verifique se o roteador está habilitado para roteamento: show ip forwarding </syntaxhighlight>
    4. Verifique o estado da tabela de roteamento usando o comando: show ip route </syntaxhighlight> Interprete detalhadamente essa tabela!
    5. Verifique a configuração atual do roteador: show run </syntaxhighlight>
    6. Sair do vtysh: #exit
  9. quit </syntaxhighlight>
  10. Olhe o terminal do pc1, o que ocorreu com o ping? Por quê?
  11. Teste as demais conectividades entre os PCs com ping mútuos. Tudo funcionando?
  12. A partir de cada PC trace a rota (traceroute) para os demais PC e anote-as. Se o traceroute não estiver funcionando em cada roreador execute o route -n e anote as rotas.
  13. Execute o WireShark (ou tcpdump -n -vvv -i any) no r1 por pelo menos 1 min e tente compreender as mensagens RIPv2 (UDP 17) trocadas. Olhe com atenção os IP e a métrica. O que dizem essas mensagens?
  14. Com o WireShark rodando em r1, desative um dos enlaces entre os roteadores e acompanhe a troca de mensagens. Por questões de compatibilidade vamos desativar uma interface de um modo especial. Por exemplo no r1:

vtysh 2061 entra no zebrad conf t entra no mode de configuração interface eth1 entra na referida interface a ser operada shutdown desativa a interface, se desejado no shutdown restaura a interface, se desejado </syntaxhighlight>

  1. Permaneça monitorando o ping e o Wireshark, a recuperação das rotas leva em torno de 1 min. Quais as mensagens trocadas no WireShark?
  2. Teste as conectividades. O que aconteceu?
  3. Retrace as rotas com show ip route nos roteadores e com o traceroute a partir dos PCs. São diferentes do caso original (todos enlaces ativos)? Por quê?

Experimento 3: protocolos e roteamento OSPF

  1. Repita todos os passos do experimento 2, mas agora ao invés do uso do protocolo RIP vamos fazer uso do protocolo OSPF. A ideia é poder compará-los tendo como base sempre o mesmo cenário.
  2. Crie os arquivos de configuração para o OSPF em cada roteador, colocando-os dentro dos diretórios dos mesmos (p. ex: /home/aluno/lab/r1). O nome destes arquivos deve ser ospfd.conf e o conteúdo deve ser conforme o modelo abaixo para o r1. Para o r2 e r3 faça as adaptações necessárias.
    #Router r1
    #
    hostname r1
    password r1
    enable password r1
    #
    interface eth0
    interface eth1
    interface eth2
    !ip ospf network point-to-point
    router ospf
    passive-interface eth0
    network 192.168.0.0/24 area 0
    network 10.0.0.0/30 area 0
    network 10.0.1.0/30 area 0
    #
    log stdout
    
  3. Quais as conclusões?
  4. As mensagens trocadas pelos roteadores são distintas quando comparadas ao uso do RIP?
  5. Houve diferença no tempo de atualização das rotas quando comparado ao RIP? Por quê?

Softwares

  • Netkit2: possibilita criar experimentos com redes compostas por máquinas virtuais Linux

Curiosidades

Seminários

Recomenda-se a confecção do relatório na própria Wiki. O professor criará a página para cada projeto que assim o desejar. Na página do projeto, os membros da equipe podem editar a qualquer hora, sem preocupação com a versão do mesmo. Também facilita o acompanhamento por parte do professor. Utilizando ou não a Wiki, usem esse modelo de relatório.

  • Grupos e Temas para 2014-2:
  • Avaliação
    • Nota: 0,5 x Documento + 0,5 x Seminário
    • Nota final individual. Será dada uma nota por equipe (máximo = número_de_alunos_da_equipe * 10) e a equipe decide qual será a nota individual por aluno, sendo que a soma das notas dos alunos deverá ser igual a nota da equipe. O professor pode interferir na distribuição das notas dentro da equipe.
  • Instruções sobre o Seminário de Redes I:
    • Data para definição de grupos e temas: 8/8/14.
    • 2 alunos por equipe.
    • Os temas devem ser propostos pelas equipes em comum acordo com o professor ou então na data limite o professor apresenta alguns temas e as equipes escolhem.
    • Data de entrega do documento: 21/11/14 (impreterivelmente).
    • O relatório pode ser redigido como uma página da wiki.
    • Duração da apresentação: 20 minutos + 5 minutos de perguntas.
    • As apresentações podem ser realizadas seguindo o conteúdo do relatório (use bastante figuras no relatório, isto facilita a apresentação).
    • Se preferirem usar slides, usem esse modelo.

Diário de aulas

Aula 1 - 1/8/14: Apresentação da disciplina
  • Apresentação da disciplina, plano de aula, trabalhos e métodos de avaliação.
  1. Auto apresentação
  2. Apresentação da Wiki
  3. Ementa
  4. Plano de Ensino
  5. Apresentação do modelo de aulas a ser adotado
    1. Laboratórios
    2. Kurose
  6. Avaliações
    1. 3 avaliações (P1, P2 e P3)
    2. Seminários (S)
    3. Reavaliações (P1, P2 e P3)
    4. Nota final: NF = (P1 + P2 + P3 + S) / 4
    5. Conceito final: Se NF < 6,0 = D --> Reprovado

Se 6,0 =< NF < 7,5 = C --> Aprovado Se 7,5 =< NF < 9,0 = B --> Aprovado Se NF >= 9,0 = A --> Aprovado </syntaxhighlight>

  1. Qual o grande objetivo das redes de computadores?
  2. Relação com outras disciplinas do curso
Aula 2 - 5/8/14: Introdução a Redes de Computadores

Internet-map.png
Uma representação artística das interligações na Internet

Aula 3 - 8/8/14: Introdução a Redes de Computadores

Slides do Kurose referentes ao capítulo 1

Aula 4 - 12/8/14: Comutação de circuitos vs comutação de pacotes

Slides do Kurose referentes ao capítulo 1

Aula 5 - 15/8/14: Modelo de serviços

Slides do Kurose referentes ao capítulo 1

Aula 6 - 19/8/14: Arquitetura em camadas - Exercícios

Slides do Kurose referentes ao capítulo 1

Aula 7 - 22/8/14: Laboratório 1: Uso de aplicações da Internet

Laboratório 1 -- Ping, traceroute, Web e HTTP

Aula 9 - 29/8/14: Protocolos da camada de aplicação - Laboratório 2: Wireshark e HTTP

Slides do Kurose referentes ao capítulo 2, 6a. Ed.

Slides do Kurose referentes ao capítulo 2, 5a. Ed.

Laboratório 2 -- Wireshark e HTTP

Aula 11 - 5/9/14: DNS - Laboratório 3: Serviço de nomes

Slides do Prof. Emerson - DNS, FTP, Web, Email...

Laboratório 3

Aula 13 - 12/9/14: Aulas de dúvidas e listas de exercício

Listas de exercício

Aula 14 - 16/9/14: Avaliação 1: conceitos básicos e camada de aplicação

Sala 12

Aula 15 - 19/9/14: Laboratório 4 - Programação de sockets

Laboratório 4

Aula 16 - 23/9/14: Camada de transporte

Slides Capitulo 3

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
  1. Que protocolo de transporte predomina nesse conjunto? Qual a sua justificativa para isso?
Aula 17 - 26/9/14: Camada de transporte - Princípios da comunicação confiável de dados

Slides Capitulo 3

Execute o applet GbN no site do Kurose. Faça alguns testes e tente entender os processos envolvidos.

Aula 18 - 30/9/14: Camada de transporte - Princípios da comunicação confiável de dados e TCP

Slides Capitulo 3

Aula 19 - 3/10/14: Aula suspensa - Defesa de tese
Aula 20 - 7/10/14: Camada de transporte - TCP e Laboratório TCP x UDP

Slides Capitulo 3

Laboratório 5

Aula 21 - 10/10/14: Camada de transporte - Controle de fluxo e controle de congestionamento

Slides Capitulo 3

Aula 22 - 14/10/14: Aulas suspensas - Seminário de avaliação do curso de Engenharia de Telecomunicações

Slides Capitulo 3

Aula 23 - 17/10/14: Aulas de dúvidas e listas de exercício

Slides Capitulo 3

Listas de exercício

Aula 24 - 21/10/14: Avaliação 2: Camada de transporte

Sala 12

Aula 25 - 24/10/14: Introdução a Camada de rede

Slides Capitulo 4

Aula 26 - 31/10/14: Camada de rede

Reforço para preparação dos seminários

Slides Capitulo 4

Applet IP Fragmentation

Aula 27 - 4/1/14: Camada de rede

Slides Capitulo 4

Aula 28 - 7/11/14: Camada de rede - Protocolos de roteamento. Lab. tabelas estáticas de roteamento com NetKit2

Slides Capitulo 4

Laboratório 6