新闻资讯
看你所看,想你所想

多播

多播

多播

1988年Steve Deering 首次在其博士论文中提出IP多播的概念。多播是IPv6数据包的3种基本目的地址类型之一,多播是一点对多点的通信,IPv6没有採用IPv4中的组播术语,而是将广播看成是多播的一个特殊例子。

基本介绍

  • 中文名:网际协定多播
  • 外文名:IP Multicast

简介

随着计算机网路的发展和个人计算机的普及,人们能够方便的在网路上畅游,进行网路通信或者获取自己所需的信息资源。此外,人们也越来越依赖于网路计算。大多数企业都建立了先进的网路,连线各个雇员和他们的计算机、工作站。有时,我们工作中的重要的信息只能通过网路得到,这些信息可能在企业的专用网路上,也可能在网际网路上。
网际网路是个公用的网路,连线全世界的各个大学、公司、非盈利组织、个人和政府机关。随着现在宽频的发展,诸如远程教学、视频会议、网路游戏等新兴的网际网路套用越来越受欢迎,而且有时变得很必需。这些套用涉及到点对点或者多点对多点的通信,与传统的单播或者广播有很大的不同。
1988年,Deering提出了IP多播的概念,从此IP多播技术得到了广泛的关注。多播介于单播通信和广播通信之间,它可以将传送者传送的数据包传送给位于分散在不同子网中的一组接收者。
多播的基础概念是“组”。一个多播组(multicast group)就是一组希望接收特定数据流的接收者。这个组没有物理或者地理的边界:组内的主机可以位于网际网路或者专用网路的任何地方。多播组中的每~个节点被称为多播组成员(multicastgroupmember)。
在多播的诸多套用中,均可实现单播,但是随着接收者的增多,需要传送的数据包里线性增长,对于盯个接收者,需要传送同一个数据包的n份拷贝,这样通信量就会成倍的增加,也会占用网路的许多频宽,有时会引起网路堵塞。但是多播通信IP数据包仅传送一次。路由器会自动的转发到位于不同网段上的每一个接收者,可以是在网路中传输的报文拷贝的数量最小。所以多播是很有必要的。
多播通信模型的一个关键的特性是提供了间接标识的多播组,其中传送方和接收方都不需要知道对方的具体情况。传送方只需要向一个多播地址传送分组而接收方只需要告诉网路自己希望接收传送这个地址的分组。
用户的数据要从一个终端传送到另一个终端,首先要确定传输路由,不同的通信方式,其确定路由的方式也不同。如今网路的通信方式主要有以下几种:
  • 单播(unicast:point to point),点到点的通信方式;
  • 多播(multicast:point tO multipoint),点到多点的通信方式;
  • 汇播(concast:multipoint to point),多点到一点的通信方式;
  • 群播(multipoint tO multipoint),多点到多点的通信方式,多播的一种推广;
  • 广播(broadcast:point to all point),点到所有节点的通信方式。
一般要求多播服务的业务对频宽和实时性要求较高,涉及用户较多,占用的资源也多,因此有必要最佳化多播路由。多播路由算法就是要寻求最优多播树,理想有效的路由算法将设计一棵仅覆盖多播组成员的树,并体现如下特徵:树随着组成员变化动态更新;最小化节点需要保存的状态信息量;避免链路和节点的流量集中;根据费用函式最佳化路由。

网路多播

IP多播(也称多址广播或组播)技术,是一种允许一台或多台主机(多播源)传送单一数据包到多台主机(一次的,同时的)的TCP/IP网路技术。多播作为一点对多点的通信,是节省网路频宽的有效方法之一。在网路音频/视频广播的套用中,当需要将一个节点的信号传送到多个节点时,无论是採用重複点对点通信方式,还是採用广播方式,都会严重浪费网路频宽,只有多播才是最好的选择。多播能使一个或多个多播源只把数据包传送给特定的多播组,而只有加入该多播组的主机才能接收到数据包。目前,IP多播技术被广泛套用在网路音频/视频广播、AOD/VOD、网路视频会议、多媒体远程教育、“push”技术(如股票行情等)和虚拟现实游戏等方面。
有些套用会有这样的要求:一些分布在各处的进程需要以组的方式协同工作,组中的进程通常要给其他所有的成员传送讯息。即有这样的一种方法能够给一些明确定义的组传送讯息,这些组的成员数量虽然很多,但是与整个网路规模相比却很小。给这样一个组传送讯息称为多点点播送,简称多播。
1.IP多播地址和多播组
IP多播通信必须依赖于IP多播地址,在IPv4中它是一个D类IP位址,範围从224.0.0.0到239.255.255.255,并被划分为局部连结多播地址、预留多播地址和管理许可权多播地址三类。其中,局部连结多播地址範围在224.0.0.0~224.0.0.255,这是为路由协定和其它用途保留的地址,路由器并不转发属于此範围的IP包;预留多播地址为224.0.1.0~238.255.255.255,可用于全球範围(如Internet)或网路协定;管理许可权多播地址为239.0.0.0~239.255.255.255,可供组织内部使用,类似于私有IP位址,不能用于Internet,可限制多播範围。
使用同一个IP多播地址接收多播数据包的所有主机构成了一个主机组,也称为多播组。一个多播组的成员是随时变动的,一台主机可以随时加入或离开多播组,多播组成员的数目和所在的地理位置也不受限制,一台主机也可以属于几个多播组。此外,不属于某一个多播组的主机也可以向该多播组传送数据包。
2.IP多播技术的硬体支持
要实现IP多播通信,要求介于多播源和接收者之间的路由器、集线器、交换机以及主机均需支持IP多播。目前,IP多播技术已得到硬体、软体厂商的广泛支持。
(1)主机
支持IP多播通信的平台包括Windows CE 2.1、Windows 95、Windows 98、Windows NT 4和Windows 2000等,运行这些作业系统的主机都可以进行IP多播通信。此外,新生产的网卡也几乎都提供了对IP多播的支持。
(2)集线器和交换机
目前大多数集线器、交换机只是简单地把多播数据当成广播来传送接收,但一些中、高档交换机提供了对IP多播的支持。例如,在3COM SuperStack 3 Swith 3300交换机上可启用802.1p或IGMP多播过滤功能,只为已侦测到IGMP数据包的连线埠转发多播数据包。
(3)路由器
多播通信要求多播源节点和目的节点之间的所有路由器必须提供对Internet组管理协定(IGMP)、多播路由协定(如PIM、DVMRP等)的支持。
当一台主机欲加入某个多播组时,会发出“主机成员报告”的IGMP讯息通知多播路由器。当多播路由器接收到发给那个多播组的数据时,便会将其转发给所有的多播主机。多播路由器还会周期性地发出“主机成员查询”的IGMP讯息,向子网查询多播主机,若发现某个多播组已没有任何成员,则停止转发该多播组的数据。此外,当支持IGMP v2的主机(如Windows 98/2000计算机)退出某个多播组时,还会向路由器传送一条“离开组”的IGMP讯息,以通知路由器停止转发该多播组的数据。但只有当子网上所有主机都退出某个多播组时,路由器才会停止向该子网转发该多播组的数据。
使用多播路由协定,路由器可建立起从多播源节点到所有目的节点的多播路由表,从而实现在子网间转发多播数据包。例如,PIM(协定独立多播)就是一种多播路由协定,它有两种类型:稀疏模式(sparse-mode)和密集模式(dense-mode)。以Cisco 2621路由器为例,启用IP多播转发功能的基本设定如下:
c2621(config)# ip multicast-routing 启动IP多播,使路由器成为一个多播路由器
c2621(config)# int f0/0 配置快速乙太网连线埠0
c2621(config-if)# ip pim dense-mode(或sparse-mode)启动PIM,同时激活IGMP协定
c2621(config-if)# int f0/1 配置快速乙太网连线埠1
c2621(config-if)# ip pim dense-mode(或sparse-mode)

编程方法

在实际套用中,编程人员通常需要自己编制底层网路应用程式来实现网上的底层通信,如具体实现IP多播通信的功能。编制底层网路应用程式通常要藉助于网路数据通信编程接口,而在不同的作业系统中所提供的网路编程接口是有所不同的,如在Microsoft Windows环境下的网路编程接口就是Windows套接字(Windows Socket,简称Winsock)。
Winsock提供了包括TCP/IP、IPX等多种通信协定下的编程接口。不同的Windows版本支持不同的Winsock版本,其中Windows 95等早期版本本身只支持Winsock1.1(16位)下的编程(可以通过安装相关的软体包使其支持Winsock2.0),而Windows98、Windows NT4.0、Windows 2000则直接支持Winsock2.0(32位)。Winsock2.0是Winsock1.1的扩展,除兼容Winsock1.1 API外,还定义了一套可支持IP多播的与协定无关的API。
使用Winsock 2.0实现IP多播的一般步骤如下:
1.初始化Winsock资源
在使用Winsock之前,必须调用WSAStartup()函式初始化Windows Sockets DLL。它允许应用程式或DLL指定Windows Sockets API要求的版本。
2.创建套接字
调用WSASocket()函式可以创建一个使用UDP协定的套接字,它是加入多播组的初始化套接字,并且以后数据的传送和接收都在该套接字上进行。针对IP多播通信,可将参数dwFlags设定为WSA_FLAG_MULTIPOINT_C_LEAF、WSA_FLAG_MULTIPOINT_D_LEAF和WSA_FLAG_OVERLAPPED的位和,指明IP多播通信在控制层面和数据层面都是“无根的”,只存在叶节点,它们可以任意加入一个多播组,而且从一个叶节点传送的数据会传送到每一个叶节点(包括它自己);创建的套接字具有重叠属性。
3.设定套接字的选项
调用setsockopt()函式为套接字设定SO_REUSEADDR选项,以允许套接字绑扎到一个已在使用的地址上。
4.绑定套接字
调用bind()函式绑定套接字,从而将创建好的套接字与本地地址和本地连线埠联繫起来。对于多播通信来说,传送和接收数据通常採用同一个连线埠。
5.设定多播套接字的模式
WSAIoctl()函式的命令码SIO_MULTICAST_LOOP用来允许或禁止多播通信时传送出去的通信流量是否也能够在同一个套接字上被接收(即多播返回)。值得注意的是,在Windows 95/98/NT 4中,默认是允许多播返回,但不能设定禁止,否则会出错;只有在Windows 2000以上版本中,才能设定允许/禁止多播返回。
WSAIoctl()函式的命令码SIO_MULTICAST_SCOPE用来设定多播传播的範围,即生存时间TTL。每当多播路由器转发多播数据包时,数据包中的TTL值都会被减1,若数据包的TTL减少到0,则路由器将抛弃该数据包。TTL的值是多少,多播数据便最多能经过多少个多播路由器。例如,TTL值为0,则多播只能在本地主机的多个套接字间传播,而不能传播到“网线”上;TTL值为1(默认值),则多播数据遇到第一个路由器,便会被它“无情”地丢弃,不允许传出本地网路之外,即只有同一个网路内的多播组成员才能收到多播数据。
在c#中一般的代理实例(指一个代理仅可以调用一个方法)被默认为Delegate类的对象,所以通常使用delegate关键字来定义代理,利用new运算符来创建代理实例,然后使用Delegate类的方法和属性管理代理实例。而MulticastDelegate类是用来支持多重代理的,其调用列表中可以拥有多个方法的代理。
多重代理是指将一组代理组成一个集合,由MuticastDelegate类的一个对象来管理这个代理集合,利用这个代理集合执行多个方法,这个功能叫多播。

转载请注明出处累积网 » 多播

相关推荐

    声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com