第9章-IP多播和网际组管理协议课件

上传人:m**** 文档编号:568322288 上传时间:2024-07-24 格式:PPT 页数:42 大小:556KB
返回 下载 相关 举报
第9章-IP多播和网际组管理协议课件_第1页
第1页 / 共42页
第9章-IP多播和网际组管理协议课件_第2页
第2页 / 共42页
第9章-IP多播和网际组管理协议课件_第3页
第3页 / 共42页
第9章-IP多播和网际组管理协议课件_第4页
第4页 / 共42页
第9章-IP多播和网际组管理协议课件_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《第9章-IP多播和网际组管理协议课件》由会员分享,可在线阅读,更多相关《第9章-IP多播和网际组管理协议课件(42页珍藏版)》请在金锄头文库上搜索。

1、1第9章 IP多播和网际组管理协议教师:张宝军2主要内容IP多播概述网际组管理协议多播路由选择基于多播的应用编程3学习目标理解IP多播的基本原理。掌握网际组管理协议IGMP。了解常见的多播路由选择算法。掌握基于WinSock 2的多播应用程序设计方法。4IP多播概述IP网络数据传输的传输方法单播(Unicast)传输:在一台源主机和一台目的主机之间建立点对点的网络连接。如果一个源主机需要同时给多个目的主机发送相同的数据,则必须复制多份相同数据包,并分别对不同的目的主机进行传输。这将浪费大量的带宽,也增加了网络服务设备的负载。 广播(Broadcast)传输:是指在同一IP子网内广播数据包,即一

2、台源主机可以向同一子网内的所有主机或设备发送同一个数据包。这种方法传输方式不仅会将信息发送给不需要的主机而浪费带宽,也可能由于路由回环而引起严重的广播风暴,并且广播的使用范围非常小,只在本地子网内有效。多播(Multicast)传输:在一台源主机和一组目的主机之间建立单点对多点的网络连接。如果一台源主机同时给多个目的主机传输相同的数据,也只需发送一份相同数据包,提高了数据传送效率,减少了骨干网络出现拥塞的可能性,较好地解决了单点发送多点接收的问题。5IP多播网络体系结构多播的工作原理6IP多播网络体系结构实现IP多播的前提条件主机的网络接口支持多播,同时主机上的TCP/IP支持发送和接收IP多

3、播数据包。有一套用于加入、离开、查询的组管理协议,如IGMP(v1,v2,v3)。有一套IP地址分配策略,并能将IP多播地址映射为MAC地址。支持IP多播的应用软件。所有介于多播源和接收者之间的路由器、集线器、交换机均需支持多播;7网际组管理协议网际组管理协议(Internet Group Management Protocol,IGMP)用于多播路由器和主机之间进行群组关系的管理,其运行于主机和与主机直接相连的多播路由器之间。主机通过此协议告诉本地路由器希望加入某个特定多播组,同时路由器通过此协议周期性地查询局域网内某个已知组的成员是否处于活动状态(即该局域网是否仍有属于某个多播组的成员),

4、进行所连网络组成员关系的收集与维护。IGMP目前有3个版本,IGMPv1(RFC1112)、IGMPv2(RFC2236)和IGMPv3(RFC3376)。8网际组管理协议IGMP报文9网际组管理协议IGMP报文类型:定义了报文的类型,针对IGMPv3来说,只有成员关系查询报告和成员关系报告最大响应代码:只用于查询报文,规定了发送一个查询报文的最大响应时间,以1/10秒为单位。在其他报文中,它由发送方置0,而在接收方被忽略。校验和:在计算校验和之前,该字段首先清0。在网络传输数据包时,计算校验和并写入该字段,当数据包到达时重新计算校验和,若两次计算结果不匹配则表示有错误。群组地址:在一般查询报

5、告报文中该字段的值置为0,而在特定群组查询报文、群组关系报告和退出群组报文中,该字段用来定义群组地址。禁止路由器处理标志位(S):当该值置1的时候,表明发出该报文的设备扮演的是路由器角色,所有收到此报文的其他路由器都不应该启动定时刷新器,即禁止处理该报文,但这并不影响主机发送报文。10网际组管理协议IGMP报文查询间隔时间(QQIC):用来规定查询间隔,单位是秒(s)。源地址数量:用来设定源地址的数量。源地址列表:用来具体列出指定的源地址。组记录数量:用来标明在报告中存在多少个组记录。组记录:每一个组记录字段是一整块数据,其含有的信息是关于发送者在报告发送接口上的某一个多播组的成员关系。组记录

6、类型:用来描述不同类型的组记录。主要包括如下类型:当前状态记录、过滤模式改变记录和源列表改变记录。辅助数据长度描述在组记录中的辅助数据的实际长度,其单位是32bit。它有可能是0,这就表示辅助数据不存在。辅助数据,用于存放辅助数据为将来应用预留空间,IGMPv3并不需要。11网际组管理协议IGMP报文封装12网际组管理协议IGMP操作加入多播组:主机和路由器都可以加入一个多播组。当某个主机中的一个进程申请加入一个多播组时,主机将发送一个成员关系报告报文到它所在的IP子网的多播路由器上;路由器接收到该申请后将检查它的群组成员关系表,看该主机是否已经在群组中。如果该主机不在群组关系表中(即第一次申

7、请),随即将自己的IP模块做相应的准备,以便开始接收来自该多播组传来的数据。如果这台主机是它所在的IP子网中第一台加入该多播组的主机,则多播路由器将通过路由信息的交换加入多播分布树。13网际组管理协议IGMP操作退出多播组:当主机发现在一个特定的多播组中已经没有进程时,就发送退出报告。多播路由器收到退出报告后,并不立即删除这个群组,而是针对该群组发送查询报文。当在指定的时间内没有收到相关主机(和路由器)对该群组的成员关系报告时,就意味着在本网络上已经没有该群组成员,此时,多播路由器将删除该群组。否则继续保留该群组。14网际组管理协议IGMP操作查询成员关系:由于多播组中的成员关系是动态变化的,

8、并且有些变化是由于异常事件而引起的,例如某个群组的某台成员主机因异常而关机,此时多播路由器将永远接收不到其退出报告。为了实时掌握群组的成员组成,IGMP提供了一种机制来监控其某个网络上的所有主机和路由器,以便确定群组和主机或路由器之间的关系。15多播路由选择在多播模型中,多播源向某一多播组地址传递IP数据报,并且多播地址代表着一个主机组。因此,传统的路由器不能胜任多播路由操作,于是多播路由器应运而生。多播路由器的作用是完成多播数据报的转发,它有两种实现方式:一种是专用多播路由器,另一种是在传统路由器上实现多播路由的功能。16多播路由选择单播路由选择是选择一条从信源到信宿的最佳传播路径,而多播地

9、址代表的是一个主机组,因此,多播路由选择实际上就是要找出以源主机为根节点的多播转发树,主机组中的主机位于该多播转发树的叶子节点,中间节点有多播路由器构成。17多播路由选择单播路径与多播转播树18多播路由选择多播转播树有源树 有源树也称为基于信源的树或最短路径树(Shortest Path Tree,SPT)。它是以多播源为根构造的从根到所有接收者路径都最短的转播树。如果多播组中有多个多播源,则必须为每个多播源构造一棵多播树。19多播路由选择多播转播树共享树 由于有源树必须为每个多播源都构造一个多播转播树,造成了一定的资源浪费。为此,人们引入了共享树的概念,即为每个多播组指定一个共享的汇集点(R

10、endezvous Point,RP)作为树的根节点,在此基础上建立的多播转播树。汇集点一般是多播路由器。这样,任何一个信源要向多播组发送数据报时,首先采用单播方式将该数据报传递到汇集点RP,然后由RP多播到多播组的每个叶子节点(主机)。由于多播数据报和单播数据报在构成上存在区别,因此由信源到RP的单播数据传送一般需要采用隧道技术,即对多播数据报进行再次封装,加上普通数据报首部后使其成为向单一目的站发送的单播数据报,通过隧道发送到汇集点RP,RP接收到该数据报后进行拆封成多播数据报在多播组中进行传输20多播路由选择多播转播树共享树 21多播路由选择多播路由算法基于链路状态的多播路由算法基于链路

11、状态的多播路由算法对链路状态路由算法进行了扩展,将特定链路上的所有多播成员加入到多播路由器的链路状态中,这样通过多播路由器之间定期的链路状态信息交换可使每个多播路由器都存储了多播成员的分布信息。同样利用Dijkstra算法便可以构造出最短路径多播转发树。其中多播发送源和多播组成员分别作为树的根和叶。该树存储了将多播数据报从发送源传递到各多播组成员的路径。特定链路上多播成员的信息由多播路由器都通过IGMP周期性地收集。对每一个发送源和多播目的组来说这个树都是分别计算的。因此,为了减少计算量并有效使用计算结果,多播路由器只需要在它接收到第一个多播数据报时才计算多播转发树。一旦这棵树被计算出来,其信

12、息就被存储下来用于后继数据报的路由。22多播路由选择多播路由算法基于距离向量的多播路由算法基于距离向量的多播路由首先要解决的是如何将多播数据报广播到各多播组的主机中。为此,引入了基于逆向路径的泛洪转发技术(Reverse Path Forward,RPF)。由于多播源是向多播组发送数据报而非单播模型中的具体目标主机,所以多播路由器不能依靠IP数据报中的目标地址来决定如何转发数据报,而必须将多播数据报转发到多个外部接口上,以便使同一多播组的成员都能接收到数据报,即采用泛洪的转播方法(也就是广播)。为了避免兜圈子,引入了逆向路径转发机制作为多播转发的基础。23多播路由选择多播路由算法基于距离向量的

13、多播路由算法24多播路由选择多播路由算法基于距离向量的多播路由算法逆向路径转发的基本思想是:当多播数据报到达多播路由器时,路由器作RPF检查,以决定是否转发或抛弃该数据报,若成功则转发,否则抛弃。 RPF检查过程如下: 检查数据报的源地址,以确定该数据报经过的接口是否在从源到此路由器的最短路径上;若数据报是从源到此路由器的最短路径上,则RPF检查成功,转发该数据报到多播路由器输出接口表上的所有接口,否则RPF检查失败,抛弃该数据报。25多播路由选择多播路由算法协议无关多播路由算法多播路由器直接使用PIM协议消息Jiont和Prune明确地加入或退出多播组,进而来构造和维护多播转发树。当然,首先

14、需要为每个多播组指定一个汇集点RP,然后希望加入该多播组的多播路由器可以通过向RP发送Joint消息来申请加入多播组,且该消息是以单播方式传送。以此方式,所有需要加入多播组的多播路由器都可以向RP发送Joint消息,根据该消息的单播传送路径便可以构造出该多播组的多播转发树共享树。26多播路由选择多播路由算法协议无关多播路由算法27多播路由选择多播路由协议多播开放最短路径优先协议多播开放最短路径优先(Multicast Open Shortest Path First,MOSPF)协议是对单播OSPF协议的扩展,为单路由域的多播使用而设计。其使用基于链路状态的多播路由选择算法创建出有源多播树。2

15、8多播路由选择多播路由协议距离向量多播路由协议距离向量多播路由协议(Distance Vector Multicast Routing Protocol,DVMRP)由单播路由协议(RIP)扩展而来,两者都使用距离向量算法得到网络的拓扑信息,不同之处在于RIP根据路由表前向转发数据,而DVMRP则是基于RPF。另外,DVMRP使用跳数作为计量尺度,其上限为32跳,这对网络规模也是一个限制。29多播路由选择多播路由协议有核树多播路由协议有核树多播路由协议(Core Based Tree,CBT)的主要目标是减少网络中路由器的多播状态,以提高多播的可扩展性。为此,CBT被设计成稀疏模式,CBT使用

16、核心路由器作为转发树的根节点,CBT为每个多播组建立一个生成树,所有多播源使用同一棵多播树,即共享树。树的建立采用协议无关多播路由算法。30多播路由选择多播路由协议协议无关多播密集模式协议协议无关多播密集模式协议(Protocol Independent Multicast-Dense Mode,PIM-DM)有点类似于DVMRP,这两个协议都使用了RPF来构建分布树。它们之间的主要不同在于PIM-DM协议不依赖于单播路由算法而DVMRP依赖于某个相关的单播路由算法,并且PIM-DM协议比DVMRP简单。DVMRP在树构建阶段能够使用单播协议提供的拓扑数据有选择性地向下行发送数据报,PIM-D

17、M则更加倾向于简单性和独立性,甚至不惜增加数据包复制引起额外开销。适用于组成员分布非常集中的场合。31多播路由选择多播路由协议协议无关多播稀疏模式协议协议无关多播稀疏模式协议(Protocol Independent Multicast-Sparse Mode ,PIM-SM),该协议使用与CBT相同的多播转发树构造方式,但它不局限于通过共享树转播多播数据报,还提供从共享树向特定源树的转换的机制,进而减少了网络延迟以及在RP上可能出现的阻塞,但这种转换耗费了相当多的路由器资源,所以它适用于有多对多播数据源和网络组数目较少的环境。32基于多播的应用编程支持多播的应用程序接口: 加入一个多播组;

18、离开一个多播组; 为调整范围对一个多播数据的IP 数据报中的TTL值进行设定; 为多播传输和接收设定本地的接口; 禁止输出多播数据回送。33基于多播的应用编程支持多播的应用程序接口: 34基于多播的应用编程使用WinSock 2实现IP多播应用程序开发的一般步骤初始化WinSock资源/初始化WinSock 2资源,检查系统是否安装了WinSock 2以上版本wVersionRequested = MAKEWORD(2,2);err = WSAStartup(wVersionRequested, &wsaData);35基于多播的应用编程使用WinSock 2实现IP多播应用程序开发的一般步骤

19、创建套接字Sock = WSASocket ( AF_INET,SOCK_DGRAM,IPPROTO_UDP, (LPWSAPROTOCOL_INFO)NULL,0, WSA_FLAG_OVERLAPPED| WSA_FLAG_MULTIPOINT_C_LEAF| WSA_FLAG_MULTIPOINT_D_LEAF);36基于多播的应用编程使用WinSock 2实现IP多播应用程序开发的一般步骤创建套接字bFlag=TRUE;err = setsockopt(Sock,SOL_SOCKET,SO_REUSEADDR,(char*)&bFlag,sizeof(bFlag);local.sin_

20、family = PF_INET;local.sin_port = htons(USHORT) m_nPort);local.sin_addr.s_addr = htonl(INADDR_ANY);err = bind(Sock,(struct sockaddr FAR *)&local,sizeof(local);37基于多播的应用编程使用WinSock 2实现IP多播应用程序开发的一般步骤创建套接字/设置多播数据报传播范围(生存时间TTL)err = WSAIoctl(Sock,SIO_MULTICAST_SCOPE,&m_nTTL, sizeof(m_nTTL),NULL,0,&cbRe

21、t,NULL,NULL);/设置多播返回(LOOKBACK)err = WSAIoctl(Sock,SIO_MULTIPOINT_LOOPBACK,&nLoopBack, sizeof(nLoopBack),NULL,0,&cbRet,NULL,NULL);38基于多播的应用编程使用WinSock 2实现IP多播应用程序开发的一般步骤加入/离开一个多播组Remote.sin_family = PF_INET;Remote.sin_addr.s_addr = inet_addr( (char *) m_IPAddress);Remote.sin_port = htons( (USHORT)m_n

22、RemotePort);SockM = WSAJoinLeaf( Sock,(sockaddr*)&Remote,sizeof(Remote),NULL,NULL, NULL,NULL,JL_BOTH); /加入多播组39基于多播的应用编程使用WinSock 2实现IP多播应用程序开发的一般步骤加入/离开一个多播组closesocket(SockM); /离开多播组40基于多播的应用编程使用WinSock 2实现IP多播应用程序开发的一般步骤向多播组发送数据sendto(Sock,strMessage,nSize,0,(sockaddr*)&Remote,sizeof(Remote);从多播组接收数据recvfrom(Sock,ReceiveBuf,32000,0,(sockaddr *)&From,&Fromlen);关闭套接字,释放WinSock资源closesocket(SockM); /关闭多播套接字,退出多播组closesocket(Sock); /关闭UDP套接字,结束数据的收发WSACleanup(); /释放WinSock资源41基于多播的应用编程多播应用程序设计实例42基于多播的应用编程多播应用程序设计实例见代码

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号