通过 TCP 分流对 OpenVPN 进行加速

2013-11-25 19:31:41 +08:00
 coolypf
我写了一个程序实现对 TCP 连接的分流,即将一个 TCP 连接的流量分布到多个 TCP 连接上进行传输。程序的主要作用是提升通过 TCP 连接的 OpenVPN 服务的速率,使之充分利用带宽。在特定网络环境下,我测试得到了约 320% 的加速。

详情参见 http://blog.csdn.net/coolypf
17409 次点击
所在节点    分享创造
25 条回复
DreaMQ
2013-11-25 19:56:22 +08:00
Openvpn不是早被和谐了么,这个能避免被墙吗
coolypf
2013-11-25 20:06:49 +08:00
@DreaMQ 在客户端,可以以 listen 方式启动我的程序,服务器端 connect 回国内,这样建立连接。
GFW 是否有针对性措施还不清楚,我目前用的 IPv6 ,这个程序主要起加速作用。
est
2013-11-25 20:29:07 +08:00
tcp over tcp注定没前途的噶。。
coolypf
2013-11-25 20:32:46 +08:00
@est 设置 TCP_NODELAY 选项优化延时,使用我这个程序提升速率就可以了。
我这里不知道为什么 OpenVPN 没法通过 UPD/IPv6 连接, UDP/IPv4 没问题,通过 UDP/IPv6 的 DNS 也没问题,很奇怪。
coolypf
2013-11-25 20:49:00 +08:00
目前,基于该程序的 OpenVPN 连接已经稳定运行 1 小时 55 分,发送 20928410 字节,接收 145074943 字节。
客户端 CERNET ,服务器 BurstNET VPS , IPv6 连接。
DreaMQ
2013-11-25 21:15:46 +08:00
@coolypf 试过的,墙外连墙内也会被封端口
coolypf
2013-11-25 21:22:52 +08:00
@DreaMQ 我这个程序建立连接之后会关闭监听的 socket ,只保留用于分流的 TCP 连接,不知道会不会好点。
现在不方便测试 IPv4 。
hadoop
2013-11-25 23:49:19 +08:00
原来是ypf大神!失敬
hadoop
2013-11-25 23:50:16 +08:00
@coolypf TCP_NODELAY这个是openvpn提供的参数?
javaluo
2013-11-25 23:53:02 +08:00
赞一个
DreaMQ
2013-11-25 23:59:39 +08:00
@coolypf 希望能加点混淆吧
墙就是抓建立连线时的特征的
coolypf
2013-11-26 08:34:41 +08:00
@hadoop openvpn --help | grep nodelay
coolypf
2013-11-26 08:37:29 +08:00
@DreaMQ 我这个程序要混淆/加密流量相当容易,改改 Poco::BasicFIFOBuffer 就行了。
其实,更改分流的连接数量,对 GFW 来说特征就完全不同了。
只要 GFW 不改成白名单制,应对起来难度都不会太大。
holmesabc
2013-11-26 09:12:31 +08:00
不知道原理是不是和迅雷的多线程下载类似啊
coolypf
2013-11-26 09:17:29 +08:00
@holmesabc 差不多,在延时较高的情况下,使用并发连接以充分利用带宽。
DreaMQ
2013-11-26 11:51:06 +08:00
@coolypf 很好,我试试
coolypf
2013-11-26 16:41:22 +08:00
@hadoop 你是 lgj ?
est
2013-11-26 16:43:41 +08:00
@hadoop 和nodelay无关。你用tcp去封装别人的tcp可以,但是mss和一些流控技术是没法便宜得到的。
http://sites.inka.de/~W1011/devel/tcp-tcp.html
est
2013-11-26 17:01:41 +08:00
LZ其实思路很牛逼了。不过我觉得MPTCP加上自定定制一个parity算法可能效果更好。当年中二的时候也有个类似idea https://groups.google.com/forum/#!topic/pongba/8sLMVXGYQqE
coolypf
2013-11-26 18:41:13 +08:00
@est MPTCP 目前只有 iOS 7 上在用吧。
我这个程序稍加修改,配合 socat 之类的工具,就能像下面这样用,相当于把原来的一个 TCP 连接分流成 1 个直接连接和 3 个间接连接。

client <----------------> server
| <-------> relay1 --------> |
| <-------> relay2 --------> |
| <-------> relay3 --------> |

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/90570

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX