Sieci komputerowe

Model ISO/OSI – Czyli jak to jest, że komputery ze sobą „rozmawiają”.

Podstawę komunikacji sieciowej zapewnia zestaw protokołów komunikacyjnych TCP/IP a procesy jakie muszą zajść, aby połączenie pomiędzy komputerami doszło do skutku tłumaczy czterowarstwowy model odniesienia TCP/IP.

Model składa się z następujących warstw:

Za powstanie modelu OSI (ang. Open System Interconnection), odpowiada organizacja ISO i tak samo jak model TCP/IP pomaga w zrozumieniu procesów z tą różnicą, że liczba warstw została zwiększona do siedmiu.  

Model składa się z następujących warstw:

Cały proces komunikacji rozpoczyna się od warstwy najwyższej (warstwa aplikacji) i przebiega w dół do warstwy położonej najniżej (warstwa fizyczna), nosi on nazwę enkapsulacji bądź kapsułkowania. Dane przechodząc przez kolejne warstwy zostają obudowane o informacje pochodzące z danej warstwy. Po dotarciu do warstwy najniższej za pomocą dostępnego medium (skrętka, fale radiowe) dane zostają wysłane. U odbiorcy odbywa się proces odwrotny – dane wędrują od warstwy najniższej do najwyższej – proces dekapsulacji.

Trzema pierwszymi warstwami zarządzają aplikacje, pozostałe zalicza się do transportu danych. Dane, które trafią z warstwy sieci, obudowane o kolejne informacje dodane przez warstwę transportową utworzą segment, w warstwie sieciowej będziemy mieli do czynienia z pakietem natomiast w warstwie łącza danych z ramką.

Warstwa aplikacji (application layer)

Warstwa aplikacji jest warstwą najwyższą, jej zadaniem jest wybór interfejsu, który zostanie wykorzystany przez aplikację do przesłania danych. Dostarcza usługi sieciowe – dostęp do plików, drukowanie. Jest to warstwa zapewniająca komunikację pomiędzy uruchomionymi aplikacjami (np. przeglądarka) a siecią. Protokoły warstwy aplikacji zapewniają łączność pomiędzy programami uruchomionymi na komputerze źródłowym a komputerze docelowym.

Najczęściej stosowane protokoły warstwy aplikacji to:

  • protokół DNS (ang. Domain Name System),
  • protokół FTP (ang. File Transfer Protocol),
  • protokół TELNET (ang. Terminal emulation)
  • protokół SMTP (ang. Simple Mail Transfer Protocol),
  • protokół HTTP (ang. Hyper Text Transfer Protocol).

Warstwa prezentacji (ang. presentation layer)

Warstwa prezentacji – zapewnia tłumaczenie danych, definiowanie ich formatu oraz składni. Dzięki czemu niższe warstwy zawsze otrzymują dane w tym samym formacie. Zadaniem tej warstwy jest kodowanie i konwersja a także kompresja / dekompresja; szyfrowanie / deszyfrowanie.

Warstwa sesji (ang. session layer)

Warstwa sesji umożliwia aplikacjom organizację dialogu oraz wymianę danych między nimi. Kontroluje nawiązywanie i zrywanie połączenia przez aplikację, utrzymuje aktywność połączenia i wznawia je. Jest odpowiedzialna za poprawną realizację zapytania o daną usługę. Synchronizuje dialog między warstwami prezentacji dwóch hostów.  

Część programów takich jak np. klient poczty (Outlook, Thunderbird) czy przeglądarka stron,  łączy funkcjonalność warstw sesji, prezentacji i aplikacji.

Warstwa transportowa (ang. transport layer)

Warstwa transportowa – zarządza transportem danych. Aby proces był prowadzony sprawnie warstwa transportowa musi każdą aplikację, które przekazała dane (lub jest ich odbiorcą) zidentyfikować.  Dlatego przydzielany jest identyfikator – numer portu. Numer ten zostaje zapisany w nagłówku warstwy transportowej.  

Numery portów reprezentowane są przez liczby naturalne z zakresu od 0 do 65535.

– od 0 do 1023 są określone jako ogólnie znane, (ang. well known ports),

zarejestrowane porty (ang. registered ports) – porty o numerach od 1024 do 49151 przewidziane są dla usług, które zwyczajowo korzystają z określonych portów,

– porty przydzielane dynamicznie (ang. dynamically allocated ports, również ang. ephemeral ports) – porty o numerach od 49152 do 65535.

Przykładowe, najczęściej wykorzystywane porty:

  • DNS – 53 (TCP, UDP)
  • FTP – 20 przesyłanie danych (TCP)
  • FTP – 21, przesyłanie poleceń (TCP)
  • HTTP – 80 (TCP)
  • HTTPS – 443 (HTTP na SSL) (TCP)
  • IMAP – 143 (TCP)
  • POP3 – 110 (TCP)
  • SMTP – 25 (TCP)
  • Telnet – 23 (TCP)
  • TFTP – 69 (UDP)
  • RIP – 520 (UDP)

Listę portów i korzystających z nich aplikacji znajdziesz tu: https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml

Na poziomie tej warstwy do transmisji danych wykorzystuje się dwa protokoły TCP (ang. Transmission Control Protocol) oraz UDP (ang. User Datagram Protocol).

Protokoły warstwy transportowej oferują następujące funkcje (ich zakres zależy od protokołu obsługującego daną sesję):

  • ustawienie sesji – przygotowanie obu stron do wzajemnej wymiany informacji,
  • pewne dostarczenie danych – czyli w miarę potrzeby ponowna transmisja brakujących lub uszkodzonych fragmentów,
  • odpowiednia kolejność dostarczania – w sieci dwa różne fragmenty tej samej transmisji są dostarczane różnymi drogami a co za tym idzie, inny jest czas dostarczenie poszczególnych segmentów dlatego stosowane jest numerowanie i sekwencjonowanie, aby mieć pewność,  że dane zostaną połączone w odpowiedniej kolejności,
  • kontrola przepływu – reguluje ilość transmitowanych informacji.

TCP jest protokołem, opisanym w RFC 793. W TCP narzut dodatkowych danych jest większy niż w przypadku UDP a to dlatego, że protokół ten realizuje dodatkowe funkcje tj. dostarczanie we właściwej kolejności, pewne dostarczenie oraz oferuje kontrolę przepływu. Każdy segment TCP ma narzut 20 bajtów w nagłówku, natomiast datagram UDP dodaje tylko 8 dodatkowych bajtów.

TCP jest wykorzystywane m.in. przez:

  • e-mail,
  • przeglądarki stron WWW,
  • programy do przesyłania plików.

Poniżej schemat nagłówka TCP (nie opisuję pól, bo to temat na inny bardziej szczegółowy artykuł, chcę tylko pokazać różnicę w narzucie dodatkowych danych)

UDP jest bezpołączeniowym protokołem, opisanym w RFC 768. Niewielki narzut dodatkowych danych niezbędnych do działania protokołu powoduje, że wykorzystywany jest przez:

  • aplikacje strumieniujące video,
  • programy do transmisji głosu (VoIP),
  • system nazw domenowych DNS.

Porcje danych UDP są nazywane datagramami.

Poniżej na rysunku schemat datagramu UDP.

Zdarzają się aplikacje, które potrafią wykorzystywać oba protokoły jak np. DNS. Serwer DNS może szybko obsługiwać wiele zapytań hostów korzystając z UDP, lecz gdy jest potrzeba pewnego i niezawodnego przesłania danych korzysta z TCP.

Aby w systemie Windows wyświetlić aktywne połączenia wraz z informacją o protokole i użytym porcie posłuż się narzędziem wiersza poleceń – netstat.

Informacje uzyskane dzięki narzędziu netstat:

Warstwa sieciowa (network layer)

Warstwa sieciowa (network layer) – dysponuje wiedzą dotyczącą fizycznej topologii sieci. Odpowiedzialna za łączność oraz wybór ścieżek (routing) połączeń, którymi zostanie przesłany pakiet.

