IGMP 组播分析
作者:王斌
IGMP 是Internet Group Management Protocol(互联网组管理协议)的简称。它是TCP/IP 协议族中负责IP 组播成员管理的协议,用来在IP 主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
到目前为止,IGMP 有三个版本:
1、IGMPv1(由RFC 1112 定义)
2、IGMPv2(由RFC 2236 定义)
3、IGMPv3(由RFC 3376定义)
一、IGMPv1
1.1报文格式
1、版本:
版本字段包含IGMP版本标识,因此设置为1。
2、类型:
成员关系查询 (0x11)
成员关系报告 (0x12)
3、校验和
4、组地址:
当一个成员关系报告正被发送时,组地址字段包含组播地址。
当用于成员关系查询时,本字段为0,并被主机忽略。
1.2组成员加入过程
当一个主机希望接收一个组播组的数据,则发送成员加入报告给组播组。
IGMPv1 join包如下:
1.3查询与响应过程
路由器RTA(IGMP查询器)周期性地(默认60秒)向子网内所有主机(224.0.0.1代表子网内所有主机)发送成员关系查询信息。
所有主机收到IGMPv1成员关系查询信息,一主机首先向组播组发送IGMPv1成员关系报告。
组的其他成员监听到报告后抑制自己的成员关系报告发送。
1.4 抑制机制
当主机收到IGMP成员关系查询时,对它已经加入的每个组播组启动一个倒计数报告计时器。各个报告计时器初始值为从0到最大响应之间一个随机数,默认值是10秒。
计时器到时的主机则主动发送成员关系报告,目的地为该主机所属的组地址。
其它主机收到该成员关系报告,则抑制成员关系报告的发送,并删除计时器。
1.5 组成员离开过程
主机“默不作声”地离开组(不发送报告了)。
路由器发送成员关系查询信息。
路由器没有收到该组的IGMP报告,则再发送成员关系信息(3次查询周期过后)。
组播组超时,剪枝。
1.6工作机制流程图
二、IGMPv2
2.1报文格式
1、类型
成员关系查询(0x11)
常规查询:用于确定哪些组播组是有活跃的,即该组是否还有成员在使用,常规查询地址由全零表示;
特定组查询:用于查询某具体组播组是否还有组成员。
版本2成员关系报告(0x16)
版本1成员关系报告(0x12)
离开组消息(0x17)
2、最大响应时间
以0.1秒为单位,默认值是100,即10秒。
3、校验和
4、组地址
在成员查询消息中,发送一个普遍查询报文时组地址域应设为0,当发送一个对特定组的查询报文时,则应设置组的地址。
在成员报告或离开组的消息中,组的地址域保留了要报告或要离开的地址。
2.2 组成员加入过程
当一个主机加入了一个组播组,则应该立即发送一个或多个版本2的成员关系报告给组播组。
IGMPv2的join包如下:
2.3 查询与响应过程
与IGMPv1相同,都存在抑制机制。
增加了最大响应时间来指定延时值来规定所有主机的查询响应延时的上限,此外最大响应时间在IGMP查询器上配置,只应用在成员关系查询信息。
2.4 查询器选择过程
路由器启动,主动发出到所有组播系统组(224.0.0.1)的IGMPv2常规查询信息。
收到常规查询信息的路由器,会把此信息的源IP地址和接收口的IP地址作比较,拥有最低IP地址的路由器被选举为IGMP查询路由器。
非查询路由器启动一个查询计时器,周期检查IGMP查询路由器的状态。
查询报文
2.5 查询选举机制流程图
2.6 组成员离开过程
主机向224.0.0.2发送离开组消息(报文中含有要离开的组地址224.1.1.1)。
路由器向这个组(224.1.1.1)发送特定组查询。
1秒钟内没有收到该组的报告,发送第二个特定组查询。
二个查询信息后未收到主机响应,组224.1.1.1超时,离开组。
IGMPv2的Leave如下:
2.7 离开机制流程图
三、IGMPv3
在IGMPv1/v2的基础上,IGMPV3提供了额外的源过滤多播功能。在IGMPv1/v2中,主机只根据组地址来决定加入某个组并从任何一个源接收发给该组地址的组播流。而使用IGMPv3的主机通告该主机所希望加入的 多播组,同时还通告该主机所希望接收的多播源的地址。主机可以通过一个包括列表或一个排除列表来指明希望从哪些源能接收多播流。同时IGMPv3带来的另外一个好处是节省带宽,避免不需要的、非法的组播数据流占用网络带宽,这尤其在多个多播源共用一个多播地址的网络环境中表现明显。
IGMPv3的过程同v2类似。IGMPv3能够向下兼容IGMPv1和IGMPv2。
IGMPv3查询和报告报文增强了功能:
3.1 携带源地址的查询报文
IGMPv3 不仅支持IGMPv1 的普遍组查询和IGMPv2 的特定组查询,而且还增加了对特定源组查询的支持:
普遍组查询报文中,既不携带组地址,也不携带源地址;
特定组查询报文中,携带组地址,但不携带源地址;
特定源组查询报文中,既携带组地址,还携带一个或多个源地址。
3.2包含多组记录的报告报文
IGMPv3 报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。组记录可以分为多种类型,如下:
IS_IN:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源列表发往该组播组的组播数据。(当前状态报告)
IS_EX:表示组播组与组播源列表之间的过滤模式为EXCLUDE,即只接收从指定组播源列表之外的组播源发往该组播组的组播数据。(当前状态报告)
TO_IN:表示组播组与组播源列表之间的过滤模式由EXCLUDE 转变为INCLUDE;如果指定源地址列表为空,主机将离开组播组。(过滤模式改变报告)
TO_EX:表示组播组与组播源列表之间的过滤模式由INCLUDE 转变为EXCLUDE。(过滤模式改变报告)
ALLOW:表示在现有状态的基础上,还希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则向现有组播源列表中添加这些组播源;如果当前的对应关系为EXCLUDE,则从现有组播源列表中删除这些组播源。(源列表改变报告)
BLOCK:表示在现有状态的基础上,不再希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则从现有组播源列表中删除这些组播源;如果当前的对应关系为EXCLUDE,则向现有组播源列表中添加这些组播源。(源列表改变报告)
IGMPv3的join包如下:
IGMPv3的leave包如下 TO_IN(0):
IGMPv3的query包如下:
IGMPv3 报告报文(ALLOW)
IGMPv3 特定源组查询报文
3.3 igmpv3工作机制流程图
3.4 IGMP三个版本的比较
四、组播IP地址
- 组播地址范围
224.0.0.0-239.255.255.255
- 保留组播地址
224.0.0.0-224.0.0.255
224.0.1.0-224.0.1.255
- 本地管理组地址
239.0.0.0-239.255.255.255
- 用户组播地址
224.0.2.0-238.255.255.255
- 组播MAC地址:
以太网: 01-00-5e-xx-xx-xx
- 常用的保留组播地址
永久组地址 | 含义 |
224.0.0.1 | 所有系统,包括主机与路由器 |
224.0.0.2 | 所有组播路由器 |
224.0.0.3 | 未分配 |
224.0.0.4 | DVMRP(Distance Vector Multicast Routing Protocol ,距离矢量组播路由协议)路由器 |
224.0.0.5 | OSPF(Open Shortest Path First ,开放最短路径优先)路由器 |
224.0.0.6 | OSPF 指定路由器/备用指定路由器 |
224.0.0.7 | ST(Shared Tree ,共享树)路由器 |
224.0.0.8 | ST 主机 |
224.0.0.9 | RIP-2(Routing Information Protocol version 2 ,路由信息协议版本2)路由器 |
224.0.0.11 | 移动代理 |
224.0.0.12 | DHCP(Dynamic Host Configuration Protocol ,动态主机配置协议)服务器/中继代理 |
224.0.0.13 | 所有PIM(Protocol Independent Multicast , 协议无关组播)路由器 |
224.0.0.14 | RSVP(Resource Reservation Protocol ,资源预留协议)封装 |
224.0.0.15 | 所有CBT(Core-Based Tree ,有核树)路由器 |
224.0.0.16 | 指定SBM(Subnetwork Bandwidth Management ,子网带宽管理) |
224.0.0.17 | 所有SBM |
224.0.0.18 | VRRP(Virtual Router Redundancy Protocol ,虚拟路由器冗余协议) |
224.0.0.22 | IGMPv3报告报文目的IP地址 |
224.0.0.251 | 所有DNS服务器 |
五、IGMP SSM Mapping
六、IGMP Proxying
上述5和6参考文档《IGMP技术介绍.pdf》
七、IGMP SNOOPING
7.1 原理描述
IGMP Snooping运行在链路层,是运行在二层以太网交换机上的组播约束机制,用于管理和控制组播数据转发。
当二层以太网交换机收到主机和路由器之间传递的IGMP报文时,IGMP Snooping分析IGMP报文所带的信息。当监听到主机发出的IGMP主机报告报文时,交换机就将该主机加入到相应的组播MAC地址表中。当监听到主机发出的IGMP离开报文时,交换机就将删除与该主机对应的组播MAC地址表中。
通过不断地监听IGMP报文,交换机就可以在二层建立和维护组播MAC地址表 ,交换机就可以根据组播MAC地址表转发从路由器下发的组播报文。没有运行IGMP Snooping时,组播报文将在二层广播。
7.2 IGMP Snooping基本概念
路由器端口(Router Port):交换机上靠近三层组播设备(即DR 或IGMP 查询器)一侧的端口,如Switch A 和Switch B 各自的Ethernet1/0/1 端口。交换机将本设备上的所有路由器端口都记录在路由器端口列表中。
成员端口(Member Port):表示交换机上靠近组播组成员一侧的端口,如Switch A 的Ethernet1/0/2 和Ethernet1/0/3 端口,以及Switch B 的Ethernet1/0/2 端口。交换机将本设备上的所有成员端口都记录在IGMP Snooping 转发表中。
7.3 Igmp snoop主要模块
7.3.1查询模块:
- IGMP 查询器定期向本地网段内的所有主机与路由器发送IGMP 通用查询报文,以查询该网段有哪些组播组的成员。
- 在收到IGMP 通用查询报文时,交换机将其通过VLAN 内除接收端口以外的其它所有端口转发出去,并对该报文的接收端口做如下处理:
- 该端口是路由器端口列表中已有的路由器端口,则重置该路由器端口的老化定时器。
- 该端口不是路由器端口列表中已有的路由器端口,则将其加入路由器端口列表,并启动该路由器端口的老化定时器。
7.3.2加入(jion)模块
- 以下情况,主机会向组播路由器发送IGMP 成员关系报告报文:
- 当组播组的成员主机收到IGMP查询报文后,会回复IGMP成员关系报告报文。
- 如果主机要加入某个组播组,它会主动向组播路由器发送IGMP 成员关系报告报文以声明加入该组播组。
- 在收到IGMP 成员关系报告报文时,交换机将其通过VLAN 内的所有路由器端口转发出去,从该报文中解析出主机要加入的组播组地址,并对该报文的接收端口做如下处理:
- 如果该端口已存在于组播组转发表中,则重置该端口的成员端口老化定时器;
- 如果该端口不在组播组转发表中,则在组播组转发表中为该端口增加转发表项,并启动该端口的成员端口老化定时器。
- 说明:
- 交换机不会将IGMP 成员关系报告报文通过非路由器端口转发出去,原因如下:根据IGMP 成员关系报告抑制机制,如果非路由器端口下还有该组播组的成员主机,则这些主机在收到该报告报文后便抑制了自身的报告,从而使交换机无法获知这些端口下还有该组播组的成员主机。
7.3.3离开报文模块
- 运行IGMPv1 的主机离开组播组时不会发送IGMP 离开组报文,因此交换机无法立即获知主机离开的信息。但是,由于主机离开组播组后不会再发送IGMP 成员关系报告报文,因此当其对应的成员端口的老化定时器超时后,交换机就会将该端口对应的转发表项从转发表中删除。
- 运行IGMPv2 或IGMPv3 的主机离开组播组时,会通过发送IGMP 离开组报文,以通知组播路由器自己离开了某个组播组。
- 当从最后一个成员端口上收到IGMP 离开组报文时,交换机会将该报文通过VLAN内的所有路由器端口转发出去,同时由于并不知道该报文的接收端口下是否还有该组播组的其它成员,所以交换机不会立刻把该端口对应的转发表项从转发表中删除,而是重置该成员端口的老化定时器。
- 当IGMP 查询器收到IGMP 离开组报文后,从中解析出主机要离开的组播组的地址,并通过接收端口向该组播组发送IGMP 特定组查询报文。交换机在收到IGMP 特定组查询报文后,将其通过VLAN 内的所有路由器端口和该组播组的所有成员端口转发出去。
- 对于IGMP 离开组报文的接收端口,交换机在该成员端口的老化时间内:
- 如果从该端口收到了主机发送的响应该组播组的IGMP 成员关系报告报文,则表示该端口下还有该组播组的成员,于是重置该成员端口的老化定时器;
- 如果没有从该端口收到主机发送的响应该组播组的IGMP 成员关系报告报文,则表示该端口下已没有该组播组的成员,则在该成员端口老化时间超时后,将转发表中该端口对应该组播组的转发表项删除。
- 注意:
- 交换机在启动了IGMP Snooping 功能后,当收到某个组播组内的主机发出的IGMP离开报文时,会自动判断该组播组是否存在。如果该组播组不存在,则丢弃这个IGMP离开报文,不再转发。
7.3.4定时器超时模块
定时器 | 说明 | 超时前应收到的报文 | 超时后交换机的动作 |
路由器端口老化定时器 | 交换机为其上的每个路由器端口都启动一个定时器, 其超时时间为 路由器端口老化时间 | 源地址不为0.0.0.0的IGMP通用查询报文或PIM Hello报文 | 将该端口从路由器端 口列表中删除 |
成员端口老化定时 器 | 当一个端口加入某组播组时, 交换机为该端口启动一个定时器, 其超时时间为成员端口老化时间 | IGMP成员关系报告报文 | 将该端口从组播组的 转发表中删除 |
7.4 工作机制流程图
八、IGMP SNOOPING PROXYING
8.1 IGMP Snooping proxying基本概念
通过在边缘设备上配置 IGMP Snooping Proxying(IGMP Snooping代理)功能,可以减少其上游设备收到的 IGMP 报告报文和离开报文的数量,有效提高其上游设备的整体性能。配置了 IGMP Snooping Proxying功能的设备(称为 IGMP Snooping代理设备),在其上游设备看来,相当于一台主机;而在其下游主机看来,则相当于一台查询器。
如 图 3所示,作为IGMP Snooping代理设备的Switch A,对其上游设备Router A来说是一台主机,代理下游主机向Router A发送报告报文和离开报文;而对其下游的主机来说则是一台查询器,代理Router A向下游主机发送普遍组查询报文和特定组查询报文,维护组成员关系。
本文暂时没有评论,来添加一个吧(●'◡'●)