我正在创建一个客户端/服务器应用程序,我可以使用它将网络数据包分成两半,将每个数据包的每一半通过单独的udp连接进行传输(因为每个udp连接都将通过不同的udp连接wifi链接),然后在另一端重新组合分组数据包。除了拆分数据包外,每个半数据包还必须有一个ID和序列号,以便可以正确地重新组合。如何使用tun/tap接口来拆分数据包,隧道然后重新组装。 (类似于MLPPP)
基本上我试图做类似的事情,以MLPPP
我要做到这一点使用python和TUN/TAP网络驱动程序。 我发现下面的python代码示例和模块,我认为可能对这个项目有所帮助。
的Python TUN/TAP
- http://www.secdev.org/projects/tuntap_udp/files/tunproxy.py
- http://twistedmatrix.com/trac/browser/trunk/twisted/pair/tuntap.py
- http://pastebin.com/gMB8zUfj
Python原始分组操纵
- http://libdnet.sourceforge.net/
- http://pypi.python.org/pypi/pyip/
- http://code.google.com/p/python-packet/
我的问题是可以在必要的包修改使用Python和这将是解决这个可能的方式来完成?我可以使用上述模块来做到这一点,还是有更好的解决方案?我正在寻找一些能够引导我朝着正确方向发展的投入,因为我不是一个有经验的程序员。任何代码示例或其他链接都是受欢迎的。
我没有给你答案,但我会说,如果你正在改变用户空间中的每个数据包,我认为你会对性能感到非常失望。无论是吞吐量还是延迟。我做了类似scapy的处理(类似于处理python用户空间中的每个数据包),性能非常糟糕。 FWIW – tMC 2011-05-16 13:37:01
使用不同的编程语言是否会产生影响,或者只能使用像定制内核模块这样的可接受性能? – wtip 2011-05-16 13:58:52
我还没有做足够的知识 - 但我已经阅读了一些关于从内核切换到用户空间的上下文开销的研究,我只能想象如果您必须为每个数据包制作切换,您会感觉到它。这并不是说你不能快速满足你的需求,只是有现实的期望。 – tMC 2011-05-16 15:03:34