Nätverksgränssnitt
I det här avsnittet beskrivs begrepp för nätverksgränssnitt på hög nivå i Windows, inklusive hur de kan identifieras i kod och deras egenskaper.
Viktig
Det här avsnittet är avsett för en utvecklare, både för Windows-skrivbordsnätverksappar och nätverksdrivrutiner i kernelläge. En del av informationen som presenteras här kan dock också vara användbar för systemadministratörer som hanterar nätverksgränssnitt via PowerShell-cmdletar.
Överblick
Ett nätverksgränssnitt är den punkt där två delar av nätverksutrustningen eller protokollskikten ansluter. Detta representeras vanligtvis av ett fysiskt nätverkskort (NIC) för anslutning mellan en dator och ett privat eller offentligt nätverk. Den kan dock också ha formen av en komponent som endast är programvara, till exempel loopback-gränssnittet (127.0.0.1
för IPv4 eller ::1
för IPv6).
Nätverksgränssnitt definieras av IETF (Internet Engineering Task Force) i RFC 2863 och är inte avsedda att definieras av Windows. Detaljerade frågor om innebörden av nätverksgränssnittsidentifierare, till exempel ifIndex, finns i IETF:s definitioner av dem. I resten av det här avsnittet beskrivs Windows-specifik implementeringsinformation.
Identifierare och egenskaper för nätverksgränssnitt
I Windows kan ett nätverksgränssnitt identifieras på olika sätt. Vissa av dessa identifierare används för att skilja nätverksgränssnitt från varandra, men inte alla identifierare är lika lämpade för den uppgiften på grund av deras olika egenskaper. I allmänhet identifieras nätverksgränssnitt av en nätverksadress till externa komponenter. Det kan till exempel vara ett nod-ID och ett portnummer, eller helt enkelt ett unikt nod-ID.
I kod kan ett nätverksgränssnitt identifieras på många sätt. I följande tabell beskrivs hur ett nätverksgränssnitt kan identifieras tillsammans med associerade egenskaper. Vi rekommenderar att du använder gränssnittets GUID (ifGuid) för programmering om inte ett specifikt API kräver ett annat nätverksgränssnittsidentifierare.
Not
I följande tabell representerar fetstilta celler en egenskap som är önskvärd för nätverksprogram programmerare.
Identifierare | Storlek | Är unikt i systemet | Är unik i världen | Är förutsägbar | Kommer att återvinnas om nätverkskortet tas bort | Bevaras mellan omstarter | Slutanvändare kan när som helst ändra | Drivrutiner kan när som helst ändra | Allmän förtrogenhet med slutanvändare | Finns alltid |
---|---|---|---|---|---|---|---|---|---|---|
ifIndex | 4 byte | Ja | Nej | Nej | Ja | Ingen1 | Ingen | Ingen | Vissa2 | Ja |
NetLuid | 8 byte | Ja | Nej | Nej | Ja | Ja | Ingen | Ingen | Nej | Ja |
ifGuid | 16 byte | Ja | vanligtvis3 | Nej | Ingen | Ja | Ingen | Ingen | Nej | Ja |
ifAlias | 514 byte | Ja för nätverkskort4 | Nej | Ibland5 | Ja | Ja | Ja | Ingen | Ja | vanligtvis4 |
ifDescr | 514 byte | Vanligtvis6 | Nej | Nej | Ja | Ja | Ingen | Ja | Ja | vanligtvis |
ifPhysAddress (MAC ADDRESS) | 0 till 32 byte | Vanligtvis för nätverkskort | vanligtvis för nätverkskort | Ja | knuten till maskinvaru- | Ja | Ingen | Ingen | Ja | vanligtvis7 |
PnP-instans-ID | Upp till 400 byte | Ja | Nej | Nej | Ja | Ja | Ingen | Ingen | Nej | vanligtvis för nätverkskort8 |
PnP-plats (PCI-facknummer) | Upp till 400 byte | Ja | Nej | Ja | Ja | Ja | Ingen | Ingen | Ibland | Ibland8,9 |
Anteckningar för föregående tabell:
- IfIndexes garanteras inte vara stabila mellan omstarter, även om de ofta får samma värde som den föregående starten. Därför rekommenderar vi inte att drivrutiner använder ifIndex förutom när det krävs av ett API.
- Vissa
netsh
kommandon använderifIndex
, ellerindex
, som indata. Därför är vissa administrativa användare bekanta med egenskapen ifIndex om de använder kommandotnetsh
ofta. - Om en dator klonas eller avbildas kan vissa GUID:er vara desamma. Vissa särskilda nätverksgränssnitt som det inbyggda Teredo-gränssnittet kan också ha samma GUID på alla datorer.
- NetCfg framtvingar att en omAlias är en icke-tom sträng och är unik bland alla nätverkskort. NDIS-gränssnittsprovidern gör dock inte det. Därför är det möjligt att hitta särskilda nätverksgränssnitt med duplicerade eller tomma namn. Detta ses oftast med LBFO-team.
- Endast om den inbyggda programvaran stöder konsekvent namngivning av enheter. Typcically har servrar den här funktionen.
- NetCfg tilldelar unika ifDescrs till alla nätverksgränssnitt. Drivrutiner kan dock anropa ett API för att ändra omDescr till något, inklusive något som inte är unikt. Vissa programvarupaket från tredje part gör detta.
- Alla medietyper har inte en "MAC-adress". Vissa tunnlar har till exempel inte det här konceptet och annonserar bara en bytematris med noll längd som nätverksadress.
- Finns endast i nätverksgränssnitt som backas upp av en PnP-enhet. Till exempel loopback-gränssnitt, gränssnitt för låg viktfilter, gränssnitt som tillhandahålls av en NDIS-gränssnittsprovider och vissa särskilda inbyggda nätverkskort har inte PnP-enheter som stöder dem.
- Endast vissa PnP-bussar stöder ett PnP-plats-ID. De inbyggda PCI- och USB-bussarna gör det, medan rotuppräknade enheter inte gör det.
Synlighet för utvecklare
I föregående tabell visas alla egenskaper förutom PnP-egenskaperna (Plug and Play) för skrivbordsappar i användarläge och drivrutiner för kernelläge via ett delat huvud (Netioapi.h). PnP-egenskaperna visas via Devpkey.h-huvudet och används av både skrivbordsappar i användarläge och drivrutiner för kernelläge. Du kan till exempel läsa dokumentationen om DEVPKEY.
DEN IP-hjälpen API är också tillgänglig för både skrivbordsappar i användarläge och drivrutiner för kernelläge.
UWP API-ytan exponerar bara egenskapen ifGuid direkt. Det är dock möjligt för UWP-apputvecklare att importera funktionen GetIfTable2 med hjälp av P/Invoke om de måste komma åt andra egenskaper för nätverksgränssnittet.
Relaterade ämnen
Informationsbasdefinitioner för hanteringsinformation (MIB) för nätverksgränssnitt finns i RFC 2863.
För NDIS-nätverksgränssnitt i nätverksdrivrutiner, se NDIS-nätverksgränssnitt.
Api-referens för Netioapi.h finns i netioapi.h-huvud.