7

我正在寻找创建一个客户端/服务器应用程序,我可以用它来将网络数据包分成两半,通过单独的 udp 连接隧道传输数据包的每一半(因为每个 udp 连接将通过不同的 wifi 链接),然后重新组装在另一端拆分数据包。除了拆分数据包之外,每半个数据包还必须有一个 ID 和序列号,以便它们可以正确地重新组装。

基本上我正在尝试做类似于MLPPP

我希望使用 python 和 TUN/TAP 网络驱动程序来做到这一点。我发现了以下我认为可能对这个项目有帮助的 python 代码示例和模块。

Python 调谐/点击

Python原始数据包操作

我的问题是可以使用 python 完成必要的数据包修改吗?有什么可能的方法来解决这个问题?我可以使用上面的模块来做到这一点还是有更好的解决方案?由于我不是经验丰富的程序员,我正在寻找一些可以引导我朝着正确方向前进的输入。欢迎任何代码示例或其他链接。

4

2 回答 2

4

我们正在生产中做这样的事情,而且效果很好。不过,我们不会拆分单个数据包。我们为每个连接设置分数权重(无限制)并将数据包发送出去。我们有一些代码来处理每一行的不同延迟。在另一端,我们缓冲它们并重新排序。性能非常好——我们的站点有 5 条以上的 ADSL 线路,并且速度很好,下载速度超过 40 Mbps。

拆分数据包(例如 1500/2 = 750)会引入不必要的开销……让数据包尽可能大。

我们为 UDP 数据包开发了自己的协议(标头格式)。我们已经在高达 200 Mbps 的 tun/tap 上进行了环回测试,因此内核与用户空间的交互肯定运行良好。以前我们使用 NFQUEUE,但存在可靠性问题。

以上所有内容都是用 Python 编写的。

于 2011-06-30T03:28:20.127 回答
1

在我看来,这完全有可能。

您发现的 tun/tap 模块看起来可以胜任这项工作。Twisted 将是高性能和全力以赴的伤害你的头部的成本。

至于拆分数据包,您不需要以任何方式解释数据,只需将其视为二进制数据块,将其拆分为两部分并添加标头 - 我不会为此使用任何第 3 方模块,只是普通的python字符串处理。

或者,如果您想要一种易于使用的数据包封装格式,您可以使用网络字符串。

我不认为它会像火箭一样飞,但我相信你会学到很多东西!

于 2011-05-16T14:38:19.073 回答