现在的位置: 首页 > 综合 > 正文

6、组播技术

2017年11月30日 ⁄ 综合 ⁄ 共 9567字 ⁄ 字号 评论关闭

现在越来越多的应用是基于一个特定群组的(比如多媒体会议、群组数据分发、群组游戏、群组视频点播等),在这种情况下如果使用单播和广播方式实现都不符合客观实际情况,将大大增加网络上的冗余数据流量,最好的实现方式是根据实际情况将应用的成员划分到一个群组,数据的分发将仅限于组内,这就是所谓的组播技术。

1、组播的概述

(1)组播的定义

单播、组播、广播是计算机网络上三种基本的通信方式。
单播是相互感兴趣的主机双方进行通信的方式,主机不能接收对其不感兴趣的其它主机发送的信息,属于点对点通信。
广播是主机向子网内所有主机发送信息,子网内所有主机都能收到来自某台主机的广播信息,属于点对所有点的通信
组播则介于两者之间,是主机向一组主机发送信息,存在于某个组的所有主机都可以接收到信息,属于点对多点通信。
从这个意义上讲,广播可以认为是组范围最大化的组播。当然,二者还是存在显著区别的:首先,广播被限制在子网内,不会被路由器转发。其次,主机被默认为是接收者,而组播方式则需要主机主动加入。

解决点到多点的通信,可以通过单播和组播方式实现。
单播可以通过建立多个点对点的连接来达到点对多点的传输。  这种方式将在源点(服务器)与各个接收点建立连接,从服务器开始,就将有多份数据流分别流向分散的接收点。这种方式将加重服务器的负荷,增大对服务器性能的要求;同时还在网络中造成大流量,从而增加网络的负载,导致网络拥塞。
组播则不然,发送方仅发一份数据包,此后数据包只是在需要复制分发的地方才会被复制分发,每一网段中都将保持只有一份数据流。这样就可以减轻服务器的负担,节省网络带宽。

(2)、组播的应用

IP组播最早的应用是音频/视频会议。但音频/视频会议只是众多IP组播应用之一。除此之外,还包括数据分发,实时数据组播,以及游戏和仿真应用等。一些出色的IP组播,用于多媒体会议的工具最先在UNIX环境下被开发出来。这些工具允许通过IP组播实现多对多的音频/视频会议。除音频与视频工具之外,还有基于UNIX的白板工具被开发出来,它允许用户共享公共的电子白板。但是由于带宽和工作站、路由器处理能力的限制,最后只有音频会议得到了广泛应用。但音频会议和基于口组播的数据共享应用相结合(如先前提到的白板工具),提供了一个功能非常强大的多媒体会议系统,而它并不消耗很多的带宽,同时这也适用于网络教学。

数据分发是IP组播应用的另一个领域,通过使用IP组播,在可靠组播区域内,允许将文件和数据传送到各个网络节点。这就允许大型跨国公司每天都可以向他们的远程子公司发布新的信息。

实时数据组播:对大主机组的实时数据传送是使IP组播受欢迎的有益应用领域。一个好的例子是实时音频/视频点播。网络用户可以通过网络收看现场足球比赛、现场演唱会等。还有,就是将股票信息发送到交易大厅的工作站。通过指定不同的财务分类(债券、运输、药品等)给不同的组播组,交易员可以使用他们的工作站来接收他们感兴趣的实时金融数据。

游戏与仿真:IP组播非常适合于网络游戏和仿真应用。现在,很多网络游戏使用单播,是点到点的连接。这对于PC机或工作站的处理能力而言是N的平方数量级的负担,这样的游戏通常只有5到10个玩家。即便是参与者都连接到服务器上,由于受限于服务器的处理能力,通常也只能容纳100个玩家。IP组播可用于有大量参与者的游戏与仿真。PC机或工作站只需进入IP组播组就可以接收游戏或仿真数据。通过把数据分成多个信息流,分属不同的组播组,PC机或工作站还可以对他们当前参加的游戏或仿真所需要的收发做出限制。在不久的将来,成千上万的玩家通过互联网在仿真游戏里同时战斗将不再是不可思议的事。

(3)、组播技术的特点

IP组播技术有效地解决了单点发送多点接收、多点发送多点接收的问题,实现了IP网络中点到多点的高效数据传送,能够有效地节约网络带宽、减轻服务器及网络的负载。因此具有增强效率,优化性能,分布式应用等优点。
由于IP组播是基于UDP的,所以IP组播也可能有信息包传送不可靠、信息包重复、信息包不按序到达、无流量控制等缺点。

2、组播实现技术介绍

(1)组播体系结构

组播协议分为主机-路由器之间的组成员关系协议和路由器-路由器之间的组播路由协议。组成员关系协议包括IGMP(互连网组管理协议)。组播路由协议分为域内组播路由协议及域间组播路由协议。
域内组播路由协议包括MOSPF,CBT,PIM-SM、PIM-DM、DVMRP等协议,域内的组播协议又分为密集,与稀疏模式的协议。DVMRP,PIM-DM,MOSPF属于密集模式,CBT,PIM-SM属于稀疏模式。由于MOSPF的扩展性很差,并且过于复杂,很少被实现,并且不支持隧道,已经被抛弃。CBT简单,但端到端的性能无法满足,不适于用在全网性的组播应用中。故在域内,主要使用PIM-SM,PIM-DM,DVMRP协议。
针对域间组播路由有两类解决方案:短期方案和长期方案。短期方案包括三个协议MBGP/MSDP/PIM-SM: MBGP(组播边缘网关协议),用于在自治域间交换组播路由信息;MSDP(组播信源发现协议),用于在ISP之间交换组播信源信息;以及域内组播路由协议PIM-SM。长期方案目前讨论最多的是MASC/MBGP/BGMP,它建立在现有的组播业务模型上,其中MASC实现域间组播地址的分配、MBGP在域间传递组播路由信息、BGMP完成域间路由树的构造。此外还有一些组播路由策略,如PIM-SSM(特定信源协议无关组播)等,建立在其它的组播业务模型上。目前仅短期方案MBGP/MSDP/PIM-SM是成熟的,并在许多的运营商中广泛使用。其他方案的标准还在研究中。
同时为了有效抑制组播数据在链路层的扩散,引入了IGMP Snooping、HGMP,HMVR,RGMP,GMRP等二层组播协议。
IGMP建立并且维护路由器直联网段的组成员关系信息。域内组播路由协议根据IGMP维护的这些组播组成员关系信息,运用一定的组播路由算法构造组播分发树进行组播数据包转发。域间组播路由协议在各自治域间发布具有组播能力的路由信息以及组播源信息,以使组播数据在域间进行转发。

(2)组播地址

组播数据IP报文的目的地址是特殊的IP地址,称之为组地址。每一个加入到该组的主机都敏感该组地址并接收以该组地址为目的地址的IP报文。组播地址都以0x1110开始。
众所周知,IP地址可分为A、B、C、D、E五类。IANA(互联网编号授权委员会)把D类地址空间分配给IP组播。即:从224.0.0.0到239.255.255.255为IP组播地址的范围。IANA控制着IP组播地址的分配。并不是所有的D类地址都可以分配给用户,IANA预留了两个地址范围:224.0.0.0~224.0.0.255和239.0.0.0~239.255.255.255。前一个地址范围的所有地址都有特殊用途,如:224.0.0.1表示所有组播成员(包括路由器),224.0.0.2表示所有组播路由器。可以向IANA就某个特殊用途申请专用IP组播地址,如:24.0.0.13表示所有PIM路由器。后一个地址范围作为用于私人组播领域的管理权限地址,犹如单播的10.x.x.x/8等私有地址网段。
组播IP地址在网络层解决了如何寻址的问题,但通信最终还要依赖于数据链路层和物理层。因此组播在数据链路层如何寻址?
在物理层,也有专门的MAC她址被用于组播。就以太网而言,以0x01005Exx.xxxx的24位前缀开始的MAC层地址都是组播地址。
组播有了网络地址、物理地址,还需要建立IP地址到MAC地址的映射。

(3)IP地址到MAC地址的映射

在以太网中,第3层的IP组播地址信息的全部28位不能映射进入只有23位的第2层MAC地址空间,所以在映射过程中丢失5位地址信息,导致32:1的地址不明确。这意味着一个IEEE MAC地址能表示32个IP组播地址。主机C必须考察每一个收到帧的IP部分才能确定是不是需要的组播信息。
为什么只有23位MAC地址参与了映射而不是24位?这里有一个有趣的故事:回到20世纪90年代初,Steve Deering是最早从事组播研究的工程师之一,并且取得了一些研究成果。他希望IEEE能分配16个连续的组织机构唯一性标识符:(OUI)作为IP组播的MAC地址使用。一个OUI包含24位地址空间,16个连续的OUI正好有28位地址空间。这样就可以将IP组播地址一一映射到MAC地址中。但是,当时一个OUI的价格是1000美元,Steve的经理,Jonh Postel不愿意花16000美元购买全部28位MAC地址。相反,Jonh愿意在预算外花1000美元购买一个OUI,并且拿出一半地址(23位)给Steve供IP组播研究之用

