实验十三组播通信

实验十三组播通信

ID:30884847

大小:64.00 KB

页数:5页

时间:2019-01-03

上传者:U-991
实验十三组播通信_第1页
实验十三组播通信_第2页
实验十三组播通信_第3页
实验十三组播通信_第4页
实验十三组播通信_第5页
资源描述:

《实验十三组播通信》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

实验十三组播通信§1.1实验目的理解组播通信的概念及原理,比较组播通信方式和通常的单播通倍方式有何不同。理解组播通信的实现,通过编制简单的利用组播方式通信的应用程序来加深对组播的理解。§1.2实验原理1.组播介绍IP纽播(组播)技术,是一种允许一台或多台主机(纟R播源)发送单一数据包到多台主机的TCP/IP网络技术。组播作为一点对多点的通倍,是节省网络带宽的有效方法之一。在网络音频/视频广播的应用屮,当需要将一个节点的信号传送到多个节点吋,无论是釆用重复点对点通信方式,还是采用广播方式,都会严重浪费网络带宽,只有组播才是最好的选择。纽播能使一个或多个纽播源只把数据包发送给特定的纽播纽,而只有加入该纽播纽的主机才能接收到数据包。2.组播地址IP组播通信必须依赖于组播地址,在IPv4屮它是一个D类IP地址,范用从224.0.0.0到239.255.255.255,并被划分为局部链接组播地址、预留组播地址和管理权限组播地址三类。其中,局部链接组播地址范围在2240().0〜224.().0.255,这是为路由协议和其它用途保帘的地址,路由器并不转发属于此范围的IP包;预留组播地址为224.0.1.0〜238.255.255.255,可用于全球范围(如Internet)或网络协议;管理权限组播地址为239.0.0.0〜239.255.255.255,可供组织内部使用,类似于私有1P地址,不能用于Internet,可限制组播范围。使川同一个1P组播地址接收组播数据包的所冇主机构成了一个主机组,也称为组播组。一个组播组的成员是随时变动的,一台上机可以随时加入或离开组播组,纟F1播纽•成员的数目和所在的地理位置也不受限制,一台主机也可以属于儿个组播组。此外,不属于某一个组播组的主机也可以向该组播组发送数据包。3.组播的工作过程在局域网内,主机的网络接口将到口的主机的数据包发送到高层,这些数据包屮的目的地址是物理接口地址或广播地址。如果主机己经加入到一个组播组中,主机的网络接口就会识别出发送到该组成员的数据包。因此,如果主机接口的物理地址为80:C0:F6:A0:4A:Bl,其加入的组播组为224.0.1.10,则发送给主机的数据包中的目的地址必是下面三种类型之一:接口地址:80:C0:F6:A0:4A:Bl广播地址:FF:FF:FF:FF:FF:FF:FF:FF组播地址:01:00:5E:00:01:0A(组播地址如何映射到MAC层地址可以参见RFC1112。)广域网小,路由器必须支持组播路由。当主机屮运行的进程加入到某个组播组小时,主机向子网中的所有组播路山器发送IGMP(Internet分组管理I办议)报文,告诉路山器凡是发送到这个组播组的组播报文都必须发送到木地的了网中,这样主机的进程就口J以接收到报 文了。子网中的路由器再通知其它的路由器,这些路由器就知道该将组播报文转发到哪些子网中去。子网中的路由器也向224.0.0」发送一个IGMP报文(22400」代表组中的全部主机),要求组中的主机提供组的相关信息。组中的主机收到这个报文后,都各将计数辭的值设为随机值,当计数器递减为0时再向路由器发送应答。这样就防止了组中所冇的主机同时向路由器发送应答,造成网络拥塞。主机向组播地址发送一个报文做为对路由器的应答,组中的其它主机一旦看到这个应答报文,就不再发送应答报文了,因为组中的主机向路山器提供的都是相同的信息,所以子网路由器只需得到组中一个主机提供的信息就可以了。如果组屮的主机都退出了,路由器就收不到应答,因此路由器认为该纟R目前没有主机加入,遂停止到该子网报文的路由。IGMPv2的解决方案是:组小的主机在退出时向224.0.0.2发送报文通知组播路由器。1.应用编程接口(API)如果你有套接字编程的经验,就会发现,对纽播选项所进行的操作只需五个新的套接字操作。函数setsockoptO及getsockopt()ffl来建立和读取这五个选项的值。下表屮列岀了组播的可选项,并列出其数据类型和描述:描述加入到组播组中从组播组中退出指定提交组播报文的接口指定提交组播报文的TTL使组播报文环路有效或无效IPv4选项数据类型IP_ADD_MEMBERSHIPstructip_mieqIP_ROP_MEMBERSHIPstructip_mreqIP_MULTICAST_IFstructip_mreqIP_MULTICAST_TTLu_charIP_MULTICAST_LOOPu_char在<linux/in.h>头文件中定义了ip_mreq结构:structip_mreq{structin_addrimr_multiaddr;/*IPmulticastaddressofgroup*/structinaddrimrinterface;/*localIPaddressofinterface*/};在头文件中组播选项的值为:#defineIP_MULTICAST_IF32#define1P_MULT1CAST_TTL33#defineIP_MUET1CAST_LOOP34#defineIP_ADD_MEMBERSHIP35#dcfincIP_DROP_MEMBERSHIP361P_ADD_MEMBERSH1P若进程要加入到一个组播组中,用soket的setsockopt()函数发送该选项。该选项类型是ip_mreq结构,它的笫一个字段imr_multiaddr指定了组播组的地址,第二个字段imrjnterface指定了接口的IPv4地址。IP_DROP_MEMBERSHIP该选项用来从某个组播组中退出。数据结构ip-nireq的便用方法与上面相同。IP_MULTICAST_IF该选项TJ以修改网络接口,在结构ip_mreq中定义新的接口。IP_MULTICAST_TTL设置组播报文的数据包的TTL(生存时间)。默认值是1,表示数据包只能在本地的子网中传送。IP_MULTICAST_LOOP 纽播组屮的成员白己也会收到它向本纽发送的报文。这个选项川于选择是否激活这种状态。1.一个简单的组播通信例子卜面给出Linux下的一个简单的例子实现简单的纽•播通信:rfl—•个进程向-•个组播组发送报文,组播组中的相关进程接收报文,并将报文显示到屏幕上。下面的代码实现了一个服务进程,它将标准输入接口输入的信息全部发送到组播组224.0.1.1o你会发现,将信息发送到组播组不需要特别的操作,只要设置好组播组的目的地址就足够了。若在实验过程中,Loopback和TTL这两个选项的默认值不适合应用程序,可以加以调整。服务程序将标准输入端M的输入发送到组播组224.0.1.1o#include#include#include#include#include#include#defineMAXBUF256#definePUERTO5000#defineGRUPO“224.0.1.1”intmain(void){ints;structsockaddr_insrv;charbufLMAXBUFJ;bzero(&srv,sizeof(srv));srv.sin_family=AF_INET;srv.sin_port=htons(PUERTO);讦(inct_aton(GRUPO,&srv.sin_addr)<0){perror(Hinet_aton”);return1;}if((s=socket(AF_INET,SOCK_DGRAM,()))<0){pcrror(MsockctH);return1;}while(fgets(buf,MAXBUF,stdin)){if(sendto(s,buf,strlen(buf),(),(structsockaddr*)&srv,sizcof(srv))<0){penDrCTecvfrom”);}else{fprintf(stdout,MEnviadoa%s:%s蔦GRUPO,buf);客户端程序 下面的代码是客八端程序,它负责接收山服务程序发送到组播组中的信息,将收到的报文在标准输出设备中显示。程序屮唯一与接收UDP报文过程不同是它设宜了IP_ADD_MEMBERSHIP选项。#include#include#include#include#include#defineMAXBUF256#dcfincPUERTO5000#defineGRUPO“224.0.1.1”intmain(void){ints,n,r;structsockaddr_insrv,cli;structip_mrcqmrcq;charbuf[MAXBUF];bzero(&srv,sizeof(srv));srv.sin_family=AF_INET;srv.sin_port=htons(PUERTO);讦(inct_aton(GRUPO,&srv.sin_addr)<0){perror(Minet_aton”);return1;}if((s=socket(AF_INET,SOCK.DGRAM,0))<0){perror(nsocketM);return1;}if(bind(s,(structsockaddr*)&srv,sizeof(srv))<0){perror("bindn);return1;}if(inet_aton(GRUPO,&mreq.imr_multiaddr)<0){perror(Minet_atonM);return1;}mreq.imr_interface.s_addr=htonl(INADDR_ANY);讦(setsockopt(s,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq))<0){perror(Msetsockoptn);return1;}n=sizeof(cli);while(1){讦((r=rccvfrom(s,buf,MAXBUF,0,(structsockaddr*)&cli,&n))<0){perror(MrecvfromM); }else{buf[r]=0;fprintf(stdout,nMensajedesde%s:%sitinet_ntoa(cli.sin_addr),buf);§1.3实验要求编写一个使用组播的应用程序。包括1个组播发送程序,和组播接收程序。实现服务器端输入信息,通过组播发送给客户端。要给出程序详细的流程图和对程序的详细介绍、说明;指出白己设计的得意z处或有想法但没有完成的地方(若独到之处可以加分)。§1.4思考题1.思考组播通信较z单播通信的优缺点,考虑可以使用组播通信的场合,举例说明。2.考虑组播通信在发送和接受数据的安全性方面的问题。(如,任意用户可以向指定的组播地址发送T•挠数据,没有授权的用户可以毫无限制的接受组播数据等)3.近儿年,应用层组播技术研究得比较多。查看相关文档,了解应用层组播,解释为什么要用应用层组播而不是IP组播(即应用层组播相对于1P组播的优点)。杏看RFC1112,了解多播地址映射到以太网地址的规则并作简要说明。将以下多播地址映射为以太网地址并说明理由:224」28.64.32,224.0.64.32,224.0.1.5,224.10.5.4。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