IGMPv2通过查询器选举机制为所连网段选举唯一的查询器。查询器周期性的发送普遍组查询消息进行成员关系查询;主机发送报告消息来应答查询。当要加入组播组时,主机不必等待查询消息,主动发送报告消息。当要离开组播组时,主机发送离开组消息;收到离开组消息后,查询器发送特定组查询消息来确定是否所有组成员都已离开。
通过上述IGMP机制,在组播路由器里建立起一张表,其中包含路由器的各个端口以及在端口所对应的子网上都有哪些组的成员。当路由器接收到某个组G的数据报文后,只向那些有G的成员的端口上转发数据报文。至于数据报文在路由器之间如何转发则由路由协议决定,IGM
MulticastSocket 发送组播消息,一些手机上可以发送、接收 组播 消息,有些手机不可用1>.能正常发送接收的手机,向组播地址发送了组播消息后,同时会向组播地址发送一个 IGMP v2的协议
2>.能发送,接收不到组播消息的手机设备,可以发现设备没有向组播地址发送IGMP协议
3>.而查看手机设备,在 /proc/net/ 目录下,有igmp文件的设备会发送IGMP协议,能正常完成组播消息收发,而没有igmp文件的,就是不能完成组播消息收发的。igmp是IPv4下的协议文件,igmp6是IPv6的协议。可以看到所有设备都支持IPv6的igmp
4>.在Android系统下,编译Linux kernel时有一config CONFIG_IP_MULTICAST ,如果是定制系统在编译系统的时候配置这个选项 CONFIG_IP_MULTICAST=y ,就能enable组播功能。但是有很多系统厂商在编译的时候都默认把这个config给disable了。
参考:
How can I know if IP Multicast is enabled
Android App用MulticastSocket监听组播,为什么连接到不
Many devices have multicast disabled in the kernel
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)