![不同的 IP 地址不能两次使用 80 端口吗?](https://linux22.com/image/724276/%E4%B8%8D%E5%90%8C%E7%9A%84%20IP%20%E5%9C%B0%E5%9D%80%E4%B8%8D%E8%83%BD%E4%B8%A4%E6%AC%A1%E4%BD%BF%E7%94%A8%2080%20%E7%AB%AF%E5%8F%A3%E5%90%97%EF%BC%9F.png)
我现在有一个有趣的问题。在 Windows Server 2012 R2 上,我有两个 IP 地址,分别是192.0.2.1
和192.0.2.2
。在一个地址上,例如,192.0.2.1
一个 Web 服务器在端口 上运行80
,该端口在 C# 中使用 实现HttpListener
。在另一个地址上,例如,我尝试使用 Go 程序和192.0.2.2
打开端口。Go 程序收到一条错误消息,提示无法打开端口。首先启动 C# 程序。我使用管理员权限启动 Go 程序。80
http.server{}
当我用来netstat
检查哪些端口在哪些地址上使用时,第二个地址192.0.2.2
完全未被使用。端口80
仅由第一个地址的 C# 程序打开192.0.2.1
。
这完全没有意义。我是不是漏掉了什么?
两周前我遇到过类似的情况,当时 Ubuntu 和两个 Go 程序都使用443
不同 IP 地址上的端口。这完全没有问题,而且立即运行。
答案1
Web 服务器需要配置为仅绑定到目标 IP 地址。如果将其配置为绑定到任何地址,则您不能将同一端口用于任何其他地址。
netstat
仅显示普通内容连接的套接字。您需要使用-a
来显示正在监听的、可能未连接的端口。任何分配给监听的端口都不能以其他方式使用。使用-ao
也很方便,因为它会在端口旁边显示 PID。