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

时间:2015-08-31 18:43:37

标签: sockets networking tcp

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

考虑一个应用程序,比如DEST,IP Dest IP侦听端口6789.

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

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

理想情况下,只有其中一个源系统正在运行,我可以通过执行SRC1命令看到SRC2DESTnetstat之间存在活动连接在源系统上(netstat -nao | grep 6789)。

现在只是为了它,我启动了第二个源系统,并且惊讶地发现两个源系统上netstat的结果显示与应用程序DEST监听的活动TCP连接在6789号港口。

netstatSRC1服务器上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连接)。

3 个答案:

答案 0 :(得分:9)

TCP连接由4元组定义:本地IP,本地端口,远程IP,远程端口。请注意,我没有说源和目标,因为一旦建立连接就没有区别。

在您给出的示例中,两个连接共有一个IP和端口,但另一个IP和端口不同。

这与TCP侦听套接字不同,后者仅由本地IP和端口定义。这意味着只有一个套接字可以侦听给定端口上的新连接。建立连接后,您将拥有一个由上述4元组定义的新套接字,尽管源自给定侦听套接字的所有连接将具有相同的本地IP和端口,但具有不同的远程IP和/或端口。

答案 1 :(得分:8)

如果您认为是真的,那么Web服务器就无法运行。 Web服务器基本上监听两个端口:HTTP为80,HTTPS为443。 Web服务器通常会同时连接数千个客户端。

应用程序可以通过一个端口连接多个。它可以通过连接主机的源/端口组合来区分连接。实际上,如果应用程序支持,则每个源主机可以在同一目标端口上的多个端口(地址实际上是地址和端口的组合)上建立连接。

答案 2 :(得分:0)

服务器在端口上侦听新的连接请求。根据请求,它接受连接并使用新建立的端口连接到远程客户端。实际的通信发生在这两个端口之间,而侦听端口仍继续轮询以寻找新连接。