Politechnika Warszawska - Centralny System UwierzytelnianiaNie jesteś zalogowany | zaloguj się
katalog przedmiotów - pomoc

Programowanie sieciowe

Informacje ogólne

Kod przedmiotu: 103A-INxxx-ISP-PSI Kod Erasmus / ISCED: (brak danych) / (brak danych)
Nazwa przedmiotu: Programowanie sieciowe
Jednostka: Wydział Elektroniki i Technik Informacyjnych
Grupy: ( Metody wytwarzania oprogramowania )-Informatyka-inż.-EITI
( Przedmioty techniczne )---EITI
Punkty ECTS i inne: 4.00
Język prowadzenia: polski
Jednostka decyzyjna:

103000 - Wydział Elektroniki i Technik Informacyjnych

Kod wydziałowy:

PSI

Numer wersji:

1

Skrócony opis:

Celem przedmiotu jest zdobycie umiejętności tworzenia programowania realizującego komunikację sieciową na poziomie warstw 4 – 7 modelu OSI.


W ramach wykładu omawiane są podstawowe metody programowania sieciowego: gniazda, zdalne wywołanie procedur (RPC) oraz metody tworzenia serwisów sieciowych, poruszane są też kwestie bezpieczeństwa tworzonych rozwiazań. Na ćwiczeniach laboratoryjnych omawiane są praktyczne aspekty tworzenia oprogramowania sieciowego a zasadncizym sprawdzianem nabytych umiejętnosci jest projekt.

Pełny opis:

Celem przedmiotu jest zdobycie umiejętności tworzenia programowania realizującego komunikację sieciową na poziomie warstw 4 – 7 modelu OSI.
W ramach wykładu omawiane są podstawowe metody programowania sieciowego: gniazda, zdalne wywołanie procedur (RPC) oraz metody tworzenia serwisów sieciowych, poruszane są też kwestie bezpieczeństwa tworzonych rozwiazań. Na ćwiczeniach laboratoryjnych omawiane są praktyczne aspekty tworzenia oprogramowania sieciowego a zasadncizym sprawdzianem nabytych umiejętnosci jest projekt.



Treść wykładu

  1. Założenia programowania sieciowego w kontekście warstw ISO/OSI - rys historyczny, przypomnienie podstawowych kwestii związanych z protokołami internetowymi; przypomnienie podstawowych założeń protokołów TCP/UDP/IP/ICMP; model klient-serwer. (2 godz.)
  2. Podstawy programowania z wykorzystaniem interfejsu gniazd (BSD sockets) - koncepcja asocjacji sieciowej i gniazda; posługiwanie się adresami IPv4 i IPv6; podstawowe funkcje systemowe: socket(), bind(), listen(), connect(), accept(); funkcje we/wy w kontekście sieciowym (różnice w stosunku do obsługi plików); obsługa biblioteki resolvera. (4 godz.)
  3. Średnio-zaawansowane aspekty interfejsu gniazd – funkcje recv...(), send...(); protokoły konwersacyjne; obsługa OOB, praca z wieloma gniazdami równolegle: (poll/select); wykorzystanie "opcji" gniazd; rozłączanie połączenia i obsługa błędów; rozgłaszanie i rozsiewanie; programowanie serwera iteracyjnego i współpbieżnego. (3 godz.)
  4. Programowanie serwisów sieciowych z wykorzystaniem gniazd; szkielety programu klienta i serwera dla protokołów transportowych UDP i TCP. (2 godz.)
  5. Zaawansowane kwestie związane z programowaniem z wykorzystaniem gniazd: wielowątkowosć i wydajność; optymalizacja kodu; pseudo-terminale; interfejs XTI jako alternatywa do gniazd – podobieństwa i różnice; przenośność - gniazda w innych środowiskach systemowo-językowych: winsock, programowanie sieciowe w języku Java i Python. (4 godz.)
  6. Bezpieczeństwo warstwy transportowej – krótkie przypomnienie tematyki PKI, kostrukcja certyfikatu X509v3; korzystanie z protokółu SSL na poziomie API. (3 godz.)
  7. Programowanie w modelu RPC (zdalne wywołanie procedur) - koncepcja RPC, podstawowe założenia i filozofia programowania RPC. ONC RPC: program rpcgen i standard XDR. Inne system RPC – RMI (Java) oraz RPC w systemach z rodziny Windows. Przykłady programowania RPC: analiza prostego systemu zrealizowany z wykorzystaniem rpcgen, analiza kodu i przykady zaawansowanych funkcji RPC - kontrola transportu, rozgłaszanie, oprogramowanie pętli serwisowej. (4 godz.)
  8. Programowanie serwisow sieciowych warstwy 7: serwery aplikacyjne, serwlety, sesje, bezpieczeństwo sesji; przetwarzanie danych MIME, model AJAX i JSON; wybrane aspekty oprogramowania komunikacji w protokole HTTP 1.1 i 2.0 oraz CoAP. (2 godz.)
  9. Inne paradygmaty programowania sieciowego; obliczenia masywnie równoległe; modele OpenMP i MPI; model map-reduce; inne wybrane modele obliczeniowe. (2 godz.)



