对于我下一个受虐狂的业余时间项目,我正在尝试使用UDP隧道实现基本的匿名协议,其他流量可以通过该隧道流动。我想使用UDP,因为它提供了高吞吐量并防止了TCP over TCP可能发生的超时崩溃。
匿名网络中的每个用户都成为一个节点,并成为其他用户隧道的一部分。每个节点必须能够处理多个隧道,从而将传入和传出的数据包识别为属于特定隧道。
确定数据包所属隧道的最佳方法是什么,而无需查看实际的数据包数据(如果可能,只需要标头或连接)?是否有面向连接的UDP版本?
我对UDP的理解是这样的 - 它是无连接的,并且数据包标头只是说明源/目标地址和源是什么。
我可以想出几种方法来利用这些信息:
(1)似乎更可取。我真的更喜欢只使用一个单独的任意端口,除了将数据包识别为给定隧道的一部分之外,在UDP之上没有任何额外的东西。
编辑:减少开销的一种可能性是监听UDP套接字并通过原始套接字发送,但这并不能解决主要问题。
EDIT2:Skype或其他集中路由的流媒体服务如何运作?他们是否使用自己的协议?
EDIT3:Re Xaxxon的回答,我计划用一个tun接口将匿名网络暴露给用户空间程序。这将允许我通过system-ssh,ftp等运行我想要的任何流量。我不希望弄乱与这些更高层协议相对应的数据包报头。
答案 0 :(得分:3)
数据包的来源可用,并且在来自特定计算机时将保持一致。如果您需要更多,请将其他数据包含在第7层标头中。除了查看IP / UDP报头之外,没有额外的开销查看数据包的前几个字节。如果你已经把它带出了内核空间,你已经付出了代价。