TOIT 中的 UDP 和 TCP/IP 数据包大小

UDP and TCP/IP packet size in TOIT

在esp32上运行UDP服务器进行实验时,发现接收到的数据包大小限制为1500字节:20(IP头)+8(UDP头)+1472(数据),(虽然理论上 UDP 好像可以支持最大 64K 的数据包)。这意味着为了传输更大量的数据,客户端必须将其分成几个块并一个接一个地发送,而在服务器端,这些数据将需要被恢复。我认为这样的解决方案的开销会相当高。我也知道 TOIT 提供 TCP/IP 连接。自然,在TCP/IP的情况下,包的大小也是有限制的。这是 64K(65535 字节)。 TOIT 是否对 TCP/IP 连接有任何额外限制,或者 64K 值对于 TOIT 也是事实?

this question/answer 中所述,这是避免数据包碎片的问题。发送超过此大小的包将迫使系统将它们分成多个大小为 MTU 的片段,每个片段都不可靠。由于嵌入式系统的内存已经非常有限,发送大型 (> MTU) 包,其中所有片段都必须在处理之前到达,这对于整体应用程序行为来说可能是非常不幸的,因为它可能会超时或内存不足.

相反,应用程序应该查看流式传输管道(甚至可能是 TCP 来处理不可靠的方面)。

由于 TCP/IP 是一种流式传输协议,因此可以发送任何大小的“包”,因为它们会自动拆分为 MTU 大小的片段。请注意,数据是在“随机”大小的包中接收的,尽管字节顺序已完全保留。