Sdílet prostřednictvím


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:

  1. 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.
  2. Některé netsh příkazy jako vstup přebírají ifIndexnebo index. Někteří správci jsou proto obeznámeni s ifIndex vlastnost, pokud často používají příkaz netsh.
  3. 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.
  4. 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.
  5. Pouze pokud firmware podporuje konzistentní pojmenování zařízení. Typicky mají servery tuto funkci.
  6. 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í.
  7. 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.
  8. 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í.
  9. 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í.

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.