Síťová rozhraní
Toto téma popisuje koncepty síťového rozhraní vysoké úrovně ve Windows, včetně způsobů, jak je lze identifikovat v kódu a jejich vlastnostech.
Důležitý
Toto téma je určené pro cílovou skupinu vývojářů, a to jak pro desktopové síťové aplikace pro Windows, tak pro síťové ovladače režimu jádra. Některé zde uvedené informace ale můžou být užitečné i pro správce systému, kteří spravují síťová rozhraní prostřednictvím rutin PowerShellu.
Přehled
síťového rozhraní je bod, kde se spojují dvě části síťového zařízení nebo vrstvy protokolu. Obvykle to představuje fyzická síťová karta (NIC) pro připojení mezi počítačem a privátní nebo veřejnou sítí. Může však také mít formu softwarové komponenty, jako je rozhraní zpětné smyčky (127.0.0.1
pro IPv4 nebo ::1
pro IPv6).
Síťová rozhraní jsou definována protokolem IETF (Internet Engineering Task Force) v RFC 2863 a nemají být definována systémem Windows. Podrobné dotazy týkající se významu identifikátorů síťového rozhraní, jako je ifIndex, naleznete v definicích IETF. Zbývající část tohoto tématu popisuje podrobnosti implementace specifické pro Windows.
Identifikátory a vlastnosti síťového rozhraní
Ve Windows lze síťové rozhraní identifikovat různými způsoby. Některé z těchto identifikátorů se používají k rozlišení síťových rozhraní od sebe, ale ne všechny identifikátory jsou pro danou úlohu stejně vhodné kvůli jejich odlišným vlastnostem. Obecně platí, že síťová rozhraní jsou identifikována síťovým adresou externím komponentám. Může to být například ID uzlu a číslo portu nebo jednoduše jedinečné ID uzlu.
V kódu lze síťové rozhraní identifikovat mnoha způsoby. Následující tabulka obsahuje podrobnosti o způsobech identifikace síťového rozhraní spolu s přidruženými vlastnostmi. Pro programování doporučujeme použít identifikátor GUID rozhraní (ifGuid), pokud konkrétní rozhraní API nevyžaduje jiný identifikátor síťového rozhraní.
Poznámka
V následující tabulce tučným písmem buňky představují vlastnost, která je žádoucí pro síťové programátory.
Identifikátor | Velikost | Je v systému jedinečný. | Je jedinečný ve světě | Je předvídatelná | Pokud se síťová karta odebere, bude recyklována. | Zachování napříč restartováními | Koncoví uživatelé můžou kdykoli změnit | Ovladače můžou kdykoli změnit. | Obecná znalost koncových uživatelů | Je vždy k dispozici |
---|---|---|---|---|---|---|---|---|---|---|
ifIndex | 4 bajty | Ano | Ne | Ne | Ano | Bez1 | Bez | Bez | některé2 | Ano |
NetLuid | 8 bajtů | Ano | Ne | Ne | Ano | Ano | Bez | Bez | Ne | Ano |
ifGuid | 16 bajtů | Ano | obvykle3 | Ne | Bez | Ano | Bez | Bez | Ne | Ano |
ifAlias | 514 bajtů | Ano pro síťové karty4 | Ne | Někdy5 | Ano | Ano | Ano | Bez | Ano | obvykle4 |
ifDescr | 514 bajtů | Obvykle6 | Ne | Ne | Ano | Ano | Bez | Ano | Ano | obvykle |
ifPhysAddress (ADRESA MAC) | 0 až 32 bajtů | Obvykle pro síťové karty | obvykle pro síťové karty | Ano | svázané s hardwarovými | Ano | Bez | Bez | Ano | obvykle7 |
ID instance PnP | Až 400 bajtů | Ano | Ne | Ne | Ano | Ano | Bez | Bez | Ne | obvykle pro síťové karty8 |
umístění PnP (číslo slotu PCI) | Až 400 bajtů | Ano | Ne | Ano | Ano | Ano | Bez | Bez | Někdy | Někdy8 9 |
Poznámky pro předchozí tabulku:
- IfIndexes nejsou zaručeny stabilní v rámci restartování, i když často obdrží stejnou hodnotu jako předchozí spuštění. Proto se nedoporučuje, aby ovladače používaly ifIndex s výjimkou případů, kdy to vyžaduje rozhraní API.
- Některé
netsh
příkazy jako vstup přebírajíifIndex
neboindex
. Někteří správci jsou proto obeznámeni s ifIndex vlastnost, pokud často používají příkaznetsh
. - Pokud je počítač naklonovaný nebo naklonovaný, můžou být některé identifikátory GUID stejné. Některé speciální síťová rozhraní, jako je například integrované rozhraní Teredo, může mít na všech počítačích stejný identifikátor GUID.
- NetCfg vynucuje, aby ifAlias je neprázdný řetězec a je jedinečný mezi všemi síťovými kartami. Poskytovatel rozhraní NDIS však ne. Tamrfore, je možné najít speciální síťová rozhraní s duplicitními nebo prázdnými názvy. Nejčastěji se to používá u týmů LBFO.
- Pouze pokud firmware podporuje konzistentní pojmenování zařízení. Typicky mají servery tuto funkci.
- NetCfg přiřadí jedinečné ifDescrs všem síťovým rozhraním. Ovladače ale můžou volat rozhraní API, které změní ifDescr na cokoli, včetně něčeho, co není jedinečné. Některé softwarové balíčky třetích stran to dělají.
- Ne všechny typy médií mají "adresu MAC". Například některé tunely nemají tento koncept a jednoduše inzerují pole s nulovou délkou jako jejich síťovou adresu.
- Existují pouze v síťových rozhraních, která jsou podporována zařízením PnP. Například rozhraní zpětné smyčky, lehká filtrová rozhraní, rozhraní poskytovaná poskytovatelem rozhraní NDIS a některé speciální integrované síťové karty nemají zařízení PnP, která je zálohují.
- ID umístění PnP podporují jenom některé autobusy PnP. Integrované sběrnice PCI a USB, zatímco zařízení s kořenovým výčetm nemají.
Viditelnost pro vývojáře
V předchozí tabulce jsou všechny vlastnosti s výjimkou vlastností Plug and Play (PnP) viditelné pro desktopové aplikace v uživatelském režimu a ovladače režimu jádra prostřednictvím sdílené hlavičky (Netioapi.h). Vlastnosti PnP jsou viditelné prostřednictvím hlavičky Devpkey.h a používají se jak desktopovými aplikacemi v uživatelském režimu, tak ovladači režimu jádra. Podívejte se například na dokumentaci k DEVPKEY.
Rozhraní API pomocníka protokolu IP je také k dispozici pro desktopové aplikace v uživatelském režimu i ovladače režimu jádra.
Rozhraní API pro UPW zpřístupňuje pouze ifGuid vlastnost přímo. Vývojáři aplikací pro UPW ale mohou importovat funkci GetIfTable2 pomocí volání nespravovaného kódu, pokud jsou potřeba pro přístup k jiným vlastnostem síťového rozhraní.
Související témata
Definice základu informací pro správu (MIB) pro síťová rozhraní najdete v tématu RFC 2863.
Síťová rozhraní NDIS v síťových ovladačích najdete v tématu síťové rozhraní NDIS.
Referenční informace k rozhraní NETioapi.h API najdete v hlavičky netioapi.h.