产生背景
通常,在传统的网络通讯中,有两种方式,一种是源主机和目标主机两台主机之间进行的“一对一”的通讯方式,即单播,第二种是一台源主机与网络中所有其他主机之间进行的通讯,即广播。那么,如果需要将信息从源主机发送到网络中的多个目标主机,要么采用广播方式,这样网络中所有主机都会收到信息,要么,采用单播方式,由源主机分别向各个不同目标主机发送信息。可以看出来,在广播方式下,信息会发送到不需要该信息的主机从而浪费带宽资源,甚至引起广播风暴:而单播方式下,会因为数据包的多次重复而浪费带宽资源,同时,源主机的负荷会因为多次的数据复制而加大,所以,单播与广播对于多点发送问题有缺陷。
在此情况下,组播技术就应用而生了。
组播又称多目标广播、多播。网络中使用的一种传输方式,它允许把 所发消息传送给所有可能目的地中的一个经过选择的子集,即向明确指出的多种地址输送信息。是一种在一个发送者和多个接收者之间进行通信的方法。与任播(anycast)和单播(unicast)一起,组播也是一种IPv6的包传送方式。组播在CDPD技术中的无线数据网络中也可以使用。
1985年9月,Steve与其导师提出了支持IP组播的扩展模型,明确了Internet组管理协议 (Internet Group Management Protocol, IGMP) 概念。12月,Steve将此概念提交给了IETF, 而后经过两次更新该组播模型,越不同网段的转发没有定义,此方面的工作已经被独立为组播路由技术。1989年8月,RFC1112作为IGMPv1的规范被广泛接受,这是组播发展历程中的一个重要里程碑。
传统方式
组播技术是IP网络数据传输三种方式之一,在介绍IP组播技术之前,先对IP网络数据传输的单播、组播和广播方式做一个简单的介绍。
单播
在发送者和每一接收者之间实现点对点网络连接。如果一台发送者同时给多个的接收者传输相同的数据,也必须相应的复制多份的相同数据包。如果有大量主机希望获得数据包的同一份拷贝时,将导致发送者负担沉重、延迟长、网络拥塞;为保证一定的服务质量需增加硬件和带宽。
广播
广播指在IP子网内广播数据包,所有在子网内部的主机都将收到这些数据包。广播意味着网络向子网每一个主机都投递一份数据包,不论这些主机是否乐于接收该数据包。所以广播的使用范围非常小,只在本地子网内有效,通过路由器和网络设备控制广播传输。
组播
组播在发送者和每一接收者之间实现点对多点网络连接。如果一台发送者同时给多个接收者传输相同的数据,也只需复制一份相同的数据包。它提高了数据传送效率,减少了骨干网络出现拥塞的可能性。
组播解决了单播和广播方式效率低的问题。当网络中的某些用户需求特定信息时,组播源(即组播信息发送者)仅发送一次信息,组播路由器借助组播路由协议为组播数据包建立树型路由,被传递的信息在尽可能远的分叉路口才开始复制和分发。
IP组播
公共互联网中的一些团体经常会用到IP组播(Mbone就是一个例子),此外IP组播还被用于Internet2等私有IP网络中的一些特殊应用。链路本地组播是指将IP组播包发往处于同一物理的或虚拟的数据链路层的若干主机组。由于这种组播不需要复杂的路由,因此其应用要广泛得多。在IPv6中,它被用于地址解析,而在零配置网络中,它取代了低效的广播协议,完成服务发现、名字解析和地址冲突解析的功能。
IP组播会议的第一次大规模演示是在1992年3月的第23届IETF大会上,当时它被用于向全世界的研究人员和感兴趣的观察员们广播一些会议。之后,IETF的一些会议就被有选择地继续在MBONE和一些私有组播网络上多播。
组播安全性是一个重要的问题。标准的、实用的通信安全解决方案一般采用的是对称加密。但是将其应用于IP组播流量可能会使任何一个接收方都拥有冒充发送方的能力。这显然是令人无法接受的。IETF的MSEC工作组正在开发用以解决这一问题的安全协议,这些协议大多都是在IPsec协议集的体系框架内开发的。
IPsec不能被用于组播方案,这是因为IPsec安全关联是被绑定到两个而非多个主机的。IETF提出了一个新的协议——TESLA,就组播安全性而言,这个协议是灵活且令人信服的。
体系结构
组播协议分为主机-路由器之间的组成员关系协议和路由器-路由器之间的组播路由协议。组成员关系协议包括IGMP(互连网组管理协议)。组播路由协议分为域内组播路由协议及域间组播路由协议。域内组播路由协议包括PIM-SM、PIM-DM、DVMRP等协议,域间组播路由协议包括MBGP、MSDP等协议。同时为了有效抑制组播数据在链路层的扩散,引入了IGMP Snooping、CGMP等二层组播协议。对组播的技术历史作出了巨大的贡献!
IGMP建立并且维护路由器直联网段的组成员关系信息。域内组播路由协议根据IGMP维护的这些组播组成员关系信息,运用一定的组播路由算法构造组播分发树进行组播数据包转发。域间组播路由协议在各自治域间发布具有组播能力的路由信息以及组播源信息,以使组播数据在域间进行转发。
IP地址
组播IP地址用于标识一个IP组播组。IANA(internet assigned number authority)把D类地址空间分配给IP组播,其范围是从224.0.0.0到239.255.255.255。如二进制表示,IP组播地址前四位均为1110八位组⑴ 八位组⑵ 八位组⑶ 八位组⑷1110
XXXX XXXXXXXX XXXXXXXX XXXXXXXX组播组可以是永久的也可以是临时的。组播组地址中,有一部分由官方分配的,称为永久组播组。永久组播组保持不变的是它的ip地址,组中的成员构成可以发生变化。永久组播组中成员的数量都可以是任意的,甚至可以为零。那些没有保留下来供永久组播组使用的ip组播地址,可以被临时组播组利用。
224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用。
224.0.1.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效。
239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。常用的预留组播地址列表如下:
224.0.0.0 基准地址(保留)
224.0.0.1 所有主机的地址
224.0.0.2 所有组播路由器的地址
224.0.0.3 不分配
224.0.0.4dvmrp(Distance Vector Multicast Routing Protocol,距离矢量组播路由协议)路由器
224.0.0.5 ospf(Open Shortest Path First,开放最短路径优先)路由器
224.0.0.6 ospf dr(Designated Router,指定路由器)
224.0.0.7 st (Shared Tree,共享树)路由器
224.0.0.8 st主机
224.0.0.9 rip-2路由器
224.0.0.10 Eigrp(Enhanced Interior Gateway Routing Protocol,增强网关内部路由线路协议)路由器 224.0.0.11 活动代理
224.0.0.12 dhcp服务器/中继代理
224.0.0.13 所有pim (Protocol Independent Multicast,协议无关组播)路由器
224.0.0.14 rsvp (Resource Reservation Protocol,资源预留协议)封装
224.0.0.15 所有cbt 路由器
224.0.0.16 指定sbm(Subnetwork Bandwidth Management,子网带宽管理)
224.0.0.17 所有sbms
224.0.0.18 vrrp(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)
239.255.255.255 SSDP协议使用
组播MAC地址
组播MAC地址的高24bit为0x01005e,第25bit为0,即高25bit为固定值。MAC地址的低23bit为组播IP地址的低23bit。由于 IP组播地址的前4bit 是1110,代表组播标识,而后28bit 中只有23bit 被映射到MAC 地址,这样IP 地址中就有5bit 信息丢失,导致的结果是出现了32 个IP 组播地址映射到同一MAC 地址上。
交互式
IP组播的最大的用处就是用来做Internet上的音频和视频的传输,比如向成百上千的使用者发送音频和视频数据流。可是传统的IP组播的有一个最大的缺点就是这些所有的使用者都是被动的接受者。换句话说,IP组播并没有让这些使用者进行交互式主动参与的内置机制。
利用H.323国际标准中对会议成员的管理技术,SAP(Session Announcement Protocol),SDP(Session Description Protocol),RTCP(Real-time Transport Control Protocol)等协议,就可以使传统的IP组播技术具有交互功能。交互式IP组播技术应用范围很广,特别是Internet上多媒体的传输业务。比如视频会议,远程教育,Internet上的视频点播(VoD)等。
组播应用
在组播方式中,信息的发送者称为“组播源”,信息接收者称为该信息的“组播组”,支持组播信息传输的所有路由器称为“组播路由器”。加入同一组播组的接收者成员可以广泛分布在网络中的任何地方,即“组播组”没有地域限制。需要注意的是,组播源不一定属于组播组,它向组播组发送数据,自己不一定是接收者。多个组播源可以同时向一个组播组发送报文。
假设只有 Host B、Host D 和Host E 需要信息,采用组播方式时,可以让这些主机加入同一个组播组(Multicast group),组播源向该组播组只需发送一份信息,并由网络中各路由器根据该组播组中各成员的分布情况对该信息进行复制和转发,最后该信息会准确地发送给Host B、Host D 和Host E。
相关协议
组播协议分为主机与路由器之间的组成员关系协议和路由器与路由器之间的组播路由协议。
IGMP
IGMP协议运行于主机和与主机直接相连的组播路由器之间,主机通过此协议告诉本地路由器希望加入并接受某个特定组播组的信息,同时路由器通过此协议周期性地查询局域网内某个已知组的成员是否处于活动状态(即该网段是否仍有属于某个组播组的成员),实现所连网络组成员关系的收集与维护。
IGMP有三个版本,IGMPv1由RFC1112定义,通用的是IGMPv2,由RFC2236定义。IGMPv3仍然是一个草案。IGMPv1中定义了基本的组成员查询和报告过程,IGMPv2在此基础上添加了组成员快速离开的机制,IGMPv3中增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。这里着重介绍IGMPv2协议的功能。
IGMPv2通过查询器选举机制为所连网段选举唯一的查询器。查询器周期性的发送普遍组查询消息进行成员关系查询;主机发送报告消息来应答查询。当要加入组播组时,主机不必等待查询消息,主动发送报告消息。当要离开组播组时,主机发送离开组消息;收到离开组消息后,查询器发送特定组查询消息来确定是否所有组成员都已离开。
通过上述IGMP机制,在组播路由器里建立起一张表,其中包含路由器的各个端口以及在端口所对应的子网上都有哪些组的成员。当路由器接收到某个组G的数据报文后,只向那些有G的成员的端口上转发数据报文。至于数据报文在路由器之间如何转发则由路由协议决定,IGMP协议并不负责。
IGMP Snooping
IGMP Snooping的实现机理是:交换机通过侦听主机发向路由器的IGMP成员报告消息的方式,形成组成员和交换机接口的对应关系;交换机根据该对应关系将收到组播数据包只转给具有组成员的接口。
IGMP Proxy与IGMP Snooping实现功能相同但机理相异:IGMP snooping只是通过侦听IGMP的消息来获取有关信息,而IGMP Proxy则拦截了终端用户的IGMP请求并进行相关处理后,再将它转发给上层路由器。
CGMP
CGMP(Cisco Group Management Protocol)是Cisco基于客户机/服务器模型开发的私有协议,在CGMP的支持下,组播路由器能够根据接收到的IGMP数据包通知交换机哪些主机何时加入和脱离组播组,交换机利用由这些信息所构建的转发表来确定将组播数据包向哪些接口转发。GMRP是主机到以太网交换机的标准协议,它使组播用户可以在第二层交换机上对组播成员进行注册。
PIM-SM
众多的组播路由协议中,应用最多的协议是 PIM-SM稀疏模式协议无关组播。
在PIM-SM域中,运行PIM-SM协议的路由器周期性的发送Hello消息,用以发现邻接的PIM路由器,并且负责在多路访问网络中进行指定路由器(DR)的选举。这里,DR负责为其直连组成员朝着组播分发树根节点的方向发送"加入/剪枝"消息,或是将直连组播源的数据发向组播分发树。
组播骨干网
组播的规范是在1989年出版的,但是它的使用受到了限制。Internet上的路由器并不是都具有组播的能力。在这样一种情况下,研究者们为了在现有情况下开发和测试组播协议的应用,建立了组播骨干网(Multicast Backbone,Mbone)。Mbone支持组播分组的路由选择而不打扰其它的因特网业务流。
Mbone是一种跨越几个大陆的,由志愿者合作完成的实验性的网络。它是一个相互连接的子网和路由器的集合,这些子网和路由器支持IP组播业务流的传送。作为因特网上的虚拟网络,Mbone通过隧道(Tunneling)来旁路因特网上无组播能力的路由器。
隧道把组播数据包封装在IP包(即单播数据包)中来通过哪些不支持组播路由的网络。MR3和MR4是支持IGMP协议的有组播能力的路由器,他们把组播数据包封装在单播数据包中来发送,同时它们还从收到的单播数据包中取出组播数据包。R1和R2是没有组播能力的路由器,它们像传送其它普通单播数据包那样来传送封装有组播数据包的单播数据包。
组播应用
组播应用大致可以分为三类: 点对多点应用,多点对多点应用和多点对点应用。
点对多点
点对多点应用是指一个发送者,多个接收者的应用形式,这是最常见的组播应用形式。典型的应用包括:
媒体广播:如演讲、演示、会议等按日程进行的事件。其传统媒体分发手段通常采用电视和广播。这一类应用通常需要一个或多个恒定速率的数据流,当采用多个数据流(如语音和视频)时,往往它们之间需要同步,并且相互之间有不同的优先级。它们往往要求较高的带宽、较小的延时抖动,但是对绝对延时的要求不是很高。
媒体推送:如新闻标题、天气变化、运动比分等一些非商业关键性的动态变化的信息。它们要求的带宽较低、对延时也没有什么要求。
信息缓存: 如网站信息、执行代码和其他基于文件的分布式复制或缓存更新。它们对带宽的要求一般,对延时的要求也一般。
事件通知:如网络时间、组播会话日程、随机数字、密钥、配置更新、有效范围的网络警报或其他有用信息。它们对带宽的需求有所不同,但是一般都比较低,对延时的要求也一般。
状态监视:如股票价格、传感设备、安全系统、生产信息或其他实时信息。这类带宽要求根据采样周期和精度有所不同,可能会有恒定速率带宽或突发带宽要求,通常对带宽和延时的要求一般。
多点对多点
多点对多点应用是指多个发送者和多个接收者的应用形式。通常,每个接收者可以接收多个发送者发送的数据,同时,每个发送者可以把数据发送给多个接收者。
典型应用包括:
多点会议:通常音/视频和白板应用构成多点会议应用。在多点会议中,不同的数据流拥有不同的优先级。传统的多点会议采用专门的多点控制单元来协调和分配它们,采用组播可以直接由任何一个发送者向所有接收者发送,多点控制单元用来控制当前发言权。这类应用对带宽和延时要求都比较高。
资源同步:如日程、目录、信息等分布数据库的同步。它们对带宽和延时的要求一般。
并行处理: 如分布式并行处理。它对带宽和延时的要求都比较高。
协同处理:如共享文档的编辑。它对带宽和延时的要求一般。
远程学习:这实际上是媒体广播应用加上对上行数据流(允许学生向老师提问)的支持。它对带宽和延时的要求一般。
讨论组:类似于基于文本的多点会议,还可以提供一些模拟的表达。
分布式交互模拟(DIS):它对带宽和时延的要求较高。
多人游戏:多人游戏是一种带讨论组能力的简单分布式交互模拟。它对带宽和时延的要求都比较高。
Jam Session:这是一种音频编码共享应用。它对带宽和时延的要求都比较高。
多点对点
多点对点应用是指多个发送者,一个接收者的应用形式。通常是双向请求响应应用,任何一端(多点或点)都有可能发起请求。典型应用包括:
资源查找:如服务定位,它要求的带宽较低,对时延的要求一般。
数据收集:它是点对多点应用中状态监视应用的反向过程。它可能由多个传感设备把数据发回给一个数据收集主机。带宽要求根据采样周期和精度有所不同,可能会有恒定速率带宽或突发带宽要求,通常这类应用对带宽和延时的要求一般。
网络竟拍:拍卖者拍卖产品,而多个竟拍者把标价发回给拍卖者。
信息询问: 询问者发送一个询问,所有被询问者返回应答。通常这对带宽的要求较低,对延时不太敏感。
Juke Box:如支持准点播(Near-On-Demand)的音视频倒放。通常接收者采用“带外的”协议机制(如HTTP、RTSP、SMTP,也可以采用组播方式)发送倒放请求给一个调度队列。它对带宽的要求较高,对延时的要求一般。
技术问题
组播技术还有许多未解决的问题,例如:组播安全、组播拥塞控制、组播状态聚集、组播流量计费、无拥塞控制、数据包重复、数据包的无序交付等等。