1、多播:用于向多个目的地址传送数据。
多播地址:地址由固定的4位1110 + 28位多播组ID构成,范围从224.0.0.0到239.255.255.255。
2、主机组:能够接收发往一个特定多播组地址数据的主机集合。一些多播组地址被IANA 确定为知名地址,他们也被当作永久主机组。例如:224.0.0.1代表“该子网内的所有系统组”,224.0.0.2代表“该子网内的所有路由器组”。多播地址224.0.1.1用作网络时间协议NTP。
3、多播组地址到以太网地址的转换
IANA(互联网数字分配机构)拥有一个以太网地址块,即高位24bit为00:00:5e,这意味着该地址块所拥有的地址范围从00:00:5e:00:00:00到00:00:5e:ff:ff:ff。IANA将其中的一半分配为多播地址。为了指明一个多播地址,任何一个以太网地址的首字节必须是01,这意味着与IP多播相对应的以太网地址范围从01:00:5e:00:00:00到01:00:5e:7f:ff:ff。
将多播地址的低23位映射到以太网地址的低23位,高25位为固定的24位的01:00:5e 加1位0。这样就从多播组ip地址得到了对应的多播组mac地址。
由于多播组地址的高5位(即1110的后5位)在映射过程中被忽略,因此每个以太网多播地址对应的多播组不是唯一的,由于地址映射不是唯一的,所有需要设备驱动程序或IP 层对数据报进行过滤。
4、IGMP:internet组管理协议
用于让一个物理网络上的所有系统知道主机当前所在的多播组。多播路由器使用IGMP 报文来记录与该路由器相连网络中组成员的变化情况,首先,主机发送加入组播组报文到组播组,为了可靠,可以采取定时发送的方式向组播组发送加入报告报文。同时组播组也会定发送查询报文,收到查询报文后回复报告报文。如果主机已经离开了组播组则在收到查询报文后不发送报告报文。IGMP被当做IP层的一部分,IGMP报文通过IP数据报进行传输。其数据格式如下:
20字节的IP首部+8字节的IGMP报文
IGMP有3个版本(V1,V2,V3,)V1的报文格式如下:
➢4位版本:目前IGMP有V1,V2,V3三个版本,比如是V1则该4位为1,V3则该4位为3。
➢4位类型:有成员关系查询0x11 和成员关系报告0x12两种类型。
➢校验和:该8个字节的校验码。
➢32位组地址:当发送报文是成员关系报告时,该32位组地址即组播组地址。
当发送的报文是成员关系查询时,该32位为全0 。V1版本只支持通用关系查询,不支持特定组查询。
V2版本报文格式如下:
➢8位类型:有三种类型。
1、成员关系查询0x11:在V2和V3中成员关系查询增加特定组查询;
常规查询:用于确定哪些组播组是活跃的,即改组是否还有成员在使用,常规查询组地址由全零表示。
特定组查询:用于查询某具体组播组是否还有组成员。
2、成员关系报告0x16
3、离开组消息0x17。
➢8位最大响应时间,设置为0。
➢校验和:报文段8个字节的校验码。
➢组地址:
1、成员关系查询报文:常规查询组低位为全0 ,特定组查询则应设置
对应的组地址
2、成员报告或离开组消息:组地址为要报告或要离开的组地址。
用wireshark抓取成员关系报告报文如下:
✧目的组地址:6个字节,通过多播组地址转换而来
✧源主机mac地址:6个字节
✧type:0x800
✧version:即IP的版本是4
✧header length:IP段的长度32字节(截图上是version和header length 都对应0x48,
个人认为是version对应4,长度32字节是8个32位,所以对应8)。
✧differentiated:8位,默认是0x00
✧total length:16位,总长度40bytes,即IP段加IGMP报文段长度是40字节
✧identification: 16位,id识别码。
✧flgas:8位0x00,
✧fragment offset:8位,0x00
✧ttl:8位,生存时间,0x01
✧protocol:8位,IGMP为0x02
✧header checksum:16位,IP段校验码
✧source:32位,源ip地址,即发送报告报文的主机IP地址
✧destination:32位,组播组ip地址
✧options:12字节,填充字节,全为0
✧type:8位,IGMP报文类型,0x16,成员关系报告
✧max resp time:8位,最大相应时间,设置为0x00
✧header checksum:16位,IGMP报文段校验码
✧multicast address:32位,组播组地址
✧6个填充字节:都为0
✧src port:16位,0x0000
离开组消息报告