UDP网络基础知识

时间:2012-12-08 14:03:23

标签: networking udp

我一直在使用UDP进行C#Networking的一些工作。我做得很好,但需要解决几个基本问​​题,我在测试时遇到了问题:

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

我是否正确理解数据报将在另一端完成或根本不收到。 IE它是一个全有或全无的东西。由于数据包丢失,没有机会得到碎片数据报?

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

我看过很多地方,但数据报和底层数据包之间的差异似乎有很多混淆......

谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

  

由于数据包丢失,不可能出现碎片数据报?

我认为这是正确的:片段化和片段重组由UDP下面的协议层处理,即它由“IP”层处理,如果它无法将数据包片段重新组合成数据报,则会出错(对于例如,在RFC 792)中搜索“fragment”。

http://www.pcvr.nl/tcpip/udp_user.htm#11_5说,

  

“目的地的IP层执行重组。目标是使传输层(TCP和UDP)对分段和重组是透明的,除了可能的性能下降之外。”

答案 1 :(得分:1)

正如您现在可能的16位UDP长度字段表示您可以发送总共65535个字节。但是,理论上数据(sizeof(IP Header)+ sizeof(UDP Header))= 65535-(20 + 8)= 65507字节。

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

对于UDP,没有ACK数据包,因此在您的情况下,如果底层应用程序使用UDP,您将看不到任何ACK数据包。其次,某些服务器根据应用程序将其大小限制为最大UDP数据包,因此如果您有从客户端到服务器的数据传输,您应该看到相同的字节,例如512字节。继续回到wireshark。通常,source使请求和目标发回X字节UDP数据报。

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

  1. Wireshark UDP analysis
  2. RFC 1122(声明576是最小重组最大缓冲区大小)

答案 2 :(得分:-1)

  

我是否正确理解数据报将在另一端完成或根本不收到。 IE它是一个全有或全无的东西。由于数据包丢失,没有机会得到碎片数据报?

这是正确的。

  

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

我不明白这个问题。您需要确认每个数据报,无论其大小如何,应该使它们成为< 1500字节,因此它们不会碎片化。否则,如果它反复出现碎片并且片段反复丢失,您可能永远无法传输任何特定的数据报。