转载声明:文章来源https://blog.csdn.net/XZH520320/article/details/139667495
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
取低23位:
二进制低23位是 1 11000000 00000000 00000001(去掉最高的9位)
生成组播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。
Membership Query报文结构:
Type: 8位,报文类型。对于Membership Query消息,值为0x11。
Max Resp Time: 8位,最大响应时间,表示主机应在多长时间内回应。
Checksum: 16位,报文校验和。
Group Address: 32位,组播地址。可以是特定组查询或泛查询。
Membership Report报文结构:
Type: 8位,报文类型。对于Membership Report消息,值为0x16。
Max Resp Time: 8位,未使用,必须设置为0。
Checksum: 16位,报文校验和。
Group Address: 32位,目标组播地址。
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。
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]: 可变长度,源地址列表。
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]: 可变长度,组记录列表。
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协议在网络中实现了高效的组播通信管理。
帖子还没人回复快来抢沙发