Powrót

Komunikacja przez sieć (2)

Kolejnym elementem w komunikacji sieciowej obok organizacji na poziomie logicznym, reprezentowanej przez adresację IP, są protokoły komunikacyjne. Służą one do realizacji różnych celów, część z nich ma charakter diagnostyczny, organizacyjny oraz najbardziej istotny: służą do transmisji danych.

Mamy już świadomość budowy sieci lokalnych, co w rzeczywistości dotyczy organizacji adresowania poszczególnych stacji przyłączonych do wspólnej sieci. Czas więc teraz na zagłębienie się w same protokoły komunikacyjne. Pewna ogólna wiedza (bez zbędnego zagłębiania się w szczegóły) jest niezbędna, by zrozumieć działania tego popularnego „wynalazku”, jakim jest sieć komputerowa.

Ramka ethernetowa

W sieci komputerowej krążą ramki ethernetowe (podstawowe porcje transmisyjne), które niosą w sobie różne informacje. Wielkość takiej ramki jest uzależniona od rodzaju protokołu. Ma swoją strukturę oraz minimalną (wynikającą z budowy nagłówka), jak również maksymalną wielkość (nie więcej niż 600 hex razem z nagłówkiem). Wielkość ramki jest liczona w oktetach (oktet należy utożsamiać z bajtem, sama nazwa oktet w prosty sposób kojarzy się z liczbą 8) i to określenie „przylgnęło” do tematyki sieciowej. Jako ramkę należy rozumieć blok oktetów o określonej wielkości, przesyłanych jako pojedyncza struktura. Ogólną budowę takiej ramki pokazuje rysunek 1.

Rysunek 1

Można tu dostrzec nagłówek, który ma swoją strukturę: adres odbiorcy (6 oktetów), adres nadawcy (6 oktetów), typ określający informację niesioną przez ramkę (2 oktety) oraz dane o zmiennej wielkości zależnej od przesyłanych danych. Występująca tu informacja o charakterze adresowym, o wielkości 6 oktetów określana jest jako adres MAC (ang. media access control). Należy go traktować jako sprzętowy adres karty sieciowej.

Powinien on być unikatowy w skali światowej, jest nadawany przez producenta danej karty podczas jej produkcji (choć w rzeczywistości można go zmodyfikować). W obecnych czasach, przy tak masowej produkcji urządzeń przyłączanych do sieci, utrzymanie unikalności tego adresu może być problematyczne. Ten adres jako liczba jest podzielona na dwie części: pierwsze 24 bity (3 bajty) liczby oznaczają producenta karty sieciowej, pozostałe 24 bity (3 bajty) są unikatowym identyfikatorem danego egzemplarza karty w obrębie danego producenta. Adres MAC zapisuje się w formie 6 liczb szesnastkowych rozdzielonych znakiem myślnika, kropki lub dwukropka (adres MAC komputera, którego używam pokazuje rysunek 2).

Rysunek 2

O ile unikalność adresu MAC w skali światowej niekoniecznie musi być zapewniona, to w obrębie sieci lokalnej bezwzględnie musi wystąpić. Sama karta sieciowa (w tym również inne układy, jak przykładowo ENC28J60, pełniące funkcję karty sieciowej) „widzi” po tym adresie, że dana ramka ethernetowa jest przesyłana do niej, bo porównuje własny adres MAC z adresem MAC w odebranej ramce ethernetowej. Za adresem MAC odbiorcy występuje adres MAC nadawcy (rysunek 1), co pozwala na identyfikację drugiej strony. Kolejne dwa oktety (typ) pozwalają na rozpoznanie znaczenia dalszych danych.

Znajomość adresów MAC pozwala przesłać dane z określonego punktu (adres MAC nadawcy) do innego punktu (adres MAC odbiorcy). Poza takim wariantem istnieje możliwość przesyłania danych w trybie rozgłoszeniowym (ang. broadcast). Uzyskuje się to poprzez specjalny, zarezerwowany adres MAC o wartości FF-FF-FF-FF-FF-FF. Ramka ethernetowa mająca taki adres w polu odbiorcy, oznacza, że wszystkie urządzenia w danej lokalnej sieci mają odebrać i przetworzyć daną ramkę.

Przekonanie, że transmitowane w sieci dane są adresowane poprzez adres IP jest iluzją. W rzeczywistości wszelkie dane krążące w sieciach są adresowane przy wykorzystaniu adresów MAC. Wydając przykładowo polecenie ping, specyfikowany jest adres IP (polecenie ping posługuje się odpowiednim wariantem protokołu ICMP). Aby zrealizować to polecenie, oprogramowanie musi zamienić adres IP na adres MAC.

Protokół ARP

Aby wysłać pakiet ICMP do drugiego punktu o określonym adresie IP, należy znać odpowiadający mu adres MAC. Każda stacja w sieci w trakcie pracy buduje „w sobie” tabelę powiązań adres IP <–> adres MAC. By „pozyskiwać” dane do takiej tabeli, wykorzystywany jest odpowiedni protokół ARP (ang. Address Resolution Protocol). Pozwala on na przekształcanie logicznych adresów IP na sprzętowy adres MAC. Postać ramki ARP pokazuje rysunek 3. Ramka występuje w dwóch wariantach: zapytania ARP oraz odpowiedzi ARP (ramka ARP ma swoją strukturę, w której występują te szczegóły).

Rysunek 3

Wyobraźmy sobie operację widoczną na rysunku 4, gdzie komputer o IP=192.168.1.16 (MAC=00:05:B7:E5:63:60) wysyła sygnał ping (pakiet ICMP) do systemu z arduino o IP=192.168.1.6 (niech jego MAC=00:14:16:22:28:2D). Wykonanie tego polecenia wymaga „poznania” powiązania IP od arduino z jego MAC (własny IP oraz MAC jest znany).

Rysunek 4

By uzyskać takie dane komputer (o IP=192.168.1.16) musi wysłać zapytanie ARP. Ponieważ wysyłając to zapytanie, komputer nie zna adresu MAC modułu z układem ENC28J60, jest ono wysłane w trybie rozgłoszeniowym (tak jakby docelowy adres MAC miał wartość FF-FF-FF-FF-FF-FF).

 

 

(…)

——– ciach! ——–

To jest tylko fragment artykułu, którego pełna wersja ukazała się w lipcowym numerze czasopisma Zrozumieć Elektronikę (ZE 7/2026). Pełną wersję czasopisma znajdziesz pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 7/2026 znajduje się tutaj.

Andrzej Pawluczuk
apawluczuk@vp.pl

Uwaga! Wskazówki, jak nabyć pełne wersje dowolnych numerów ZE znajdują się na stronie:
https://piotr-gorecki.pl/n11.