【问题标题】:how can an application use port 80/HTTP without conflicting with browsers?应用程序如何在不与浏览器冲突的情况下使用端口 80/HTTP?
【发布时间】:2011-02-26 19:36:09
【问题描述】:

如果我理解正确,应用程序有时会使用 HTTP 发送消息,因为使用其他端口可能会导致防火墙问题。但是,它如何在不与其他应用程序(例如 Web 浏览器)发生冲突的情况下工作呢?实际上如何同时运行多个浏览器不冲突?他们是否都监控端口并收到通知...您可以通过这种方式共享端口吗?

我觉得这是一个愚蠢的问题,但我以前从未想过这个问题,而且在其他情况下,当 2 个应用程序配置为使用相同的端口时,我会遇到问题。

【问题讨论】:

    标签: http sockets ports


    【解决方案1】:

    有 2 个端口:源端口(浏览器)和目标端口(服务器)。浏览器向操作系统询问可用的源端口(假设它接收到 33123)然后与目标端口建立套接字连接(通常是 80/HTTP443 /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)
    

    【讨论】:

    • 对于并发连接,您似乎是从浏览器的角度来解释这一点。从应用程序的角度来看呢?
    • 浏览器是一个应用程序。你能详细说明你的问题吗?
    • 浏览器上的每个选项卡是否也有这样的单独端口?
    • @huync 是的,每个选项卡都分配了一个独立的端口。在this answer 中有很好的解释
    【解决方案2】:

    客户端通常选择 1024 到 65535 之间的端口。 这取决于操作系统如何处理。我认为 Windows 客户端会为每个新连接增加值,Unix 客户端会选择一个随机端口号。

    某些服务依赖于静态客户端端口,例如 NTP (123 UDP)

    【讨论】:

    • 1024 和 65535(不是 65536)
    【解决方案3】:

    传出的 HTTP 请求不会发生在端口 80 上。当应用程序请求一个套接字时,它通常会随机接收一个。这是源端口。

    端口 80 用于提供 HTTP 内容(由服务器,而不是客户端)。这是目标端口。

    每个浏览器使用不同的 Source 来生成请求。这样,数据包就会返回到正确的应用程序。

    【讨论】:

    • 但是如果我的客户端/服务器在 80 上通信...
    • 客户端将连接到服务器上的 80 端口,但自己会使用另一个端口。自己尝试一下:从服务器下载文件(例如 youtube 视频),打开提示并输入“netstat”。您自己的机器将使用一个随机端口(如 62123)连接到端口 80 上的服务器。
    • @John,不。 web 服务器 打开端口 80,但 浏览器 有一个不同的、随机分配的端口。如果您的应用在端口 80 上进行通信,那么您将阻止您的应用在与网络服务器相同的机器上使用,但您根本不会干扰网络浏览。
    • 此外,选择的随机端口保证编号在 1024 以上,因为 1-1024 范围是为特定的基本服务保留的,例如 HTTP(S)、FTP、DNS 等。
    【解决方案4】:

    你说的80端口是服务器上的remote端口,本地浏览器为每个建立的连接打开高端口。

    每个连接的两端都有端口号,一个称为本地端口,另一个称为远程端口。

    防火墙将允许流量到浏览器的高端口,因为它知道已经从您的计算机建立了连接。

    【讨论】:

    • “本地浏览器为每个建立的连接打开高端口”......那么这如何通过防火墙呢?防火墙是否会默认打开特定范围的端口?
    • @John:一般情况下,防火墙会在客户端第一次建立连接时检测所涉及的端口和地址,只要连接是“活着”。
    • 防火墙允许任何端口上的传出连接。它们通常会阻止大多数端口上的传入连接,除非您明确打开它们。
    • @John 防火墙监视防火墙后面客户端建立的所有传出 TCP 连接,并为响应这些连接打开一个漏洞。实际上它可能比这更复杂,因为大多数防火墙也会执行网络地址转换 (NAT),即重写所有传出 TCP/UDP 数据包的本地 IP 地址和端口,以使用站点的单个公共 IP 地址和一个新的本地端口,在这种情况下,必须将反向转换应用于响应的远程端口和 IP 地址。
    • 好吧,我明白了……即使您阻止端口 X,如果您使用本地端口 X 向远程端口 80 发送请求,防火墙也足够聪明,可以让响应返回。
    【解决方案5】:

    标识连接的是(IP 协议、本地 IP 地址、本地端口、远程 IP 地址、远程端口)的 5 元组。多个浏览器(或者实际上是一个浏览器同时加载多个页面)将各自使用目标端口 80,但本地端口(由 O/S 分配)在每种情况下都是不同的。因此没有冲突。

    【讨论】:

    • 所以在内部,服务器将响应发送回客户端的
    • 对,在响应中服务器切换本地和远程端口以及本地和远程IP地址,因此响应有本地端口= 80和远程端口= 。
    【解决方案6】:

    您需要小心区分“监听 80 端口”和“连接到 80 端口”。

    当您说“应用程序有时使用 HTTP 发送消息,因为使用其他端口容易导致防火墙问题”时,您实际上是指“应用程序有时会向端口 80 发送消息”。

    服务器正在侦听端口 80,并且可以在该端口上接受多个连接。

    【讨论】:

      【解决方案7】:

      浏览器是一种客户端应用程序,您可以使用它来查看 web 服务器 上的内容,该服务器通常位于不同的机器上。 Web 服务器是监听 80 端口的服务器,而不是客户端上的浏览器。

      【讨论】:

      • 我不明白为什么这被否决了。这可能不是最全面的答案,但没有任何问题。
      猜你喜欢
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 2017-10-29
      • 2013-03-02
      • 2013-03-26
      • 2020-10-08
      相关资源
      最近更新 更多