协议报文分析
IGMPv1 协议字段解析
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| Type | Resv | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Group Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Version: IGMP版本,值为1,4bit
- Type: 报文类型,0x1:表示普遍组查询报文;0x2:表示成员报告报文
- Resv: 保留字段 8bit
- Checksum: IGMP报文的校验和。
- GroupAddress: 组播地址;组播普遍查询报文中,该字段为0;在成员报告报文中,该字段为成员加入的组播组地址
IGMPv2协议字段解析
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Max Resp Time | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Group Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type : 报文类型,8bit。0x11: 查询报文。 IGMPv2的查询包括普遍组查询报文和特定组查询报文;0x12 表示IGMPv1成员报告报文;0x16:表示IGMPv2成员报告报文。0x17: 表示成员离开报文
- MaxRespTime:z最大响应时间。成员主机在收到IGMP查询器发送的普遍查询报文后,需要在最大响应时间内作出响应。
- Checksum:校验和
- GroupAddress: 普遍组查询报文中,该字段为0;特定组查询报文中,该字段为要查询的组播组地址;在成员报告报文和离开报文中,该字段为成员要加入货离开的组播组地址
IGMPv3 查询报文
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 0x11 | Max Resp Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Group Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Resv |S| QRV | QQIC | Number of Sources (N) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address [1] | +- -+ | Source Address [2] | +- . -+ . . . . . . +- -+ | Source Address [N] | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type : 报文类型,取值为0x11
- MaxRespCode: 最大响应时间。成员主机在收到IGMP查询器发送的普遍查询报文后,需要在最大响应时间内回应
- Checksum:校验和
- Group Address。在普遍组查询报文中,该字段设为0;在特定组查询报文和特定源组查询报文中,该字段为要查询的组播组地址
- Resv :保留地址
- S: 该bit为1时,所有收到此查询报文的其他路由器不启动定时器刷新过程。
- QRV: 如果该字段非0,则表示查询器的健壮系数(Robustness Variable)。如果该字段为0,则表示查询器的健壮系数大于7。路由器接收到查询报文时,如果发现该字段非0,则将自己的健壮系数调整为该字段的值;如果发现该字段为0,则不做处理。
- QQIC: IGMP查询器的查询间隔,单位为秒。非查询器收到查询报文时,如果发现该字段非0,则将自己的查询间隔参数调整为该字段的值;如果发现该字段为0,则不做处理。
- NubmerOfSources: 报文中包含的组播源的数量。对于普遍组查询报文和特定组查询报文,该字段为0;对于特定源组查询报文,该字段非0。此参数的大小受到所在网络MTU大小的限制。
- SourceAddress: 组播源地址,收到NumeberOfSource限制
组播成员报告报文字段说明:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 0x22 | Reserved | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Reserved | Number of Group Records (M) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . . . Group Record [1] . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . . . Group Record [2] . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | . | . . . | . | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . . . Group Record [M] . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type: 报文类型,4bit,0x22
- ReSv: 保留字段
- Checksum:校验和
- N: 报文中包含的组记录的数量
- GroupRecord:组记录。
组记录字段说明:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Record Type | Aux Data Len | Number of Sources (N) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Multicast Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address [1] | +- -+ | Source Address [2] | +- -+ . . . . . . . . . +- -+ | Source Address [N] | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . . . Auxiliary Data . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- RecordType: 组记录的类型;组记录的类型。共分为三大类。
- 当前状态报告。用于对查询报文进行响应,通告自己目前的状态,共两种:1. MODE_IS_INCLUDE,表示接收源地址列表包含的源发往该组的组播数据。如果指定源地址列表为空,该报文无效;2. MODE_IS_EXCLUDE,表示不接收源地址列表包含的源发往该组的组播数据。
- 过滤模式改变报告。当组和源的关系在INCLUDE和EXCLUDE之间切换时,会通告过滤模式发生变化,共两种:1. CHANGE_TO_INCLUDE_MODE,表示过滤模式由EXCLUDE转换到INCLUDE,接收源地址列表包含的新组播源发往该组播组的数据。如果指定源地址列表为空,主机将离开组播组;2. CHANGE_TO_EXCLUDE_MODE,表示过滤模式由INCLUDE转换到EXCLUDE,拒绝源地址列表包含的新组播源发往该组的组播数据。
- 源列表改变报告。当指定源发生改变时,会通告源列表发生变化,共两种:1. ALLOW_NEW_SOURCES,表示在现有的基础上,需要接收源地址列表包含的组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则向现有源列表中添加这些组播源;如果当前对应关系为EXCLUDE,则从现有阻塞源列表中删除这些组播源;2. BLOCK_OLD_SOURCES,表示在现有的基础上,不再接收源地址列表包含的组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则从现有源列表中删除这些组播源;如果当前对应关系为EXCLUDE,则向现有源列表中添加这些组播源。
- AuxDataLen: 辅助数据长度。在IGMPv3报告报文中,不存在辅助数据字段,该字段为0
- N : 本记录中包含的源地址数量
- MulticastAddress: 组播组地址
- SourcesAddress: 组播源地址
- AuxiliaryData: 辅助数据,预留