Model ISO/OSI i Wireshark - Ćwiczenia 2 

Część 1: Model OSI

Prace nad stworzeniem uniwersalnego, warstwowego modelu sieci zostały rozpoczęte w 1977 r. przez ISO (ang. International Standard Organization). Efektem tych prac jest model OSI (ang. Open Systems Interconnection Model) składający się z siedmiu warstw: aplikacji, prezentacji, sesji, transportu, sieci, łącza danych i fizycznej. Każdy protokół sieciowy przypisany jest do jednej z warstw. Poszczególne warstwy realizują w związku z tym różne usługi. Z usług dostarczanych przez warstwę korzysta warstwa znajdująca się bezpośrednio nad nią. Jest to tak zwany warstwowy model usług.

Warstwowy model sieci oferuje nie tylko pojęciowe i strukturalne uporządkowanie, ale także umożliwia przezroczyste dla wyższych warstw zmiany sposobu realizacji usług znajdujących się poniżej. Dobrym przykładem korzyści płynących ze ścisłego powiązania warstw z realizowanymi przez nie funkcjami jest dynamiczny rozwój sieci bezprzewodowych w standardzie 802.11. Dla przeglądarki internetowej używającej na poziomie warstwy aplikacji protokołu HTTP, czy dla klienta FTP nie ma znaczenia czy na warstwie łącza danych używany jest protokół Ethernet 802.11, czy też jakiś inny (pod warunkiem, że realizuje funkcje przypisane do tej warstwy). Łatwo sobie wyobrazić, że sytuacja w której zmiana na w jednej warstwie (na przykład wprowadzenie protokołu 802.11n) wymagałaby modyfikacji wszystkich pozostałych skutecznie zablokowałaby jakikolwiek postęp.

Model OSI

Rys.1. Model OSI

Na rys. 1. przedstawiony jest model OSI wraz z nazwami używanymi dla określenia porcji danych na kolejnych warstwach i protokołami na nich realizowanymi. W Internecie mamy do czynienia z modelem OSI w którym trzy górne warstwy zostały połączone w jedną – otrzymujemy wtedy model pięciowarstwowy. Wraz z prezentacją konkretnych protokołów opisane zostaną dokładnie funkcje każdej z warstw wraz ze sposobem ich realizacji. Krótka, dająca wyobrażenie o powiązaniach pomiędzy warstwami, charakterystyka funkcji poszczególnych warstw znajduje się poniżej:

  1. Warstwa fizyczna -– wykorzystuje fizyczne medium (powietrze, przewody miedziane, światłowody) i jego własności do przesyłania sygnałów; elementami tej warstwy są karty sieciowe, okablowanie; czasami nazywa się ją warstwą nieinteligentną ponieważ nie kontroluje przeznaczenia sygnałów podczas ich przesyłania,
  2. Warstwa łącza danych -– wykonuje funkcję nadzoru jakości przekazywanych informacji w stosunku do warstwy znajdującej się pod nią; kontroluje ilość przesyłanych danych w zależności od chwilowych parametrów warstwy fizycznej;
  3. Warstwa sieci –- główną funkcją tej warstwy jest umożliwienie komunikacji pomiędzy komputerami znajdującymi się w różnych miejscach (różnych segmentach sieci); w związku z tym warstwa ta udostępnia usługę identyfikacji ścieżki jaka prowadzi od hosta źródłowego do docelowego; najbardziej rozpowszechniony w Internecie protokół tej warstwy to IP; nie gwarantuje on, że wysłane pakiety dotrą do adresata lub, że będą w właściwej kolejności,
  4. Warstwa transportowa -– korzystając z usług dostarczanych przez warstwy znajdujące się poniżej zapewnia niezawodną komunikację pomiędzy komputerami znajdującymi się w dowolnych punktach sieci; warstwa transportowa wykrywa zagubione pakiety i żąda retransmisji, a także potrafi zidentyfikować ich poprawną kolejność; dodatkowo warstwa ta umożliwia podział kanału łączności pomiędzy wiele połączeń sieciowych; na poziomie warstwy sieciowej wprowadzone jest także pojęcie gniazda (ang. socket), które to umożliwia niezależne działanie wielu usług sieciowych;
  5. Warstwa aplikacji –- zadania realizowane przez tą warstwę są najbardziej różnorodne i jednocześnie najbliższe potrzebom użytkownika; na warstwie aplikacji realizowane są funkcje, które są niezbędne do świadczenia usług końcowych, takich jak dyski sieciowe, udostępnianie drukarek czy treści; najpopularniejszym przykładem protokołu warstwy aplikacji jest HTTP używany przez przeglądarki do ściągania z sieci stron WWW wraz z elementami z nimi powiązanymi (obrazki, osadzone obiekty itd.),

