Udostępnij za pośrednictwem


Interfejsy sieciowe

W tym temacie opisano ogólne pojęcia dotyczące interfejsu sieciowego w systemie Windows, w tym sposoby ich identyfikacji w kodzie i ich właściwościach.

Ważny

Ten temat jest przeznaczony dla odbiorców deweloperów, zarówno dla aplikacji sieci klasycznych systemu Windows, jak i sterowników sieci trybu jądra. Niemniej jednak niektóre przedstawione tutaj informacje mogą być również przydatne dla administratorów systemu zarządzających interfejsami sieciowymi za pomocą poleceń cmdlet programu PowerShell.

Przegląd

interfejs sieciowy to punkt, w którym łączą się dwa elementy sprzętu sieciowego lub warstwy protokołu. Zazwyczaj jest to reprezentowane przez fizyczną kartę sieciową (NIC) dla połączenia między komputerem a prywatną lub publiczną siecią. Może jednak również mieć postać składnika tylko oprogramowania, takiego jak interfejs sprzężenia zwrotnego (127.0.0.1 dla protokołu IPv4 lub ::1 dla protokołu IPv6).

Interfejsy sieciowe są definiowane przez Internet Engineering Task Force (IETF) w RFC 2863 i nie mają być zdefiniowane przez system Windows. Aby uzyskać szczegółowe pytania dotyczące znaczenia identyfikatorów interfejsu sieciowego, takich jak ifIndex, zobacz ich definicje IETF. W pozostałej części tego tematu omówiono szczegóły implementacji specyficzne dla systemu Windows.

Identyfikatory i właściwości interfejsu sieciowego

W systemie Windows interfejs sieciowy można zidentyfikować na różne sposoby. Niektóre z tych identyfikatorów są używane do odróżnienia interfejsów sieciowych od siebie, ale nie wszystkie identyfikatory są równie odpowiednie dla tego zadania ze względu na ich różne właściwości. Ogólnie rzecz biorąc, interfejsy sieciowe są identyfikowane przez adres sieciowy do składników zewnętrznych. Na przykład może to być identyfikator węzła i numer portu lub po prostu unikatowy identyfikator węzła.

W kodzie interfejs sieciowy można zidentyfikować na wiele sposobów. W poniższej tabeli przedstawiono sposoby identyfikowania interfejsu sieciowego wraz ze skojarzonymi właściwościami. Zalecamy używanie identyfikatora GUID interfejsu (ifGuid) do programowania, chyba że określony interfejs API wymaga innego identyfikatora interfejsu sieciowego.

Nuta

W poniższej tabeli pogrubione komórki reprezentują właściwość pożądaną dla programistów sieciowych.

Identyfikator Rozmiar Jest unikatowy w systemie Jest wyjątkowy na świecie Jest przewidywalne Zostanie poddany recyklingu, jeśli karta sieciowa zostanie usunięta Utrwala się w przypadku ponownych uruchomień Użytkownicy końcowi mogą modyfikować w dowolnym momencie Sterowniki mogą modyfikować w dowolnym momencie Ogólna znajomość użytkowników końcowych Jest zawsze obecny
ifIndex 4 bajty Tak Nie Nie Tak Brak1 Nie Nie niektóre2 Tak
NetLuid 8 bajtów Tak Nie Nie Tak Tak Nie Nie Nie Tak
ifGuid 16 bajtów Tak zazwyczaj3 Nie Nie Tak Nie Nie Nie Tak
ifAlias 514 bajtów Tak w przypadku kart sieciowych4 Nie Czasami5 Tak Tak Tak Nie Tak zazwyczaj4
ifDescr 514 bajtów Zazwyczaj6 Nie Nie Tak Tak Nie Tak Tak zwykle
ifPhysAddress (ADRES MAC) Od 0 do 32 bajtów Zwykle w przypadku kart sieciowych zwykle w przypadku kart sieciowych Tak związane z sprzętu Tak Nie Nie Tak zazwyczaj7
identyfikator wystąpienia usługi PnP Maksymalnie 400 bajtów Tak Nie Nie Tak Tak Nie Nie Nie zwykle w przypadku kart sieciowych8
lokalizacji PnP (numer gniazda PCI) Maksymalnie 400 bajtów Tak Nie Tak Tak Tak Nie Nie Niekiedy Czasami8,9

