为啥端口 80 用于服务器应用程序? [关闭]

Posted

技术标签:

【中文标题】为啥端口 80 用于服务器应用程序? [关闭]【英文标题】:Why port 80 is used for server applications? [closed]为什么端口 80 用于服务器应用程序? [关闭] 【发布时间】:2014-05-18 17:20:00 【问题描述】:

我想开发一个企业应用程序,其中每个员工都有一个客户端应用程序,并且有一个具有服务器应用程序的公共服务器。客户端和服务器基本上以文本、图像文件、zip 文件等形式交换信息。根据我的研究,我认为 TCP 是最好的协议。但我不明白如何分配端口号。这是我目前的理解。

客户端可以有任何由操作系统自动选择的随机端口。所以我 只需要向操作系统查询以获取客户端的端口号? 服务器端口号必须在服务器和客户端中硬编码 申请。 服务器端口号应始终为 80。为什么?服务器应用程序是否可以有任何其他端口号?如果是,我该如何选择? 如果服务器使用的端口号已经被 服务器上的其他应用程序?

编辑:以下是一些文章/问题,它们给我的印象是端口 80 是服务器的默认端口。

How do multiple clients connect simultaneously to one port, say 80, on a server? Freeing up a TCP/IP port? http://computer.howstuffworks.com/web-server8.htm http://www.thomas-krenn.com/en/wiki/Check_TCP_Port_80_%28http%29_with_telnet

【问题讨论】:

我在学习 TCP 时发现大多数人提到他们的服务器的端口号为 80。甚至关于 SO 的问题都提到 80 作为服务器的端口号。 你有没有提到的例子,因为端口 80 经常用于 http 流量,skype 也喜欢使用它(我的猜测是因为它通过防火墙没有什么问题)。但是你的服务器没有理由不能监听 1337 端口。 编辑了我的问题。只是在了解 TCP 的大部分工作原理时,我们以服务器的 80 端口为例。这就是我的印象。如果我错了,请纠正我。 是的,正如我所说的,这主要用于 http 流量。您没有理由使用其他端口(除了可能的防火墙问题)。 这个问题似乎离题了,因为它基于错误的假设只有一个端口可用。 【参考方案1】:

客户端可以有任何由操作系统自动选择的随机端口。所以我只需要向操作系统查询以获取客户端的端口号?

是的。但是您实际上不必为此查询操作系统。调用系统类似connect() 的函数,操作系统将为您处理低级端口号详细信息。请注意,客户端不需要知道它在哪个端口上运行。一旦建立 TCP 连接,服务器就知道客户端端口号。

服务器端口号必须在服务器和客户端应用程序中硬编码?

是的,这是一种方法。

服务器端口号应始终为 80。为什么?而且不能有其他端口号吗?

它不必是 80。它可以是任何东西,只要客户端知道端口号。你所说的是standard port number 用于 HTTP 服务器。这不适用于您的私人应用程序。

如果服务器使用的端口号已被服务器上的其他应用程序使用,会发生什么情况?

一旦您设计了系统,您需要确保您为服务器选择的端口号在服务器主机上是空闲的。这很容易做到。在 49152 – 65535 范围内选择一个服务器端口。这些是可用于私人用途的未注册端口。只要确保您没有在服务器主机的同一端口上运行另一个私有应用程序。

【讨论】:

假设我为服务器选择 50000 端口号。我的应用程序只有 1 个实例在服务器上运行。但是,我不知道另一个应用程序为其服务器应用程序使用相同的端口号,那么会发生什么?虽然这种情况很少发生,但需要处理,因为端口号在开发过程中是硬编码的! 正确。在这种情况下,您会遇到端口冲突。但实际上,使用 HTTP、FTP 等的标准应用程序不使用私有端口号。因此,假设您可以控制服务器主机并且可以控制在那里运行的私有应用程序,如果您使用硬编码,则可以逃脱确保您没有在该端口上运行其他应用程序。 这种硬编码有很多变通方法。例如,您可以让服务器以某种方式发布它当前正在运行的端口号,并让所有客户端在尝试连接时以某种方式获取此信息。您可以使用在标准端口上运行的中间系统(例如服务器可以执行 POST 而客户端可以执行 GET 的 HTTP 服务器)。但同样,只需确保在冲突端口上没有运行其他服务器/客户端应用程序,就可以轻松避免这种情况。 如果端口上碰巧有另一个应用程序运行(您想用于此服务器),如果它是客户端应用程序,请将其关闭。启动您的服务器。然后重新启动有冲突的应用程序,操作系统会给它另一个空闲端口。如果冲突程序是服务器应用程序,请重新配置该应用程序以使用另一个端口。然后重新启动该应用程序。大多数此类应用程序都带有允许您更改端口的机制。例如,可以从应用程序首选项菜单(或类似菜单)重新配置您的 BitTorrent 应用程序上的传入 TCP 端口。

以上是关于为啥端口 80 用于服务器应用程序? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥外网无法访问我的服务器?

启动Nginx失败为啥?

为啥在 undertow 服务器中将端口设置为 80 失败? (爪哇)

linux上开启服务为啥要关闭防火墙

nginx 为啥80端口不能用

电信屏蔽了80端口会影响啥?