浏览器的多个选项卡

浏览器的多个选项卡

由于为系统上运行的与网络相关的每个不同进程分配了唯一的端口号,因此,我的问题是,如果在浏览器中打开了多个选项卡,那么是否会为每个进程分配不同的端口号或为单个浏览器分配单个端口号?

答案1

其他答案都引用了您正在连接的远程端口,这与本地进程无关。在我的回答中,我指的是本地端口。当建立到互联网上的目标端口的 TCP 连接时,会从会话中的返回流量的上限范围中选择一个本地端口。在下图中,您可以看到进程 1724 有多个会话对不同的 IP 开放,即使远程端口相同(例如 80),本地端口也会有所不同(21077、21128、20881)

资源管理器

使用资源管理器检查网络连接,似乎每个连接都有自己的一组本地端口。我相信本地端口是根据每个连接而不是每个进程选择的。例如,当首次建立与站点的连接时,会为该会话选择一个本地端口。

答案2

如果您实际上指的是端口(而不是 PID 或其他东西),那么您访问的几乎每个网站都会使用端口 80(HTTP)或 443(HTTPS)。

是否使用新标签页并不重要,这取决于你正在使用的网站。例如,https://google.com使用 443,因为它是 https(尝试https://google.com:443), 但http://superuser.com使用 80,因为它不是 https。可以使用 FTP 或其他端口,但可能性不大。

希望这能回答你的问题!

答案3

HTTP 是一种通过 TCP 连接传输的应用协议。

TCP/IP 数据包包含以下信息:

  • 目标地址(IP):Web 服务器的公共互联网,例如 stackoverflow.com 的 104.16.37.249
  • 源地址(IP):您的公共互联网地址
  • TCP 目标端口:到达 Web 服务器计算机后,到达 Web 服务器应用程序的端口,HTTP 为 80,HTTPS 为 443
  • TCP 源端口:数据包到达计算机后到达 Web 浏览器的端口,例如 43505

当服务器向客户端的请求发送响应时,源端口和地址将成为目标端口和地址,反之亦然。

Web 浏览器(或任何 TCP 客户端)无需知道源端口,因为它由操作系统自动选择。操作系统提供了一个使用 TCP 进行通信的编程接口。然后,此接口将提供所谓的“套接字”来表示此连接。套接字提供输出通道(用于发送请求)和输入通道(用于接收响应),这很有趣,因为通过这种方式通过网络进行通信与从文件中读取和写入并没有什么不同。

更具体地回答你的问题,操作系统会跟踪哪个进程 (PID) 正在使用哪个源端口,因此当它收到目标端口与该源端口匹配的 TCP 数据包(例如 34505)时,它就会知道将该数据包转发到哪里。许多 UNIX 系统都附带网络状态,它显示了以下内容:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 172.16.123.140:34034    38.127.167.38:443       ESTABLISHED 3153/chromium-browser
tcp        0      0 172.16.123.140:50309    162.125.32.129:443      ESTABLISHED 2945/chromium-browser   

您可以在此处看到,已使用端口 443 上的 HTTP 建立/打开了两个与 Web 服务器 38.127.167.38 和 162.125.32.129 的 TCP 连接。此处将源地址和源端口描述为“本地地址”。

在您的示例中,Web 浏览器分叉为多个子进程。操作系统直接将数据包转发给子进程。由于浏览器似乎为每个选项卡创建一个子进程,因此可以说数据包被直接发送到选项卡,而不是由浏览器中的某种编排器进行“路由”。但是,这将假设浏览器每个选项卡使用一个连接,而事实并非如此,它会创建许多连接,即使对于同一主机也是如此,并且没有什么可以阻止它在多个选项卡之间共享连接。

我强烈建议你参考以下书籍计算机网络,A. Tanenbaum,第 5 版,Pearson

答案4

不同的选项卡不会通过不同的端口进行通信。除非另有说明,否则 Web 浏览器将使用端口 80 进行 http 通信,使用端口 443 进行 https 通信。例如http://www.example.com:8443将通过端口 8443 运行

计算机内部不使用不同的端口,而是使用“进程标识符”或 PID,这是大多数操作系统内核用来唯一标识活动进程的数字

相关内容