IGMP协议详解

1. IGMP协议

1.1. 组播基础内容

I P组播提供两类服务:

  1. 向多个目的地址传送数据。有许多向多个接收者传送信息的应用:例如交互式会议系统和向多个接收者分发邮件或新闻。如果不采用多播,目前这些应用大多采用TCP来完成 (向每个目的地址传送一个单独的数据复制)。然而,即使使用多播,某些应用可能继续采用TCP来保证它的可靠性。
  2. 客户对服务器的请求。例如,无盘工作站需要确定启动引导服务器。目前,这项服务是通过广播来提供的,但是使用多播可降低不提供这项服务主机的负担。

1.1.1. 组播IP地址

传统网络进行地址分配时,将IPv4网络分为5类:
A类:1.0.0.0-126.0.0.0
B类:128.0.0.0-191.254.0.0
C类:192.0.0.0-223.255.255.0
D类(组播IP):224.0.0.0-239.255.255.255
在这里插入图片描述
注:2进制的前4个bit固定为1110,224(十进制)=1110 0000(2进制);239(十进制)=1110 1111(2进制)
E类:240.0.0.0-239.255.255.255,保留地址
其中,D类地址称为组播IP。虽然目前CIDR无类域间路由和VLSM可变长子网掩码的出现淡化了IP分类,但组播IP范围并未发生变化。
组播IP又可进行如下划分:
224.0.0.0-224.0.0.255:预留永久组播地址,通常为协议所使用。
224.0.1.0-231.255.255.255和233.0.0.0-238.255.255.255:ASM(Any Source Multicast)模型使用
232.0.0.0-232.255.255.255:SSM(Source-Specific Multicast)模型使用
239.0.0.0-239.255.255.255:本地管理组地址,也即私网组播IP。

1.1.2. 组播MAC

组播MAC地址用于在以太网上标识组播帧。组播MAC地址的格式为:01-00-5E-xx-xx-xx,其中:

  • 前24位固定为01-00-5E
  • 后23位由组播IP地址的低23位映射得到,最高位固定为0。

1.1.3. 组播IP地址转换为组播MAC地址

将组播IP地址转换为组播MAC地址的步骤如下:

  1. 获取组播IP地址的低23位:首先,将组播IP地址转换为二进制格式,并取出其低23位。
  2. 映射到MAC地址:将固定的24位前缀01-00-5E与获取的低23位组合,最高位固定为0,生成48位的MAC地址。
    转换示例
    假设我们有一个组播IP地址239.192.0.1,转换过程如下:
  3. 将IP地址转换为二进制:
  • 239.192.0.1 转换为二进制是 11101111 11000000 00000000 00000001
  1. 取低23位:
  • 二进制低23位是 1 11000000 00000000 00000001(去掉最高的9位)
  1. 生成组播MAC地址:
  • 固定前缀 01-00-5E
  • 低23位:1 11000000 00000000 00000001
  • 组合后:01-00-5E-40-00-01
    所以,239.192.0.1 对应的组播MAC地址是 01-00-5E-40-00-01

1.1.4. 组播IP地址和组播MAC地址的应用

  • 局域网组播:在局域网中,交换机通过IGMP Snooping识别组播组成员,使用组播MAC地址将数据帧发送到组播组成员所在的端口。
  • 广域网组播:路由器使用PIM等组播路由协议管理跨网段的组播流量,保证组播数据高效传输到组播组的所有成员。
    通过以上规则和转换方法,网络设备可以正确处理组播数据包,实现高效的数据传输和组播组成员管理。

1.2. IGMP协议详解

IGMP(Internet Group Management Protocol)是用于在IP网络中管理组播组成员关系的网络层协议。IGMP协议允许主机和邻近的路由器建立和维护组播组的成员关系。IGMP协议目前有三个版本:IGMPv1、IGMPv2和IGMPv3。

1.2.1. IGMPv1

1.2.1.1. IGMPv1报文结构

IGMPv1报文主要有两种类型:Membership Query和Membership Report。
Membership Query(成员关系查询)报文结构:
在这里插入图片描述

  • Type: 8位,报文类型。对于Membership Query消息,值为0x11。
  • Unused: 8位,未使用,必须设置为0。
  • Checksum: 16位,报文校验和。
  • Group Address: 32位,组播地址。在IGMPv1中通常设置为0.0.0.0(表示泛查询)。
    Membership Report(成员关系报告)报文结构:

在这里插入图片描述

  • Type: 8位,报文类型。对于Membership Report消息,值为0x12。
  • Max Resp Time: 8位,未使用,必须设置为0。
  • Checksum: 16位,报文校验和。
  • Group Address: 32位,目标组播地址。

1.2.1.2. IGMPv1报文的功能实现

  1. 加入组播组:
    • 主机希望加入一个组播组时,发送Membership Report报文到目标组播地址。
    • 路由器接收到Report报文后,知道有主机希望接收该组播组的数据,将该主机加入组播转发表。
  2. 查询组播组成员:
    • 路由器周期性地发送Membership Query报文到224.0.0.1(所有系统组播地址),以确认网络中是否还有主机希望接收组播数据。
    • 主机接收到Query报文后,如果希望继续接收组播数据,会回应Membership Report报文。
  3. 离开组播组:
    • IGMPv1没有显式的离开机制,主机离开组播组时不会发送任何报文。
    • 路由器通过周期性查询和等待Report报文来判断主机是否已经离开组播组。

