浏览器如何通过80端口与Web服务器建立连接?细节?

smw*_*dia 2 ip networking tcp

(这个问题的灵感来自于对这个线程的响应:How WebSocket server handlers multiplecoming connection requests?

我的理解是这样的:

假设客户端IP = 1.1.1.1,服务器IP = 9.9.9.9

  1. 浏览器选择一个随机的本地可用端口,例如 5555,并启动到服务器端口 80 的连接。因此在客户端上, 应该socketfd_client代表一个 IP 连接,例如(1.1.1.1:5555, 9.9.9.9:80, TCP)

  2. 服务器调用accept()其80端口并识别来自客户端的连接请求。然后服务器随机选择一个本地可用端口(例如 8888)来满足该连接请求。所以在服务器上,socketfd_server应该代表一个IP连接,如(1.1.1.1:5555, 9.9.9.9:8888, TCP).

我的问题是:

如果我的上述理解是正确的,socektfd_client并且socketfd_server有不同的服务器端口。客户端是80,服务器是8888,如何通信?我认为客户端也应该更改为使用服务器端口 8888,但是何时以及如何?

use*_*421 5

浏览器选择一个随机的本地可用端口,例如 5555

不。操作系统执行此操作:具体来说,是网络堆栈的 TCP 部分。

并启动到服务器端口 80 的连接。因此在客户端上,socketfd_client 应该表示一个 IP 连接,如 (1.1.1.1:5555, 9.9.9.9:80, TCP)。

正确的。

服务器在其端口80上调用accept()并识别来自客户端的连接请求。

正确的。

然后服务器随机选择一个本地可用端口,例如 8888

不。

以满足该连接请求。

不。

因此,在服务器上,socketfd_server 应该表示一个 IP 连接,如 (1.1.1.1:5555, 9.9.9.9:8888, TCP)。

否。两端的连接用 表示{1.1.1.1:5555, 9.9.9.9:80}。服务器端没有新的端口。

我的问题是:

如果我的上述理解是正确的

事实并非如此。

socektfd_client 和 socketfd_server 有不同的服务器端口。

不。

客户端是80,服务器是8888,如何通信?我认为客户端也应该更改为使用服务器端口 8888,但是何时以及如何?

绝不。

  • 我很喜欢这种回答风格。谢谢! (2认同)