【发布时间】:2011-05-12 05:43:48
【问题描述】:
我已经计算出使用 udp 的 2 个端点之间的分段之前的最大数据是 1472(其他端点可能会有所不同)。这表明 mtu 为 1500 字节,每个数据包的标头开销为 28 字节。假设如果我发送 0 字节数据(有效负载),实际传输的数据是 28 字节,是否安全?我正在做一些基准测试,因此了解频道中发生了什么对我来说至关重要。
【问题讨论】:
标签: c# header udp packet udpclient
我已经计算出使用 udp 的 2 个端点之间的分段之前的最大数据是 1472(其他端点可能会有所不同)。这表明 mtu 为 1500 字节,每个数据包的标头开销为 28 字节。假设如果我发送 0 字节数据(有效负载),实际传输的数据是 28 字节,是否安全?我正在做一些基准测试,因此了解频道中发生了什么对我来说至关重要。
【问题讨论】:
标签: c# header udp packet udpclient
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)中,该 MAC 数据包将嵌入以太网帧(8 字节前导序列)中。这会将 26 字节的数据添加到 IP 数据包,但不计入 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 header + UDP header + 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
如果您正在进行内部测试,请不要忘记以太网开销
【讨论】: