IGMP报文格式及协议分析 下载本文

内容发布更新时间 : 2024/6/1 2:57:08星期一 下面是文章的全部内容请认真阅读。

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