網路介面
本主題描述 Windows 上的高階網路介面概念,包括可在程式代碼中識別的方式及其屬性。
重要
本主題適用於開發人員物件,適用於 Windows 桌面網路應用程式和核心模式網路驅動程式。 不過,這裡提供的一些資訊也適用於透過PowerShell Cmdlet管理網路介面的系統管理員。
概觀
網路介面是兩個網路設備或通訊協定層連線的點。 一般而言,這是由實體網路介面卡 (NIC) 表示,以便計算機與私人或公用網路之間的連線。 不過,它也可以採用僅限軟體元件的形式,例如回送介面(127.0.0.1
適用於 IPv4 或 ::1
IPv6)。
網路介面是由 RFC 2863 中的因特網工程工作組 (IETF) 所定義,並非由 Windows 定義。 如需網路介面標識碼意義的詳細問題,例如 ifIndex,請參閱 IETF 的定義。 本主題的其餘部分將討論 Windows 特定的實作詳細數據。
網路介面識別碼和屬性
在 Windows 上,可以透過不同方式識別網路介面。 其中有些標識碼可用來區分網路介面彼此,但並非所有標識碼都同樣適合該工作,因為它們有不同的屬性。 一般而言,網路介面是由外部元件的網路位址所識別。 例如,這可能是節點標識碼和埠號碼,或只是唯一的節點標識碼。
在程式代碼中,有許多方式可以識別網路介面。 下表詳細說明網路介面與相關聯屬性的識別方式。 除非特定 API 需要不同的網路介面標識碼,否則建議您使用介面 GUID (ifGuid) 進行程序設計。
注意
在下表中, 粗體 單元格代表網路程式設計人員所需的屬性。
識別碼 | 大小 | 在系統上是唯一的 | 在世界上是獨一無二的 | 可預測 | 如果移除 NIC,將會回收 | 在重新啟動時持續存在 | 終端使用者可以隨時修改 | 驅動程式可以隨時修改 | 對終端使用者的一般熟悉程度 | 一律存在 |
---|---|---|---|---|---|---|---|---|---|---|
ifIndex | 4 個字節 | 是 | 無 | 無 | Yes | 否1 | 否 | 否 | 約2 | 是 |
NetLuid | 8 個字節 | 是 | 無 | 無 | .是 | 是 | 否 | 否 | 無 | 是 |
ifGuid | 16 個字節 | 是 | 通常為 3 | No | 否 | 是 | 否 | 否 | 無 | 是 |
ifAlias | 514 個字節 | 是 NIC4 | No | 有時5 | Yes | 是 | .是 | 否 | 是 | 通常為 4 |
ifDescr | 514 個字節 | 通常為 6 | No | 無 | .是 | 是 | 否 | .是 | 是 | 通常 |
ifPhysAddress (MAC ADDRESS) | 0 到 32 個字節 | 通常,針對 NIC | 通常,針對 NIC | 是 | 系結至硬體 | 是 | 否 | 否 | 是 | 通常為 7 |
PnP 實例標識碼 | 最多 400 個字節 | 是 | 無 | 無 | .是 | 是 | 否 | 否 | No | 對於 8,通常為 8 |
PnP 位置 (PCI 插槽號碼) | 最多 400 個字節 | 是 | 無 | 是 | .是 | 是 | 否 | 否 | 有時 | 有時8,9 |
上表的附註:
- IfIndexes 不保證在重新啟動時穩定,即使它們通常收到與先前開機相同的值也一樣。 因此,不建議驅動程式使用 ifIndex ,除非 API 需要的話。
- 某些
netsh
命令會採用ifIndex
、 或index
作為輸入。 因此,如果某些系統管理用戶經常使用netsh
命令,則熟悉ifIndex屬性。 - 如果機器已複製或映像化,則某些 GUID 可能相同。 此外,某些特殊的網路介面,例如內建 Teredo 介面在所有電腦上可能具有相同的 GUID。
- NetCfg 會 強制 ifAlias 是非空白字串,而且在所有 NIC 中都是唯一的。 不過,NDIS 介面提供者不會。 Thererfore,可以尋找具有重複或空白名稱的特殊網路介面。 這最常與 LBFO 小組一起看到。
- 只有當韌體支援一致的裝置命名時。 以錯字方式說,伺服器具有這項功能。
- NetCfg 會將唯一 的 ifDescrs 指派給所有網路介面。 不過,驅動程式可以呼叫 API, 將 ifDescr 變更為任何專案,包括不是唯一的。 某些第三方軟體套件會執行此動作。
- 並非所有媒體類型都有「MAC 位址」。例如,某些通道沒有這個概念,而只是將長度為零的位元組陣列公告為其網路位址。
- 只在 PnP 裝置支援的網路介面上出現。 例如,回送介面、輕量篩選介面、NDIS 介面提供者所提供的介面,以及某些特殊的內建 NIC 沒有支援它們的 PnP 裝置。
- 只有某些 PnP 總線支援 PnP 位置識別碼。 內建PCI和USB總線會執行,而根列舉的裝置則不會。
開發人員可見度
在上表中,除了 隨插即用 (PnP) 屬性以外的所有屬性,使用者模式桌面應用程式和核心模式驅動程式都可以透過共用標頭 (Netioapi.h) 顯示。 PnP 屬性可透過 Devpkey.h 標頭顯示,而且由使用者模式傳統型應用程式和核心模式驅動程式使用。 例如,請參閱 DEVPKEY 檔。
IP 協助程式 API 也適用於使用者模式傳統型應用程式和核心模式驅動程式。
UWP API 介面只會直接公開 ifGuid 屬性。 不過,如果需要 GetIfTable2 函式才能存取其他網路介面屬性,UWP 應用程式開發人員 可以使用 P/Invoke 匯入 GetIfTable2 函式。
相關主題
如需網路介面的管理資訊基底 (MIB) 定義,請參閱 RFC 2863。
如需網路驅動程式中的 NDIS 網路介面,請參閱 NDIS 網路介面。
如需 Netioapi.h API 參考,請參閱 netioapi.h 標頭。