IP组播需求:
与广播或重复的单播方式传送数据相比,多播的效率和性能更高
组播的基本要求:
必须有标识多播组的地址集; 必须由主机加入和离开多播组的相应机制;
必须由一种路由协议,让路由器在不过分占用网络资源的情况下有效地将组播流量发送给组成员。
组播地址:
组成员的NIC必须支持组播,当主机加入一个多播组后,NIC会计算一个可预见的MAC地址,以太网络中使用0100.5e00.0000来确定一个多播MAC地址。 以太网中将接口组IP地址的低23位映射到被保留的MAC地址的低23位,从而构建一个多播MAC地址,如ospf使用的224.0.0.5,对应的多播地址为0100.5e00.0005
组成员:
IGMP(互联网组管理协议)所有希望加入组播组的主机和所有接口连接的子网上存在组播主机的路由器都必须运行IGMP。该消息仅局限于本地数据链路,TTL=1 加入和离开组播组;
被动:收到组播源发送的查询消息后回复加入;
主动:主机主动发送一个请求加入组播组;
实现方式:主机加入多播组的时候,其所在的子网中存在该组播组的其他成员,主机只需要监听被转发给子网中的其他组成员的组播包即可,不用在向路由器发送加入请求。
离开组播组时主机会显示的通知本地路由器,当本地路由器接收到主机发送的离开通告,将会立即向子网发出一条查询消息,以询问是否还有剩余组成员。
加入等待时间:主机发送加入请求到主机能真正接收到组流量之间的时间周期。
离开等待时间;子网中最后一个组成员离开组播组带到路由器停止向该子网转发多播流量之间的时间间隔。
组维护;
报告:主机希望加入某个组时会给路由器发送一条消息,主机在发送报告时可以使用多个可能的目的地址;
将报告发送到组地址,可以确保子网内的全部组成员以及侦听该多播组成员的路由器都能接受到此报告,
性能优化机制:当接收到查询消息之后,没个组成员都根据一个随机数启动一个定时器,直到该定时器超时,组成员才发送报告,由于报告发送到组地址,因此其他成员
也会收到报告,收到之后将取消各自的定时器,不再发送各自的报告,因为路由器只要确定子网内有组播成员即可,而不需要确切的知道具体有多少个组播成员
网络中存在多台路由器: 查询路由器和备份路由器
选举规则:IP地址最小的路由器为查询路由器(查询消息的源地址)支持抢占
非查询路由器周期性接收差选路由器发出的查询消息,若未接收到,则接替查询路由器的角色
IGMPv2:
主机功能:
成员关系报告消息:主机第一次加入组时发送的消息
版本1成员关系报告消息
离开组消息
路由功能:
常规查询:发送到地址为224.0.0.1 本子网内全部系统。
特定组查询:当主机离开组播组时,路由器发送特定组查询消息以确认该组中是否还存在组成员
容错处理:防止特定组查询出现丢失或损坏,造成的不再向剩余成员发送组播组会话包,路由器会以1秒为间隔发送两条特定查询消息
IGMPV1:
区别:
无离开组消息
无特定组查询消息
无法在查询消息中包含最大响应时间,主机的最大响应时间始终为10s
无查询路由器选举进程,依赖多播路由协议在子网中选举一个指派路由器
向下兼容:
主机运行v2 路由器运行v1
路由器v1会忽略v2的消息,当v2主机接收到v1的查询消息,会发送v1成员关系报告消息作为响应,v1查询中不指定最大响应时间,v2主机使用v1的固定周期10s钟;
v2主机不向v1路由器发送离组消息
主机运行v1 路由器运行v2
v2路由器接收到版本v1的成员报告消息,将认为该组所有成员运行v1,此时会设置一个老式主机呈现定时器(与组成员关系间隔时间相同,为查询消息的3倍),
当收到一条新的v1版本成员报告消息,将会重置定时器,当定时器超时后,则认为子网中无v1成员,从而恢复为v2消息及处理进程。
IGMPV3:
增加了特定组合源查询:通过组地址或源地址来标识组
组播协议:管理多播树的变化情况。通过机制来确定给定(S,G)的上行和下行接口;发现去往目的地的最短路径。
DVMRP:距离矢量多播路由协议,使用自身内嵌的协议,易实现、高开销,适用于小型、高带宽且密集分布了大量组成员的网络
MOSPF:多播ospf,将链路协议状态引入到了路由表中,设计复杂,不能脱离ospf独立运行 属于密集模式协议
CBT:核心数,引入了协议无关特性,基于已有的单播路由表确定单播目的地址,不关心使用的是哪种协议,协议不成熟,缺乏现实应用
PIM-DM:协议无关多播-密集模式
PIM-SM:协议无关多播-稀疏模式
组播转发:反向路径转发,确定上行接口,找到去往源的最短路径。
路由发现:
包转发:组播路由器将数据包向远离源的方向转发:数据包到达某个入接口,将多份数据包拷贝从多个出接口向外转发,若存在环路则会发生组播风暴,因此必须感知数据包的源,
只能向离开源的方向转发数据包。
多播路由器需要维护一个记录(源,组)的多播转发表
多播树:所有路由器都确定了特定源和特定多播组的上行和下行接口,就建立了多播树。
如何管理组播树的变化:
隐式加入:由发送方发起的广播/剪除协议,下行接口状态:转发、剪除(定时器:周期性的检查组成员)适用于密集拓扑结构。
显示加入:由直接连接组成员的路由器发起加入请求(嫁接消息),将自己嫁接到多播树中,若路由器没有处于活动状态的下游邻居时,会将自己从多播树中剪除。适用于稀疏模式。
有源树和共享树:
多播路由协议会为每个多播源构建独立的多播树
有源树:多播树的根被称为有源树,有源树为每个源记录单独的(S,G)
共享树:多个多播树可以共享网络中的同一台路由器,共享树不以每个源为根建立多播树,而以一台共享的被称为RP聚合点的路由器为根。
RP是预先确定好的,当多播源开始一个多播会话时,首先要向RP注册,由与多播源直连的路由器来确定去往RP的最短路径,共享树记录的是(*,G),需要为每个多播组记录一个(*,G)
扩展性强(不感知多播源的数量变化,记录表项少),适用于稀疏模式,
可能会产生次优路径,在密集模式下RP会成为瓶颈,设计不好的时候存在时延问题,RP属于单点故障源,难进行故障调试
组播定界
TTL定界:在出接口上设置过滤器,当超出设置的阀值后,将丢弃报文;
TTL阀值:
0------限定在同一台主机
1------限定在同一子网
15---- 限定在同一站点
63---- 限定在同一区域
127---全球范围
191---全球受限带宽
255---无限制
缺点:
接口TTL阀值会被应用于所有的组播包;
需要依赖于用户正确的设置TTL参数。
很难在网络中实施(需要正确预测TTL阀值),只能用于简单的网络拓扑结构。
管理性定界:使用一段D类地址来进行多播定界:239.0.0.0---239.255.255.255
PIM
PIMV1:封装在IP包中,协议号为2(IGMP),使用多播地址:224.0.0.2
PIMV2:自身协议号103,多播地址:224.0.0.13