2010-05-30 175 views
7

我的问题是,如果机器A有两个IP地址X,Y.端口和IP地址的关系

它可以打开端口80两次,如X:80Y:80

说,端口是唯一的机器或IP?

+1

应该可能在serverfault.com上,但对于处理这类事情的程序员来说是个有趣的问题。 :) – JYelton 2010-05-30 07:11:37

回答

6

IP地址指定一个网络接口(想想计算机上的以太网端口或WiFi连接)。端口号指定路由到达给定网络接口的消息的过程。因此,您可以使用具有不同IP地址的相同端口号,因为它们指定在该给定接口上侦听的端口。但请注意,如果在调用bind函数时使用SO_REUSEADDR选项,则甚至可以重用具有相同IP地址的端口号。

+0

有趣... – 2010-05-30 09:45:15

3

IP是独一无二的。当您bind(即重要部分),您绑定到IP和端口号,而不是机器和端口号。绑定到所有addreses你可以使用类似INADDR_ANY

如果你只想绑定几个地址,你必须“手动”。当操作系统接收到数据包时,首先检查他是否是目的地。然后它将它转发到具有requested(通过绑定,通过连接等)的程序,使其成为具有该特定IP和端口号的数据包的目的地。

1

端口和IP的映射关系为1对1。

所以,你可以在同一台机器上的两个不同IP上打开端口80。