Warning: strpos() [function.strpos]: Empty needle in /home/dealer/kasat/pkg/cahir/web/html/lib/plugins/translation2/action.php on line 53

Warning: Cannot modify header information - headers already sent by (output started at /home/dealer/kasat/pkg/cahir/web/html/lib/plugins/translation2/action.php:53) in /home/dealer/kasat/pkg/cahir/web/html/inc/actions.php on line 163
net-prog [Krystian Bacławski Wiki]
 

Programowanie usług sieciowych

Streszczenie

Wykład ma za zadanie rozszerzyć część praktyczną wykładu z sieci komputerowych. Rozpoczniemy od opisywania interfejsu programisty systemów operacyjnych z rodziny Unix. Poznamy mechanizmy służące do budowania aplikacji korzystających z gniazd sieciowych. Przyjrzymy się protokołom transportowym: TCP, UDP, SCTP, DCCP; warstwy sieci: IP, ICMP; warstwy danych: Ethernet, ARP. Zapoznamy się ze wzorcami projektowymi, które umożliwią nam zorganizowanie poznanych mechanizmów w wygodne narzędzia programistyczne, które są użyteczne do implementacji usług sieciowych opartych na protokołach wyższych warstw. Następnie porzucimy niskopoziomowe aspekty programowania sieciowego i zajmiemy się prototypowaniem usług sieciowych. W tym celu użyjemy języka Python i platformy Twisted. Poznamy jak szybko i łatwo zaimplementować klient-serwer wykorzystujący protokoły SSH, HTTP, DNS. Przy okazji przybliżymy sobie funkcjonalność tych protokołów. Wykład skończy się omówieniem protokołów warstwy prezentacji, służących do szyfrowania i kompresji przesyłanych danych. Nauczymy się pisać aplikacje korzystające z protokołów TLS i DTLS.

Wymagania

  1. Co najmniej dobra znajomości języka C i systemu operacyjnego Linux (lub innego z rodziny Unix).
  2. Umiejętność używania narzędzi gcc, make, gdb, strace,
  3. Nawyk używania narzędzia man ;-)
  4. Dobra znajomości języka Python.
  5. Zaliczony przedmiot sieci komputerowe!

Program

Niskopoziomowa obsługa gniazd (7 wykładów)

Podstawy programowania z użyciem gniazd sieciowych

  1. Interfejs programisty systemu Unix:
    • procesy,
    • wątki,
    • gniazda BSD,
      • datagramowe,
      • strumieniowe,
    • sygnały i alarmy.
  2. Serwer i klient oparty na gniazdach blokujących:
    • omówienie protokołów transportowych:
      • TCP,
      • UDP,
      • SCTP,
      • DCCP.
    • opcje gniazd.
    • tolerowanie awarii połączeń,
    • rozwiązywanie nazw.

Zaawansowane programowanie z użyciem gniazd sieciowych

  1. Interfejs programisty systemu Unix:
    • dane pomocnicze dla operacji I/O – cmsg
    • scatter-gather I/O,
    • gniazda domenowe unix:
      • komunikacja międzyprocesowa,
      • przesyłanie otwartych deskryptorów,
      • przesyłanie uprawnień,
  2. Demony sieciowe:
    • samodzielne:
      • przywódca sesji,
      • porzucanie uprawnień,
    • środowisko izolowane – chroot,
    • współpraca z inetd,
    • logowanie – syslog.
  3. Asynchroniczna obsługa gniazdek:
    • asynchroniczność przy pomocy sygnałów,
    • uprzywilejowane komunikaty – out-of-band data,
    • nawiązywanie i akceptowanie połączeń,
    • obsługa zdarzeń związanych z:
      • gniazdami – epoll,
      • alarmami – timerfd,
      • sygnałami – signalfd.
  4. Zaawansowana operacje na gniazdach:
    • gniazda surowe:
      • IP – na przykładzie ICMP,
      • Ethernet – na przykładzie ARP,
    • rozgłaszanie,
    • multicasting.

Architektury i wzorce projektowe dla usług sieciowych (2 wykłady)

  1. Architektury:
    • Porównanie architektur aplikacji sieciowych:
      • peer-to-peer vs. client-server
      • płaskie vs. hierarchiczne
      • scentralizowane vs. zdecentralizowane
    • Porównanie modeli obsługi połączeń:
      • proces per klient
      • wątek per klient
      • sterowane zdarzeniami (event-driven)
      • zdarzenia vs. wątki vs. koprocedury
    • Protokoły:
      • bezstanowe vs. stanowe
      • tekstowe vs. binarne
  2. Wzorce projektowe:
    • Ogólne:
      • Factory, Producer-Consumer, Adapter, Policy, Mixin, Wrapper, Facade, Singleton, State, Proxy, Iterator, Bridge, Mediator, Observer,
    • Współbieżność:
      • Monitor Object, Thread Pool, Active Object, Leader/Followers, Half-Sync/Half-Async
    • Obsługa zdarzeń:
      • Reactor, Proactor, Acceptor/Connector, Asynchronous Completion Token