(4)IP组播数据包的转发

在单播中,数据转发的依据是数据包的目的地址,该目的地址明确表示了一个主机位置。路由器(说明:三层交换机具有与路由器同样的路由功能,只不过转发速度更快。所以,三层交换机的组播实现与路由器的组播实现在IP层完全一致。这里,路由器亦即三层以太网交换机。以下将以路由器为例介绍组播)组播必须工作在查找单播路由表获得到目的地址的路径和本地出口。
但在组播中,这种方式显然不行。因为组播数据包中的目的地址是组地址而不是一个明确的主机地址;并且在与路由器相连的每条路径上或者说每个接口都可能有组成员。
因此,组播数据转发将采用逆向数据转发.即:对到达的组播数据包作逆向检查(Reverse Path Forward检查),判断数据包是否是从指向源站点的接口(指向源的接口是根据单播路由获得的,亦即单播路由的目的网络)上到达;如果是,逆向检查成功,数据包被转发;否则,数据包就被丢弃。

根据单播路由表,来自源192.18.0.32的组播包应从左边接口到达.现在有数据包从中间接口到达.这样的数据包R P F检查失败,数据包被丢弃而不予转发.下面再仔细看看RPF检查过程。

根据单播路由表,本地到192.18.0.32/24网段出口是S1。因此从S0到达的组播数据包RPF检查失败,被丢弃。

从S1接口收到来自源192.18.0.32的组播数据包是从正确的接口收到的数据包,因此数据包会被转发至适当的出接口。由此可以看出,组播转发项至少包括入接口、出接口。至于入接口是谁、出接口有哪些,则是组播路由协议要完成的任务。

3、组播数据包的二层交换

网桥或二层交换机(以下统称二层交换机)是工作在二层的网络设备。当它们收到组播数据包后如何处理?最简单的处理方式就是当网桥从一个接口收到组播数据报后向所有其它接口都转发出去。一般的没有组播功能的二层交换机都是这么处理的,所以这样的网桥也最便宜。但是这样处理就偏离了组播的初衷。
然而,具有组播功能的二层交换机可以做到只在需要的接口上才转发组播数据。那么如何实现?

二层交换机将在转发表中添加一项:MAC地址是组播地址,端口包含与希望接收到组播数据的主机相连所有的端口。以后当二层交换机接收到组播数据报后,将向除接收端口外的所有转发表项的其它希望接收组播数据的端口转发组播数据。

4、因特网组管理协议

(1)IGMP简介

IGMP——因特网组管理协议:IGMP协议是主机与路由器之间唯一信令协议;RFC1112规定了IGMP V1(支持windows95);RFC2236规定了IGMP V2(支持windows和大多数Unix最新的服务包);Draft-ietf-idmr-igmp-v3-03.txt规定了最新的IGMP V3

IGMP协议运行于主机与和主机直接相连的组播路由器之间,主机通过此协议告诉本地路由器希望加入并接受某个特定组播组的信息,同时路由器通过此协议周期性地查询局域网内某个已知组的成员是否处于活动状态(即该网段是否仍有属于某个组播组的成员),实现所连网络组成员关系的收集与维护。它是主机与组播路由器之间唯一的信令协议。IGMP不包含组播路由器之间上下游关系的传播和维护,这部分工作由各个组播路由协议来完成。
IGMP有三个版本,IGMP v1由RFC1112定义,目前通用的是IGMP v2,由RFC2236定义。IGMP v3由Draft-ietf-idmr_igmp-v3 -03 .txt定义,目前仍然是一个草案。IGMP v1中定义了基本的组成员查询和报告过程,IGMP v2在此基础上添加了组成员快速离开的机制,IGMP v3中增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。这里着重介绍IGMPv2协议的功能。
IGMP v2通过查询器选举机制为所连网段选举唯一的查询器。查询器周期性的发送普遍组查询消息进行成员关系查询;主机发送报告消息来应答查询。当要加入组播组时,主机不必等待查询消息,主动发送报告消息。当要离开组播组时,主机发送离开组消息;收到离开组消息后,查询器发送特定组查询消息来确定是否所有组成员都已离开。
另外,对于作为组成员的路由器而言,该路由器的行为和普通的主机一样,它响应其它路由器的查询。通常本协议中,”接口¨指在一个所连网络上的主接口,若一个路由器连在同一个网络上的接口有多个,则只需要在其中一个接口上运行此协议即可。另一方面,对主机而言,则需要在有组成员的所有的接口上都运行此协议
通过上述IGMP机制,在组播路由器里建立起一张表,其中包含路由器的各个端口以及在端口所对应的子网上都有哪些组的成员。当路由器接收到某个组G的数据报文后,只向那些有G的成员的端口上转发数据报文。至于数据报文在路由器之间如何转发则由路由协议决定,IGMP协议并不负责。