Protokoły warstwy sieci to: IPv4, IPv6, ICMP i starsze: NOVELL IPX, APPLE TALK.

Do realizacji swoich celów warstwa sieciowa używa następujących procesów:

  • adresowanie – dostarczanie pakietów do urządzeń końcowych,
  • enkapsulacja – dodawanie informacji do nagłówka,
  • routing – kierowanie pakietów,
  • dekapsulacja.

Najczęściej używanym protokołem warstwy 3 jest IPv4, charakteryzuje się:

  • jest protokołem bezpołączeniowym, czyli przed wysyłaniem danych nie jest zestawiane żadne połączenie, host docelowy nie jest świadomy nadejścia pakietów.
  • pracuje niezależnie od medium użytego do transportu danych,
  • działa na zasadzie dostępnych możliwości (ang. Best Effort) – brak gwarancji dostarczenia pakietu (bo i po co ??? tym zajmuje się warstwa czwarta w przypadku użycia TCP).

IPv4 kapsułkuje segmenty otrzymane od warstwy transportowej lub datagramy tak aby mógł je otrzymać docelowy host.

Nagłówek pakietu IPv4 przedstawia rysunek poniżej.

Przeznaczenie i opis poszczególnych pól nagłówka IPv4:

  • adres docelowy – zawiera 32-bitową wartość binarną, adres docelowy hosta, czyli tam, gdzie ma trafić pakiet,
  • adres źródłowy – zawiera 32-bitową wartość binarną, adres źródłowy hosta, czyli host, który wysyła pakiet,
  • TTL (ang. time to live) – czas życia pakietu – 8-bitowa wartość binarna, która zmniejszana jest o 1 (co najmniej) gdy pakiet przechodzi przez router. W momencie osiągnięcia 0, pakiet jest odrzucany. Pole TTL zapobiega krążeniu pakietów w nieskończoność. Wartość tego pola jest widoczna, gdy pingujemy danego hosta,  
  • protokół – 8-bitowa wartość wskazuje na typ przenoszonych danych. Przykładowe wartości: 01 ICMP, 06 TCP, 17 UDP,
  • typ usługi (ToS) – 8-bitowa wartość binarną, używana przez mechanizm QoS (ang. Quality of Service) czyli do określenia priorytetu pakietu,
  • przesunięcie fragmentu – używane w momencie, kiedy nastąpi podział pakietu i podczas jego rekonstrukcji,
  • suma kontrolna nagłówka pole 16-bitowe, pole jest sprawdzane przez rutery i w momencie wykrycia nieprawidłowości pakiet jest odrzucany,
  • wersja – pole 4 bity, numer wersji protokołu, możliwe wartości to: dla IPv4 – 0100 dla IPv6 – 0110,
  • długość całkowita – pole podaje w bajtach całkowitą wielkość pakietu (nagłówek oraz dane),
  • opcje – miejsce do określenia dodatkowych pól w nagłówku IPv4, używane (rzadko) do obsługi innych usług.

Warstwa łącza danych  (ang. data link layer)

Warstwa łącza danych odpowiedzialna jest za transport danych poprzez fizyczne łącze. Zajmuje się fizycznym (przeciwieństwem logicznego) adresowaniem, topologią sieci, dostępem do mediów sieciowych oraz wykrywaniem błędów.

Zadaniem warstwy łącza danych jest przygotowanie pakietu do transportu przez dostępne medium sieciowe. Tworzona jest ramka, powstająca analogicznie jak w warstwach wyższych poprzez dołączenie do pakietu – nagłówka i pola końcowego.

Ramka warstwa łącza danych zawiera:

  • pakiet przekazany z warstwy sieci,
  • nagłówek – początek PDU, odpowiedzialny za adresowanie,
  • pole końcowe – koniec PDU, zawiera informacje kontrolne.

