组播:(ipv4) IGMP&IGMP Snooping 和 (ipv6) MLD&MLD Snooping

IGMP组播地址:

1110XXXX XXXXXXXX XXXXXXXX XXXXXXXX

组播地址的分类:

保留      ——224.0.0.0 - 224.0.0.255 
用户组播地——224.0.1.0 - 238.255.255.255 
本地管理组——239.0.0.0 - 239.255.255.255 (用于私人组播领域,类似私有IP地址)

D类地址                            用途
 224.0.0.1            在一个子网上的所有主机
 224.0.0.2            在一个子网上的所有路由器
 224.0.0.4            所有DVMRP协议的路由器
 224.0.0.5            所有开放最短路径优先(OSPF)路由器
 224.0.0.6            所有OSPF指定路由器
 224.0.0.9            所有RIPv2路由器
 224.0.0.13           所有PIM协议路由器
 224.0.0.0-224.0.0.255        保留作本地使用,做管理和维护任务
 239.0.0.0-239.255.255.255    留用做管理使用


2层的MAC地址与3层的IP地址映射关系

通过将MAC地址的前25位强行规定位01:00:5e,而后23位对应IP地址的后23位,而组播IP地址的前4位均相同如:IP地址:
 1110yyyy.yxxxxxxx.xxxxxxx.xxxxxxxx  
MAC地址:
 00000001.00000000.01011110.0xxxxxxx.xxxxxxx.xxxxxxxx

D ADD: 224.1.1.1
D MAC: 01:00:5e:01:01:01
group ip :224.1.1.1


IGMP的不同版本
Version 1:在[RFC-1112]中声明,是第一个广泛使用的IGMP版本。
Version 2:在[RFC-2236]中声明,添加了“低离开延迟”和特定组查询功能。IGMPV2中多定义了一种离开报文,当主机离开某组播组时,会向路由器发送离开报文。
Version 3:在[RFC-3376]中声明,添加了“源过滤”机制,允许系统选择想要接收的特定组播源或者排除不想接收的特定组播源。

 
下面说说IGMP的工作原理

IGMP目前有三个版本,分别是IGMPV1、IGMPV2、IGMPV3,功能逐渐增强

IGMPV1中定义了加入报文(Report)、查询报文(Query)、响应报文三种报文。

1、当主机加入某组播组时,会向路由器发送加入报文,告诉路由器自己加入了一个组播组,路由器会记录一条组播表项 。

2、查询路由器(IP最小的路由器)会定时从所有端口向外发送查询报文(按VLAN查询,如果该端口加入了多个VLAN,则发送多次查询报文),检查这些端口下是否有主机属于某组播组

3、主机收到查询报文后,如果自己没有加入任何组播组,则不进行响应;如果自己已经加入了某组播组,则会发现响应报文

4、主机离开组播组时,[不发送任何报文,悄悄离开];路由器中纪录的该组播的表项会因查询超时而自动老化

5、查询报文的目的地址是224.0.0.1(表示所有路由器和支持IGMP的主机),组地址是0(表示查询所有组播组)

6、响应报文的目的地址是主机所在组的地址,组地址也是主机所在组的地址。如果网络上有多个主机加入了同一个组,那么只有一台主机(随机选取)会发送响应报文。由于响应报文的目的地址是主机所在组的地址,所以响应报文会被发送到主机所在组内的所有主机,其他的主机在收到该报文后,发现已经有人向路由器进行报告了,于是他们就不会再额外发送响应报文了。

 

IGMPV2中多定义了一种离开报文,当主机离开某组播组时,会向路由器发送离开报文。路由器收到离开报文后,会发送查询报文,查询是否还有其它的主机属于该组播组,如果没有就删除组播表项,有则不删除。

需要注意的是,此时路由器发送的查询报文的组地址已经不是0了,而是特定的组地址(发送离开报文的主机所在的组)。因为此时路由器只想知道该特定组内是否有主机存在。这一点也是IGMPV2对IGMPV1的改进,名称叫特定组查询,IGMPV1中没有该功能。

注意:

1、不论是IGMPV1还是IGMPV2,所有的加入报文和离开报文都要被上报到查询路由器

2、非查询路由器收到查询报文后,从所有端口转发该报文

3、非查询路由器收到特定组查询报文后,根据组播表进行转发

4、特定组查询报文的目的地址是要查询的组地址

5、离开报文的目的地址是224.0.0.2(表示所有路由器)

