【问题标题】:Create a port forward proxy to accelerate the network创建端口转发代理以加速网络
【发布时间】:2012-08-16 13:42:53
【问题描述】:

我找到了一个名为 Tunnel Spliiter 的项目,它可以满足我的需求,但它不再可用。

所以我想用python从头开始。但是我对tcp/ip编程不是很熟悉,所以我想从一些简单的动作开始——只需创建一个端口转发代理并使其复用以最大限度地利用带宽,所以似乎Twisted提供的PortForward符合我的要求要求。

但我找不到任何有关如何进行单个连接多路复用的信息,因此我们将不胜感激。

【问题讨论】:

  • “单连接多路复用”是什么意思?您能否从具体任务、接受 TCP 连接、建立新的传出 TCP 连接以及数据在连接之间移动的具体方式来描述您的要求?
  • @Jean-Paul Calderone 作者提供的链接做了一些解释。简而言之,他想拆分 TCP 连接以使用多个连接。我想这可能用于上传/下载大文件时的 ISP 连接负载平衡。
  • @Jean-PaulCalderone thx jbreicis,就像他说的那样,一个 sn-p 试图将单个 tcp 连接拆分为多个 tcp 连接以利用带宽使用。在大多数情况下,单个连接不会填满整个带宽,所以我只是想这样做。我只是对 PortForward 代理进行了一些修改并尝试尝试一下。

标签: python twisted


【解决方案1】:

有时间考虑一下,可能 PortForward 不是您想要继续的事情。

如果我要创建这样的东西,我会这样做:

LOAD_BALANCED_APP [LOCAL_SOCKS_SERVER -- (de)multiplexer] UDP [(de)multiplexer -- REMOTE_SOCKS_SERVER] SERVICE

您可以从 Twisted 中获取 Socks 实现,将接收和发送逻辑拆分为两个单独的部分,使用(解)多路复用器作为这两个科学怪人之间的粘合剂。我建议您从(解)多路复用器逻辑开始并首先解决:使用不同数量的连接,在另一端恢复确切的流,处理丢失的连接和丢失的对话序列。当你有了它,工作和通用 - 我正在考虑每个盒子有两对消费者/生产者,为此添加 Socket 服务器或任何其他类似代理的服务应该是轻而易举的事。

【讨论】:

  • 您好,非常感谢您的建议,上周我已经解决了。我使用了一个控制通道(一个从客户端到服务器端的独立 TCP 通道)来进行拆分和粘合,还有一些生产者/消费者 pasuee/resume 逻辑,并附加了一个序列标记以防止重新传输时连接丢失。虽然 PortForward 是一个好的开始,但我仍然需要重写大部分逻辑,但它确实节省了大量时间来帮助我了解如何开始。
  • 不要使用单独的 TCP 通道进行信号传输。因此,您使链路的冗余与信号运行所在的连接一样弱。可以这样想 - 如果该链接发生故障,您的服务器和客户端将无法在没有信号的情况下形成流的头部或尾部。您更应该将信号嵌入到所有通道中,同时在所有通道上发送。由于没有太多要发出的信号,因此不应增加大量开销。然后从接收端,您将处理第一条消息并丢弃具有相同signaling_msg_id 的其他消息
  • 我这个周末已经测试过了,运行起来非常流畅。当信号通道关闭时,它将清除所有工作人员(为交换数据而创建的多个隧道)和连接并等待客户端自动重新连接,这种情况很少发生(主要是网络问题引起的)。这样做是因为我想在信号通道上使用 SSL 通道来为工作人员交换密钥(使用 ssl 工作人员通道将非常昂贵),并且引入工作人员只是为了进行数据交换而不知道任何消息信息或任何其他连接细节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
相关资源
最近更新 更多