Protokoły warstwy łącza danych przekształcają pakiety w ramki oraz są odpowiedzialne za prawidłowe ich umieszczanie w medium. Technika pozwalająca umieszczać oraz pobierać ramki z medium nazywana jest metodą kontroli dostępu (ang. media access control).

W warstwie drugiej dostępne są następujące protokoły (rozwijane są one przez różne organizacje):

  • Instytut Inżynierów Elektryków i Elektroników (ang. IEEE, Institute of Electrical and Electronics Engineers); rodzina protokołów 802 tj. (802.2 – LLC, 802.3 – Ethernet, 802.5 – Token Ring, 802.11 – Wi-Fi),
  • Międzynarodowa Organizacja ds. Standaryzacji (ang. ISO, International Organization for Standardization); protokół HDLC – High Level Data Link Control,
  • Amerykański Narodowy Instytut Normalizacyjny (ang. ANSI, American National Standards Institute); protokoły 3T9.5, oraz ADCCP – Advanced Data Communications Control Protocol
  • Międzynarodowy Związek Telekomunikacyjny (ang. ITU, International Telecommunication Union); protokoły Q.921 – ISDN Data Link Standard, Q.922 – Frame Relay Standard, HDLC – High Level Data Link Control,
  • Protokół zdefiniowany w RFC – PPP – Point-to-Point Protocol.

Protokoły wyższych warstw są zazwyczaj implementowane w software (system operacyjny) lub danej aplikacji tu występują w hardware np. karta sieciowa.

Warstwa fizyczna (ang. physical layer)

Warstwa fizyczna – zapewnia transmisję danych pomiędzy węzłami sieci. Określa ona wszystkie składniki sieci niezbędne do obsługi optycznego, elektrycznego bądź radiowego wysyłania i odbierania sygnałów. Opisuje interfejsy sieciowe i medium transmisji. Określa m.in. sposób połączenia mechanicznego, poziomy napięcia, okresy zmian napięcia, maksymalne odległości transmisyjne, standard fizycznej transmisji danych. W skład jej obiektów wchodzą min.: przewody, karty sieciowe, modemy, wzmacniacze.

Do transportu ramki przez medium wymagana są następujące elementy wchodzące w skład warstwy fizycznej:

  • fizyczne medium oraz złącza,
  • sposób przedstawienia bitów w medium,
  • procesy kodowania danych,
  • urządzenia nadawczo-odbiorcze.

Medium – można określić jako nośnik informacji użyty do transmisji danych.

Możemy wyróżnić następujące media transmisyjne:

  • kabel miedziany,
  • światłowód,
  • atmosfera.

Sposób reprezentacji bitów, zależy oczywiście od typu użytego medium i tak dla kabla miedzianego jest to ciąg impulsów elektrycznych, dla światłowodu – impulsy światła natomiast dla atmosfery są to fale radiowe.

Wybór odpowiedniego medium transmisyjnego ma wpływ na osiągany transfer, oczywiście różne media fizyczne oferują nam różne szybkości transferu, który możemy wyrazić na trzy sposoby:

  • szerokość pasma (ang. bandwidth),
  • przepustowość efektywna (ang. goodput),
  • przepustowość (ang. throughput).

Szerokość pasma to ilość informacji, jaka może zostać przesłana z jednego miejsca do drugiego w określonym czasie. Przeważnie szerokość pasma określamy w kilobitach/s (kb/s) lub megabitach/s (Mb/s).

Przepustowość to miara transferu bitów przez medium w określonym czasie. Oczywiście dążymy do tego, aby przepustowość była jak najbardziej zbliżona do szerokości pasma, ale z wielu przyczyn jest to niemożliwe np. z powodu ruchu generowanego przez inne urządzenia czy ich ilość.

Przepustowość efektywna to miara transferu użytecznych danych w określonym czasie. Obejmuje również cały proces enkapsulacji i dekapsulacji, czyli mierzy transfer danych użytkownika pomiędzy warstwami. Przykładem może być np. transmisja danych pomiędzy przeglądarką WWW a serwerem WWW.

Proces enkapsulacji i dekapsulacji – praktyczny przykład

Aby zrozumieć proces enkapsulacji i dekapsulacji, prześledźmy proces przekazywania pakietu ping (ICMP).

Scenariusz jest następujący: chcemy sprawdzić dostępność serwera o adresie IP 192.168.0.10 za pomocą ping, który zostaje wysłany z komputera PC1 o adresie IP 10.0.0.10.

Jak widać (rysunek poniżej) pakiet musi przejść przez trzy sieci – zaczyna w sieci 10.0.0.0/24, poprzez sieć  172.16.0.0/30 (między routerami) aby w końcu trafić do adresata znajdującego się w sieci 192.168.0.0/24. Trochę wyprzedzę następny artykuł, który będzie dotyczył routingu i dodam, że sieć jest zbieżna czyli wszystkie urządzenia a w szczególności routery mają w swoich tablicach informacje o użytych sieciach (w tym przypadku routingiem zajmuje się protokół RIP a bardziej szczegółowo jego druga wersja).

Z komputera PC1 zostaje wysłany ping, na rysunku poniżej widać wypełniony pakiet warstwy trzeciej (IP) z adresem nadawcy – src:10.0.0.10 i adresem docelowym hosta dst:192.168.0.10. Do pakietu warstwy trzeciej zostaje dodana ramka warstwy drugiej (Ethernet) i również wypełniona adresami nadawcy i odbiorcy – użyto adresów MAC. Dla nadawcy 00D0:FF23:DBE0 i dla odbiorcy 0050:0F4C:0301. Zapytasz czemu został użyty adres 0050:0F4C:0301, który przecież nie jest adresem MAC docelowego hosta? Już śpieszę z odpowiedzią. Adres MAC 0050:0F4C:0301 jest adresem interfejsu fa0/0 routera , który jest jednocześnie bramą dla komputera PC1, komputer nie zna drogi do sieci przeznaczenia, dlatego w myśl zasady – „jak nie znam drogi, wysyłaj na bramę niech się ona martwi” tak też czyni. Tak przygotowana ramka zostaje wysłana.

Pierwszym napotkanym na drodze urządzeniem jest switch S2, on musi odebrany pakiet przekierować w ten sposób, aby trafił on do routera. Aby przełącznik mógł przekazać ramkę musi znać docelowy adres MAC. Następuje dekapsulacja danych, ale tylko do warstwy drugiej, gdyż w tej warstwie znajdują się szukana informacja. Dlatego często spotkasz się z stwierdzeniem – switch jest urządzeniem warstwy drugiej. Jak widać po przykładzie jest to prawda, bo aby przełącznik mógł działać musi mieć możliwość odczytania danych zapisanych w warstwie drugiej – warstwy powyżej go nie interesują. Po poznaniu adresu MAC odbiorcy ramki, następuje sprawdzanie tablicy MAC switcha (w tablicy tej znajdują się adresy MAC z którymi switch ma łączność powiązane z numerem portu – rysunek poniżej). Gdy switch odnajdzie adres, ramka zostaje przekazana na port skojarzony z tym adresem. W naszym przypadku pakiet zostaje przekierowany z portu fa0/2 switcha na port fa0/1.

Kolejnym etapem na drodze pakietu jest router. Aby pakiet mógł zostać przekazany dalej router musi odczytać informacje zapisane w warstwie trzeciej (stąd mówi się o tym, że routery sto urządzenia pracujące w warstwie 3). Następuje proces dekapsulacji, router zdobywa informację o przeznaczeniu pakietu a tak naprawdę poznaje adres IP sieci, w której znajduje się docelowy host – w naszym przypadku 192.168.0.0/24. W kolejnym kroku router musi określić drogę do sieci docelowej, dlatego sięga do swojej tablicy routingu. Po sprawdzeniu tablicy routingu, router wie, że pakiet należy przekazać do portu fa0/1, gdyż ten interfejs poprzez adres następnego skoku 172.16.0.1 ma łączność z siecią 192.168.0.0/24.

