发布网友 发布时间:2022-04-25 06:31
共1个回答
热心网友 时间:2023-11-03 10:38
IGMPv3 在兼容和继承IGMPv1 和IGMPv2 的基础上,进一步增强了主机的控制能力,并增强了查询和报告报文的功能。
1)主机控制能力的增强
IGMPv3 增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),使主机在加入某组播组G 的同时,能够明确要求接收或拒绝来自某特定组播源S 的组播信息。当主机加入组播组时:
若要求只接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为INCLUDE Sources(S1,S2,……);
若拒绝接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为EXCLUDE Sources(S1,S2,……)。
2)查询和报告报文功能的增强
(1) 携带源地址的查询报文
IGMPv3 不仅支持IGMPv1 的普遍组查询和IGMPv2 的特定组查询,而且还增加了对特定源组查询的支持:
z 普遍组查询报文中,既不携带组地址,也不携带源地址;
z 特定组查询报文中,携带组地址,但不携带源地址;
z 特定源组查询报文中,既携带组地址,还携带一个或多个源地址。
(2) 包含多组记录的报告报文
IGMPv3 报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。组记录可以分为多种类型,如下:
IS_IN:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源列表发往该组播组的组播数据。
IS_EX:表示组播组与组播源列表之间的过滤模式为EXCLUDE,即只接收从指定组播源列表之外的组播源发往该组播组的组播数据。
z TO_IN:表示组播组与组播源列表之间的过滤模式由EXCLUDE 转变为INCLUDE。
TO_EX:表示组播组与组播源列表之间的过滤模式由INCLUDE 转变为EXCLUDE。
ALLOW:表示在现有状态的基础上,还希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则向现有组播源列表中添加这些组播源;如果当前的对应关系为EXCLUDE,则从现有组播源列表中删除这些组播源。
BLOCK:表示在现有状态的基础上,不再希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则从现有组播源列表中删除这些组播源;如果当前的对应关系为EXCLUDE,则向现有组播源列表中添加这些组播源。
实现步骤如下:
1、当主机某个进程加入一个组播组时,主机发送一个IGMP 报告。若一个主机多个进程同时加入同一组,则发送一个IGMP 报告。 2、进程离开一个多播组时,主机不发送IGMP 报告,即便是组中最后一个进程离开多播组。当主机确定已不再有组成员后,在随后收到的IGMP 查询中就不应答报文。 3、多播路由器定时发送IGMP 查询是否还有其他主机包含有属于多播组的进程。多播路由器必须向每个接口发送IGMP 查询。 4、主机通过发送IGMP 报告来响应一个IGMP 查询,对每个至少还包含一个进程的组均要发回IGMP 报告。 使用上述查询和报告报文,多播路由器对每个接口保持一张映射表,表中记录了接口上包含的一个或多个主机多播组。当路由器收到要转发的多播数据报时,只需将该数据报转发到该接口上。