应该如何为新服务选择默认 TCP/IP 端口?
Posted
技术标签:
【中文标题】应该如何为新服务选择默认 TCP/IP 端口?【英文标题】:How should one go about choosing a default TCP/IP port for a new service? 【发布时间】:2010-09-13 03:06:31 【问题描述】:在开发将侦听 TCP/IP 端口的应用程序时,应该如何选择默认端口?假设此应用程序将安装在多台计算机上,并且希望避免端口冲突。
【问题讨论】:
最好在这里回答:***.com/questions/10476987/… 【参考方案1】:转到here 并选择一个描述为Unassigned
的端口
【讨论】:
你是在建议他选择100以下的端口? 我应该选择哪一个? 如果所有开发人员都遵循这个逻辑,这意味着所有新服务都聚集在少数未分配的端口周围。服务在分配的端口与未分配的端口上运行的概率是多少。 (对不起,如果我没有暴露一些商业机密:) 如果您正在寻找在内部网络上使用的端口,请在类似问题上考虑这个答案:***.com/questions/218839/…【参考方案2】:第一步:看IANA listing:
你会在列表的尾部看到
“动态和/或专用端口是从 49152 到 65535 的端口”
所以这些将是您更好的选择,但是一旦您选择了一个,您就可以随时在其上进行谷歌搜索,看看是否有足够受欢迎的应用已经“认领”了它
【讨论】:
但是使用动态端口不会让我面临间歇性(虽然很少)端口冲突吗?使用未分配或分配给不知名应用的已注册范围内的端口可能更安全。 除非您向 IANA 明确注册您的端口选择,否则您会使用“未签名”来运行相同的冲突几率。实际上,由于低端有许多未分配的,那些可能更可能是恕我直言 始终从未分配的范围开始,并选择用户/管理员可配置端口来处理可能的冲突。只有当您的应用程序得到广泛使用(想想 BitTorrent 或其他一些大型用途)时,您才真正考虑申请分配的端口。否则留在指定范围之外。如果这是针对严格内部/个人的事情,那么只需记录各种服务正在使用的端口,只要人们可以在网上某处查找它们就可以了。想想类似于不可路由 IP 的私有/动态范围 - 它们非常适合小型/私人使用。 请不要错误地假设您的应用需要 IANA 分配的端口,因为您认为您的应用会在实际使用之前出现爆炸式增长。 :) 关于动态范围,我认为“冲突”问题可能是在询问,如果操作系统将该范围用于临时端口(应该如此),是否会与如果操作系统随机决定使用该端口,您选择的端口例如一些出站连接。 (据我了解,随机使用此范围是临时端口的用途。)请参阅另一个question,它更详细地说明了问题。【参考方案3】:如果通过广泛使用,您的意思是您希望防止其他人在未来使用它,您可以申请将其标记为由 IANA here 为您的应用保留
【讨论】:
【参考方案4】:我知道的最全面的官方 IANA 端口号和非官方端口号列表是nmap-services。
【讨论】:
【参考方案5】:从 IANA 列表中选择一个未分配的产品通常就足够了,但如果您谈论的是商业发布的产品,您确实应该向 IANA 申请为您分配一个。请注意,执行此操作的过程简单但缓慢;上次申请,花了一年时间。
【讨论】:
【参考方案6】:您可能希望避免使用来自this list(***)的任何端口。
我只会选择一个,一旦该应用程序被大众使用,端口号就会被识别并包含在此类列表中。
【讨论】:
【参考方案7】:正如其他人提到的,检查 IANA。
然后检查您的本地系统 /etc/services 以查看是否有一些自定义端口已在使用中。
请不要对其进行硬编码。以某种方式确保它是可配置的——如果没有其他原因,您希望能够让多个开发人员同时使用他们自己的本地化构建。
【讨论】:
【参考方案8】:如果这是针对您希望被广泛使用的应用程序,请注册一个号码 here 所以没有其他人使用它。
要不然就随便挑一个没用过的。
在动态范围内使用一个的问题是它可能不可用,因为它可能被用于动态端口号。
【讨论】:
【参考方案9】:嗯,你可以参考一些常用的端口号here,尽量不要用别人的。
如果“向广大公众开放”是指您在自己的系统上打开端口,我会与您的系统管理员讨论他们觉得使用哪些端口感到舒服。
【讨论】:
【参考方案10】:选择不是verycommon的号码
【讨论】:
【参考方案11】:选择一个不会干扰最常见的守护进程和服务器的默认端口。还要确保端口号没有被列为某些病毒的攻击媒介——一些公司有严格的政策,无论如何他们都会阻止这些端口。最后但同样重要的是,确保端口号是可配置的。
【讨论】:
【参考方案12】:使用 iana 列表。从以下位置下载 csv 文件:
https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.csv
并使用此 shell 脚本搜索未注册的端口:
for port in N..M; do if ! grep -q $port service-names-port-numbers.csv; then echo $port;fi; done;
并输入 2 个数字而不是 N 和 M。
【讨论】:
以上是关于应该如何为新服务选择默认 TCP/IP 端口?的主要内容,如果未能解决你的问题,请参考以下文章