Redes de Computadores - 2015-1

Objetivo

Abordar os princípios básicos da área de redes de computadores com uma ênfase na noção de sistemas, usando uma visão voltada para a Internet.

Ao final do curso o aluno deve ser capaz de identificar os principais elementos de um sistema distribuído operando em rede, analisar compromissos no desenvolvimento de soluções para problemas como contenção de recursos, controle de fluxo, roteamento e endereçamento, bem como descrever os princípios de operação da Internet com relação a esses fatores.

Os conceitos da disciplina serão exercitados através de pequenos exercícios práticos voltados para a verificação de características específicas de redes e do desenvolvimento de uma aplicação distribuída de complexidade média.

Ementa

Conceitos de sistemas distribuídos, redes de computadores, protocolos e serviços de comunicação. Arquitetura de redes de computadores. Camadas inferiores do modelo de referência de ISO: física, enlace, redes e transporte. Redes locais, interligação de redes; especificação de protocolos.

Programa

O curso cobrirá a maior parte do livro texto adotado, com ênfase maior nos princípios básicos da área. Questões mais avançadas e de interesse mais recente, como segurança e aplicações multimídia, serão tratadas de forma mais superficial. Os alunos são encorajados a ler no livro as seções que não serão discutidas em sala de aula.

  • Conceitos gerais da área de redes de computadores
  • Introdução ao desenvolvimento de aplicações em redes
  • Tecnologias de rede local: Ethernet, redes em anel, redes sem fio
  • Aspectos de conexão direta de computadores: codificação, detecção de erros, enquadramento
  • Chaveamento de pacotes: encaminhamento
  • Interconexão de redes: endereçamento e roteamento
  • Protocolos fim-a-fim: entrega confiável, abstraçoes possíveis
  • Controle de congestionamento e alocação de recursos (QoS)
  • Princípios gerais de segurança em redes
  • Algumas aplicações relevantes: DNS, Web, Correio eletrônico

Avaliação

Os pontos serão dividos entre provas (48%) e trabalhos (48%).

Os quatro pontos restantes serão baseados na frequência e serão atribuídos segundo a fórmula: $Nota_f = max({4 - N_{faltas}/8},0)$, onde $N_{faltas}$ corresponde ao número de dias de aula em que o aluno esteve ausente.

Apesar de não valerem pontos, listas de exercício sobre a matéria de cada prova estarão disponíveis no moodle para auxiliar no entendimento dos conceitos. Recomendo fortemente que todos façam as listas à medida que a matéria for discutida. Utilizem os fóruns de cada lista para discutir as respostas e tirar suas dúvidas no Moodle.

Provas

Serão quatro, cada uma valendo 12 pontos, com datas e matéria a serem definidas ao longo do curso. As datas serão sempre as definidas no calendário do curso. (Os conteúdos elencados para cada prova a seguir são apenas aproximados, confira os detalhes no moodle!)

  • Primeira prova: capítulos 1 e 2 (princípios; transmissão confiável).
  • Segunda prova: capítulos 1 e 2 (desempenho; transm. confiável; acesso ao meio).
  • Terceira prova: capítulos 3 e 4 (inteligação de redes – IP).
  • Quarta prova: capítulos 5 e 9 (transporte e aplicações).

Informe o professor assim que possível no caso de não poder fazer uma das provas. Compromissos profissionais não são em geral justificativa para ausência.

Trabalhos práticos

Serão três, valendo 48 % da nota final. Exceto quando houver indicação em contrário, os trabalhos poderão ser realizados individualmente ou em duplas. Nesse último caso, caso ocorram entrevistas, os dois alunos deverão estar presentes e devem ambos ser capazes de responder perguntas sobre qualquer parte do trabalho.

  1. TP1: Um par cliente-servidor simples e seu desempenho (enunciado no minha.ufmg) (12 pontos).
  2. TP2: Par cliente-servidor com protocolo de janela deslizante (18 pontos).
  3. TP3: Sistema P2P de troca de arquivos (roteamento) (20 pontos).

Sobre prazos e formato de entrega:

