我正在研究以太网模块,我使用IPv4和UDP通过以太网传输数据。
我知道,根据理论,以太网可以传输65K字节的数据。 但是在MTU的单帧中,我们只能传输1518字节(大约)的数据,包括标题,地址。
在1518字节的数据之后,以太网模块将负责传输剩余数据,或者程序员需要为此写入任何逻辑。
在互联网上,我发现可以使用IP碎片对大数据进行分段。
因此,碎片程序堆栈是否由供应商提供?
供应商是否拥有自己的以太网堆栈来传输大量数据?
帮助表示赞赏。
答案 0 :(得分:1)
您的应用程序可以传输大约的整个有效负载。 40K字节作为单个UDP消息。这是因为,在内部,IP协议可以分割和重新组装高达64KB的数据报,以便将它们传输到更小的数据包中。由于您的有效负载低于此限制,并且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