【发布时间】:2011-02-26 19:36:09
【问题描述】:
如果我理解正确,应用程序有时会使用 HTTP 发送消息,因为使用其他端口可能会导致防火墙问题。但是,它如何在不与其他应用程序(例如 Web 浏览器)发生冲突的情况下工作呢?实际上如何同时运行多个浏览器不冲突?他们是否都监控端口并收到通知...您可以通过这种方式共享端口吗?
我觉得这是一个愚蠢的问题,但我以前从未想过这个问题,而且在其他情况下,当 2 个应用程序配置为使用相同的端口时,我会遇到问题。
【问题讨论】:
如果我理解正确,应用程序有时会使用 HTTP 发送消息,因为使用其他端口可能会导致防火墙问题。但是,它如何在不与其他应用程序(例如 Web 浏览器)发生冲突的情况下工作呢?实际上如何同时运行多个浏览器不冲突?他们是否都监控端口并收到通知...您可以通过这种方式共享端口吗?
我觉得这是一个愚蠢的问题,但我以前从未想过这个问题,而且在其他情况下,当 2 个应用程序配置为使用相同的端口时,我会遇到问题。
【问题讨论】:
有 2 个端口:源端口(浏览器)和目标端口(服务器)。浏览器向操作系统询问可用的源端口(假设它接收到 33123)然后与目标端口建立套接字连接(通常是 80/HTTP、443 /HTTPS)。
Web 服务器收到应答后,会发送一个响应,其中源端口为 80,目标端口为 33123。
因此,如果您有 2 个浏览器同时访问 stackoverflow.com,您将拥有如下内容:
Firefox (localhost:33123) <-----------> stackoverflow.com (69.59.196.211:80)
Chrome (localhost:33124) <-----------> stackoverflow.com (69.59.196.211:80)
【讨论】:
客户端通常选择 1024 到 65535 之间的端口。 这取决于操作系统如何处理。我认为 Windows 客户端会为每个新连接增加值,Unix 客户端会选择一个随机端口号。
某些服务依赖于静态客户端端口,例如 NTP (123 UDP)
【讨论】:
传出的 HTTP 请求不会发生在端口 80 上。当应用程序请求一个套接字时,它通常会随机接收一个。这是源端口。
端口 80 用于提供 HTTP 内容(由服务器,而不是客户端)。这是目标端口。
每个浏览器使用不同的 Source 来生成请求。这样,数据包就会返回到正确的应用程序。
【讨论】:
你说的80端口是服务器上的remote端口,本地浏览器为每个建立的连接打开高端口。
每个连接的两端都有端口号,一个称为本地端口,另一个称为远程端口。
防火墙将允许流量到浏览器的高端口,因为它知道已经从您的计算机建立了连接。
【讨论】:
标识连接的是(IP 协议、本地 IP 地址、本地端口、远程 IP 地址、远程端口)的 5 元组。多个浏览器(或者实际上是一个浏览器同时加载多个页面)将各自使用目标端口 80,但本地端口(由 O/S 分配)在每种情况下都是不同的。因此没有冲突。
【讨论】:
您需要小心区分“监听 80 端口”和“连接到 80 端口”。
当您说“应用程序有时使用 HTTP 发送消息,因为使用其他端口容易导致防火墙问题”时,您实际上是指“应用程序有时会向端口 80 发送消息”。
服务器正在侦听端口 80,并且可以在该端口上接受多个连接。
【讨论】:
浏览器是一种客户端应用程序,您可以使用它来查看 web 服务器 上的内容,该服务器通常位于不同的机器上。 Web 服务器是监听 80 端口的服务器,而不是客户端上的浏览器。
【讨论】: