Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将UDP数据包标识为不同的连接_C_Sockets_Networking_Udp_Ip - Fatal编程技术网

C 将UDP数据包标识为不同的连接

C 将UDP数据包标识为不同的连接,c,sockets,networking,udp,ip,C,Sockets,Networking,Udp,Ip,在我的下一个受虐业余项目中,我正在尝试使用UDP隧道实现一个基本的匿名协议,其他流量可以通过UDP隧道进行传输。我想使用UDP,因为它提供了高吞吐量,并防止了TCP over TCP可能出现的超时崩溃 匿名网络中的每个用户都成为一个节点,并成为其他用户通道的一部分。每个节点必须能够处理多个隧道,从而将传入和传出的数据包标识为属于特定隧道 不需要查看实际的数据包数据(如有可能,只需查看报头或连接),就可以确定数据包属于哪个隧道的最佳方法是什么?是否有面向连接的UDP版本? 我对UDP的理解是这样的

在我的下一个受虐业余项目中,我正在尝试使用UDP隧道实现一个基本的匿名协议,其他流量可以通过UDP隧道进行传输。我想使用UDP,因为它提供了高吞吐量,并防止了TCP over TCP可能出现的超时崩溃

匿名网络中的每个用户都成为一个节点,并成为其他用户通道的一部分。每个节点必须能够处理多个隧道,从而将传入和传出的数据包标识为属于特定隧道

不需要查看实际的数据包数据(如有可能,只需查看报头或连接),就可以确定数据包属于哪个隧道的最佳方法是什么?是否有面向连接的UDP版本?

我对UDP的理解是这样的——它是无连接的,数据包头只说明源/目的地地址和源是什么

我可以想出几种方法来利用这些信息:

  • 欺骗数据包的源端口以保存与IP地址关联的16位连接ID(因此,在每台机器上,连接表是源或目标IP+连接ID的串联。这需要使用原始套接字,系统之间的可移植性可能会降低。我不知道构建UDP数据包并在另一端检查它们的开销是多少
  • 使用UDP数据包上的源端口作为唯一的连接ID,但端口字段为16位,因此对于全局ID来说这并不实际。我更希望应用程序能够使用任意端口,并且只需要一个端口
  • 使用一个像UDT这样的建立在UDP之上的协议-它仍然很快(大概是UDP速度的1/4-1/3),检查可靠性,有拥塞控制,还有连接。虽然看起来很复杂,但我认为 我更喜欢不必依赖专有(如果是开源的)库。最终我需要在这个库的基础上进行流加密,这样会更慢
  • (1) 如果它增加最小的开销似乎更可取。我真的更喜欢只使用一个任意端口,并且除了将数据包标识为给定隧道的一部分之外,在UDP上没有任何额外的内容

    编辑:减少开销的一种可能是监听UDP套接字并通过原始套接字发送,但这并不能解决主要问题

    EDIT2:Skype或其他集中路由的流媒体服务是如何工作的?它们使用自己的协议吗


    EDIT3:关于Xaxxon的回答,我计划将匿名网络公开给具有tun接口的用户空间程序。这将允许我在系统上运行我想要的任何通信—ssh、ftp等。我不希望弄乱与这些更高层协议对应的数据包头。

    数据包的源可用并且将保持一致因为它来自特定的计算机。如果您需要更多数据,只需将附加数据作为第7层标头的一部分。除了查看IP/UDP标头之外,查看数据包的前几个字节不会有额外的开销。如果您将其从内核空间中带出,您已经为此付出了代价。

    旁注:
    每个用户in匿名网络成为一个节点并成为其他用户隧道的一部分
    ——这意味着网络不是匿名的,只有通信是匿名的。(也就是说,当有人在网络上时,很容易辨别,尽管你不知道他们在说什么)正确,只是通信量是加密的。DP不会“防止超时崩溃”。如果不小心使用,UDP会导致“超时崩溃”,这将是非常准确的。