Igmp用于主机或路由器加入某个组播组,igmpv3支持only或all but两种类型指定源组播。
两种类型的service接口
The Join operation is equivalent to
IPMulticastListen ( socket, interface, multicast-address,
EXCLUDE, {} )
and the Leave operation is equivalent to:
IPMulticastListen ( socket, interface, multicast-address,
INCLUDE, {} )
两类组播接收状态机
Socket组播接收状态机:
(interface, multicast-address, filter-mode, source-list)
Interface组播接收状态机:
(multicast-address, filter-mode, source-list)
Igmp报文的protocol=2,ttl=1,tos=0xc0,带有router alert option
Type Number (hex) Message Name
----------------- ------------
0x11 Membership Query
0x22 Version 3 Membership Report
0x12 Version 1 Membership Report [RFC-1112]
0x16 Version 2 Membership Report [RFC-2236]
0x17 Version 2 Leave Group [RFC-2236]
Membership Query format
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] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Max Resp Code
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|1| exp | mant |
+-+-+-+-+-+-+-+-+
If Max Resp Code < 128
Max response time= Max Resp Code
Else
Max response time= (mant | 0x10) << (exp + 3)
Query的最大响应时间。单位为0.1秒。值小,可以调节leave latency;值大,可以调节report流量。Group member接收到query报文后,延时随机事件[0, Max response time]发送membership report报文
S
Suppress(阻止)其他组播路由器的处理。但是不影响host
QRV
Query robustness variant。为了保证multicast router可靠接收membership report报文,group member会重复发送QRV-1次
QQIC
If QQIC < 128
QQI(querier’s query interval)= QQIC
Else
QQI(querier’s query interval)= (mant | 0x10) << (exp + 3)
查询时间间隔,单位为秒
三类查询
1、generic query:Group Address
2、Group-specific query:Group Address为查询的组播地址,Number of Sources 为0
3、Group-and-source-specific query:Group Address为查询的组播地址,Number of Sources 不为0
报文的目的ip地址
generic query的目的ip地址为224.0.0.1(all-systems组播地址,所有的主机和路由器,包括组播路由器都要接收这个ip地址的报文),Group-specific query和Group-and-source-specific query的目的ip地址为查询的组播地址。但是igmp系统(路由器或主机)需要接受和处理接口的单播和组播地址)
组播路由器会周期性的发送generic query,在接收到Filter-mode-change/Source-list-change 报文后,组播路由器发现有主机离开某个group或不接受某个指定源组播,会先发送Group-specific query或Group-and-source-specific query报文,确认没有其他的host接收该组播,才会做相应的剪枝
Version 3 Membership Reports
format
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] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Group Record format
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Record Type | Aux Data Len | Number of Sources (N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Multicast Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address [1] |
+- -+
| Source Address [2] |
+- -+
. . .
. . .
. . .
+- -+
| Source Address [N] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Auxiliary Data .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Aux Data Len
Auxiliary Data域的数据长度,单位为32bit,目前没有使用
Record Type
Record Type | 类型 | 说明 |
1 | Current-state record | MODE_IS_INCLUDE,作为membership query的响应,报告接口的当前状态 |
2 | Current-state record | MODE_IS_EXCLUDE,作为membership query的响应,报告接口的当前状态 |
3 | Filter-mode-change record | CHANGE_TO_INCLUDE_MODE,根据server 接口IPMulticastListen触发接口的模式发生改变 |
4 | Filter-mode-change record | CHANGE_TO_EXCLUDE_MODE,根据server 接口IPMulticastListen触发接口的模式发生改变 |
5 | Source-list-change record | ALLOW_NEW_SOURCES,source-list增加了新成员,根据server 接口IPMulticastListen触发接口的模式发生改变 |
6 | Source-list-change record | BLOCK_OLD_SOURCES,source-list删除了旧成员,根据server 接口IPMulticastListen触发接口的模式发生改变 |
报文的源ip地址
接口的ip地址或0.0.0.0
报文的目的ip地址
224.0.0.22,但是igmp系统(路由器)需要接受和处理接口的单播和组播地址)