1/23 Karta sieciowa PCI Ethernet – Budowa i konfiguracja

Analiza techniczna karty sieciowej PCI na przykładzie układów Realtek RTL8139 / Intel PRO/100

Druga część poświęcona jest konfiguracji interfejsu sieciowego za pomocą polecenia ip w systemie Linux oraz poleceń konfiguracyjnych interfejsu przełącznika Cisco IOS.

Prezentacja przedstawia budowę fizyczną i działanie logiczne karty sieciowej PCI Ethernet (NIC).

Omawiamy elementy składowe: kontroler MAC/PHY (RTL8139 / RTL8169), pamięć EEPROM 93C46, gniazdo Boot ROM, transformatory izolujące, diody LED, złącze PCI/PCIe oraz konfigurację w systemie Linux i na przełączniku Cisco.

Nowością w tej edycji są ślady sieciowe (tcpdump) ilustrujące rzeczywistą pracę karty NIC w segmencie LAN.

Karta sieciowa PCI (Peripheral Component Interconnect) stanowiła standardowy interfejs rozszerzeń dla komputerów PC przez całą drugą połowę lat 90. i pierwszą dekadę XXI wieku.

W przeciwieństwie do starszych kart ISA, karty PCI korzystały z magistrali o przepustowości 133 MB/s (32-bit, 33 MHz), co eliminowało wąskie gardło między kartą sieciową a pamięcią RAM.

Układ Realtek RTL8139 (Fast Ethernet 100 Mbps) jest jednym z najszerzej stosowanych układów w historii kart sieciowych dzięki niskiej cenie i zgodności z systemami operacyjnymi.

Jego następca, RTL8169 (Gigabit Ethernet), przeniósł technologię na poziom 1 Gbps.

Analiza tych kontrolerów pozwala zrozumieć architekturę karty NIC – od sygnałów na złączu PCI, przez wewnętrzną pamięć buforową (Tx/Rx FIFO), po interfejs magnetyczny RJ-45.

Prezentacja obejmuje zarówno aspekty sprzętowe, jak i praktyczne zagadnienia konfiguracji i diagnostyki w systemie Linux oraz na przełącznikach Cisco.

Umiejętność identyfikacji komponentów na karcie sieciowej oraz konfiguracji interfejsów sieciowych jest niezbędna w codziennej pracy inżyniera sieciowego.

2/23 Streszczenie

Kluczowe koncepcje budowy i konfiguracji karty NIC PCI

Kluczowe elementy sprzętowe to kontroler MAC/PHY (Realtek RTL8139 / Intel 82557), pamięć EEPROM z adresem, izolujące transformatory impulsowe dla portu RJ-45 oraz interfejs magistrali PCI/PCIe.

W części konfiguracyjnej omawiamy: ustawienie adresu IP i maski podsieci z użyciem ip addr, konfigurację interfejsu w Cisco IOS (tryb dupleksu, szybkość, VLAN), diagnostykę stanu łącza oraz statystyki interfejsu.

Prezentujemy również schemat blokowy przepływu danych.

Karta sieciowa PCI realizuje transmisję danych między magistralą PCI a medium sieciowym.

W części konfiguracyjnej przejdziemy od podstawowego polecenia ip link w systemie Linux przez konfigurację interfejsu na przełączniku Cisco aż po zaawansowaną diagnostykę z wykorzystaniem ethtool i tcpdump.

Zdobyta wiedza pozwoli studentom na samodzielną konfigurację i diagnostykę interfejsów sieciowych w rzeczywistych środowiskach produkcyjnych.

Głównym celem tego wykładu jest praktyczne zapoznanie studentów z budową i konfiguracją karty sieciowej PCI.

W odróżnieniu od starszej karty ISA (omówionej w oddzielnej prezentacji), karta PCI posiada kilka istotnych usprawnień architektonicznych: magistrala PCI umożliwia automatyczne wykrywanie zasobów (Plug and Play), wyższe prędkości transmisji oraz mniejsze opóźnienia dostępu do pamięci.

W części sprzętowej skupimy się na analizie zdjęcia karty PCI Ethernet (NICpci.jpg), identyfikując poszczególne komponenty.

Wyjaśnimy rolę kontrolera MAC/PHY, który w nowszych kartach łączy funkcje warstwy fizycznej i łącza danych w jednym układzie scalonym, eliminując potrzebę oddzielnych układów transceivera.

3/23 Literatura i dokumentacja techniczna

Materiały źródłowe

  • Książki:
    • Andrew S. Tanenbaum – Sieci komputerowe, Helion.
    • W. Richard Stevens – TCP/IP Illustrated, Addison-Wesley.
  • Dokumentacja techniczna:
    • Realtek – RTL8139 Datasheet (kontroler Fast Ethernet).
    • Realtek – RTL8169 / RTL8111 Datasheet (kontroler Gigabit Ethernet).
    • Intel – 82557/82559 Fast Ethernet Controller Datasheet.
  • Dokumentacja systemowa:
    • Linux man pages: ip(8), ethtool(8), tc(8).
    • Cisco – IOS Interface Configuration Guide.
Dla systemu Linux kluczowe są strony podręcznika man dla poleceń ip oraz ethtool.

Polecenie ethtool -i eth0 pozwala sprawdzić sterownik i wersję firmware karty, a ethtool -S eth0 wyświetla szczegółowe statystyki sprzętowe.

Praktyczna praca z kartami sieciowymi wymaga dostępu do rzetelnej dokumentacji technicznej.

Karty katalogowe układów Realtek i Intel zawierają szczegółowe informacje o mapach rejestrów, kontrolerze DMA oraz sposobie obsługi przerwań.

W przypadku przełączników Cisco warto zapoznać się z oficjalną dokumentacją konfiguracji interfejsów, która opisuje szczegółowo wszystkie parametry warstwy fizycznej oraz warstwy łącza danych.

4/23 Budowa fizyczna karty PCI Ethernet – analiza komponentów

Identyfikacja elementów na płycie PCB karty PCI

  1. Złącze PCI (32-bit, 5 V): 2 rzędy po 62 styki, umożliwia komunikację z chipsetem płyty głównej.
  2. Kontroler MAC/PHY: Scalone układy takie jak RTL8139 (100 Mbps) lub RTL8169 (1 Gbps) – największe układy na karcie.
  3. Pamięć EEPROM 93C46: 8-pinowy układ przechowujący adres MAC i konfigurację.
  4. Gniazdo Boot ROM: 28-pinowe gniazdo DIP dla opcjonalnej pamięci rozruchowej PXE.
  5. Transformatory magnetyczne: Moduł izolujący dla portów RJ-45 (często wbudowany w gniazdo MagJack).
  6. Diody LED: Sygnalizacja aktywności (ACT) i połączenia (LINK).
  7. Port RJ-45: Gniazdo 8P8C dla skrętki miedzianej (10/100/1000BASE-T).

