Zagadnienia na test 2023/2024:
====== Programowanie ======
Zagadnienia:
* Znać podstawowe funkcje, wiedzieć co robią. \\ Lista funkcji: ''socket, bind, connect, listen, accept, shutdown, close, fcntl, read, recv, recvfrom, write, send, sendto, setsockopt, gethostbyname, getaddrinfo, getnameinfo, inet_aton, inet_ntoa, inet_addr, htons, ntohs, select, poll, epoll_create1, epoll_ctl, epoll_wait''
* Znać podstawowe stałe i wiedzieć co oznaczają. \\ Lista stałych: ''AF_INET, AF_INET6, SOCK_STREAM, SOCK_DGRAM, INADD_ANY, INADDR_LOOPBACK, SOMAXCONN, O_NONBLOCK, MSG_DONTWAIT, MSG_WAITALL, SHUT_RDWR, SOL_SOCKET, SO_REUSEADDR, POLLIN, POLLOUT, EPOLLIN, EPOLLOUT, EPOLLET''
* Znać podstawowe struktury i wiedzieć co zawierają. \\ Lista struktur: ''sockaddr, sockaddr_in, sockaddr_in6'' (tylko do czego służy)'', inaddr_t, hostent, addrinfo, epoll_event, pollfd''
* Nie jest wymagana znajomość składni, kolejność czy nazwy argumentów funkcji / pól struktur. \\ Np. trzeba wiedzieć, że funkcja socket tworzy gniazdo podanego protokołu (IPv4, IPv6) i typu (strumieniowe, zorientowane na wiadomość), a nie trzeba wiedzieć że pierwszy argument nazywa się ''domain'', a trzeci ma typ ''int''.
* Kojarzyć zmienne, stałe i funkcje z interfejsu POSIX / standardu C które mają zastosowanie przy programowaniu aplikacji sieciowych i pojawiały się na laboratoriach – mogą się pojawić w kodzie podanym w treści zadania
* Wiedzieć jak wygląda obsługa błędów w sieciach.
* Umieć na podstawie objaśnienia błędu wypisanego np. przez ''perror'' zdiagnozować co mogło być przyczyną błędu.
* Wiedzieć czym jest zmienna ''errno'' i gdzie znaleźć kody które może zawierać.
* Znać różnice między protokołem TCP i UDP, m. inn. strumieniowe vs datagramowe, gwarancje dawane programiście przez protokół.
* Wiedzieć w jakiej kolejności można i w jakiej kolejności należy wywoływać funkcje na gnieździe, w szczególności by stworzyć klienta/serwer TCP/UDP.
* Wiedzieć jakie funkcje pozwalają znaleźć IP dla podanej nazwy domenowej i czym się różnią
* Wiedzieć czym różni się blokująca i nieblokująca obsługa gniazd.
* Wiedzieć które funkcje operujące na gniazdach mogą zablokować program.
* Wiedzieć co oznaczają wartości zwracane przez funkcje sieciowe.
* Ile bajtów może przeczytać funkcja read (recv, recvfrom, …), kiedy mniej niż żądano.
* Ile bajtów może przeczytać funkcja write (send, sendto, …), kiedy mniej niż żądano.
* Wiedzieć jakie gwarancje (bądź brak) odbierania danych, kolejności odbioru, odbierania danych takimi porcjami jakimi były wysyłane, wysyłania nie szybciej niż pozwala łącze daje TCP i UDP
* Znać wzorce projektowe do odbierania i wysyłania wiadomości (uwzględniające możliwość zablokowania się funkcji / niemożliwość wysłania i odebrania danych bez czekania).
* Wiedzieć jakimi funkcjami obsługuje się szukanie IP dla podanej nazwy domenowej i czym te funkcje się różnią.
* Na czym polega wielowątkowa obsługa gniazd.
* Wiedzieć które funkcje można bezpiecznie używać w programie wielowątkowym, jak działają i jakie mają gwarancje współbieżne wywołania funkcji sieciowych.
* Na czym polega ''poll'' / mechanizm epoll, czym się różnią, jakie zdarzenia na gniazdach raportują w przypadku przyjścia nowego połączenia, przyjścia danych, możliwości wysłania danych, zamknięcia gniazda, wystąpienia błędu na gnieździe.
* Jak, wykorzystując ''poll'' / ''epoll_wait'', czekać na możliwość odczytu / zapisu danych do któregoś z podanych gniazd.
* Jak funkcje ''poll'' / ''epoll_wait'' działają w wielowątkowych programach.
* Jak wygląda obsługa multicastu.
* Wiedzieć jakie "archetypowe" klasy do obsługi sieci oferują języki/biblioteki wysokiego poziomu.
* Wiedzieć w jakich sytuacjach wybrać języki/biblioteki wysokiego poziomu a w jakich należy korzystać z niskopoziomowego interfejsu systemowego.
* kojarzyć komendy ''netstat'' / ''ss'', ''nc'' / ''netcat'' / ''socat'', ''strace'' / ''ltrace'', ''gdb'' (debugger) i ich użycie do rozwoju, testowania i diagnostyki programów sieciowych
* Dla jasności: nie jest wymagana znajomość API do sieci z bibliotek Qt / języka Java
Przykładowe formy pytań w tej części:
* Pytania typowo teoretyczne, **np.**:
* co robi funkcja
* co oznacza konkretny argument (por. "czym w funkcji ''printf(char * fstr, …)'' jest argument ''fstr''")
* co określają stałe, w jakiej funkcji można je użyć
* czy tej funkcji można użyć w danym przypadku
* co spowoduje użycie funkcji w danym przypadku
* Fragment kodu i pytanie:
* co robi dany kod / podana linia
* co wypisze na ekran wykonanie danego kod
* w jakim kontekście może być użyty
* w jakim przypadku nie zadziała prawidłowo
* Fragment kodu z luką i pytanie co pasuje w jej miejsce
* Komunikat o błędzie i pytanie co mogło taki komunikat spowodować
* Jakim programem sprawdzić konkretny aspekt działania programu sieciowego, do czego służy dany program, co wypisze / spowoduje podana komenda, jaką komendą coś wypisać / spowodować
====== Sieci bezprzewodowe ======
* Znać
* pojęcia: WLAN, IEEE 802.11, Wi-Fi®
* rodzaje sieci
* IBSS (ad-hoc)
* BSS i ESS (infrastruktura)
* czym się różni BSS i ESS
* w jakich trybach może pracować karta sieciowa
* identyfikatory
* BSSID
* SSID (ESSID)
* kiedy i do czego są używane w/w identyfikatory
* role urządzeń
* AP
* STA (stacja)
* na jakiej warstwie pracują
* jakich identyfikatorów używają
* w jakich rodzajach sieci występują
* bezpieczeństwo
* WEP, WPA-PSK, WPA-EAP, WPA2-PSK, WPA2-EAP, WPA3-SAE, WPA3-EAP, WPS
* realny poziom bezpieczeństwa
* realizacja uwierzytelniania
* realizacja szyfrowania
* różnice między WPA/WPA2-PSK, WPA3-SAE i WPA/WPA2/WPA3-EAP
* Dla standardów 802.11{a,b,g,n,ac,ax}
* dla każdego standardu: z jakich pasm częstotliwości korzysta (2.4/5/6GHz)
* dla każdego standardu: z jakimi szerokościami kanałów i przybliżonymi prędkościami mogą pracować
* czym jest wiele strumieni przestrzennych (spatial stream), jak wpływają na prędkość sieci
* jak jest wykorzystywane wiele anten – beamforming, SU/MU-MIMO
* czy wiele sieci/urządzeń może naraz korzystać z tego samego kanału – CSMA, MU-MIMO, OFDMA
* Znać zastosowanie, umieć czytać wyniki podstawowych komend (m. inn. ''iwconfig'', ''iw dev'', ''iw phy'', ''iwconfig … mode …'', ''iw … set type …'', ''iw[config] … scan'', ''iw … [link/info]'', ''iwconfig … essid …'', ''iwconfig … freq …'', ''iw … …'', ''wpa_supplicant'') \\ Potencjalne pytania będą zawierać poprawną składnię komend, będą dotyczyć wyboru pasującej komendy lub interpretacji wyniku komendy
* Nie będzie pytań dotyczących konkretnych komend na urządzeniach Cisco/MikroTik
====== DNS ======
* Znać
* pojęcia
* DNS
* nazwa domenowa, FQDN
* TLD
* rodzaje serwerów
* root
* authoritive
* caching
* wiedzieć jaka jest rola w/w serwerów
* master
* slave
* Wiedzieć
* do czego służy . (kropka) w DNS
* jak jest wykonywane zapytanie
* co można wpisać do DNS
* jakie są rodzaje rekordów
* do czego służą i jak wyglądają
* A, AAAA
* PTR
* NS
* MX
* SOA (nie trzeba znać składni)
* CNAME
* TXT
* które rekordy są obowiązkowe dla każdej strefy
* gdzie (na serwerze której domeny) należy umieszczać wpisy dla podanej nazwy domenowej (powyższych typów)
* jakie rekordy i w jakich domenach są wykorzystywane/potrzebne:
* do działania DNS
* do tłumaczenia adresów domenowych na IPv4/6
* w poczcie elektronicznej
* do tłumaczenia IP na nazwę domenową
* na czym polega cache'owanie rekordów (przez serwery caching), kto i jak określa ile czasu rekord może być cache'owany
* na czym polega zone transfer
* znać komendy ''dig'' / ''host'' do odpytywania serwerów DNS w zakresie (= tylko umieć określić, co podana komenda robi lub co oznacza jej wynik):
* odpytania o konkretny typ rekordu
* odpytania konkretnego serwera DNS
* wyjaśnienia wyniku
====== IPv6 ======
* Wiedzieć
* jak wygląda adres
* jakie są reguły zapisu i skracania adresu IPv6
* jak jest zbudowany adres unicastowy
* prefix
* subnet
* IID
* Skąd jest brany IID
* jak jest zbudowany adres multicastowy
* jak zmieniono nagłówek IPv6 w porównaniu do IPv4
* jak automatycznie nadaje się adresy IPv6
* NDP
* DHCPv6
* jak jest realizowana fragmentacja w IPv6 i co to jest pMTU
* jakie wygląda współistnienie IPv4 i IPv6
* co oznacza dual stack
* co to są tunele 6in4
* czemu służy usługa tunnel broker
* czemu służą translacje 4→6 i 6→4
* Znać
* rodzaje adresów
* unicast
* multicast
* anycast
* adresy specjalne
* adresy link-local
* jedyny dotychczas przydzielony blok globalnie routowalny
====== Instrukcja obsługi testu: ======
* Liczba pytań nie jest okrągła (na przykład 27).
* Jest to zestaw pytań testowych o odpowiedziach jednokrotnego i wielokrotnego wyboru.
* Pytania wielokrotnego wyboru mają podaną liczbę poprawnych odpowiedzi, pozostałe pytania mają tylko jedną poprawną odpowiedź.
* Pytania jednokrotnego wyboru od wielokrotnego wyboru można rozróżnić też po wyglądzie pola input:
* jednokrotny wybór
* wielokrotny wybór
* Dlaczego to piszę? Bo to pytanie padało w zeszłych latach w trakcie testu...
* Na każde pytanie co najmniej jedna odpowiedź jest poprawna.
* Za błędne odpowiedzi nie ma punktów ujemnych.
* W pytaniach wielokrotnego wyboru:
* Zaznaczenie więcej odpowiedzi niż jest poprawnych skutkuje brakiem punktu za pytanie.
* Za każdą zaznaczoną poprawną odpowiedź z //N// poprawnych odpowiedzi dostaje się //1/N// punktu. \\ Np. zaznaczając 2 poprawne i 1 błędną odpowiedź w pytaniu z 3 poprawnymi odpowiedziami uzyskuje się ⅔ punkta za pytanie.
* **Nie można** korzystać z żadnych materiałów pomocniczych ani konsoli
====== Q&A ======
**Q:** Czy na teście mogą pojawić się jakieś komendy? \\
**A:** W treści pytania lub w możliwych odpowiedziach mogą pojawić się nazwy programów, pełne polecenia lub wyniki wykonania poleceń. Wszystkie zadania to wybór jednej albo wskazanej liczby gotowych odpowiedzi, w teście nie będzie pytań w których konieczne by było wpisanie jakiegokolwiek teksu.