Multicast – IGMPv1/2/3

IGMPv1

版本1被定义在RFC 1112中。路由器会每60s发送成员关系查询,想加入的主机会响应查询,返回成员关系report,如下抓包所示:
multicast-igmpv1

如果在一个子网中有两台主机关注同一个组,一个主机向路由器返回了成员关系report,那么另一个主机就会抑制发送,减少局域网中的无用信息。而对于IGMPv1的加入过程来说,他不必等待第一跳路由器发送查询,而是立即申请加入;而对于离开过程,主机是静默离开,不会通告路由器,如果路由器在3倍的查询时间也就是180s内没有收到成员关系报告,才会删除组,停止组播流,这样会导致组播流会被无辜传送3分钟,浪费带宽。
multicast-igmpv1-02
注:在v1中,路由器的成员关系查询是所有组查询。

IGMPv2

1997年11月,版本2被定义在RFC 2236中。版本2与版本1有以下区别:
multicast-igmpv2
1. 成员关系查询分为两个,一个是常规查询,全0目的地地址;另一个是指定组查询。为了保持与版本1兼容,类型同样是0x11
2. 版本1的成员关系report类型是0x12,而版本2的是0x16,如上图所示。
3. 版本2中有了最大响应时间,默认100,10s。如果子网中有大量组存在,那么需要加大最大响应时间来让主机有足够的时间发送响应,当然加大响应时间有副作用,那就是离开延时也会响应加大。在版本1中是静态的180s。
4. 版本2中主机离开时向所有组播路由器224.0.0.2发送离开组信息,路由器收到后会发送指定查询,确认是否还有此组的成员,如果没有,删除。
multicast-igmpv2-02

IGMPv3

2002年10月,版本3被定义在RFC 3376中。主要加入了”source filtering”,可以让主机接受或过滤指定的源,Webex Metting中的host可以屏蔽所有与会者或允许某人说话,这就用到了IGMPv3的功能。这里简单陈述IGMPv3的特性,详细请看RFC。

IGMPv3的成员关系查询:
1. 常规查询中,既不携带组地址,也不携带源地址;
2. 指定组查询中,携带组地址,但不携带源地址;
3. 指定源组查询中,既携带组地址,还携带一个或多个源地址。

IGMPv3的成员关系report:
IPMulticastListen ( socket, interface, multicast-address, filter-mode, source-list )
下面是filter-mode的几种模式:
1. IS_IN:只接收从指定组播源列表发往该组播组的组播数据。
2. IS_EX:只接收从指定组播源列表之外的组播源发往该组播组的组播数据。
3. TO_IN:filter-mode 由EXCLUDE 转变为INCLUDE。
4. TO_EX:filter-mode 由INCLUDE 转变为EXCLUDE。
5. ALLOW:表示在现有状态的基础上,还希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则向现有组播源列表中添加这些组播源;如果当前的对应关系为EXCLUDE,则从现有组播源列表中删除这些组播源。
6. BLOCK:表示在现有状态的基础上,不再希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则从现有组播源列表中删除这些组播源;如果当前的对应关系为EXCLUDE,则向现有组播源列表中添加这些组播源。

为了更清楚认识IGMPv3,特意用wireshark抓了包,但发现了如下问题:

平台:MAC OS X 10.9.1 + VLC 2.1.0
结果:VLC不支持指定源,只支持any source

开始以为是VLC的问题,后来发现可能是MAC本身的问题,因为找到了下面这篇文章:
Source Specific IP address not honored in IGMPv3 requests on OS X (Lion)
multicast-igmpv3-01
下面是VLC的格式:
PCL://SourceAddress@MulticastGroup:PortNumber
PCL is the protocol used (e.g. “udp” or “rtp”)
SourceAddress is the source for the Multicast (e.g. “192.60.23.12”)
MulticastGroup is the group to be joined (e.g. “225.0.12.69”)
PortNumber is the port used (e.g. “3001”)

可以看到在配置时,显示是有指定源信息的:
multicast-vlc-01 但是subscrib后,源消失了。。。这是要闹哪样。。。
multicast-vlc-02

我换了测试平台:

平台:Windows 8.1 RTM + VLC 2.1.2
结果:用同样的方法subscrib指定源,抓包信息中是有源的

如下所示:
multicast-igmpv3-02

本文出自 Frank's Blog

版权声明:


本文链接:Multicast – IGMPv1/2/3
版权声明:本文为原创文章,仅代表个人观点,版权归 Frank Zhao 所有,转载时请注明本文出处及文章链接
你可以留言,或者trackback 从你的网站

留言哦

blonde teen swallows load.xxx videos