Sockets tcmp转储捕获到UDP多播数据包,但套接字未接收到该数据包

Sockets tcmp转储捕获到UDP多播数据包,但套接字未接收到该数据包,sockets,udp,multicast,tcpdump,Sockets,Udp,Multicast,Tcpdump,我在研究大数据。为此,我开发了一个网络,其中多个节点交换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 sysc

我在研究大数据。为此,我开发了一个网络,其中多个节点交换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
客户端套接字将SO_SNDBUF设置为134217728(128m),服务器套接字将SO_RCVBUF设置为相同的值。


但看起来问题还没有解决。有什么想法吗。。。。TIA实际上似乎解决了这个问题。任何想要详细了解我设置的sysctl值(优点/缺点/权衡)的人都非常欢迎。您必须加入多播组才能可靠地接收多播数据包

在UN*X上,这是通过以下方式完成的

struct ip_mreq mreq;
setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
陷阱在于,如果某些设置不正确(或工作不正常,例如交换机),您将能够在一段时间内接收多播流量,然后突然停止。因此,当你收到数据包时,你“无法”得出“一切正常”的结论


另外:您网络中所有潜在的透明基础设施(例如2级交换机==普通交换机)都需要支持您的操作系统正在使用的IGMP版本

嗯?”被
tcpdump
捕获,但“无法通过
tcpdump
查看”,以及“通过套接字接收”,但“套接字设计未接收”?下定决心吧。谢谢你的建议。我已经编辑了这个问题。你正在使用哪个操作系统?你所说的“某台机器接收数据包”是什么意思?这是一台运行应用程序和应用程序套接字的机器吗?