Interfaces de red
En este tema se describen los conceptos de interfaz de red de alto nivel en Windows, incluidas las formas en que se pueden identificar en el código y sus propiedades.
Importante
Este tema está pensado para desarrolladores, tanto para aplicaciones de red de escritorio de Windows como para controladores de redes en modo kernel. Sin embargo, parte de la información que se presenta aquí también puede ser útil para los administradores de sistemas que administran interfaces de red a través de cmdlets de PowerShell.
Información general
Una interfaz de red es el punto en el que se conectan dos partes de equipos de red o capas de protocolo. Normalmente, esto se representa mediante una tarjeta de interfaz de red (NIC) física para la conexión entre un equipo y una red privada o pública. Sin embargo, también puede adoptar la forma de un componente solo de software, como la interfaz de bucle invertido (127.0.0.1
para IPv4 o ::1
para IPv6).
Las interfaces de red han sido definidas por el Grupo de trabajo de ingeniería de Internet (IETF) en RFC 2863 y no tienen que definirse en Windows. Para obtener preguntas detalladas sobre el significado de los identificadores de interfaz de red, como ifIndex, consulte las definiciones de IETF. En el resto de este tema, se describen los detalles de implementación específicos de Windows.
Identificadores y propiedades de la interfaz de red
En Windows, se puede identificar una interfaz de red de diferentes maneras. Algunos de estos identificadores se usan para distinguir las interfaces de red entre sí, pero no todos los identificadores son igualmente adecuados para esa tarea, ya que tienen diferentes propiedades. Por lo general, las interfaces de red se identifican mediante una dirección de red en los componentes externos. Por ejemplo, puede tratarse de un identificador de nodo y un número de puerto o, simplemente, de un identificador de nodo único.
En el código, una interfaz de red se puede identificar de muchas maneras. En la tabla siguiente se detallan las formas en que se puede identificar una interfaz de red junto con las propiedades asociadas. Se recomienda usar el GUID de interfaz (ifGuid) para la programación a menos que una API específica requiera un identificador de interfaz de red diferente.
Nota:
En la tabla siguiente, las celdas en negrita representan una propiedad que es deseable para los programadores de redes.
Identificador | Size | Es único en el sistema | Es único en el mundo | Es predecible | Se reciclará si se quita la NIC | Se conserva en los reinicios | Los usuarios finales pueden modificarlo en cualquier momento | Los controladores pueden modificarlo en cualquier momento | Familiaridad general con los usuarios finales | Siempre está presente |
---|---|---|---|---|---|---|---|---|---|---|
ifIndex | 4 bytes | Sí | No | No | Sí | No1 | No | No | Algunos2 | Sí |
NetLuid | 8 bytes | Sí | No | No | Sí | Sí | No | No | No | Sí |
ifGuid | 16 bytes | Sí | Normalmente3 | No | No | Sí | No | No | No | Sí |
ifAlias | 514 bytes | Sí para las NIC4 | No | A veces5 | Sí | Sí | Sí | No | Sí | Normalmente4 |
ifDescr | 514 bytes | Normalmente6 | No | No | Sí | Sí | No | Sí | Sí | Normalmente |
ifPhysAddress (DIRECCIÓN MAC) | De 0 a 32 bytes | Normalmente, para las NIC | Normalmente, para las NIC | Sí | Vinculado al hardware | Sí | No | No | Sí | Normalmente 7 |
ID de instancia PnP | Hasta 400 bytes | Sí | No | No | Sí | Sí | No | No | No | Normalmente, para las NIC8 |
Ubicación de PnP (número de ranura PCI) | Hasta 400 bytes | Sí | No | Sí | Sí | Sí | No | No | A veces. | A veces8,9 |
Notas de la tabla anterior:
- No se garantiza que los identificadores IfIndex sean estables en los reinicios, aunque a menudo reciben el mismo valor que el arranque anterior. Por lo tanto, no se recomienda que los controladores usen ifIndex, excepto cuando lo requiera una API.
- Algunos
netsh
comandos tomanifIndex
oindex
como entrada. Por lo tanto, algunos usuarios administrativos están familiarizados con la propiedad ifIndex si usan el comandonetsh
con frecuencia. - Si se clona o se crea una imagen de una máquina, es posible que algunos de los GUID sean los mismos. Además, algunas interfaces de red especiales, como la interfaz Teredo integrada, pueden tener el mismo GUID en todas las máquinas.
- NetCfg exige que ifAlias sea una cadena no vacía y que sea única entre todas las NIC. Sin embargo, el proveedor de interfaz NDIS no lo exige. Por tanto, es posible encontrar interfaces de red especiales con nombres duplicados o vacíos. Esto es más frecuente en los equipos LBFO.
- Solo si el firmware admite la nomenclatura coherente de dispositivos. Normalmente, los servidores tienen esta característica.
- NetCfg asigna ifDescr únicos a todas las interfaces de red. Sin embargo, los controladores pueden llamar a una API para cambiar ifDescr a cualquier cosa, incluido algo que no sea único. Algunos paquetes de software de otros fabricantes lo hacen.
- No todos los tipos de soportes tienen una "dirección MAC". Por ejemplo, algunos túneles no tienen este concepto y se limitan a anunciar una matriz de bytes de longitud cero como dirección de red.
- Solo está presente en interfaces de red respaldadas por un dispositivo PnP. Por ejemplo, las interfaces de bucle invertido, las interfaces de filtro ligero, las interfaces proporcionadas por un proveedor de interfaz NDIS y algunas NIC integradas especiales no tienen dispositivos PnP que las respalden.
- Solo algunos buses PnP admiten un identificador de ubicación de PnP. Los buses PCI y USB integrados los admiten, mientras que los dispositivos enumerados en raíz no lo hacen.
Visibilidad para los desarrolladores
En la tabla anterior, todas las propiedades excepto las propiedades Plug and Play (PnP) son visibles para las aplicaciones de escritorio en modo de usuario y los controladores de modo kernel a través de un encabezado compartido (Netioapi.h). Las propiedades PnP son visibles a través del encabezado Devpkey.h y las usan tanto las aplicaciones de escritorio en modo de usuario como los controladores de modo kernel. Por ejemplo, consulte la documentación de DEVPKEY.
La API del Asistente de IP también está disponible para aplicaciones de escritorio en modo de usuario y controladores de modo kernel.
La superficie de la API de UWP solo expone directamente la propiedad ifGuid. Sin embargo, es posible que los desarrolladores de aplicaciones para UWP importen la función GetIfTable2 con P/Invoke si son necesarias para acceder a otras propiedades de interfaz de red.
Temas relacionados
Para obtener definiciones de la base de información de administración (MIB) para interfaces de red, consulte RFC 2863.
Para ver las interfaces de red NDIS en los controladores de red, consulte Interfaces de red NDIS.
Para ver la referencia de la API de Netioapi.h, consulte netioapi.h.