【发布时间】:2010-05-30 07:03:19
【问题描述】:
我的问题是,如果机器 A 有两个 IP 地址 X,Y。
是否可以两次打开80端口,比如X:80和Y:80?
说,端口是机器唯一的还是IP唯一的?
【问题讨论】:
-
应该在 serverfault.com 上,但对于处理这类事情的程序员来说,这是一个有趣的问题。 :)
我的问题是,如果机器 A 有两个 IP 地址 X,Y。
是否可以两次打开80端口,比如X:80和Y:80?
说,端口是机器唯一的还是IP唯一的?
【问题讨论】:
IP 地址指定了一个网络接口(想想您计算机上的以太网端口或您的 WiFi 连接)。端口号指定将到达给定网络接口的消息路由到的进程。因此,您可以使用具有不同 IP 地址的相同端口号,因为它们指定了在该给定接口上侦听的端口。但请注意,如果在调用 bind 函数时使用 SO_REUSEADDR 选项,您甚至可以重用具有相同 IP 地址的端口号。
【讨论】:
IP 是唯一的。当您bind(这是重要 部分)时,您绑定到 IP 和端口号,而不是机器和端口号。要绑定到所有地址,您可以使用 INADDR_ANY 之类的东西。
如果您只想绑定到几个地址,则必须“手动”进行。当操作系统收到一个数据包时,它首先检查他是目的地。然后它将它转发给具有requested(通过绑定、通过连接等)的程序,他是具有该特定 IP 和端口号的数据包的目的地。
【讨论】:
端口和 IP 具有 1 对 1 的映射关系。
所以,是的,您可以在同一台机器上的两个不同 IP 上打开端口 80。
【讨论】: