【问题标题】:is it possible to send large UDP Packets by setting IP header to enable IP fragmentation?是否可以通过设置 IP 标头来启用 IP 分段来发送大型 UDP 数据包?
【发布时间】:2013-05-15 04:12:08
【问题描述】:

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

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

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

如果可以的话,如何开启IP分片?

【问题讨论】:

    标签: network-programming udp ip


    【解决方案1】:

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

    【讨论】:

    • 我知道 IP 分片不可靠。但至少,对于 80% 的情况,它应该有效,对吧?为什么在我的测试中,只有1个传出数据包,它没有被解析为UDP数据包,而是一个1514字节的IP数据包,这意味着大约有500个字节丢失。
    • 另外,是否可以在网络编程中启用 IP 分片?
    • 据我所知,分片已经默认开启。我不知道您所说的“未解析为 UDP 数据包”是什么意思。
    猜你喜欢
    • 2013-04-16
    • 2011-11-01
    • 2015-01-06
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 2013-07-26
    相关资源
    最近更新 更多