Kombinację protokołów realizujących określone funkcje z różnych warstw nazywamy stosem protokołów. Przykładowy stos protokołów realizując funkcję zapytania serwera DNS o adres IP domeny Onet.pl poprzez sieć bezprzewodową wyglądałby następująco:

  • DNS –- warstwa aplikacji,
  • UDP –- warstwa transportowa,
  • IP –- warstwa sieci,
  • Ethernet 802.11 –- warstwa łącza danych,

Część 2: Kapsułkowanie

Bardzo ważnym zagadnieniem dla zrozumienia funkcjonowania sieci komputerowych jest kapsułkowanie (ang. encapsulation) przedstawione schematycznie na rys.2. Rysunek ten przedstawia drogę jaką poruszają się dane przemieszczając się od jednego hosta do drugiego (na przykład informacja wysłana przy pomocy komunikatora Tlen). Do danych wysłanych z aplikacji na warstwie transportowej dodawany jest odpowiedni nagłówek. Tak skonstruowany segment przekazywany jest niżej do warstwy sieci, gdzie dodawany jest kolejny nagłówek (segment składający się z komunikatu i nagłówka warstwy transportowej pozostaje niezmieniony na warstwie sieci, natomiast zostaje do niego dodany kolejny nagłówek). Po kolejnym procesie kapsułkowania ramka na warstwie łącza danych składa się z komunikatu początkowego i trzech nagłówków – warstwy transportowej, sieci i łącza danych. W hoście docelowym następuje proces odwrotny (ang. decapsulation). Najpierw z bitów składana jest ramka. Później po odjęciu nagłówka warstwy łącza danych powstaje datagram. Kolejnymi krokami jest odcięcie nagłówków warstwy sieci i transportowej i przekazanie do warstwy aplikacji samego komunikatu.

Proces kapsułkowania może być (i najczęściej w praktyce bywa) dużo bardziej złożone od schematu omówionego powyżej. Dzieje się tak, gdy wielkość komunikatu na danejwarstwie przekracza maksymalną wielkość na warstwie poniżej (Maximum Transmission Unit (MTU) – rozmiar największego datagramu, który można przekazać przez warstwę protokołu komunikacyjnego). Wtedy musi on zostać podzielony na więcej niż jeden, odpowiednio, segment, datagram czy ramkę. W takim wypadku po stronie odbiorcy transmisji odpowiednia warstwa ma za zadanie scalić dane przed przekazaniem ich do warstwy wyższej.

Kapsułkowanie

Rys.2. Schemat kapsułkowania w modelu pięciowarstwowym.

Część 3: WireShark

Sniffer jest programem służącym do przechwytywania i analizowania danych przepływających w sieciach. Z założenia jest to narzędzie pasywne, które przechwytuje pojawiające się komunikaty, ale samo nie wysyła żadnych pakietów. Najczęściej dzięki snifferowi możliwe jest przechwytywanie pakietów, które są wysyłane przez aplikacje działające na naszym komputerze lub też tych adresowanych do nas, choć w przypadku sieci bezprzewodowych, a także sieci opartych na koncentratorach możliwe jest śledzenie komunikacji innych osób. Przechwytywane informacje nie są nigdy adresowane bezpośrednio do sniffera. Działanie sniffera jest przezroczyste dla pozostałych aplikacji działających na danym komputerze (w tym tych, których komunikację przechwytujemy).

