组播是什么
IPV4:单播 组播 广播
IPV6:单播 组播 任播
- 单播:一对一,随着接收用户的增多,增加服务器和链路带宽的压力。
单播的优点:保证流量只发送给有需要的接收者
- 广播:一对ALL,压力会集中在网络内的主机,如果该主机不接收广播流量,需要耗费资源去处理这个广播
广播的优点:同样的流量,只需要发送一次,对链路的占用小
- 组播的特点: 一对多,把单播和广播的优点结合起来形成组播。
组播的优点:保证流量只发送给有需要的接收者,同样的流量,只需要发送一次,对链路的占用小
组播的缺陷:组播是基于UDP的!!!【不可靠】
实施组播的三个基本条件
硬件设施:
- 组播服务器
- 支持组播分发的网络
- 能接收组播流的客户端
软件技术:
- 必须存在组播地址
- 必须有多播路由协议的支持
- 客户端必须能自由加入或离开多播组
组播地址
一个组播组就是一个IP地址,不表示具体的主机,而是表示一系列系统的集合,主机加入某个组播组 即声明自己接收某个IP地址的报文。
组播IP地址不会在网络上实际存在
组播源IP地址:A、B、C类地址
组播目标IP地址:D类地址 224.0.0.0 --239.255.255.255
- 为网络协议预留的地址段有:224.0.0.0-224.0.0.255
- 全局范围地址:224.0.1.0-238.255.255.255
- 指定信源组播地址:232.0.0.0~232.255.255.255
- GLOP地址:233.0.0.0~233.255.255.255
- 有限范围地址:239.0.0.0-239.255.255.255
常用组播地址
- 224.0.0.1 - all multicast systems on subnet
- 224.0.0.2 - all routers on subnet
- 224.0.0.4 - all DVMRP routers(距离矢量组播路由选择协议 )
- 224.0.0.13 - all PIMv2 routers
- 224.0.0.5, 224.0.0.6, 224.0.0.9, 224.0.0.10 used by unicast routing protocols
- 224.0.0.25 表示所有的交换机
- 224.0.1.40 auto-rp
组播分发树
组播分发树:用来描述IP组播报文在网络中经过的路径。
- 有源树(最短路径树SPT:Source or Shortest Path Tree)
- 由组播源到用户间的最短路径构成。路由器必须为每个组播源保存路由信息,占用内存较多 (S,G),但路径最优,接收者到多播源是最佳路径,延迟最小。
- 优点:组播源到接收者的路径是最优的
组播路由条目使用(S,G)表示
S代表是source,G代表Group
100个组播源,100个(S,G)条目-----缺点,表项过多
- 共享树(Shared Tree)
- 以网络上某特定节点为公用根。占用内存较少 (*,G),路径不一定是最优的,多播流转发必须先经过RP,引入额外的延迟。
- 对 RP 的可靠性和处理能力要求很高
- 特点:采用一个公共节点作为根,转发组播流量
缺点:不能保证组播源到接收者的路径是最优的
组播路由条目使用(*,G)表示
*代表是任意source,G代表Group
100个组播源,1个(*,G)条目—优点,表项只有一个
组播转发
组播路由转发和单播路由转发是相反的
a、单播路由转发关心数据报文要到哪里去。
b、组播路由转发关心数据报文从哪里来。
组播路由转发使用 “反向路径转发”机制避免环路
多播数据流从多播路由器入口路由到出口转发出去
a、入口:由RPF决定
b、出口:由IGMP和多播路由协议决定的
RPF检测
概念:组播源的入接口和路由器到达组播源的出接口,不一致,RPF检测失败。不转发该组播数据包,直接丢弃
源 组播组 接收者
1)机和组播路由协议之间运行的协议 IGMP
2)组播路由器和组播路由器之间运行的协议 PIM
IGMP 协议
IGMP协议作用
组播路由器通过IGMP协议了解每个接口连接的网段上是否存在组播组的接收者,也就是组成员。如果存在成员,组播路由器应将组播数据包转发到这个网段;如果没有成员则应停止转发。
- IGMP协议是主机跟路由器之间的控制协议
- 主机通过IGMP协议向组播路由器报告自己想加入的组
- 路由器通过IGMP协议查询网段上是否还有特定组的成员
IGMP:用于IPv4组播
MLD: 用于IPv6组播 (
Multicast Listener Discover ,组播侦听发现协议)
IGMP协议
Internet组管理协议
IGMP是一个三层协议,协议号为2,直接被封装在IP中,运行于路由器与主机之间。
IGMP原理
采用路由器查询、主机报告两种方式维持组成员关系。
a、路由器查询:路由器周期性每60秒发送查询(D=224.0.0.1 ttl=1)试图发现感兴趣的组成员。(主机每次都回复)
b、主机报告:主机主动发送一个IGMP报告(D=组播组 ttl=1) 表示要加入某个多播组(包含了要加入的多播组地址),也可以用来回复路由器的queries。同一个网段中,只需要一台主机发送report报文,避免网络种充斥大量的report报文。
抑制机制:倒数报告计时器,默认是10s
IGMP查询器
同一网段上有多个组播路由器时,选择一台组播路由器作为查询器
IGMP v1:默认DR 就是 IGMP 查询器。DR是通过PIM协议选择。
IGMP v2 v3:拥有最低的IP地址被选举为IGMP 查询器
Ip multicast routing //开启组播路由功能
Ip igmp version {1 | 2 | 3}
Ip igmp query-interval seconds //default 60s
Ip igmp query-max-response-time seconds //default 10s
Ip igmp query-timeout seconds //defaut 2*query-interval
No ip mroute-cache //在接口上禁止IP多播包的快速交换
ip igmp last-member-query-count <1-7> //default 2
ip igmp last-member-query-interval milliseconds //default 1000ms
PIM协议:协议无关组播
组播路由器为了知道哪些设备需要接收组播流量。PIM无需收发组播路由更新,所以与其它组播协议相比,PIM开销降低了许多。PIM的设计出发点是在Internet范围内同时支持SPT和共享树,并使两者之间灵活转换,因而集中了它们的优点提高了组播效率。
PIM两种模式:
密集模式(Dense-Mode)
PIM-DM:泛洪—修剪 SPT
先有组播数据流,再有组播分发树
- 泛洪:当组播路由器收到组播数据包时,先进行RPF检测,添加(S,G)表项,从除接收接口之外的其他所有接口(有PIM邻居的接口)进行转发。
- 修剪:当组播路由器不存在接收者时,发送join/prune报文,将prune置为1
当组播路由器存在接收者时,发送join/prune报文,将join置为0
每个3分钟泛洪 修剪一次。 注:在PIM-DM,产生(S,G)和(*,G),但是转发数据包时,根据(S,G)表项转发,不根据(*,G) 因为数据库结构的原因,创建(S,G)表项必须先创建(*,G)表项
- 优点:配置简单,实现机制简单
- 缺点:泛洪修剪过程不够高效
复杂的ASSert机制
控制和数据平面混合
导致网络内部的所有路由器上都有(S,G)
可能会导致非确定性的拓扑行为
不支持共享树
稀疏模式(Sparse-Mode)
先有组播树,再有组播流量
先建立RPT,当有组播数据时,建立SPT树。
后续数据,先沿着SPT树发送,再沿着RPT树发送
共享树的建立:
接收者发送IGMP report报文给最后一跳路由器。
最后一跳路由器收到以后,会对RP做RPF检测,检测成功,生成(*,G)表项,朝着RP的方向,向上游路由器发送join/prune报文。
注意:为了保证组播路由器能够对RP检测成功,首先要保证组播路由器有RP的路由。 RPT生成的(*,G)表项,用于转发组播数据
有源树的建立:
1)组播源发送组播数据报文,第一跳路由器收到后,进行RPF检测,生成(S,G)表项,因为此时,第一跳路由器并没有建立任何的组播分发树,以单播的形式发送给RP。
2)RP收到这个单播报文,首先查看组播路由表是否存在该组播组的共享树(是否有接收者),如果存在,将单播报文中的组播提取出来,沿着共享树发送。发送join/prune消息给第一跳路由器,产生(S,G)表项
如果不存在接收者,发送join/prune消息给第一跳路由器,产生(S,G)表项
发送注册停止的报文。目的是为了让第一跳组播路由器转发后续的组播数据包,以组播的形式发送,不需要以单播的形式发送。
RPT的切换
当最后一跳路由器,发现到达组播源有更优路径时,从RPT树切换到SPT树。
注:禁止共享树向源树切换命令
ip pim spt-threshold infinity
RP的选举
如果一台设备同时使用静态和动态的方式选举RP,优先级的关系如下:
Auto-rp>BSR>静态RP
为了保证RP的稳定性,一般使用loopback口作为RP。`
RP的选举方式
手工静态
每一台组播路由器都需要配置静态RP
指定静态RP,RP地址这个接口不需要启用PIM协议?
优点:稳定
缺点:不能够动态切换,配置麻烦
静态RP配置
R1(config)# ip pim rp-address 192.168.1.1 1 [ override ]
R1(config)# access-list 1 permit 239.1.1.0 0.0.0.255
//192.168.1.1是RP的地址
//1表示RP只为该组播地址服务【可选参数】
//override静态RP优先于Auto-RP和BSR选举的RP【可选参数】
动态
动态选举RP的缺点:同一时间,只有一个RP在工作。工作效率高
- Auto-RP:思科私有协议
C-RP—候选班长
映射代理—班主任
Auto-RP工作原理:
- 先选举出映射代理
- 映射代理通告组播的方式,告诉所有的组播路由器映射代理的信息(224.0.1.40)每隔60s
- C-RP以组播的形式通告C-RP的信息,组播地址是224.0.1.39,每隔60
- 由映射代理来选举RP,(IP地址越大,成为RP),然后再告诉所有的组播路由器
Auto-rp的选举:
映射代理和RP的选举,都是选择IP地址大的。
动态选举RP和映射代理时,参与选举的接口需要启用PIM协议。
连接PIM路由器的接口
第一跳路由器连接组播源的接口
最后一跳路由器连接接收者的接口
注:在PIM-SM中,使用auto-rp选举,出现的问题:
- 在PIM-SM中,要发送组播流量,必须先知道RP
RP还没有选举出来,就无法发送组播流量
- Auto-rp中,C-RP和映射代理发送的消息都是使用组播来发送
解决办法:ip pim sparse-dense-mode
- 同时运行SM和DM
没有RP时,使用DM建立SPT,选举出RP,
当RP选举出以后,使用SM来发送组播流量
- auto lister
当还没有建立组播分发树时,收到组播信息,将从所有启用PIM协议的接口发送出去
2)BSR:公有
C-RP—候选RP
BSR----裁判
BSR工作原理:
- BSR设备会以组播的形式【224.0.0.13】通告自己的存在,告诉所有的组播路由器,BSR的地址。
- C-RP收到BSR的信息之后,知道了BSR的地址。以单播的形式发送C-RP的信息给BSR。
- BSR收到以后,不选举RP,把所有的C-RP信息发送给所有的组播路由器,有组播路由器自己选举。
如果为了简化部署,可以将RP和BSR部署在同一台路由器上。
BSR选举:
①、比较优先级,大的优先
②、优先级一样,比较IP地址,大的优先
RP选举:
①、如果组中只有一个C-RP,则直接选为RP。
②、存在多个C-RP,拥有最小优先级值的C-RP成为RP。
③、优先级相同,运行一个hash函数(这个函数输入的参数有:组的前缀、hash掩码和C-RP的地址,输出为:hash值),有最大结果的C-RP成为RP。
③、如果hash值相同,有最大IP地址的C-RP成为RP。
配置PIM-DM
1)组播路由器启用组播功能:ip multicast-routing
2)在相应的接口启用PIM协议:ip pim dense-mode
连接PIM路由器的接口
第一跳路由器连接组播源的接口
最后一跳路由器连接接收者的接口
3)配置接收主机加入某个组播组:ip igmp join-group 239.1.1.1
验证命令:
R1#show ip pim interface 查看路由器哪些接口启用PIM协议
R1# show ip pim neighbor查看PIM的邻居
R1#show ip mroute 查看组播路由表
配置PIM-SM
1)组播路由器启用组播功能:ip multicast-routing
2)在相应的接口启用PIM协议:ip pim sparse-mode
连接PIM路由器的接口
第一跳路由器连接组播源的接口
最后一跳路由器连接接收者的接口
3)配置RP:ip pim rp-address 3.3.3.3【所有的组播路由器都需要配置RP】
4)配置接收主机加入某个组播组:ip igmp join-group 239.1.1.1
验证命令:
R1#show ip pim interface 查看路由器哪些接口启用PIM协议
R1# show ip pim neighbor查看PIM的邻居
R1#show ip mroute 查看组播路由表
DF
每条链路中,拥有到达RP最佳路径的路由器将被选为DF(Designated Forwarder)
DF负责响应和转发发往RP的流量
对于本地源和接收者无需转发。
DF的作用
负责转发发送给RP的组播流量
在MA网络中,有DF转发
最后一跳路由器发送的join消息
在MA网络中,RP会将组播流量发给DF,有DF转发给接收者
DF的选举原则
- 选择到达RP最佳路径的路由器
- 比较到达RP的AD值
- 比较到达RP的Metric
- 当Metric一样,IP地址大的优先
配置组播双向树:
组播路由器先启用组播路由功能和组播双向树功能
在相应的接口启用PIM协议,定义PIM-SM
定义RP
主机加入组播组
注意:
配置组播双向树的时候,
RP接口需要启用PIM-SM
R3#show ip pim interface f0/0 df
Multicast Boundary
组播边界机制被用来限制组播流量的转发的域
access-list 10 deny 224.10.10.0 0.0.0.255
access-list 10 permit any
interface FastEthernet0/0
ip multicast boundary 10 out
access-list 100 deny ip any 123.1.1.0 0.0.0.255 224.10.10.0 0.0.0.255
access-list 100 permit ip any any
interface FastEthernet0/1
ip multicast boundary 100 out