繁体   English   中英

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

[英]What is the size of udp packets if I send 0 payload data in c#?

我已经计算出使用 udp 的 2 个端点之间的碎片之前的最大数据是 1472(其他端点可能会有所不同)。 这表明 mtu 为 1500 字节,每个数据包的标头开销为 28 字节。 假设如果我发送 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 字节前导序列)中。 这将向 IP 数据包添加 26 字节的数据,但不计入 MTU。

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

如果未选择任何选项,则典型的 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 标头 + Payload > 1500)则数据包被分段。

假设如果我发送 0 字节数据(有效负载),则传输的实际数据是 28 字节是否安全

(是的......因为它通常没有真正的区别,只要它是“安全的”)

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

IPv4 可能附加了多达 40 个八位字节的“选项”,并且 IPv4 可能封装在 IPv6 中(甚至在您不知道的情况下)。 两者都可以显着增加数据报的大小,从而以一种相当明显的方式传输数据。

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

以太网和 ATM 是两种广泛使用的标准,它们可能会妨碍您在此处的假设(但其他链路层类似)。

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

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

最后,请注意,可能需要发送和接收额外的数据包才能完全发送您的数据包。 例如,您的以太网卡可能必须执行 ARP(或 NDP)才能发送您的数据报。 缓存结果可以在您发送多个数据报时分摊这一点,但如果您只发送一个UPD 数据报,您可能会惊讶于发送和接收的“数据”数量是您可能天真地预期的三倍。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM