组播技术的特点:
- 增强效率,控制网络流量,减少服务器和CPU负载
- 优化性能,消除流量冗余
- 分布式应用,使多点传输成为可能
- 组播应用基于UDP
- 尽最大努力交付
- 无拥塞控制
- 数据包重复
- 数据包的无序交付
组播体系结构
- 组播协议分为主机-路由器之间的组成员关系协议和路由器-路由器之间的组播路由协议。
- 组成员关系协议包括IGMP(互联网组管理协议)。组播路由协议分为域内组播路由协议及域间组播路由协议。
- 域内的组播协议又分为密集模式与稀疏模式。域内组播路由协议主要使用PIM-SM,PIM-DM,DVMRP协议。
组播IP地址:
- l组播地址范围
- l保留组播地址
- l本地管理组地址
- l用户组播地址
- 组播MAC地址:
常用的保留组播地址
D类地址范围 | 描述 |
---|---|
224.0.0.0 | 基准地址(保留) |
224.0.0.1 | 所有主机的地址 |
224.0.0.2 | 所有组播路由器的地址 |
224.0.0.3 | 不分配 |
224.0.0.4 | DVMRP路由器 |
224.0.0.5 | OSPF路由器 |
224.0.0.6 | OSPF DR |
224.0.0.7 | ST路由器 |
224.0.0.8 | ST主机 |
224.0.0.9 | RIP-2路由器 |
224.0.0.10 | IGRP路由器 |
224.0.0.11 | 活动代理 |
224.0.0.12 | DHCP服务器/中继代理 |
224.0.0.13 | 所有PIM路由器 |
224.0.0.14 | RSVP封装 |
224.0.0.15 | 所有CBT路由器 |
224.0.0.16 | 指定SBM |
224.0.0.17 | 所有SBMS |
224.0.0.18 | VRRP |
IP地址到MAC地址的映射
IGMP——因特网组管理协议
- IGMP(InternetGroup Management Protocol)协议是主机与路由器之间唯一信令协议
- RFC1112规定了IGMPV1(支持windows95)
- RFC2236规定了IGMPV2(支持windows和大多数Unix最新的服务包)
- Draft-ietf-idmr-igmp-v3-03.txt规定了最新的IGMPV3
IGMP v1报文格式
- Ver:版本。表明IGMP版本,在IGMPv1中为1。
- Type:类型。IGMP类型为1说明是组播路由器发送的组成员查询消息;类型为2说明是主机发送的组成员报告消息。
- Unused:未使用。发送时被置为0,接收时忽略此字段。
- GroupAddress:组播组地址。组地址为D类IP地址。在查询消息中组地址设置为0,在报告消息中组地址为要参加的组地址
IGMP v2报文格式
- Type:报文类型。包括成员查询;版本1成员报告;版本2成员报告;离开消息。
- Max RespTime:最大响应时间。实际中响应时间是配置值范围(1~25秒)内的一个随机值。缺省为10秒。
- Group Address:组播组地址:在普遍查询中为0.0.0.0;特定组查询和报告消息中为相应的组播地址。
IGMP v3报文格式
IGMP中路由器、主机动作
jion-in
IGMP中共享网段路由器动作
报告抑制过程
IGMP三版本比较
IGMPv1工作机制
IGMPv1协议主要基于查询和响应机制完成组播组管理。在多路由器共享网段上,由三层路由协议选举出唯一的组播信息转发者(Assert Winner 或DR),并作为IGMPv1 的查询器,负责该网段的组成员关系查询。网络上IGMPv1 消息交互如图9-1 所示。
IGMPv1工作机制
IGMPv1协议主要基于查询和响应机制完成组播组管理。在多路由器共享网段上,由三层路由协议选举出唯一的组播信息转发者(Assert Winner 或DR),并作为IGMPv1 的查询器,负责该网段的组成员关系查询。网络上IGMPv1 消息交互如图9-1 所示。![](http://hi.csdn.net/attachment/201203/19/0_13321649896zEP.gif)
主机加入组播组的基本过程如下:
1. IGMP 查询器(RouterB)周期性地向共享网段内所有主机以组播方式(目的地址为组播地址)发送普遍组Query 查询消息。该报文的目的地址为224.0.0.1,表示该网段上的所有主机和路由器。
2. 网段内所有主机都接收到该普遍组查询消息。如果主机(如HostB 和HostC)希望加入某组播组G1,则以组播方式发送Report 报告。该报文的目的地址为224.0.0.1,报文中携带组播组G1 的地址信息。
3. 网段中所有主机和路由器都接收到该Report 报告,并获知组播组G1 地址信息,此时网段中其它也希望加入该组播组G1 的主机将不再发送针对相同组播组的Report 报告。同时,网段中预备加入另一组播组G2 的主机发送针对组播组G2 的Report 报告以响应普遍组查询消息。
4. 经过查询和响应过程后,IGMP 路由器了解到本网段内存在组播组G1 对应的组播组成员,则由组播路由协议生成(*,G1)组播转发项并以此作为组播数据的转发依据。之后,组播路由协议将发起上游路由更新以维护组播转发树。
5. 组播源发出的组播数据经过组播路由到达IGMP 路由器,如果IGMP 路由器上存在(*,G1)组播转发项,则转发该组播数据到此共享网段,G1 组播组成员主机接收该数据。
6. IGMPv1 中没有专门定义离开组播组的消息。当主机离开某组播组后,将不再发送以此组播组地址为目的地址的Report 报告。当网段中不再存在该组播组成员后,IGMP 路由器将不能收到任何针对此组播组的Report 报告,则IGMP 路由器删除该组播组对应的转发项。
IGMPv2新增功能
IGMPv2 对IGMPv1 所做的改进主要有以下几个方面:
查询器选举机制
IGMPv1 中,当某共享网段上存在多个组播路由器时,查询器的选择由组播路由协议决定。
IGMPv2 中使用独立的查询器选举机制,规定该网段上IP 地址最小的组播路由器为查询器。
离开组机制
在IGMPv1 中,主机悄然离开组播组,不会向任何组播路由器发出任何通知。这时组播路由器只能依靠普遍组查询消息响应超时来获知组播组成员的离开。
在IGMPv2 中,当某主机决定离开组播组G1 时,它会向该网段以组播方式发送IGMP Leave 报文。该报文的目的地址为224.0.0.2,表示该网段上的所有路由器,报文中携带组播组G1 的地址。随后,为了明确网段中是否还包含组播组G1 的其它成员主机,查询器会向网络中发送指定次数的特定组查询消息。
对指定组的查询
在IGMPv1 中,由组播路由器发起的普遍组查询面向该网段下的所有组播组。
在IGMPv2 中,增加了针对特定组的查询。IGMP 查询器在收到主机发送的离开组播组G1 的Leave 报文时,将向该网段中发送针对G1 的查询报文。该报文的目的地址为组播组G1 的地址,只有属于该组播组的主机才会进行响应,从而发送携带组播组G1 地址信息的Report 报告。IGMPv2和IGMPv1 版本的响应消息(即Report 报告)和查询消息具有相同的报文结构,报文中仅携带组地址信息。
特定组查询报文也称为最后成员查询报文。IGMP 查询器在收到主机发送的IGMPLeave 报文后,发送指定组查询报文的次数由健壮系数来确定。
最大响应时间
IGMPv2 中设置了最大响应时间,以限制查询器等待主机响应组查询报文(即发送report 报文)的最长时间。
IGMPv3改进功能
IGMPv3 在继承IGMPv2 的基础上进一步增强了主机的控制能力,支持指定源/组功能:主机在加入某组播组G 的同时,能够明确的要求接收或不接收某特定组播源S 发出的组播信息。* 当主机要求从某些指定源接收组播报文时,其IGMP Report 报告中的Filter-Mode字段将被设置为Include 模式,并在该报告中指定组播源地址Sources。鉴于描述方便,其IGMP Report 报告可以被标记为Include Sources(S1,S2,……)。
* 如果主机拒绝接收某些指定源的组播报文,则Filter-Mode 字段将被设置为Exclude 模式,并指定组播源地址Sources,表示从除指定源外的所有源地址接收组播报文。其IGMP Report 报告可以被标记为Exclude Sources(S1,S2,……)。
例如,网络中存在S1 和S2 两个组播源,均向组播组G 发送组播报文,User 仅希望接收从组播源S1 发往组播组G 的信息,典型组网如图9-2 所示。
如果主机和路由器之间应用IGMPv1 或IGMPv2,User 加入到某组播组G 后,将接收到来自组播源S1 和S2 的组播信息。如果采用IGMPv3,主机User 可以要求加入指定源S1 对应的组播组G,或退出指定源S2 对应的组播组G,从而仅有来自S1 的组播信息才能传递到User。
携带源地址的查询消息
IGMPv3 支持指定源/组查询。IGMPv3 报文中包含组播源地址字段和多种控制字段(如查询器的健壮系数、查询间隔等)。进行普遍组查询时,不携带组地址,也不携带源地址;进行指定组查询时,携带组地址,不携带源地址;进行指定源/组查询时,携带组地址,还携带1 个或多个源地址信息。
包含多个组记录的响应消息
IGMPv3 的响应消息(即Report 报告)的目的IP 地址为224.0.0.22,该报文携带1个或多个组记录,在每个组记录中,包含组播组地址、数目不等的源地址信息。组记录可以分为多种类型,如:
* 当前状态记录
报告了接口的当前接收状态,分为Include 和Exclude两种状态类型。Include 表示包含指定源地址列表,Exclude表示不包含指定源地址列表。
* 过滤模式改变记录
报告接口接收状态从Include 状态切换到Exclude 状态,或从Exclude 状态切换到Include 状态。
* 源地址列表改变记录
报告新源地址加入,或删除某源地址。