如果我理解正确,应用程序有时会使用 HTTP 发送消息,因为使用其他端口可能会导致防火墙问题。但是,它如何在不与其他应用程序(例如 Web 浏览器)发生冲突的情况下工作呢?实际上如何同时运行多个浏览器不冲突?他们是否都监视端口并收到通知...您可以通过这种方式共享端口吗?
我觉得这是一个愚蠢的问题,但我以前从未想过,而且在其他情况下,当 2 个应用程序配置为使用相同的端口时,我看到了问题。
There are 2 ports: a source port (browser) and a destination port (server). The browser asks the OS for an available source port (let's say it receives 33123) then makes a socket connection to the destination port (usually 80/HTTP, 443/HTTPS).
When the web server receives the answer, it sends a response that has 80 as source port and 33123 as destination port.
So if you have 2 browsers concurrently accessing stackoverflow.com, you'd have something like this:
Firefox (localhost:33123) <-----------> stackoverflow.com (69.59.196.211:80)
Chrome (localhost:33124) <-----------> stackoverflow.com (69.59.196.211:80)
传出的 HTTP 请求不会发生在端口 80 上。当应用程序请求一个套接字时,它通常会随机接收一个。这是源端口。
端口 80 用于提供 HTTP 内容(由服务器,而不是客户端)。这是目标端口。
每个浏览器使用不同的 Source 来生成请求。这样,数据包就会返回到正确的应用程序。
它是标识连接的(IP 协议、本地 IP 地址、本地端口、远程 IP 地址、远程端口)的 5 元组。多个浏览器(或者实际上是一个浏览器同时加载多个页面)将各自使用目标端口 80,但本地端口(由 O/S 分配)在每种情况下都是不同的。因此不存在冲突。
客户端通常在 1024 和 65535 之间选择一个端口。这取决于操作系统如何处理。我认为 Windows 客户端会增加每个新连接的值,Unix 客户端会选择一个随机端口号。
某些服务依赖于静态客户端端口,例如 NTP (123 UDP)
浏览器是一个客户端应用程序,您使用它来查看通常位于不同机器上的Web 服务器上的内容。Web 服务器是侦听端口 80 的服务器,而不是客户端上的浏览器。
您需要小心区分“侦听端口 80”和“连接到端口 80”。
当您说“应用程序有时使用 HTTP 发送消息,因为使用其他端口容易导致防火墙问题”时,您实际上是指“应用程序有时会向端口 80 发送消息”。
服务器正在侦听端口 80,并且可以在该端口上接受多个连接。
您在这里谈论的端口 80 是服务器上的远程端口,本地浏览器为每个建立的连接打开高端口。
每个连接的两端都有端口号,一个称为本地端口,另一个称为远程端口。
防火墙将允许流量到浏览器的高端口,因为它知道已经从您的计算机建立了连接。