一文带你搞懂什么是IGMP(一文什么什么)

小编:小蝶 更新时间:2022-05-01

一、IGMPv1


IGMP是Internet Group Management Ptotocol的简称,被称为互联网组管理协议,是TCP/IP协议族中负责IPV4组播成员管理的协议。


IGMP的作用:


1. IGMP用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。


2. IGMP通过在接收者主机和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中。


一文带你搞懂什么是IGMP(一文什么什么)



IGMP的版本:

IGMP有三个版本,用于IPv4中一个网段内运行与组成员和路由器之间的协议:

IGMPv1

IGMPv2

IGMPv3


用于IPV6中运行与组成员和组成员路由器之间的协议:

MLDv1,等同于IGMPv2

MLDv2,等同于IGMPv3




一文带你搞懂什么是IGMP(一文什么什么)



IGMPv1报文:

--普遍组查询报文

--成员报告报文


一文带你搞懂什么是IGMP(一文什么什么)


普遍组查询报文:


1.路由器周期发送,默认每间隔60s发送一次,通过IP报文封装,SIP为路由器接口IP地址,DIP为224.0.0.1(代表链路上所有路由器和主机)。


2.普遍组查询报文的Group address为0.0.0.0 ,代表针对所有组播组发起组成员查询。


3.当组成员收到普遍组查询报文后,随机延时一个0-10s的时间后,发送成员报告报文,SIP为主机自身接口IP地址,DIP为该主机所属的组播组地址,Group address为主机所属的组播组地址。


4.随机延时时间为0-10s之间的一个值,10s称为最大响应时间,实现针对组成员报告报文的抑制,IGMPv1无法修改该时间值。


为什么要设计最大响应时间?


避免同组播组的成员重复发送成员报告报文,减小路由器负担。


--由于组成员报告报文延时时间不一致,因此谁先超时谁先发送组成员报告报文。


5.路由器收到成员报告报文以后,将自动创建(*,G)表项,并将收到该成员报告报文的接口作为该(*,G)报文的下游接口,未来路由器收到发向该组的组播报文就复制一份,从该下游接口发送出去,接收者就从互联该接口的组成员路由器收到了该组播报文。


6.IGMPv1没有设计离组机制,成员离组不会发送任何通知给组成员路由器,如果该组中最后一个组成员离开或者只有一个组成员由于某种故障脱离该组播组,将导致路由器在130s【两个普遍组查询报文发送时间+最大抑制延时(60s*2+10s)】内无法接收到任何组成员的报文,当超时以后,路由器将删除关于组成员(*,G)表项的下游接口,停止向该网络发送关于该组播组的组播报文。


一文带你搞懂什么是IGMP(一文什么什么)


注:由于在超时之前,组播路由器并没有收到该组播组成员发送的报告报文,无法触发删除关于该组播组的(*,G)表项。因此,当组播路由器收到发往关于该组播组的组播报文时,仍然会将组播报文从该组播组成员关联的下游接口发送出去,造成组播流量浪费,消耗链路带宽。(在130s内还是会继续发送组播流量,造成组播流量的浪费,链路带宽的浪费)。


通常情况下,组播路由器会周期性发送普遍组查询报文,但是在IGMPv1中,组播路由器默认情况下不会发送普遍组查询报文。


没有开启PIM协议:

一文带你搞懂什么是IGMP(一文什么什么)



不会发送组成员报告报文的原因是,在IGMPv1中,默认没有查询者,只有查询者才能发送普遍组查询报文(通过display igmp interface命令可以查看),只有当查询被选举出来以后才会发送普遍组查询报文,而IGMPv1并没有查询器选举机制,所以该组播路由器并不知道自己是查询者。


什么是查询者?

--当一个网段存在多台路由器时,负责向该网段发送普遍组查询报文的路由器。


在IGMPv1中需要PIM协议的DR选举机制来协助查询器的选举,因此启用IGMPv1的接口还需启用PIM协议,通过PIM协议选举出在该网段上的DR,然后由DR充当IGMPv1的查询者。


在接口下使能PIM协议:


一文带你搞懂什么是IGMP(一文什么什么)


接口使能PIM协议后:


一文带你搞懂什么是IGMP(一文什么什么)


PIM DR如何选举?


1.根据PIM协议中hello包中携带的优先级选举DR,优先级越大的成为DR。

2.优先级相同,则比较接口IP地址的大小,IP地址大的成为DR。


普遍组查询报文示例:


一文带你搞懂什么是IGMP(一文什么什么)


当组成员收到该普遍组查询报文后,会随机延时1-10s,以自身接口IP地址为源,自身加入的组播组地址为目的发送成员报告报文。


一文带你搞懂什么是IGMP(一文什么什么)


成员报告报文示例:


一文带你搞懂什么是IGMP(一文什么什么)


在收到了组成员发送的成员报告报文,组播路由器会自动生成关于该下游接口收到组成员报告报文的(*,G)表项。


示例图:


一文带你搞懂什么是IGMP(一文什么什么)


为什么产生的是(*,G)表项?

因为组成员发送的成员报告报文中没有协议组播源信息,那么也就说明,任何一个组播报文发送者都有可能成为组播的发送源,所以用“ * ” 来标识,“ * ” 代表任意。


--IGMPv1的普遍组查询报文缺省60s发送一次,可以在接口下通过igmp timer query命令更改,V1,V2,V3都可以更改。


--通过更改查询器发送普遍组查询报文的时间,可以控制普遍组查询报文及其组成员报告报文的发送频率,以此提高收敛速度,但随之也会增加设备负担。


PIM的hello包中默认协议的优先级为1,且DR是可以被抢占的。


一文带你搞懂什么是IGMP(一文什么什么)


--可以通过pim hello-option dr-priority命令修改优先级。


一文带你搞懂什么是IGMP(一文什么什么)

--非查询器收到成员报告报文也会生成(*,G)表项。


为什么只有查询器才发送普遍组查询报文?

只有查询器发送普遍组查询报文,这样可以减少链路带宽浪费,也减轻了组成员的负担,如果其他组播路由器也发送普遍组查询报文,那么将导致收到普遍组查询报文的主机都要回应成员报告报文,当组播路由器的数量增加,会导致主机负担加重。


如果DR失效,其他组播路由器要多久才能检测到DR故障,并接替DR位置?

--PIM的hello发送周期为30s,holdtime为105s,也就是说,105s后如果没有收到其他组播路由器发送的PIM hello,那么这时该组播路由器将经过DR的选举成为新的DR,并默认以30s为周期发送PIM hello。


--PIM hello也可以在接口下通过pim timer hello命令更改,hold time可以在接口下通过pim hello option holdtime更改。


一文带你搞懂什么是IGMP(一文什么什么)


总结IGMP的特点:

IGMPv1一共有两种报文,普查报文和成员报告报文,没有离组报文。


IGMPv1只有一种机制,响应抑制机制,没有离组机制。


IGMPv1的缺点:


1.IGMPv1没有查询器选举机制,需要PIM的DR来充当IGMPv1的查询器。

2.IGMPv1没有离组机制,对流量的控制性不好。