Interfacce di rete
Questo argomento descrive i concetti generali dell'interfaccia di rete in Windows, inclusi i modi in cui possono essere identificati nel codice e le relative proprietà.
Importante
Questo argomento è destinato a un pubblico di sviluppatori, sia per le app di rete desktop di Windows che per i driver di rete in modalità kernel. Tuttavia, alcune delle informazioni presentate qui possono essere utili anche per gli amministratori di sistema che gestiscono le interfacce di rete tramite i cmdlet di PowerShell.
Panoramica
Un'interfaccia di rete è il punto in cui due componenti di apparecchiature di rete o livelli di protocollo si connettono. In genere, questo è rappresentato da una scheda di interfaccia di rete fisica per la connessione tra un computer e una rete privata o pubblica. Tuttavia, può anche assumere la forma di un componente solo software, ad esempio l'interfaccia di loopback (127.0.0.1
per IPv4 o ::1
per IPv6).
Le interfacce di rete sono definite dalla Internet Engineering Task Force (IETF) in RFC 2863 e non devono essere definite da Windows. Per domande dettagliate sul significato degli identificatori di interfaccia di rete, ad esempio ifIndex, vedere le definizioni di IETF. Nella parte restante di questo argomento vengono illustrati i dettagli di implementazione specifici di Windows.
Identificatori e proprietà dell'interfaccia di rete
In Windows un'interfaccia di rete può essere identificata in modi diversi. Alcuni di questi identificatori vengono usati per distinguere le interfacce di rete l'una dall'altra, ma non tutti gli identificatori sono ugualmente adatti a tale attività a causa delle relative proprietà diverse. In genere, le interfacce di rete sono identificate da un indirizzo di rete a componenti esterni. Ad esempio, questo può essere un ID nodo e un numero di porta o semplicemente un ID nodo univoco.
Nel codice, un'interfaccia di rete può essere identificata in molti modi. Nella tabella seguente vengono descritte le modalità di identificazione di un'interfaccia di rete insieme alle proprietà associate. È consigliabile usare il GUID dell'interfaccia (ifGuid) per la programmazione, a meno che un'API specifica non richieda un identificatore di interfaccia di rete diverso.
Nota
Nella tabella seguente le celle in grassetto rappresentano una proprietà che è preferibile per i programmatori di rete.
Identifier | Dimensione | È univoco nel sistema | È unico al mondo | È prevedibile | Verrà riciclato se la scheda di interfaccia di rete viene rimossa | Persiste tra i riavvii | Gli utenti finali possono modificare in qualsiasi momento | I driver possono modificare in qualsiasi momento | Familiarità generale con gli utenti finali | È sempre presente |
---|---|---|---|---|---|---|---|---|---|---|
ifIndex | 4 byte | Sì | No | No | Sì | No1 | No | No | Alcuni2 | Sì |
NetLuid | 8 byte | Sì | No | No | Sì | Sì | No | No | No | Sì |
ifGuid | 16 byte | Sì | In genere3 | No | No | Sì | No | No | No | Sì |
ifAlias | 514 byte | Sì per le schede di interfaccia direte 4 | No | A volte5 | Sì | Sì | Sì | No | Sì | In genere4 |
ifDescr | 514 byte | In genere6 | No | No | Sì | Sì | No | Sì | Sì | Solitamente |
ifPhysAddress (INDIRIZZO MAC) | Da 0 a 32 byte | In genere, per le schede di interfaccia di rete | In genere, per le schede di interfaccia di rete | Sì | Legato all'hardware | Sì | No | No | Sì | In genere 7 |
ID istanza PnP | Fino a 400 byte | Sì | No | No | Sì | Sì | No | No | No | In genere, per le schede di interfaccia direte 8 |
Posizione PnP (numero di slot PCI) | Fino a 400 byte | Sì | No | Sì | Sì | Sì | No | No | A volte | A volte8,9 |
Note per la tabella precedente:
- IfIndexes non è garantito che sia stabile tra i riavvii, anche se spesso ricevono lo stesso valore dell'avvio precedente. Pertanto, non è consigliabile che i driver usino ifIndex tranne dove richiesto da un'API.
- Alcuni
netsh
comandi accettanoifIndex
, oindex
, come input. Di conseguenza, alcuni utenti amministratori hanno familiarità con la proprietà ifIndex se usano frequentemente ilnetsh
comando. - Se un computer viene clonato o immagineto, alcuni GUID potrebbero essere uguali. Inoltre, alcune interfacce di rete speciali, ad esempio l'interfaccia Teredo predefinita, potrebbero avere lo stesso GUID in tutti i computer.
- NetCfg applica che ifAlias è una stringa non vuota ed è univoca tra tutte le schede di interfaccia di rete. Tuttavia, il provider di interfaccia NDIS non lo fa. È possibile trovare interfacce di rete speciali con nomi duplicati o vuoti. Questo è più comunemente visto con i team LBFO.
- Solo se il firmware supporta la denominazione coerente dei dispositivi. Typcically, i server hanno questa funzionalità.
- NetCfg assegna un valore ifDescrs univoco a tutte le interfacce di rete. Tuttavia, i driver possono chiamare un'API per modificare ifDescr in qualsiasi elemento, incluso un elemento non univoco. Alcuni pacchetti software di terze parti eseguono questa operazione.
- Non tutti i tipi di supporti hanno un "indirizzo MAC". Ad esempio, alcuni tunnel non hanno questo concetto e annunciano semplicemente una matrice di byte di lunghezza zero come indirizzo di rete.
- Presente solo nelle interfacce di rete supportate da un dispositivo PnP. Ad esempio, interfacce di loopback, interfacce di filtro leggero, interfacce fornite da un provider di interfaccia NDIS e alcune schede di interfaccia di rete predefinite speciali non dispongono di dispositivi PnP di backup.
- Solo alcuni bus PnP supportano un ID posizione PnP. I bus PCI e USB predefiniti fanno, mentre i dispositivi con enumerazione radice non lo fanno.
Visibilità per gli sviluppatori
Nella tabella precedente tutte le proprietà ad eccezione delle proprietà Plug and Play (PnP) sono visibili alle app desktop in modalità utente e ai driver in modalità kernel tramite un'intestazione condivisa (Netioapi.h). Le proprietà PnP sono visibili tramite l'intestazione Devpkey.h e vengono usate sia dalle app desktop in modalità utente che dai driver in modalità kernel. Ad esempio, vedere la documentazione di DEVPKEY .
L'API helper IP è disponibile anche per le app desktop in modalità utente e i driver in modalità kernel.
La superficie dell'API UWP espone direttamente la proprietà ifGuid . Tuttavia, è possibile che gli sviluppatori di app UWP importino la funzione GetIfTable2 usando P/Invoke se sono necessari per accedere ad altre proprietà dell'interfaccia di rete.
Argomenti correlati
Per le definizioni MIB (Management Information Base) per le interfacce di rete, vedere RFC 2863.
Per le interfacce di rete NDIS nei driver di rete, vedere Interfacce di rete NDIS.
Per informazioni di riferimento sulle API Netioapi.h, vedere l'intestazione netioapi.h.