![浏览器的多个选项卡](https://linux22.com/image/1492443/%E6%B5%8F%E8%A7%88%E5%99%A8%E7%9A%84%E5%A4%9A%E4%B8%AA%E9%80%89%E9%A1%B9%E5%8D%A1.png)
由于为系统上运行的与网络相关的每个不同进程分配了唯一的端口号,因此,我的问题是,如果在浏览器中打开了多个选项卡,那么是否会为每个进程分配不同的端口号或为单个浏览器分配单个端口号?
答案1
答案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,这是大多数操作系统内核用来唯一标识活动进程的数字