
我有一个在本地运行的 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 地址可供不同的应用程序使用,所有应用程序都使用本地网络接口来实现快速接口。
参考 :