ip maddr 是 Linux 中查看接口实际组播成员关系的命令,显示内核中 IGMP/MLD 协议维护的 IPv4/IPv6 组播组状态,如 224.0.0.1、ff02::1 等,默认仅展示当前活跃加入项,不反映配置文件或应用层注册。

Linux系统中,ip-maddr(即 ip maddr)是查看和管理接口组播地址成员关系的核心命令,它显示网络接口已加入的IPv4/IPv6组播组,对应内核中IGMP/MLD协议的实际状态,而非仅配置文件或应用层注册。
查看所有接口的组播组加入情况
执行以下命令可列出当前所有网络接口的组播地址成员信息:
ip maddr show
输出包含接口名、链路层地址(如MAC)、IP组播地址(如 224.0.0.1、ff02::1)及作用域。常见默认组播组包括:
-
224.0.0.1(IPv4本地子网所有主机) -
ff02::1(IPv6链路本地所有节点) -
224.0.0.251(mDNS,常由 avahi-daemon 加入) -
ff02::fb(IPv6 mDNS)
按指定接口过滤查看
若只关注某块网卡(如 eth0),可加 dev 参数缩小范围:
ip maddr show dev eth0
该方式能快速确认某接口是否成功加入了预期组播组,对排查服务发现(如 Zeroconf)、集群通信(如 etcd、consul 的 gossip)异常很有帮助。注意:无输出不代表未加入——可能该接口尚未触发任何组播订阅行为。
理解输出中的关键字段
典型输出形如:
inet 224.0.0.1
inet6 ff02::1
inet6 ff02::fb
其中:
-
inet表示 IPv4 组播地址,inet6表示 IPv6 - 地址前缀
224.0.0.x属于本地管理范围(link-local),不被路由器转发 -
ff02::/16是 IPv6 链路本地范围,ff01::/16是接口本地范围 - 没有“超时”或“计时器”字段——
ip maddr显示的是当前内核维护的静态成员快照,不反映 IGMP 查询响应倒计时
与组播配置相关的注意事项
ip maddr 只反映运行时实际加入状态,不能直接修改或添加组播组(需由应用程序调用 setsockopt(..., IP_ADD_MEMBERSHIP) 等完成)。常见误区包括:
- 修改
/etc/network/interfaces或NetworkManager配置不会自动让接口加入组播组 -
sysctl中的net.ipv4.ip_forward或net.ipv4.conf.all.log_martians不影响组播成员关系 - 若期望某服务稳定加入组播组,请确认其进程正在运行,并具备对应网络命名空间和权限(如 CAP_NET_RAW)










