我有一个关于 TCP 的非常基本的问题。
考虑一个应用程序,例如 DEST
,其 IP Dest IP
监听端口 6789。
现在我有 2 个源应用程序,它们能够向此应用程序 DEST
发送消息,并且它们通过 TCP 协议(protocol)进行通信。
假设源系统 1 是 SRC1
,源系统 2 是 SRC2
,IP 分别为 SRC1
和 SRC2
。
理想情况下,这些源系统中只有一个正在运行,我可以看到我在 SRC1
或 SRC2
和 DEST
之间有一个事件连接通过在源系统上执行 netstat
命令 (netstat -nao | grep 6789
)。
现在我也启动了第二个源系统,惊讶地发现两个源系统上 netstat
的结果显示与应用程序 的事件 TCP 连接DEST
监听端口 6789。
netstat
命令在 SRC1
和 SRC2
服务器上的结果:
TCP SRC1 IP:17678 DEST IP: 6789 ESTABLISHED
TCP SRC2 IP:51298 DEST IP: 6789 ESTABLISHED
我的印象是 DEST
应用程序监听 IP DEST1
和端口 6789 只能有 1 个事件的 TCP 连接(DEST
服务器 IP:6789
只能有 1 个事件的 TCP 连接)。
最佳答案
如果您的想法是正确的,Web 服务器将无法工作。 Web 服务器基本上监听两个端口:80 用于 HTTP,443 用于 HTTPS。 Web 服务器通常同时连接数千个客户端。
应用程序可以通过一个端口建立多个连接。它可以通过连接主机的源/端口组合来区分连接。事实上,如果应用程序支持的话,每个源主机都可以在多个端口(地址实际上是地址和端口的组合)上连接到同一个目标端口。
关于sockets - 同一 IP 和端口上的多个 TCP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32317848/