在使用运行在esp32上的UDP服务器进行实验时,我发现接收到的数据包的大小限制为1500字节: 20 (IP报头)+8 (UDP报头)+ 1472 (数据)(尽管在理论上UDP似乎可以支持高达64K的数据包数据)。这意味着,为了传输更多的数据,客户端必须将其拆分成几个块并逐个发送,并且在服务器端需要恢复这些数据。我认为这样的解决方案的开销会相当高。我还知道TOIT提供TCP/IP连接。当然,在TCP/IP的情况下,数据包大小也是有限的。这是64K (65535字节)。TOIT是否对TCP/IP连接有任何额外的限制,或者对于TOIT来说64K值也是事实?
发布于 2021-06-10 20:17:18
如this问题/答案中所述,这是避免数据包碎片的问题。发送超过此大小的数据包将迫使系统将它们拆分成多个大小为MTU的片段,每个片段都是不可靠的。由于嵌入式系统上的内存已经非常有限,因此发送大型(> MTU)包,其中所有片段都必须在处理之前到达,这对于整个应用程序行为来说可能是非常不幸的,因为它可能会超时或耗尽内存。
相反,应用程序应该考虑流管道(甚至可能是TCP来处理不可靠的方面)。
因为TCP/IP是一种流协议,所以可以发送任何大小的“包”,因为它们被自动分割成大小为MTU的片段。请注意,数据是在“随机”-sized包中接收的,尽管字节的顺序被完全保留。
https://stackoverflow.com/questions/67836543
复制相似问题