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,无法避免