Vrstvy ISO/OSI a teorie síťování
L1 a L2 - Ethernet, WiFi a PPP
Ethernetový síťový adaptér
Příkladem může být moderní ethernetová karta - ta má zpravidla L1 implementovanou v podobě čipu PHY, který zajišťuje vygenerování signálu z dat, která přicházejí přes *MII (Media Independent Interface) z čipu, který implementuje L2, do média a naopak převádí signál z média a na data na MII sběrnici. Sběrnice mezi PHY a zbytek síťové karty jsou podle rychlosti AUI, MII, GMII, RGMII, SGMII, XGMII a další. Alternativně může být síťová karta místo PHY vybavená SFP či SFP+ klecí pro optický, nebo jiný modul s rozhraním dle příslušného standardu.
L2 část síťové karty je zpravidla implementováná čipem, na kterém může být různě velká část funkcionality implementována firmwarem. Firmware lze zpravidla updatovat z operačního systému přes příslušný ovladač zařízení. V některých případech (ale to se týká zejména WiFi karet) je nutné firmware nahrát ze souboru do síťové karty při každém startu systému.
Mimo samotné MII rozhraní mezi PHY respektive mezi SFP modulem a L2 částí síťové karty je zpravidla použito ještě nezávislé pomalejší rozhraní pro přenos stavových informací a nastavení parametrů PHY. Zpravidla se pro PHY používá rozhraní MDIO. Do SFP modulu zase vede I2C sběrnice, která slouží k identifikaci modulu a správnému nastavení parametrů přenosu.
Metalická síťová karta tedy vypadá obvykle takto:
Naproti tomu stojí karta s optickým SFP modulem:
Odkazy:
- https://en.wikipedia.org/wiki/PHY
- https://en.wikipedia.org/wiki/Small_form-factor_pluggable_transceiver
- https://en.wikipedia.org/wiki/Management_Data_Input/Output
Fyzická vrstva je přes rozhraní MDIO přístupná z linuxového userspacu pomocí nástroje mii-tool
. Tímto nástrojem je možné zjistit stav a měnit nastavení fyzické vrstvy, tedy zejména rychlost, duplexitu, autonegotiation a podporu pause-rámců pro Ethernet flow control. Příklad:
$ sudo mii-tool -v enx34d0b8c0b534
enx34d0b8c0b534: negotiated 1000baseT-FD flow-control, link ok
product info: vendor 00:07:32, model 0 rev 0
basic mode: autonegotiation enabled
basic status: autonegotiation complete, link ok
capabilities: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
advertising: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
link partner: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
Odkazy:
Nastavení parametrů L2 části síťové karty je specifické pro každý konkrétní typ karty a její ovladač. V Linuxu lze zobrazit stav a nastavovat nejrůznější parametry, které se nejvíce týkají akcelerace přenosu dat v síťové kartě pomocí nástroje ethtool
. Příklad:
$ sudo ethtool enx34d0b8c0b534
Settings for enx34d0b8c0b534:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Link partner advertised pause frame use: Symmetric
Link partner advertised auto-negotiation: Yes
Link partner advertised FEC modes: Not reported
Speed: 1000Mb/s
Duplex: Full
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00007fff (32767)
drv probe link timer ifdown ifup rx_err tx_err tx_queued intr tx_done rx_status pktdata hw wol
Link detected: yes
$ sudo ethtool -k enx34d0b8c0b534
Features for enx34d0b8c0b534:
rx-checksumming: on
tx-checksumming: on
tx-checksum-ipv4: on
tx-checksum-ip-generic: off [fixed]
tx-checksum-ipv6: on
tx-checksum-fcoe-crc: off [fixed]
tx-checksum-sctp: off [fixed]
scatter-gather: on
tx-scatter-gather: on
tx-scatter-gather-fraglist: on
tcp-segmentation-offload: on
tx-tcp-segmentation: on
tx-tcp-ecn-segmentation: off [fixed]
tx-tcp-mangleid-segmentation: off
tx-tcp6-segmentation: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off [fixed]
receive-hashing: off [fixed]
highdma: off [fixed]
rx-vlan-filter: off [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-gre-csum-segmentation: off [fixed]
tx-ipxip4-segmentation: off [fixed]
tx-ipxip6-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-udp_tnl-csum-segmentation: off [fixed]
tx-gso-partial: off [fixed]
tx-sctp-segmentation: off [fixed]
tx-esp-segmentation: off [fixed]
tx-udp-segmentation: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off [fixed]
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
l2-fwd-offload: off [fixed]
hw-tc-offload: off [fixed]
esp-hw-offload: off [fixed]
esp-tx-csum-hw-offload: off [fixed]
rx-udp_tunnel-port-offload: off [fixed]
tls-hw-tx-offload: off [fixed]
tls-hw-rx-offload: off [fixed]
rx-gro-hw: off [fixed]
tls-hw-record: off [fixed]
Protože tato sekce pojednává o skutečné fyzické a linkové vrstvě, je ve virtuálním prostředí význam a obsah výpisů uvedených příkazů omezen. Proto jsou příklady také zachyceny z fyzické síťové karty.
Tyto parametry nás v tomto kurzu tolik zajímat nebudou, přesto jimi začínáme, protože v reálném nasazení na serverech jsou důležité pro vyladění výkonu a případné řešení problémů pod zátěží. Konkrétní použití však silně závisí na konkrétním čipu a ovladači síťového rozhraní a na případu užití.