Netzwerkschnittstellen
In diesem Thema werden die Konzepte der Windows-Netzwerkschnittstelle auf hoher Ebene beschrieben, einschließlich der Möglichkeiten, sie im Code zu identifizieren, und ihrer Eigenschaften..
Wichtig
Dieses Thema richtet sich an Entwickler, die sich mit Windows-Desktop-Netzwerk-Apps und Kernel-Modus-Netzwerktreibern befassen. Dennoch können einige der hier vorgestellten Informationen auch für Systemadministratoren hilfreich sein, die Netzwerkschnittstellen über PowerShell-Cmdlets verwalten.
Übersicht
Eine Netzwerkschnittstelle ist der Punkt, an dem zwei Netzwerkgeräte oder Protokollebenen eine Verbindung herstellen. In der Regel wird dies durch eine physische Netzwerkschnittstellenkarte (Network Interface Card, NIC) für die Verbindung zwischen einem Computer und einem privaten oder öffentlichen Netzwerk dargestellt. Sie kann jedoch auch die Form einer softwaregeschützten Komponente wie der Loopbackschnittstelle (127.0.0.1
für IPv4 oder ::1
für IPv6) annehmen.
Netzwerkschnittstellen werden von der Internet Engineering Task Force (IETF) in RFC 2863 definiert und sollen nicht von Windows definiert werden. Ausführliche Fragen zur Bedeutung von Netzwerkschnittstellenbezeichnern wie ifIndex finden Sie in den Definitionen der IETF. Im restlichen Thema werden die Details zur Windows-spezifischen Implementierung erläutert.
Bezeichner und Eigenschaften der Netzwerkschnittstelle
Unter Windows kann eine Netzwerkschnittstelle auf unterschiedliche Weise identifiziert werden. Einige dieser Bezeichner werden verwendet, um Netzwerkschnittstellen voneinander zu unterscheiden, aber nicht alle Bezeichner sind aufgrund ihrer unterschiedlichen Eigenschaften für diese Aufgabe gleichermaßen geeignet. Im Allgemeinen werden Netzwerkschnittstellen durch eine Netzwerkadresse für externe Komponenten identifiziert. Dies kann z. B. eine Knoten-ID und eine Portnummer oder einfach eine eindeutige Knoten-ID sein.
Im Code kann eine Netzwerkschnittstelle auf vielfältige Weise identifiziert werden. In der folgenden Tabelle werden die Möglichkeiten beschrieben, wie eine Netzwerkschnittstelle zusammen mit den zugehörigen Eigenschaften identifiziert werden kann. Wir empfehlen die Verwendung der Schnittstellen-GUID (ifGuid) für die Programmierung, es sei denn, eine bestimmte API erfordert einen anderen Netzwerkschnittstellenbezeichner.
Hinweis
In der folgenden Tabelle stellen fett formatierte Zellen eine Eigenschaft dar,die für Netzwerkprogrammierer wünschenswert ist.
Identifier | Size | Ist im System eindeutig | Ist in der Welt eindeutig | Ist vorhersehbar | Wird wiederverwendet, wenn die NIC entfernt wird | Bleibt auch nach Neustarts bestehen | Kann von Endbenutzern jederzeit geändert werden | Kann von Treibern jederzeit geändert werden | Allgemeine Vertrautheit mit Endbenutzern | Ist immer präsent |
---|---|---|---|---|---|---|---|---|---|---|
ifIndex | 4 Bytes | Ja | Nr. | Nein | Ja | Nein1 | Nein | Nein | Einige2 | Ja |
NetLuid | 8 Bytes | Ja | Nr. | Nein | Ja | Ja | Nein | Nein | Nein | Ja |
ifGuid | 16 Bytes | Ja | Normalerweise3 | No | Nein | Ja | Nein | Nein | Nein | Ja |
ifAlias | 514 Bytes | Ja für NICs4 | No | Manchmal5 | Ja | Ja | Ja | Nein | Ja | Normalerweise4 |
ifDescr | 514 Bytes | Normalerweise6 | No | Nein | Ja | Ja | Nein | Ja | Ja | Normalerweise |
ifPhysAddress (MAC-ADRESSE) | 0 bis 32 Bytes | In der Regel für NICs | In der Regel für NICs | Ja | An Hardware gebunden | Ja | Nein | Nein | Ja | Normalerweise 7 |
PnP-Instanz-ID | Bis zu 400 Byte | Ja | Nr. | Nein | Ja | Ja | Nein | Nein | No | In der Regel für NICs8 |
PnP-Position (PCI-Steckplatznummer) | Bis zu 400 Byte | Ja | Keine | Ja | Ja | Ja | Nein | Nein | Manchmal. | Manchmal8,9 |
Hinweise für die vorherige Tabelle:
- Für IfIndexes wird nicht garantiert, dass sie über Neustarts hinweg stabil sind, obwohl sie häufig denselben Wert wie beim vorherigen Start erhalten. Daher wird nicht empfohlen, wenn Treiber ifIndex verwenden, es sei denn, dies ist für eine API erforderlich.
- Einige
netsh
Befehle verwendenifIndex
oderindex
als Eingabe. Daher sind einige administrative Benutzer mit der ifIndex-Eigenschaft vertraut, wenn sie den Befehlnetsh
häufig verwenden. - Wenn ein Computer geklont oder ein Image davon erstellt wird, sind möglicherweise einige der GUIDs identisch. Darüber hinaus verfügen bestimmte spezielle Netzwerkschnittstellen wie die integrierte Teredo-Schnittstelle möglicherweise über dieselbe GUID auf allen Computern.
- NetCfg erzwingt, dass ein ifAlias eine nicht leere Zeichenfolge ist und unter allen NICs eindeutig ist. Der NDIS-Schnittstellenanbieter hingegen nicht. Daher ist es möglich, spezielle Netzwerkschnittstellen mit doppelten oder leeren Namen zu finden. Dies ist am häufigsten bei LBFO-Teams zu sehen.
- Nur, wenn die Firmware konsistente Gerätebenennung unterstützt. Typisch verfügen Server über dieses Feature.
- NetCfg weist allen Netzwerkschnittstellen eindeutige ifDescrs zu. Treiber können jedoch eine API aufrufen, um ifDescr auf etwas zu ändern, einschließlich etwas, das nicht eindeutig ist. Dazu führen einige Drittanbieter-Softwarepakete aus.
- Nicht alle Medientypen haben eine „MAC-Adresse”. Beispielsweise gibt es bei einigen Tunneln dieses Konzept nicht, und sie geben einfach eine Byte-Reihe der Länge Null als ihre Netzwerkadresse an.
- Nur auf Netzwerkschnittstellen vorhanden, die von einem PnP-Gerät unterstützt werden. Beispielsweise Loopbackschnittstellen, leichte Filterschnittstellen, Schnittstellen, die von einem NDIS-Schnittstellenanbieter bereitgestellt werden, und bestimmte spezielle integrierte NICs verfügen nicht über PnP-Geräte, die diese unterstützen.
- Nur einige PnP-Busse unterstützen eine PnP-Standort-ID. Die integrierten PCI- und USB-Busse tun dies, während dies bei Geräten, die als root-Geräte aufgeführt sind, nicht der Fall ist.
Sichtbarkeit für Entwickler
In der vorherigen Tabelle sind alle Eigenschaften mit Ausnahme der Plug and Play -Eigenschaften (PnP) für Desktop-Apps im Benutzermodus und Kernelmodustreiber über einen freigegebenen Header (Netioapi.h) sichtbar. Die PnP-Eigenschaften sind über den Devpkey.h-Header sichtbar und werden sowohl von Desktop-Apps im Benutzermodus als auch von Kernelmodustreibern verwendet. Weitere Informationen finden Sie z. B. in der DEVPKEY-Dokumentation.
Die IP-Hilfs-API ist auch für Benutzermodus-Desktop-Apps und Kernelmodustreiber verfügbar.
Die Oberfläche der UWP-API macht die ifGuid-Eigenschaft nur direkt verfügbar. Es ist jedoch möglich, dass Entwickler einer UWP-App die GetIfTable2-Funktion mithilfe von P/Invoke importieren, wenn sie auf andere Netzwerkschnittstelleneigenschaften zugreifen müssen.
Zugehörige Themen
Informationen zu Management Information Base (MIB-)Definitionen für Netzwerkschnittstellen finden Sie unter RFC 2863.
Informationen zu NDIS-Netzwerkschnittstellen in Netzwerktreibern finden Sie unter NDIS-Netzwerkschnittstellen.
Referenz zur Netioapi.h-API finden Sie unter netioapi.h-Header.