预期的本地范围地址未解析为本地主机

预期的本地范围地址未解析为本地主机

我有一个在本地运行的 Web 服务器,其地址为:127.0.0.1:8000。

127.0.0.1 <-- 本地 IP 地址

8000 <- 端口号

当我使用 netstat 命令时,我在“本地地址”列下看到许多 IP 地址。所有这些地址都必须仅引用我的本地计算机。其中一个是:192.168.0.9,并且该系列必须解析为本地计算机:127.0.0.*。我使用 ping 命令验证了该系列响应正确。

当我在浏览器中通过以下 URL 访问 Web 服务器时:http://127.0.0.1:8000,它正确地返回了本地 Web 服务器的响应。但我期望的是,即使我使用http://192.168.0.9:8000,它必须返回与上面相同的响应。(并不是说我使用相同的端口号)但浏览器无法访问并显示“无法访问此站点”。

同样当我使用http://127.0.0.2:8000, 我犯了同样的错误。

我不太明白为什么会发生这种情况;因为我尝试的其他地址必须解析为本地主机,并且应该从 Web 服务器返回消息,因为我使用相同的端口号 8000。

不太确定我做错了什么。

答案1

监听套接字不一定绑定到主持人或者“每个本地地址”——它们也可以绑定到特定的本地地址(就像连接的套接字通常那样)。

如果您netstat使用该-l选项(在 Linux 上)或该-a选项(在 Windows 上)运行,然后查找由您的 web 应用程序创建的“LISTENING”套接字,您将查看其“本地地址”列是否已填写——如果是,0.0.0.0则套接字接受与任何本地地址的连接,但如果是,127.0.0.1则套接字仅有的接受对该特定地址的连接。

例如:

C:\> netstat -a -n -p tcp

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    10.147.2.13:139        0.0.0.0:0              LISTENING
  TCP    127.0.0.1:8384         0.0.0.0:0              LISTENING

答案2

整个127.0.0.0/8块不会解析为地址127.0.0.1。但是,整个块会解析为本地环回接口。通常,这是一个非常快速的内存实现接口,可绕过任何本地网络接口硬件。

对于 IP 地址http://192.168.0.9:此 URL 使用本地网络接口硬件。但是,127.0.0.1 在该接口或任何其他接口上都找不到 IP。这会导致访问失败。请注意,此引用需要通过路由器,并且并非所有路由器都支持从计算机访问其自身。

对于 IP 地址127.0.0.1:此地址是 IPv4 环回流量的标准地址;并非所有操作系统都支持此 IP 块中的其他地址。在 Windows 上,该块中的所有 255 个 IP 地址均可用于在主机上设置多个服务器应用程序,所有 255 个 IP 地址都监听相同的端口号,但仍保持不同。

本地块中的这 255 个 IP 地址可供不同的应用程序使用,所有应用程序都使用本地网络接口来实现快速接口。

参考 :

相关内容