Jednym z najbardziej popularnych snifferów ze względu na ogromną bazę rozpoznawanych protokołów i bardzo wygodny interfejs użytkownika jest WireShark (wcześniejsze wersje tego programu nazywają się Ethereal). Jest on dostępny zarówno pod Linuxa jak i Windows pod adresem: http://www.wireshark.org/download.html .

Możliwość przechwytywania danych wymaga bezpośredniego dostępu do interfejsów sieciowych, w związku z tym WireShark w systemach typu UNIX musi być uruchamiany z prawami roota:

sudo wireshark

Po uruchomieniu sniffera otwiera się okno programu. Rozpoczęcie przechwytywania komunikacji wymaga wybrania z menu u góry okna opcji Capture/Interfaces (rys.3).

Tutorial WireShark 1

Rys.3. Rozpoczęcie przechwytywania komunikacji

Kolejnym krokiem jest wybór interfejsu sieciowego, na którym komunikację chcemy przechwytywać. W zależności od tego ile interfejsów sieciowych (nie jest to tożsame z liczbą sprzętowych kart sieciowych) jest zdefiniowane w naszym systemie okno przedstawione na rys.4. będzie mieć różny wygląd. Jeśli po samych nazwach lub adresie IP trudno się zorientować, który interfejs jest w danej chwili używane jako okno do sieci (w jednej chwili system może korzystać z wielu interfejsów sieciowych równolegle) najlepiej jest spojrzeć na licznik pakietów (ang. packets) znajdujący się w trzeciej kolumnie. Jeśli chcemy rozpocząć przechwytywanie danych należy kliknąć na przycisk „start”.

Tutorial WireShark 2

Rys.4. Wybór interfejsu sieciowego

W celu zatrzymania procesu przechwytywania należy kliknąć na odpowiednią ikonę na pasku menu (oznaczona żółtym kółkiem na rys.5).

Tutorial WireShark 3

Rys.5. Zatrzymanie przechwytywania danych

Po przerwaniu zbierania danych WireShark wyświetla wszystkie ramki jakie udało mu się przechwycić (rys.6). Informacja zorganizowana jest w trzech oknach. Pierwsze od góry zawiera wszystkie ramki posortowane domyślenie w kolejności jakiej zostały przechwycone. Każda linijka przedstawia jedną ramkę. Kolory poszczególnych linii zależą od protokołu rozpoznanego przez WireShark’a. Kolumna Time zawiera czas w milisekundach jaki upłynął od rozpoczęcia przechwytywania danych do przechwycenia danej ramki (istnieje możliwość zmiany sposobu wyświetlania daty, należy w tym celu wybrać z menu opcję View/Time Display Format ). Kolejne dwie kolumny zawierają odpowiednio adres źródła i celu. Piąta kolumna zawiera informację o protokole jaki rozpoznał WireShark. Warto zwrócić uwagę, że sniffer nie zawsze będzie w stanie prawidłowo rozpoznać protokół najwyżej warstwy. W takich sytuacjach w tej kolumnie będzie informacja o protokole niższej warstwy, który został rozpoznany.

Drugie, znajdujące się poniżej pierwszego, okno zawiera dokładne informacje o jednej, wybranej przez użytkownika ramce. Jak łatwo zauważyć informacja zorganizowana jest w oparciu o warstwy z modelu OSI, tyle, że prezentowana jest w odwrotnej kolejności. Klikając na plus obok nazwy protokołu można dostać się do dodatkowych informacji (głównie z nagłówków danego protokołu). Na samym dole prezentowana jest zarówno w postaci ASCII jak i heksadecymalnej cała zawartość danej ramki.

Tutorial WireShark 4

Rys.6. Główny ekran programu WireShark