Na podstawie zdjęcia karty PCI Ethernet identyfikujemy następujące elementy:

Obok niego znajduje się mały 8-pinowy układ EEPROM (np. 93C46 lub 93C56), który przechowuje unikalny adres MAC oraz parametry konfiguracyjne, takie jak domyślny tryb autonegocjacji czy ustawienia oszczędzania energii.

Karta PCI Ethernet 10/100/1000 Mbps to zazwyczaj jednostronna płytka PCB z ozłacanym złączem krawędziowym PCI.

W przeciwieństwie do starszych kart ISA, w których kontroler MAC i transceiver PHY były oddzielnymi układami, w kartach PCI obie funkcje są zintegrowane w jednym chipie (MAC/PHY).

Największym układem na płytce jest kontroler MAC/PHY, który implementuje całą warstwę łącza danych i fizyczną.

Blisko złącza RJ-45 znajdują się transformatory magnetyczne, które zapewniają izolację galwaniczną między kartą a kablem sieciowym do 1500 V RMS.

W nowoczesnych kartach transformatory są zintegrowane w obudowie gniazda RJ-45 (tzw. MagJack), co oszczędza miejsce na PCB.

Diody LED informują o stanie połączenia (LINK – zielona) i aktywności (ACT – migająca żółta).

5/23 Interfejs magistrali PCI – komunikacja z płytą główną

PCI (Peripheral Component Interconnect) – standard rozszerzeń

  • PCI 2.x (32-bit, 33 MHz): Przepustowość 133 MB/s (1064 Mbps) – wystarczająca dla 100/1000 Mbps.
  • PCI-X (64-bit, 133 MHz): Przepustowość 1 GB/s – dla serwerów i kart Gigabit.
  • PCI Express (PCIe): Szeregowa magistrala typu point-to-point z liniami (lanes). PCIe x1 = 250 MB/s w każdą stronę (Gen1).
Wykrywanie karty w systemie: lspci | grep Ethernet – wyświetla urządzenia sieciowe na magistrali PCI.

Magistrala PCI zastąpiła ISA, oferując znacznie wyższą przepustowość i automatyczną konfigurację PnP:

Magistrala PCI została wprowadzona przez firmę Intel w 1992 roku jako następca ISA.

Kluczową innowacją był mechanizm automatycznej konfiguracji – podczas uruchamiania komputera BIOS odczytuje z przestrzeni konfiguracyjnej PCI (PCI Configuration Space) informacje o każdym urządzeniu, w tym identyfikatory producenta (Vendor ID) i urządzenia (Device ID), oraz przydziela im adresy I/O, pamięci i przerwania.

W przypadku kart sieciowych PCI, kontroler DMA umożliwia bezpośredni transfer pakietów między buforem SRAM karty a pamięcią RAM komputera bez angażowania procesora (CPU offload).

Mechanizm bus mastering pozwala karcie przejąć kontrolę nad magistralą i przeprowadzić transfer z maksymalną szybkością, co znacząco redukuje opóźnienia.

Współczesne karty sieciowe korzystają z magistrali PCI Express (PCIe), która jest połączeniem szeregowym typu point-to-point.

Każda linia (lane) PCIe Gen1 oferuje przepustowość 250 MB/s w każdą stronę, Gen2 – 500 MB/s, a Gen3 – 1 GB/s.

Karty Gigabit Ethernet zwykle używają PCIe x1, natomiast karty 10 GbE wymagają PCIe x4 lub x8.

6/23 Kontroler MAC/PHY – Realtek RTL8139 / RTL8169

Zintegrowany układ warstwy MAC i PHY

  • RTL8139 (Fast Ethernet): Zgodność z PCI 2.2, wbudowana pamięć SRAM 8 KB jako bufor kołowy, obsługa 10/100 Mbps, autonegocjacja.
  • RTL8169 (PCI) / RTL8111 (PCIe) (Gigabit Ethernet): Wsparcie PCI/PCIe, bufor 16-32 KB, kodowanie PAM-5, obsługa jumbo frames do 9 KB, TSO (TCP Segmentation Offload).
  • Intel I217/I219: Zintegrowane kontrolery w chipsecie, obsługa Wake-on-LAN, zarządzanie energią EEE (Energy Efficient Ethernet).

W przeciwieństwie do ISA NIC, w której MAC i PHY były osobnymi układami, karty PCI stosują zintegrowany kontroler MAC/PHY:

Linux używa sterownika 8139too dla RTL8139 i r8169 dla RTL8169.

Kontroler RTL8139 firmy Realtek jest jednym z najpopularniejszych układów Fast Ethernet w historii.

Jego sukces wynikał z niskiego kosztu (poniżej 1 USD w dużych ilościach), prostoty implementacji oraz obsługi przez wszystkie główne systemy operacyjne (Linux, Windows, DOS).

Wewnętrzna architektura RTL8139 obejmuje kontroler PCI z mechanizmem bus mastering DMA, pamięć SRAM 8 KB zorganizowaną jako bufor kołowy dla pakietów Rx/Tx, oraz zintegrowany transceiver PHY z obsługą 10BASE-T i 100BASE-TX.

Kodowanie liniowe dla 10BASE-T to Manchester, a dla 100BASE-TX – 4B5B z MLT-3.

Kontroler RTL8169/RTL8111 wprowadza obsługę Gigabit Ethernet ze złożonym kodowaniem PAM-5, które wykorzystuje 5 poziomów napięcia na każdej z czterech par skrętki, co pozwala osiągnąć 250 Mbps na parę.

Dodatkowo układy te oferują sprzętowe odciążenie (offload) obliczania sum kontrolnych TCP/IP, co redukuje obciążenie procesora podczas szybkiej transmisji.

7/23 Pamięć EEPROM 93C46 – przechowywanie adresu MAC i konfiguracji

Seryjna pamięć nieulotna dla karty NIC

  • Adres MAC (48 bitów): Unikalny, fabrycznie nadany adres w pierwszych 3 słowach pamięci.
  • Konfiguracja interfejsu: Domyślna prędkość, dupleks, włączenie autonegocjacji, Wake-on-LAN.
  • Identyfikacja producenta: Subsystem Vendor ID i Subsystem Device ID dla PCI.
  • Suma kontrolna: Zabezpiecza dane przed przypadkowym uszkodzeniem pamięci.
Odczyt EEPROM: ethtool -e eth0 – odczyt zawartości EEPROM karty sieciowej.

Układ 93C46 (lub 93C56/93C66 w nowszych kartach) przechowuje dane konfiguracyjne:

Narzędzie ethtool -e eth0 pozwala na odczyt surowej zawartości EEPROM w formacie hex.

Należy zachować ostrożność – zapis do EEPROM (ethtool -E) może spowodować nieodwracalną zmianę adresu MAC karty, choć nowsze karty przechowują adres w obszarze jednokrotnego zapisu (OTP).

