W ramach ćwiczeń w domowym laboratorium sieciowym przetestowałem działanie modelu OSI w praktyce. Wygenerowałem rzeczywisty ruch sieciowy pomiędzy dwiema maszynami wirtualnymi, przechwyciłem go snifferem pakietów i przeanalizowałem warstwa po warstwie.

Do przeprowadzenia ćwiczenia wykorzystałem dwie maszyny wirtualne w swoim środowisku homelab.

Krok 1: Uruchomienie usługi testowej

Na maszynie Ubuntu uruchomiłem prosty serwer HTTP na porcie 8080:

python3 -m http.server 8080

Krok 2: Uruchomienie przechwytywania ruchu

Na maszynie Kali włączyłem podsłuch pakietów na interfejsie sieciowym eth0. Do podglądu ruchu sieciowego użyłem zarówno programu Wireshark, jak i konsoli.

sudo tcpdump -i eth0 host 192.168.202.131 and port 8080 -w /tmp/osi_lab.pcap

Krok 3: Wygenerowanie żądania i zatrzymanie nasłuchu

Z poziomu Kali wysłałem pojedyncze zapytanie HTTP do serwera:

curl -i http://192.168.202.131:8080/

Analiza ramki w modelu OSI

Przechwycony pakiet zawierający żądanie pozwala zaobserwować strukturę nagłówków odpowiadających kolejnym warstwom modelu OSI:

  1. Warstwa 1 (Fizyczna):
    • Reprezentowana jako surowa ramka (Frame 18: 150 bytes on wire).
    • Określa fizyczny rozmiar przesłanych danych na interfejsie sieciowym.

  1. Warstwa 2 (Łącza danych):
    • Nagłówek Ethernet II.
    • Zawiera fizyczne adresy sprzętowe:
      • Source MAC (karta sieciowa Kali)
      • Destination MAC (karta sieciowa Ubuntu)
      • typ zawartości (IPv4 - 0x0800).

  1. Warstwa 3 (Sieciowa):
    • Nagłówek Internet Protocol Version 4.
    • Odpowiada za logiczne adresowanie:
      • adres źródłowy (192.168.202.130)
      • adres docelowy (192.168.202.131)
      • czas życia pakietu (TTL)
      • identyfikator protokołu nadrzędnego (TCP - 6).

  1. Warstwa 4 (Transportowa):
    • Nagłówek Transmission Control Protocol (TCP).
    • Definiuje port źródłowy (wysoki, losowy port klienta, np. 48212), port docelowy (8080), numery sekwencyjne i potwierdzeń (Seq/Ack) oraz flagi kontrolne sterujące połączeniem.

  1. Warstwy 5–7 (Sesji, Prezentacji, Aplikacji):
    • Sekcja Hypertext Transfer Protocol (HTTP).
    • Warstwa sesji – zarządza stanem i czasem trwania połączenia.
    • Warstwa prezentacji – odpowiada za format danych i kodowanie znaków.
    • Warstwa aplikacji – właściwe polecenie zrozumiałe dla aplikacji:
      • GET / HTTP/1.1
      • User-Agent: curl/8.x.x

Dodatkowe obserwacje

Podczas ćwiczeń sprawdziłem również działanie protokołu ARP i 3-way handshake.

Działanie protokołu ARP

Po wyczyszczeniu tablicy ARP i wysłaniu pakietu ICMP (polecenie ping), Kali najpierw wysłało zapytanie rozgłoszeniowe (Broadcast) z pytaniem o adres MAC skojarzony z IP serwera, a po otrzymaniu odpowiedzi unicast rozpoczęło właściwą transmisję IP.

sudo ip neigh flush all

3-way handshake

Transmisja TCP zawsze wymaga wcześniejszego nawiązania połączenia (SYN → SYN-ACK → ACK), nazywanego 3-way handshake. Z jednej strony wpływa to na czas przetwarzania pojedynczych żądań, z drugiej jednak zapewnia pewne i zsynchronizowane nawiązanie połączenia między klientem a serwerem.

Podsumowanie

Praktyczne rozłożenie ramki sieciowej w Wiresharku pozwala zobaczyć, jak teoria modelu OSI przekłada się na rzeczywisty ruch w sieci. Każda warstwa realizuje ściśle określone zadanie, doklejając własny nagłówek w procesie enkapsulacji i umożliwiając bezproblemową komunikację między różnymi systemami.