了解端口:多个浏览器选项卡如何同时通信?[关闭]


18

今天我意识到我从根本上不了解端口通信的工作原理。

如果我启动了侦听端口80的Web服务器的实例,则它可以响应来自许多不同浏览器选项卡的许多请求,所有这些选项卡都通过端口80进行通信。

但是,我无法启动服务器的两个实例,它们都在端口80上侦听,因为这会导致端口冲突。

我一直把它当作一个给定的东西(在任何给定时间只能有一个进程绑定到特定的端口),却从来没有真正考虑过-端口80上是否有多个进程进行通信?(即,浏览器中正在运行的每个选项卡?)

Answers:


24

基本上,一次只能在一个端口上监听一个进程(从技术上讲,一个套接字专用于侦听)。但是,一个端口可以处理许多传输数据的套接字,一个套接字是本地IP /端口和远程IP地址/远程端口的组合。这样,服务器在侦听时接受了传入的连接后,便会打开一个专用于该会话的新套接字,并将处理交给其他事务,然后返回侦听。

这里有更多细节


实际上,您可以有多个进程在同一端口上侦听。例如,如果使用多个udp阅读器进行此操作,则将在内核级别获得负载平衡。首先打开插座进行监听,然后recv()在每个过程中进行尝试。
viraptor 2011年

5
@viraptor:是的,但是由于UDP是无连接的,因此“侦听”和“接收”之间并没有真正的区别。
亚当·罗宾逊

相同的想法适用于TCP,派生过程使用侦听套接字和accepting()两者。
viraptor 2011年

实际上,套接字只是通信的一个“端点”。我想您想说的是,连接的套接字是本地IP /端口和远程IP /地址/远程端口的组合。这个词插座被经常使用,这是我很难找出它的实际说明是什么
westoque

14

浏览器从计算机上的随机高端口(即> 1024)连接到远程服务器的端口80。因此,计算机上没有端口冲突。

如果使用许多选项卡连接到同一台远程服务器(或有许多用户连接到该服务器),它们都将进入同一端口并由同一进程(即站点的Web服务器)提供服务。


2
这是正确的答案。TCP连接的两端都有一个端口号。所涉及的两台计算机都可以区分连接网站:80 <->浏览器:12397和不同的连接网站:80 <->浏览器:22958。
pjc50

7

侦听端口80的服务器没有处理多个进程。较早的简单TCP守护程序一次只能处理一个连接。您可以通过netcat在特定端口上侦听这样的程序并尝试将两台计算机连接到该端口上来模拟此行为。一个会进入,另一个会在没有连接的情况下反弹。这些守护程序几乎没有用,因此您再也看不到它们了。

对于Web服务器之类的东西,它直接在端口上监听。要记住的事情是它位于操作系统的套接字库的顶部。建立新的连接后,套接字库会将全新的套接字传递给Web服务器软件。此时,Web服务器软件具有一些选项。

一种可能是它在同一进程中将套接字对象传递给新线程。每当通过此套接字进行通信时,此线程将对其进行处理。父进程会在任何给定时间中介哪些线程处于活动状态,这可能很多。

另一种可能性是,它启动了一个新进程并将套接字对象传递给该进程。据我了解,现在取决于操作系统的套接字系统来介导这些子进程与其目标之间的通信。父进程仍对该进程具有一定的控制权,例如杀死挂起的进程和其他进程间通信。

这些方法中哪种更有效取决于操作系统。IIRC,Apache可以在任何一种模式下运行。

本质上,套接字库为Web服务器提供了一定程度的并行处理。它可以在接受新连接的同时处理多个同时进行的连接,从而积极地传输数据。

对于可以增加到Web服务器的多次连接尝试以缩短加载时间的浏览器,并行性也适用于浏览器端,这是一件很好的事。浏览器会在页面加载时跟踪其状态,并且它旋转的多个连接尝试都是该过程的一部分。


+1在很多方面都对:)
迈克尔·洛曼

2

实际上,有两种“类型”的流套接字。一个具有通配符的“另一端”,一个具有特定的主机:另一端的端口。

任何两个套接字都不能(或者应该永远)具有相同的“此端”和“另一端”标识符。“侦听”(接受传入连接)的套接字是具有通配符“另一端”的套接字,因此一次只能存在一个。当连接到达时,accept完成一个操作,返回另一端带有host:port元组的套接字。


1

您的问题使我想起了我自己,早在思科CCNA之前-有同样的疑问:)

首先,建立多个HTTP连接不一定与您在浏览器中打开的选项卡数量有关。例如,当访问带有广告或Google Analytics(分析)代码的网站时,尽管仅位于一个标签中,您仍将连接到多个网站。

无论如何,当您的浏览器与Web服务器通信时,发送到Web服务器的流量的目标端口是端口80,而源端口是随机数。源端口是为了让Web服务器知道他应该通过哪个端口与您通信。每个建立的HTTP连接都会在您的计算机上打开其自己的端口。尝试在打开几个网站的情况下运行netstat,您将立即明白我的意思。

您可能会笑,但是本书是了解TCP / IP基础知识的好方法。这对我帮助很大。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.