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

Xav*_*avi 3 sockets networking tcp

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

例如DEST,考虑使用Dest IP端口6789上的IP 侦听应用程序.

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

说源系统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
Run Code Online (Sandbox Code Playgroud)

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

dbu*_*ush 9

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

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

这与TCP侦听套接字不同,后者仅由本地IP和端口定义.这意味着只有一个套接字可以侦听给定端口上的新连接.一旦连接成功,你必须通过上述四元组定义了新的插座,虽然从给定监听套接字发起的所有连接将具有相同的本地IP和端口,但不同的远程IP和/或端口.


Ron*_*pin 8

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

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