2015-08-31 70 views
3

我有一个关于TCP的非常基本的问题。同一IP和端口上有多个TCP连接

考虑的应用,比方说DEST,与IP Dest IP监听端口6789

现在我有其能够发送消息到该应用程序的DEST 2级源的应用程序和它们经由TCP协议通信。

说源系统1是SRC1,源系统2是SRC2,分别是IP SRC1SRC2

理想地仅这些源系统中的一个将被运行,并且我可以看到,我具有由源系统(netstat -nao | grep 6789)上执行的命令netstatSRC1SRC2DEST之间的活动连接。

现在只是为了赫克我开始了第二源系统,以及,惊讶地得知的netstat两个源系统的结果显示了监听端口的应用程序DEST活动的TCP连接6789

SRC1SRC2服务器

结果netstat命令:

TCP SRC1 IP:17678 DEST IP: 6789 ESTABLISHED 

TCP SRC2 IP:51298 DEST IP: 6789 ESTABLISHED 

我的印象是,监听IP DEST1和端口6789 DEST应用下只能有1个交流tive TCP连接(DEST服务器IP:6789只能有1个活动的TCP连接)。

+2

无论你怎么想? –

回答

7

如果你认为是真的,网络服务器将无法正常工作。 Web服务器基本上在两个端口上侦听:HTTP为80,HTTPS为443。 Web服务器通常会同时连接数千个客户端。

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

9

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

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

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

+0

以及Source/Dest IP和Ports是否相同?假设一个在浏览器中打开多个标签的例子从同一台服务器获取数据? – Saad

+0

@Saad他们不可能都是一样的。在这种情况下,您将拥有多个具有相同源IP和目标IP的套接字,并且服务器端的端口将相同,但每个客户端端口都会有所不同。 – dbush

+0

那么如果UDP被管理,在某种相同的场景中仍然有不同的套接字? – Saad