D类地址是用于组播,也就是以1110开头,剩下28位用于鉴别组播地址(剩下的这28是个无结构的地址), 以01005e开头的MAC地址用于表示MAC的组播地址,剩下的23位用于标识组播,IP组播地址对于MAC地址有一个映射关系,也就是IP组播的后23对应Mac组播的后23位,这样就有可能出现多个IP对应一个MAC的现象,它们之间用Arp来解析。
如果一个局域网使用组播,那么所有的主机必须加入一个all-host组(组播地址为224.0.0.1),但是Host可以决定是否去接受组播。当一个组播交通决定传输之前,router需要知道那个Host想接收组播,IGMPv1, IGMPv2用于发现是否有这个组播组的成员在它直连的子网里,IGMP用一个querying device去请求和报告Host加入和离开组播组,它有两种message, 一个是query messages 用于组播路由器去发现Member, 还有一个是report message,它是由主机发送,报告那个主机想加入组播组,IGMP间断的发送query message到224.0.0.1(用于标识所有主机), 直连网段中的其中一台Host发送report message来报告谁想接收组播,但是如果Host 想加入组播组,它可不必等待query message, Host 可以主动的发送一个report message到224.0.0.2(标识组播组中的所有组播路由器)
IGMPv2 提供了leave meassage,主机主动发送这个离开信息到224.0.0.2,表明这台主机想离开这个组播组,query router发送一个query message ( specific-group)的信息从那个接收离开组的端口,如有其它的主机还想加入这个组播组,则向这个query device发送一个specific-group 的report message, 如果在一定时间内没有主机反应这个group-specific query message, 则表明没有本地成员在这个组里面
在交换机转发组播中,由于IP组播映射到一个Layer 2 multicast address, 所以组播必须发送到所有的交换机端口,当一台主机向组播路由器报告成员信息,组播由路由器发送到交换机,由于组播使用组播地址传送流量,所以它不知道实际的目的mac地址,因而它将它发送到所有的交换机端口,可以使用划分VLAN来解决这个问题,但是使用VLAN不能动态的添加和删除成员,这样,交换机必须处理每一个组播包,加大了处理延时,降低了交换机的性能,这样就出现了一个router to switch的解决方法---CGMP, CGM允许交换机向组播路由器学习有关组成员的信息,在这个环境里,rotuer是一个CGMP服务器,switch是一个Client, 当router 接收一个组播包,它立即创建一个CGMP包,这个包发送到一个well-know地址,所交换机都能收到这个包,然后交换机解释这个包,创建一个forwarding table。
在每个物理段中,一个指明路由器被选择,指明路由器构造一个分布树,连接一个组播组有所有的成员,以保证高效的传输。这个router可copy所有进入的包,然后把它发送到它的分支树,因为组播组是动态的所以分布树也必须是动态的升级,一个分支加入一个分布树就像一个新的成员加入组播组,相反的说,如果这个分支没有接收者,刚这个分支被删除。
有两种分布树可以在组播路由中使用:1.源指定(source specific) 2.共享(shared), 指定源的方式针对于每个组播组的源 处理Spanning tree,例如,如果10个成员在10个分离的子网,创建基于10个组播组的10个不同的路由树被, 源指定使用从源到目的的最短路径最小化了延时,source-based 的分布树使用一个叫相反路径转发的机制(Reverse Path Forwarding RPF), 当一个router接收一个带源的组播包,它在它所有的端口转发这个包,除了接收这个包的端口,然而,转发只发生在提供最短路径返回发送者的链路,如果这个包到达了一个不是最短的路径上,则这个包被discard。
提供一个到组播指明路由器和源之间的链路叫作父链路,router的处出端口叫子链路。
在共享树(shared-tree)的方式, 所有的包沿着分布树发送到组播组,不考虑发送的源,这种方式削减了处理时间,但是导致了较大的端到端的延时
然而,不同于spanning-tree机制,不同的组播组定义了不同的分布树,如果一个设备想接收数据,它必须加入这个组的共享树,组播路由协议通过检测一个点播的路由可达来建交分布树。
组播包使用IP Header的TTL域来限制它的可达范围,每经过一个路由器,TTL的值减1,如果TTL过期,则这个包被抛弃,Packet的TTL大于接口的TTL门限,则被转发,如果等于小于接口的门限则抛弃。
0 限制在同一个主机,从来不被发送到任何接口
1 限制在相同的子网,从来不被router转发
15限制在相同的site, 组织,或部门
63限制在相同的区域
127worldwide
191workwide, limited bandwidth
255unrestricted in scope ; global
IP组播路由协议用于发现组播组和建立每个组播组的分布树
client to router : IGMP
Router to Switch: CGMP
Router to Router : DVMRP, PIM, MOSPF, CBT
组播路由协议有以下两种方式: 密集方式路由(dense-mode routing)和稀疏方式路由(sparse-mode routing)
怎样选用这两种方式,取决于组播组的成员在整个网络中的分布,如果网络中几乎所有的路由器都为每个组播组分发组播信息则使用Dense-mode, 为了维护分布树,Dense-mode组播路由协议间歇的flood网络组播信息,Dense-mode适用于组成员密集的分布在整个网络,而且有足够的带宽来容忍flood。
sparse-mode路由协议用于每个组播只有很少的几个路由器(并不意味着每个组播组只有很少的成员),它意味着组播组成员被广泛的分散,例如Internet Muticast, sparse-mode也假设网络带宽很有限,sparse-mode不使用flood, 开始时它先建立一个空的分布树,只有当成员请求加入组播组时,它才向分布树添加一个分支。
dense-mode路由协议包括: Distance Vector Multicast Routing Protocol (DVMRP), Multicast Open Shortest Path First (MOSPF), Protocol Independent Multicast Dense Mode(PIMDM)
DVMRP大多数用于组播主干(MBONE)路由器, 它使用反路径flood(reverse path flooding), 当DVMRP接收一个包时,它在它连接的所有路径上flood这个包,除了接收路径,这样,这个包可以到达所有的LAN, 如果某个网段没有任何组播组的成员,则路由器发送一个削减信息返回分布树,这人削减信息防止后来的包发送到这个没有成员的区域,DVMRP使用它自己集成的路由协议去决定包返回源的路径, 这个点播路由协议很像RIP,它基于hop counts, 为了可以让新的主机加入组播组,DVMRP间断的flood, DVMRP很少在大的网络中使用。DVMRP的扩展性不好,因为它依靠Flood.
MOSPF(Cisco不支持)依赖于它集成的OSPF, MOSPF适用于单独的路由域,例如一个网络被一个单独的组织控制, OSPF是一个链路状态路由协议, MOSPF把组播信息加入OSPF链路状态广告, 在一个OSPF/MOSPF网络中,每个路由器基于链路状态信息维护一个详细的网络拓补, 一个MOSPF路由器使用链路状态广告去学习在连接LAN中有那个组播组被激活,它通过这个信息构造分布树,MOSPF基于包的源和目的地址来转发包,一个基于每source-group 的分离最短路径分布树被建立,分布树当网络拓补发生变化以及cache过期时被重新计算,MOSPF适用于在同一时间只有少量的soure-group被激活,不推荐MOSPF使用于不稳定的环境中。
PIM DM和DVMRP相似,都使用相反路径flooding(reverse path flooding), 当PIM DM接收一个包时,它在它连接的所有路径上flood这个包,除了接收路径,如果某个网段没有任何组播组的成员,则路由器发送一个削减信息返回分布树, 协议独立意味着它不依赖任何一个指定的点播路由协议,这个原则适用于dense-mode和sparse-mode,PIM可以使用所有的点播路由协议,PIM适用于发送者和接收者的距离很近,也适用于很少的发送者和很多的接收者,以及流量很高的情况.
Sparse-mode的两种组播路由协议:
Protocol Independent Multicast Sparse Mode (PIM SM) 和 Core-Based Trees (CBT)
PIM SM适用于只有较少的接收者,以及流量不频繁,这个协议可以同时处理几个组播数据流,非常适合应用于WAN 或者是Internet, 它定义一个集合点(rendezvous point), 一个发送者必须发送数据到这个集合点,接收者在接收数据之前要先在集合点登记, 路由器自动的优化路径, PIM可以在某些组播组中使用dense-mode的同时,在另外一些组中使用sparse-mode.
在CBT环境中,所有的组成员共享一个单独的树,组播流在相同的分布树上传输,不考虑源, CBT和Spanning-tree相似,除了为每个组播组创建一个分离的树,一个基于Core的树可以使用一个单独的路由器,或是一组路由器做为核心,路由器通过发送一个加入信息加入核心,核心发送一个确认返回路由器,一个加入信息不需要必须被核心确认,这台路由器成为分布树的一个分支
例子:
一个client发送一个IGMP 加入信息,下一跳的router接收这个信息,记录IGMP的源MAC地址, 然后产生一个CGMP包发送到switch, 交换机使用这个CGMP信息动态的在switch talbe中建立一个表项,这个表项是实际组播Host地址到交换机端口映射