Następuje przebudowa nagłówka pakietu warstwy trzeciej m.in. o jeden zostaje zmniejszona wartość pola TTL – pamiętamy, że za każdym razem, gdy pakiet przechodzi przez router wartość tego pola ulega zmniejszeniu, zabieg ten ma zapobiegać krążeniu pakietów bez końca.

Pakiet zostaje przekazany niżej do warstwy łącza danych, zostaje zbudowana ramka. Ponieważ droga do sieci 192.168.0.0/24 prowadzi poprzez adres 172.16.0.1 router sięga do swojej tablicy ARP w której znajdują się powiązania adresów IP z adresami MAC. Docelowym adresem MAC jest 00D0:FF0B:0002 (gdyż skojarzony jest on z adresem IP 172.16.0.1), natomiast źródłowy adres MAC to 0050:0F4C:0007 – adres interfejsu fa0/1 routera (pakiet opuszcza router tym właśnie interfejsem) .

Ping zostaje przekazany dalej.

Kolejny etapem jest ponownie router, całość procesu przebiega analogicznie – sprawdzenie docelowego adresu IP, przebudowa nagłówka ramki warstwy trzeciej, przekazanie informacji do warstwy łącza danych, sprawdzenie tablicy ARP, wypełnienie ramki adresami MAC i przekazanie danych dalej przez interfejs f0/0 (dzięki niemu osiągalny jest docelowy host 192.168.0.10).

Ostatnim etapem jest switch, po dotarciu ramki sprawdzany jest docelowy adres MAC, jeśli takowy znajduje się w tablicy MAC przełącznika to zostaje on przekazany na odpowiedni port – w naszym przypadku ramka z interfejsu fa0/1 jest przekazana do interfejs fa0/2.

Informacja trafia do hosta docelowego, po dekapsulacji i sprawdzeniu nadawcy, następuje enkapsulacja i wysłanie odpowiedzi zwrotnej. Cały proces przebiega w kolejności odwrotnej.

Niektórzy z Was z pewnością zapytają – Co w sytuacji, w której tablica ARP routera bądź przełącznika jest pusta lub brak jest szukanego adresu MAC (bądź IP)?

Aby odpowiedzieć na pytanie rozważmy scenariusz pokazany na rysunku poniżej. Pingujemy komputer o adresie IP 10.0.0.14 z hosta o adresie 10.0.0.10.

Już wiesz, że proces enkapsulacji przebiega w dół, z warstwą sieciową nie ma problemu, ale problem pojawia się w warstwie łącza danych, gdyż w ramce musi zostać wypełnione pole docelowego adresu MAC, a niestety komputer wysyłający tego adresu nie zna. Musi zatem istnieć jakiś protokół/mechanizm umożliwiający na poznanie tego adresu. Protokół ten nazywa się ARP i jego zdaniem jest powiązanie adresu IP z adresem MAC, a następnie zapisanie wyniku w tablicy ARP (jak widać na razie tablica ta jest pusta).

Spójrz na rysunek poniżej komputer o adresie 10.0.0.10 wysyła rozgłoszenie ARP (kolejny protokół korzystający z broadcastu) –„szukam komputera o adresie IP 10.0.0.14, potrzebuję jego adresu MAC”. Na rysunku widać, że rozgłoszenie ARP trafia do wszystkich urządzeń znajdujących się w sieci, ale na nie odpowiada tylko komputer o szukanym adresie IP 10.0.0.14 (reszta komputerów pakiet ARP ignoruje). Pakiet ARP wraz z wypełnionym adresem MAC źródła, czyli komputera o adresie 10.0.0.14 zostaje odesłany.

Otrzymana odpowiedź przez komputer PC4 zostaje przetworzona, w tablicy ARP zostaje umieszczony wpis kojarzący adres IP 10.0.0.14 z adresem MAC.

Na tej samej zasadzie wszystkie urządzenia (komputery, przełączniki) budują swoje własne tablice ARP (rysunek poniżej). Aby wyświetlić tablicę ARP komputera wydaj polecenie: arp -a

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *