Xav*_*avi 3 sockets networking tcp
我有一个关于TCP的基本问题.
例如DEST,考虑使用Dest IP端口6789上的IP 侦听应用程序.
现在我有2个源应用程序,它们能够向此应用程序发送消息,DEST并通过TCP协议进行通信.
说源系统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
Run Code Online (Sandbox Code Playgroud)
我的印象是,DEST监听IP DEST1和端口6789的应用程序只能有1个活动的TCP连接(DEST服务器IP:6789只能有1个活动的TCP连接).
TCP连接由4元组定义:本地IP,本地端口,远程IP,远程端口.请注意,我没有说源和目标,因为一旦建立连接就没有区别.
在您给出的示例中,两个连接共有一个IP和端口,但另一个IP和端口不同.
这与TCP侦听套接字不同,后者仅由本地IP和端口定义.这意味着只有一个套接字可以侦听给定端口上的新连接.一旦连接成功,你必须通过上述四元组定义了新的插座,虽然从给定监听套接字发起的所有连接将具有相同的本地IP和端口,但不同的远程IP和/或端口.
如果您认为是真的,那么Web服务器就无法运行.Web服务器基本上监听两个端口:HTTP为80,HTTPS为443.Web服务器通常会同时连接数千个客户端.
应用程序可以通过一个端口连接多个.它可以通过连接主机的源/端口组合来区分连接.实际上,如果应用程序支持,则每个源主机可以在同一目标端口上的多个端口(地址实际上是地址和端口的组合)上具有连接.