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

Jua*_*nal 85 networking tomcat

我在一个每个内部应用程序在一个单独的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已在使用中

Dav*_*reb 107

我决定从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
Run Code Online (Sandbox Code Playgroud)

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

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

  • 所以我决定再次运行列表,根据更新的数据提出一组新的范围.事实证明,"未分配"范围似乎没有正确编号.例如,43124-44320被标记为未分配,但是在该范围内的44123在其上方被列为已分配.似乎我必须手动提出未分配的范围,因为它们似乎计算不正确. (3认同)

pax*_*blo 27

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

如果他们不是,那么他们就没有做得很好.回去做正确的事:-)

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

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

您的网络就是您的网络,如果您希望服务器位于端口1234(甚至是TELNET或FTP端口),那就是您的业务.例如,在我们的大型机开发区域,端口23用于3270终端服务器,这是一个与telnet完全不同的野兽.如果你想telnet到大型机的UNIX端,你使用端口1023.如果你使用telnet客户端而没有指定端口1023,这有时很烦人,因为它将你连接到一个对t​​elnet协议一无所知的服务器 - 我们必须打破脱离telnet客户端并正确执行:

telnet big_honking_mainframe_box.com 1023
Run Code Online (Sandbox Code Playgroud)

如果你真的无法让客户端配置,请在第二个范围内选择一个,如48042,并使用它,声明这些盒子上的任何其他软件(包括将来添加的任何软件)必须避开你的方式.


Ben*_*yde 5

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

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

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

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

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

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

  • 将分配的端口用于永远不会在网络上使用的协议不是更好吗?未分配的端口可能会随时分配,并给您带来问题。 (4认同)