在一端,您有TCP,它保证数据包到达并且它们按顺序到达。它也是为商品互联网设计的,它的拥塞控制算法在流量中“表现良好”。在频谱的另一端,你有UDP,它不保证数据包的到达时间和顺序,它允许你向接收器发送大量数据。在中间的某个地方,您拥有可靠的基于UDP的程序,例如UDT,它们提供定制的拥塞控制算法和可靠性,但具有更高的速度和灵活性。
然而,我正在寻找的是通过UDP发送大块数据的能力(大于UDP的64k数据报大小),而不考虑每个单独数据报的可靠性。其思想是将大数据分解成指定大小的数据报(<= 64,000字节),可能将一些头数据粘贴在前面并通过网络发送。在接收端,这些数据报被读入并存储。如果数据报未到达,则与该传输相关联的所有数据报都将被客户端抛出。
大多数“可靠的UDP”实现都试图维护每个数据报的可靠性,但我只对整个数据报感兴趣,如果我不能得到整个数据报,那也没关系--把它全部扔掉,等待下一个。我必须深入挖掘,但使用UDT中的自定义拥塞控制算法可能是可能的。但是,有没有使用这种方法的协议?
发布于 2011-10-21 23:05:43
你可以尝试ENet,虽然它不是专门针对你想要做的事情,但它确实有“碎片数据块”的概念,即你发送的数据比它的MTU大,它以MTU的数据报序列的形式发送,报头详细信息将序列中的一部分与其余部分联系起来。我使用的版本只支持‘可靠’片段(即ENet可靠性层将启动以重新发送丢失的片段),但我似乎记得在邮件列表中看到过关于不可靠片段的讨论,这很可能就是你想要的;即,如果所有的片段都到达了,就发送整个有效负载,如果没有,就丢弃这些片段。
请参阅http://enet.bespin.org/
或者,看看这个问题的答案:What do you use when you need reliable UDP?
https://stackoverflow.com/questions/7850383
复制相似问题