Ramki ethernetowe, o co z nimi tak naprawdę chodzi? 🤔

Ramki ethernetowe to struktury danych używane w sieciach Ethernet do enkapsulacji i przesyłania informacji pomiędzy urządzeniami, a po ich wysłaniu dekapsulacji. Są one kluczowym elementem systemu Ethernet, który jest jednym z najpopularniejszych standardów w sieciach. Ramki te składają się z kilku części: Preambuła, SFD, Adres MAC odbiorcy, Adres MAC nadawcy, Typ/Length, Dane, CRC (Cyclic Redundancy Check).

Obecnie głównie używane są ramki Ethernet II:

Warto podkreślić, że ramki Ethernet II są efektywne pod względem narzutu danych. Ponadto różne typy ramek mogą współistnieć w tej samej sieci, co pozwala na elastyczność i kompatybilność różnych urządzeń i protokołów.

Budowa Ramki Ethernetowej II

Standardowa ramka Ethernetowa składa się z kilku pól:

  • Preambuła (7 bajtów): Sekwencja bitów używana do synchronizacji zegarów nadajnika i odbiornika.
  • Start Frame Delimiter (SFD, 1 bajt): Oznacza początek ramki.
  • Adresy MAC:
    • Adres docelowy (6 bajtów): Wskazuje odbiorcę ramki.
    • Adres źródłowy (6 bajtów): Wskazuje nadawcę ramki.
  • Typ/Długość (2 bajty): Określa typ zawartości ramki lub jej długość.
  • Dane (46-1500 bajtów): Zawiera przesyłane informacje.
  • Frame Check Sequence (FCS, 4 bajty): Zawiera wartość CRC do wykrywania błędów.
| Preambuła | SFD | Adres docelowy| Adres źródłowy | Typ/Długość |   Dane     |   FCS    |
|-----------|-----|---------------|----------------|-------------|------------|----------|
| 7 bajtów  | 1 B*| 6 bajtów      | 6 bajtów       | 2 bajty     | 46-1500 B* | 4 bajtów |

* B - bajt

Budowa Ramki VLAN

Ramki VLAN (IEEE 802.1Q) są rozszerzeniem standardowych ramek i zawierają dodatkowe pole Tag 802.1Q:

  • Tag Protocol Identifier (TPID, 2 bajty): Wartość 0x8100 wskazująca na obecność tagu VLAN.
  • Tag Control Information (TCI, 2 bajty): Zawiera priorytet i identyfikator VLAN.
| Preambuła| SFD | Adres docelowy | Adres źródłowy | TPID | TCI | Typ/Długość | Dane      | FCS |
|----------|-----|----------------|----------------|------|-----|-------------|-----------|-----|
|   7 B    | 1 B |       6 B      |       6 B      | 2 B  | 2 B |     2 B     | 46-1500 B | 4 B |

*B - bity

  • Widok przykładowej ramki Ethernet II w hex:
  • Widok tej samej ramki w ASCII:
  • Widok w Wireshark tej samej ramki:

Myślę, że sprawniejsze oko czytelnika zada pytanie odnośnie ostatniego zdjęcia tj. a co to są te LG i IG bity skoro na górze o nich nie pisałem ☻.

Już śpieszę z wytłumaczeniem… 🦸‍♂️

Bity IG (Individual/Group) i LG (Local/Global), które czasami nazywane są również UL (Universal/Local), są częścią adresu MAC (Media Access Control) i mają specjalne znaczenie:

  • Bit IG (Individual/Group): Jest to najmniej znaczący bit w pierwszym bajcie adresu MAC. Określa on, czy adres MAC jest adresem indywidualnym (unicast) czy grupowym (multicast lub broadcast). Jeśli bit IG ma wartość 0, oznacza to, że adres MAC jest adresem indywidualnym. Jeśli bit IG ma wartość 1, oznacza to, że adres MAC jest adresem grupowym, który identyfikuje jedną lub więcej stacji podłączonych do sieci IEEE 8021.
  • Bit LG (Local/Global) lub UL (Universal/Local): Jest to drugi najmniej znaczący bit w pierwszym bajcie adresu MAC. Rozróżnia on adresy MAC przypisane przez producenta (globalne) od adresów administracyjnie przypisanych (lokalne). Jeśli bit LG/UL ma wartość 0, oznacza to, że adres MAC został przypisany przez globalnego administratora (producenta). Jeśli bit LG/UL ma wartość 1, oznacza to, że adres MAC został przypisany lokalnie i nie powinien być traktowany jako unikalny w skali globalnej.

