네트워크 인터페이스
이 항목에서는 코드 및 해당 속성에서 식별할 수 있는 방법을 포함하여 Windows의 고급 네트워크 인터페이스 개념에 대해 설명합니다.
Important
이 항목은 Windows 데스크톱 네트워킹 앱과 커널 모드 네트워킹 드라이버 모두에 대한 개발자 대상을 위한 것입니다. 그럼에도 불구하고 여기에 제공된 정보 중 일부는 PowerShell cmdlet을 통해 네트워크 인터페이스를 관리하는 시스템 관리자에게도 유용할 수 있습니다.
개요
네트워크 인터페이스는 두 가지 네트워크 장비 또는 프로토콜 계층이 연결되는 지점입니다. 일반적으로 컴퓨터와 개인 또는 공용 네트워크 간의 연결에 대한 물리적 NIC(네트워크 인터페이스 카드)로 표시됩니다. 그러나 루프백 인터페이스(IPv4 또는 ::1
IPv6의 경우)127.0.0.1
와 같은 소프트웨어 전용 구성 요소의 형태를 취할 수도 있습니다.
네트워크 인터페이스는 RFC 2863의 IETF(인터넷 엔지니어링 태스크 포스)에 의해 정의되며 Windows에서 정의할 수 없습니다. ifIndex와 같은 네트워크 인터페이스 식별자의 의미에 대한 자세한 질문은 IETF의 정의를 참조하세요. 이 항목의 나머지 부분은 Windows 관련 구현 세부 정보를 설명합니다.
네트워크 인터페이스 식별자 및 속성
Windows에서는 네트워크 인터페이스를 다양한 방법으로 식별할 수 있습니다. 이러한 식별자 중 일부는 네트워크 인터페이스를 서로 구별하는 데 사용되지만, 속성이 다르기 때문에 모든 식별자가 해당 작업에 똑같이 적합한 것은 아닙니다. 일반적으로 네트워크 인터페이스는 외부 구성 요소에 대한 네트워크 주소로 식별됩니다. 예를 들어 노드 ID와 포트 번호 또는 단순히 고유한 노드 ID일 수 있습니다.
코드에서 네트워크 인터페이스는 여러 가지 방법으로 식별할 수 있습니다. 다음 표에서는 연결된 속성과 함께 네트워크 인터페이스를 식별할 수 있는 방법을 자세히 설명합니다. 특정 API에 다른 네트워크 인터페이스 식별자가 필요하지 않은 경우 프로그래밍에 인터페이스 GUID(ifGuid)를 사용하는 것이 좋습니다.
참고 항목
다음 표 에서 굵게 표시된 셀은 네트워킹 프로그래머에게 적합한 속성을 나타냅니다.
식별자 | 크기 | 시스템에서 고유 | 세계에서 고유 | 예측 가능 | NIC가 제거되면 재활용됩니다. | 다시 부팅에서 유지 | 최종 사용자는 언제든지 수정할 수 있습니다. | 드라이버는 언제든지 수정할 수 있습니다. | 최종 사용자에 대한 일반적인 숙지 | 항상 존재합니다. |
---|---|---|---|---|---|---|---|---|---|---|
ifIndex | 4바이트 | 예 | 없음 | 아니요 | 예 | 아니요1 | 문제 | 문제 | 일부2 | 예 |
NetLuid | 8바이트 | 예 | 없음 | 아니요 | 예 | 예 | 문제 | 문제 | 아니요 | 예 |
ifGuid | 16바이트 | 예 | 일반적으로3 | 아니요 | 문제 | 예 | 문제 | 문제 | 아니요 | 예 |
ifAlias | 514바이트 | NIC4의 경우 예 | 아니요 | 경우에 따라5 | 예 | 예 | 네 | 아니요 | 예 | 일반적으로4 |
ifDescr | 514바이트 | 일반적으로6 | 아니요 | 아니요 | 예 | 예 | 아니요 | 예 | 예 | 보통 |
ifPhysAddress(MAC ADDRESS) | 0~32바이트 | 일반적으로 NIC의 경우 | 일반적으로 NIC의 경우 | 예 | 하드웨어에 연결 | 예 | 문제 | 문제 | 예 | 일반적으로 7 |
PnP 인스턴스 ID | 최대 400바이트 | 예 | 없음 | 아니요 | 예 | 예 | 문제 | 문제 | 아니요 | 일반적으로 NIC8의 경우 |
PnP 위치(PCI 슬롯 번호) | 최대 400바이트 | 예 | 없음 | 예 | 예 | 예 | 문제 | 문제 | 경우에 따라 지원됩니다. | 때때로8,9 |
앞의 표에 대한 참고 사항:
- IfIndexes 는 이전 부팅과 동일한 값을 받는 경우가 많지만 다시 부팅 시 안정되지 않습니다. 따라서 API에 필요한 경우를 제외하고 드라이버는 ifIndex를 사용하지 않는 것이 좋습니다.
- 일부
netsh
명령은 입력으로 사용합니다ifIndex
index
. 따라서 일부 관리 사용자는 명령을 자주 사용하는 경우 ifIndex 속성에netsh
익숙합니다. - 컴퓨터가 복제되거나 이미지로 표시되는 경우 일부 GUID는 동일할 수 있습니다. 또한 기본 제공 Teredo 인터페이스와 같은 특정 특수 네트워크 인터페이스는 모든 컴퓨터에서 동일한 GUID를 가질 수 있습니다.
- NetCfg는 ifAlias가 비어있지 않은 문자열이며 모든 NIC에서 고유하도록 적용합니다. 그러나 NDIS 인터페이스 공급자는 그렇지 않습니다. 따라서 중복되거나 빈 이름을 가진 특수 네트워크 인터페이스를 찾을 수 있습니다. 이는 LBFO 팀에서 가장 일반적으로 볼 수 있습니다.
- 펌웨어가 일관된 디바이스 명명을 지원하는 경우에만. 형식적으로 서버에는 이 기능이 있습니다.
- NetCfg는 모든 네트워크 인터페이스에 고유한 ifDescrs 를 할당합니다. 그러나 드라이버는 API를 호출하여 고유하지 않은 항목을 포함하여 ifDescr을 모든 항목으로 변경할 수 있습니다. 일부 타사 소프트웨어 패키지는 이 작업을 수행합니다.
- 모든 미디어 형식에 "MAC 주소"가 있는 것은 아닙니다. 예를 들어 일부 터널에는 이 개념이 없으며 길이가 0인 바이트 배열을 네트워크 주소로 보급하기만 하면 됩니다.
- PnP 디바이스에서 지원되는 네트워크 인터페이스에만 존재합니다. 예를 들어 루프백 인터페이스, 경량 필터 인터페이스, NDIS 인터페이스 공급자에서 제공하는 인터페이스 및 특정 특수 기본 제공 NIC에는 PnP 디바이스가 지원되지 않습니다.
- 일부 PnP 버스만 PnP 위치 ID를 지원합니다. 기본 제공 PCI 및 USB 버스는 사용되지만 루트 열거형 디바이스는 그렇지 않습니다.
개발자에 대한 가시성
앞의 표에서 PnP(플러그 앤 플레이) 속성을 제외한 모든 속성은 공유 헤더(Netioapi.h)를 통해 사용자 모드 데스크톱 앱 및 커널 모드 드라이버에 표시됩니다. PnP 속성은 Devpkey.h 헤더를 통해 표시되며 사용자 모드 데스크톱 앱과 커널 모드 드라이버 모두에서 사용됩니다. 예를 들어 DEVPKEY 설명서를 참조하세요.
IP 도우미 API는 사용자 모드 데스크톱 앱과 커널 모드 드라이버 모두에서 사용할 수 있습니다.
UWP API 표면은 ifGuid 속성만 직접 노출합니다. 그러나 UWP 앱 개발자가 다른 네트워크 인터페이스 속성에 액세스해야 하는 경우 P/Invoke를 사용하여 GetIfTable2 함수를 가져올 수 있습니다.
관련 항목
네트워크 인터페이스에 대한 MIB(관리 정보 기반) 정의는 RFC 2863을 참조하세요.
네트워크 드라이버의 NDIS 네트워크 인터페이스는 NDIS 네트워크 인터페이스를 참조 하세요.
Netioapi.h API 참조는 netioapi.h 헤더를 참조하세요.