przedstaw_i_omow_zagadnienia_zwiazane_z_programowaniem_elementow_na_poziomie_warstwy_transportowej_modelu_osi_w_aplikacjach_sieciowych

Pytanie: “Przedstaw i omów zagadnienia związane z programowaniem elementów na poziomie warstwy transportowej modelu OSI w aplikacjach sieciowych.”

Warstwa transportowa zapewnia usługi przesyłania danych z hosta źródłowego do hosta docelowego. Ustanawia ona logiczne połączenie pomiędzy punktami końcowymi w sieci, czyli hostem wysyłającym i odbierającym. Protokoły transportowe dzielą i scalają dane wysyłane przez aplikacje wyższej warstwy w jeden strumień danych przepływający między punktami końcowymi, tworzący połączenie logiczne. Strumień danych warstwy transportowej obsługuje transport typu end-to-end, czyli transport między punktami końcowymi. Dzięki usługom tej warstwy dane trafiają do odpowiedniego procesu na komputerze. Każdy proces chcący wysyłać dane przez sieć używa tzw portu (16-bitowy identyfikator).

Główne protokoły używane w tej warstwie to:

- TCP - połączeniowy tzn, że zestawiane jest połączenie między klientem i serwerem, wymieniane są dane, a następnie połączenie jest zamykane. Jest niezawodny, każdy przesłany pakiet musi zostać potwierdzony, w przypadku jego braku następuje retransmisja. Ponadto każdy pakiet jest numerowany, dzięki temu adresat może złożyć je w całość nawet mimo tego, że przybędą w innej kolejności. Dopiero po złożeniu dane zostają przekazane do programu użytkowego. Zapewnia także sterowanie przepływem dzięki oknom przesównym, oraz jest w pełni dwukierunkowy (full-duplex).
- UDP – bezpołączeniowy oznacza, że nie utrzymuje długotrwałego związku z serwerem. Moze otworzyć gniazdo, wysłać dane do jednego serwera, po czym przy użyciu tego samego gniazda może wysłać dane do innego serwera. Podobnie serwer przez to samo gniazdo może odbierać dane od różnych klientów. Jest zawodny tzn, że jeśli chcemy być pewni, że datagram dojdzie do odbiorcy, to musimy oprogramowenie sami uzupełnić o dodatkowe właściwości tj potwierdzanie, ponawianie transmisji czy max czas oczekiwania na pakiet. Każdy datagram ma swoja długość i można traktować go jako rekord. Jeśli poprawnie osiągnie punkt docelowy, to jego długość przekazywana jest do programu użytkowego.

Ustanawianie połączenia TCP przebiega wg scenariusza:

Zakończenie połączenia TCP:

Pełna wymiana komunikatów przy połączeniu TCP:

W przypadku protokołu UDP nie jest tworzone połączenie. Po utworzeniu gniazda za pomocą funkcji socket (par. type SOCK_DGRAM). Klient może wysyłać dane za pomocą funkcji sendto, podając w jednym z parametrów adres gniazda docelowego. Może także odbierać dane za pomocą funkcji recvfrom. W przypadku serwerów UDP, nie ma pojęcia gniazda nasłuchującego i gniazd wyprowadzonych. Serwer taki tworzy jedno gniazdo związuje je (bind) z lokalnym portem i juz jest gotowy do obsługi klientów.