2. Wymień 4 podstawowe usługi działające w warstwie aplikacji, krótko je omów:
Najbardziej znane i najczęściej implementowane protokoły aplikacji to:
telnet - protokoł terminala sieciowego, umoŜliwiający zdalne
zalogowanie się i pracę w odległym systemie,
FTP - protokoł transferu plikow, ktory umoŜliwia zapisanie w
odległym systemie lub odczytanie z niego wskazanych plikow,
SMTP - podstawowy protokoł przesyłania poczty odpowiedzialny za
dystrybucję poczty elektronicznej,
HTTP - odpowiedzialny za przesyłanie w sieci stron WWW.
Omów wysyłanie danych przez gniazdo TCP.
TCP interpretuje wysyłane dane jako ciągły strumień bajtow, a nie jako
niezależne pakiety. Z tego powodu istotne jest zachowanie kolejności
(pola numer sekwencyjny i numer potwierdzenia).
•Segmentom nadawane są kolejne numery sekwencyjne.
•Nadawca czeka na potwierdzenie otrzymania przez odbiorcę segmentow. Jeśli
nie otrzyma potwierdzenia, wysyła je ponownie.
•Odbiorca informuje nadawcę o otrzymaniu segmentu poprzez wysłanie
segmentu z ustawionym bitem ACK i odpowiednim numerem sekwencji
segmentu na polu potwierdzenia. Wysyła też liczbę bajtow w polu okno, ktore
jeszcze może przyjąć.
•Standard nie nakazuje potwierdzania każdego segmentu. Jeśli odbiorca wyśle
potwierdzenia N, oznacza to, że otrzymał wszystkie segmenty do N-1 włącznie.
•Nadawca może wysyłać segmenty tak długo, dopoki sumaryczna wartość
wysłanych danych nie przekroczy okna.
Co to jest gniazdo i jakie są jego rodzaje ?
Gniazdo identyfikuje połączenie sieciowe w aplikacji - deskryptor
gniazda jest niezbędny w kontaktach aplikacji z systemem
operacyjnym.
• Obsługa gniazd jest analogiczna do obsługi plików.
• Występują pewne różnice (inne funkcje, parametry itp.) -
połączenia sieciowe to jednak nieco inne obiekty niż pliki.
•Gniazdo (socket) jest mechanizmem komunikacji miedzy procesami,
służącym jako punkt końcowy połączenia,
•Stanowi kombinację adresu IP oraz numeru portu,
•Gniazdo jednoznacznie określa każdy proces sieciowy w Internecie.
•Czasem terminy gniazdo i numer portu używane są zamiennie.
•Także dobrze znane usługi sieciowe określane są mianem dobrze znanych
gniazd.
Rozrożniamy:
• Gniazda potokowe (TCP)
• Gniazda datagramowe (UDP)
5. Co to jest para gniazdowa ?
Para gniazdowa
Para gniazdowa (socket pair) dla połączenia TCP jest to czwórka,
która definiuje dwa punkty końcowe połączenia:
• adres lokalny IP,
• port lokalny TCP,
• adres obcy IP,
• port obcy TCP.
Para gniazdowa jednoznacznie identyfikuje każde połączenie TCP
w sieci.
Dwukierunkowa łączność na gniazdach
Gdy klient wysyła w sieci TCP/IP żądanie połączenia z innym węzłem,
wysyła rownież numer gniazda. Jeśli węzeł odbiorcy może nawiązać
połączenie, zwraca numer gniazda (nowo tworzonego) zawierający adres
IP odbiorcy i numer portu usługi, ktora będzie obsługiwać zadanie.
Analogia do łączności
telefonicznej. Gdy połączymy
dwa gniazda, pozwoli to
przesyłać dane pomiędzy dwoma
procesami, ktore mogą działać w
rożnych węzłach (komputerach).
6. Zasada działania serwera współ brzeżnego w aspekcie komunikacji z wieloma klientami :
Zasadniczym powodem stosowania mechanizmu współbieżności
w serwerach jest potrzeba zapewnienia krótkiego czasu odpowiedzi
w warunkach obsługi wielu klientów. Współbieżność skraca
obserwowany czas odpowiedzi gdy:
● przygotowanie odpowiedzi wymaga czasochłonnych operacji
wejścia - wyjścia,
● występują znaczne różnice czasu przetwarzania dla różnych
zgłoszeń,
● serwer działa na komputerze wieloprocesorowym.
Wyższa wydajność jest uzyskiwana zwykle przez zrównoleglenie
przetwarzania danych z operacjami wejścia - wyjścia
Proces główny:
1. Utwórz gniazdo i zwiąż je z powszechnie znanym adresem
odpowiadającym usłudze udostępnionej przez serwer - bind().
2. Ustaw bierny tryb pracy gniazda - listen().
3. Przyjmij zgłoszenie połączenia nadesłane na adres gniazda -
accept(). Utwórz nowy proces podporządkowany - fork()
odpowiedzialny za obsługę tego połączenia.
Wróć do kroku 3.
Współbieżność w działaniu serwerów typu połączeniowego polega na
zrównolegleniu obsługi wielu połączeń, a nie poszczególnych
zapytań..
Procesy potomne po obsłużeniu klienta kończą pracę. W systemach
UNIX powinny one dodatkowo zostać zakończone przez proces
macierzysty. W przeciwnym razie będą nadal egzystować w
systemie. W chwili zakończenia procesu potomnego proces macierzysty
otrzymuje sygnał SIGCHILD. Dzięki temu może on zakończyć proces
potomny używając instrukcji
Współbieżne serwery połączeniowe jednocześnie komunikują
się z wieloma klientami. W zaprezentowanym przykładzie
proces główny tworzy nowy proces podporządkowany dla
każdego zgłoszonego połączenia. Proces potomny obsługuje
klienta po czym zamyka połączenie i kończy działanie. Proces
główny bezpośrednio nie kontaktuje się z klientami.
Proces główny
1. Utwórz gniazdo i zwiąż je z powszechnie znanym adresem
odpowiadającym usłudze udostępnionej przez serwer - bind().
2. Ustaw bierny tryb pracy gniazda - listen().
3. Odbierz kolejne zapytanie od klientów - recvfrom(). Utwórz nowy
proces podporządkowany - fork(), który przygotuje odpowiedź.
Przejdź do punktu 3.
Proces podporządkowany:
1. Przejmij od procesu głównego dostęp do gniazda.
2. Skonstruuj odpowiedź zgodnie z używanym protokołem i wyślij ją
do klienta - sendto().
3. Zakończ działanie - exit().
Z powodu znacznego kosztu operacji tworzenia nowego procesu
istnieje niewiele współbieżnych realizacji serwerów
bezpołączeniowych.
4. Funcke sytemy przy komunikacji sieciowej:
• Konwersje między formatem lokalnym i sieciowym.
• Tworzenie i niszczenie gniazd.
• Nasłuch gniazda na sieci.
• Wykonanie połączenia.
• Wysyłanie i odbieranie danych.
• Obsługa nazw domenowych, manipulacja adresami.