Szeregowa pamięć EEPROM typu 93C46 komunikuje się z kontrolerem MAC/PHY przez 4-przewodowy interfejs Microwire (CS, SK, DI, DO).

Pojemność 1 Kb (64 słowa 16-bitowe) jest wystarczająca do przechowania podstawowych parametrów karty.

Podczas inicjalizacji – zaraz po resecie sprzętowym – kontroler odczytuje dane z EEPROM i przepisuje je do swoich wewnętrznych rejestrów.

Jeśli pamięć jest uszkodzona lub pusta, karta może użyć adresu zapisanego w samym kontrolerze (tzw. adres zastępczy).

8/23 Gniazdo Boot ROM / PXE – zdalny rozruch przez sieć

Preboot Execution Environment – standard rozruchu sieciowego

  • Funkcja PXE: Wbudowany w kartę klient protokołów DHCP i TFTP umożliwiający pobranie obrazu systemu operacyjnego przez sieć.
  • Proces rozruchu: BIOS ładuje firmware PXE z pamięci ROM karty → PXE wysyła DHCP Discover z opcją 60 → serwer DHCP zwraca adres IP i adres serwera TFTP → PXE pobiera plik konfiguracyjny i obraz jądra → uruchamia system.
  • Zastosowanie: Stacje bezdyskowe w laboratoriach, cienkie klienty, instalacja OS w centrach danych.

Wiele kart PCI posiada gniazdo na pamięć Boot ROM lub zintegrowaną obsługę PXE:

Standard PXE (Preboot Execution Environment) został opracowany przez firmę Intel w 1999 roku i stanowi rozwinięcie idei Boot ROM znanych z kart ISA.

Kluczową różnicą jest to, że w nowoczesnych kartach firmware PXE jest zintegrowany w pamięci flash kontrolera, a nie w osobnym układzie EPROM.

Podczas rozruchu opcja PXE jest wywoływana przez BIOS/UEFI (jeśli jest włączona w ustawieniach).

Klient PXE wysyła zapytanie DHCP z opcjami 60 (Class Identifier – ustawiany na "PXEClient") i 61 (Client Identifier – adres MAC).

Serwer DHCP odpowiada, przydzielając adres IP oraz wskazując adres serwera TFTP i ścieżkę do pliku rozruchowego.

W środowiskach korporacyjnych PXE jest wykorzystywany do automatyzacji instalacji systemu operacyjnego przez sieć przy użyciu narzędzi takich jak Windows Deployment Services (WDS) lub Linux PXE Server (dnsmasq + tftpd).

Eliminuje to potrzebę używania nośników fizycznych (DVD, pendrive) przy wdrażaniu setek komputerów.

9/23 Konfiguracja karty NIC w systemie Linux – polecenie ip

Narzędzie ip z pakietu iproute2 – nowoczesne zarządzanie siecią

# Wyświetlenie wszystkich interfejsów i ich adresów MAC/IP
ip link show

# Włączenie / wyłączenie interfejsu
ip link set eth0 up
ip link set eth0 down

# Przypisanie adresu IP z maską
ip addr add 192.168.1.10/24 dev eth0

# Usunięcie adresu IP
ip addr del 192.168.1.10/24 dev eth0

# Wyświetlenie szczegółowych statystyk interfejsu (Rx/Tx)
ip -s link show eth0

W systemie Linux konfigurację interfejsów sieciowych wykonuje się za pomocą polecenia ip (zastępuje starsze ifconfig):

Narzędzie ip z pakietu iproute2 jest współczesnym standardem zarządzania siecią w systemie Linux.

Zostało stworzone przez Alexeya Kuznetsova i jest rozwijane razem z jądrem systemu Linux.

W przeciwieństwie do starszego ifconfig, ip obsługuje pełny zakres funkcji sieciowych: adresację IPv4 i IPv6, routing, tunelowanie, politykę QoS, mostkowanie (bridge) i przestrzenie nazw sieci (network namespaces).

Polecenie ip link show wyświetla listę wszystkich interfejsów sieciowych wraz z adresem MAC (link/ether) oraz stanem (UP/DOWN).

Kolumna state UP oznacza, że karta jest aktywna na poziomie warstwy fizycznej (wykryto nośną).

Do szczegółowej diagnostyki fizycznego interfejsu służy polecenie ethtool.

Przykładowo: ethtool eth0 – wyświetli detekcję kabla, prędkość i dupleks; ethtool -S eth0 – pokaże statystyki sprzętowe (kolizje, błędy CRC, utratę ramek).

Polecenie ethtool -i eth0 – identyfikuje sterownik i wersję firmware.

10/23 Diagnostyka karty NIC w Linux – ethtool

Narzędzie ethtool – zaawansowana diagnostyka warstwy fizycznej

# Podstawowe informacje o interfejsie
ethtool eth0
Settings for eth0:
  Supported ports: [ TP ]
  Supported link modes:  10baseT/Half 10baseT/Full 
  100baseT/Half 100baseT/Full 
  Supported pause frame use: No
  Supports auto-negotiation: Yes
  Advertised link modes:  10baseT/Half 10baseT/Full 
  100baseT/Half 100baseT/Full 
  Link partner advertised link modes:  100baseT/Full
  Speed: 100Mb/s
  Duplex: Full
  Auto-negotiation: on
  Link detected: yes

# Statystyki sprzętowe (Rx/Tx packets, errors, dropped)
ethtool -S eth0
Uwaga: wyłączenie autonegocjacji może powodować problemy z dopasowaniem parametrów (niezgodność).

Polecenie ethtool jest podstawowym narzędziem diagnostycznym dla fizycznych interfejsów sieciowych w systemie Linux.

Komenda ethtool eth0 wyświetla: obsługiwane tryby (10/100/1000 Mbps, Half/Full Duplex), stan autonegocjacji, uzgodnioną prędkość i dupleks z partnerem (przełącznikiem) oraz stan detekcji nośnej (Link detected).

Flaga Auto-negotiation: on oznacza, że karta automatycznie negocjuje prędkość i dupleks z przełącznikiem.

W przypadku problemów z połączeniem (np. gdy przełącznik obsługuje tylko 100/Full) można wymusić ustawienia: ethtool -s eth0 speed 100 duplex full autoneg off.

Statystyki ethtool -S eth0 zawierają dane takie jak: rx_packets, tx_packets, rx_errors, tx_errors, collisions, rx_crc_errors, rx_fifo_errors.

Wzrost liczby błędów CRC wskazuje na uszkodzony kabel lub zakłócenia elektromagnetyczne, a wzrost kolizji może sugerować problem z dupleksem (half zamiast full).

11/23 Konfiguracja interfejsu przełącznika Cisco IOS

