将几个UDP数据包组合成一个数据包,而不是一个接一个地发送它们有什么好处?我知道,如果大包被淹没了,那么我就把它们全都放了,但是把它们全部放在一起可能有一些好处吗?例如较大的丢失概率较低?结合UDP数据包?
回答
通常,联网通道将受限于每秒可发送数据包的速率。因此,如果您希望每秒发送数百万条消息,则通常希望将它们合并为更少数量的数据包,以避免重大数据包丢失。
作为一种过度概括,Windows不会像UDP每秒大于10,000个数据包,但是您可以使用大型MTU数据包饱和一个千兆网络。
将几个UDP数据包组合成一个数据包,而不是一个接一个地发送它们有什么好处?
可以保存在每个数据报8字节的UDP报头上,从而减少通过线路发送的数据量。只要确保不发送更多的MTU sans IP和UDP标头大小以避免IP层上的碎片化。另外,标准的POSIX套接字API需要一个send/sendto/sendmsg()
系统调用来发送或接收一个数据报,所以通过发送较少的数据报,一个系统调用减少了总体延迟(每个调用几微秒的顺序),所需的系统调用更少。从3.0开始的Linux内核提供sendmsg()
和recvmmsg()
函数来在一次系统调用中发送和接收多个数据报。
我知道,如果大数据包被courrupted然后我失去所有的
真。但是,如果协议无法应对UDP数据报丢失,那么可能无关紧要 - 只要一个数据报丢失,它就会被破坏。
对于包大小很小(小于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一些应用程序 - 节省了很大一部分带宽。
- 1. 解析UDP数据包
- 2. Linux丢弃UDP数据包
- 3. UDP数据包误启动
- 4. UDP数据包加密
- 5. UDP数据包的排序
- 6. Android udp数据包丢失
- 7. UDP发送数据包failling
- 8. UDP数据包NPE - Java的
- 9. Android UDP数据包丢失
- 10. 50%udp数据包丢失
- 11. 读取UDP数据包
- 12. 数据包损坏和UDP
- 13. 的AsyncTask和UDP数据包
- 14. UDP数据包分离
- 15. UDP数据包安排
- 16. “Lost”UDP数据包(JBoss + DatagramSocket)
- 17. 分裂UDP数据包
- 18. UDP数据包兼容型
- 19. 发送UDP数据包gopacket
- 20. 小数据包的UDP流
- 21. udp数据包丢失
- 22. Java UDP数据包仅包含5个数据包
- 23. 重新组合零碎的UDP数据包
- 24. 在C#自定义的UDP数据包结构
- 25. 平均UDP数据包丢失和数据包重新排序
- 26. 无法接收NAT数据包后面的UDP数据包
- 27. 发送带有IP_TOS辅助数据的UDP数据包时sendmsg()失败,并且发送UDP数据包
- 28. 使用VBscript嗅探UDP数据包
- 29. 在iPhone上收回UDP数据包
- 30. 获取UDP数据包的IP地址
udp是“尽力而为”协议。繁忙的路由器可能会选择丢弃一个较大的udp数据包,而一个小型的路由器可能会通过流量中断。没有任何保证。 –
如果不是评论,我会给这个最好的答案 – Lauer