Te bity są używane przez urządzenia sieciowe do odpowiedniego przetwarzania ramek Ethernetowych, na przykład do decydowania, czy ramka powinna być przekazana tylko do jednej stacji (unicast), czy do wielu stacji (multicast) lub do wszystkich stacji w sieci (broadcast).

Na zakończenie tego kontrolowanie chaotycznego wpisu trochę liczenia

Minimalna długość ramki Ethernetowej II to 64 bajty (512 bitów), co obejmuje wszystkie pola nagłówka oraz dane i sekwencję FCS. Jeśli chodzi o pakiet IP, sam nagłówek IP ma zazwyczaj 20 bajtów (160 bitów), ale może być dłuższy w przypadku, gdy zawiera opcje.

Oto jak można obliczyć całkowitą liczbę bitów w typowej ramce Ethernetowej zawierającej pakiet IP:

  • Adresy MAC (docelowy i źródłowy): 2 x 6 bajtów (2 x 48 bitów)
  • Typ/Długość: 2 bajty (16 bitów)
  • Dane (nagłówek IP + dane): minimalnie 46 bajtów (368 bitów) do maksymalnie 1500 bajtów (12000 bitów)
  • FCS: 4 bajty (32 bity)

Zapytasz gdzie zgubiłem 8 bitów? Preambuła i SFD są używane do synchronizacji i wykrywania początku ramki przez sprzęt sieciowy, ale nie są one zaliczane do nagłówka ramki, który jest przetwarzany przez oprogramowanie na wyższych warstwach modelu OSI.

W związku z powyższym:

  • Dla minimalnej długości danych (46 bajtów) i bez tagu VLAN, całkowita minimalna* długość ramki wynosi:

6+6+2+46+4= 64 bajty

*(Istnieją pewne rozmiary minimalne i maksymalne. Minimalny rozmiar ramki to 64 bajty. Obejmuje to 14-bajtowy nagłówek Ethernet, ładunek
i 4-bajtowy CRC. Biorąc to pod uwagę, minimalny rozmiar ładunku wynosi 64–14–4, czyli 46 bajtów. Co się stanie, jeśli ładunek będzie mniejszy niż 46 bajtów? W takim przypadku dane muszą zostać uzupełnione.)

  • Z tagiem VLAN (dodatkowe 4 bajty), długość ramki wynosiłaby:

64+4=68 bajty

  • Maksymalna długość ramki Ethernetowej bez tagu VLAN to:

6+6+2+1500+4=1518 bajty

  • Z tagiem VLAN, maksymalna długość* to:

1526+4=1522 bajty

*(maksymalny rozmiar ramki Ethernet zwiększa się, gdy zawiera tag VLAN. Standard IEEE 802.3ac, opublikowany w 1998 roku, rozszerzył maksymalny dostępny rozmiar ramki do 1522 bajtów. Zwiększenie to ma na celu umożliwienie obsługi technologii sieci VLAN (Virtual Local Area Network). Tag VLAN dodaje dodatkowe 4 bajty do ramki, co pozwala na zachowanie oryginalnego formatu ramki Ethernet przy jednoczesnym dodaniu informacji o VLAN)

Ważne!

Pamiętasz początek tego wpisu i dwa pierwsze obrazki pokazujące wszystkie bity znajdujące się w ramce? Jeśli tak to są to Preambuła, SFD tzw. bity wiodące używane do synchronizacji, dzięki czemu host odbierający może określić, gdzie zaczyna się ramka, ale nigdy nie można ich zobaczyć za pomocą sniffera. Ogólnie rzecz biorąc, sniffery również nie pozwalają zobaczyć CRC. Co oczywiście nie oznacza, że nie istnieją.

Miłej zabawy 😮‍💨

Zostaw komentarz

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

Przewijanie do góry