Polecenia konfiguracyjne interfejsu Ethernet na przełączniku Cisco

! Wejście w tryb konfiguracji interfejsu
Switch> enable
Switch# configure terminal
Switch(config)# interface GigabitEthernet0/1

! Ustawienie opisu interfejsu
Switch(config-if)# description Link do serwera_1

! Wymuszenie prędkości i dupleksu
Switch(config-if)# speed 1000
Switch(config-if)# duplex full

! Włączenie autonegocjacji (domyślnie)
Switch(config-if)# speed auto

! Przypisanie do VLAN
Switch(config-if)# switchport mode access
Switch(config-if)# switchport access vlan 10

! Wyłączenie / włączenie portu
Switch(config-if)# shutdown
Switch(config-if)# no shutdown

Po wejściu w tryb konfiguracji interfejsu (interface GigabitEthernet0/1) można ustawić opis (description), który identyfikuje przeznaczenie portu (np. "Server-1", "User-John").

VLAN-y konfiguruje się poleceniem switchport access vlan.

Polecenia speed i duplex pozwalają wymusić parametry połączenia – domyślnie autonegocjacja jest włączona (speed auto).

Aby sprawdzić konfigurację interfejsu, używa się komendy show running-config interface GigabitEthernet0/1 lub show interfaces GigabitEthernet0/1, która wyświetla stan portu, prędkość, liczbę odebranych/wysłanych pakietów oraz ewentualne błędy.

Konfiguracja interfejsu przełącznika Cisco IOS jest kluczową umiejętnością każdego administratora sieci.

Polecenia konfiguracyjne interfejsu pozwalają na ustawienie parametrów warstwy fizycznej (prędkość, dupleks), warstwy łącza danych (VLAN, trunking) oraz diagnostykę (statystyki, loopback).

12/23 Diagnostyka interfejsu przełącznika Cisco – show commands

Polecenia show do diagnostyki portów Ethernet

! Szczegółowy stan interfejsu
Switch# show interfaces GigabitEthernet0/1
GigabitEthernet0/1 is up, line protocol is up 
  Hardware is Gigabit Ethernet, address is 001a.2b3c.4d5e
  MTU 1500 bytes
  Speed 1000 Mbps, Duplex Full
  5 minute input rate 1234000 bits/sec, 420 packets/sec
  5 minute output rate 5678000 bits/sec, 890 packets/sec
  Input queue: 0/2000 (size/max)
  Output queue: 0/2000 (size/max)

! Statystyki w skróconej formie
Switch# show interfaces summary

! Lista interfejsów up/down
Switch# show ip interface brief
Interpretacja: up/up = interfejs fizycznie sprawny i protokół działa. up/down = kabel podłączony, ale brak protokołu (np. błędny VLAN). down/down = brak połączenia kablowego.
Polecenie show interfaces to najważniejsze narzędzie diagnostyczne w Cisco IOS.

Polecenie clear counters resetuje liczniki statystyk.

W pierwszym wierszu wyświetlany jest stan: GigabitEthernet0/1 is up, line protocol is up.

Pierwsze "up" oznacza wykrycie nośnej (carrier – kabel podłączony), drugie "up" oznacza, że protokół warstwy łącza (np. VLAN) jest aktywny.

Wśród wyświetlanych parametrów znajdują się: adres MAC interfejsu, MTU (standardowo 1500, można zwiększyć do 9000 dla jumbo frames), prędkość i dupleks, bieżące obciążenie w bitach na sekundę, kolejki wejściowe i wyjściowe.

Jeśli kolejka się zapełnia (size bliski max), oznacza to przeciążenie portu.

W diagnostyce błędów należy zwrócić uwagę na: runts (ramki krótsze niż 64B), giants (ramki dłuższe niż 1518B), CRC errors (błędy sumy kontrolnej – uszkodzone kable), collisions (kolizje – normalne w half, nie powinny występować w full duplex).

13/23 Schemat blokowy karty sieciowej PCI – przepływ danych

Droga pakietu od pamięci RAM do kabla sieciowego

 ┌──────────────────────────────────────────────────────────┐
 │  RAM (pamięć systemowa)  │
 └──────────────────────┬───────────────────────────────────┘
  │ DMA (Bus Mastering)
  ▼
 ┌──────────────────────────────────────────────────────────┐
 │  Kontroler PCI / PCIe (interfejs magistrali)  │
 └──────────────────────┬───────────────────────────────────┘
  │
  ▼
 ┌──────────────────────────────────────────────────────────┐
 │  Bufor SRAM (Tx/Rx Ring Buffer) – pamięć karty  │
 └──────┬─────────────────────────────────────┬─────────────┘
  │ Tx (nadawanie)  │ Rx (odbiór)
  ▼  ▼
 ┌──────────────────┐  ┌────────────────────────────┐
 │  MAC (enkapsulacja│  │  MAC (dekapsulacja, CRC,  │
 │  ramki, CRC)  │  │  filtracja adresowa)  │
 └──────┬───────────┘  └─────────────┬──────────────┘
  │  │
  ▼  ▼
 ┌──────────────────────────────────────────────────────────┐
 │  PHY (kodowanie Manchester / 4B5B / PAM-5)  │
 └──────────────────────┬───────────────────────────────────┘
  │ Auto-MDIX
  ▼
 ┌──────────────────────────────────────────────────────────┐
 │  Transformatory magnetyczne (izolacja 1500V RMS)  │
 └──────────────────────┬───────────────────────────────────┘
  │
  ▼
 ┌──────────────────────────────────────────────────────────┐
 │  Gniazdo RJ-45 ←→ Kabel skrętki (do przełącznika)  │
 └──────────────────────────────────────────────────────────┘
  

Schemat blokowy przedstawia kompletną ścieżkę przepływu danych podczas transmisji i odbioru ramek Ethernet.

Gdy aplikacja wysyła dane, system operacyjny umieszcza pakiet w pamięci RAM i informuje sterownik karty o gotowości danych.

Sterownik zapisuje deskryptory pakietów do rejestrów DMA karty, która następnie (dzięki bus mastering) bezpośrednio odczytuje dane z pamięci RAM do swojego wewnętrznego bufora SRAM.

W przypadku nadawania (Tx), kontroler MAC odczytuje dane z bufora SRAM, dodaje preambułę, SFD, adresy MAC źródłowy i docelowy, pole EtherType oraz oblicza i dołącza sumę kontrolną CRC-32.

Następnie warstwa PHY koduje dane odpowiednim kodem liniowym (Manchester dla 10 Mbps, 4B5B dla 100 Mbps, PAM-5 dla 1 Gbps) i przesyła przez transformatory izolujące do gniazda RJ-45.

W przypadku odbioru (Rx), sygnał z kabla przechodzi przez transformatory (izolacja + odzyskanie sygnału różnicowego), jest dekodowany przez PHY, a następnie sprawdza adres docelowy, weryfikuje sumę kontrolną i w przypadku zgodności zapisuje ramkę do bufora SRAM.

