我编写了一个由Windows服务托管的WCF服务,它需要侦听已知的TCP/IP端口。在我们的组织范围内,我可以从哪个范围安全地分配端口?该端口将嵌入服务和消费该服务的客户端的配置文件中。
您可以从动态和私有端口号范围(49152-65535)中选择一个可用的端口号来为您的WCF服务分配一个端口。请确保不要选择已经被其他应用程序使用的端口号,以避免端口冲突。一旦选择了一个端口号,请将其添加到WCF服务的配置文件中,并告知所有使用服务的客户端将其添加到其相应的配置文件或代码中。我编写了一个由Windows服务托管的WCF服务,它需要侦听已知的TCP/IP端口。在我们的组织范围内,我可以从哪个范围安全地分配端口?该端口将嵌入服务和消费该服务的客户端的配置文件中。
您可以从动态和私有端口号范围(49152-65535)中选择一个可用的端口号来为您的WCF服务分配一个端口。请确保不要选择已经被其他应用程序使用的端口号,以避免端口冲突。一旦选择了一个端口号,请将其添加到WCF服务的配置文件中,并告知所有使用服务的客户端将其添加到其相应的配置文件或代码中。端口号0-1023是众所周知的端口,由IANA指定。这些端口应仅用于公共网络上分配的协议。
端口号1024-65535曾经被称为注册端口号(参见rfc1700),但现在分成两个区域(参见rfc6335)。
端口号1024-49151是用户端口,是用于您自己的协议的端口。
端口号49152-65535是动态端口,不应将其指定给协议。
用户端口可以用于任何协议,但数量有限,因此您的使用可能会与其他某些网络上的使用冲突。IANA保留已注册端口号(0-49151)的记录。如果您的协议将在公共网络上使用,则需要研究如何向IANA注册它。如果只在自己的网络中使用它,请选择此区域内的一个端口(1024-49151),并检查该端口是否与IANA注册表中已分配用于您的网络上可用的某个协议的端口重复。对于私人使用,最好选择已分配给您知道不会被使用的协议的端口号,而不是选择未分配的端口号,因为后者可能会在将来被分配。
不要使用动态范围内的端口号。这些端口号由操作系统动态且随机地分配。如果您打开一个客户端连接(使用bind()指定端口号为0),则将从动态范围中分配未使用的端口。无法保证此范围内的端口始终空闲以供您的协议使用。
从49152到65535中选择一个端口号。
IANA发布了当前已分配端口的列表。
http://www.iana.org/assignments/port-numbers
动态和/或私有端口是从49152到65535的端口范围。这是您应该为内部应用程序选择端口的范围。当然,可以使用已发布列表上未分配范围之一所属的任何端口。但请注意,通过从那些未分配的范围选择端口号,无论如何都不能保证您选择的端口不会在将来成为保留端口。
不应使用未分配的端口号。 IANA将在批准您的应用程序后为该端口分配号码。
确保您选择的端口号可配置,正如您所述:
该端口将嵌入服务和使用服务的客户端的配置文件中。
这将避免头疼,以防其他第三方软件正在使用您的端口号。如果发生这种情况,只需在配置文件中更改它即可。
简短回答:避免使用1023及以下或49152以上的端口,并针对您网络中的服务测试所选端口。
如果你已经采取了合理的预防措施(将端口号放在配置文件中),那么如果后来发现冲突,这不应该造成巨大的干扰。
但是(为了补充其他建议),请确保轻松更改端口!如果它在配置文件中,请让它显而易见。文档化并在故障排除中指出。这种事情可能会出错,因此如果需要更改,请确保易于调试。
这里有一个很好的常见应用程序端口列表。在空槽中自己作出选择。也许你应该扫描一下你的网络以检查是否有内部特殊应用程序。
通常高数字端口是可用的,我建议使用它们,但它们可能被防火墙阻塞。