630 likes | 811 Views
内容. IP 组 播 基 础. 1. Geekometer. 内容. 为什么组播? 组播编址 主机-路由器通告: IGMP 组播分发树 组播转发 组播路由协议. 单播 vs 组播. 单播. 服务器. 路由器. 组播. 服务器. 路由器. 组播的优势. 提高 效率 : 控制网络流量,减轻服务器和 CPU 负荷 优化 性能 : 减少冗余流量 分布式应用 : 使多节点应用成为可能. 例如: 收听电台广播流 所有的客户端都接收相同的 8 Kbps 电台广播. 组播. 单播. 0.8. 0.6. 流量. 0.4. Mbps.
E N D
内容 IP 组 播 基 础 1
Geekometer 内容 • 为什么组播? • 组播编址 • 主机-路由器通告: IGMP • 组播分发树 • 组播转发 • 组播路由协议
单播 vs 组播 单播 服务器 路由器 组播 服务器 路由器
组播的优势 • 提高效率: 控制网络流量,减轻服务器和CPU负荷 • 优化性能: 减少冗余流量 • 分布式应用: 使多节点应用成为可能 例如: 收听电台广播流 所有的客户端都接收相同的8 Kbps电台广播 组播 单播 0.8 0.6 流量 0.4 Mbps 0.2 0 1 20 40 60 80 100 客户端数量
组播的劣势 组播是基于UDP的!!! • 尽力投递:报文丢失是不可避免的。因此组播应用程序不能依赖组播网络进行可靠性保证,必须针对组播网络的这个特点进行特别设计。“可靠组播”目前仍然处于研究阶段。 • 没有拥塞避免机制: 缺少TCP窗口机制和慢启动机制,组播可能会出现拥塞。如果可能的话,组播应用程序应该尝试检测并避免拥塞。 • 报文重复: 某些组播协议的特殊机制(如Assert机制和SPT切换机制)可能会造成偶尔的数据包的重复。组播应用程序应该容忍这种现象。 • 报文失序: 同样组播协议有的时候会造成报文到达的次序错乱,组播应用程序必须自己采用某种手段进行纠正(比如缓冲池机制等)。
适合于组播的应用 • 多媒体 • 流媒体 • 培训、联合作业场合的通信 • 视频/音频会议 • 数据仓库 • 金融应用(股票) • 任何的“单到多”数据发布应用
内容 • 为什么组播? • 组播编址 • 主机-路由器通告: IGMP • 组播分发树 • 组播转发 • 组播路由协议
一个组播组就是一个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.4 DVMRP路由器 224.0.0.5 OSPF路由器 224.0.0.13 PIMv2路由器 组播编址
管理范围地址(Administratively Scoped Addresses) 239.0.0.0–239.255.255.255 私有地址空间 类似于RFC1918的单播地址 不能用于Internet全局传输 用于有限范围内的组播传输 组播编址
组播编址 IP组播 MAC地址映射 (FDDI和以太网) 32 Bits 28 Bits 1110 239.255.0.1 5 Bits Lost 01-00-5e-7f-00-01 25 Bits 23 Bits 48 Bits
Multicast Addressing IP组播 MAC地址映射 (FDDI和以太网) 注意存在32 IP -> 1 MAC地址重叠 32 - IP组播地址 224.1.1.1 224.129.1.1 225.1.1.1 225.129.1.1 . . . 238.1.1.1 238.129.1.1 239.1.1.1 239.129.1.1 相同的组播MAC地址 (FDDI和以太网) 0x0100.5E01.0101
内容 • 为什么组播? • 组播编址 • 主机-路由器通告: IGMP • 组播分发树 • 组播转发 • 组播路由协议
主机-路由器通告: IGMP • 主机如何告诉路由器组播组成员关系-- 通过IGMP协议:Internet组管理协议: • 路由器向直连的所有主机询问组播组成员关系 • RFC 1112 -- IGMP版本1 • Windows 95支持 • RFC 2236 -- IGMP版本2 • Windows98后的版本及大多数UNIX系统 • IGMP版本3目前仍然是一个草案(draft) • draft-ietf-idmr-igmp-v3-03.txt
Host sends IGMP Report to join group 224.1.1.1 H3 H3 报告 主机-路由器通告: IGMP 加入一个组 H2 H1
路由器周期性地向224.0.0.1发送查询 224.1.1.1 224.1.1.1 224.1.1.1 H2 H3 H1 X X 抑制 报告 抑制 查询 主机-路由器通告: IGMP 维护这个组 • 主机发送单个组的报告 • 组的其他成员监听到报告后抑制报告发送
H3 #1 普遍组查询 #2 主机-路由器通告: IGMP 离开组播组(IGMPv1) H2 H3 H1 • 主机“默不作声”地离开组(不发报告了) • 路由器发送3个普遍组查询(间隔60秒) • 路由器没有收到这个组的IGMP报告 • 组播组超时(离开) (最大可能延迟~= 3分钟)
224.1.1.1 H3 离开组报告 224.0.0.2 #1 特定组查询 224.1.1.1 #2 主机-路由器通告: IGMP 离开组播组(IGMPv2) H2 H3 H1 • 主机向224.0.02发送离开组消息(包含离开的组) • 路由器向这个组(224.1.1.1)发送特定组查询 • 3秒钟内没有收到该组的报告 • 组224.1.1.1超时(离开)
draft-ietf-idmr-igmp-v3-??.txt 其应用仍然在测试阶段 允许主机指定接收某些网络发送的某些组播组,相比以前的版本,增加了主机的控制能力,不仅可以指定组播组,还能指定组播的源。 IGMPv3
内容 • 为什么组播? • 组播编址 • 主机-路由器通告: IGMP • 组播分发树 • 组播转发 • 组播路由协议
组播分发树 最短路径树(基于源的分发树) 源 S1 源 S2 A B F D • 组播路由项 • (S, G), iif, oiflist • S 源地址 • G 组地址 • iif 入接口 • oiifs 出接口列表 C E 接收者 R1 接收者 R2
组播分发树 最短路径树(基于源的分发树) 源 S1 源 S2 A B F D • 组播路由项 • (S, G), iif, oiflist • S 源地址 • G 组地址 • iif 入接口 • oiifs 出接口列表 C E 接收者 R1 接收者 R2
共享树 组播分发树 • 组播路由项 • (*, G), iif, oiflist • * 任何源地址 • G 组地址 • iif 入接口 • oiifs 出接口列表 共享分发树 A B F D (RP) (RP) PIM汇聚点 C E 接收者 R1 接收者 R2
源 S1 源 S2 源树 组播分发树 • 组播路由项 • (*, G), iif, oiflist • * 任何源地址 • G 组地址 • iif 入接口 • oiifs 出接口列表 共享分发树 A B F D (RP) (RP) PIM汇聚点 C E 共享树 接收者 R1 接收者 R2
组播分发树 • 源树(最短路径树) 占用内存较多O(S x G),但路径最优,延迟最小 • 共享树 占用内存较少O(G),路径不是最优的,引入额外的延迟 不同分发树的特征
内容 • 为什么组播? • 组播编址 • 主机-路由器通告: IGMP • 组播分发树 • 组播转发 • 组播路由协议
组播转发 • 组播路由和单播路由是相反的 • 单播路由关心数据报文要到哪里去。 • 组播路由关心数据报文从哪里来。 • 组播路由使用 “反向路径转发”机制(RPF, Reverse Path Forwarding)
组播转发 反向路径转发(RPF) • 何谓RPF? • 路由器收到组播数据报文后,只有确认这个数据报文是从自己到源的出接口上到来的,才进行转发,否则丢弃报文。 • RPF检查 • 在单播路由表中查找到组播报文源地址的路由 • 如果该路由的出接口就是报文的入接口,RPF成功 • 否则RPF失败
组播转发 举例:RPF检查 源151.10.3.21 RPF检查失败 报文从错误接口到来! 组播报文
源151.10.3.21 发出的组播数据报文 X 报文从错误接口到达 丢弃数据报文! 组播转发 看得更仔细点:RPF检查失败 S0 RPF检查失败! S1 S2 单 播 路 由 表 网络 接口 151.10.0.0/16 S1 198.14.32.0/24 S0 204.1.16.0/24 E0 E0 S1
源151.10.3.21 发出的组播数据报文 数据报文从正确的接口到达! 组播转发 看得更仔细点:RPF检查成功 S0 S1 S2 RPF检查成功! E0 单 播 路 由 表 网络 接口 151.10.0.0/16 S1 198.14.32.0/24 S0 204.1.16.0/24 E0 S1 向所有出接口 (即分发树的下游)转发
内容 • 为什么组播? • 组播编址 • 主机-路由器通告: IGMP • 组播分发树 • 组播转发 • 组播路由协议
组播路由vs单播路由 组播路由不是单播路由!是完完全全的新东西,不象OSPF,也不象RIP,不象你熟悉的任何东西。 不过,不要害怕啊,一会儿就懂了。
组播路由协议的类型 • 密集模式(Dense-mode) • 使用“推”(Push)模型(先给你,可以不要) • 组播数据整网络的泛滥(Flood) • 下游不想接收的话则剪枝(Prune) • 泛滥、剪枝、泛滥、剪枝…周而复始 (通常3分钟折腾一次) • 稀疏模式(Sparse-mode) • 使用 “拉”(Pull)模型(你要了,才给你) • 组播数据只发送到有需要的地方 • 有显式的加入(Join)过程
组播路由协议一览 • 目前,主要有4个组播路由协议: • DVMRPv3 (草案) • DVMRPv1 (RFC 1075)已经废止。 • MOSPF (RFC 1584) • PIM-DM (Internet草案) • PIM-SM V2 (RFC 2362) • 其他(CBT, OCBT, QOSMIC, SM, 等等)
DVMRP简介 距离矢量组播路由协议(Distance Vector Multicast Routing Protocol),一个较为古老,具有实验性质的协议,现已经不常使用,鲜有厂家设备支持。 • 密集模式协议 • 基于距离矢量 • 类似于RIP • 最大32跳 • DVMRP依赖自己找回来的单播路由: • 进行RPF检查 • 创建“截断广播树”(TBT, 一种组播分发树型结构) • 使用特殊的“毒性逆转”机制 • 使用泛滥和剪枝机制 • 组播数据开始时延TBT向下泛滥 • 当下游不需要该数据时对TBT枝杈进行剪枝 • 剪枝每过一定时间超时,重新延枝杈进行泛滥
DVMRP评价 • 广泛用于MBONE (古老的组播实验网络,很少有人在里面玩儿了) • 慢收敛—类似RIP • 路由器中组播路由状态信息庞杂,到处都是 (S,G) • 不支持共享树 • 最大不能超过32跳 • 不适合于大规模的网络(泛滥剪枝机制、可伸缩性差)
MOSPF (RFC 1584) • 对OSPF单播路由协议的扩展 • OSPF: 路由器使用链路状态通告来获取整个网络的可用链路信息 • MOSPF: 在OSPF链路状态通告中包含组播信息,以此构建组播分发树(每个路由器都维护整个网络的最新拓扑信息) • 组成员关系LSA(链路状态通告)向OSPF路由域整网泛滥,这样MOSPF路由器就可以计算出接口列表 • 使用狄杰克斯特拉算法(Dijkstra algorithm)来计算最短路径树 • 为每个 (SNet, G) 对都需要单独的计算
MOSPF评价 • 与单播路由协议相关,仅在OSPF网络内运行 • 可伸缩性不好 • 每个组播(SNet, G)对都需要使用Dijkstra算法进行计算! • 不支持共享树 • 不适合于… • 通用的组播网络,其中发送者可能会非常的多 • 如IP/TV—(每个IP/TV客户端都是一个组播源) • 支持厂家较少,市场鲜有使用
PIM可是 好东西啊! PIM-DM • 协议无关组播(Protocol Independent Multicast) • 支持所有的单播路由协议: 静态路由、RIP、IGRP、IS-IS、BGP、OSPF,总之了,单播路由是什么都没关系。 • 使用逆向路径转发(RPF)机制 • 先向网络泛滥(Flood),然后根据组播组成员关系进行剪枝 (Prune) • 使用Assert机制来剪枝冗余数据流 • 适合于... • 小规模的网络
组播数据报文 PIM-DM 泛滥与剪枝 初始泛滥 组播源 网络中的每个路由器 都创建(S, G)! 接收者
组播数据报文 剪枝消息 PIM-DM 泛滥与剪枝 剪枝不需要的数据流 组播源 接收者
组播数据报文 PIM-DM 泛滥与剪枝 剪枝之后,看... 组播源 网络中的每个路由器 中仍然保留(S, G)! 泛滥和剪枝过程每3分钟 重复一次!!! 接收者
2 2 Assert <distance, metric> Assert <distance, metric> 1 • 路由器从其“出接口列表”(oiflist)中的某个接口收到数据 !!! • 只有其中一个路由器应该继续发送数据,以避免重复 1 2 路由器发送 “PIM Assert”消息 PIM-DM Assert 机制 进入路由器的组播数据报文 (RPF检查都成功) S0 S0 E0 E0 • 计算distance和 metric值 • 谁到源的路由最优谁获胜 • 如果distance和 metric相等,IP地址大的获胜 • 输的就停止转发 (剪枝接口)
PIM-DM 评价 • 对于小型网络来说非常有效 • 优势: • 易于配置--总共只有两条命令 • 实现机制简单(泛滥剪枝) • 潜在问题... • 泛滥剪枝过程不够高效 • 复杂的Assert机制 • 控制和数据平面混合 • 导致网络内部的所有路由器上都有(S, G) • 可能会导致非确定性的拓扑行为 • 不支持共享树
PIM-SM (RFC 2362) • 支持共享树和源树 • 假设没有主机需要接收组播数据,除非它们明确地发出了请求(你不说我怎么知道你要呢?你要要你就说嘛,你说要我会给你的,….!@#$#$… :-) ) • 使用“汇聚点”(RP, Rendezvous Point) • 发送者和接收者在RP处进行汇聚 • 发送者的第一跳路由器把发送者注册到RP上(报个到,挂个号) • 接收者的DR(直连网络上的负责人)为接收者加入到共享树 (树根在RP) • 适合于… • 大规模的企业网络 • 是任何网络的优选方案,不管其规模和成员密集程度。(蛮夸张的哦:-),不过现如今PIM-SM倒真是横扫一切) 这个RP很重要哦!
(*, G) 加入 共享树 PIM-SM 共享树加入 RP (*, G) 仅在共享树 沿途建立 接收者
组播源 (S, G) 注册 (单播) (S, G) 加入 数据流 源树 PIM-SM 发送者注册 RP (S, G)仅在源树 沿途建立 共享树 接收者
组播源 (S, G)注册 (单播) 数据流 源树 (S, G) 注册停止 (单播) PIM-SM 发送者注册 RP 数据流从组播源通过 源树到达RP 共享树 RP向第一跳路由器发送注册停止(Register-Stop)消息,停止注册过程 接收者
组播源 数据流 源树 PIM-SM 发送者注册 RP 源数据流延源树(SPT) 流向RP 从RP开始,数据流延 共享树(RPT)流向接收者 共享树 接收者
组播源 (S, G) Join Traffic Flow Source Tree PIM-SM SPT 切换 RP Last-hop router joins the Source Tree. Shared Tree Additional (S, G) State is created along new part of the Source Tree. 接收者