UDP 小数据包(MTU 内部)在传输过程中松弛字节



背景:使用点对点UDP传输为模拟器(Windows,.net)编写多人游戏代码。这个Q不是关于UDP与TCP的优势,也不是关于数据包头。与本 Q 相关的讨论在这里。

考虑一下:我发送有效负载大小为 X 的 UDP 数据包,其中 X 可以是 1 到 500 字节之间的任何值。

问:在传输过程中的任何时候,是否会/是否可以暂时向数据包添加松弛字节,即除了所需的标头/有效负载之外的字节?例如,传输中的任何参与者(Windows OS - NAT - Internet - NAT - Windows OS)添加字节以满足一定的块大小,以便这些添加的字节成为传输的一部分(即使后来被切断),并且实际上被传输,从而消耗处理器(交换机,服务器CPU)周期?

(询问的原因是在组合/分解数据包上花费多少精力,当然:-)。将其压缩到最后一位(较小的,更多的本地CPU周期)与允许数据包部分自描述(更大,更少的本地CPU)。请注意,数据包大小始终小于(离我最近,我知道的)MTU,通常更接近 1500 字节)

感谢!

简短的回答是:是的

以以太网为例。出于冲突检测目的,以太网帧的最小有效负载大小为 42 字节。如果有效负载(在本例中包括应用程序数据、UDP 和 IP 标头)小于此值,则将向以太网帧添加填充。

另外,据我所知,网卡将用于这项工作,而不是驱动程序或操作系统。

如果您想决定发送小数据包还是等待并发送更大的数据包更好,请查看 Nagle 的算法。

在这里,您可以看到以太网填充在实践中:在 Wireshark 中以太网帧末尾的 0 字节是多少?

最新更新