鉴于您运行了多个Web浏览器,显然所有这些浏览器都在端口80上进行侦听,如果传入的HTTP响应是由自己发起的,浏览器将如何判断?是否收到回应并显示出来?
答案 0 :(得分:6)
作为连接过程的一部分,为TCP / IP连接分配了一个客户端端口。浏览器不“侦听端口80”;而是浏览器向服务器上的[服务器]端口80发起请求,并等待来自服务器IP的客户端端口的回复。
在(本地)分配客户端端口后,每个客户端[TCP / IP]连接由(server IP, server port, client IP, client port)
唯一标识,并且连接(以及通过此方式发送的响应)可以是“连接回“正确的浏览器。这个相同的连接识别元组是服务器如何不混淆来自同一客户端/ IP 1的多个请求
HTTP位于TCP / IP层之上,不必担心混合连接流。 (HTTP/2 introduces multiplexing,但这是一个不同的野兽,只影响来自同一浏览器的连接。)
请参阅The Ephemeral Port Range了解概述:
TCP / IPv4连接由两个端点组成,每个端点由IP地址和端口号组成。因此,当客户端用户连接到服务器计算机时,已建立的连接可以被认为是(服务器IP,服务器端口,客户端IP,客户端端口)的4元组。通常是三个很容易知道四个 - 客户端机器使用自己的IP地址,当连接到远程服务时,服务器机器的IP地址和服务端口号是必需的 [只保留客户端端口未知并自动分配]。
当建立连接时,连接的客户端使用端口号。除非客户端程序显式请求特定端口号,否则使用的端口号是一个短暂的端口号。 临时端口是由机器的IP堆栈分配的临时端口,并且为此目的从指定的端口范围分配。当连接终止时,临时端口可以重复使用,尽管大多数IP堆栈都赢了重新使用该端口号,直到使用了整个临时端口池。因此,如果客户端程序重新连接,将为其新连接的一侧分配一个不同的临时端口号。
有关其他温和解释,请参阅TCP/IP Client (Ephemeral) Ports and Client/Server Application Port Use:
要知道在何处发送回复,服务器必须知道客户端正在使用的端口号。 此客户端端口由客户端作为请求中的源端口提供,然后由服务器用作发送回复的目标端口。客户端进程不使用众所周知的或注册港口。而是为每个客户端进程分配一个临时端口号供其使用。这通常称为短暂的端口号。
1 如果有多个客户端计算机(即不同的TCP / IP堆栈,每个都分配可能重复的短暂端口)使用相同的外部IP,则必须使用类似Network Address Translation的内容服务器每个连接仍然有一个唯一的元组:
网络地址转换(NAT)是一种在互联网协议(IP)数据报数据包报头中通过流量路由设备传输时修改网络地址信息的方法,目的是将一个IP地址空间重新映射到另一个IP地址空间。
答案 1 :(得分:2)
谢谢大家的回答。 在80号港口听洞的事情是我的坏事,昨晚我一定是头晕目眩:D
无论如何,因为我读过HTTP是无连接的。
因此浏览器不会保持连接等待响应。所以答案并不容易将响应发送回打开的套接字。浏览器启动HTTP请求,并在发出请求后,客户端与>服务器断开连接并等待响应。服务器处理请求并重新建立与客户端的>连接以发回响应。
这里是source
答案 2 :(得分:0)
请注意,浏览器不会在特定端口上侦听以接收HTTP响应。侦听特定端口的Web服务器(通常为80或443)。浏览器打开与Web服务器的连接,并将HTTP请求发送到Web服务器。浏览器在接收HTTP响应之前不会关闭连接。 Web服务器在打开的连接上写入HTTP响应。
答案 3 :(得分:0)
鉴于您运行了多个Web浏览器,所有这些浏览器显然都在端口80上进行监听
不明显:错了。 HTTP服务器侦听端口80.浏览器连接到端口80。
如果传入的HTTP响应是由自己发起的,浏览器将如何计算?
因为它返回到用于发送请求的同一连接和套接字上。
是否收到回复并显示出来?
连接套接字上返回的任何内容都属于连接套接字的人。
无论如何,这一切都是TCP的功能,而不是浏览器。