Prototypowanie usług sieciowych (4-5 wykładów)

  1. Wprowadzenie do platformy Twisted:
    • reactor – obsługa zdarzeń, nawiązywanie połączeń, nasłuchiwanie
    • fabryki – tworzenie obiektów obsługujących dane na połączeniu
    • protokoły – separacja obsługi gniazd sieciowych i danych
    • defereds – generowanie i obsługa zdarzeń
    • obsługa błędów
    • logowanie
    • niskopoziomowe mechanizmy:
      • transport – obiekt odpowiedzialny za wymianę danych na połączeniu,
      • łącznik (ang. connector) – obiekt gniazdka inicjującego połączenie,
      • port – obiekt gniazdka akceptującego połączenia,
  2. Implementacja usług:
    • protokoły:
      • transport – UDP, TCP, SSL, IPC, standardowe wejście-wyjście, pliki
      • bazowe protokoły – binarne (prefiksowe), tekstowe (liniowe), netstring, stanowe
      • dodatkowe właściwości protokołów (mixins) – pauzowalny, ograniczony czasowo (timeout)
      • polityki dla protokołów – ograniczenie przepustowości / ilości klientów / czasu sesji / etc.
    • fabryki:
      • protokołów klienckich,
      • protokołów serwerowych,
  3. Implementacja usług opartych na protokołach:
    • SSH – moduł twisted.conch,
    • HTTP – moduł twisted.web,
    • DNS – moduł twisted.names.

Komunikacja szyfrowana (1-2 wykłady)

  1. Wprowadzenie:
    • algorytmy szyfrujące:
      • wymiana kluczy symetrycznych,
      • uwierzytelnianie,
      • szyfrowanie danych sesji,
      • kod integralności danych.
    • certyfikaty X.509:
      • urzędy certyfikujące,
      • uwierzytelnianie użytkowników,
      • wydawanie i wycofywanie certyfikatów,
    • omówienie uzgadniania sesji TLS (ang. handshake):
      • zwykłe,
      • z uwierzytelnianiem użytkownika,
      • skrócone.
  2. Implementacja usług opartych o komunikację szyfrowaną:
    • porównanie implementacji protokołu TLS
    • protokoły:
      • TLS,
      • DTLS,
    • nieblokujące operacje na gniazdach TLS.

Literatura

Advanced Programming in the UNIX Environment @amazon.com

Title:     Advanced Programming in the UNIX Environment
Author:    W. Richard Stevens, Stephen A. Rago
Publisher: Addison-Wesley Professional; 2 edition (February 2, 2008)
ISBN-13:   978-0321525949

Unix Network Programming, Volume 1: The Sockets Networking API @amazon.com

Title:     Unix Network Programming, Volume 1: The Sockets Networking API
Author:    W. Richard Stevens, Bill Fenner, Andrew M. Rudoff
Publisher: Addison-Wesley Professional; 3 edition (November 24, 2003)
ISBN-13:   978-0131411555

Twisted Network Programming Essentials @amazon.com

Title:     Twisted Network Programming Essentials
Author:    Abe Fettig
Publisher: O'Reilly Media, Inc. (October 20, 2005)
ISBN-13:   978-0596100322

Pattern-Oriented Software Architecture Volume 1: A System of Patterns @amazon.com

Title:     Pattern-Oriented Software Architecture Volume 1: A System of Patterns
Author:    Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal
Publisher: Wiley; 1 edition (August 8, 1996)
ISBN-13:   978-0471958697

Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects @amazon.com

Title:     Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects
Author:    Douglas Schmidt, Michael Stal, Hans Rohnert, Frank Buschmann
Publisher: Wiley; 1 edition (September 14, 2000)
ISBN-13:   978-0471606956

SSL and TLS: Theory and Practice @amazon.com

Title:     SSL and TLS: Theory and Practice (Information Security and Privacy)
Author:    Rolf Oppliger
Publisher: Artech House Publishers (September 30, 2009)
ISBN-13:   978-1596934474

Materiały pomocnicze

 
net-prog.txt · Last modified: 2010/05/21 15:51 by Krystian Bacławski
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-No Derivative Works 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki