第七部分网络编程第一第28讲多播组播_第1页
第七部分网络编程第一第28讲多播组播_第2页
第七部分网络编程第一第28讲多播组播_第3页
第七部分网络编程第一第28讲多播组播_第4页
第七部分网络编程第一第28讲多播组播_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第28讲 多播(组播)网络通讯的群聊方法讲师:Gamebaby Rock Sun第28讲 主要内容1.组播原理2.有根组播/无根组播3.支持组播协议的判定4.IP组播及原理5.IGMP简介6.组播编程一般方法7.setsockopt方式组播8.WSAIoctl源过滤组播及组播炸弹预防9.WSAJoinLeaf方式组播引言传统的SOCKET广播通讯方式类似于村村通大喇叭广播系统,对于处于同一子网的所有计算机来说,这种方式不管接收端是否愿意都会将包发给每个终端机.显然广播方式虽然可以简单的进行一对多通讯,但是对资源的浪费却是相当严重的.甚至一些恶意软件利用这个特性,疯狂向网络广播数据,最终使得网络

2、瘫痪,这也被称为广播风暴.而多播(组播)技术是一种让数据从一个组内成员发出,然后复制给其它组内成员的通讯技术.多播(组播)技术很好的解决了广播风暴的问题(非组内成员不会接到数据),同时也很好的实现了一点对多点通讯功能的需求(相当于建立一个群,群聊信息只有群成员可见).(注意本教程中为了简化叙述,后面一律采用组播这种比较流行的译法,英文原文为Multicasting)组播原理组播通讯有两个层面的属性:控制层面(Control Plane)定义了组成员的组织方式;数据层面(Data Plane)决定了在不同的组成员之间,数据如何传播根据两层属性的具体实现方式不同,组播网络主要有两种组织方式:有根组

3、播(Rooted)无根组播(Non-Rooted)有根组播在有根组播的控制层中,有一个特殊成员,称为c_root(控制根,或根节点).其余的节点都叫做c_leaf(控制叶或叶节点)有以上两个描述可知最终有根组播组成了一个树形结构进行组通讯c_root节点负责多播组的建立,其间可建立同任意数量的c_leaf的连接c_leaf节点可以在组建立后任何时刻申请加入一个组播组中(成为正式成员)(目前实现有根组播的网络协议是ATM协议,因在国内该协议不常见,所以本课程不再过多介绍)有根组播示意图c_rootc_leaf1c_leaf2c_leaf3无根组播在无根的组播控制层中,任何一个节点之间关系都是平等

4、的,即不存在控制层上最高的根节点.任意一个节点都可以随意加入一个组(甚至是空组).在无根组中,任何节点都是一个c_leaf叶节点.目前实现无根组播的协议主要是IP协议.在IP协议基础上主要实现了组播协议和可靠组播协议两种.无根组播示意图c_leaf4c_leaf1c_leaf2c_leaf3多播组数据层的有根与无根与控制层的情形相似,在数据层也有有根方式与无根方式在有根的数据层传输中,也存在一个称为d_root的数据传输根节点,对应的其它节点称为d_leaf节点从d_root传出的数据可以被所有的d_leaf节点收到而d_leaf只能向d_root传输数据而在无根的数据层中,所有节点都是平等的

5、,一个节点发出的信息可以被所有组员都收到,甚至是自己(回播)同样的,对于有根数据层传输来说,目前只有ATM协议实现了这种方式,而无根传输则主要基于IP协议实现判定某协议是否支持组播在前述调用WSAEnumProtocols函数枚举系统中安装的协议例子中,通过返回的WSAPROTOCOL_INFO结构中的信息即可判定某个协议是否支持组播具体判定方法如下:if(XP1_SUPPORT_MULTIPOINT & pProtocoli.dwServiceFlags1) GRS_PRINTF(_T(tt支持多播(组播)n);IP组播组播地址要使用IP协议进行组播,那么就需要使用一组特殊的地址,这组地址称

6、为组播地址进行组播时,组播地址就相当于一个组的名称如果多个节点想进行组播,那么就可以加入同一个组播地址进行群聊当节点全部加入组后,其中任一节点发出的数据都会为每一个节点复制一份然后发送给各个节点(也可以包括自己)在IPv4中,组播地址是一个D类IP地址,范围在224.0.0.0到239.255.255.255之间在IPv6中,组播地址以前缀0 xFF (11111111)开始(关于IPv6将放在下一将详细讲解)在实际应用中,IPv4的一些D类地址是被保留的.用于特殊用途.保留的IPv4组播地址组播地址用途224.0.0.0基本地址(保留,不要使用)224.0.0.1子网内所有节点224.0.0

7、.2子网内所有路由器224.0.1.1网络时间协议224.0.0.9RIP V2组地址(路由协议)224.0.1.24WINS服务器组地址IGMP在最初的IP协议族中,并没有考虑对组播协议的支持后来为了支持组播协议,对IP协议族进行了很多修改和扩展其中最重要的扩展就是IGMP协议,用于管理组播协议在IP协议上的行为目前IGMP的版本是IGMP V3引入IGMP的真正目的是为了告诉路由器,子网内的某个节点想要加入某个组播组中最终可靠的组播必须依赖IGMP来完成组员间的通讯组播与广域网如果要想在广域网上对多个节点进行组播通讯,那么就需要所有节点所在子网间的路由等网络设备能够支持IGMP协议如果某个

8、路由不支持IGMP协议,那么当它接收到组播地址的通讯数据包时,就会简单丢弃了事,这样就无法完成夸多个子网间的组播通讯因此必须判定路由是否支持IGMP协议但是对于复杂的广域网来说,并不是所有的网络设备都支持组播(有些设备本身是支持IGMP的,但是可能网络管理员硬性的关闭了IGMP的支持)所以最终在广域网上实现组播是一项非常复杂和具有挑战性的工作(通常无法实现)组播的编程方法在Winsock中共有三种不同的方法来实现组播编程:调用setsockopt实现组播调用WSAIoctl实现组播调用WSAJoinLeaf实现组播setsockopt组播利用IPPROTO_IP选项级别的IP_ADD_MEMB

9、ERSHIP和IP_DROP_MEMBERSHIP选项可以加入或退出一个组播组这两个选项都需要一个ip_mreq结构体参数:typedef struct ip_mreq struct in_addr imr_multiaddr; struct in_addr imr_interface; IP_MREQ, *PIP_MREQ;其中imr_multiaddr就是组播地址,imr_interface就是本地的IP地址和端口setsockopt组播示例WSAIoctl组播WSAIoctl组播在调用的方法上与setsockopt比较类同,只是这个函数比setsockopt多了一个选项,用于带有源过滤功

10、能的组播源过滤功能就是指在加入一个组时,指定一系列的源地址,只有这些源地址的组播数据被接收或被拒绝带源过滤功能的组播协议需要IGMPv3的支持,这个功能主要用来防止IGMP炸弹式攻击在WSAIoctl中带源过滤功能组播选项是SIO_SET_MULTICAST_FILTER和SIO_GET_MULTICAST_FILTER它们都需要一个IP_MSFILTER结构体来工作:typedef struct ip_msfilter struct in_addr imsf_multiaddr; struct in_addr imsf_interface; u_long imsf_fmode; u_long

11、 imsf_numsrc; struct in_addr imsf_slist1; IP_MSFILTER, *PIP_MSFILTER;WSAJoinLeaf组播在Winsock2中引入了一个独立于协议为目的的组播专用函数WSAJoinLeafSOCKET WSAJoinLeaf(SOCKET s,const struct sockaddr* name,int namelen,LPWSABUF lpCallerData,LPWSABUF lpCalleeData,LPQOS lpSQOS,LPQOS lpGQOS,DWORD dwFlags);其中name指出要加入的组播地址dwFlags是

12、一个收发组内数据的标志,JL_SENDER_ONLY表示只向组内发送数据,JL_RECEIVER_ONLY表示只接收组内数据,JL_BOTH则表示同时收发数据lpCallerData和lpCalleeData两个参数用于指定当加入组成功后向组内直接发送的数据和接收数据的缓存,这两个参数可以为NULLlpSQOS和lpGQOS则是在支持QoS的组播协议上申请QoS服务的结构指针,通常也可以设置为NULL基于IP组播和WSAJoinLeaf的编程过程对于基于IP协议的组播,首先用WSASocket创建一个基于UDP协议的SOCKET句柄(隐含意思是IP组播基于UDP方式工作)并指定标志WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论