Karta generuje przerwanie (IRQ), a sterownik systemu operacyjnego odczytuje ramkę z bufora przez DMA i przekazuje do stosu TCP/IP.

14/23 Przechwytywanie śladów sieciowych – interakcja z kartą NIC

Mechanizm przechwytywania pakietów – od kabla do aplikacji

  • PF_PACKET socket: tcpdump i Wireshark używają gniazd PF_PACKET (warstwa L2) do odczytu surowych ramek Ethernet bezpośrednio ze sterownika karty.
  • libpcap: Biblioteka abstrahująca dostęp do interfejsu – identyczny format pliku pcap dla tcpdump i Wireshark.
  • Tryb promiscuous: Karta NIC w trybie promiscuous przekazuje do jądra WSZYSTKIE ramki, nie tylko te zaadresowane do jej adresu MAC.
  • DMA → Ring Buffer → Kernel: Karta DMA zapisuje pakiety do pierścienia deskryptorów w pamięci RAM, skąd sterownik (NAPI) przekazuje je do systemu.
Polecenie: tcpdump -D – lista interfejsów dostępnych do przechwytywania. tcpdump -i eth0 -c 10 – przechwyć 10 pakietów na eth0.

tcpdump wykorzystuje bibliotekę libpcap, która otwiera gniazdo PF_PACKET typu SOCK_RAW (dla urządzeń fizycznych) lub SOCK_DGRAM (dla urządzeń any).

Gniazdo PF_PACKET odbiera ramki bezpośrednio z warstwy łącza danych, przed przetworzeniem przez stos TCP/IP jądra.

Oznacza to, że tcpdump widzi pakiety DOTARŁE do karty, niezależnie od tego, czy zostały zaakceptowane przez stos IP (np. ping z innej podsieci jest widoczny mimo odrzucenia przez firewall).

Tryb promiscuous włącza się automatycznie po uruchomieniu tcpdump – karta NIC przestaje filtrować ramki według adresu MAC.

W środowisku przełącznika (switch) tryb promiscuous nie wystarczy – potrzebne jest mirrorowanie portów (SPAN), ponieważ przełącznik nie przesyła ramek do portu, który nie jest adresatem.

Aby trwale wyłączyć promiscuous: tcpdump -p (capture only in non-promiscuous mode).

W systemie Linux można również użyć dropwatch do monitorowania utraty pakietów na poziomie jądra i sterownika.

15/23 Ślad ARP – rozpoznawanie adresów MAC przez kartę NIC

Analiza ramek ARP – żądanie i odpowiedź na poziomie warstwy MAC

# Wyczyszczenie tablicy ARP i przechwycenie żądania
sudo ip neigh flush all
sudo tcpdump -nn -e -i eth0 -c 4 arp

# Wyjście tcpdump:
14:23:05.123456 00:1a:2b:3c:4d:5e > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),
  length 42: Request who-has 192.168.1.1 tell 192.168.1.10, length 28
14:23:05.123789 00:aa:bb:cc:dd:ee > 00:1a:2b:3c:4d:5e, ethertype ARP (0x0806),
  length 60: Reply 192.168.1.1 is-at 00:aa:bb:cc:dd:ee, length 46

# Kluczowe obserwacje:
# 1. ARP Request: adres docelowy ff:ff:ff:ff:ff:ff (broadcast – wszystkie NIC)
# 2. ARP Reply: adres docelowy 00:1a:2b:3c:4d:5e (unicast – tylko karta żądająca)
# 3. Opcja -e pokazuje adresy MAC warstwy L2 (Ethernet)
# 4. EtherType 0x0806 identyfikuje ramkę ARP
Wniosek: Karta NIC odbiera ARP Request (broadcast), sprawdza adres IP – jeśli pasuje, odpowiada ARP Reply (unicast) z własnym MAC.

Adres MAC ff:ff:ff:ff:ff:ff to broadcast (rozgłoszeniowy) – każda karta sieciowa w segmencie odbiera tę ramkę.

W normalnym trybie karta NIC odfiltrowuje ramki, które nie są zaadresowane do jej MAC, nie są broadcastem ani multicastem, do którego subskrybuje.

ARP Request jest ramką broadcast – dlatego DOCIERA do wszystkich kart w sieci. Każda karta sprawdza, czy żądane IP jest jej własnym – jeśli nie, milczy.

W momencie odpowiedzi ARP Reply, ramka jest wysyłana bezpośrednio do adresu MAC żądającego (unicast) – tylko ta karta odbiera ramkę.

Polecenie tcpdump -nn -e arp pokazuje: znacznik czasu, adresy MAC źródłowy i docelowy, typ ramki (0x0806 = ARP), długość, typ ARP (Request/Reply) oraz adresy IP.

Jeśli ARP nie otrzyma odpowiedzi – komunikat "Destination Host Unreachable" – wina może leżeć po stronie NIC, kabla lub konfiguracji przełącznika (np. port-security blokujące nieznane MAC).

Opcja -nn wyłącza rozwiązywanie nazw hostów i portów – przyspiesza działanie i daje czystszy wynik analizy.

16/23 Ślad ICMP (ping) – ramka Ethernet widziana przez kartę NIC

Analiza pełnej ramki Ethernet z ładunkiem ICMP Echo

# Przechwycenie ping z widocznymi adresami MAC i IP
sudo tcpdump -nn -e -i eth0 -c 4 'icmp and host 8.8.8.8'

12:35:10.123456 00:1a:2b:3c:4d:5e > 00:aa:bb:cc:dd:ee, ethertype IPv4 (0x0800),
  length 98: 192.168.1.10 > 8.8.8.8: ICMP Echo Request, id 1, seq 1, length 64
12:35:10.123789 00:aa:bb:cc:dd:ee > 00:1a:2b:3c:4d:5e, ethertype IPv4 (0x0800),
  length 98: 8.8.8.8 > 192.168.1.10: ICMP Echo Reply, id 1, seq 1, length 64

# Struktura ramki Ethernet na poziomie NIC:
# [MAC dst][MAC src][EtherType][IP hdr][ICMP][FCS]
#  6B       6B       2B         20B     8B    4B  = 46B nagłówki + payload
# 00:1a:2b:3c:4d:5e → adres MAC karty źródłowej (NIC nadawcy)
# 00:aa:bb:cc:dd:ee → adres MAC bramy domyślnej (next-hop)
Uwaga: Adres MAC docelowy (00:aa:bb:cc:dd:ee) to MAC bramy, a nie hosta 8.8.8.8 – ponieważ 8.8.8.8 jest w innej sieci, ramka musi zostać przekazana przez router.

W powyższym śladzie widać kluczową cechę warstwy L2: adres MAC docelowy to nie adres hosta 8.8.8.8 (który jest w Internecie), ale adres MAC bramy domyślnej.

Karta NIC nadawcy enkapsuluje pakiet IP w ramkę Ethernet, ustawiając adres MAC bramy jako docelowy – to brama (router) będzie odpowiedzialna za dalsze przekazanie pakietu.

Całkowita długość ramki: 98 bajtów = 14B nagłówek Ethernet + 20B nagłówek IP + 8B ICMP + 56B danych ICMP (payload).

W przypadku ramek Ethernet minimalna długość to 64 bajty, maksymalna 1518 bajtów (bez tagu VLAN) lub 1522 (z tagiem 802.1Q).

Ramka krótsza niż 64B to "runt" – karta NIC odrzuca takie ramki jako uszkodzone (zliczane w statystykach ethtool jako rx_short_errors).

Ramka dłuższa niż 1518B to "giant" – również odrzucana (rx_long_errors w ethtool).

Opcja -e w tcpdump jest kluczowa do analizy na poziomie NIC – bez niej widoczne są tylko adresy IP (warstwa L3), a nie MAC (warstwa L2).

17/23 Tryb promiscuous – filtracja adresów MAC w karcie NIC

Jak karta NIC decyduje, które ramki przyjąć, a które odrzucić?

  • Tryb normalny (non-promiscuous): NIC porównuje docelowy adres MAC z własnym. Ramka jest przyjmowana TYLKO jeśli:
    • Adres MAC docelowy == własny adres MAC karty (unicast)
    • Adres MAC docelowy == ff:ff:ff:ff:ff:ff (broadcast)
    • Adres MAC docelowy == multicast, do którego karta subskrybuje
  • Tryb promiscuous: NIC przyjmuje WSZYSTKIE ramki docierające na jej interfejs fizyczny.
  • Tryb monitor (WLAN): Karta WiFi przechwytuje ramki nawet bez autoryzacji z punktem dostępowym.
Sprawdzenie trybu: ip link show eth0 – flaga PROMISC oznacza aktywny tryb promiscuous. tcpdump -p – wyłącza tryb promiscuous podczas przechwytywania.

Filtracja adresów MAC odbywa się w sprzęcie karty NIC (warstwa MAC) – nie angażuje procesora, dopóki ramka nie zostanie zaakceptowana.

Większość nowoczesnych kart NIC implementuje tablicę filtrów multicast (Multicast Filter Table) i Perfect Filter Array dla konkretnych adresów MAC.

Tryb promiscuous jest automatycznie włączany przez tcpdump, Wireshark i inne narzędzia do przechwytywania.

Nawet w trybie promiscuous, w środowisku przełącznika Ethernet, karta NIC otrzymuje tylko: (1) ramki bezpośrednio do niej zaadresowane, (2) ramki broadcast, (3) ramki multicast (jeśli subskrybuje), (4) ramki nieznane (unknown unicast flood) – gdy przełącznik nie zna portu docelowego.

Do przechwytywania ruchu między innymi hostami potrzebne jest mirrorowanie portów (SPAN, RSPAN, ERSPAN) lub fizyczny TAP (Test Access Point).

Komenda ip link show eth0 wyświetla flagi: UP, LOWER_UP, PROMISC – jeśli PROMISC jest widoczne, tryb promiscuous jest aktywny.

W systemie Linux stan promiscuous można sprawdzić w /sys/class/net/eth0/flags (0x100 = PROMISC).

18/23 Filtry BPF – wydajne przechwytywanie pakietów w jądrze

Berkeley Packet Filter – wirtualna maszyna filtrująca w kernelu

  • BPF (Berkeley Packet Filter): Wirtualna maszyna w jądrze Linux – kod filtrujący wykonywany w przestrzeni jądra, przed przekazaniem pakietu do aplikacji.
  • tcpdump wyrażenia: Każde wyrażenie (np. arp, icmp, port 80, ether host 00:1a:2b:3c:4d:5e) jest kompilowane do kodu BPF.
  • Zalety filtracji w jądrze: Pakiety niepasujące do filtra są odrzucane w sterowniku/jądrze – nie trafiają do przestrzeni użytkownika, co oszczędza CPU.
  • eBPF (extended BPF): Od Linux 3.18 – programowalne przetwarzanie w jądrze używane przez XDP, Cilium, Falco.
# BPF dla 'arp' – kod maszynowy filtra
tcpdump -dd arp
{ 0x28, 0, 0, 0x0000000c },    // ldh [12] – wczytaj EtherType
{ 0x15, 0, 1, 0x00000806 },   // jeq #0x806 jt 2 jf 3 – czy ARP?
{ 0x6, 0, 0, 0x00040000 },     // ret #262144 – przepuść
{ 0x6, 0, 0, 0x00000000 },     // ret #0 – odrzuć

# Statystyki przechwytywania – dropped by kernel
sudo tcpdump -i eth0 -c 1000
1000 packets captured
4523 packets received by filter
0 packets dropped by kernel

Filtr BPF dla wyrażenia 'arp' sprawdza pole EtherType w ramce Ethernet (offset 12, długość 2 bajty). Jeśli wartość to 0x0806 (ARP), filtr zwraca snap length (262144) – "przepuść cały pakiet". W przeciwnym razie zwraca 0 – "odrzuć".

Statystyki tcpdump pokazują: "N packets captured" (tyle trafiło do aplikacji), "N packets received by filter" (tyle pakietów ogólnie przeszło przez interfejs) i "N packets dropped by kernel" (pakiety utracone z powodu przepełnienia bufora jądra).

Wzrost liczby dropped by kernel oznacza, że karta dostarcza pakiety szybciej, niż aplikacja jest w stanie je przetworzyć – należy wówczas: (1) zwiększyć rozmiar bufora pierścieniowego (ethtool -G eth0 rx 4096), (2) zwiększyć rozmiar bufora gniazda (setsockopt SO_RCVBUF), (3) zastosować bardziej restrykcyjny filtr BPF, (4) użyć NAPI polling (domyślnie w nowych jądrach Linux).

Narzędzie tc qdisc show dev eth0 pokazuje dyscyplinę kolejkowania – domyślnie pfifo_fast, która może gubić pakiety przy przeciążeniu.

eBPF/XDP umożliwia wykonywanie programów bezpośrednio w sterowniku karty (XDP_DROP, XDP_PASS, XDP_TX), co daje wydajność DPDK przy zachowaniu bezpieczeństwa jądra.

19/23 Statystyki sprzętowe NIC – ethtool -S i interpretacja

Liczniki sprzętowe karty sieciowej – okno na stan łącza