Uwagi dotyczące powyższej tabeli:

  1. IfIndexes nie mają gwarancji, że są stabilne w przypadku ponownych rozruchów, mimo że często otrzymują tę samą wartość co poprzedni rozruch. W związku z tym nie zaleca się używania sterowników ifIndex z wyjątkiem sytuacji, w których jest to wymagane przez interfejs API.
  2. Niektóre polecenia netsh przyjmują ifIndexlub indexjako dane wejściowe. W związku z tym niektórzy użytkownicy administracyjni znają właściwość ifIndex, jeśli często używają polecenia netsh.
  3. Jeśli maszyna jest klonowana lub obrazowana, niektóre identyfikatory GUID mogą być takie same. Ponadto niektóre specjalne interfejsy sieciowe, takie jak wbudowany interfejs Teredo, mogą mieć ten sam identyfikator GUID na wszystkich maszynach.
  4. NetCfg wymusza, że ifAlias jest ciągiem niepustym i jest unikatowy wśród wszystkich kart sieciowych. Jednak dostawca interfejsu NDIS nie. Istnieje możliwość znalezienia specjalnych interfejsów sieciowych z zduplikowanymi lub pustymi nazwami. Jest to najczęściej spotykane z zespołami LBFO.
  5. Tylko wtedy, gdy oprogramowanie układowe obsługuje spójne nazewnictwo urządzeń. Typowo serwery mają tę funkcję.
  6. NetCfg przypisuje unikatowe ifDescrs do wszystkich interfejsów sieciowych. Jednak sterowniki mogą wywołać interfejs API, aby zmienić ifDescr na dowolne elementy, w tym coś, co nie jest unikatowe. Niektóre pakiety oprogramowania innych firm to robią.
  7. Nie wszystkie typy multimediów mają "adres MAC". Na przykład niektóre tunele nie mają tej koncepcji i po prostu anonsują tablicę bajtów o zerowej długości jako adres sieciowy.
  8. Dostępne tylko w interfejsach sieciowych, które są obsługiwane przez urządzenie PnP. Na przykład interfejsy sprzężenia zwrotnego, interfejsy filtru o lekkiej wadze, interfejsy dostarczane przez dostawcę interfejsu NDIS i niektóre specjalne wbudowane karty sieciowe nie mają ich kopii zapasowych.
  9. Tylko niektóre autobusy PnP obsługują identyfikator lokalizacji PnP. Wbudowane magistrale PCI i USB nie działają, podczas gdy urządzenia wyliczone przez użytkownika głównego nie.

Widoczność dla deweloperów

W poprzedniej tabeli wszystkie właściwości z wyjątkiem właściwości Plug and Play (PnP) są widoczne dla aplikacji klasycznych trybu użytkownika i sterowników trybu jądra za pośrednictwem nagłówka udostępnionego (Netioapi.h). Właściwości PnP są widoczne za pośrednictwem nagłówka Devpkey.h i są używane zarówno przez aplikacje klasyczne trybu użytkownika, jak i sterowniki trybu jądra. Zobacz na przykład dokumentację DEVPKEY.

Interfejs API pomocnika IP jest również dostępny zarówno dla aplikacji klasycznych trybu użytkownika, jak i sterowników trybu jądra.

Powierzchnia interfejsu API platformy UWP uwp uwidacznia tylko właściwość ifGuid bezpośrednio. Jednak deweloperzy aplikacji platformy UWP mogą zaimportować funkcję GetIfTable2 przy użyciu funkcji P/Invoke, jeśli są one wymagane do uzyskania dostępu do innych właściwości interfejsu sieciowego.

Aby uzyskać definicje bazy informacji o zarządzaniu (MIB) dla interfejsów sieciowych, zobacz RFC 2863.

W przypadku interfejsów sieciowych NDIS w sterownikach sieciowych zobacz interfejsy sieciowe NDIS.

Aby zapoznać się z dokumentacją interfejsu API netioapi.h, zobacz nagłówka netioapi.h.