(2)IGMP v2

IGMP在主机与路由器之间是不对称的。
路由器需要定时发送普通查询消息,然后根据收到的组成员关系报告来确定某个特定组是否有主机存在;主机收到查询消息后,如果主机正属于某个组,则需要以组成员关系报告响应组播路由器的组成员关系查询,报告中包含主机加入组的组地址。路由器若长时间没收到关于某组的报告,将删除该组,不再向该网段转发组播数据。
主机想加入某个组时,主动发送组成员关系报告;路由器收到组报告后,如果是新组的报告则向该网段转发组播数据,如果组已存在则刷新组状态。主机想离开某组时,如果主机是本网段最后一个主机则将向路由器发送离开组消息,若不是则安静的离开;路由器收到离开组消息时,发出指定组查询,以确定某个特定组是否已无成员。在一较短的时间内路由器若没有收到该组的报告,则删除该组。
在共享网段上,有多个路由器(如:备份路由器)时,怎么办?

当有多个组播路由器连接在同一个LAN网段上时,为了减少网段上的查询消息,将由一个特殊的路由器来发送查询消息,其它路由器监听并接收查询消息和成员关系报告。这个特殊的路由器就是查询器。它从同接在一个LAN上的路由器中选举产生。
任何路由器启动组播服务时,它都默认自己为查询器,并发送普遍查询消息。查询器在收到更小源IP地址的查询消息后就停止发送普遍查询消息,变成非查询器。
当查询器失效不再发送查询消息。非查询器将变成查询器重新发送查询消息。
非查询器如何知道查询器失效?所有非查询器都启动一个查询定时器。无论何时,非查询器只要收到普遍查询消息就重新启动定时器。当定时器超时,非查询器立即发送查询消息,变成查询器。

当共享网段上有多个主机位于同一组播组时,可能会有多台主机同时响应路由器发出的组查询消息,形成报告风暴。这时我们需要使用报告抑制机制来避免在网段上形成报告风暴。IGMP定义了报告抑制机制,即:当主机收到查询消息并不立即发送响应报告,而是启动定时器,延时一个随机长短的时间才发送响应报告。其间,主机只要收到自己所属组的任一台主机发出的组成员关系报告(这台主机计时器计时结束),就不再发送成员关系报告。这样,每一个组中只有一台主机发送响应报告,避免了报告风暴。
最后,看看IGMP消息的报文格式(版本2)。

类型:有关主机和路由器相互作用的IGMP消息有三种类型:
0x11 表示组播组查询。这种类型又有两种子类型:普遍查询和指定组查询;
0x16 表示版本2组播组查询报告消息;
0x17 表示离开组播组。
为了与IGMP v1兼容,又定义了一些新的消息类型:
0x12 表示版本1组播组报告消息。
最大响应时间:描述了主机发送一个响应消息前的最大允许延时时间。只对组播组查询消息(包括普遍查询和特定组查询)才有意义。
校验和:为整个IGMP包的二进制反码的和的二进制反码(也包括IP包的包头)。
计算校验和时,校验和字段被置0。收到包在处理之前,先确认校验和。
组播组地址:普遍查询时,组播组地址被置0。指定组查询时,组播组地址置为特定的组播组地址(224.0.0.1)。
IGMP消息封装在IP报文内传送,协议号为2。

(3)IGMP三版本比较

IGMPv1与IGMPv2相比,IGMPv1较为简单。IGMPv1没有定义主机离开消息、指定组查询消息,也没有定义查询器的选举。IGMPv1主机离开时将不发送任何消息,仅仅是安静地离开。路由器通过组成员定时器超时来判断组已无成员存在。
在IGMPv1下,查询器也是依靠组播路由协议,由指定路由器(DR)来担任的。
IGMPv3目前还不成熟。

(4)IGMP v2与IGMP v1的兼容

