后端服务通信时如何区分TCP连接?

How TCP connections are distinguished during backend service communication?

基本上我知道浏览器如何通过选择免费的临时端口将不同的端口附加到每个 TCP 连接,因此连接是唯一的,但是我不知道当两个后端服务相互连接时在 TCP 级别上看起来如何.这与浏览器的工作方式相似吗?

例如,假设我从某个 http 客户端向 'Service A' 发送请求,即 'thread-per-connection' 服务器上的 运行 并监听端口 'X'。在选择的端点内,我还向侦听端口 'Y'(类似服务或数据库)的 'Service B' 发送 http 请求,它将如何在这两个服务之间启动唯一的 TCP 连接,执行 'Service A' 操作类似于浏览器如何处理它?

您所描述的是所有 TCP 连接所共有的,包括 HTTP。创建连接的一方(“客户端”)在连接到接受连接的一方(“服务器”)时选择一个临时端口(它实际上是由 OS,而不是应用程序选择的)。

请注意,术语“客户端”和“服务器”可能会混淆,因为它们具有多种含义。 “服务器”通常是提供服务的硬件。它可以是接受连接的服务应用程序本身。但它也可以是通信中的角色,即客户端是发起连接的人,服务器是接受连接的人。在您的情况下,作为服务器应用程序的服务 A 在启动到服务 B 的 TCP 连接时充当客户端的角色。

外部 HTTP 客户端应用程序充当服务 A 的客户端。因此该应用程序将在建立第一个连接时使用临时端口。

然后服务 A 充当服务 B 的客户端。因此服务 A 将在建立第二个连接时使用临时端口。

----------       -------------           -------------
| client | ----> | service A | --------> | service B |
----------       -------------           -------------
         ^       ^           ^           ^
         |       |           |           |
x.x.x.x:e1   y.y.y.y:X   y.y.y.y:e2  z.z.z.z:Y