【问题标题】:Assigning TCP/IP Ports for In-House Application Use分配 TCP/IP 端口以供内部应用程序使用
【发布时间】:2010-09-18 03:28:07
【问题描述】:

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

【问题讨论】:

  • 这是一个有用的问题,其他回答者很好地证明了“接受的”答案(由 Jorge Ferreira 提出)不正确或至少不完整,关于这个问题的答案也是如此重复。是否有可能“不接受”这个答案?
  • @MohammadSadegh - 我不认为这个问题是重复的。我认为这是一个原创。 cmets 中提到的其他类似问题似乎是在 这个问题之后提出的。 matt2000 的职位与您的职位相似,但我也不同意他的观点。最好的!!!

标签: tcp


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 没错。如果您在动态范围内为您的应用程序选择一个端口,例如使用 WCF 进行侦听,则不能保证该端口始终空闲且不被任何其他应用程序使用,因为 Windows 可以始终将此端口用于打开传出的其他应用程序连接。
【解决方案2】:

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

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

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

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

不应使用未分配的端口号 用过的。 IANA 将分配号码 申请后的港口 已获批准。

并确保您选择的端口号可以按照您的说明进行配置:

该端口将嵌入到 服务的配置文件和 正在消费的客户 服务。

这将避免在您无法触摸的其他第 3 方软件正在使用您的端口号的情况下感到头疼。如果发生这种情况,您只需在配置文件上进行更改即可。

【讨论】:

  • 另一方面,应用软件绝不能假设动态端口范围内的特定端口号始终可用于通信,因此该范围内的端口号 不得用作服务标识符。 RFC 6335
  • 博卢是正确的。 不要使用动态范围内的端口号。请参阅本页其他地方的说明。
  • 不明智。由于系统可能会选择在任何给定时刻分配您正在使用的端口。因此,您的服务器可能看起来只是在稍后加载时失败。
  • 相反,取一个已经分配给你确定永远不会需要的东西的端口。例如,TCP 31457 被分配给 TetriNET,所以这是一个非常确定的赌注(除非您的业务是多人俄罗斯方块)。
  • 考虑@adrianwadey 评论。如前所述,“端口 1024-49151 是用户端口,是用于您自己的协议的端口。”但是与在同一端口中侦听的另一个应用程序的冲突是远程的,可以通过选择另一个端口来修复。如果您选择动态范围内的端口,则任何时候都可能已被其他应用程序使用,因为 Windows 将它们用于传出连接,因此几乎不可能保证动态范围内的端口始终可用于您的应用程序。
【解决方案3】:

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

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

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

【讨论】:

  • 等等,你告诉我要避免 49152以上的端口,但最重要的答案是你应该选择49152及以上的端口。什么?
  • @CamiloMartin 另请参阅 adrianwadey 的回答。最佳答案是对点对点应用程序(例如 BitTorrent)的合理建议,因为它们倾向于使用动态端口,通常使用某种发现服务;对于需要一个相当稳定的端口号的客户端-服务器应用程序来说并没有那么多——即使端口号存储在配置文件中,您也需要在服务器发生变化时重新配置它的客户端。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      这是一个很好的list of common application ports。在空槽中做出自己的选择。也许您还应该扫描您的网络以查找任何内部特殊应用程序。

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

      【讨论】:

      • 链接已损坏。请修复
      猜你喜欢
      • 2017-01-06
      • 2012-05-15
      • 2011-09-23
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 2015-10-17
      • 2020-05-13
      • 2015-02-16
      相关资源
      最近更新 更多