Partilhar via


Interfaces de rede

Este tópico descreve os conceitos de interface 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 a um público de programadores, tanto para aplicações de rede de ambiente de trabalho do Windows como para controladores de rede de modo kernel. No entanto, algumas das informações apresentadas aqui também podem ser úteis para administradores de sistema que gerenciam interfaces de rede por meio de cmdlets do PowerShell.

Visão geral

Um de interface de rede é o ponto onde duas partes de equipamentos de rede ou camadas de protocolo se conectam. Normalmente, isso é representado por uma placa de interface de rede (NIC) 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 apenas de software, como a interface de loopback (127.0.0.1 para IPv4 ou ::1 para IPv6).

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

Identificadores e propriedades da interface de rede

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

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

Observação

Na tabela a seguir, negrito células 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 utilizadores finais Está sempre presente
ifIndex 4 bytes Sim Não Não Sim N.º1 Não Não Alguns2 Sim
NetLuid 8 bytes Sim Não Não Sim Sim Não Não Não Sim
ifGuid 16 bytes Sim Geralmente3 Não Não Sim Não Não Não Sim
ifAlias 514 bytes Sim para NICs4 Não Às vezes,5 Sim Sim Sim Não Sim Geralmente4
ifDescr 514 bytes Normalmente6 Não Não Sim Sim Não Sim Sim Normalmente
ifPhysAddress (MAC ADDRESS) 0 a 32 bytes Normalmente, para NICs Normalmente, para NICs Sim Vinculado ao hardware Sim Não Não Sim Normalmente7
ID da instância PnP Até 400 bytes Sim Não Não Sim Sim Não Não Não Normalmente, 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 vezes,8,9

Notas relativas ao quadro anterior:

  1. IfIndexes não têm garantia de serem estáveis nas reinicializações, embora geralmente recebam o mesmo valor da inicialização anterior. Portanto, não é recomendável que os drivers usem ifIndex exceto quando exigido por uma API.
  2. Alguns comandos netsh tomam ifIndex, ou index, como uma entrada. Portanto, alguns usuários administrativos estão familiarizados com a propriedade ifIndex se usarem o comando netsh com freqüência.
  3. Se uma máquina for clonada ou fotografada, alguns dos GUIDs podem ser os mesmos. Além disso, certas interfaces de rede especiais, como a interface Teredo integrada, podem ter o mesmo GUID em todas as máquinas.
  4. NetCfg impõe que um ifAlias é uma cadeia de caracteres não vazia e é exclusivo entre todas as NICs. No entanto, o provedor de interface NDIS não. Assim, é possível encontrar interfaces de rede especiais com nomes duplicados ou vazios. Isso é mais comumente visto com equipes LBFO.
  5. Apenas se o firmware suportar a Nomenclatura Consistente do Dispositivo. Normalmente, os servidores têm esse recurso.
  6. NetCfg atribui ifDescrs exclusivos a todas as interfaces de rede. No entanto, os drivers podem chamar uma API para alterar o ifDescr para qualquer coisa, incluindo algo que não seja exclusivo. Alguns pacotes de software 3rd party fazem isso.
  7. Nem todos os tipos de mídia têm um "endereço MAC". Por exemplo, alguns túneis não têm esse conceito e simplesmente anunciam uma matriz de bytes de comprimento zero como seu endereço de rede.
  8. Presente apenas em interfaces de rede que são 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 têm dispositivos PnP que as suportem.
  9. Apenas alguns barramentos PnP suportam um ID de localização PnP. Os barramentos PCI e USB integrados, enquanto os dispositivos enumerados pela raiz 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 de modo de usuário e drivers de modo kernel por meio de um cabeçalho compartilhado (Netioapi.h). As propriedades PnP são visíveis através do cabeçalho Devpkey.h e são usadas por aplicativos de desktop de modo de usuário e drivers de modo kernel. Por exemplo, consulte a documentação DEVPKEY.

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

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

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

Para interfaces de rede NDIS em drivers de rede, consulte NDIS Network Interfaces.

Para referência da API Netioapi.h, consulte cabeçalho netioapi.h.