我在每个内部应用程序在单个Tomcat实例上运行并使用特定TCP端口的位置工作。 为了避免与服务器上的任何其他进程发生端口号冲突,这些应用程序使用的最佳IANA端口范围是什么?
基于http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml,这些是我目前看到的选项:
一个。我配置我的一个应用程序使用端口X
湾应用程序停机几分钟或几小时(取决于应用程序的性质),让端口闲置一段时间,
C。操作系统将端口号X分配给另一个进程,例如,当该进程充当需要与另一个服务器建立TCP连接的客户端时。这是成功的,因为它属于动态范围,并且就操作系统而言,X当前未被使用,并且 d。应用程序无法启动,因为端口X已在使用
答案 0 :(得分:101)
我决定从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
答案 1 :(得分:26)
我不明白为什么你会关心。除了“不使用低于1024的端口”权限规则之外,您应该能够使用任何端口,因为您的客户端应该可以配置为与任何IP地址和端口通信!
如果他们不是,那么他们就没有做得很好。回去做正确的事: - )
换句话说,在IP地址X
和端口Y
运行服务器,然后使用该信息配置客户端。然后,如果您发现必须在X
上运行与您的Y
冲突的其他服务器,只需重新配置您的服务器和客户端以使用新端口。无论您的客户是代码还是人们在浏览器中输入URL,都是如此。
我和您一样,不会尝试获取IANA分配的号码,因为这应该是很常见的服务,许多很多环境会使用它们(想想SSH或FTP或TELNET) 。
您的网络您的网络,如果您希望服务器位于端口1234(甚至是TELNET或FTP端口),那就是您的业务。例如,在我们的大型机开发区域,端口23用于3270终端服务器,这是一个与telnet完全不同的野兽。如果你想telnet到大型机的UNIX端,你使用端口1023.如果你使用telnet客户端而没有指定端口1023,这有时很烦人,因为它将你连接到一个对telnet协议一无所知的服务器 - 我们必须打破脱离telnet客户端并正确执行:
telnet big_honking_mainframe_box.com 1023
如果您确实无法使客户端可配置,请选择第二个范围内的一个,如48042,并使用它,声明这些盒子上的任何其他软件(包括任何添加的未来)必须避开你的方式。
答案 2 :(得分:4)
简答:使用未分配的用户端口
Overvedver的答案 - 选择并部署资源发现解决方案。让服务器动态选择专用端口。让客户使用资源发现。
服务器因为想要监听的端口不可用而失败的风险是真实的;至少它发生在我身上。另一项服务或客户可能会先到达那里。
通过避免将动态分发给客户端的私有端口,您几乎可以完全降低客户端的风险。
如果您使用用户端口,则来自其他服务的风险最小。未分配端口的风险仅在于配置(或动态地)使用该端口的另一个服务。但至少那可能在你的控制之下。
包含所有端口分配的庞大文档,包括用户端口,位于:http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt查找未分配的令牌。