【问题标题】:Best TCP port number range for internal applications [closed]内部应用程序的最佳 TCP 端口号范围 [关闭]
【发布时间】:2012-05-15 15:50:42
【问题描述】:

我工作的地方是我们的每个内部应用程序都在单独的 Tomcat 实例上运行并使用特定的 TCP 端口。 为了避免与服务器上的任何其他进程发生端口号冲突,这些应用使用的最佳 IANA 端口范围是多少?

基于http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml,这些是我目前看到的选项:

  1. 系统端口 (0-1023):我不想使用这些端口中的任何一个 因为服务器可能在这个标准端口上运行服务 范围
  2. 用户端口 (1024-49151):鉴于应用程序是内部应用程序,我不打算要求 IANA 为我们的任何应用程序保留一个号码。但是,我想降低同一端口被另一个进程使用的可能性,例如 1521 上的 Oracle Net Listener。
  3. 动态和/或专用端口 (49152-65535):此范围非常适合自定义端口号。我唯一担心的是如果发生这种情况:

    一个。我将我的一个应用程序配置为使用端口 X
    湾。应用程序关闭了几分钟或几小时(取决于应用程序的性质),使端口有一段时间未使用,
    C。操作系统将端口号 X 分配给另一个进程,例如,当该进程充当需要与另一个服务器建立 TCP 连接的客户端时。这成功了,因为它在动态范围内,并且就操作系统而言,X 当前未使用,并且
    d。应用程序无法启动,因为端口 X 已在使用中

【问题讨论】:

标签: networking tomcat


【解决方案1】:

我不明白你为什么会关心。除了“不要使用低于 1024 的端口”特权规则之外,您应该能够使用任何端口,因为您的客户端应该可以配置为与任何 IP 地址和端口通信!

如果他们不是,那么他们还没有做得很好。回去好好做吧:-)

换句话说,在 IP 地址X 和端口Y 上运行服务器,然后使用该信息配置客户端。然后,如果您发现您必须X 上运行与您的Y 冲突的不同服务器,只需重新配置您的服务器和客户端以使用新端口。无论您的客户是代码还是在浏览器中输入 URL 的人,这都是正确的。

我和你一样,不会尝试获取 IANA 分配的号码,因为这应该是针对如此普遍的服务,以至于许多 许多 环境都会使用它们(想想 SSH 或 FTP 或 TELNET) .

您的网络是您的网络,如果您希望您的服务器在端口 1234(或者甚至是 TELNET 或 FTP 端口)上,那是您的事。例如,在我们的大型机开发区,端口 23 用于 3270 终端服务器,这与 telnet 完全不同。如果您想远程登录到大型机的 UNIX 端,请使用端口 1023。如果您使用 telnet 客户端而不指定端口 1023,这有时会很烦人,因为它会将您连接到对 telnet 协议一无所知的服务器 - 我们必须打破退出 telnet 客户端并正确执行:

telnet big_honking_mainframe_box.com 1023

如果您真的不能使客户端可配置,请在第二个范围内选择一个,例如 48042,然后使用它,并声明这些框中的任何其他软件(包括任何添加的未来)必须远离你。

【讨论】:

  • 谢谢。在阅读了您的答案并对其进行了更多思考后,我决定选择使用第二个范围内的端口。我们选择了 46xxx,因为 IANA 目前在此子范围 link 中分配的端口很少。我们没有选择第三个范围,因为我描述了理论上可能(尽管极不可能)的情况。
【解决方案2】:

简答:使用未分配的用户端口

超过成就者的回答 - 选择并部署资源发现解决方案。让服务器动态选择专用端口。让客户端使用资源发现。

服务器因为它想监听的端口不可用而失败的风险是真实存在的;至少它发生在我身上。其他服务或客户端可能会先到达那里。

您几乎可以通过避免使用动态分配给客户端的私有端口来完全降低来自客户端的风险。

如果您使用用户端口,来自其他服务的风险很小。未分配端口的风险只是另一个服务恰好被配置(或动态)使用该端口。但至少这可能在你的控制之下。

包含所有端口分配(包括用户端口)的巨大文档在这里:http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt 查找未分配的令牌。

【讨论】:

  • 为永远不会在您的网络上使用的协议使用分配的端口不是更好吗?未分配的端口随时可能被分配,给您带来麻烦。
【解决方案3】:

我决定从 IANA 下载分配的端口号,过滤掉使用的端口,然后按可用端口最多的降序对每个“未分配”范围进行排序。 这不起作用,因为 csv 文件的范围标记为“未分配”,与其他端口号保留重叠。我手动扩展了分配的范围 端口号,给我留下所有已分配端口号的列表。然后我对该列表进行排序并生成我自己的未分配范围列表。

由于这个 stackoverflow.com 页面在我关于该主题的搜索中排名很高,我想我会在这里为任何感兴趣的人发布最大范围的内容。这些适用于范围内端口数至少为 500 个的 TCP 和 UDP。

Total   Start   End
829     29170   29998
815     38866   39680
710     41798   42507
681     43442   44122
661     46337   46997
643     35358   36000
609     36866   37474
596     38204   38799
592     33657   34248
571     30261   30831
563     41231   41793
542     21011   21552
528     28590   29117
521     14415   14935
510     26490   26999

来源(通过 CSV 下载按钮):

http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

【讨论】:

  • “它既是 tcp 又是 udp” - 我可以打开所有这些端口让我们说 44100-44199 看起来很容易记住,因为 udp 和 tcp 上的音频 44100 采样安全? udp 44100-44199 和 tcp 44100-44199 都是免费的?
  • 很遗憾没有。自从我发布以来,还有其他预订。现在您的范围内有一个端口。 “z-wave-tunnel 44123 tcp Z-Wave 安全隧道”
  • 幸运的是,我认为我不会在开发服务器上安装 Z-Wave 智能家居安全系统,哈哈。以前使用的端口范围涵盖了很多重要的东西,包括一些 VMWare 工具,所以情况要糟糕得多。如果这是目前唯一的碰撞,那我很高兴谢谢:)
  • 所以我决定再次运行该列表,以根据较新的数据得出一组新的范围。事实证明,“未分配”范围似乎没有正确编号。例如,43124-44320 被标记为未分配,而在该范围内的 44123 则在其上方列出为已分配。看来我必须手动提出未分配的范围,因为它们似乎计算不正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多