我有一个带有 SignarR 客户端的 Web 服务器。拓扑如下:
客户端--Caddy--IIS
客户端——只是 JS SignalR 客户端。
Caddy——作为反向代理。
通用 exe 文件或 WSL 1 服务。(我尝试了这两个选项,它们在我的问题中是相同的)。端口 8811 到 8082。IIS - 基于 .Net 8 的 Api 应用程序。
我注意到每个客户端都创建了三个 TCP 连接,1 个到 Caddy + 2 个“镜像”,尽管我预计是两个,客户端 -- Caddy + Caddy -- IIS。
netstat 输出(8811 - caddy,客户端在此处连接。8082 - IIS 站点绑定):
TCP 192.168.21.42:8811 CLIENT:57803 ESTABLISHED
TCP 127.0.0.1:8082 SERVER:50121 ESTABLISHED
TCP 127.0.0.1:50121 SERVER:8082 ESTABLISHED
第 2 行和第 3 行是什么意思?
为什么是同时呢?
Netstat 不显示连接 – 它显示套接字。
套接字是程序持有的连接(Windows 上的“句柄”或 Linux 上的“文件描述符”)的一端
-b
。因此,如果在同一台计算机上有两个通过“localhost”进行通信的程序,则 netstat 中每个 TCP 连接都会有两个条目 - 一个程序持有的“传出”套接字和另一个程序持有的“传入”套接字。添加(或-p
对于 Linux)将显示相应的进程。“本地”和“远程”列是从每个程序的角度来看的,因此 IIS 持有的套接字(接受的传入连接)将具有 127.0.0.1:8082 作为“本地”地址,而 Caddy 创建的套接字(传出连接)将具有与远程相同的地址。