TCP 如何处理来自同一主机的多个并发请求

TCP 如何处理来自同一主机的多个并发请求

假设有一个 Web 服务器公开具有两个端点的端口 80,一个用于返回数据集 A,另一个用于返回数据集 B。

我有一个执行多线程的应用程序,因此我可能会并行发送两个请求,请求A以访问数据集A,请求B以并行访问数据集B。

根据我对TCP的理解是:

两个主机之间的 TCP 连接由以下 5 元组唯一标识:

由以下 5 元组唯一标识:

  • 协议(UDP、TCP)

  • 主机 A 的 IP 地址。

  • 主机 A 的端口号。

  • 主机 B 的 IP 地址。

  • 主机 B 的端口号。

在我的例子中,源的 ip 地址和端口号与服务器相同

这会给 TCP 造成混乱吗?假设 requestA 已经与服务器建立了三次握手,并且 requestA 正在发送请求数据,然后请求启动并向服务器发送 Syn,TCP 会不会感到困惑,“我们只是同意互相发送数据,为什么你请求再次与我连接”?

答案1

您的客户端进程未指定其连接请求将“来自”哪个本地 TCP 端口号。其本地 TCP 堆栈只会自动为每个此类新连接尝试分配一个来自临时端口范围(49152 及以上)的空闲端口号。因此,为数据集 B 的请求设置的 TCP 连接将具有与数据集 A 的现有 TCP 连接不同的源端口号,这就是使其成为不同的 TCP 连接的原因。

即使这一切都是往返于本地主机,也将会是两个连接:

127.0.0.1:49152<--> 127.0.0.1:80
127.0.0.1:49153<--> 127.0.0.1:80

相关内容