内部应用程序的最佳TCP端口号范围


94

我在每个内部应用程序都在一个单独的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当前未使用,则成功
    。该应用无法启动,因为端口X已被使用


2
我在这里stackoverflow.com/a/38141340/3333759回答了类似的问题,可能会对您有所帮助。
adrianwadey

Answers:


32

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

如果不是的话,那就说明他们做得不好。回去正确地做它们:-)

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

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

您的网络就是您的网络,如果您希望服务器位于端口1234(或者甚至是TELNET或FTP端口)上,那就是您的事。例如,在我们的大型机开发区域,端口23用于3270终端服务器,这与telnet完全不同。如果要远程登录到大型机的UNIX端,则使用端口1023。如果不指定端口1023使用telnet客户端,这有时会很烦人,因为它会将您连接到不了解telnet协议的服务器-我们必须中断退出telnet客户端并正确执行以下操作:

telnet big_honking_mainframe_box.com 1023

如果您真的无法使客户端可配置,请在第二个范围中选择一个,例如48042,然后使用它,声明这些包装盒上的任何其他软件(包括将来添加的任何软件)都必须避免使用。


谢谢。在阅读了您的答案并给予更多思考之后,我决定选择使用第二个范围内的端口。我们选择46xxx是因为IANA当前在此子范围链接中分配的端口很少。由于我所描述的理论上可能的(尽管极不可能)场景,因此我们没有选择第三个范围。
胡安

116

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

由于这个stackoverflow.com页面在有关该主题的搜索中排名很高,因此我认为我将在此处将最大的范围发布给其他感兴趣的人。这些用于TCP和UDP,其中范围内的端口数至少为500。

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都是免费的吗?
Lapsio

1
抱歉不行。自从我发布以来,还有其他保留。您的范围内现在有一个端口。“ z-wave-tunnel 44123 tcp Z-Wave安全隧道”
David Vereb

幸运的是,我认为我不会在开发服务器上安装Z-Wave智能家庭安全系统。以前使用的端口范围涵盖了许多重要内容,包括一些VMWare工具,因此情况更糟。如果那是目前唯一的冲突,那么我很感谢:)
Lapsio

3
因此,我决定再次运行该列表,以根据新数据得出一组新的范围。事实证明,“未分配”范围似乎没有正确编号。例如,将43124-44320标记为未分配,但是在该范围内的44123被列为已分配。似乎我不得不手动提出未分配的范围,因为它们似乎计算不正确。
David Vereb '16

6

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

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

服务器由于要监听的端口不可用而发生故障的风险是真实的;至少发生在我身上。其他服务或客户可能会先到达那里。

通过避免将专用端口动态分发给客户端,您几乎可以完全降低客户端的风险。

如果使用用户端口,则来自另一服务的风险很小。未分配端口的风险仅在于恰巧配置了另一个服务(或动态地)使用了该端口。但这至少可能在您的控制之下。

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


4
将分配的端口用于永远不会在网络上使用的协议,不是更好吗?未分配的端口可以随时分配,并给您带来问题。
adrianwadey '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.