多播很象广播,多播数据被分配一些特定的地址。两者的区别在于,一些多播地址可以被路由,并使用在Internet上。IANA(Internet地址分配机构)为多播预留的地址空间是224.0.0.0/4,我们现在不再说“D类”地址了。224/4的地址范围是从224.0.0.0一直到239.255.255.255。
多播比广播更具效率,因为广播数据包必须由本地链路上每台电脑接收,而每个操作系统都会生成一个中断,以便对收到的数据包进行检查,这个过程中通常会复制一些数据。而在多播时,网卡并不会接收这些数据包,除非它被告知需要接收。
缺省情况下,启用了多播功能的网络接口卡(NIC)在引导时只会侦听224.0.0.1上的数据,这个地址被赋给了“该子网上的所有系统”。是的,这与广播非常相似,事实上很多人认为广播就是多播的一种特殊情况。
通过设置网卡是否忽略多播内容,多播可以选择传送的目的对象,这是本地链路的工作方式,但Internet是怎样做的呢?如果有人想通过多播向非洲传送一个名人孩子出生的流数据,我们并不想让Internet上的每一台路由器都消耗带宽把它传送到每台电脑。除了通过设置本地NIC做出决策外,还有一些多播路由机制可以“修剪”某些子网。如果你的网络中没有人想看这些信息,那么就没有理由让它进入你的网络。
那些对这一信息感兴趣的人可以运行一个特别的程序,该程序会依次告诉NIC去加入一个多播组。NIC利用Internet组管理协议(IGMP)提醒本地多播路由器,它想加入一个特定的组。不过这只能单向实现(只能接收多播数据)。如果有人想发送和接收多播的信息,那么IP层就需要更高的技巧。为了发送数据,IP协议会把一个IP地址映射到一个以太网地址上,并把它告诉网卡驱动程序,以便用另一个MAC(媒体访问控制)地址配置网卡。
IGMP本身非常简单。它与ICMP(Internet控制消息协议)很相似,因为它也用到了IP层,只不过协议号码不同而已。IGMP协议头只包含4个内容:版本号、类型、校验和,以及要加入的组(即多播地址)。当数据包被发送出去的时候,多播路由器就知道了至少有一台主机有兴趣接收数据包,以获得一个特定的多播地址。现在这台路由器必须以某种方式和其它路由器进行多播路由,以便获得所需的数据。
现在事情变得有趣了,今天我们要谈论几种多播路由机制:DVMRP和PIM。这里稍事停顿一下,你要知道即使到了现在,多播技术仍然尚未被广泛支持,这一点很重要。在过去只有一个mbone即多播主干网络的时候,人们通过IPIP(IP封装IP)隧道与之相连。Unix程序mrouted可以理解DVMRP和IGMP协议,而Internet路由器却不能。现在很多希望采用多播技术的客户仍在询问他们的ISP,为什么某些协议不起作用。
DVMRP指的是距离向量多播路由协议,它采用IGMP子码13,并实现所谓的密集泛洪(Dense Flooding)。Dense Flooding很有效,但效率不高。一台路由器首先会向每个子网发送信息,然后去掉没有多播需求的子网。PIM( Protocol-Independent Multicast),即协议无关多播,不依赖于单播路由机制,它在密集模式下类似于DVMRP。PIM密集模式(dense mode)本质上和DVMRP一样,只不过PIM采用的是IP协议103。PIM可以实现分支的加入、修剪和嫁接。嫁接与修剪相反:它将一条分支重新嫁接回主干网络。密集模式多播路由会由向所有人发送数据,然后修剪掉部分分支。多播分布树总被用来代表一组路由器,当一束分支被修剪,路由器将最终可以除去越来越粗壮的分支。如果一个AS内没有边界路由器感兴趣的分支,它就会向上流路由器发送一条修剪信息,从而不再浪费带宽。
稀疏模式(sparse mode)多播路由则采用集合点(Rendezvous Point,即RP)的思想。所有的加入信息都被发送到RP的单播地址上,因此这里显然需要懂一些优先的概念。PIM稀疏模式操作起来也更智能一些,它利用了共享树结构,但是假如一台路由器发现它与数据源更近,就会向上流路由器发送一条加入信息,以确保数据从最佳地址开始流动。随后新指定的路由器成为网络的数据源发布点。
这一点确实不错,只是要注意一处小细节:Internet并不是垂直的树状结构。企业总是想做冗余的连接,所以自然而然形成了巨大的网络环路。多播技术中采用了反向路径转发(RPF)来确保不会产生环路,其基本概念是,检验多播数据包所到达的接口是否是距离发送者最短的单播路径。如果不是,那么数据包就可能并非来自发送者,此数据包就会被丢弃。而如果RPF检验成功,数据包就会被复制然后发送给多播组里的每一个人。
多播路由协议还有很多种,如OSPF的MOSPF(多播开放最短路径优先协议),不过它只能用在一个自治域内;还有BGP的BGMP(边界网关多播协议),但也从未见它实际使用。许多协议并没有真正使用过,但人们总能产生诸多新鲜有趣的想法,希望使多播技术的广为传播能够成为现实。要知道分别观看来自一个网站的同一视频是多么丢脸的一件事啊,如果我们利用多播技术让路由器在需要的时候复制数据流就可以节省大量的带宽了。
小结
多播协议采用特殊的地址,从一个发送者向多个接收者发送数据,且只发送一份数据副本。
主机或路由器可以通过IGMP告诉其它路由器它们有兴趣从而加入多播组。
密集模式协议实现flood和修剪作用,而稀疏模式利用RP(反向路径)避免不必要的floodin