# Szczegółowe statystyki sprzętowe karty NIC
ethtool -S eth0
NIC statistics:
     rx_packets: 14823567
     tx_packets: 12458723
     rx_bytes: 18923456789
     tx_bytes: 15234567890
     rx_broadcast: 234567
     rx_multicast: 12345
     rx_crc_errors: 0
     rx_fifo_errors: 0
     rx_short_errors: 0
     rx_long_errors: 0
     tx_errors: 0
     collisions: 0
     rx_missed_errors: 0          # spadek bufora – przeciążenie
     rx_dropped: 0                # odrzucone przez jądro

# Rozmiar pierścienia buforowego (ring buffer)
ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX: 4096
TX: 4096
Current hardware settings:
RX: 1024
TX: 1024
Kluczowe metryki: rx_crc_errors > 0 = uszkodzony kabel/zakłócenia. rx_missed_errors > 0 = przepełniony ring bufor karty. collisions > 0 w full duplex = problem z dupleksem.

Polecenie ethtool -S odczytuje liczniki sprzętowe bezpośrednio z rejestrów karty NIC przez sterownik. Są to dane zbierane przez kontroler MAC, a nie przez jądro systemu.

rx_missed_errors (lub rx_no_buffer_count w kartach Intel) oznacza, że karta NIC otrzymała pakiet, ale nie miała wolnego miejsca w pierścieniu Rx (ring buffer) – pakiet został odrzucony w sprzęcie.

Rozwiązanie: zwiększyć rozmiar pierścienia ethtool -G eth0 rx 4096 tx 4096 – większe bufory zmniejszają ryzyko utraty przy skokach ruchu, ale zwiększają opóźnienie.

rx_crc_errors pojawiają się przy: (1) uszkodzonym kablu (przerwana para, zbyt długi odcinek), (2) zakłóceniach elektromagnetycznych (kabel w pobliżu źródła zakłóceń), (3) uszkodzonej karcie lub porcie przełącznika.

Collisions powinny być 0 w łączu full duplex. Jeśli rosną, oznacza to niezgodność dupleksu – jedna strona pracuje w half, druga w full duplex.

Należy rozróżnić: rx_dropped (jądro odrzuciło pakiet – np. z powodu pełnego gniazda) od rx_missed_errors (karta odrzuciła w sprzęcie).

Do monitorowania w czasie rzeczywistym: sar -n DEV 1 (sysstat), nload, bmon, iftop.

20/23 Podsumowanie i pytania kontrolne

Najważniejsze wnioski z analizy karty sieciowej PCI i śladów sieciowych

  1. Karta PCI Ethernet integruje funkcje MAC i PHY w jednym układzie, co odróżnia ją od starszych kart ISA.
  2. Magistrala PCI/PCIe umożliwia szybki transfer DMA bez angażowania procesora (bus mastering).
  3. Transformatory magnetyczne zapewniają izolację galwaniczną do 1500 V RMS między kartą a kablem.
  4. Pamięć EEPROM przechowuje unikalny adres MAC i parametry konfiguracyjne karty.
  5. W systemie Linux konfigurację wykonuje się poleceniami ip i ethtool, a przechwytywanie śladów przez tcpdump z filtrami BPF.
  6. Tryb promiscuous karty NIC umożliwia przechwytywanie wszystkich ramek w segmencie (przy wsparciu SPAN/TAP).
  7. Statystyki sprzętowe ethtool -S pozwalają diagnozować problemy łącza (CRC, missed errors, collisions).
  8. Na przełączniku Cisco konfigurację portu Ethernet wykonuje się w trybie interface z poleceniami speed, duplex, switchport.
Pytania kontrolne:
  1. Jakie są główne różnice w budowie między kartą ISA (RTL8019AS) a kartą PCI (RTL8139)?
  2. Dlaczego w śladzie tcpdump adres MAC docelowy pinga do 8.8.8.8 to adres bramy, a nie 8.8.8.8?
  3. Jak sprawdzić, czy karta NIC pracuje w trybie promiscuous?
  4. Co oznacza wzrost licznika rx_crc_errors w statystykach ethtool?
  5. Jak skonfigurować interfejs GigabitEthernet na przełączniku Cisco z przypisaniem do VLAN 20?
  6. Jaka jest różnica między BPF a eBPF w kontekście przechwytywania pakietów?
Podsumowując, karta sieciowa PCI Ethernet jest kluczowym elementem infrastruktury sieciowej, który łączy cyfrowy świat procesora i pamięci komputera z fizycznym medium transmisyjnym.

Umiejętność konfiguracji karty sieciowej w systemie Linux (polecenia ip, ethtool) oraz konfiguracji portu przełącznika Cisco (tryb interface, VLAN, diagnostyka show interfaces) stanowi praktyczne uzupełnienie wiedzy teoretycznej i jest niezbędna w codziennej pracy administratora sieci.

Wprowadzone w tej edycji ślady sieciowe (tcpdump) ilustrują rzeczywistą pracę karty NIC – od filtracji MAC przez ARP aż po diagnostykę statystyk sprzętowych.

Zrozumienie architektury karty NIC – od warstwy fizycznej (transformatory, PHY) przez warstwę MAC aż po interfejs PCI/PCIe i narzędzia przechwytywania pakietów – jest fundamentem wiedzy każdego inżyniera sieciowego.

21/23 mii-tool – starsze narzędzie do diagnostyki MII

Media Independent Interface – odczyt stanu łącza i autonegocjacji

Uwaga: mii-tool jest narzędziem starszej generacji. Współcześnie zaleca się używanie ethtool. Jednak w starszych systemach i na niektórych kartach wciąż bywa przydatne.
# Podstawowe sprawdzenie stanu interfejsu
mii-tool eth0
eth0: negotiated 100baseTx-FD, link ok

# Szczegółowe informacje (verbose)
mii-tool -v eth0
eth0: negotiated 100baseTx-FD, link ok
  product info: vendor 00:00:00, model 0 rev 0
  basic mode:   autonegotiation enabled
  basic status: autonegotiation complete, link ok
  capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

# Monitorowanie zmian łącza (co 1 sekundę)
mii-tool -w eth0
08:12:01 eth0: negotiated 100baseTx-FD, link ok
08:12:02 eth0: link failed
08:12:04 eth0: negotiated 10baseT-HD, link ok

# Wymuszenie trybu 10baseT-HD (bez autonegocjacji)
mii-tool -F 10baseT-HD eth0

# Ponowne uruchomienie autonegocjacji
mii-tool -r eth0

# Zapis do dziennika systemowego zamiast stdout
mii-tool -l -w eth0

mii-tool to narzędzie z pakietu net-tools, które komunikuje się z układem MII (Media Independent Interface) karty sieciowej przez interfejs ioctl SIOCGMIIPHY/SIOCSMIIPHY.

MII jest standardowym interfejsem między kontrolerem MAC a transceiverem PHY, zdefiniowanym w IEEE 802.3u.

Większość kart Fast Ethernet (10/100 Mbps) korzysta z MII, natomiast karty Gigabit używają GMII (Gigabit MII) lub RGMII (Reduced GMII) i są obsługiwane przez ethtool.

