
我們收到了一份工作任務,其中包括將一些產品從 Windows 移植到 Linux。此產品功能的一部分是 NDIS6 微型連接埠網路適配器,它顯然只通過網路緩衝區。它有一個標識符和 MAC 位址。單獨的服務應用程式啟動該網路驅動程式並啟動透過該適配器傳遞網路流量的 IP 服務。
我的問題是 Linux 上這種「虛擬」網路驅動程式的功能替代是什麼?
答案1
Linux 中的 Windows 微型連接埠網路適配器替換是什麼?
「Miniport網路適配器」不多解釋—微型連接埠驅動程式是特定於 Windows 驅動程式模型的內容,描述了驅動程式的編寫方式,但沒有描述它的作用。
某些實體(模組?)將充當乙太網路封包的直通,並且可以透過程式設計方式啟用和停用,並且可以透過程式設計方式用於設定 IP 網路
如果您的目標是建立一個由軟體控制的網路介面(即透過該介面傳送的資料包由程式透過檔案句柄接收,反之亦然),那麼您應該使用tap
或者tun
介面. (前者攜帶帶有第 2 層乙太網路標頭的資料包,後者沒有,但除此之外它們是相同的。)
官方文檔:
https://www.kernel.org/doc/Documentation/networking/tuntap.txt
(這個文件相當舊了;在所有現代 Linux 發行版中,您不需要手動建立設備節點,也不需要手動載入核心模組。但是,第 3 節「程式介面」和基於 ioctl 的 API 仍然準確。)
Linux 上的大多數 VPN 和 VM 軟體都使用 TUN/TAP 介面;事實上,Windows 上可用的「TAP-Windows」和「Wintun」NDIS 驅動程式就是為了模仿它們而寫的。
也可以編寫自己的網路介面驅動程式來執行相同的操作(例如 VirtualBox 使用的“vboxnetadp”和 SheepShaver Mac 模擬器使用的“sheep_net”),但大多數系統管理員會感謝您不這樣做並使用改為標準tun/tap。