sockets - 同一 IP 和端口上的多个 TCP 连接

标签 sockets networking tcp

我有一个关于 TCP 的非常基本的问题。

考虑一个应用程序,例如 DEST,其 IP Dest IP 监听端口 6789。

现在我有 2 个源应用程序,它们能够向此应用程序 DEST 发送消息,并且它们通过 TCP 协议(protocol)进行通信。

假设源系统 1 是 SRC1,源系统 2 是 SRC2,IP 分别为 SRC1SRC2

理想情况下,这些源系统中只有一个正在运行,我可以看到我在 SRC1SRC2DEST 之间有一个事件连接通过在源系统上执行 netstat 命令 (netstat -nao | grep 6789)。

现在我也启动了第二个源系统,惊讶地发现两个源系统上 netstat 的结果显示与应用程序 的事件 TCP 连接DEST 监听端口 6789。

netstat 命令在 SRC1SRC2 服务器上的结果:

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/

相关文章:

java - "Intercept"带java的闪存套接字

node.js - 如何调试 NodeJS 中的套接字挂起错误?

c++ - IPv6 和 IPv4 的套接字监听器

c++ - c++ 和 mono 的轻量级 RUDP 网络库有哪些合适的选择?

linux - sockaddr_in 和 sockaddr_in6 还在使用 sin_len 和 sin6_len 吗?

networking - 从 Parallels/VMWare Fusion 虚拟 Windows 机器访问本地网站的最简单方法是什么?

c - 发送分段数据报,每个分段均带有 UDP header

.net - BinaryReader ReadByte() 是否超时?

c++ - 如何在 Windows 上实现端口重定向/映射?

java - storm 0.9.0.1 与 Netty 的 supervisor 通信