多个并行 tcp 连接

Multiple parallel tcp connections

我的 (linux) 服务器有两个 public IP,我想与相同或不同的服务器建立一些并行连接(我的服务器在这里充当客户端程序;它只是运行与其他服务器通信以获取一些数据的 C++ 程序。

假设我想建立 100 个并行连接,从 SO 的角度来看,从同一个 IP 建立 100 个连接,或者从第一个 IP 建立 50 个连接,在性能或稳定性上有什么区别,和第二个的另外 50 个连接?

换句话说,如果我在不同的可用(本地)IP 之间分配连接,是否有任何区别(是否更安全)?

可能相关:。

传出 TCP 连接也分配有端口号。这些是 16 位数字,在一个时间点产生 65.535 个可能的连接(端口 0 具有特殊含义)。断开连接后,TCP 协议要求连接保持在特殊状态 TIME-WAIT(有关有限状态机的更完整描述,请参阅 http://www.tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm)。这通常预配置为 60 秒左右。通过一些额外的技巧,可以显着缩短源端口资源停留在 TIME-WAIT 中的时间。但是,这两个参数实际上限制了一次连接的数量。所有这些限制都适用于单个 IP 地址。如果您有 n 倍的 IP 地址,您的 TCP/IP 堆栈能够维持 n 倍的连接数。

小心客户端和服务器之间的潜在 NAT 网关,如果您 运行 有大量并行连接,这些路由器的 NAT 表可能无法处理这么多连接。

总的来说,我不确定您的总体架构是否适合您的用例。您的服务器可能出于某些原因不允许只允许有限数量的连接。围绕这些整形机制进行编码可能只会导致兔子和乌龟赛跑。