组播
概念
背景
- 实现一对多,数据尽可能里组播源的源节点开始复制、分发,并且只发送给要接收的设备
特点
- 点到多点的高效数据传输
- 节约带宽资源
- 主要应用再IPTV等实时数据传输
优点
- 减少网络重复流量、减轻设备处理压力
- 节约带宽,降低网络负载
- 使多点应用成为可能
缺点
- 基于UDP
- 尽力而为
- 不可靠,没有重传
- 报文重复、报文失序
组播地址
- 224.0.0.0-239.255.255.255
- D类地址,1110开头
- 永久组播地址
- 224.0.0.0-224.0.0.255
- ASM组播地址,全网有效224.0.1.0-231.255.255.255,233.0.0.0-238.255.255.255
- SSM组播地址,全网有效232.0.0.0-232.255.255.255
- 本地管理地址:239.0.0.0-239.255.255.255
- 组播MAC地址
- 0100 5e 第25bit固定为0,后23bit映射为IPv4地址后23bit
- 5bit得不到映射,会有32个IP地址对应一个组播MAC地址
- 组播服务模型:取决于组播客户端是否能对组播源做出选择
- ASM:任意源组播模型
- IGMPv1、IGMPv2、MLDv1的客户端不能对组播源做出选择,需要部署ASM
- PIM-DM:对于组播业务通过组播地址区分,造成组播地址浪费,对组成员要求不高,容易部署和维护,组播成员无需事先得知组播源信息,只需要知道自己加入的组播地址即可
- SSM:指定源组播模型
- IGMPv3、MLDv2的客户机不能对组播源做出选择,需要部署SSM
- PIM-DM、PIM-SM,对于组播业务通过组播源和组播地址唯一区分,节省组播地址,对组成员要求高,客户端开发维护难度大,组成员需知道自己要加入的组播地址和源地址
- ASM:任意源组播模型
IGMP
- 因特网组管理协议,负责管理IPv4组播成员的协议,用于主机和组播路由器之间建立、维护组播成员的协议
- 发送者不关注接收者位置,为了使组播报文达到接收者,需要接收者的组播路由器能了解组播组的流量接收者,保证接收者加入响应组播组
- IGMPv1
- 报文格式:version、type、group address(查询为0,报告为需要加入的组地址)
- 报文类型:
- 普遍组查询报文:查询器向共享网络所有主机和路由器发送查询报文,用于了解哪些组播组存在成员
- 查询周期60s,通过IP报文封装
- SIP:路由器自身接口的IP地址,DIP:224.0.0.1
- group address为0
- 成员报告报文:主机向查询器发送,用于申请加入某个组播组或者应答查询报文
- 组播成员收到了普遍组查询报文就会发送成员报告报文
- SIP:主机接口地址,DIP:主机想要加入的组播地址
- group address:需要加入的组播地址
- 成员报告抑制:当所有成员收到普遍组查询报文后,随机生成一个倒数计时器(0-10s),如果为0,发送成员报告报文,其他成员收到后,将定时器删除,停止发送成员报告报文
- 路由器收到成员报告报文城建(*,G)表项,将收到该成员报告报文的接口作为表项的下游接口
- 新成员加入,不必等待查询报文,主动发送成员报告报文
- Laster report:本轮查询,第一个发送报告的主机
- 离组机制
- IGMPv1没有离组机制,静默离开
- 如果该组的最后一个成员离组,路由器两次普遍组查询报文没有回应(260+10),认为该组不存在成员,将(,G)表项下游接口删除,但是130s内仍会发送组播流量,业务不能及时控制
- 查询器,查询器和非查询器都生成(*,G)表项
- 当一个网段存在多个路由器时,负责向该网段发送普遍组查询报文的路由器
- IGMPv1没有查询器,借助PIM协议中的DR作为查询器
- PIM DR
- 选举机制
- 根据PIM hello中的优先级选举DR,越大越优
- 优先级相同,选择IP地址大的成为DR
- DR机制
- DR具有抢夺性
- 查询器失效时间是PIM邻居的失效时间(105s)
- 选举机制
- 普遍组查询报文:查询器向共享网络所有主机和路由器发送查询报文,用于了解哪些组播组存在成员
- IGMPv2
- 报文格式:type、最大响应时间、group address
- 报文类型:
- 特定组查询报文:查询器向特定的组播组发送特定组查询报文,了解特定组播组是否存在成员
- SIP:路由器接口IP,DIP:主机离组的组地址,group address:主机离组的组地址
- 查询器发送特定组查询报文以1s为间隔,连续发送两次,2s没收到成员报告,则认为该组不存在组播组成员,删除表项对应的下游接口
- 特定组查询报文有成员报告抑制,最大响应时间1s
- 成员离组报文
- 成员离组发送离
- 特定组查询报文:查询器向特定的组播组发送特定组查询报文,了解特定组播组是否存在成员