Opcja -v (verbose) wyświetla szczegółowe informacje o możliwościach PHY, reklamowanych trybach i trybach partnera.

Opcja -w (watch) jest przydatna do monitorowania stabilności łącza – pozwala wychwycić moment zerwania połączenia.

Opcja -F (force) wyłącza autonegocjację i wymusza konkretny tryb. Uwaga: niezgodność ustawień po obu stronach łącza powoduje błędy (collisions, CRC errors).

Opcja -r (restart) wznawia proces autonegocjacji bez restartu interfejsu.

Jeśli karta nie obsługuje MII (np. nowsze karty Gigabit), pojawi się błąd: SIOCGMIIPHY on 'eth0' failed: Operation not supported – wtedy należy użyć ethtool.

22/23 ethtool – sterownik, ring, offload, identyfikacja karty

Zaawansowane opcje ethtool do zarządzania i diagnostyki NIC

# Informacje o sterowniku i firmware
ethtool -i eth0
driver: r8169
version: 6.1.0
firmware-version: rtl8168g-2
bus-info: 0000:03:00.0

# Rozmiar pierścienia buforowego (ring buffer)
ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX: 4096
TX: 4096
Current hardware settings:
RX: 256
TX: 256

# Zwiększenie pierścienia (zmniejsza utratę pakietów)
ethtool -G eth0 rx 4096 tx 4096

# Funkcje offload (TSO, GRO, checksum offload)
ethtool -k eth0
Features for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
generic-segmentation-offload: on
generic-receive-offload: on
rx-vlan-offload: on

# Wyłączenie TSO (przy problemach z dużymi pakietami)
ethtool -K eth0 tso off

# Identyfikacja karty – miganie LED (12 sekund)
ethtool -p eth0 12

# Test sprzętowy karty (online/offline)
ethtool -t eth0 offline
The test result: PASSED

# Odczyt trwałego adresu MAC (fabrycznego)
ethtool -P eth0
Permanent address: 00:1a:2b:3c:4d:5e

# Konfiguracja Wake-on-LAN
ethtool -s eth0 wol g

ethtool -i (driver) wyświetla nazwę sterownika, jego wersję, wersję firmware oraz lokalizację na magistrali PCI (bus-info). Umożliwia identyfikację modelu karty bez otwierania obudowy.

ethtool -g (show-ring) pokazuje rozmiar pierścieni buforowych Rx/Tx. Zwiększenie tych wartości zmniejsza ryzyko utraty pakietów przy skokach ruchu (rx_missed_errors), ale zwiększa zużycie pamięci.

ethtool -k (show-features) wyświetla stan funkcji offload: obliczanie sum kontrolnych (checksumming), TSO (TCP Segmentation Offload), GRO (Generic Receive Offload), VLAN offload. Wyłączenie TSO może pomóc przy problemach z dużymi pakietami lub specyficznymi aplikacjami.

ethtool -p (identify) powoduje miganie diody LED na karcie przez określoną liczbę sekund – przydatne w serwerowni przy identyfikacji fizycznej karty.

ethtool -t (test) wykonuje test sprzętowy: online (nie zakłóca ruchu) lub offline (pełny test z przerwaniem transmisji). Wynik PASSED oznacza sprawną kartę.

ethtool -P (show-permaddr) odczytuje fabryczny adres MAC z EEPROM – pozwala sprawdzić, czy adres MAC nie został zmieniony programowo (ip link set dev eth0 address ...).

ethtool -s wol g włącza Wake-on-LAN z obsługą Magic Packet – karta będzie budzić system po odebraniu specjalnej ramki.

23/23 Inne narzędzia diagnostyczne NIC w systemie Linux

lspci, dmesg, sysfs, networkctl – identyfikacja i diagnostyka karty

# Identyfikacja karty na magistrali PCI
lspci | grep Ethernet
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd.
  RTL8111/8168/8411 PCI Express Gigabit Ethernet (rev 15)

# Szczegóły PCI (producent, sterownik, IRQ)
lspci -v -s 03:00.0
03:00.0 Ethernet controller: Realtek RTL8111/8168
  Subsystem: Gigabyte Technology RTL8111
  Flags: bus master, fast devsel, latency 0, IRQ 17
  Memory at f7c00000 (64-bit, non-prefetchable)
  Kernel driver in use: r8169
  Kernel modules: r8169

# Komunikaty jądra związane z kartą
dmesg | grep -i r8169
[    2.123456] r8169 0000:03:00.0 eth0: RTL8168h/8111h, 00:1a:2b:3c:4d:5e, XID 541, IRQ 17
[    2.234567] r8169 0000:03:00.0 eth0: jumbo features [frames: 9194 bytes, tx checksumming: yes]

# Sysfs – parametry karty przez system plików
cat /sys/class/net/eth0/address
00:1a:2b:3c:4d:5e

cat /sys/class/net/eth0/speed
100

cat /sys/class/net/eth0/duplex
full

cat /sys/class/net/eth0/operstate
up

# Statystyki z sysfs
cat /sys/class/net/eth0/statistics/rx_errors
0

# systemd-networkd – stan interfejsu
networkctl status eth0
● 2: eth0
       Type: ether
      State: routable (configured)
       Path: pci-0000:03:00.0
       HW Address: 00:1a:2b:3c:4d:5e
         Speed: 100Mbps
        MTU: 1500

Polecenie lspci (z pakietu pciutils) wyświetla listę urządzeń na magistrali PCI. Opcja -v pokazuje szczegóły: adresy I/O, pamięci, IRQ, używaną wersję PCIe, sterownik i moduł jądra.

Grep Ethernet filtruje tylko karty sieciowe. Przydatne przy identyfikacji, który fizyczny slot PCI odpowiada interfejsowi eth0.

dmesg odczytuje bufor komunikatów jądra (kernel ring buffer). Po włożeniu karty lub załadowaniu sterownika pojawiają się informacje o wykryciu urządzenia, adresie MAC, obsłudze jumbo frames i przypisanym IRQ.

Sysfs (/sys/class/net/eth0/) udostępnia stan interfejsu w formie plików tekstowych: adres MAC (address), prędkość (speed), dupleks (duplex), stan (operstate), MTU (mtu), statystyki (statistics/).

Zaleta sysfs: odczyt bez uprawnień root (dla podstawowych parametrów), możliwość skryptowania (cat /sys/class/net/eth0/speed).

networkctl to narzędzie systemd-networkd, pokazujące stan interfejsu wraz ze ścieżką PCI, adresem MAC, prędkością i MTU.

Połączenie tych narzędzi pozwala na kompleksową diagnostykę karty NIC: od identyfikacji sprzętu (lspci), przez sterownik (dmesg), po bieżący stan (sysfs, networkctl).