Контроллер сетевого интерфейса ( NIC , также известный как сетевая интерфейсная карта , [3] сетевой адаптер , адаптер локальной сети и физический сетевой интерфейс [4] ) — это компонент компьютерного оборудования , который подключает компьютер к компьютерной сети . [5]
Ранние контроллеры сетевых интерфейсов обычно реализовывались на картах расширения , которые подключались к компьютерной шине . Низкая стоимость и повсеместность стандарта Ethernet означает, что большинство новых компьютеров имеют сетевой интерфейс, встроенный в материнскую плату , или заключенный в USB - ключ .
Современные контроллеры сетевых интерфейсов предлагают расширенные функции, такие как интерфейсы прерываний и прямого доступа к памяти (DMA) для хост-процессоров, поддержку нескольких очередей приема и передачи, разбиение на несколько логических интерфейсов и обработку сетевого трафика на контроллере, например, механизм разгрузки TCP .
Сетевой контроллер реализует электронную схему, необходимую для связи с использованием определенного физического уровня и стандарта канального уровня, такого как Ethernet или Wi-Fi . [a] Это обеспечивает основу для полного стека сетевых протоколов , позволяя осуществлять связь между компьютерами в одной локальной сети (LAN) и крупномасштабные сетевые коммуникации через маршрутизируемые протоколы, такие как протокол Интернета (IP).
Сетевая карта позволяет компьютерам общаться через компьютерную сеть, используя кабели или беспроводным способом. Сетевая карта является как устройством физического уровня, так и устройством канального уровня, поскольку она обеспечивает физический доступ к сетевой среде и, для сетей IEEE 802 и подобных сетей, обеспечивает низкоуровневую систему адресации посредством использования MAC-адресов , которые уникальным образом назначаются сетевым интерфейсам.
Сетевые контроллеры изначально были реализованы как карты расширения, которые подключались к компьютерной шине. Низкая стоимость и повсеместность стандарта Ethernet означает, что большинство новых компьютеров имеют контроллер сетевого интерфейса, встроенный в материнскую плату. Более новые серверные материнские платы могут иметь несколько встроенных сетевых интерфейсов. Возможности Ethernet либо интегрированы в чипсет материнской платы , либо реализованы через недорогой выделенный чип Ethernet. Отдельная сетевая карта, как правило, больше не требуется, если только не требуются дополнительные независимые сетевые соединения или не используется какой-либо не-Ethernet тип сети. Общая тенденция в компьютерном оборудовании заключается в интеграции различных компонентов систем на одном чипе , и это также применимо к сетевым картам.
Сетевой контроллер Ethernet обычно имеет гнездо 8P8C , к которому подключается сетевой кабель. Более старые сетевые платы также поставлялись с разъемами BNC или AUI . Сетевые контроллеры Ethernet обычно поддерживают разновидности Ethernet 10 Мбит/с , Ethernet 100 Мбит/с и Ethernet 1000 Мбит/с . Такие контроллеры обозначаются как 10/100/1000 , что означает, что они могут поддерживать скорость передачи данных 10, 100 или 1000 Мбит/с. Также доступны сетевые платы Ethernet 10 Gigabit , и с ноября 2014 года [обновлять]они начинают появляться на материнских платах компьютеров . [6] [7]
Модульные конструкции, такие как SFP и SFP+, очень популярны, особенно для оптоволоконной связи . Они определяют стандартный разъем для медиазависимых трансиверов, поэтому пользователи могут легко адаптировать сетевой интерфейс к своим потребностям.
Светодиоды , расположенные рядом с сетевым разъемом или встроенные в него, информируют пользователя о том, подключена ли сеть, а также о том, происходит ли передача данных.
Сетевая карта может включать в себя ПЗУ для хранения назначенного на заводе MAC-адреса . [8]
Сетевая карта может использовать один или несколько из следующих методов для указания доступности пакетов для передачи:
Сетевые карты могут использовать один или несколько из следующих методов для передачи пакетных данных:
Сетевые карты с несколькими очередями предоставляют несколько очередей передачи и приема , что позволяет назначать пакеты, полученные сетевой картой, одной из ее очередей приема. Сетевая карта может распределять входящий трафик между очередями приема с помощью хэш-функции . Каждая очередь приема назначается отдельному прерыванию ; путем маршрутизации каждого из этих прерываний на разные ЦП или ядра ЦП обработка запросов на прерывание, вызванных сетевым трафиком, полученным одной сетевой картой, может быть распределена, что повышает производительность. [10] [11]
Аппаратное распределение прерываний, описанное выше, называется масштабированием на стороне приема (RSS). [12] : 82 Существуют также чисто программные реализации, такие как управление пакетами приема (RPS), управление потоком приема (RFS), [10] и Intel Flow Director . [12] : 98, 99 [13] [14] [15] Дальнейшее повышение производительности может быть достигнуто путем маршрутизации запросов прерываний на ЦП или ядра, выполняющие приложения, которые являются конечными пунктами назначения для сетевых пакетов , сгенерировавших прерывания. Этот метод улучшает локальность ссылок и приводит к более высокой общей производительности, уменьшению задержки и лучшему использованию оборудования из-за более высокого использования кэшей ЦП и меньшего количества требуемых переключений контекста .
С многоочередными сетевыми картами можно добиться дополнительных улучшений производительности, распределяя исходящий трафик между различными очередями передачи. Назначая различные очереди передачи различным ЦП или ядрам ЦП, можно избежать внутренних конфликтов операционной системы. Этот подход обычно называют управлением пакетами передачи (XPS). [10]
Некоторые продукты поддерживают функцию разделения сетевых карт ( NPAR , также известную как разделение портов ), которая использует виртуализацию SR-IOV для разделения одной сетевой карты 10 Gigabit Ethernet на несколько дискретных виртуальных сетевых карт с выделенной полосой пропускания, которые представлены прошивке и операционной системе как отдельные функции устройства PCI . [3] [16]
Некоторые сетевые карты предоставляют механизм разгрузки TCP для разгрузки обработки всего стека TCP/IP на сетевой контроллер. Он в основном используется с высокоскоростными сетевыми интерфейсами, такими как Gigabit Ethernet и 10 Gigabit Ethernet, для которых накладные расходы на обработку сетевого стека становятся значительными. [17]
Некоторые сетевые карты предлагают интегрированные программируемые пользователем вентильные матрицы (FPGA) для программируемой пользователем обработки сетевого трафика до того, как он достигнет хост-компьютера, что позволяет значительно сократить задержки в рабочих нагрузках, чувствительных ко времени. [18] Более того, некоторые сетевые карты предлагают полные стеки TCP/IP с низкой задержкой , работающие на интегрированных FPGA в сочетании с библиотеками пользовательского пространства , которые перехватывают сетевые операции, обычно выполняемые ядром операционной системы ; примером является сетевой стек OpenOnload с открытым исходным кодом Solarflare , работающий на Linux . Этот вид функциональности обычно называют сетевым взаимодействием на уровне пользователя . [19] [20] [21]