0

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

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

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

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

4

1 回答 1

0

That's what should happen by default. The problem with that is that if a fragment never arrives, there is nothing at the IP level that will cause a retransmit, so the entire datagram is lost. In general with UDP you are best off using datagrams smaller than the path MTU, if you can discover it, otherwise 534 bytes, as all hosts are required not to fragment below this level.

于 2013-05-21T00:35:19.003 回答