Поделиться через


Сетевые интерфейсы

В этом разделе описываются основные понятия сетевого интерфейса в Windows, включая способы их идентификации в коде и их свойствах.

Внимание

Этот раздел предназначен для аудитории разработчиков как для классических приложений Windows, так и для сетевых драйверов в режиме ядра. Тем не менее некоторые сведения, представленные здесь, также могут быть полезны для системных администраторов, управляющих сетевыми интерфейсами с помощью командлетов PowerShell.

Обзор

Сетевой интерфейс — это точка подключения двух частей сетевого оборудования или уровней протокола. Как правило, это представлено физической сетевой картой (сетевой картой) для подключения между компьютером и частной или общедоступной сетью. Однако он также может принимать форму компонента, доступного только для программного обеспечения, например интерфейса обратного цикла (127.0.0.1 для IPv4 или ::1 для IPv6).

Сетевые интерфейсы определяются рабочей службой разработки Интернета (IETF) в RFC 2863 и не предназначены для определения Windows. Подробные вопросы о значении идентификаторов сетевых интерфейсов, таких как ifIndex, см. в определениях IETF. В остальной части этого раздела рассматриваются сведения о реализации windows.

Идентификаторы и свойства сетевого интерфейса

В Windows сетевой интерфейс можно идентифицировать разными способами. Некоторые из этих идентификаторов используются для различения сетевых интерфейсов друг от друга, но не все идентификаторы одинаково подходят для этой задачи из-за их различных свойств. Как правило, сетевые интерфейсы определяются сетевым адресом внешних компонентов. Например, это может быть идентификатор узла и номер порта или просто уникальный идентификатор узла.

В коде сетевой интерфейс можно идентифицировать различными способами. В следующей таблице описаны способы идентификации сетевого интерфейса вместе с связанными свойствами. Рекомендуется использовать GUID интерфейса (ifGuid) для программирования, если для конкретного API не требуется другой идентификатор сетевого интерфейса.

Примечание.

В следующей таблице полужирные ячейки представляют свойство, которое желательно для сетевых программистов.

Идентификатор Размер Уникально в системе Уникально в мире Прогнозируемо Будет переработан, если сетевой адаптер удален Сохраняется во время перезагрузки Конечные пользователи могут изменять в любое время Драйверы могут изменяться в любое время Общее знакомство с конечными пользователями Всегда присутствует
ifIndex 4 байта Да No No Да Нет1 Нет Нет Около2 Да
NetLuid 8 байт Да No No Да Да Нет Нет No Да
ifGuid 16 байт Да Обычно3 No Нет Да Нет Нет No Да
ifAlias 514 байт Да для сетевых адаптеров4 No Иногда5 Да Да Да Нет Да Обычно4
ifDescr 514 байт Обычно6 No No Да Да Нет Да Да Обычно
ifPhysAddress (MAC ADDRESS) От 0 до 32 байт Обычно для сетевых адаптеров Обычно для сетевых адаптеров Да Привязка к оборудованию Да Нет Нет Да Обычно 7
Идентификатор экземпляра PnP До 400 байт Да No No Да Да Нет Нет No Обычно для сетевых адаптеров8
Расположение PnP (номер слота PCI) До 400 байт Да No Да Да Да Нет Нет Иногда. Иногда8,9

Примечания для предыдущей таблицы:

  1. ЕслиIndexes не гарантированы стабильной во время перезагрузки, даже если они часто получают то же значение, что и предыдущая загрузка. Поэтому не рекомендуется использовать драйверы, еслиIndex , за исключением случаев, необходимых API.
  2. Некоторые netsh команды принимают или indexв ifIndexкачестве входных данных. Поэтому некоторые администраторы знакомы со свойством ifIndex , если они часто используют netsh команду.
  3. Если компьютер клонирован или изображен, некоторые графические идентификаторы могут совпадать. Кроме того, некоторые специальные сетевые интерфейсы, такие как встроенный интерфейс Teredo, могут иметь одинаковый GUID на всех компьютерах.
  4. NetCfg применяет, что ifAlias является непустой строкой и является уникальным среди всех сетевых адаптеров. Однако поставщик интерфейса NDIS не поддерживает. Тамерфоре можно найти специальные сетевые интерфейсы с повторяющимися или пустыми именами. Это чаще всего видно с командами LBFO.
  5. Только если встроенное ПО поддерживает согласованное именование устройств. Типически серверы имеют эту функцию.
  6. NetCfg назначает уникальный ifDescrs всем сетевым интерфейсам. Однако драйверы могут вызывать API, чтобы изменить значение ifDescr на что-либо, включая то, что не является уникальным. Некоторые сторонние пакеты программного обеспечения делают это.
  7. Не все типы носителей имеют mac-адрес. Например, некоторые туннели не имеют этой концепции и просто объявляют массив байтов нулевой длины в качестве своего сетевого адреса.
  8. Присутствует только в сетевых интерфейсах, поддерживаемых устройством PnP. Например, интерфейсы переплета, интерфейсы фильтра с легким весом, интерфейсы, предоставляемые поставщиком интерфейса NDIS, и некоторые специальные встроенные сетевые адаптеры не поддерживают их.
  9. Только некоторые автобусы PnP поддерживают идентификатор расположения PnP. Встроенные шины PCI и USB выполняются, в то время как корневые перечисляемые устройства не выполняются.

Видимость для разработчиков

В предыдущей таблице все свойства, кроме свойств самонастраивающийся (PnP), отображаются в классических приложениях пользовательского режима и драйверах режима ядра через общий заголовок (Netioapi.h). Свойства PnP отображаются с помощью заголовка Devpkey.h и используются как классическими приложениями пользовательского режима, так и драйверами режима ядра. Например, см . документацию ПО DEVPKEY .

API вспомогательного IP-адреса также доступен как для классических приложений в пользовательском режиме, так и для драйверов режима ядра.

Область API UWP предоставляет только свойство ifGuid напрямую. Однако разработчикам приложений UWP можно импортировать функцию GetIfTable2 с помощью P/Invoke, если они необходимы для доступа к другим свойствам сетевого интерфейса.

Определения базы сведений об управлении (MIB) для сетевых интерфейсов см. в rfC 2863.

Сведения о сетевых интерфейсах NDIS в сетевых драйверах см. в разделе NDIS Network Interfaces.

Справочник по API Netioapi.h см. в заголовке netioapi.h.