wireguard 作者 Jason Donenfeld 最近宣布了 wireguardNT 项目,这是面向 Windows 内核的 wireguard 原生移植。和其他版本一样,wireguardNT 的小写为 "wireguard-nt",它一开始只是 Linux 版本代码库的端口。经过初步移植工作取得成功后,NT 代码库迅速分化,以更好地适应原生 NTisms 和 NDIS(Windows 网络栈)API。最后的结果是为 NT 内核实现了一个深度集成且高性能的 wireguard,它利用了 NT 内核和 NDIS 的全部功能。
相关项目和源代码:https://git.zx2c4.com/wireguard-nt/about/
Jason 在公告中介绍了 wireguard 的背景,wireguard 在 Windows 下的早期实现是一个用 Go 开发的用户空间实现——wireguard-go,负责将数据包传入和传出 Wintun 接口。
当时使用 wireguard-go 需要关联一个虚拟网络设备,Jason 不满意 OpenVPN 项目提供的虚拟网络接口 tap-windows,因此从头实现了自己的 Wintun。Wintun 相对于 tap-windows 而言是一大改进,OpenVPN 项目之后自己也实现了对 Wintun 的支持。但 wireguard-go 仍然需要持续地在内核空间和用户空间之间进行上下文切换。为了移除这一性能瓶颈,虚拟网卡和加密等整个堆栈都需要移到内核。
wireguardNT 的出现显着减少了延迟并消除了 wireguard-go/Wintun 的上下文切换问题。测量显示,内核模式实现 wireguardNT 比用户空间实现 wireguard-go 要快 10-25%。Jason 还称,当使用 wireguardNT 时,wireguard-go/Wintun 对 WiFi 性能的影响已经消失,功耗和电池使用量也更低。
本文转自OSCHINA
本文标题:wireguardNT:Windows 内核下的高性能 wireguard 实现
本文地址:https://www.oschina.net/news/154780/wireguardnt-for-windows