最适合内部应用的TCP端口号范围

我在每个内部应用程序运行在单独的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. dynamic和/或专用端口(49152-65535):这个范围是自定义端口号的理想select。 我唯一担心的是这是否会发生:

一个。 我configuration我的一个应用程序使用端口X.
湾 应用程序停机几分钟或几小时(取决于应用程序的性质),使端口暂时不用,
C。 操作系统将端口号X分配给另一个进程,例如,当该进程充当需要到另一个服务器的TCP连接的客户端时。 考虑到它落在dynamic范围之内,并且就操作系统而言,X目前是未使用的
d。 应用程序无法启动,因为端口X已在使用中

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

如果不是,那么他们做得不好。 回去做好他们:-)

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

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

你的networking是你的networking,如果你想要你的服务器在端口1234(甚至TELNET或FTP端口),这是你的业务。 举例来说,在我们的大型机开发领域,端口23用于3270terminal服务器,这是一个与telnet截然不同的野兽。 如果你想telnet到大型机的UNIX端,那么你使用1023端口。如果你使用telnet客户端而不指定端口1023,这有时很烦人,因为它把你连接到了一个对telnet协议一无所知的服务器 – 我们必须打破退出telnet客户端并正确执行:

 telnet big_honking_mainframe_box.com 1023 

如果你真的不能让客户端configuration,请select第二个范围内的一个,如48042,并使用它,声明这些盒子上的任何其他软件(包括未来添加的任何软件)必须避开你的方式。

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

由于这个stackoverflow.com网页在我的search主题排名非常高,我想我会发布最大的范围在这里为所有感兴趣的人。 这些用于TCP和UDP,范围内的端口数至less为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下载button):

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

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

超过成功者的答案 – select并部署资源发现解决scheme。 让服务器dynamicselect一个专用端口。 让客户使用资源发现。

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

您几乎可以完全降低客户的风险,避免将私人端口dynamic分发给客户。

如果您使用用户端口,从另一个服务的风险是最小的。 一个未分配端口的风险只是另一个服务恰好configuration(或dyamically)使用该端口。 但至less这可能是在你的控制之下。

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