首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UDP网络基础

UDP网络基础
EN

Stack Overflow用户
提问于 2012-12-08 14:03:23
回答 3查看 2.4K关注 0票数 3

我一直在使用UDP做一些C#网络方面的工作。我进展得很好,但我需要一些基本问题的答案,我有问题要测试:

  • 目前,我用一个~16000字节的数据报发送数据,根据wireshark的说法,这些数据被分割成几个1500字节的数据包(因为最大的数据包大小限制),然后在另一端重新组装。

我是正确的理解,数据报将收到完整的另一端或根本没有。这是一件全部或完全没有的事.没有可能因为丢包而导致数据报支离破碎?

因此,我只需要每个数据报ACK,而不是确保我的数据报是< 1500字节和ACK每一个?

我看过很多地方,但是数据报和底层数据包之间的区别似乎很混乱.

谢谢你的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-08 14:26:09

没有可能因为丢包而导致数据报支离破碎?

我相信这是正确的:碎片和片段重组是由UDP下面的协议层处理的,也就是说,它是由"IP“层处理的,如果它不能将数据包碎片重新组装成数据报(例如,在RFC 792中搜索”片段“),则会出错。

5说,

“目的地的IP层执行重组。目的是使碎片和重新组装对传输层(TCP和UDP)透明,除非可能出现性能下降。”

票数 2
EN

Stack Overflow用户

发布于 2012-12-08 14:26:20

正如您现在可能看到的那样,16位UDP长度字段指示您可以发送总计65535字节。但是,理论上数据可以是= 65535-(20+8) = 65507字节。

但这并不意味着所有使用UDP的应用程序都将发送此数量的数据作为示例,DNS数据包限制为512字节。这是因为您没有从服务器获得任何ACK数据包。这是数据包可能在网络中丢失的原因之一(数据包传输问题和丢失)。其次,中间节点可以将数据报封装在另一个协议中,例如IPSEC或其他协议。

对于UDP,不存在ACK数据包,因此在您的示例中,如果底层应用程序使用UDP,则不应该看到任何ACK数据包。其次,一些服务器将它们的大小限制在最大UDP数据包上,这取决于应用程序,因此,如果您从客户端到服务器之间进行数据传输,您应该看到相同的字节,例如512字节。去和回来在wireshark。大多数情况下,源发出请求,目标发送X字节UDP数据报。

这些链接可能对您的问题有好处:

  1. Wireshark UDP分析
  2. RFC 1122 (声明576是最大重组缓冲区大小)
票数 1
EN

Stack Overflow用户

发布于 2012-12-08 22:58:02

我是正确的理解,数据报将收到完整的另一端或根本没有。这是一件全部或完全没有的事.没有可能因为丢包而导致数据报支离破碎?

这是正确的。

因此,我只需要每个数据报ACK,而不是确保我的数据报是< 1500字节和ACK每一个?

我不明白这个问题。您需要对每个数据报进行ACK,而不管它的大小如何,并且应该使它们小于1500字节,这样它们就不会变得支离破碎。否则,您可能根本无法传输任何特定的数据报,如果它反复变得支离破碎,一个片段重复丢失。

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

https://stackoverflow.com/questions/13778172

复制
相关文章

相似问题

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