53

我编写了一个由 Windows 服务托管的 WCF 服务,它需要侦听已知的 TCP/IP 端口。我可以从什么范围内安全地分配一个端口以供我的组织内部使用?该端口将嵌入服务和使用服务的客户端的配置文件中。

4

6 回答 6

107

端口 0-1023 是众所周知的端口,由 IANA 分配。这些只能用于公共网络上的分配协议。

端口 1024-65535 曾经被称为注册端口号(请参阅rfc1700),但现在分为两个区域(请参阅rfc6335)。

端口 1024-49151 是用户端口,用于您自己的协议。

端口 49152-65535 是动态端口,不应指定给协议。

用户端口可用于任何协议,但数量有限,因此您的使用将与其他人在某处网络上的使用发生冲突。IANA 会记录已注册的端口号 (0-49151)。如果您的协议将在公共网络上使用,那么您需要考虑向 IANA 注册它。如果您只在自己的网络中使用它,那么请在该区域 (1024-49151) 内选择一个端口,并根据IANA 注册检查该端口,以确保它没有被可以在您的网络上使用的协议使用。对于私人用途,最好选择一个分配给您知道不会使用的协议的数字,而不是选择一个未分配的数字,以便将来分配。

不要使用动态范围内的端口号。这些端口由操作系统动态分配,而且有些随机。如果您打开客户端连接(使用端口 = 0 的 bind()),您将从动态范围中分配一个未使用的端口。无法保证此范围内的端口对于您的协议始终是空闲的。

于 2016-07-01T09:04:23.150 回答
27

从 49152 到 65535 中选择一个端口号。

IANA 发布当前分配的端口列表。

http://www.iana.org/assignments/port-numbers

动态和/或专用端口是从 49152 到 65535 的端口。这是您应该为内部应用程序选择端口的范围。当然,可以使用属于已发布列表中未分配范围之一的任何端口。但请注意,通过从那些未分配的范围中选择端口号,并不能保证您选择的端口将来不会是保留端口。

不应使用未分配的端口号。在您的申请获得批准后,IANA 将为港口分配号码。

并确保您选择的端口号是可配置的,如您所说:

该端口将嵌入服务和使用服务的客户端的配置文件中。

如果其他一些您无法触摸的软件正在使用您的端口号,这将避免令人头疼的问题。如果发生这种情况,您只需继续在配置文件上进行更改,它就可以正常工作。

于 2008-10-20T15:39:30.953 回答
13

简短的回答:避免任何高达 1023 或超过 49152 的端口,并针对您网络上的服务测试所选端口。

如果您已经采取了合理的预防措施(将端口号放在配置文件中),那么如果您以后发现冲突,它应该不会造成巨大的破坏。

但是(这样我就可以在我打字时弹出的其他建议中添加一些内容)确保您可以轻松更改!如果它在配置文件中,请使其显而易见。记录它,并在故障排除时指出它。这是一种可能出错的事情,因此如果需要更改,请使其易于调试。

于 2008-10-20T15:59:47.683 回答
5

除了有关选择通用应用程序端口的其他建议外,我建议您在应用程序中使端口可配置。硬编码端口号是个坏主意,尤其是当您后来发现与另一个应用程序的端口冲突并需要更改您的应用程序时。

于 2008-10-20T15:48:58.360 回答
0

请注意,请记住通过 netstat /a /n 检查这些端口,以查看其是否被其他应用程序使用。我发现 vista 使用 49152 .... 出于某些应用程序级别的原因。基本上,因为大多数系统级监听器没有实现端口共享,所以使用那些根本不使用的端口是非常安全的。

于 2009-08-27T01:05:29.443 回答
-1

这是一个很好的常见应用程序端口列表。在空槽中做出自己的选择。也许您还应该扫描您的网络以查找任何内部特殊应用程序。

通常有大量端口可用,我建议使用它们,但它们可能会被防火墙阻止。

于 2008-10-20T15:37:17.337 回答