11IP组播基础北研VRP路由器组2内容•为什么组播?•组播编址•主机-路由器通告:IGMP•组播分发树•组播转发•组播路由协议Geekometer3服务器路由器单播服务器路由器组播单播vs组播4例如:收听电台广播流所有的客户端都接收相同的8Kbps电台广播•提高效率:控制网络流量,减轻服务器和CPU负荷•优化性能:减少冗余流量•分布式应用:使多节点应用成为可能00.20.40.60.8流量Mbps120406080100客户端数量组播单播组播的优势5组播的劣势•尽力投递:报文丢失是不可避免的。因此组播应用程序不能依赖组播网络进行可靠性保证,必须针对组播网络的这个特点进行特别设计。“可靠组播”目前仍然处于研究阶段。•没有拥塞避免机制:缺少TCP窗口机制和慢启动机制,组播可能会出现拥塞。如果可能的话,组播应用程序应该尝试检测并避免拥塞。•报文重复:某些组播协议的特殊机制(如Assert机制和SPT切换机制)可能会造成偶尔的数据包的重复。组播应用程序应该容忍这种现象。•报文失序:同样组播协议有的时候会造成报文到达的次序错乱,组播应用程序必须自己采用某种手段进行纠正(比如缓冲池机制等)。组播是基于UDP的!!!6适合于组播的应用•多媒体–流媒体–培训、联合作业场合的通信–视频/音频会议•数据仓库•金融应用(股票)•任何的“单到多”数据发布应用7内容•为什么组播?•组播编址•主机-路由器通告:IGMP•组播分发树•组播转发•组播路由协议8一个组播组就是一个IP地址,不表示具体的主机,而是表示一系列系统的集合,主机加入某个组播组即声明自己接收某个IP地址的报文。•IP组播组地址–224.0.0.0–239.255.255.255–“D”类地址空间•第一个字节的高四位=“1110”•保留的本地组播组地址–224.0.0.0–224.0.0.255–发送报文时TTL=1–例如:•224.0.0.1子网的所有系统•224.0.0.2子网的所有路由器•224.0.0.4DVMRP路由器•224.0.0.5OSPF路由器•224.0.0.13PIMv2路由器组播编址9•管理范围地址(AdministrativelyScopedAddresses)–239.0.0.0–239.255.255.255–私有地址空间•类似于RFC1918的单播地址•不能用于Internet全局传输•用于有限范围内的组播传输组播编址10组播编制•指定源组播地址(SourceSpecificMulticastAddresses)–232.0.0.0–232.255.255.255–不支持(*,G)加入方式•可以用于跨域组播应用,简化源维护•接收者需指明要接收的源(S,G)加入•引入源地址频道概念1132Bits28Bits25Bits23Bits48Bits01-00-5e-7f-00-0111105BitsLost组播编址IP组播MAC地址映射(FDDI和以太网)239.255.0.112224.1.1.1224.129.1.1225.1.1.1225.129.1.1...238.1.1.1238.129.1.1239.1.1.1239.129.1.10x0100.5E01.0101相同的组播MAC地址(FDDI和以太网)32-IP组播地址组播编址注意存在32IP-1MAC地址重叠IP组播MAC地址映射(FDDI和以太网)13内容•为什么组播?•组播编址•主机-路由器通告:IGMP•组播分发树•组播转发•组播路由协议14•路由器向直连的所有主机询问组播组成员关系•RFC1112--IGMP版本1Windows95支持•RFC2236--IGMP版本2Windows98后的版本及大多数UNIX系统•RFC3376--IGMP版本32002年10月成为正式标准,只有少数UNIX系统实现•主机如何告诉路由器组播组成员关系--通过IGMP协议:Internet组管理协议:主机-路由器通告:IGMP15H3•主机发送IGMPReport加入组H3224.1.1.1报告H1H2加入一个组主机-路由器通告:IGMP16•路由器周期性地向224.0.0.1发送查询查询•主机发送单个组的报告224.1.1.1报告•组的其他成员监听到报告后抑制报告发送224.1.1.1抑制X224.1.1.1抑制XH1H2H3维护这个组主机-路由器通告:IGMP17•主机“默不作声”地离开组(不发报告了)H1H3H3#1•路由器发送3个普遍组查询(间隔60秒)普遍组查询#2•路由器没有收到这个组的IGMP报告•组播组超时(离开)(最大可能延迟~=3分钟)H2离开组播组(IGMPv1)主机-路由器通告:IGMP18•主机向224.0.02发送离开组消息(包含离开的组)H1H3H3离开组报告224.0.0.2224.1.1.1#1•路由器向这个组(224.1.1.1)发送特定组查询特定组查询224.1.1.1#2•3秒钟内没有收到该组的报告•组224.1.1.1超时(离开)H2离开组播组(IGMPv2)主机-路由器通告:IGMP19•RFC3376目前已成为正式标准•尚未得到广泛支持•服务于SourceSpecificMulticast–允许主机指定接收某些网络发送的某些组播组,相比以前的版本,增加了主机的控制能力,不仅可以指定组播组,还能指定组播的源。IGMPv3状态20•路由器周期性地向224.0.0.1发送查询通用查询•主机可在单个报文中发多组报告(G:M,LIST)•组成员独立报告,取消抑止机制H1H2H3IGMPv3报告G:224.1.1.1IN:10.1.1.110.1.2.1G:224.1.1.1EX:null报告报告G:224.1.1.1EX:10.1.1.1G:224.1.2.2IN:10.1.2.121IGMPv3Source=1.1.1.1Group=224.1.1.1H1-Memberof224.1.1.1R1R3R2Source=2.2.2.2Group=224.1.1.1•H1希望接收来自S=1.1.1.1非来自S=2.2.2.2•通过IGMP,指定源可以剪枝掉S=2.2.2.2的数据IGMPv3:Join1.1.1.1,224.1.1.1Leave2.2.2.2,224.1.1.122IGMPv3与v2版本的差异引入List-of-Sources概念,为SSM提供支持增加了复杂的组状态维护机制和6种响应报文查询报文中包括RobustnessVariable和QueryInterval,路由器之间可同步最大查询响应时间增加到53分钟响应报文全部发送到224.0.0.22单个report报文可以包含多个组的状态记录成员关系报告抑止机制被撤销查询和响应报文均增加了重传机制23内容•为什么组播?•组播编址•主机-路由器通告:IGMP•组播分发树•组播转发•组播路由协议24最短路径树(基于源的分发树)接收者R1BEADF源S1组播路由项(S,G),iif,oiflist•S源地址•G组地址•iif入接口•oiifs出接口列表C接收者R2源S2组播分发树25接收者R1BEADF源S1C接收者R2源S2组播分发树最短路径树(基于源的分发树)组播路由项(S,G),iif,oiflist•S源地址•G组地址•iif入接口•oiifs出接口列表26组播分发树共享分发树接收者R1BEADFC接收者R2(RP)PIM汇聚点共享树(RP)组播路由项(*,G),iif,oiflist•*任何源地址•G组地址•iif入接口•oiifs出接口列表27组播分发树共享分发树接收者R1BEAF源S1C接收者R2源S2(RP)PIM汇聚点共享树源树D(RP)组播路由项(*,G),iif,oiflist•*任何源地址•G组地址•iif入接口•oiifs出接口列表28组播分发树•源路径树(最短路径树)占用内存较多O(SxG),但路径最优,延迟最小•Sharedtrees占用内存较少O(G),路径不是最优的,引入额外的延迟不同分发树的特征29内容•为什么组播?•组播编址•主机-路由器通告:IGMP•组播分发树•组播转发•组播路由协议30组播转发•组播路由和单播路由是相反的–单播路由关心数据报文要到哪里去。–组播路由关心数据报文从哪里来。•组播路由使用“反向路径转发”机制(RPF,ReversePathForwarding)31组播转发•何谓RPF?路由器收到组播数据报文后,只有确认这个数据报文是从自己到源的出接口上到来的,才进行转发,否则丢弃报文。•RPF检查•在单播路由表中查找到组播报文源地址的路由•如果该路由的出接口就是报文的入接口,RPF成功•否则RPF失败反向路径转发(RPF)32组播转发源151.10.3.21举例:RPF检查组播报文RPF检查失败报文从错误接口到来!33组播转发RPF检查失败!单播路由表网络接口151.10.0.0/16S1198.14.32.0/24S0204.1.16.0/24E0看得更仔细点:RPF检查失败报文从错误接口到达E0S1S0S2S1源151.10.3.21发出的组播数据报文X丢弃数据报文!34组播转发看得更仔细点:RPF检查成功RPF检查成功!单播路由表网络接口151.10.0.0/16S1198.14.32.0/24S0204.1.16.0/24E0E0S1S0S2源151.10.3.21发出的组播数据报文数据报文从正确的接口到达!S1向所有出接口(即分发树的下游)转发35内容•为什么组播?•组播编址•主机-路由器通告:IGMP•组播分发树•组播转发•组播路由协议36组播路由vs单播路由组播路由不是单播路由!是完完全全的新东西,不象OSPF,也不象RIP,不象你熟悉的任何东西。不过,不要害怕啊,一会儿就懂了。37组播路由协议的类型•密集模式(Dense-mode)•使用“推”(Push)模型(先给你,可以不要)•组播数据整网络的泛滥(Flood)•下游不想接收的话则剪枝(Prune)•泛滥、剪枝、泛滥、剪枝…周而复始(通常3分钟折腾一次)•稀疏模式(Sparse-mode)•使用“拉”(Pull)模型(你要了,才给你)•组播数据只发送到有需要的地方•有显式的加入(Join)过程38组播路由协议一览•目前,主要有4个组播路由协议:–DVMRPv3(草案)–DVMRPv1(RFC1075)已经废止。–MOSPF(RFC1584)–PIM-DM(Internet草案)–PIM-SMV2(RFC2362)–其他(CBT,OCBT,QOSMIC,SM,等等)39DVMRP简介距离矢量组播路由协议(DistanceVectorMulticastRoutingProtocol),一个较为古老,具有实验性质的协议,现已经不常使用,鲜有厂家设备支持。•密集模式协议–基于距离矢量•类似于RIP•最大32跳–DVMRP依赖自己找回来的单播路由:•进行RPF检查•创建“截断广播树”(TBT,一种组播分发树型结构)–使用特殊的“毒性逆转”机制–使用泛滥和剪枝机制•组播数据开始时延TBT向下泛滥•当下游不需要该数据时对TBT枝杈进行剪枝•剪枝每过一定时间超时,重新延枝杈进行泛滥40DVMRP评价•广泛用于MBONE(古老的组播实验网络,很少有人在里面玩儿了)–慢收敛—类似RIP–路由器中组播路由状态信息庞杂,到处都是(S,G)–不支持共享树–最大不能超过32跳–不适合于大规模的网络(泛滥剪枝机制、可伸缩性差)41MOSPF(RFC1584)•对OSPF单播路由协议的扩展–OSPF:路由器使用链路状态通告来获取整个网络的可用链路信息–MOSPF:在OSPF链路状态通告中包含组播信息,以次构建组播分发树(每个路由器都维护整个网络的最新拓扑信息)•组成员关系LSA(链路状态通告)向OSPF路由域整网泛滥,这样MOSPF路由器就可以计算出接口列表•使用狄杰克斯特拉算法(Dijkstraalgorithm)来计算最短路径树–为每个(SNet,G)对都需要单独的计算42MOSPF评价•与单播路由协