【问题标题】:A client connected to two servers with the same port一个客户端连接到两个具有相同端口的服务器
【发布时间】:2013-05-27 04:33:17
【问题描述】:

根据 TCP/IP 规范,我认为不可能从客户端建立两个具有相同端口的连接。但它 DIT!

matchine 172.22.3.137 充当客户端,剩下的充当服务器。那么这是否意味着客户端可以连接到具有相同端口的多个服务器?

有什么想法吗?

【问题讨论】:

  • 这里没有证据表明连接同时处于活动状态。
  • 但是我已经用“tcpdump”命令转储了连接,发现它真的很活跃。甚至还有数据流~

标签: linux tcp port


【解决方案1】:

根据 TCP 规范,连接由四个数字标识:客户端端口、客户端地址、服务器端口、服务器地址。

完全可以重用客户端端口,否则任何机器都只能有 64k 连接。

不可能的是,从同一个客户端端口连接到同一个服务器(地址和端口),这会使两个连接无法区分。

【讨论】:

  • 试图理解你的答案 - 这是否意味着一个客户端可以使用相同的端口来连接(发送和接收)来自不同对等方的数据(使用 2 组不同的 ipaddr 和端口对) .正如所显示的 OP 日志/图像中所显示的那样。
  • @JanWrobel 你能写下一个Java sn-p 来重现这个问题吗? PS:我们的应用程序在 Java 上运行。
  • @Selfer 您似乎自己“复制了这个问题”。为什么需要另一个例子?
  • @Sefler 这不是 Java 特定的行为,客户端(临时)端口由操作系统分配。您可以运行任何 TCP 客户端与两台不同的服务器建立数千个连接,您会看到客户端端口重复。
【解决方案2】:

你有没有检查过当第二个连接设置时第一个仍然存在??

检查并确定第一个必须终止,如果没有,那么您的机器将不会发送任何 ack,并且三向握手将不会完成。

【讨论】:

  • 你的意思是我应该尝试从服务器端终止一个连接并检查是否可以接收到 FIN-ACK?
  • 是的,您可以尝试,但首先检查两个连接是否同时处于活动状态,例如发送和接收数据
  • 客户端和服务器属于不同的集群,有一个叫F5的负载均衡器作为网关。
猜你喜欢
  • 1970-01-01
  • 2011-10-14
  • 2015-10-14
  • 2021-02-03
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
相关资源
最近更新 更多