Co identyfikuje adres IP a co port? IP identyfikuje hosta w sieci port identyfikuje typ procesu (np. 21 FTP, 25 SMTP, 49 LOGIN) gniazdo identyfikuje unikalny nr połączenia Czym różni się deskryptor gniazda od deskryptora pliku? Deskryptor pliku identyfikuje plik, a deskryptor gniazda gniazdo. Który argument funkcji służy do określenia typu gniazda? drugi socket( domain, type, protocol) Jakie wartości przyjmuje ten argument dla gniazd połączeniowych a jakie dla bezpołączeniowych? połączeniowych - SOCK_STREAM bezpołączeniowych DGRAM_STREAM Jaki jest zakres liczbowy portów dostępnych do wykorzystania dla użytkownika niebędącego administratorem? 1024 Co oznaczają pojęcia: [0xABCD] Big-Endian? pierwszy najbardziej znaczący bajt [ABCD] Little-Endian? pierwszy najmniej znaczący bajt [CDAB] Network Byte Order? sieciowa kolejność bajtów [ABCD] Do czego służą funkcje: htonl, htons, ntohl, ntohs? Co oznaczają ich nazwy (od czego są to skróty)? htonl przekształca 32-bitową wartość z lokalnej na sieciową ntohl na odwrót htons przekształca 16-bitową wartość z lokalnej na sieciową ntohs na odwrót Liczbę w postaci szesnastkowej: cafe zapisano na dwóch bajtach w postaci: feca. Jaka to reprezentacja? little-endian Czym są i do czego służą gniazda? - podstawowy mechanizm służący do wymiany danych między maszynami (przy użyciu sieci) [Rochkind] - są używane w czwartej warstwie sieciowego modelu OSI/ISO - służą do komunikacji między procesami, w tym przez sieć - kombinacja IP i nr portu Czym się różni komunikacja połączeniowa od bezpołączeniowej? - w kom. poł. wywoływane są dla serwera: socket, bind, listen, accept; dla klienta: socket, connect - w kom. bezpoł. wywoływane są dla serwera/klienta: socket, bind - w kom. poł. można używać write, read, send, recv, writeall - w kom. bezpoł. jest to niemożliwe, ponieważ mamy tylko 1 deskryptor pliku wyznaczony dla naszego gniazda; za to można użyć funkcje sendto, recvfrom
- w kom. bezpoł. używa się datagramów - gniazda typu SOCK_STREAM gwarantują zachowanie właściwej kolejności i nadejście komunikatów - gniazda typu DGRAM_STREAM nie gwarantują utrzymywania kolejności, ani nadejścia - w kom. bezpoł. nie utrzymuje się otwartego połączenia Co to są adresy IPv4 i IPv6, jaką mają postać? IPv4: 192.168.1.1 IPv6: 2001:0db8:0000:0000:0000:0000:1428:57ab (postać 16-stkowa) (8 grup po 2 bajty) Do czego służą porty? Identyfikują typ procesu. Do portów przypisane jest wiele rozmaitych usług. Wiele numerów portów jest zwyczajowo przypisanych do dobrze znanych usług, np 80 serwery protokołu HTTP, 21 serwery protokołu FTP, 23 serwery protokołu Telnet. Muszą mieć sieciową kolejność bajtów. Jakie są typowe numery portów dla http, ftp, ssh itp.? HTTP 80, ftp 21, ssh 22, Telnet 23, SMTP - 25 Jak wygląda komunikacja z użyciem protokołu HTTP? 1) po otwarciu połączenia klient wysyła zapytanie w postaci GET ścieżka HTTP/wersja\r\n\r\n?? ścieżka określa żądany dokument (np. /index.html) wersja dotyczy protokołu HTTP 2) serwer sprawdza czy dany zasób istnieje i jest dostępny dla klienta, po czym odsyła odpowiedni kod stanu i dalszy ciąg, np.: HTTP/1.1 404 Not Found\r\n i komunikat objaśniający dany błąd lub HTTP/1.1 200 OK\r\n, plik nagłówkowy oraz żądany dokument W jakich przypadkach stosuje się komunikację bezpołączeniową z użyciem UDP? Kiedy nie jest istotny fakt, czy komunikat dotrze do celu i/lub zależy nam na szybkości, np. zamawiamy książkę w bibliotece i mamy dostać maila zwrotnego potwierdzającego zamówienie; w przypadku, gdy go nie dostaniemy, będziemy wiedzieć, że coś poszło nie tak i zamówimy jeszcze raz. UDP dobrze nadaje się do zastosowań w: małych, względnie niezawodnych sieciach, do zastosowań krytycznych czasowo, do zastosowania w serwerach obrabiających duże ilości prostych zapytań Czy programy korzystające z protokołu UDP mają możliwość kontroli pakietów? Podaj przykład, jak mogą to kontrolować (np. jak to jest rozwiązane w przypadku programu tftp) Kontola transmisji jest zapewniona przez protokoły wyższych warstw (warstwy aplikacji), np. TFTP, SNMP, DHCP, DNS. Przesył TFTP rozpoczyna się od żądania odczytu lub zapisu pliku, które żąda również połączenia. Plik wysyłany jest w blokach o długości od 0 do 512 bajtów. Pakiet danych mniejszy niż 512 bajtów wskazuje zakończenie przesyłu. Każdy z pakietów musi być potwierdzony przez pakiet potwierdzający, zanim będzie mógł zostać wysłany następny pakiet. Pakiet danych traktowany jest
jako potwierdzenie, że komputer wysyłający otrzymał potwierdzenie poprzedniego pakietu danych. Jedynie pakiet końca transmisji nie wymaga potwierdzenia. Jeżeli jakiś pakiet ulegnie zagubieniu, to u planowanego odbiorcy następuje przeterminowanie, a ten następnie żąda transmisji zagubionego pakietu. Pakiet retransmitowany w tym przypadku, to ostatni pakiet poprzedniej transmisji, więc nadawca musi zachować do retransmisji tylko jeden pakiet. Poprzednie potwierdzenia gwarantują, że pakiety uprzednio wysłane zostały otrzymane. Ftp-prosty protokół przesyłania plików między stacjami wykorzystujący UDP Po wysłaniu każdego pakietu do stacji docelowej jego kopia jest przechowywana w buforze, aż do czasu otrzymania potwierdzenia odebrania danych. Jeżeli stacja wysyłająca nie otrzyma potwierdzenia przed upływem czasu retransmisji, pakiet wysyłany jest ponownie. Jaki adres należy ustawić, aby rozesłać pakiet do wszystkich hostów w danej sieci? Trzeba znać adres IP hosta i maskę podsieci 11010100.00110011.11011011.00100000 adresip 11111111.11111111.11111111.11000000 maska 11010100.00110011.11011011.00111111 broadcast (te same bity co IP jeśli w masce podsieci 1, reszta uzupełniona 1) Jaki adres należy ustawić, aby rozesłać pakiet do wszystkich hostów w sieci lokalnej? 255.255.255 getaddrinfo getaddrinfo(const char *node, const char *service, const struct addrinfo *hs, struct addrinfo **res); Jakie parametry przyjmuje funkcja i jakie wartości zwraca? const char* nodename; //nazwa węzła (zazwyczaj podajemy nazwę stacji) const char* service; //nazwa usługi (zazwyczaj podajemy nr portu) const struct addrinfo *hs; //sugestia (zazwyczaj podajemy rodzinę adresów i typ gniazda) struct addrinfo **res; //przekazywana informacja jako lista powiązana //0 lub nr błędu Który parametr funkcji może jako wartość przyjąć http lub ftp lub telnet lub smtp? const char *service (drugi) getaddrinfo("www.kame.net", "http", &hs, &res0); W jakiej formie może być podana wartość parametru node? nazwa stacji: - jako nazwa, którą trzeba wyszukać, używając serwera DNS, np. www.yahoo.com
- jako nazwa zdefiniowana w pliku /etc/host lokalnej maszyny, np. - jako adres IP w notacji z kropkami/dwukropkami Jakiej funkcji używa się do obsługi błędów funkcji getaddrinfo? const char *gai_strerror( code); Do czego służy flaga AI_PASSIVE? Oznacza, że przekazywane adresy gniazda są przeznaczone do użytku w funkcji accept (co oznacza, że funkcję getaddrinfo wywołał serwer). W przeciwnym razie, gdy sygnalizator ten jest wyzerowany, wówczas wywołanie funkcji wystąpiło w procesie klienta i adres gniazda będzie użyty w wywołaniu funkcji connect. Dla protokołów bezpoł. może on być użyty w wywołaniu funkcji sendt/sendmsg. Gdy node jest równe NULL, inicjalizacja adresu sieciowego w każdej ze struktur gniazda zależy od znacznika AI_PASSIVE, który jest ustawiany w polu ai_flags parametru hs. Gdy znacznik AI_PASSIVE jest ustawiony, to adres sieciowy w każdej ze struktur gniazda pozostanie nieokreślony. Jest to wykorzystywane przez programy serwerów, które zamierzają przyjmować połączenia od klientów na dowolny adres sieciowy. Gdy znacznik AI_PASSIVE nie jest ustawiony, to adres sieciowy zostanie ustawiony na adres erfejsu loopback. Jest to wykorzystywane przez programy klienckie, które zamierzają połączyć się z serwerem działającym na tym samym hoście. / W jakim pliku można sprawdzić usługi i ich porty na danej maszynie? etc/services struct addrinfo struct addrinfo { size_t ai_flags; ai_family; ai_socktype; ai_protocol; ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct addrinfo *ai_next; Co oznaczają poszczególne pola struktury i jakie wartości mogą przyjmować? ai_flags; //sygnalizatory wejściowe ai_family; //rodzina adresów ai_socktype; //typ gniazda ai_protocol; //protokół size_t ai_len; //dł. adresu gniazda struct sockaddr *ai_addr; //adres gniazda char *ai_canonname; // nazwa kanoniczna wykonywanej usługi; //gdy ai_flags w hs zawiera znacznik AI_CANONNAME, to ai_canonname jest ustawiane tak, aby wskazywało na oficjalną nazwę hosta. 192.168.1.1 struct addrinfo *ai_next; //wsk. do nast. struktury w liście Jaki jest sens wprowadzenia pola ai_next w strukturze?
Umożliwia wygodne przechodzenie po wszystkich zwróconych strukturach. Przeglądając taką listę możemy wyświetlić np. wszystkie adresy IP powiązane z danym adresem. Czym się różnią rodziny adresów AF_UNIX, AF_INET, AF_INET6? AF_UNIX gniazdo Unixowe umożliwia dwóm procesom działającym na tej samej maszynie porozumiewać się. AF_INET gniazdo IPv4 to gniazdo pomiędzy dwoma procesami, potencjalnie działającymi na dwóch maszynach używające obecnej wersji adresów IP. Ten typ jest obecnie najczęściej używany. Służy do komunikacji za pomocą gniazd poprzez Internet. AF_INET6 podobne do AF_INET, lecz używa IPv6. Jaki plik przeszukują funkcje set/get/endhostent /etc/host void sethostent( stayopen ); //czy pozostawić otwarte połączenie set - rozpocznij przeszukiwanie bazy danych stacji struct hostent *gethostent(void); // nast. pozycja lub NULL, gdy koniec; no errno get weź kolejną pozycję bazy danych stacji void endhostent(void); end zakończ przeszukiwanie bazy danych stacji struct hostent { char *h_name; //oficjalna nazwa stacji char **h_aliases; //tab. alternatywnych nazw stacji h_addrtype; //adres rodziny (nie typu) h_lenght; //dł. każdego adresu char **h_addr_list //tab. wskaźników do adresów sieciowych Jaki plik przeszukują funkcje set/get/endnetent /etc/networks set zacznij badanie sieciowej bazy danych get weź pozycję z sieciowej bazy danych struct netent getnetent(void); //wskaźnik lub NULL, gdy koniec; no errno end zakończ przeszukiwanie sieciowej bazy danych struct netent { char *n_name; //oficjalna nazwa sieci char **n_aliases; //tab. alternatywnych nazw sieci n_addrtype; //adres rodziny (nie typu) u32_t n_net //numer sieci Jaki plik przeszukują funkcje set/get/endservent? /etc/services set zacznij badanie bazy danych usług get weź pozycję z bazy danych usług struct servent *getservent(void); // wskaźnik lub NULL, gdy koniec; no errno end zakończ przeszukiwanie bazy danych usług
struct servent { char *s_name; //oficjalna nazwa usługi char **s_aliases; //tab. alternatywnych nazw usługi s_port; //nr portu char *s_proto; //nazwa protokołu dla tej usługi Jaki plik przeszukują funkcje set/get/endprotoent? /etc/protocols set zacznij badanie bazy danych protokołów get weź pozycję z bazy danych protokołów struct protent *getprotoent(void); // wskaźnik lub NULL, gdy koniec; no errno end zakończ przeszukiwanie bazy danych protokołów struct protoent { char *p_name; //oficjalna nazwa protokołu char **p_aliases; //tab. alternatywnych nazw protokołu p_proto //nr protokołu socket tworzy punkt końcowy i przydziela deskryptor bind wiąże gniazdo z nazwą zew., abyinne procesy mogły się do niego odwoływać listen zaznacza, że gniazdo jest zdolne do zaakceptowania połączenia z drugim gniazdem accept blokuje czekając na połączenie connect łączy z gniazdem, które jest zablokowane w funkcji accept Komunikaty pozapasmowe wysyłane poza kolejką. Dla sendto/sendmsg/send należy ustawić sygnalizator MSG_OOB. Odbiorca używając select, dowiaduje się o komunikacie pozapasmowym. DNS działa w 7 warstwie OSI. inet_ntoa przekształca adres IPv4 z liczby całkowitej w napis, w notacji z kropami inet_ntop jw; obsługuje także IPv6 inet_addr przekształca adres IPv4 z napisu w notacji z kropkami na postać liczby całkowitej gethostbyname gethostbyaddr getnameinfo gethostid uname getnetbyname getnetbyaddr getprodobyname getprotobynumber getservbyname getservbyport