如果我在c#中发送0个有效载荷数据,udp数据包的大小是多少?

时间:2010-11-18 19:08:44

标签: c# header udp packet udpclient

我已经计算出使用udp的2个端点之间的碎片之前的最大数据是1472(其他端点可能不同)。这表明mtu是1500字节,每个数据包的头开销是28bytes。可以安全地假设如果我发送0字节数据(有效载荷),传输的实际数据是28字节?我正在做一些bencchmark,所以对我来说知道频道中发生了什么至关重要。感谢。

4 个答案:

答案 0 :(得分:28)

  • MTU是可以在没有分段的情况下传输的IP数据包的最大大小。

    IPv4要求路径MTU至少为576字节,IPv6至少为1280字节。

    以太网的MTU为1500字节。

  • IP数据包由两部分组成:数据包标头和有效负载。

    IPv4标头的大小至少 20个字节,IPv6标头的大小至少 40个字节。

    IP数据包的有效负载通常是TCP段或UDP数据报。

  • UDP数据报由UDP标头和传输的数据组成。

    UDP标头的大小为8个字节。

这意味着具有空UDP数据报的IP数据包作为有效负载需要至少 28(IPv4)或48(IPv6)字节,但可能需要更多字节。

另请注意,在以太网的情况下,IP数据包将另外包装在MAC数据包(14字节标头+ 4字节CRC)中,该数据包将嵌入以太网帧(8字节前导序列)。这会将26个字节的数据添加到IP数据包中,但不会计入MTU。

因此,您不能假设UDP数据报将导致传输特定数量的字节。

答案 1 :(得分:7)

如果未选择任何选项,则典型的IP标头为20个字节。 UDP头是8个字节。通过以太网,帧大小为14字节(标题)+ 4字节(预告片)。根据您捕获这些数据包的方式,您可能需要考虑或不考虑帧大小。

没有以太网(IP + UDP)= 20 + 8 = 28字节
以太网= 18 + 28 = 46字节

C#中的UdpClient类将从第5层开始返回数据包,因此您无需考虑上述内容。

<强>更新
1500字节MTU在IP层强制执行。这意味着分段时,IP层以下的数据包大小无关紧要。

转换为:
以太网帧字节(固定)= 18
IP头(分)= 20
UDP标头(固定)= 8
最大。允许的有效载荷没有碎片= 1472
导线上的总字节数=(上面的总和)1518字节
(您可以使用Wireshark等工具计算剩余的字节数)

如果(IP标头+ UDP标头+有效负载&gt; 1500)则数据包被分段。

答案 2 :(得分:2)

  

如果我发送0字节数据(有效载荷),可以安全地传输实际数据是28字节

(是的......因为它通常没有什么区别,只要它是&#34;安全&#34;)

虽然无负载无选择的UDP / IPv4数据报确实是28字节(或#34;八位字节&#34;在网络行话中),但这绝不是一个安全的假设。 /> 然而,这在很大程度上是无关紧要的。交换机和路由器通常转发一个小数据包的速度与较大数据包一样快(或者,具有可忽略的差异)。您可能会看到差异的唯一场合是您的带宽账单(您需要支付线路上的所有比特,而不仅仅是您使用的比特!)。

IPv4可能有多达40个八位字节的&#34;选项&#34;附加到它,IPv4可以封装在IPv6中(甚至你不知道)。两者都可以大大增加数据报的大小,从而以相当明显的方式传输数据。

此外,数据报将进一步封装在链路层,既添加前导码和标头数据,又具有最小帧长度。额外标题的存在同样非常明显,除了最大尺寸之外,有效载荷还具有最小尺寸,这是一个鲜为人知的事实。

以太网和ATM是两种广泛使用的标准,可以在这里考虑您的假设(但其他链路层类似)。

以太网帧的最小大小为64字节,并且填充为此大小。在存在802.1Q(VLAN)的情况下,这意味着以太网帧的最小有效载荷为42个八位字节,否则为46个八位字节。 发送零长度UDP / IPv4数据报&#34;普通&#34;因此,以太网将向有效载荷附加18个零字节。你永远不会看到他们,但他们在那里,他们会出现在你的账单上。

类似地,ATM信元(与&#34;帧&#34;相同,由于某种原因它们使用不同的字)总是53字节,具有48字节的零填充有效载荷。因此,零负载UDP图将导致添加20个零字节,而零长度UDP / IPv6数据报将保持其原始大小(大小恰好为48字节),假设其间没有其他封装,例如PPPoE。

最后,请注意可能需要发送和接收其他数据包才能发送数据包。例如,您的以太网卡可能必须执行ARP(或NDP)才能发送数据报。缓存结果会在您发送多个数据报时将其分摊,但如果只发送一个 UPD数据报,您可能会惊讶地发现大约三倍的数据&#34;数据&#34;与您可能天真期望的相比,发送和接收。

答案 3 :(得分:1)

IP开销是20字节,UDP是8字节,所以是的,28字节。

http://en.wikipedia.org/wiki/User_Datagram_Protocol

如果您正在进行内部测试,请不要忘记以太网开销