IGMP Snooping协议
用在交换机上。开启IGMP Snooping功能的交换机可以对经过它的IMGP报文进行解析,建立组播转发表,这样一来,交换机就可以根据组播转发表转发组播数据.

如果没有开启IGMP Snooping功能,交换机只能广播组播数据。

IGMP Snooping的实际应用意义是:减少了网络上的主机由于接受到不必要的组播报文而产生的处理负荷。IGMP Snooping并不是一个协议,只能算是一个实现细节,一种应用。
IGMP Snooping分两种,一种是passive方式的,另一种是active方式的。passive方式的只解析组播报文,不对报文进行过滤。active方式的会过滤掉一些对路由器没有意义的组播报文。比如交换机下面有两个主机都加入了同一个组,这样交换机上面的路由器中就会有一条表项与之对应。如果一个主机想离开这个组,它就会发送离开报文给路由器(经过交换机转发)。但是此时,即使路由器收到了离开报文,它也并不会删除那条表项,因为还有另一个主机在组播组中。active方式的IGMP Snooping使交换机可以过滤掉此类报文。


组播有一系列的协议:
1、主机----路由器之间:IGMP协议。实现主机加入、离开组播组等功能。
2、路由器之间:PIM-SM、PIM-DM。实现嫁接、剪枝等功能。
3、交换机:IGMP Snooping。实现建立组播转发表,根据组播转发表转发组播数据,过滤掉离开主机的端口。

 

MLD协议:
组播侦听发现协议是ipv6才有的协议,他的原理是当源主机发送一份数据到一个组播地址,所有加入了这个组播地址的成员都可以收到一份数据的拷贝。并且只有组播成员才可以接收到数据。路由器通过MLD协议,可以了解自己的直连网段上是否有IPv6组播组的侦听者,并在数据库里做相应记录。同时,路由器还维护与这些IPv6组播地址相关的定时器信息。

mld是ICMPV6的一个子协议。现在有二种版本,MLDV1和MLDV2。
MLDV1有三类消息类型:查询消息,报告消息和DONE消息。
MLDv2有二类消息类型:查询消息和报告消息。不过它是支持MLDv1的DONE消息的。

交互过程:

第一种交互方式是由路由器发起的。路由器作为询问者向与其相连接的所有主机发送一个General Queries报文。其目的地址是FF02::1。主机收到此消息后,应答一个包含当前组播地址状态记录的报文消息,此报文告诉路由器此主机希望接收哪个组播组或者哪些源发来的数据。

第二种交互方式是由主机发起的。当一个主机离开一个组播组时,它就要向路由器发送组播征听者完成消息,该消息包括一个状态改变记录。路由器收到此消息后,向其相连的链路上发送一个特定组播地址查询消息。询问是否还有主机加人了此特定的组播地址。在MLDv2中,如果指定了源,路由器向所有主机发送一个特定源组播查询消息.询问是否有主机加入此有源组播。

第三种交互方式是由路由器发起的。如果在路由器的组播地址表中某一个组播地址的相关定时器超时后.仍然没有收到主机发来的包含State Change Records的组播征听者报告消息,路由器则向所有主机发送一个特定组播地址查询消息或者特定源组播查询消息,确认该组播组或者此特定源组播是否还有组播征听者。

 

