2012-08-16 24 views
2

我找到了一個名爲Tunnel Spliiter的項目,該項目按照我的需要進行,但不再可用。創建端口轉發代理以加速網絡

所以我想從頭開始用python。但是我對tcp/ip編程不太熟悉,所以我想從一些簡單的行爲開始 - 只需創建一個端口轉發代理並將其複用以最大限度地利用帶寬,所以看起來像Twisted提供的PortForward滿足我的要求需求。

但我找不到任何有關如何使單個連接多路複用的信息,所以任何幫助將不勝感激。

+0

「使單個連接複用」意味着什麼?你能描述一下具體任務的要求,接受TCP連接,建立新的外出TCP連接,以及數據在連接之間移動的具體方式嗎? – 2012-08-16 15:09:50

+0

@ Jean-Paul Calderone作者提供的鏈接做了一些解釋。總之他想分割TCP連接以使用多個連接。我想這可能會用於上傳/下載大文件時的ISP連接負載平衡。 – jbreicis 2012-08-17 05:50:38

+0

@ Jean-PaulCalderone thx jbreicis,就像他說的,一個片段試圖將單個tcp連接拆分爲多個tcp連接以利用帶寬使用。在大多數情況下,單連接不會佔用整個帶寬,所以我只是想這樣做。我只是用PortForward代理做了一些修改,並試圖給出一個鏡頭。 – 2012-08-18 09:58:07

回答

0

有時間想想這個,可能PortForward不是你想要繼續的事情。

如果我要創建這樣的事情,我會做這種方式:

LOAD_BALANCED_APP < - > [LOCAL_SOCKS_SERVER - (DE)複用器] < - > UDP < - > [(去)多路複用器 - - REMOTE_SOCKS_SERVER] < - > SERVICE

你在哪裏可以採取襪子從扭曲實施方式中,分割接收和發送邏輯成兩個單獨的件與充當這兩個frankensteins之間的膠水(解)複用器。我建議你先從一個(反)多路複用器邏輯和鐵開始:使用不同數量的連接,恢復另一端的確切流,處理丟失的連接並丟失對話序列。如果你有這樣的工作和推廣 - 我想每箱有兩對消費者/生產者,添加Socket服務器或任何其他代理服務如此輕鬆。

+0

嗨,非常感謝您的建議,上週我已經完成了這項工作。我使用了一個控制通道(從客戶端到服務器端的一個獨立的TCP通道)來進行分割和粘合,還有一些生產者/用戶pasuee /恢復邏輯,並附帶一個序列標記以防止連接丟失,以便重新傳輸。 PortForward雖然是一個好的開始,但我仍然需要重寫大部分的邏輯,但它確實節省了大量的時間來幫助我解決如何開始。 – 2012-08-27 06:31:02

+0

不要使用單獨的TCP通道進行signallng。因此,您可以使鏈路的冗餘性與信令所在的連接一樣弱。把它想象成這樣 - 如果這個連接斷開了,你的服務器和客戶端就不能在沒有信號傳輸的情況下做出流量的頭或尾。您應該在所有頻道中嵌入信號,同時發送到所有頻道。由於沒有太多的信號,這不應該增加大量的開銷。然後從接收方,你會處理第一條消息,並放棄其他相同signaling_msg_id – jbreicis 2012-08-27 06:45:05

+0

我已經測試了這個週末,運行相當順利。當信道出現故障時,它將清除所有工作人員(爲交換數據創建的多個隧道)和連接,並等待客戶端自動重新連接,並且很少發生(主要由網絡問題引起)。這樣做是因爲我想在信號通道上使用SSL通道來爲工作人員交換密鑰(對於工作人員通道使用ssl將非常昂貴),並且只需要引入工作人員進行數據交換,而無需瞭解任何消息或任何其他連接詳細信息。 – 2012-08-27 07:07:34