- Budowa ramki Ethernet 802.3 (MAC)
- Warianty ramki i rola IEEE 802.2 (LLC)
- Serce ładunku – MTU (Maximum Transmission Unit)
- MTU, fragmentacja i narzut administracyjny
- Problem Fragmentacji
- Obliczanie narzutu administracyjnego
- Analiza Tabeli
- Konfiguracja MTU w praktyce (Linux i RouterOS)
- Linux (iproute2)
- RouterOS (MikroTik)
- Wnioski
Ethernet jest fundamentem niemal każdej współczesnej sieci lokalnej (LAN). Od dziesięcioleci stanowi dominującą technologię warstwy łącza danych (Warstwa 2 modelu OSI). Kluczowym elementem tej technologii jest „ramka” (frame) – jednostka danych, która enkapsuluje pakiety z wyższych warstw (jak pakiety IP) w celu przesłania ich przez medium transmisyjne (np. kabel miedziany lub światłowód). Zrozumienie budowy tej ramki, a w szczególności pojęcia MTU (Maximum Transmission Unit), jest kluczowe dla diagnostyki sieci, optymalizacji wydajności i projektowania infrastruktury. W tym artykule przyjrzymy się szczegółowo budowie ramek Ethernet 802.3 i 802.2 oraz przeanalizujemy, jak rozmiar pola danych wpływa na wydajność i tzw. „narzut administracyjny”.
Budowa ramki Ethernet 802.3 (MAC)
Standard IEEE 802.3 definiuje podstawową strukturę ramki na poziomie podwarstwy MAC (Media Access Control). Jest to najczęściej spotykana forma ramki w dzisiejszych sieciach. Jej struktura, choć prosta, jest niezwykle efektywna.
<-- Warstwa Fizyczna (L1) --><--------------- Warstwa Łącza Danych (L2) ---------------->
+-----------+-----+-----------------+-----------------+---------------+----------------+----------+
| PREAMBUŁA | SFD | ADRES DOCELOWY | ADRES ŹRÓDŁOWY | DŁUGOŚĆ / TYP | POLE DANYCH | FCS |
| (7 bajtów)| (1B)| (MAC, 6 bajtów)| (MAC, 6 bajtów)| (2 bajty) | (46-1500 bajtów) | (4 bajty)|
+-----------+-----+-----------------+-----------------+---------------+----------------+----------+
Omówmy każde z tych pól:
- Preambuła (Preamble) (7 bajtów): Ciąg naprzemiennych bitów (10101010…) służący do synchronizacji zegara odbiornika z nadajnikiem. Jest to element warstwy fizycznej, choć formalnie opisany w standardzie 802.3.
- SFD (Start Frame Delimiter) (1 bajt): Znacznik początku ramki. Ma stałą wartość (10101011) i informuje odbiornik, że „synchronizacja się skończyła, teraz zaczyna się właściwa ramka”.
- Adres Docelowy (Destination MAC) (6 bajtów): 48-bitowy adres MAC karty sieciowej, do której ramka jest adresowana. Może to być adres Unicast (do jednego odbiorcy), Multicast (do grupy) lub Broadcast (do wszystkich w danej domenie rozgłoszeniowej,
FF:FF:FF:FF:FF:FF
). - Adres Źródłowy (Source MAC) (6 bajtów): 48-bitowy adres MAC karty sieciowej nadawcy.
- Długość / Typ (Length / EtherType) (2 bajty): To pole ma podwójne znaczenie, co jest historyczną spuścizną:
- Długość: Jeśli wartość tego pola jest mniejsza lub równa 1500 (
0x05DC
), oznacza ona długość pola danych (ładunku) w bajtach. Jest to charakterystyczne dla ramki typu IEEE 802.3 „Novell”. - Typ (EtherType): Jeśli wartość jest większa lub równa 1536 (
0x0600
), oznacza ona typ protokołu warstwy wyższej, który jest przenoszony w polu danych. Jest to cecha ramki Ethernet II (DIX). Przykłady:0x0800
dla IPv4,0x0806
dla ARP,0x86DD
dla IPv6. Dziś jest to najczęściej używany wariant.
- Długość: Jeśli wartość tego pola jest mniejsza lub równa 1500 (
- Pole Danych (Payload) (od 46 do 1500 bajtów): To jest „serce” ramki, przenoszące dane z wyższych warstw, np. cały pakiet IP. Minimalny rozmiar tego pola to 46 bajtów. Jeśli pakiet IP jest mniejszy, musi zostać dodane tzw. wypełnienie (padding), aby ramka osiągnęła minimalny dopuszczalny rozmiar (64 bajty łącznie z nagłówkami i FCS).
- FCS (Frame Check Sequence) (4 bajty): Suma kontrolna (CRC32) obliczana na podstawie wszystkich pól od Adresu Docelowego do Pola Danych włącznie. Odbiornik oblicza własną sumę FCS i porównuje ją z otrzymaną. Jeśli się nie zgadzają, ramka jest uznawana za uszkodzoną i odrzucana (Ethernet nie posiada mechanizmu retransmisji na tej warstwie).
Warianty ramki i rola IEEE 802.2 (LLC)
Jak wspomniano, pole Długość/Typ historycznie rozdzieliło ramki na dwa główne typy. Aby pogodzić te dwa światy i umożliwić współistnienie wielu protokołów warstwy 3 na jednej karcie sieciowej (co było problemem przed popularyzacją IP), wprowadzono standard IEEE 802.2 Logical Link Control (LLC).
Ramka 802.2 LLC „chowa się” wewnątrz pola danych ramki 802.3. W tym scenariuszu pole Długość/Typ zawiera *długość*, a pierwsze bajty pola danych stają się nagłówkiem LLC.
Ramka 802.3 z nagłówkiem LLC (802.2) i SNAP:
+---------+---------+-----------+-------------------------------------------------+---------+
| NAGŁÓWEK ETHERNET 802.3 ... | POLE DANYCH (zawiera teraz LLC) | FCS |
+---------+---------+-----------+-------------------------------------------------+---------+
| DŁUGOŚĆ | <-------------- Pole Danych 802.3 ------------> |
| (≤ 1500) | +---------+---------+---------+---------------+ |
| | | DSAP | SSAP | KONTROLA| DANE (np. SNAP)| |
| | | (1 bajt)| (1 bajt)| (1-2B) | ... | |
| | +---------+---------+---------+---------------+ |
| | <------- Nagłówek 802.2 LLC ----> |
Nagłówek LLC składa się z:
- DSAP (Destination Service Access Point) i SSAP (Source Service Access Point): Działają jak „porty” dla warstwy 2, wskazując, który protokół wyższego rzędu ma obsłużyć dane (np.
0x06
dla IP wczesnych implementacji). - Kontrola (Control): Definiuje typ usługi (np. bezpołączeniowa).
Aby zachować kompatybilność z polem EtherType (którego nie ma w „czystej” ramce 802.3+LLC), wprowadzono rozszerzenie SNAP (Subnetwork Access Protocol). Nagłówek SNAP jest umieszczany wewnątrz pola danych LLC.
Szczegół pola danych z LLC i SNAP:
+---------+---------+---------+-------------------+---------------+-------------------+
| DSAP | SSAP | KONTROLA| OUI | PID | DANE... (np. IP) |
| (0xAA) | (0xAA) | (0x03) | (3 bajty) | (2 bajty) | |
+---------+---------+---------+-------------------+---------------+-------------------+
<------- LLC (3B) ------> <--------- SNAP (5B) -------->
- Gdy DSAP i SSAP mają wartość
0xAA
, a Kontrola0x03
, oznacza to obecność nagłówka SNAP. - OUI (Organizationally Unique Identifier) (3 bajty): Zazwyczaj
0x00-00-00
dla protokołów EtherType. - PID (Protocol ID) (2 bajty): To jest właśnie „odzyskane” pole EtherType! Np.
0x0800
dla IPv4.
0x0800
), a nagłówki LLC/SNAP nie są stosowane dla ruchu IP. Ramki 802.2 LLC można jeszcze spotkać w niektórych specyficznych protokołach sieciowych (np. w sieciach przemysłowych lub starszych standardach jak IPX/SPX), ale dla codziennego ruchu internetowego, Ethernet II jest standardem.Serce ładunku – MTU (Maximum Transmission Unit)
Przejdźmy do kluczowego zagadnienia: rozmiaru pola danych. MTU (Maximum Transmission Unit) to parametr definiujący maksymalny rozmiar pakietu warstwy 3 (np. IP), który może być przeniesiony w polu danych (ładunku) ramki warstwy 2.
Kluczowe fakty na temat MTU w kontekście Ethernetu:
- Standardowe MTU: Dla klasycznego Ethernetu (i Fast Ethernet, Gigabit Ethernet) standardowe MTU wynosi 1500 bajtów. Oznacza to, że maksymalny pakiet IP, jaki „zmieści się” w ramce, to 1500 bajtów.
- MTU a Rozmiar Ramki: MTU (1500 B) + Nagłówek Ethernet (14 B: 6B MAC Dst + 6B MAC Src + 2B Typ) + Stopka Ethernet (4 B: FCS) = 1518 bajtów. To jest maksymalny rozmiar *całej* ramki Ethernet (nie licząc preambuły i SFD).
- Minimalny Rozmiar Ładunku: Jak wspomniano, minimalny rozmiar *pola danych* to 46 bajtów. Jeśli pakiet IP jest mniejszy (np. sama odpowiedź ICMP Echo lub pakiet TCP ACK), warstwa łącza danych automatycznie doda wypełnienie (padding), aby osiągnąć ten próg. Minimalny rozmiar całej ramki to 64 bajty (14B nagłówek + 46B ładunku + 4B FCS).
- Jumbo Frames (Wielkie Ramki): W sieciach o wysokiej przepustowości (głównie Gigabit Ethernet i szybszych), szczególnie w centrach danych i sieciach SAN (Storage Area Network), standardowe MTU 1500 bajtów jest nieefektywne. Wprowadzono więc „Jumbo Frames”, które pozwalają na MTU większe niż 1500, zazwyczaj 9000 bajtów. Wymaga to jednak, aby *wszystkie* urządzenia na ścieżce (karty sieciowe, switche, routery) obsługiwały i miały skonfigurowany ten sam, większy rozmiar MTU.
MTU, fragmentacja i narzut administracyjny
Rozmiar MTU ma bezpośredni wpływ na wydajność sieci. Kluczowym pojęciem jest tutaj narzut administracyjny (overhead). Narzutem nazywamy wszystkie te bajty, które musimy wysłać, a które nie są właściwymi danymi użytkownika (np. nagłówki TCP, IP i Ethernet).
Załóżmy, że chcemy wysłać dane przez TCP/IP w standardowej ramce Ethernet:
- Narzut Warstwy 2 (Ethernet): 14 bajtów nagłówka + 4 bajty FCS = 18 bajtów.
- Narzut Warstwy 3 (IP): Standardowy nagłówek IPv4 = 20 bajtów.
- Narzut Warstwy 4 (TCP): Standardowy nagłówek TCP = 20 bajtów.
Całkowity „podstawowy” narzut na przesłanie jakichkolwiek danych TCP wynosi więc 58 bajtów (18 + 20 + 20).
Problem Fragmentacji
MTU określa maksymalny rozmiar *jednego* pakietu. Co się stanie, jeśli router (Warstwa 3) otrzyma pakiet o rozmiarze 1500 bajtów i musi go przesłać przez łącze o MTU 1400 bajtów (np. tunel VPN lub łącze PPPoE)?
Router musi dokonać fragmentacji. Dzieli on pakiet IP o rozmiarze 1500 bajtów na dwa mniejsze pakiety (np. jeden 1400B i drugi 100B + nagłówek IP). Fragmentacja jest bardzo niepożądana:
- Obciąża CPU: Router musi aktywnie przetwarzać i dzielić pakiety.
- Zwiększa narzut: Drugi (i każdy kolejny) fragment musi mieć własny nagłówek IP.
- Problemy z retransmisją: Jeśli zginie choćby jeden fragment, cała oryginalna paczka danych musi być retransmitowana.
- Odbiorca składa pakiety: To host docelowy musi złożyć fragmenty w całość, co również zużywa zasoby.
Dlatego kluczowe jest utrzymanie spójnego MTU na całej ścieżce (tzw. Path MTU) lub używanie mechanizmów jak MSS Clamping, które instruują hosty, aby wysyłały mniejsze segmenty TCP, mieszczące się w MTU ścieżki.
Obliczanie narzutu administracyjnego
Sprawdźmy, jak procentowo wygląda narzut administracyjny w zależności od rozmiaru MTU. W naszych obliczeniach zakładamy przesyłanie danych TCP/IP, gdzie całkowity narzut na pakiet wynosi 58 bajtów (18B L2 + 20B L3 + 20B L4).
Wzór na efektywność: Efektywność = (Dane Użytkownika) / (Całkowity Rozmiar Ramki)
Wzór na narzut: Narzut % = (Całkowity Narzut) / (Całkowity Rozmiar Ramki) * 100%
Scenariusz | MTU (Rozmiar Pakietu IP) | Dane Użytkownika (TCP Payload) | Całkowity Narzut (L2+L3+L4) | Całkowity Rozmiar Ramki (L2) | Narzut % | Efektywność % |
---|---|---|---|---|---|---|
Standardowy Ethernet | 1500 B | 1500 – 20 (IP) – 20 (TCP) = 1460 B | 58 B | 1460 (Dane) + 58 (Narzut) = 1518 B | (58 / 1518) * 100% = ~3.82% | (1460 / 1518) * 100% = ~96.18% |
Jumbo Frame | 9000 B | 9000 – 20 (IP) – 20 (TCP) = 8960 B | 58 B | 8960 (Dane) + 58 (Narzut) = 9018 B | (58 / 9018) * 100% = ~0.64% | (8960 / 9018) * 100% = ~99.36% |
Stare Łącza (np. Dial-up) | 576 B | 576 – 20 (IP) – 20 (TCP) = 536 B | 58 B | 536 (Dane) + 58 (Narzut) = 594 B | (58 / 594) * 100% = ~9.76% | (536 / 594) * 100% = ~90.24% |
Minimalna Ramka (np. ACK) | 40 B (IP 20B + TCP 20B) | 0 B | 40 B (IP+TCP) + 18 B (Ethernet) = 58 B | 64 B (Ramka musi mieć min. 64B, więc L2 dodaje 6B wypełnienia) | (64 / 64) * 100% = 100% | (0 / 64) * 100% = 0% |
Analiza Tabeli
Wnioski są bardzo wyraźne:
- Przejście ze standardowego MTU 1500 na Jumbo Frame 9000 zmniejsza procentowy narzut administracyjny ponad 6-krotnie (z 3.82% do 0.64%). W przypadku przesyłania terabajtów danych w sieci SAN ma to gigantyczne znaczenie – mniej ramek do przetworzenia przez switche i karty sieciowe, mniejsze obciążenie CPU.
- Małe pakiety (jak te z MTU 576 B) są bardzo nieefektywne – prawie 10% transferu to same nagłówki.
- Pakiety kontrolne (jak TCP ACK bez danych) mają 100% narzutu, ale są niezbędne do działania protokołu. Na szczęście są małe i nie stanowią większości ruchu.
Konfiguracja MTU w praktyce (Linux i RouterOS)
Zmiana MTU jest prostą operacją administracyjną, ale należy ją wykonywać ostrożnie. Niespójne MTU w ramach jednego segmentu sieci (VLAN) może prowadzić do poważnych problemów z komunikacją (tzw. „MTU black hole”).
Linux (iproute2)
W nowoczesnych systemach Linux do zarządzania siecią służy pakiet iproute2
(polecenie ip
).
# Sprawdzenie aktualnego MTU dla interfejsu eth0 ip addr show eth0 # Przykładowy output: # 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ... # Ustawienie MTU na 9000 (Jumbo Frame) dla interfejsu eth0 # Wymagane uprawnienia roota (użyj sudo) sudo ip link set dev eth0 mtu 9000 # Weryfikacja zmiany ip addr show eth0 # 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc ... # (Starsza, przestarzała metoda używająca 'ifconfig') # sudo ifconfig eth0 mtu 9000
Aby zmiana była trwała, należy ją zapisać w odpowiednich plikach konfiguracyjnych dystrybucji (np. /etc/network/interfaces
w Debian/Ubuntu lub pliki w /etc/sysconfig/network-scripts/
w RHEL/CentOS).
RouterOS (MikroTik)
W systemie RouterOS firmy MikroTik konfiguracji dokonujemy w terminalu lub przez interfejs WinBox/WebFig. Składnia terminalowa jest bardzo intuicyjna.
# Sprawdzenie aktualnego MTU dla wszystkich interfejsów ethernet /interface ethernet print # Przykładowy output: # Flags: X - disabled, R - running, S - slave # # NAME MTU L2MTU MAX-L2MTU MAC-ADDRESS # 0 R ether1 1500 1518 10226 D4:CA:6D:XX:XX:XX # 1 R ether2 1500 1518 10226 D4:CA:6D:XX:XX:XY # Zmiana MTU na 9000 dla interfejsu 'ether1' /interface ethernet set [find name="ether1"] mtu=9000 # Weryfikacja zmiany /interface ethernet print # # NAME MTU L2MTU MAX-L2MTU MAC-ADDRESS # 0 R ether1 9000 9018 10226 D4:CA:6D:XX:XX:XX
Warto zauważyć, że RouterOS rozróżnia MTU (MTU warstwy 3, czyli rozmiar pakietu IP) oraz L2MTU (maksymalny rozmiar całej ramki Ethernet L2). Zmiana MTU automatycznie dostosowuje L2MTU (9000 + 18 = 9018, jeśli karta wspiera Jumbo Frames, co widać po `MAX-L2MTU`).
Wnioski
Ramka Ethernet, choć jej koncepcja ma dekady, pozostaje cichym bohaterem nowoczesnej komunikacji. Jej struktura (802.3 i historyczna 802.2) została zaprojektowana z myślą o prostocie i wydajności. Kluczowy parametr, jakim jest MTU, definiuje kompromis między wydajnością a opóźnieniami.
- Standardowe MTU 1500 jest złotym środkiem, zapewniającym świetną wydajność w większości zastosowań i kompatybilność z globalnym Internetem.
- Jumbo Frames (MTU 9000) oferują drastyczne zmniejszenie narzutu administracyjnego, co jest kluczowe w sieciach o ultrawysokiej przepustowości (np. 10/40/100 GbE) dedykowanych do specyficznych zadań, jak składowanie danych (iSCSI, NFS) czy obliczenia klastrowe.
Zrozumienie, jak MTU wpływa na fragmentację i narzut, pozwala administratorom sieci świadomie projektować infrastrukturę, która jest nie tylko szybka, ale przede wszystkim stabilna i wydajna.