Multicast 采用 D 类 IP 地址,即 224.0.0.0~239.255.255.255。其中 224.0.0.0~224.0.0.255是保留地址,239.0.0.0~239.255.255.255 是私有地址,类似于 unicast 的私有地址。
Multicast的IP地址与MAC地址的映射:MAC地址有48位,前面24位规定为01-00-5E,接着一位为 0,后面 23 位是 IP地址的后 23 位。
路由器间要通过组播
协议(如 DVMRP、MOSPF、PIM)来建立组播树和转发组播数据包。组播树有两类:源树和共享树。
多播时,路由器采用组管理
协议 IGMP来管理和维护主机参与组播。IGMP
协议 v1中,主机发送 report 包来加入组;路由器发送 query 包来查询主机(地址是 224.0.0.1),同一个组的同一个子网的主机只有一台主机成员响应,其它主机成员抑制响应。一般路由器要发送3 次query 包,如果 3 次都没响应,才认为组超时(约 3 分钟)。IGMPv2 中,主机可以发送leave 信息给路由器(地址 224.0.0.2);路由器收到信息后,发送一个特别的 query 包,在 3秒内没收到组成员响应,就认为组超时。
由于组播的 MAC 不是具体某台主机的 MAC,根据
交换机的工作原理,交换机会对组播数据包进行广播。因此,对某些不参加组播的主机而言,这些都是不必要的流。为了解决这个问题,cisco 公司开发了 CGMP协议。该协议用于管理参与组播的主机。每当有主机加入或离开某个组时,路由器就会把该主机的多播 IP地址(转换成组播 MAC 地址)、主机的C 地址以及消息类型(加入或离开)以 CGMP 消息告知交换机。交换机根据这些信息就可以建立起组播转发表。
2.PIM 协议
Cisco 的路由器只支持 PIM 组播协议。PIM 是一种可利用多种单播路由表(如 EIGRP、OSPF、BGP 和静态路由等)的组播路由协议,它根据这些路由表实现组播数据的转发。尽管它是组播路由协议,然而它实际上只是使用单播路由表来完成 RPF 检验功能,并没有重新建立组播路由表。不像其他的路由协议,PIM 并不会在路由之间收发路由更新信息。
PIM分为Dense-mode与Sparse-mode两种。密集模式的PIM(PIM-DM)使用“推”的方式,把组播流向网络的各个地方转发,从而把流“推”给不同接收者。这种方式适用于网络中的各个子网都有接收者(即接收者密集)的情况。PIM-DM一开始向网络中的各处发组播流,路由器每隔3分钟检查一次自己是否还存在“下游”的邻居,如果没有(即它无需转发组播流),就把这个流“剪”掉(即不再转发)。路由器会积累数据流所带有的源和组的信息,使得“下游”的路由器可以建立它们的组播转发表。PIM-DM只支持源树,而无法使用共享树。