1.2.2. IGMPv2(Internet Group Management Protocol version 2)

IGMPv2在IGMPv1的基础上进行了改进,主要增加了显式的离开组播组机制和特定组查询机制。

1.2.2.1. IGMPv2报文结构

IGMPv2报文类型包括Membership Query、Membership Report和Leave Group。

  1. Membership Query报文结构:
    在这里插入图片描述
  • Type: 8位,报文类型。对于Membership Query消息,值为0x11。
  • Max Resp Time: 8位,最大响应时间,表示主机应在多长时间内回应。
  • Checksum: 16位,报文校验和。
  • Group Address: 32位,组播地址。可以是特定组查询或泛查询。
  1. Membership Report报文结构:
    在这里插入图片描述
  • Type: 8位,报文类型。对于Membership Report消息,值为0x16。
  • Max Resp Time: 8位,未使用,必须设置为0。
  • Checksum: 16位,报文校验和。
  • Group Address: 32位,目标组播地址。
  1. Leave Group报文结构:
    在这里插入图片描述
  • Type: 8位,报文类型。对于Leave Group消息,值为0x17。
  • Unused: 8位,未使用,必须设置为0。
  • Checksum: 16位,报文校验和。
  • Group Address: 32位,目标组播地址。

1.2.2.2. IGMPv2报文的功能实现

  1. 加入组播组:
    • 主机希望加入一个组播组时,发送Membership Report报文到目标组播地址。
    • 路由器接收到Report报文后,将该主机加入组播转发表。
  2. 查询组播组成员:
    • 路由器周期性地发送Membership Query报文到224.0.0.1(所有系统组播地址),以及特定组查询(Group-Specific Query)消息,询问特定组的成员。
    • 主机接收到Query报文后,如果希望继续接收组播数据,会回应Membership Report报文。
  3. 离开组播组:
    • 主机希望离开一个组播组时,发送Leave Group报文到路由器。
    • 路由器接收到Leave Group报文后,发送Group-Specific Query消息,确认是否还有其他主机希望接收该组播数据。

1.2.3. IGMPv3

IGMPv3进一步改进了组播管理功能,支持源特定组播(Source-Specific Multicast, SSM),允许主机指定希望接收的源地址,从而实现更细粒度的组播控制。
1.2.3.1. IGMPv3报文结构
IGMPv3报文类型包括Membership Query、Membership Report和Leave Group。

  1. Membership Query报文结构:
    在这里插入图片描述
  • Type: 8位,报文类型。对于Membership Query消息,值为0x11。
  • Max Resp Code: 8位,最大响应码。
  • Checksum: 16位,报文校验和。
  • Group Address: 32位,组播地址。可以是特定组查询或泛查询。
  • Resv: 4位,保留字段,必须设置为0。
  • S: 1位,Suppress Router-Side Processing标志。
  • QRV: 3位,Querier’s Robustness Variable。
  • QQIC: 8位,Querier’s Query Interval Code。
  • Number of Sources (N): 16位,源地址数量。
  • Source Address [1…N]: 可变长度,源地址列表。
  1. Membership Report报文结构:
    在这里插入图片描述
  • Type: 8位,报文类型。对于Membership Report消息,值为0x22。
  • Reserved: 8位,保留字段,必须设置为0。
  • Checksum: 16位,报文校验和。
  • Reserved: 16位,保留字段,必须设置为0。
  • Number of Group Records (M): 16位,组记录数量。
  • Group Record [1…M]: 可变长度,组记录列表。
  1. Group Record结构:
    在这里插入图片描述
  • Record Type: 8位,记录类型(如IS_IN, INCLUDE, EXCLUDE等)。
  • Aux Data Len: 8位,辅助数据长度。
  • Number of Sources (N): 16位,源地址数量。
  • Multicast Address: 32位,组播地址。
  • Source Address [1…N]: 可变长度,源地址列表。
  • Auxiliary Data: 可变长度,辅助数据。

1.2.3.2. IGMPv3报文的功能实现

  1. 加入组播组:
    • 主机可以发送带有源过滤信息的Membership Report报文,指定希望接收的源地址和组播地址。
    • 路由器接收到Report报文后,将该主机加入组播转发表。
  2. 查询组播组成员:
    • 路由器周期性地发送带有源过滤信息的Membership Query报文。
    • 主机接收到Query报文后,如果希望继续接收组播数据,会回应带有源过滤信息的Membership Report报文。
  3. 离开组播组:
    • 主机希望离开一个组播组时,发送Leave Group报文到路由器。
    • 路由器接收到Leave Group报文后,发送Group-Specific Query消息,确认是否还有其他主机希望接收该组播数据。

1.2.4. 总结

IGMP协议通过不同版本的演进,不断增强了组播组成员管理的功能和效率。IGMPv1提供了基本的组播组加入和查询功能,但缺少显式的离开机制;IGMPv2增加了显式离开组播组机制和特定组查询功能;IGMPv3进一步支持源特定组播,实现更细粒度的组播控制。通过这些版本的改进,IGMP协议在网络中实现了高效的组播通信管理。

  • 34
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值