通过UDP协议发送大量(大约40K字节)的数据,这有多可能?

通过UDP协议发送大量(大约40K字节)的数据,这有多可能?

问题描述:

我正在使用以太网模块,其中我使用IPv4和UDP通过以太网传输数据。通过UDP协议发送大量(大约40K字节)的数据,这有多可能?

我知道,按照理论,以太网可以传输65K字节的数据。但是在按照MTU的单帧中,我们只能传输1518字节(大约)的数据,包括标题,地址。

经过1518个字节的数据,以太网模块是否会处理剩余数据的传输或程序员需要为此编写任何逻辑。

在互联网中,我发现大数据可以使用IP碎片进行分段。

所以碎片过程堆栈是由供应商提供还是不提供?

供应商是否有他们赢得的以太网堆栈来传输大量数据?

帮助表示赞赏。

+1

注意,没有人可以回答,你可以找到'UDP_Send()'代码,直到零件你告诉我们你在做什么。你使用的是什么库/平台/编译器/ SDK等,它包含一个'UDP_Send()'函数? – nos

+1

不打扰碎片,这是邪恶的。只需将数据分成更小的块并发送每个块。添加一个标题来订购它们。如果你必须分片然后自己做,建立每个片段并发送出去。 30多岁的rfcs解释了这一切... –

+0

我正在使用一个免费的秤控制器,我问你的是免费的秤供应商将提供任何图书馆或堆栈照顾所有这些碎片和转移。 来到UDP_Send()函数,在一些现成的API的我发现那个函数。 – vNy

您的应用程序可以传输约。 40K字节作为单个UDP消息。这是因为在内部,IP协议可以分段并重新组装数据报,最高可达64KBytes,以便传输到更小的数据包中。由于您的有效负载低于此限制,并且IP数据报可以携带您的预期有效负载。

由于以太网中的MTU为1518字节,IP堆栈会将消息分段成发送端的多个IP数据包。在接收端,IP栈会将IP分段重新组装成具有40K字节有效载荷的单个IP分组。只有在IP堆栈成功重新组装消息后,接收端的应用程序才能够读取40K字节的消息。

您可以参考http://lxr.free-electrons.com/source/net/ipv4/udp.c上的Linux内核UDP代码。

IP数据报的解释,以及它如何可以标记子包进行重新组装可以在这里找到:http://www.freesoft.org/CIE/Course/Section3/7.htm

+0

谢谢你的回复。 但是,在这里我使用的固件板没有任何操作系统,因为您知道这一点。 在这种情况下,控制器供应商是否会提供任何API或库,否则供应商将提供任何相关堆栈或程序员是否需要为数据碎片开发任何逻辑。 – vNy

+1

IP栈负责分段数据 –