Network programming 是否可以通过设置IP头来启用IP分段来发送大型UDP数据包?

Network programming 是否可以通过设置IP头来启用IP分段来发送大型UDP数据包?,network-programming,udp,ip,Network Programming,Udp,Ip,我正在编写一个UDP客户端和UDP服务器 我有一些很大的UDP负载,介于2000-3000之间。我试过一些简单的测试。我让UDP客户端在数据报中发送2000字节,并使用tcpdump捕获数据包。我注意到只有一个传出数据包,它没有被解析为UDP数据包,而是一个1514字节的IP数据包,这意味着大约有500字节丢失 是否可以将所有有效负载放在同一个UDP数据包中(将有效负载分成两部分,然后在接收应用程序层上组装它们需要一些努力),并让IP将每个UDP数据包的片段堆叠成几个IP片段。在服务器端,IP堆

我正在编写一个UDP客户端和UDP服务器

我有一些很大的UDP负载,介于2000-3000之间。我试过一些简单的测试。我让UDP客户端在数据报中发送2000字节,并使用
tcpdump
捕获数据包。我注意到只有一个传出数据包,它没有被解析为UDP数据包,而是一个1514字节的IP数据包,这意味着大约有500字节丢失

是否可以将所有有效负载放在同一个UDP数据包中(将有效负载分成两部分,然后在接收应用程序层上组装它们需要一些努力),并让IP将每个UDP数据包的片段堆叠成几个IP片段。在服务器端,IP堆栈组装IP片段并将其处理到UDP服务器


如果可能,如何启用IP分段?

默认情况下应该这样做。问题是,如果一个片段从未到达,那么在IP级别没有任何东西会导致重新传输,因此整个数据报都会丢失。一般来说,使用UDP时,最好使用小于路径MTU的数据报(如果可以发现的话),否则使用534字节,因为所有主机都不需要低于此级别的分段。

我知道IP分段不可靠。但至少在80%的情况下它应该是有效的,对吧?为什么在我的测试中,只有一个传出数据包,它没有被解析为UDP数据包,而是一个1514字节的IP数据包,这意味着大约有500字节丢失。此外,是否可以在网络编程中启用IP分段?据我所知,默认情况下已启用分段。我不知道你所说的“未解析为UDP数据包”是什么意思。