Сетевой адаптер
Устройство, подключающее компьютер к сети: принимает и отправляет кадры, имеет MAC-адрес и в системе виден как сетевой интерфейс.
Что такое Сетевой адаптер
Сетевой адаптер (сетевая карта, NIC — Network Interface Card) — устройство, через которое компьютер подключается к сети. Оно превращает данные из памяти в электрические или световые сигналы и обратно, а заодно берёт на себя проверку целостности кадров и часть работы, которую иначе делал бы процессор.
Сетевая карта и сетевой адаптер — одно и то же: исторически «картой» называли отдельную плату в слот PCIe, но сегодня адаптер чаще распаян на материнской плате или вовсе виртуальный.
Сетевой интерфейс — то, как адаптер выглядит в операционной системе: именованная точка, которой назначают IP-адрес и маршруты. Разница важная: интерфейс не обязан соответствовать железу. lo (loopback), мосты Docker, туннели VPN — полноценные интерфейсы без всякой карты.
MAC-адрес
У каждого адаптера есть MAC-адрес — 48-битный идентификатор, зашитый производителем: 52:54:00:ab:cd:ef. Первые три байта — код вендора (OUI), остальные назначает сам производитель.
Разделение обязанностей простое: IP-адрес нужен, чтобы найти узел в интернете, MAC — чтобы доставить кадр внутри локального сегмента. Соответствие между ними в IPv4 выясняет протокол ARP, в IPv6 — NDP.
$ ip -br link
lo UNKNOWN 00:00:00:00:00:00
eth0 UP 52:54:00:ab:cd:ef
docker0 DOWN 02:42:9c:1f:3a:11
$ ip neigh # ARP-таблица: кто есть кто в сегменте
10.0.0.1 dev eth0 lladdr 00:1a:2b:3c:4d:5e REACHABLE
MAC используют для резервации адреса на DHCP-сервере и для привязки лицензий — а ещё он не проходит дальше первого маршрутизатора, поэтому «вычислить по MAC» из интернета невозможно.
Что показывает ethtool
ethtool — основной инструмент для физического адаптера: он говорит о железе то, чего не знает ip.
$ ethtool eth0
Settings for eth0:
Speed: 10000Mb/s
Duplex: Full
Auto-negotiation: on
Link detected: yes
$ ethtool -S eth0 | grep -i -E "drop|error"
rx_dropped: 0
tx_errors: 0
На что смотреть: Speed — реальная скорость линка (гигабитная карта, договорившаяся на 100 Мбит/с, — почти всегда плохой кабель или порт коммутатора); Duplex: Half на современной сети означает коллизии и провал производительности; растущие rx_dropped и errors — проблему физики: кабель, оптический модуль, перегрев.
Разгрузка и производительность
Адаптер умеет забирать работу у процессора — это и есть offload:
| Функция | Что делает |
|---|---|
| TSO / GSO | нарезка большого блока на сегменты — на карте, а не в ядре |
| GRO / LRO | сборка входящих пакетов в крупные блоки перед передачей в стек |
| Checksum offload | подсчёт контрольных сумм на карте |
| RSS | распределение прерываний по ядрам процессора |
$ ethtool -k eth0 | grep -E "tcp-segmentation|generic-receive"
tcp-segmentation-offload: on
generic-receive-offload: on
Не трогайте offload без причины — они включены не зря. Единственный частый повод отключить: снятие дампа tcpdump, где GRO показывает неправдоподобно большие пакеты и путает анализ. При 10 Гбит/с и выше одного ядра не хватает на обработку прерываний — спасают RSS и привязка очередей к ядрам. Порядок величин полезно помнить: 1 Гбит/с — это ~125 МБ/с, 10 Гбит/с — ~1,25 ГБ/с, быстрее многих дисков.
Адаптеры на серверах и в виртуализации
В виртуальной машине адаптер эмулируется гипервизором. Стандарт — virtio-net: гость знает, что виртуализирован, и не тратит такты на эмуляцию несуществующего железа. Когда нужна максимальная скорость, применяют SR-IOV: физическая карта делится на виртуальные функции (VF), каждая пробрасывается в свою ВМ напрямую, и гипервизор из тракта данных исчезает. Приём тот же, что и GPU passthrough, и с тем же компромиссом: скорость в обмен на гибкость при миграции.
Два адаптера объединяют в bond: отказ одного линка не рвёт связность, а в режиме LACP суммируется и полоса. Стандартная практика для любого сервера с требованиями по отказоустойчивости.
Связанные термины
- IP-адрес — назначается интерфейсу, а не машине
- Каналы связи — среда, в которую включён адаптер
- MTU и MSS — параметр, задаваемый на интерфейсе
- DHCP — использует MAC-адрес для резервации
- Виртуальная машина — где адаптер виртуальный
- VLAN и коммутация — теги навешиваются на интерфейс
Готовы запустить GPU-задачу?
Запустить GPU-сервер