Jeśli interesuje nas sprawdzenie jak wygląda konkretne zdarzenie (np. otworzenie strony WWW w przeglądarce) od strony komunikacji sieciowej, to dobrym nawykiem jest rozpoczęcie przechwytywania tuż przed wywołaniem tego zdarzenia, a także ograniczenie liczby procesów sieciowych działających w tle. Pozwoli nam to zmniejszyć liczbę danych przechwytywanych przez sniffer, a co za tym idzie znacząco zwiększyć czytelność wyników. Tym niemniej często zdarza się, że nawet przy najlepszych chęciach liczba pakietów sięga tysięcy. Znalezienie interesującej nas informacji w tym gąszczu różnych komunikatów znakomicie ułatwiają filtry. Oby przejść do okna wyboru filtra należy kliknąć na słowo Filter znajdujące się w lewym górnym rogu ekranu. Otworzy się okno pokazane na rys.7.

Tutorial WireShark 5

Rys.7. Okno wyboru filtra

Kliknięcie na klawisz Apply powoduje zastosowanie wybranego uprzednio filtra. Warto jednak wcześniej przyjrzeć się polu Filter string. Zawiera ono warunek według którego wszystkie zebrane dane zostaną przefiltrowane. Po kliknięciu na klawisz Expression… można tworzyć swoje własne filtry korzystając z bardzo wygodnego narzędzia podpowiadające odpowiednie konstrukcje. Zastosowany filtr w każdej chwili można wyłączyć wybierając opcję Clear (zaznaczone na żółto na rys. 8.).

Tutorial WireShark 6

Rys.8. Wyłączanie filtrowania





Zadania 

Zadania

  1. Wypisz stos protokołów używany podczas otwierania strony http://www.wp.pl w przeglądarce.
  2. Policz ile bajtów nagłówków zostanie dodanych do danych zakładając, że:
    zadanie2

  3. Stwórz filtr w WireSharku, który będzie pokazywał wszystkie ramki z protokołem TCP mające ustawione flagi SYN i ACK lub mające numer Seq równy 0.
  4. Otwórz stronę http://poczta.wp.pl . Odznacz checkbox zaloguj bezpiecznie (SSL). Rozpocznij przechwytywanie danych w WireSharku a następnie spróbuj się zalogować (możesz wcześniej stworzyć konto emailowe lub użyć fikcyjnego użytkownika i hasła). Zatrzymaj sniffowanie. Spróbuj znaleźć hasło w przechwyconych danych. Jeśli udało Ci się znaleźć hasło to opisz ramkę w której się ono znajdowało.
  5. Powtórz eksperyment z zadania czwartego, tym razem jednak zostawiając włączoną opcję zaloguj bezpiecznie (SSL).
  6. Sprawdź czy hasło do serwisu nasza-klasa.pl jest jako zaszyfrowane czy też niezaszyfrowane.
  7. Wykonaj komendę
    ping onet.pl
    Obserwuj wyniki w WireSharku. Z jakiego protokołu korzysta polecenie ping?
  8. Wykonaj komendę
    ping 127.0.0.1
    Obserwuj wyniki w WireSharku. Potwórz eksperyment wybierajšc różne interfejsy (m.in. eth0 i lo). Czy zauważyłeœ(aœ) różnicę? W jaki sposób można jš wytłumaczyć warstwowym modelem OSI?

Słownik 

Sniffer - program komputerowy lub urządzenie, którego zadaniem jest przechwytywanie (śledzenie) i czasami także analiza danych przepływających w sieciach telekomunikacyjnych.

Model ISO/OSI - (ang. ISO OSI Reference Model - model odniesienia łączenia systemów otwartych) - standard zdefiniowanych przez International Standard Organization (ISO) oraz International Telecommunication Union - Telecommunication Standardization Sector (ITU-T) opisujący strukturę komunikacji sieciowej. Składa się z siedmiu warstw i jest wzorcem odniesienia dla większości rodzin protokołów komunikacyjnych.

Maximum Trasmission Unit (MTU) - rozmiar (w bajtach) największego datagramu, który może zostać przekazany przez warstwę protokołu komunikacyjnego bez fragmentacji; RFC 1191 opisuje technikę Path MTU discovery pozwalająca określić MTU dla ścieżki pomiędzy dwoma hostami w celu uniknięcia fragmentacji,

Fragmentacja - podział pakietów protokołu IP na fragmenty o długości nie większej niż MTU określonego dla warstwy łącza

Pliki 


W sieci