Compartilhar via


Adaptadores de rede

Este tópico descreve conceitos de adaptador de rede de alto nível no Windows, incluindo as maneiras como eles podem ser identificados no código e suas propriedades.

Importante

Este tópico destina-se ao público desenvolvedor, tanto para aplicativos de rede de área de trabalho do Windows quanto para drivers de rede no modo kernel. Contudo, algumas das informações apresentadas aqui também podem ser úteis para administradores de sistema que gerenciam adaptadores de rede de rede por meio de cmdlets do PowerShell.

Visão geral

Um adaptador de rede é o ponto onde dois equipamentos de rede ou camadas de protocolo se conectam. Geralmente, isso é representado por uma NIC (placa de adaptador de rede) física para conexão entre um computador e uma rede privada ou pública. No entanto, também pode assumir a forma de um componente somente de software, como a interface de loopback (127.0.0.1 para IPv4 ou ::1 para IPv6).

Os adaptadores de rede são definidos pela IETF (Internet Engineering Task Force) em RFC 2863 e não devem ser definidos pelo Windows. Para perguntas detalhadas sobre o significado dos identificadores de adaptador de rede, como ifIndex, consulte as definições do IETF deles. O restante deste tópico discute detalhes de implementação específicos do Windows.

Identificadores e propriedades do adaptador de rede

No Windows, um adaptador de rede pode ser identificado de diferentes maneiras. Alguns desses identificadores são usados ​​para distinguir adaptadores de rede uns dos outros, mas nem todos os identificadores são igualmente adequados para essa tarefa devido às suas propriedades diferentes. Geralmente, os adaptadores de rede são identificados por um endereço de rede para componentes externos. Por exemplo, pode ser um ID de nó e um número de porta ou simplesmente um ID de nó exclusivo.

No código, um adaptador de rede pode ser identificado de várias maneiras. A tabela a seguir detalha as maneiras pelas quais um adaptador de rede pode ser identificado juntamente com as propriedades associadas. Recomendamos usar o GUID da interface (ifGuid) para programação, a menos que uma API específica exija um identificador de adaptador de rede diferente.

Observação

Na tabela a seguir, células em negrito representam uma propriedade desejável para programadores de rede.

Identificador Tamanho É único no sistema É único no mundo É previsível Será reciclado se a NIC for removida Persiste nas reinicializações Os usuários finais podem modificar a qualquer momento Os drivers podem modificar a qualquer momento Familiaridade geral com os usuários finais Está sempre presente
ifIndex 4 bytes Sim Não No Sim Não1 Não Não Alguns2 Sim
NetLuid 8 bytes Sim Não No Sim Sim Não Não No Sim
ifGuid 16 bytes Sim De modo geral3 Não Não Sim Não Não No Sim
ifAlias 514 bytes Sim para NICs4 Não Às vezes5 Sim Sim Sim Não Sim De modo geral4
ifDescr 514 bytes De modo geral6 Não No Sim Sim Não Sim Sim Geralmente
ifPhysAddress (MAC ADDRESS) 0 a 32 bytes Geralmente, para NICs Geralmente, para NICs Sim Vinculado ao hardware Sim Não Não Sim De modo geral 7
ID da instância PnP Até 400 bytes Sim Não No Sim Sim Não Não No Geralmente, para NICs8
Localização PnP (número do slot PCI) Até 400 bytes Sim Não Sim Sim Sim Não Não Às vezes Às vezes8,9

Notas para a tabela anterior:

  1. IfIndexes não têm garantia de estabilidade durante as reinicializações, embora geralmente recebam o mesmo valor da inicialização anterior. Portanto, não é recomendado que os motoristas utilizem ifIndex, exceto quando exigido por uma API.
  2. Alguns netsh comandos usam ifIndex ou index, como uma entrada. Portanto, alguns usuários administrativos estarão familiarizados com a propriedade ifIndex se usarem o comando netsh com frequência.
  3. Se uma máquina for clonada ou criada, alguns dos GUIDs poderão ser os mesmos. Além disso, certos adaptadores de rede especiais, como o adaptador Teredo integrado, podem ter o mesmo GUID em todas as máquinas.
  4. NetCfg impõe que um ifAlias ​​seja uma cadeia de caracteres não vazia e seja exclusivo entre todos os NICs. No entanto, o provedor de adaptador NDIS não. Portanto, é possível encontrar adaptadores de rede especiais com nomes duplicados ou vazios. Isso é mais comumente visto em equipes LBFO.
  5. Somente se o firmware for compatível com a nomeação consistente de dispositivos. Em geral, os servidores possuem esse recurso.
  6. NetCfg atribui ifDescrs exclusivos a todos os adaptadores de rede. No entanto, os drivers podem chamar uma API para alterar ifDescr em qualquer coisa, incluindo algo que não é único. Alguns pacotes de software de terceiros fazem isso.
  7. Nem todos os tipos de mídia possuem um “endereço MAC”. Por exemplo, alguns túneis não possuem esse conceito e simplesmente anunciam uma matriz de bytes de comprimento zero como seu endereço de rede.
  8. Presente apenas em adaptadores de rede apoiadas por um dispositivo PnP. Por exemplo, interfaces de loopback, interfaces de filtro leves, interfaces fornecidas por um provedor de interface NDIS e certas NICs integradas especiais não possuem dispositivos PnP como suporte.
  9. Apenas alguns barramentos PnP são compatíveis com um ID de localização PnP. Os barramentos PCI e USB integrados funcionam, enquanto os dispositivos enumerados como root não.

Visibilidade para desenvolvedores

Na tabela anterior, todas as propriedades, exceto as propriedades Plug and Play (PnP), são visíveis para aplicativos de desktop no modo de usuário e drivers no modo kernel por meio de um cabeçalho compartilhado (Netioapi.h). As propriedades PnP são visíveis por meio do cabeçalho Devpkey.h e são usadas por aplicativos de desktop em modo de usuário e drivers em modo kernel. Por exemplo, consulte a documentação DEVPKEY.

A API IP Helper também está disponível para aplicativos de desktop em modo de usuário e drivers em modo kernel.

A superfície da API UWP expõe apenas a propriedade ifGuid diretamente. No entanto, é possível que desenvolvedores de aplicativos UWP importem a função GetIfTable2 usando P/Invoke se forem necessários para acessar outras propriedades do adaptador de rede.

Para definições de base de informações de gerenciamento (MIB) para adaptadores de rede, consulte RFC 2863.

Para adaptadores de rede NDIS em drivers de rede, consulte Adaptadores de rede NDIS.

Para referência da API Netioapi.h, consulte netioapi.h header.