微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TOIT

如何解决TOIT

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

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。