【问题标题】:Multiple parallel tcp connections多个并行 tcp 连接
【发布时间】:2018-01-04 00:05:56
【问题描述】:

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

假设我想建立 100 个并行连接,从 SO 的角度来看,在从同一个 IP 建立 100 个连接或从第一个 IP 建立 50 个连接和另一个第二个有 50 个连接?

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

可能相关https://stackoverflow.com/a/3923785/1794803

【问题讨论】:

  • 只有当一个或两个对等方对两个 IP 使用不同的路由时,性能才会有所不同。如果路线相同,那就更不安全了,因为仍然存在单点故障。
  • @cdhowie 没错,但这是我无法控制的事情。阅读“相关”答案,以了解更多需要考虑的事项。这个链接的答案让我对此感到疑惑。
  • 每个IP都分配给自己的网卡吗?无论如何,我很确定按照建议拆分连接并不会真正影响性能,至少不会影响这些数字。不过,您可能会遇到一些更大数字的缓冲区问题。
  • 我不知道 Linux 是否是这样的,但多年前我使用 Solaris 服务器,它们具有每个虚拟接口的网络队列。通过将负载分散到多个 IP 上,我们能够处理更多传入查询(它们是 DNS 服务器)。
  • @NilsMagnus 我不知道。我必须向我的服务器公司询问。如果有呢?

标签: linux tcp connection


【解决方案1】:

传出 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 表可能无法处理这么多连接。

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

【讨论】:

    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 2011-11-06
    • 2012-10-22
    • 2021-09-10
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    相关资源
    最近更新 更多