Network programming 是否有一种基于UDP的协议,能够在没有数据报可靠性的情况下提供更健壮的大数据元素发送?

Network programming 是否有一种基于UDP的协议,能够在没有数据报可靠性的情况下提供更健壮的大数据元素发送?,network-programming,udp,network-protocols,Network Programming,Udp,Network Protocols,在一端,您有TCP,它保证数据包到达并且它们按顺序到达。它也是为商品互联网设计的,带有拥塞控制算法,可以在流量方面发挥良好的作用。在频谱的另一端,您有UDP,它不能保证数据包的到达时间和顺序,它允许您向接收器发送大数据。在中间的某个地方,您有可靠的基于UDP的程序,例如,提供定制的拥塞控制算法和可靠性,但具有更高的速度和灵活性。 但是,我要寻找的是通过UDP发送大数据块的能力,该数据块的大小大于UDP的64k数据报大小,但不考虑每个数据报的可靠性。其思想是将大数据分解为指定大小的数据报您可以尝试

在一端,您有TCP,它保证数据包到达并且它们按顺序到达。它也是为商品互联网设计的,带有拥塞控制算法,可以在流量方面发挥良好的作用。在频谱的另一端,您有UDP,它不能保证数据包的到达时间和顺序,它允许您向接收器发送大数据。在中间的某个地方,您有可靠的基于UDP的程序,例如,提供定制的拥塞控制算法和可靠性,但具有更高的速度和灵活性。
但是,我要寻找的是通过UDP发送大数据块的能力,该数据块的大小大于UDP的64k数据报大小,但不考虑每个数据报的可靠性。其思想是将大数据分解为指定大小的数据报您可以尝试使用ENet,虽然不是专门针对您试图做的事情,但它确实有“碎片数据块”的概念,即您发送大于其MTU的数据,并且它作为其MTU的数据报序列发送,其标题细节将序列的一部分与其余部分相关联。我使用的版本只支持“可靠”片段,即ENet可靠性层将启动以重新发送丢失的片段,但我似乎记得在邮件列表上看到了关于不可靠片段的讨论,这可能正是您想要的;i、 e.如果全部到达,则交付整个有效载荷,如果未到达,则丢弃位


或者看看这个问题的答案:

你可以试试ENet,虽然不是专门针对您试图做的事情,但它确实有“碎片数据块”的概念,即您发送大于其MTU的数据,并且它作为其MTU的数据报序列发送,其标题细节将序列的一部分与其余部分相关联。我使用的版本只支持“可靠”片段,即ENet可靠性层将启动以重新发送丢失的片段,但我似乎记得在邮件列表上看到了关于不可靠片段的讨论,这可能正是您想要的;i、 e.如果全部到达,则交付整个有效载荷,如果未到达,则丢弃位


或者,看看这个问题的答案:

我已经看完了。大多数似乎都有数据报/数据包级别的可靠性概念,并侧重于重新传输丢失/丢弃的数据包。不过,我会再看一遍,再深入挖掘;整个“数据报”需要一个序列号,加上片段的一个序列号,然后是“最终”标志或某种形式的长度指示器。就这样。只有在所有片段都到达的情况下才能交付重新组装的数据报。是的,实现起来相当简单。我只是想知道是否已经有了一个协议,特别是一个已经有多种语言实现的协议。在每个数据报交付什么元数据以及如何对其进行排序方面,您可以做一些变化。大多数似乎都有数据报/数据包级别的可靠性概念,并侧重于重新传输丢失/丢弃的数据包。不过,我会再看一遍,再深入挖掘;整个“数据报”需要一个序列号,加上片段的一个序列号,然后是“最终”标志或某种形式的长度指示器。就这样。只有在所有片段都到达的情况下才能交付重新组装的数据报。是的,实现起来相当简单。我只是想知道是否已经有了一个协议,特别是一个已经有多种语言实现的协议。您可以在每个数据报中提供哪些元数据以及如何对其进行排序方面做一些变化。因此,这根本不是一个健壮的协议吗?@Steve-o至少从客户端的角度来看,它更健壮,因为您不会因为丢失或无序的数据包而导致数据格式错误-您要么得到所有数据,要么什么也得不到,客户端知道,如果他们接收到数据,数据是完整且有序的。那么这根本不是一个健壮的协议吗?@Steve-o至少从客户端的角度来看,它更健壮,因为你不会因为丢失或无序的数据包而导致数据格式错误-你要么得到所有,要么什么也得不到,客户知道,如果他们收到数据,数据就完整有序。