【问题标题】:How two browsers simultaneously listen on port 80?两个浏览器如何同时监听 80 端口?
【发布时间】:2018-02-04 10:24:19
【问题描述】:

当我尝试从程序将套接字绑定到端口 80 时出现错误,但是两个浏览器如何同时监听同一个端口 80 ?

【问题讨论】:

  • 服务器监听,浏览器连接...
  • 当连接到 80 端口时,两个程序中的哪一个应该应答?
  • @Alvaro 这不是套接字的工作原理。
  • @Neil:你什么意思?端口是套接字层决定哪个应用程序应该接收连接的方式。
  • (但是,从答案中可以清楚地看出,浏览器不会监听端口 80)

标签: sockets


【解决方案1】:

浏览器不侦听端口80,HTTP 服务器 这样做(虽然这只是惯例,但您可以使用端口80 轻松拥有一个FTP 或telnet 服务器)。

在 TCP/IP 中,“会话”必须是唯一的,并且会话定义为 5 元组 (protocol, sourceIP, sourcePort, destinationIP, destinationPort)。这允许数据包在 Internet 上正确路由。

通常,当客户端尝试联系服务器时,它会将0 指定为其源端口,这意味着操作系统会为其分配一个未使用的端口。这意味着客户端实际上将侦听 那个 端口,而不是端口 80

因此,当您的浏览器出去访问 Microsoft 的网页时,您可能会获得带有属性 (TCP, mybox.com, 1101, www.microsoft.com, 80) 的会话。

如果您发现无法将服务器绑定到端口80,很可能是因为您已经在该端口上运行了一个服务器,或者您的程序没有绑定到该端口所需的权限(端口较少1024 通常被认为是特权端口)。

运行netstat -a(在Linux Windows 上)将告诉您服务器是否绑定到端口80。在端口80(或http,如果它将端口解析为服务名称)上查找侦听器,例如:

tcp  0  0  localhost:http  *:*  LISTEN

【讨论】:

  • 您将会话列为具有 5 元组 (protocol, sourceIP, destinationIP, sourcePort, destinationPort),但随后您给出了示例 (TCP, mybox.com, 1101, www.microsoft.com, 80)。不应该是(TCP, mybox.com, www.microsoft.com, 1101, 80)吗?
  • @Jon,谢谢。我本人并不打算以任何方式对元组进行排序,它只是识别会话所需的信息。我会修复它以保持一致性,因为您绝对正确,它可能会引起混淆。
【解决方案2】:

他们不在端口 80 上侦听,而是在端口 80 或 443 上进行侦听(如果您使用 SSL,或者在任何其他端口上,如果管理员违反约定,您可能已经在站点所在的位置看到了诸如 http://www.site.com:8080 之类的 URL已设置在 8080 端口上)。

浏览器会从一个随机的高编号端口发出请求,因此多个浏览器可以同时处于活动状态。

正如 paxdiablo 所说,您可以使用 netstat 查看哪些程序正在侦听连接(使用“netstat -a -b”将显示哪个可执行文件绑定到哪个端口)

【讨论】:

    【解决方案3】:

    浏览器实际上不会监听端口 80。网络服务器会这样做,并且浏览器会打开一个与 49152 和 65535 之间的端口的连接(我认为是动态端口)。

    【讨论】:

      【解决方案4】:

      在网络连接中,有一个对等点(通常称为客户端)连接到另一个点(通常称为服务器)。据说服务器正在侦听某个端口,而客户端正在连接到该端口。

      在这种情况下,Web 服务器在端口 80 上侦听,而所有客户端(浏览器)都连接到它。

      【讨论】:

        【解决方案5】:

        浏览器实际上根本没有绑定到端口 80。您可能会发现您也在运行 IIS 或另一个绑定了 的 Web 服务器,这就是问题的原因

        【讨论】:

          【解决方案6】:

          当浏览器与服务器建立连接时,它会绑定到本地非特权端口,但会连接到 Web 服务器的 80 端口。当服务器发回响应时,它会转到服务器上的非特权端口浏览器的电脑。如果同一台计算机上有两个浏览器,它们会绑定到不同的端口。

          【讨论】:

            【解决方案7】:

            如果您的意思是“两台服务器如何监听 80 端口”,请考虑使用 HTTP Server API。 两个服务器都可以注册一个回调函数以及一个 URL。然后客户端可以根据 URL f.e. 决定调用哪个服务器

            http://localhost/Service1 将转到已将“http://localhost/Service1”指定为其 URL 的服务。

            【讨论】:

              猜你喜欢
              • 2012-05-17
              • 1970-01-01
              • 2020-06-07
              • 2019-02-20
              • 2016-05-05
              • 2013-04-07
              • 1970-01-01
              • 1970-01-01
              • 2014-10-31
              相关资源
              最近更新 更多