Zakres laboratorium

  1. Podstawy programowania z wykorzystaniem gniazd: narzędzia, środowisko, nagłówki, zasady tworzenia kodu; wykorzystanie biblioteki resolvera.
  2. Tworzenie i analiza prostego kodu klienta serwer dla transportu UDP i TCP.
  3. Rozbudowa kodu z p.3 – wprowadzenie wielowątkowości; obsługa IPv6.
  4. Rozbudowa kodu z p.3 – jednoczesna obsługa wiekszej liczby połączeń (select/poll).
  5. Opcja - analiza fragmentów kodu wybrane popularnego pakietu open source.
  6. Tworzenie i testowanie kodu RPC; studium przypadku – od programu lokalnego do rozproszonego – jak przejść z programu stacjonarnego do rozproszonego (krok-po-kroku).



Zakres projektu

W ramach projektu zespół 3-4 osobowy ma za zadanie opracować system klient-serwer bazujący na modelu gniazd lub modelu RPC. Celem jest praktyczna weryfikacja zdobytej na wykładzie wiedzy w stosunkowo szerokim zakresie poruszanych zagadnień: komunikacji sieciowej, jej aspektów średniozaawansowanych (multipleksowanie gniazd, wielowątkowosć, wydajność, itd.). Studenci muszą wykazać sie umiejętnością projektowania protokołu a następnie jego poprawnej implementacji. Nacisk położony będzie na stronę dokumentacyjną w zakresie opisu interfejsu komunikacji oraz opisu samego protokołu. Istotny jest też aspekt testowania tworzonego kodu, które powinno być wielopoziomowe (testy jednostkowe, testy poprawnosci implementacji, testowanie sytuacji wyjątkowych, np. nieoczekiwanego rozłączenia sesji w wyniku wystąpienia błędu, itd).

Literatura:

  1. Richard Stevens, "UNIX: programowanie usług sieciowych", Wydawnictwa Naukowo-Techniczne, Warszawa 2002.
  2. Andrew Tanenbaum, et al., "Sieci komputerowe", Wydawnictwa Naukowo-Techniczne, 1988.
  3. Douglas Comer, Grzegorz Grudziński, Aleksy Schubert, "Sieci komputerowe i intersieci", Wydawnictwa Naukowo-Techniczne, 1999.
  4. David Butenhof, "Programming with POSIX Threads", Addison-Weslery, 2006.
  5. Marc Rochkind, "Programowanie w systemie Unix dla zaawansowanych", Wydawnictwa Naukowo-Techniczne, Warszawa 1997.
Metody i kryteria oceniania:

Sprawdzanie założonych efektów kształcenia realizowane jest przez:

  • ocenę wiedzy i umiejętności związanych z realizacją zadań laboratoryjnych – ocenę sprawozdań z realizacji zadań;
  • ocenę wiedzy i umiejętności związanych z realizacją zadań projektowych – ocenę prezentacji i raport;
  • ocenę wiedzy i umiejętności wykazanych na dwóch kolokwiach o charakterze testowo/problemowym.

Zajęcia w cyklu "rok akademicki 2021/2022 - sem. zimowy" (jeszcze nie rozpoczęty)

Okres: 2021-10-01 - 2022-02-20
Wybrany podział planu:


powiększ
zobacz plan zajęć
Typ zajęć: Laboratorium, 15 godzin, 150 miejsc więcej informacji
Projekt, 15 godzin, 150 miejsc więcej informacji
Wykład, 30 godzin, 150 miejsc więcej informacji
Koordynatorzy: (brak danych)
Prowadzący grup: (brak danych)
Lista studentów: (nie masz dostępu)
Zaliczenie: Ocena łączna
Jednostka realizująca:

103200 - Instytut Informatyki

Opisy przedmiotów w USOS i USOSweb są chronione prawem autorskim.
Właścicielem praw autorskich jest Politechnika Warszawska.