Todos os trabalhos devem ser entregues eletronicamente, como um arquivo .zip ou .tar.gz, contendo todo os fontes relacionado ao trabalho em questão – não inclua arquivos objeto (.o, .obj) nem arquivos executáveis (a.out, .exe, etc.); um relatório deve fazer parte da entrega, detalhando aspectos principais do trabalho executado.

A entrega eletrônica deve ser feita até o horário indicado no Moodle. Usualmente, esse horário é sempre anterior ao início da aula no dia marcado.

Trabalhos entregues depois do prazo serão penalizados em 12,5 % se entregues nas 24 horas seguintes, em 25 % se entregues até as 48 horas e 50 % para as 24 horas depois disso. (Isto é, o atraso máximo aceitável para ainda valer algo é de três dias.)

Para evitar problemas, comece a fazer cada trabalho assim que ele for definido. O prazo planejado para cada entrega prevê trabalho contínuo durante o período; deixar para fazer tudo nos últimos dias não vai dar certo, acreditem.

Parte da avaliação dos trabalhos poderá ser feita na forma de questões escritas nas provas teóricas e/ou por entrevistas individuais.

Confira as datas dos trabalhos no moodle

Programação Detalhada

Aula Assunto

  1. Introdução. Conceitos gerais.
  2. Conceitos gerais. Arquiteturas de rede
  3. Desempenho de protocolos.
  4. Desempenho de protocolos - exercícios
  5. Programação de sistemas em rede.
  6. Codificação
  7. Enquadramento.
  8. Erros. Transmissão confiável.
  9. Transmissão por janela deslizante
  10. Meio compartilhado: Ethernet
  11. Prova 1 (até janela deslizante)
  12. Redes em anel. Redes sem fio
  13. Chaveamento de pacotes.
  14. Chaves com aprendizado. Árvore geradora.
  15. Revisão. Interconexão de redes.
  16. Encaminhamento. Fragmentação.
  17. IP: Endereçamento, ARP.
  18. Prova 2 (até o capítulo 2)
  19. DHCP, ICMP, VPNs.
  20. Roteamento: distance vector.
  21. Roteamento: link state.
  22. Roteamento: BGP. Escalabilidade. IPv6
  23. Prova 3 (até IPv6)
  24. Transmissão fim-a-fim. UDP. RPC
  25. TCP: conexões, máquina de estados
  26. TCP: controle de fluxo
  27. Aplicações: DNS, gerência de rede, Web
  28. Aplicações: Web, correio eletrônico
  29. Revisão. Considerações finais.
  30. Prova 4 (matéria restante)

Livro-Texto

  • Redes de Computadores: uma abordagem de sistemas, Larry Peterson e Bruce Davie, Ed. Campus/Elsevier. Tradução da quinta edição do livro Computer Networks, a systems approach, Ed. Morgan Kaufmann.

Atenção: há também traduções da terceira e da segunda edição; o conteúdo é bastante semelhante e cobre quase tudo que vai ser discutido. Entretanto, todas as referências a números de seções e exercícios do livro se referem à quinta edição.

Bibliografia suplementar

  • ``Practical TCP/IP Sockets in C: practical guide for programmers'' de Donahoo e Calvert (boa referência para sockets em geral; há também uma versão para Java). Uma referência condensada do uso de sockets, com bons exemplos de programação. Bastante recomendável para quem for seguir programando com sockets no futuro.
  • Redes de Protocolos: Protocolos de Internet em Ação, Jeanna Matthews, Ed. LTC. Diversos aspectos práticos de protocolos serão analisados com base em material desenvolvido nesse livro.
  • Douglas Comer, Interligacao em Rede com TCP IP Vol I: Princípios, protocolos e arquiterura, Campus (ou InternetWorking with TCP IP Vol. I, Prentice Hall)
  • Um ótimo livro sobre Internet e TCP/IP, com um bom nível de detalhes sobre os protocolos. É considerado uma referência básica sobre TCP/IP em geral.
  • Stevens, W.R., Unix Network Programming, 2nd ed., Prentice Hall (não sei se há tradução)
  • Referência imprescindível para quem pretende desenvolver aplicações avançadas que utilizem a rede utilizando a interface sockets. Já apareceu até no cinema! (Wayne's World 2 - Quanto mais idiota melhor 2)
  • Stevens, W.R., TCP/IP Illustrated, Vol. 1: The Protocols, Vol.3: TCP for Transactions, HTTP, NNTP, and the Unix Domain Protocols (pelo menos o primeiro volume foi traduzido: TCP/IP Ilustrado, não sei a editora) - Referência extremamente completa sobre os detalhes de funcionamento e implementação dos protocolos da arquitetura TCP/IP. O vol. 2 só interessa para especialistas em sistemas operacionais e implementação de protocolos de rede.

Existem outros bons livros sobre redes de computadores por aí, mas eles não trazem o material com a profundidade e organização desejadas para este curso, portanto não são recomendados como substituto para o livro texto adotado. Entretanto, alunos em busca de uma outra visão sobre o tema podem querer consultar esses livros eventualmente:

  • Andrew Tanenbaum, Redes de Computadores, 3^aEd., Campus (ou Computer Networks, Prentice Hall) - Livro muito utilizado em cursos de Redes de Computadores em geral, cobre os principais aspectos da área, incluindo várias tecnologias de redes. Há quem adore esse livro; eu acho o texto um pouco confuso e cansativo, com alguns pontos tratados com mais profundidade que a necessária, outros tratados muito superficialmente.
  • Stallings, W., Data and Computer Communications, Prentice Hall - Um livro com um enfoque maior nas camadas inferiores do modelo OSI/ISO, bastante abrangente em termos das tecnologias abordadas.
  • Keshav, S., An Engineering Approach to Computer Networking, Addison-Wesley - Como o nome indica, um livro mais voltado para aspectos de engenharia e redes de transmissão de dados (camadas inferiores da pilha de protocolos). Grande parte do material tem mais interesse para profissionais de telefonia e transmissão de dados, por enfocar muitos detalhes da rede telefônica e da rede ATM.
  • Kurose, J, Ross, K., Redes de Computadores e a Internet: uma nova abordagem, Addison Wesley (ou Computer Networking – a top-down approach) – qualquer edição. O livro apresenta uma abordagem top-down, oposta à que se tornou padrão na área, com resultados interessantes em alguns casos, especialmente para quem não tem maior experiência com programação.

Sockets

Há várias referências na Web sob como desenvolver programas utilizando soquetes. Em particular, podemos destacar:

  • BSD Sockets: A Quick and Dirty Primer Um tutorial curto com analogias ao sistema telefônico. Não cobre coisas avançadas como o select(), mas é um ótimo lugar para começar.
  • Python Socket HowTo apresenta a API de Python para acesso a sockets.
  • Beej's Guide to Network Programming Um guia bastante interessante, discutindo todas as funções, uma por vez, com código de exemplo que normalmente está no nível certo de complexidade. Um bom lugar para entender o uso do select, por exemplo. Aliás, lá você encontra o esqueleto de um ``servidor de chat´´. Tente organizar o código melhor, pelo menos, se você for usá-lo!
  • Unix socket FAQ Coleção das perguntas mais frequentes sobre o uso de soquetes e de select() em particular. Normalmente contém muito mais detalhes do que é necessário neste caso, mas nunca se sabe…

Assuntos variados

Alguns links úteis que trazem mais detalhes sobre tópicos específicos discutidos durante o curso.

Artigos

A lista a seguir apresenta um conjunto de artigos de extrema relevância para a área de redes. Muitos deles apresentam conceitos básicos de aplicação ampla, outros possuem um interesse histórico, alguns discutem pesquisas recentes ou caminhos futuros para a área. Praticamente todos eles servem bem como exemplos de trabalhos com uma visão abrangente de sistemas, onde os problemas são analisados e as soluções definidas com uma preocupação constante com o sistema como um todo.

Conceitos gerais de projeto de sistemas

Esses três artigos, apesar de antigos, são leitura obrigatória para quem pretende se aprofundar na área de Sistemas de Computação

Arquiteturas de rede

TCP/IP

Roteamento

Tendências