2012-10-09 42 views
1

将几个UDP数据包组合成一个数据包,而不是一个接一个地发送它们有什么好处?我知道,如果大包被淹没了,那么我就把它们全都放了,但是把它们全部放在一起可能有一些好处吗?例如较大的丢失概率较低?结合UDP数据包?

+1

udp是“尽力而为”协议。繁忙的路由器可能会选择丢弃一个较大的udp数据包,而一个小型的路由器可能会通过流量中断。没有任何保证。 –

+0

如果不是评论,我会给这个最好的答案 – Lauer

回答

0

这将由发送应用程序决定。

请注意,您的大数据包受底层网络的MTU限制。例如UDP数据包的理论大小为64k,但以太网帧仅为〜1500字节。所以我怀疑这不是一个实用的功能。

+0

我正在编写应用程序。 – Lauer

+0

IPv4 UDP包有效载荷的理论最大尺寸为65535-20-8,首先减去IP头,然后减去UDP头,得到65509个字节。 – EJP

0

通常,联网通道将受限于每秒可发送数据包的速率。因此,如果您希望每秒发送数百万条消息,则通常希望将它们合并为更少数量的数据包,以避免重大数据包丢失。

作为一种过度概括,Windows不会像UDP每秒大于10,000个数据包,但是您可以使用大型MTU数据包饱和一个千兆网络。

0

将几个UDP数据包组合成一个数据包,而不是一个接一个地发送它们有什么好处?

可以保存在每个数据报8字节的UDP报头上,从而减少通过线路发送的数据量。只要确保不发送更多的MTU sans IP和UDP标头大小以避免IP层上的碎片化。另外,标准的POSIX套接字API需要一个send/sendto/sendmsg()系统调用来发送或接收一个数据报,所以通过发送较少的数据报,一个系统调用减少了总体延迟(每个调用几微秒的顺序),所需的系统调用更少。从3.0开始的Linux内核提供sendmsg()recvmmsg()函数来在一次系统调用中发送和接收多个数据报。

我知道,如果大数据包被courrupted然后我失去所有的

真。但是,如果协议无法应对UDP数据报丢失,那么可能无关紧要 - 只要一个数据报丢失,它就会被破坏。

0

对于包大小很小(小于100字节)的情况很重要。 IP/UDP标头至少有28个字节。

想象一下,您有流式连接到服务器,每个数据包包含50个字节,并且您的软件以每秒1000个数据包速率发送数据包。

实际的有效载荷是1000 * 50 bytes = 50000 bytes.头开销1000 * 28 = 28000 bytes总字节数:50000 + 28000 = 87000 ==> 87 KBps

想象一下,你可以每3个UDP数据包组合成一个包:

页眉开销1000/3 * 28 = 9333总字节数:50000 + 9333 ===> 60 KBps

这-in一些应用程序 - 节省了很大一部分带宽。