组播、IGMP、IGMP 监听基础知识


一、前言

一直对组播这个概念迷迷糊糊,特别是交换机处理组播的方式,非常想搞懂但是懒癌发作。这几天终于耐心地看了下有关组播的资料,大致了解了一下同一广播域内组播的相关知识。组播占了计算机网络的一大部分,特别是组播路由这一块,知识点、名词非常多,要完全掌握并不是一件容易的事情。下面跟大家分享一下我的学习经验,如有错误请提出,谢谢。

还有,此文全部组播均为 IPv4 环境下的组播,IPv6 的组播跟 IPv4 完全不同,请注意区分。


二、为什么需要组播

简单来说,就是因为在一些诸如视频点播的应用时,单播对主机的压力太大、而广播又对网络链路的压力太大。所以……


三、常见组播 IP 的用途

组播 IP 用途
224.0.0.0239.255.255.255 组播地址范围
224.0.0.0224.0.0.255 不可路由组播地址(有特殊用途)
224.0.0.1 同一网段所有主机
224.0.0.2 同一网段所有组播路由器
224.0.1.0238.255.255.255 公网组播地址
239.0.0.0239.255.255.255 私网组播地址

摘自:维基百科


四、组播 IP 地址和 MAC 地址的关系

  • 组播 IP 地址高 4 位是固定的 1110,低 28 位可以为任意值。
  • 组播 MAC 地址的高 25 位是固定的 000000001 00000000 10011110 0,低 23 位可以为任意值。
  • 可以看出,组播 IP 地址的任意值位比组播 MAC 地址的任意值位多出了 5 个。
  • 所以,每个组播 MAC 地址可对应 32 个组播 IP 地址。


五、IGMP 简介

网路群组管理协议Internet Group Management Protocol 或简写 IGMP) 是用于管理网路协议多播组成员的一种通信协议。IP 主机和相邻的路由器利用 IGMP 来创建多播组的组成员。像 ICMP 用于单播连接一样,IGMP 也是 IP 多播说明的一个完整部分。 IGMP 为互联网协议的一种,属于开放系统互联 (OSI) 模型的第三层协议,IP 主机用它将主机的多点发送成员人数报告给临近的多点发送路由器。

摘自:维基百科

IGMP 目前有三个版本,目前用的最多的是 IGMPv2。

IGMPv1 主要基于查询和响应机制来完成对组播组成员的管理。

IGMPv2 增加了查询器选举机制和离开组机制。

IGMPv3 在兼容和继承 IGMPv1 和 IGMPv2 的基础上,还允许组播接收者指定组播源 IP 地址。


六、IGMPv2 报文分类和详解

6.1 查询报文

该报文由组播路由器发出。可细分为通用查询报文和特定组查询报文。组播路由器定时发出通用查询报文(下图的组播路由器每 125s 发送一次)。通用查询报文的目标 IP 为 224.0.0.1(所有主机),IGMP 报头内的组播 IP 为 0.0.0.0。用来查询该网段有哪些组播组的成员。特定组查询报文的目标 IP 则是要查询的组播组地址。

实际上,路由器只关心某个组有没有成员,并不关心具体有多少个成员。

6.2 报告报文

该报文由主机发出。可对组播路由器发出的查询报文进行回应,同时主机在主动加入特定组的时候,也会主动发送该报文报告。报告报文的目标 IP 和 IGMP 报头内的组播 IP 均为主机加入的组播组地址(注意!这里虽说是回应路由器的,但是数据包的目标 IP 不是路由器)。

6.3 离开报文(仅限 IGMPv2 和 v3)

该报文由主机发出。当主机离开组播组时发送此报文,向组播路由器报告离开了特定的组播组。离开报文的目标 IP 为 224.0.0.2(所有组播路由器), IGMP 报头内的组播 IP 为特定离开组的 IP。


七、交换机处理组播的方式

1、一切没有开启或不支持 IGMP 监听功能的交换机,组播数据包都以广播的形式在广播域内泛洪。
2、开启 IGMP 监听功能的交换机的每个 VLAN 会维护一个组播地址表。当收到组播数据包时,如果表中含有该数据包组播 IP 的条目,则按照表中的组播 IP 向对应的端口进行转发,否则以广播的形式在广播域内泛洪。


八、交换机的组播地址表样式

包类型 组播 IP 所在端口
IGMP 224.0.0.251 Ethernet0/1
IGMP 224.0.0.252 Ethernet0/1, Ethernet0/2, Ethernet0/3

九、交换机组播地址表的学习和维护(IGMP 监听过程)

(假设当前只有一个 VLAN)
1、当组播路由器发出 IGMP 通用查询报文然后收到主机回应的 IGMP 报告报文时,交换机会把收到回应的端口和对应的组播地址学习到组播地址表中(其实只要是 IGMP 报告报文,都会学习,不管有没有事先查询)。如下图所示:

2、当主机发出 IGMP 离开报文时,组播路由器会发送 IGMP 特定组查询报文。如果该端口在一定时间内得不到回应,则删除条目对应的端口;如果得到回应则不删除。当开启端口快速离开功能时,一旦该端口收到离开报文,交换机将立即删除条目对应的端口。
3、和 MAC 地址表一样,自动学习到的条目都有老化时间。若在一定时间内没有收到对应组播地址某个端口上的 IGMP 报告报文,条目上相应的端口会自动删除。当所有端口都被删除时,条目则自动删除。
4、组播地址表的学习和维护全靠 IGMP 监听(不考虑 CGMP)。
5、如果网络中没有组播路由器,也就没有 IGMP 查询报文,组播地址表的建立将会变得十分困难(思科 2960 可以配置定期发送 IGMP 查询报文)。
6、除非把交换机配置成 IGMP 查询器,否则交换机不会发送任何 IGMP 报文,只会静静地监听。


十、思科交换机的简单设置

10.1 全局开启 IGMP 监听

(默认已开启)

switch(config)# ip igmp snooping

执行完上述命令之后所有 VLAN 都会开启 IGMP 监听。

10.2 为某个 VLAN 开启快速离开功能(可选)

switch(config)# vlan <VLAN ID>
switch(config-vlan)# ip igmp snooping fast-leave

下一篇:组播路由、PIM 基础知识

发表评论

电子邮件地址不会被公开。