Politechnika Warszawska - Centralny System Uwierzytelniania
Strona główna

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 Podstawowe informacje o zasadach przyporządkowania punktów ECTS:
  • roczny wymiar godzinowy nakładu pracy studenta konieczny do osiągnięcia zakładanych efektów uczenia się dla danego etapu studiów wynosi 1500-1800 h, co odpowiada 60 ECTS;
  • tygodniowy wymiar godzinowy nakładu pracy studenta wynosi 45 h;
  • 1 punkt ECTS odpowiada 25-30 godzinom pracy studenta potrzebnej do osiągnięcia zakładanych efektów uczenia się;
  • tygodniowy nakład pracy studenta konieczny do osiągnięcia zakładanych efektów uczenia się pozwala uzyskać 1,5 ECTS;
  • nakład pracy potrzebny do zaliczenia przedmiotu, któremu przypisano 3 ECTS, stanowi 10% semestralnego obciążenia studenta.
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 oraz metody tworzenia serwisów sieciowych, architektura i oprogramowanie protokołów warstwy 7 w tym HTTP, zdalne wywołanie procedur (RPC). Poruszane są też kwestie bezpieczeństwa tworzonych rozwiazań. Na ćwiczeniach laboratoryjnych omawiane są praktyczne aspekty tworzenia oprogramowania sieciowego a zasadniczym sprawdzianem nabytych umiejętności jest projekt.

Pełny opis:

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; protokół QUIC i inne protokoły transportowe, 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. (4 godz.)
  4. Programowanie serwisów sieciowych z wykorzystaniem gniazd; szkielety programu klienta i serwera dla protokołów transportowych UDP i TCP dla API C oraz Python (2 godz.)
  5. Praktyczne kwestie związane z programowaniem z wykorzystaniem gniazd w językach C oraz Python: zasady tworzenia poprawnego kodu; omówienie przykładowych protokołów, omówienie typowych błędów i przedstawienie metod ich uniknięcia. Wieloprocesowość, wielowątkowosć, przenośność i wydajność kodu; (4 godz.)
  6. Bezpieczeństwo warstwy transportowej – krótkie przypomnienie tematyki PKI, konstrukcja certyfikatu X509v3; korzystanie z protokołu TLS na poziomie API C oraz Python. (2 godz.)
  7. Programowanie serwisow sieciowych warstwy 7: wpływ aspektów niskopoziomowych na architekturę i zachowanie aplikacji Web. Serwery aplikacyjne: HTML, CSS, JavaScript, XML, XSLT, 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 protokół CoAP. (6 godz.)
  8. Model RPC (zdalne wywołanie procedur) - koncepcja RPC, podstawowe założenia i filozofia programowania RPC. ONC RPC: program rpcgen i standard XDR. Inne systemy RPC. Przykłady programowania RPC: analiza prostego systemu zrealizowany z wykorzystaniem rpcgen. Inne systemy RPC: gRPC i SOAP/WSDL (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.

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 2023/2024 - sem. zimowy" (zakończony)

Okres: 2023-10-01 - 2024-02-18
Wybrany podział planu:
Przejdź do planu
Typ zajęć:
Laboratorium, 15 godzin, 120 miejsc więcej informacji
Projekt, 15 godzin, 120 miejsc więcej informacji
Wykład, 30 godzin, 120 miejsc więcej informacji
Koordynatorzy: Grzegorz Blinowski
Prowadzący grup: Grzegorz Blinowski, Konrad Kamiński, Paweł Radziszewski, Jacek Wytrębowicz
Lista studentów: (nie masz dostępu)
Zaliczenie: Ocena łączna
Jednostka realizująca:

103200 - Instytut Informatyki

Zajęcia w cyklu "rok akademicki 2022/2023 - sem. letni" (zakończony)

Okres: 2023-02-20 - 2023-09-30
Wybrany podział planu:
Przejdź do planu
Typ zajęć:
Laboratorium, 15 godzin, 30 miejsc więcej informacji
Projekt, 15 godzin, 30 miejsc więcej informacji
Wykład, 30 godzin, 30 miejsc więcej informacji
Koordynatorzy: Grzegorz Blinowski
Prowadzący grup: Grzegorz Blinowski, Konrad Kamiński, Paweł Radziszewski, Jacek Wytrębowicz
Lista studentów: (nie masz dostępu)
Zaliczenie: Ocena łączna
Jednostka realizująca:

103200 - Instytut Informatyki

Zajęcia w cyklu "rok akademicki 2022/2023 - sem. zimowy" (zakończony)

Okres: 2022-10-01 - 2023-02-19
Wybrany podział planu:
Przejdź do planu
Typ zajęć:
Laboratorium, 15 godzin, 120 miejsc więcej informacji
Projekt, 15 godzin, 120 miejsc więcej informacji
Wykład, 30 godzin, 120 miejsc więcej informacji
Koordynatorzy: Grzegorz Blinowski
Prowadzący grup: Grzegorz Blinowski, Piotr Gawkowski, Konrad Kamiński, Paweł Radziszewski, Jacek Wytrębowicz
Lista studentów: (nie masz dostępu)
Zaliczenie: Ocena łączna
Jednostka realizująca:

103200 - Instytut Informatyki

Zajęcia w cyklu "rok akademicki 2021/2022 - sem. letni" (zakończony)

Okres: 2022-02-23 - 2022-09-30
Wybrany podział planu:
Przejdź do planu
Typ zajęć:
Laboratorium, 15 godzin, 24 miejsc więcej informacji
Projekt, 15 godzin, 24 miejsc więcej informacji
Wykład, 30 godzin, 24 miejsc więcej informacji
Koordynatorzy: Grzegorz Blinowski
Prowadzący grup: Grzegorz Blinowski, Konrad Kamiński
Lista studentów: (nie masz dostępu)
Zaliczenie: Ocena łączna
Jednostka realizująca:

103200 - Instytut Informatyki

Zajęcia w cyklu "rok akademicki 2021/2022 - sem. zimowy" (zakończony)

Okres: 2021-10-01 - 2022-02-22
Wybrany podział planu:
Przejdź do planu
Typ zajęć:
Laboratorium, 15 godzin, 120 miejsc więcej informacji
Projekt, 15 godzin, 120 miejsc więcej informacji
Wykład, 30 godzin, 120 miejsc więcej informacji
Koordynatorzy: Grzegorz Blinowski
Prowadzący grup: Grzegorz Blinowski, Piotr Gawkowski, Konrad Kamiński, Paweł Radziszewski, Jacek Wytrębowicz
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.
pl. Politechniki 1, 00-661 Warszawa tel: (22) 234 7211 https://pw.edu.pl kontakt deklaracja dostępności USOSweb 7.0.0.0-7 (2024-03-18)