在编写打开侦听端口的服务器应用程序时,端口号的选择通常不会出现问题,前提是当前没有其他应用程序在侦听状态下保持相同的端口号打开。
例如 - 让我们考虑一个示例服务器,它有 3 个使用监听端口运行的应用程序
假设我们要部署另一个服务器应用程序。
其他应用程序正在运行。他们通过大量端口号接受了大量连接。
也许 postgres 使用端口号 10666、12543、13333 和 8888 具有活动的、已接受的连接。这些只是随机组成的数字。
由于 postgres 使用端口 8888:
为什么监听端口号的选择通常不成为一个问题?
如果您“随机”选择计算机上的另一个服务使用的端口,那么是一个问题。
大多数时候这不是一个严重的问题,因为大多数人不会随机选择端口。事实上,他们这样做是有先见之明的。大多数常见服务都有
分配的端口号;即由互联网号码分配机构 (IANA) 分配的号码。 这个维基百科页面很好地总结了官方分配的端口。人们通常会使用指定的端口;例如SSH 为 25,HTTP 为 80,HTTPS 为 443,PostgreSQL 为 5432 和 6432。
当人们确实想在同一个 IP 地址上运行两个或多个(比如说)Web 服务器时,他们会关注当前或可能正在使用的端口。在某些情况下,有传统的替代方案;例如8000、8008 和 8080 是端口 80 的传统替代方案。在其他情况下,应通过咨询来源(例如上面的维基百科页面)来选择不太可能发生冲突的端口。但是,如果您不小心尝试运行两个或多个侦听同一端口的服务,您将
遇到问题。一次只有一个服务可以侦听给定的 TCP 端口(或 UDP 端口)。另一个在进行 listen
系统调用时将会失败。