Cisco CyberOps Associate - Warstwa transportowa
Warstwa transportowa stanowi połączenie między warstwą aplikacji a niższymi warstwami odpowiedzialnymi za transmisję sieciową.
Warstwa transportowa nie ma wiedzy o typie hosta docelowego, rodzaju nośnika, po którym dane muszą się poruszać, ścieżce, którą dane podążają, przeciążeniu na łączu ani rozmiarze sieci.
Warstwa transportowa obejmuje dwa protokoły:
- Transmission Control Protocol (TCP) - Protokół Kontroli Transmisji
- User Datagram Protocol (UDP) - Protokół Datagramów Użytkownika
2. Zadania warstwy transportowej:
Utrzymanie i śledzenie rozmów
W warstwie transportowej każdy zestaw danych przepływający między aplikacją źródłową a aplikacją docelową jest nazywany rozmową i jest śledzony osobno. Odpowiedzialność za utrzymanie i śledzenie tych wielu rozmów spoczywa na warstwie transportowej.
Jeden host może mieć wiele aplikacji, które komunikują się jednocześnie przez sieć.
Większość sieci ma ograniczenie dotyczące ilości danych, które można umieścić w jednym pakiecie. Dlatego dane muszą być podzielone na zarządzalne części.
Segmentowanie danych i ponowne składanie segmentów:
Warstwa transportowa ma za zadanie podzielić dane aplikacyjne na odpowiednio wielkie bloki. W zależności od używanego protokołu warstwy transportowej, bloki te nazywane są segmentami lub datagramami. Rysunek ilustruje warstwę transportową, używając różnych bloków dla każdej rozmowy.
Warstwa transportowa dzieli dane na mniejsze bloki (segmenty lub datagramy), które są łatwiejsze do zarządzania i przesyłania.
Dodawanie informacji nagłówkowych:
Protokół warstwy transportowej dodaje również informacje nagłówkowe zawierające dane binarne zorganizowane w kilku polach do każdego bloku danych. To wartości w tych polach pozwalają różnym protokołom warstwy transportowej wykonywać różne funkcje w zarządzaniu komunikacją danych.
Na przykład informacje nagłówkowe są używane przez host odbierający do ponownego złożenia bloków danych w pełny strumień danych dla programu warstwy aplikacji odbierającego.
Warstwa transportowa zapewnia, że nawet przy wielu aplikacjach działających na jednym urządzeniu, wszystkie aplikacje otrzymują poprawne dane.
Identyfikowanie aplikacji:
Warstwa transportowa musi być w stanie oddzielać i zarządzać wieloma komunikacjami o różnych wymaganiach dotyczących transportu. Aby przekazywać strumienie danych do odpowiednich aplikacji, warstwa transportowa identyfikuje docelową aplikację za pomocą identyfikatora o nazwie numer portu. Jak pokazano na rysunku, każdy proces oprogramowania, który musi uzyskać dostęp do sieci, jest przypisany unikalny numer portu dla tego hosta.
Maksymalizacja rozmów:
Wysyłanie niektórych typów danych (np. strumieniowego wideo) przez sieć jako jeden kompletny strumień komunikacji może zużyć całą dostępną przepustowość. Spowodowałoby to uniemożliwienie równoczesnych rozmów komunikacyjnych. Sprawiłoby to również, że odzyskiwanie danych i ponowne przesyłanie uszkodzonych danych byłoby trudne.
Warstwa transportowa używa segmentacji i multiplexingu, aby umożliwić różnym rozmowom komunikacyjnym przeplatanie się na tej samej sieci.
Można wykonać sprawdzanie błędów w danych w segmencie, aby określić, czy segment został zmieniony podczas transmisji.
3. IP (Internet Protocol) zajmuje się jedynie strukturą, adresowaniem i trasowaniem pakietów. IP nie określa, w jaki sposób odbywa się dostarczanie lub transportowanie tych pakietów.
Protokoły warstwy transportowej określają, jak przesyłać wiadomości między hostami i są odpowiedzialne za zarządzanie wymaganiami dotyczącymi niezawodności rozmowy. Warstwa transportowa obejmuje protokoły TCP (Transmission Control Protocol) i UDP (User Datagram Protocol).
Różne aplikacje mają różne wymagania dotyczące niezawodności transportu. Dlatego TCP/IP dostarcza dwa protokoły warstwy transportowe.
4. IP zajmuje się jedynie strukturą, adresowaniem i trasowaniem pakietów. IP nie określa, w jaki sposób odbywa się dostarczanie lub transportowanie tych pakietów.
TCP jest uważany za niezawodny, pełnowartościowy protokół warstwy transportowej, który zapewnia, że wszystkie dane docierają do celu. TCP zawiera pola, które gwarantują dostarczenie danych aplikacyjnych. Ta dodatkowa obróbka jest wymagana zarówno po stronie wysyłającego, jak i odbierającego hosta.
TCP dzieli dane na segmenty.
Transport TCP jest analogiczny do wysyłania paczek, które są śledzone od źródła do celu. Jeśli zamówienie wysyłki jest podzielone na kilka paczek, klient może sprawdzić online kolejność dostawy.
TCP zapewnia niezawodność i kontrolę przepływu, korzystając z tych podstawowych operacji:
- Numerowanie i śledzenie segmentów danych przesyłanych do określonego hosta z określonej aplikacji.
- Potwierdzanie otrzymanych danych.
- Ponowne przesyłanie danych, które nie zostały potwierdzone po określonym czasie.
- Sekwencjonowanie danych, które mogą przyjść w złej kolejności.
- Wysyłanie danych z efektywną szybkością akceptowaną przez odbiorcę.
Aby utrzymać stan rozmowy i śledzić informacje, TCP musi najpierw ustanowić połączenie między nadawcą a odbiorcą. Dlatego TCP jest nazywany protokołem opartym na połączeniu.
TCP jest protokołem stanowym, co oznacza, że śledzi stan sesji komunikacyjnej. Aby śledzić stan sesji, TCP rejestruje, jakie informacje zostały wysłane, a jakie zostały potwierdzone. Stanowa sesja rozpoczyna się od ustanowienia sesji i kończy się jej zakończeniem.
Segment TCP dodaje 20 bajtów (czyli 160 bitów) nadmiaru podczas enkapsulacji danych warstwy aplikacji.
Poszczególne pól w nagłówku TCP:
- Port źródłowy (Source Port): Jest to pole 16-bitowe, które identyfikuje numer portu nadawcy.
- Port docelowy (Destination Port): To pole 16-bitowe, które identyfikuje numer portu odbiorcy.
- Numer sekwencyjny (Sequence Number): To pole 32-bitowe, używane w celu reasemblacji danych podczas sesji TCP. Po ustanowieniu nowego połączenia TCP (trójfazowego ustanowienia połączenia), numer sekwencyjny początkowy jest losową wartością 32-bitową. Odbiorca użyje tego numeru sekwencyjnego i wyśle potwierdzenie.
- Numer potwierdzenia (Acknowledgment Number): To pole 32-bitowe, używane przez odbiorcę do żądania następnego segmentu TCP. Wartość ta będzie numerem sekwencyjnym zwiększonym o 1.
- Długość nagłówka (Header Length): To pole 4-bitowe, znane również jako przesunięcie danych (data offset), które wskazuje długość nagłówka TCP, abyśmy wiedzieli, gdzie zaczynają się właściwe dane.
- Zarezerwowane (Reserved): To pole 6-bitowe, zarezerwowane na przyszłe użycie. Zawsze jest ustawione na 0.
- Bity kontrolne (Control bits): To pole 6-bitowe, nazywane również bitami sterującymi. Używamy ich do ustanawiania połączeń, przesyłania danych i zamykania połączeń
- Okno (Window): To pole 16-bitowe określa, ile bajtów odbiorca jest gotów przyjąć. Używane jest, aby odbiorca mógł powiedzieć nadawcy, że chciałby otrzymać więcej danych niż obecnie odbiera. Robi to, określając liczbę bajtów poza numerem sekwencyjnym w polu potwierdzenia.
- Suma kontrolna (Checksum): 16 bitów używane jest do sprawdzania błędów w nagłówku i danych segmentu TCP.
- Wskaźnik pilności (Urgent): Te 16 bitów są używane, gdy bit URG jest ustawiony. Wskaźnik pilności wskazuje, gdzie kończą się dane oznaczone jako pilne.
5. UDP (User Datagram Protocol) jest prostszym protokołem warstwy transportowej niż TCP. Nie zapewnia niezawodności ani kontroli przepływu, co oznacza, że wymaga mniejszej liczby pól nagłówka. Ponieważ procesy nadawcy i odbiorcy UDP nie muszą zarządzać niezawodnością ani kontrolą przepływu, datagramy UDP mogą być przetwarzane szybciej niż segmenty TCP. UDP dostarcza podstawowe funkcje do przesyłania datagramów między odpowiednimi aplikacjami, z bardzo niewielkim narzutem i sprawdzaniem danych.
Uwaga: UDP dzieli dane na datagramy, które są również nazywane segmentami.
UDP to protokół bezstanowy. Ponieważ UDP nie zapewnia niezawodności ani kontroli przepływu, nie wymaga ustanowionego połączenia. Ponieważ UDP nie śledzi informacji wysyłanych lub odbieranych między klientem a serwerem, jest również znany jako protokół bezstanowy.
UDP jest również nazywany protokołem dostawy „najlepszego wysiłku”, ponieważ nie ma potwierdzenia, że dane zostały odebrane na miejscu docelowym. W przypadku UDP nie ma procesów warstwy transportowej, które informują nadawcę o udanej dostawie.
UDP można porównać do wysyłania zwykłego, niezarejestrowanego listu pocztą. Nadawca listu nie wie, czy odbiorca jest gotowy odebrać list. Również poczta nie jest odpowiedzialna za śledzenie listu ani informowanie nadawcy, jeśli list nie dotrze na miejsce docelowe.
UDP to protokół bezstanowy, co oznacza, że ani klient, ani serwer nie śledzą stanu sesji komunikacyjnej. Jeśli niezawodność jest wymagana przy użyciu UDP jako protokołu transportowego, musi być obsługiwana przez aplikację.
Jednym z najważniejszych wymagań dotyczących dostarczania transmisji wideo na żywo i głosu przez sieć jest ciągły przepływ danych. Aplikacje wideo na żywo i głos mogą tolerować pewne utraty danych z minimalnym lub bez zauważalnego efektu i doskonale nadają się do UDP.
Blokami komunikacji w UDP są datagramy lub segmenty. Te datagramy są przesyłane jako wysiłek „najlepszego wysiłku” przez protokół warstwy transportowej.
Nagłówek UDP zawiera tylko cztery pola i wymaga 8 bajtów (czyli 64 bitów).
6. Poszczególne póla w nagłówku UDP:
- Port źródłowy (Source Port): Jest to pole 16-bitowe, które identyfikuje numer portu nadawcy.
- Port docelowy (Destination Port): To pole 16-bitowe, które identyfikuje numer portu odbiorcy.
- Długość (Length): Oznacza długość UDP, włącznie z nagłówkiem i danymi. To pole ma 16 bitów.
- Suma kontrolna (Checksum): To pole 16-bitowe. Jest to jedno uzupełnienie sumy kontrolnej z nagłówka UDP, pseudonagłówka informacji z nagłówka IP oraz danych, z zerowymi oktetami na końcu (jeśli jest to konieczne), aby uzyskać wielokrotność dwóch oktetów.
Warto zauważyć, że w przeciwieństwie do TCP obliczanie sumy kontrolnej nie jest obowiązkowe w UDP. UDP nie zapewnia kontroli błędów ani kontroli przepływu, dlatego zależy od protokołu IP i ICMP w przypadku raportowania błędów. Dodatkowo UDP dostarcza numery portów, dzięki którym może rozróżnić żądania użytkowników.
7. Port źródłowy i port docelowy są umieszczone wewnątrz segmentu. Segmenty są następnie enkapsulowane w pakiet IP. Pakiet IP zawiera adresy IP źródła i docelowe. Kombinacja adresu IP źródła i numeru portu źródłowego lub adresu IP docelowego i numeru portu docelowego jest nazywana gniazdem.
W przykładzie na rysunku komputer PC jednocześnie żąda usług FTP i stron internetowych od serwera docelowego.
W tym przykładzie żądanie FTP wygenerowane przez komputer PC zawiera adresy MAC warstwy 2 i adresy IP warstwy 3. Żądanie identyfikuje również numer portu źródłowego 1305 (czyli dynamicznie generowany przez host) oraz port docelowy, identyfikujący usługi FTP na porcie 21. Host również zażądał strony internetowej od serwera, używając tych samych adresów warstwy 2 i warstwy 3. Jednak używa numeru portu źródłowego 1099 (czyli dynamicznie generowanego przez host) oraz portu docelowego, identyfikującego usługę WWW na porcie 80.
Gniazdo służy do identyfikacji serwera i usługi, które są żądane przez klienta. Gniazdo klienta może wyglądać tak: 192.168.1.5:1099, gdzie 1099 to numer portu źródłowego.
Gniazdo na serwerze WWW może mieć postać: 192.168.1.7:80.
Razem te dwa gniazda tworzą parę gniazd: 192.168.1.5:1099, 192.168.1.7:80.
Gniazda pozwalają wielu procesom działającym po stronie klienta odróżnić się od siebie oraz odróżnić wiele połączeń do procesu serwera.
Numer portu źródłowego działa jako adres zwrotny dla żądającej aplikacji. Warstwa transportowa śledzi ten port i aplikację, która zainicjowała żądanie, aby po otrzymaniu odpowiedzi przekazać ją do właściwej aplikacji.
8. Rola numerów portu TCP:
- Każdy proces aplikacji działający na serwerze jest skonfigurowany do korzystania z numeru portu. Numer portu może być automatycznie przypisany lub ręcznie skonfigurowany przez administratora systemu.
- Serwer nie może mieć dwóch usług przypisanych do tego samego numeru portu w ramach tych samych usług warstwy transportowej. Na przykład host uruchamiający aplikację serwera WWW i aplikację do transferu plików nie może korzystać z tego samego portu, takiego jak port TCP 80.
- Klient 1 wysyła żądanie usług WWW, a Klient 2 żąda usługi poczty e-mail tego samego serwera.
- Port docelowy dla Klienta 1 to 80 (HTTP), a dla Klienta 2 to 25 (SMTP).
- Numery portów źródłowych są dynamicznie generowane przez klientów. W tym przypadku Klient 1 używa portu źródłowego 49152, a Klient 2 używa portu źródłowego 51152.
- Gdy serwer odpowiada na żądania klientów, odwraca numery portów docelowych i źródłowych z początkowego żądania. Odpowiedź serwera na żądanie WWW ma teraz numer portu docelowego 49152, a odpowiedź na żądanie e-mail ma numer portu docelowego 51152.
- Port źródłowy w odpowiedzi serwera to oryginalny numer portu docelowego w początkowych żądaniach klientów.
Terminy “klient” i “serwer” są używane dla uproszczenia, ale dowolne dwa hosty, które mają otwartą sesję, mogą zainicjować proces zakończenia.
12. Hosty utrzymują stan, śledzą każdy segment danych w ramach sesji i wymieniają informacje na temat otrzymanych danych, korzystając z informacji zawartych w nagłówku TCP. TCP jest protokołem pełnego dupleksu, gdzie każde połączenie reprezentuje dwie jednokierunkowe sesje komunikacyjne. Aby nawiązać połączenie, hosty wykonują trójstopniowy uścisk dłoni. Bity kontrolne w nagłówku TCP wskazują postęp i stan połączenia.
Po zakończeniu komunikacji sesje są zamykane, a połączenie jest zakończone. Mechanizmy połączenia i sesji umożliwiają niezawodność TCP.
Sześć bitów w polu “Bity kontrolne” nagłówka segmentu TCP jest również znane jako flagi. Flaga to bit ustawiony na stan włączony lub wyłączony.
Sześć flag kontrolnych to:
- URG - Wskaźnik pilności (urgent pointer) jest istotny.
- ACK - Flaga potwierdzenia używana podczas nawiązywania połączenia i zakończenia sesji.
- PSH - Funkcja “push”.
- RST - Resetuje połączenie w przypadku błędu lub przekroczenia czasu oczekiwania.
- SYN - Synchronizuje numery sekwencyjne używane podczas nawiązywania połączenia.
- FIN - Informuje, że nie ma więcej danych od nadawcy i jest używana podczas zakończenia sesji.
13. TCP jest lepszym protokołem w niektórych aplikacjach z kilku powodów. W przeciwieństwie do UDP, TCP ponownie wysyła zgubione pakiety i numeruje je, aby wskazać ich właściwy porządek przed dostarczeniem. TCP pomaga również utrzymać przepływ pakietów, aby urządzenia nie były przeciążone.
14. Cechy TCP:
TCP (Transmission Control Protocol) jest lepszym protokołem w niektórych aplikacjach z kilku powodów. W przeciwieństwie do UDP, TCP ponownie wysyła zgubione pakiety i numeruje je, aby wskazać ich właściwy porządek przed dostarczeniem. TCP pomaga również utrzymać przepływ pakietów, aby urządzenia nie były przeciążone. Poniżej przedstawiam szczegóły dotyczące tych funkcji TCP:
Numeracja sekwencyjna:
- Każdy segment TCP ma przypisany numer sekwencyjny, który reprezentuje pierwszy bajt danych w segmencie.
- W trakcie nawiązywania sesji ustawiany jest początkowy numer sekwencyjny (ISN). To wartość początkowa bajtów przesyłanych do aplikacji odbiorczej.
- Numer sekwencyjny jest inkrementowany o liczbę przesłanych bajtów podczas trwania sesji. Dzięki temu każdy segment może być jednoznacznie zidentyfikowany i potwierdzony. Brakujące segmenty można wtedy zidentyfikować.
Kolejność segmentów:
- Proces odbierający TCP umieszcza dane z segmentu w buforze odbiorczym.
- Segmenty są następnie ułożone w odpowiedniej kolejności i przekazywane do warstwy aplikacji po złożeniu.
- Segmenty z numerami sekwencyjnymi, które są nieuporządkowane, są przechowywane do późniejszej obróbki. Gdy segmenty z brakującymi bajtami zostaną dostarczone, są przetwarzane w odpowiedniej kolejności.
Zarządzanie utratą danych:
- TCP oferuje mechanizmy zarządzania utratą segmentów, w tym ponowne przesyłanie segmentów dla danych niepotwierdzonych.
Numeracja sekwencyjna i potwierdzenie:
- Numer sekwencyjny (SEQ) i numer potwierdzenia (ACK) są używane razem do potwierdzenia otrzymania bajtów danych w przesyłanych segmentach.
- Numer SEQ identyfikuje pierwszy bajt danych w segmencie, a numer ACK wskazuje, który bajt odbiorca oczekuje na otrzymanie.
Oczekiwanie na potwierdzenie:
- Przed późniejszymi ulepszeniami TCP potwierdzano tylko następny oczekiwany bajt.
- Na przykład, jeśli host A wysyła segmenty 1-10 do hosta B, a wszystkie segmenty przybywają oprócz 3 i 4, host B odpowiada potwierdzeniem, że następny oczekiwany segment to 3.
- Host A nie wie, czy inne segmenty dotarły czy nie, więc przesyła segmenty 3-10. To może prowadzić do opóźnień i nieefektywności.