为什么微软从未在 Windows 中实现环回接口?

为什么微软从未在 Windows 中实现环回接口?

首先,我知道你可以在 Windows 中安装一种环回适配器

但我觉得很奇怪的是,Windows 上根本没有类似的东西lo缺少网络环回接口

Windows TCP/IP 堆栈没有实现网络环回接口,就像在其他 TCP/IP 堆栈中发现的那样,例如 BSD 系统中的 lo* 接口。

...

Microsoft Loopback Adapter 可以安装在 Windows 系统上,以便在系统上没有物理适配器或适配器处于活动状态时运行网络应用程序。此适配器不等同于网络环回接口,并且不能为其分配 IPv4 地址 127.0.0.1。此外,至少使用 WinPcap 无法嗅探其上的网络流量。

如果有人知道我会非常感兴趣为什么之所以做出这一选择,或者说为什么 Windows 似乎从未需要包含环回设备。因为它非常方便,可以实际捕获您从它发送/发送到它的数据包,以便开发或调试网络应用程序。

因此,如果有人在网络、TCP/IP 堆栈等方面有经验,并且能够提供一些见解,我们将不胜感激。

答案1

历史原因。从一开始,unix/linux 就一直与网络有关。而 MS-DOS/Windows 则事后才考虑网络,最初使用的是 Windows 自己的“NetBIOS”而不是 TCPIP。

直到 Netscape 出现后,微软才有必要安装 TCPIP 堆栈并承认互联网的存在。在此之前,您必须组装自己的堆栈才能与 unix 机器通信,并为此付出高昂的代价。

我希望这个历史背景能帮助您理解为什么 MS-Windows 在正确联网方面还没有真正实现。拿汽车来类比,这有点像问为什么摩托车没有四个轮子。(是的,这是一个非常糟糕的比喻……)

在上网变得重要之前,存在许多 LAN 协议 - DECnet、Token Ring、Novell 以及微软在 Windows 3.11 中做出的努力 - 只有真正的专家才能让这些不同的设备相互通信,而联网是一门真正的黑暗艺术。

答案2

十年后,我又偶然发现了这个问题。这里与社区分享我迄今为止的研究成果。

我得到的第一个提示在评论中找到用户314104回答这个问题。你会看到软件环回接口1例如从我的 MS Windows 10 使用:

PS C:\Users\ingo\devel> route print
===========================================================================
Interface List
 10...52 54 00 ab b0 be ......Realtek RTL8139C+ Fast Ethernet NIC
 15...52 54 00 68 79 e4 ......Realtek RTL8139C+ Fast Ethernet NIC #2
  1...........................Software Loopback Interface 1
===========================================================================
--- snip ---

我也可以找到它,如果我用获取适配器地址函数。我不知道为什么微软在显示界面时隐藏了它ipconfig

正如所提到的如何在 Windows 10 中更改环回的 IP 地址?你可以 ping回送

PS C:\Users\ingo\devel> ping -4 loopback

Pinging win10-devel.hoeft-online.de [127.0.0.1] with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 127.0.0.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

PS C:\Users\ingo\devel> ping -6 loopback

Pinging win10-devel.hoeft-online.de [::1] with 32 bytes of data:
Reply from ::1: time<1ms
Reply from ::1: time<1ms
Reply from ::1: time<1ms
Reply from ::1: time<1ms

Ping statistics for ::1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

回答你的问题:微软在 Windows 中实现了一个环回接口,但由于某种原因将其隐藏起来。你应该可以像往常一样使用它进行测试。

答案3

route printWindows 确实有一个环回接口;如果您从命令行运行,您就会看到它。

真正的问题似乎是为什么无法在 Windows 上嗅探环回流量,答案是可以的,只是不能用 WinPcap。Npcap 可以捕获环回流量。Wireshark wiki 现在推荐它而不是 WinPcap,部分原因是这个原因,部分原因是 WinPcap 多年来一直没有维护。 (2011 年撰写此问题时,WinPcap 已得到维护,而 Npcap 尚不存在。)

我不知道微软为什么要以绕过 WinPcap 捕获方法的方式实现环回,但我猜是出于性能原因。这肯定不是因为早期的 Windows 版本没有 TCP/IP 堆栈,正如得票最高的回答者所说的那样。这根本说不通。

相关内容