两个不同主机的两个端口之间可以同时激活多个 TCP 连接吗?请回答。
答案1
如果您询问是否有可能从两个客户端系统打开一个套接字到一个服务器,其中相同的源和扩展端口恰好相同,那么是的,这是可能的。
# connections as seen by server
src_ip sce_port dest_ip dest_port
192.168.1.5 1234 192.168.1.1 1234
192.168.1.4 1234 192.168.1.1 1234
套接字通过(源地址 + 源端口 + 目标地址 + 目标端口)进行标识。两个目标地址会有所不同,因此一切都会正常工作。
然而,在现实世界中,这种情况不太可能经常发生,因为源端口通常是从可用于传出连接的端口范围中挑选出来的。
# connections as seen by server you would most likely see in the real world
src_ip sce_port dest_ip dest_port
192.168.1.5 49345 192.168.1.1 1234
192.168.1.4 51284 192.168.1.1 1234
如果您问的是具有单个 IP 地址的单个系统是否可以从同一个源地址+端口打开到同一个目标地址+端口的两个连接,那么答案是否定的。当应用程序的第二个实例尝试绑定到该源地址+端口组合时,它将收到错误。
# cannot happen/invalid, client can't bind
src_ip sce_port dest_ip dest_port
192.168.1.4 1234 192.168.1.1 1234
192.168.1.4 1234 192.168.1.1 1234
答案2
TCP 连接由端口/地址元组跟踪:
192.168.101.24:61213 <---> 192.168.105.50:80
该连接在两端均被跟踪,网络堆栈会据此确定实际连接。因此,该元组只能有一个连接。这就是为什么连接的发起者使用“临时”端口作为其一半,这样它就可以打开到远程端的多个连接。