【问题标题】:Linux UDP: where does the UDP datagram lose?Linux UDP:UDP 数据报在哪里丢失?
【发布时间】:2017-08-16 19:40:02
【问题描述】:

我有一个使用 UDP 协议在发送方和接收方上运行的应用程序。 UDP 缓冲区大小约为 70 或 1024 字节,因此不会发生 UDP 碎片。

ifconfig/sar 级别,我没有看到明显的UDP 丢失。

但从应用程序级别来看,我看到大约 30% 的损失。我对iperf3/ntttcp-for-Linux/netperf也看到了同样的情况。

损失发生在哪里?这是由 UDP 到达 IP 堆栈乱序引起的吗?我如何确认这个假设?

谢谢!

【问题讨论】:

    标签: linux network-programming udp


    【解决方案1】:

    原来是接收缓冲区太小了。

    在接收方,netstatnetstat -s 中报告高“UDP: packet receive errors”。

    通过扩大接收缓冲区解决问题:

    # sysctl -w net.core.rmem_max=33554432
    # sysctl -w net.core.rmem_default=33554432
    

    【讨论】:

    • 记得在应用上述 sysctl 更改后重新启动应用程序。
    猜你喜欢
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多