我有一个关于TCP的基本问题。
考虑一个应用程序,比如DEST
,IP Dest IP
侦听端口6789.
现在我有2个源应用程序,它们能够向此应用程序DEST
发送消息,并且它们通过TCP协议进行通信。
假设源系统1为SRC1
,源系统2为SRC2
,IP分别为SRC1
和SRC2
。
理想情况下,只有其中一个源系统正在运行,我可以通过执行SRC1
命令看到SRC2
或DEST
和netstat
之间存在活动连接在源系统上(netstat -nao | grep 6789
)。
现在只是为了它,我启动了第二个源系统,并且惊讶地发现两个源系统上netstat
的结果显示与应用程序DEST
监听的活动TCP连接在6789号港口。
netstat
和SRC1
服务器上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连接)。
答案 0 :(得分:9)
TCP连接由4元组定义:本地IP,本地端口,远程IP,远程端口。请注意,我没有说源和目标,因为一旦建立连接就没有区别。
在您给出的示例中,两个连接共有一个IP和端口,但另一个IP和端口不同。
这与TCP侦听套接字不同,后者仅由本地IP和端口定义。这意味着只有一个套接字可以侦听给定端口上的新连接。建立连接后,您将拥有一个由上述4元组定义的新套接字,尽管源自给定侦听套接字的所有连接将具有相同的本地IP和端口,但具有不同的远程IP和/或端口。
答案 1 :(得分:8)
如果您认为是真的,那么Web服务器就无法运行。 Web服务器基本上监听两个端口:HTTP为80,HTTPS为443。 Web服务器通常会同时连接数千个客户端。
应用程序可以通过一个端口连接多个。它可以通过连接主机的源/端口组合来区分连接。实际上,如果应用程序支持,则每个源主机可以在同一目标端口上的多个端口(地址实际上是地址和端口的组合)上建立连接。
答案 2 :(得分:0)
服务器在端口上侦听新的连接请求。根据请求,它接受连接并使用新建立的端口连接到远程客户端。实际的通信发生在这两个端口之间,而侦听端口仍继续轮询以寻找新连接。