首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UDP数据包大小和数据包丢失

UDP数据包大小和数据包丢失
EN

Stack Overflow用户
提问于 2012-04-28 02:02:23
回答 3查看 12.7K关注 0票数 6

我一直在写一个程序,它在UDP之上使用停止和等待协议,通过LAN和WAN发送数据包。我最近一直在测试我的程序,并注意到更大的数据包(接近64k字节)的丢包率更高。直觉上这是有道理的,但真正的原因是什么呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-28 02:46:20

大于承载它们的网络的MTU size的UDP包将被自动拆分成多个包,然后由接收方重新组装。如果这些多个子包中的任何一个被丢弃,那么接收器也将丢弃其余的子包。

因此,举个例子,如果你发送一个63kUDP包,它通过以太网,它将被分解成更小的“片段”包(因为以太网的最大传输单位是1500字节,但其中一些用于UDP报头,等等,所以在UDP包中可用的47+ -data-space的数量比这个小)。如果那些分段分组的所有47+都通过of,则接收器将仅“看到”该UDP分组。如果这些片段数据包中只有一个被丢弃,整个操作就会失败。

票数 8
EN

Stack Overflow用户

发布于 2012-04-29 06:24:19

嗯,数据网络远不可靠;数据包总是会被丢弃。路由器过载、缓冲区满和数据包损坏是其中的一些原因。由于UDP没有流控制功能,因此它不能在例如接收端过载的情况下减速。

正如Jeremy解释的那样,有效负载越大,它被拆分的数据包就越多,因此丢失其中一些数据包的可能性也更大。

UDP用于这里丢弃的数据包不会影响任何东西的情况,或者您需要某些东西才能及时到达或根本不影响的情况。(VOIP、流视频等)

票数 0
EN

Stack Overflow用户

发布于 2012-06-23 00:40:57

这一切都是关于IP碎片和碎片整理的。超过MTU的数据包将被分片,并且必须在最终主机上进行碎片整理,也有可能碎片在路径上再次被分片,这可能会再次增加延迟。有时,如果为第四层过滤配置了一些N/W元素,那么它会对碎片进行碎片整理(而不是最终的主机),应用规则,然后再次分段并转发。这就是为什么需要性能的应用程序总是尝试发送大小为<= (MTU-ETHHDR-IPHDR)的数据。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10355626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档