2009-12-21 307 views
10

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

+18

服务器侦听,浏览器连接... – miku 2009-12-21 11:58:13

+1

当连接到端口80时,两个程序中的哪一个应该回答? – 2009-12-21 12:06:43

+1

@Alvaro这不是套接字的工作方式。 – 2009-12-21 12:14:07

回答

17

浏览器不侦听端口80,HTTP服务器(虽然这只是惯例,你可以使用端口80轻松拥有一个FTP和Telnet服务器)。

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

典型地,当客户端试图联系服务器,它指定0作为其源端口这意味着该操作系统分配给它的未使用的一个。这意味着客户端实际上将在上监听端口而不是端口80

因此,当您的浏览器访问微软的网页时,您可能会收到与属性(TCP, mybox.com, 1101, www.microsoft.com, 80)的会话。

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

运行netstat -a(在Linux上 Windows)会告诉你服务器是否绑定到端口80。寻找端口80监听器(或http如果它解决端口服务名称),是这样的:

tcp 0 0 localhost:http *:* LISTEN 
+0

您将会话列为具有五元组('protocol,sourceIP,destinationIP,sourcePort,destinationPort)',但是您举例说明'(TCP,mybox.com,1101,www.microsoft.com,80)'。它应该不是'(TCP,mybox.com,www.microsoft.com,1101,80)'? – 2018-02-03 17:57:43

+1

@Jon,谢谢你。这个元组不是我自己想要以任何方式订购的,它只是确定会话所需的信息。我会修正它的一致性,因为你绝对正确,可能会导致混淆。 – paxdiablo 2018-02-04 02:23:30

18

他们不听他们与80端口对话的端口80,或443如果您使用SSL(或在任何其他端口,如果管理员打破常规,您可能已经看到类似http://www.site.com:8080的网址已在8080端口上设置)。

浏览器将从随机编号较高的端口发出请求,以便浏览器可以同时处于活动状态。

由于paxdiablo说,你可以用netstat查看哪些程序侦听连接(使用“netstat的 - -b”将显示哪些可执行文件绑定到哪个端口)

3

的浏览器实际上不是绑定到80端口。您可能会发现,您也正在运行IIS或其他网络服务器,绑定,这是您的问题的原因

8

浏览器实际上不听在端口80.网络服务器做到这一点,浏览器(动态端口)与49152和65535之间的端口打开连接。

4

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

在这种情况下,Web服务器在所有客户端(浏览器)连接到端口80时监听端口80。

2

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

0

如果你的意思是“怎么两个服务器侦听端口80”,可以考虑使用HTTP服务器API。 这两个服务器都可以注册一个回调函数和一个URL。客户端然后可以根据URL f.e来决定调用哪个服务器。

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

相关问题