1

一个路由器有 60 个 tun 设备,每个设备都配置了一个有效的 ipv4 地址,以及分别基于这些设备的 60 个原始套接字。并且这些套接字都加入了一个组播组。还有另一个设备不断向这些套接字发送多播数据包。

如果禁用然后重新启用这些接口,则某些接口会收到属于其他接口的多播数据包。

通过禁用接口,我的意思是 close() 套接字;

通过启用接口,我的意思是使用 socket() 和 setsockopt() 创建套接字,例如 SO_BINDTODEVICE、IP_ADD_MEMBERSHIP、IP_MULTICAST_IF、IP_MULTICAST_LOOP。

具体来说,如果我禁用接口1,2,3..,60,然后启用接口1,2,3..60,在启用接口后,有时从接口N的原始套接字收到的第一个数据包实际上属于接口(N-1) .

我tcpdump接口N的数据包,所有数据包都是正确的,但是原始套接字的recv()接收属于其他接口的数据包。

有人对此有任何想法吗?谢谢!

4

0 回答 0