版本2主机与版本1路由器兼容
版本2主机在收到IGMPv1普遍查询消息时,判断最大响应时间字段为0,发送IGMPv1成员关系报告。版本2主机能被版本1主机的报告抑制,只能发送IGMPv1成员关系报告。
版本1主机与版本2路由器兼容
版本1主机收到普遍查询消息时,发送IGMPv1成员关系报告;版本2主机在收到IGMPv2普遍查询消息时,发送IGMPv2报告。版本1主机成员关系报告不能被IGMPv2报告抑制。因此,路由器将始终都能接收到IGMPv1报告。
当版本2路由器收到IGMPv1报告时,进入有版本1主机状态,并启动版本1主机存在定时器。在定时器超时前,路由器不对离开消息作任何处理。当定时器超时,路由器就认为没有版本1主机存在,将完全按照IGMPv2动作。
混合版本1与版本2路由器兼容
如果有版本1路由器存在于子网中,版本2路由器必须被强制地按IGMPvl配置。以便于正常使用。

(5)IGMP窃听(IGMP Snooping)

前面提到能够具有组播功能的二层交换机能够建立组播MAC地址转发项,但它究竟如何建立起来的?常用解决方案是IGMP窃听。
IGMP窃听的工作原理如下:
1、主机发出IGMP成员报告消息,这个消息是给路由器的;在IGMP成员报告经过交换机时,交换机对这个消息进行监听并记录下来,形成组成员和端口的对应关系。
2、交换机在收到组播数据报文时,根据组成员和端口的对应关系,仅向具有组成员的端口转发组播报文。
3、当交换机收到IGMP查询消息后将向所有端口转发以维护转发项,但交换机只向路由器发送一次成员关系报告以响应查询。
这个原理看似简单,但实现起来相当复杂。首先,要求交换机具有提取第三层信息的功能;其次,要求交换机对所有的组播报文进行监听和解读,这会产生很多的无效工作;此外,监听和解读工作会占用大量的CPU处理时间。
IGMP最原始的设计是在共享介质(如Ethemet)上运行的。当用二层交换机搭建一个局域网时,许多的厂家在交换机中内嵌IGMP SNOOPING,以避免IP组播报文在所有端口泛滥。当前在局域网中,针对IPv4组播最好的经验是用IGMP Snooping来避免不必要的IPv4组播泛滥。

5、IGMP配置命令

路由器上的配置:
- 启动组播应用
    [Quidway]multicast routing-enable
- 模拟主机行为——加入一个组
    [Quidway-VLAN-interface 10]igmp host-join 225.0.0.1 port ehternet 1/1
- 指定IGMP版本号
    [Quidway VLAN-interface 10]igmp version 1
- 显示IGMP接口信息
    <Quidway>display igmp interface

 

multicast routing-enable
 undo multicast routing-enable
命令multicast routing-enable用来启动IP组播路由,命令undo multicast routing-enable用来停止IP组播路由。
igmp accept-group-policy [acl-number  [1 | 2 | port port-list ] ]
undo igmp accept-group-policy [port portlist ]
igmp accept-group-policy命令用来限制与以太网交换机接口相连的子网上的主机可以加入的组播组,undo igmp accept-group-policy命令用来取消对主机可以加入的组播组的限制。
缺省情况下,交换机不对主机可以加入的组播组进行限制。
igmp host-join group-address port port-list
 undo igmp host-join group-address port port-list
 igmp host-join命令用来配置以太网交换机的接口成为组播组成员,undo igmp host-join命令用来将接口从组播组中删隙。
igmp timer query seconds
undo igmp timer query

igmp timer query命令用来配置以太网交换机发送主机成员查询报文的时间间隔,undo igmp timer query命令用来恢复以太网交换机发送主机成员查询报文时间间隔的缺省值。
igmp max-response-time seconds
undo igmp max-response-time
 igmp max-response-time命令用来配置主机成员查询报文中包含的最大响应时间,undo igmp max-response-time命令用来恢复主机成员查询报文中包含的最大响应时间的缺省值。
igmp timer other-querier-present seconds
undo igmp timer other-querier-present
命令igmp timer other-querier-present用来设置IGMP查询器存在时间的超时值,命令undo igmp timer other-querier-present用来恢复缺省值。
igmp version {1 | 2 }
undo igmp version
igmp version命令用来配置以太网交换机运行的IGMP版本,undo igmp version命令用来恢复以太冈交换机运行的IGMP版本的缺省值。
display  igmp  group  [  group-address  I  interface  interface-type interface-number ]
显示与以太网交换机相连的组播组信息,这些组播组信息是通过IGMP得知的。
display igmp interface [ interface-type interface-number ]
显示接口上与组播相关的配置信息。
debugging igmp {all | event | host | packet | timer }
undo debugging igmp {all | event | host | packet | timer }
命令debugging igmp用来打开IGMP的调试信息开关,命令undo debugging igmp用来关闭IGMP的调试信息开关。缺省情况下,IGMP的调试信息开关是关闭的。

抱歉!评论已关闭.