【发布时间】:2017-02-13 04:40:04
【问题描述】:
我正在研究大数据。为此,我开发了一个网络,其中有几个节点交换 UDP 单播和多播数据包。有 33792 字节的 UDP 数据包和 37 字节的 Ack 数据包。 MTU 设置为 1500。一切正常,可以说交换了 300 到 5000 个数据包。然后突然有些机器收到了这个数据包(我可以用tcmpdump -i any -vvv -XX -e -s 64 > dump.txt 2>&1看到它)。但是应用程序套接字没有接收到它(选择不会唤醒)。
我正在使用 TTL 设置为 1 的 IPv4 套接字,即本地网络。
在尝试解决了几个晚上之后,我最终设置:
sudo sysctl -w net.core.wmem_max=134217728
sudo sysctl -w net.core.rmem_max=134217728
sudo sysctl -w net.ipv4.udp_mem=1638400 1638400 1638400
sudo sysctl -w net.core.somaxconn=4096
sudo sysctl -w net.core.netdev_max_backlog=262144
sudo sysctl -w net.core.optmem_max=134217728
sudo sysctl -w net.ipv4.udp_rmem_min=65535
sudo sysctl -w net.ipv4.udp_wmem_min=65535
The client sockets set SO_SNDBUF to 134217728 (128 M), and server socket sets SO_RCVBUF to same value.
但看起来问题仍然没有解决。有什么想法吗??? ....TIA
【问题讨论】:
-
嗯? '被
tcpdump捕获',但'用tcpdump看不到','被套接字接收',但'套接字没有接收'?下定决心。 -
感谢您的建议。我已经编辑了问题。
-
您使用的是哪个操作系统? “某台机器收到数据包”是什么意思?这是与使用应用程序套接字运行应用程序的机器不同的机器吗?
标签: sockets udp multicast tcpdump