IGMP
IGMPv2
- receiver 发送 unsolicited member report ,也称为 IGMP join,给本地组播服务器
- unsolicited : 主动提供的,未被请求的
- 本地组播服务器会通过PIM协议,向源发送 PIM join。
- 本地组播服务器,会周期性发出 general membership query message 到 224.0.0.1,所有的host都会收到,来确认是否还有 receiver 存活。如果10s(默认max response Timer 时长) 没有收到响应
- Receiver 会设置1个 0 到10s 的internal random timer。 如果1个Receiver 收到来自group 内其他 Receiver 的Report,就会重置他自己的Timer,并且不会发送报告 —— 减少回复消息的发送
- Receiver 想要离开 group 时,如果他是唯一1个,就会发送 leave group message 给到224.0.0.2 . 如果不是唯一1个,就直接离开
- 如果Router 收到Leave group message,会发出1个 specific membership query,来确认subnet内是否其他Receiver。如果没有响应,就会移除该group的IGMP状态。
- 如果Subnet 内有多个Router,IGMP 会执行选举,来决定哪个Router 成为 Querier —— Router会比较来自对方的QUery,并和对方IP比较,IP小的成为QUerier。 非QUerier 会启动1个定时器,收到查询时会重置,收不到时就重新选举
IGMP Packet
- TTL 固定为1,意味着只有本地router 处理,而不会转发给其他router —— 和 eBGP 建立邻居关系一致
- 8bit 的Type
- membership report
- membership query
- 32bit 的group address
- 在query 中,全部为0
- 其他为目标 group address
IGMPv3
- 可以和IGMPv1 以及 IGMPv2 共存
- 向后兼容 IGMPv2
- 新增消息Type,称为 Version3 membership report ,其中的字段 source add 来支持source filter —— 用来告知Router 我需要收到哪个Source的数据
- 2种模式
- Include:需要从 source add 接收
- Exclude:不需要从 source add
IGMP Snooping
- 为了优化转发,减少flooding,交换机需要1种机制,来将数据发给只发给感兴趣的接收方
- 组播地址,交换机如何处理
- 原始方式,flood —— 浪费资源
- 解决方式1:IGMP Snooping
- 交换机在收到 IGMP Join 时,就开始构建 MAC地址表 (组播地址和接口的对应关系)
- 解决方式2:Static MAC address entries ,将组播MAC 绑定到指定接口
- 224.0.0.1 —— 是发给全部 host,无法避免