组播地址格式
  IPv6组播地址的格式不同于IPv6单播地址,采用图6-6所示的更为严格的格式。组播地址只能用作目的地址,没有数据报把组播地址用作源地址。
  地址格式中的第1个字节为全“1”,标识其为组播地址。组播地址占了IPv6地址空间的整整1/256。组播地址格式中除第1字节外的其余部分,包括如下三个字段:
  标志字段:由4个单个位标志组成。目前只指定了第4位,该位用来表示该地址是由Internet编号机构指定的熟知的组播地址,还是特定场合使用的临时组播地址。如果该标志位为“ 0”,表示该地址为熟知地址;如果该位为“ 1”,表示该地址为临时地址。其他3个标志位保留将来用。
  范围字段:长4位,用来表示组播的范围。即,组播组是只包括同一本地网、同一站点、同一机构中的节点,还是包括IPv6全球地址空间中任何位置的节点。该4位的可能值为0~15。
    4 bit scope位来限制组播组的传播范围。
         0  reserved
         1  Interface-Local scope
         2  Link-Local scope--链路本地范围
         3  reserved
         4  Admin-Local scope-管理本地范围
         5  Site-Local scope--站点本地范围
         6  (unassigned)
         7  (unassigned)
         8  Organization-Local scope-组织本地范围
         9  (unassigned)
         A  (unassigned)
         B  (unassigned)
         C  (unassigned)
         D  (unassigned)
         E  Global scope--全局范围的
         F  reserved
  组标识符字段:长112位,用于标识组播组。根据组播地址是临时的还是熟知的以及地址的范围,同一个组播标识符可以表示不同的组。永久组播地址用指定的赋予特殊含义的组标识符,组中的成员既依赖于组标识符,又依赖于范围。

  所有IPv6组播地址以FF开始,表示地址的第1个8位为全“1”。目前,因为标志的其余位未定义,所以地址的第3个十六进制数字若为“0”,则表示熟知地址;若为“1”,则表示临时地址。第4个十六进制数字表示范围,可以是未分配的值或保留的值,见图6-7。
      |    8   |  4 |  4 |                     112                              |
      +--------+----+----+------------------------------------------------------+
      |11111111|flgs|scop|                  group ID                            |
      +--------+----+----+------------------------------------------------------+
举例:link-local范围的组播地址,并且是well-known地址;

 所有节点的组播地址:         FF02:0:0:0:0:0:0:1
 所有路由器的组播地址:       FF02:0:0:0:0:0:0:2
 Solicited-Node组播地址:     FF02:0:0:0:0:1:FFXX:XXXX
 所有OSPF路由器组播地址:     FF02:0:0:0:0:0:0:5
 所有OSPF的DR路由器组播地址: FF02:0:0:0:0:0:0:6
 所有RIP路由器组播地址:      FF02:0:0:0:0:0:0:9
 所有PIM路由器组播地址:      FF02:0:0:0:0:0:0:D

注:FF02开头,FF固定格式,flgs位都为0,表示此组播地址不是一个基于单播的组播地址也不是一个内嵌RP的组播地址,而是一个固定的well-know的组播地址。传播范围为类型2 link-local范围。

  2.组播组
  IPv4已具备使用组播的应用,由于这种应用将同样的数据发送到多个节点,例如,电视会议或财经新闻及股票行情的发布,因而需要高带宽。用分配的组播地址和组播范围进行组合,可以表现出多种含义,并用在其他应用上。一些早期注册的组播地址,包括成组的路由器、DHCP服务、音频和视频服务以及网络游戏服务,详情请参阅RFC 2375(IPv6组播地址分配)。
  考虑组播组标识符为“所有DHCP服务器”时可能发生的情况。用组标识符1 : 3来代表这个组。用2表示链路本地范围(本地网络链路),则IPv6组播地址为FF02:0:0:0:0:0:1:3。该地址可解释为:链路本地范围内的所有D H C P服务器,即,所有D H C P服务器在同一网络上。如果将范围改为站点本地,那么该地址的意思变为“同一站点上的所有D H C P服务器”。

  保留的组播组标识符可用于扩展范围字段。
 如果范围字段值为1,表示组标识符所指定的所有特定类型的服务器只包括本地节点上的服务器。
 如果范围字段值为2,除了包括本地节点上的服务器外,再加上连接到同一网络的其他所有服务器。例如,只有当一个网络时间协议(NTP)服务器运行在本地节点上时,用组标识符标识范围值为1的该服务器将具有一个激活的成员;如果范围值增至2,则包括连接到同一网络的运行一个NTP服务器的任何节点;
 如果范围值增至8,它将包括运行在整个机构的所有NTP服务器;
 如果范围值增至E (十进制为1 4 ),它将包括互联网上任何地点的所有NTP服务器。

  另一方面,对于临时组播地址的组标识符,在它们自己的范围以外没有意义。全球范围的临时组播组和链路本地的组,即使它们可能有相同的组标识符,也没有任何关系。

IPV6对应的MAC地址

    3.组播IP地址到MAC地址的映射:
 映射规则:组播MAC地址的前16位固定为0x3333,将组播IPV6地址的后32位直接映射到组播MAC地址的后32位就可以了。
 例:IPV6地址为--FF12::1234:5678/64
     对应的组播MAC地址为--3333:1234:5678
 例:所有节点的组播地址:FF02::0001
     对应的组播MAC地址:3333:0000:0001

posted on 2016-10-19 13:49  kookoooooor  阅读(2401)  评论(0)    收藏  举报