场景描述:一个组播地址可以包含多路组播数据,这些数据通过不同的端口区分。还是举一个简单的实例。
主机A向组播地址:224.1.1.1发送端口为1025的UDP数据
主机B向组播地址:224.1.1.1发送端口为1026的UDP数据
主机C加入组播地址:224.1.1.1,准备接收端口1025的UDP数据,请问各位小伙伴,主机C的网卡能够接收到那一路的UDP数据?
这是一个很有趣的话题。实际上,两路数据主机C都能够接收到。从理论出发:组播程序是一个进程,这个进程运行在后台,当我们调用add_membership的时候,发送组播报告报文,路由接收到这个报文将会添加到转发的队列中,路由器接收到主机A的数据包,在IP层进行转发,还没有到UDP层,所以根本就没有端口的说法,所以当路由器接收到一个数据包,检测到其组播地址,然后将它转发,而不管是否主机C需要。所以说:公有同一个组播地址确实会收到所有当前组播地址的数据,但是当数据发送过来,主机C接收到IP报文,会检测当前的UDP端口是否打开,如果不打开,将该报文丢弃。所以每月有调用dropmembership函数关闭当前的组播组是非常危险的!!等待实验验证不直接退出或有什么后果,数据会一直发送吗?
时间: 2024-11-10 08:31:15