115

我在一个地方工作,我们的每个内部应用程序都在一个单独的 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
    b。应用程序关闭了几分钟或几小时(取决于应用程序的性质),使端口有一段时间未使用,
    c。操作系统将端口号 X 分配给另一个进程,例如,当该进程充当需要与另一个服务器建立 TCP 连接的客户端时。假设它在动态范围内并且就操作系统而言当前未使用X,并且
    d。应用程序无法启动,因为端口 X 已在使用中

4

3 回答 3

136

我决定从 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

于 2015-02-06T16:04:09.813 回答
39

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

如果他们不是,那么他们还没有做得很好。回去并正确地做它们:-)

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

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

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

telnet big_honking_mainframe_box.com 1023

如果您确实无法使客户端可配置,请在第二个范围内选择一个,例如 48042,然后使用它,并声明这些盒子上的任何其他软件(包括将来添加的任何软件)都必须远离您.

于 2012-05-07T05:30:06.330 回答
9

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

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

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

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

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

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

于 2015-01-23T16:24:23.033 回答