组播,顾名思义就是一对多的传输,用单播方式向多个主机传输相同的数据包时对于每一个路径都要传输重复的数据,浪费了带宽资源,而组播的方式使得路径上只需要传输一份数据,由路由器根据组播协议复制转发对应的数据即可有效节约资源。
具有相同目的的设备可以组成一个组播组,为了标识不同的组播组,我们用组播IP地址来区分它们,D类IP地址就是用来表示组播地址的,所以224.0.0.0-239.255.255.255之间的地址表示这是一个组播地址,例如张三是一个人的名字对应设备的IP地址,而张三台球俱乐部显然是一个群组的名字,表示多个相同具有目的的人,对应组播IP地址,代表多个设备。而组播IP地址中又分为三类:
- 224.0.0.0-224.0.0.255:预留的永久组播地址,用于特殊用途,例如:中国人民、北京人这样的组织名,是预定义的有特殊含义的组播地址
- 224.0.1.0-238.255.255.255:全球可用的组播地址,临时组播地址,如普联技术有限公司,小米公司这样的组织,在全球范围内可以用来通信与识别身份
- 239.0.0.0-239.255.255.255:本地管理组播地址,类似于私有IP地址,如人事部,三年级,多个公司都有人事部,多个学校都有三年级,只能在本地标识某个群组的身份
组播地址只能作为目的IP地址
组播MAC地址:组播IP 地址在网络层中传输时可以表明这是一个组播,同样在数据链路层中也需要类似的机制,使用的便是组播MAC地址,而组播MAC地址同样也在形式上具有特殊性,首先组播MAC地址的第一个字节的最低位一定是1,这可以用来区分单播与组播MAC地址.
组播MAC地址是由组播IP地址映射而来,首先组播MAC地址的前24位为01-00-5E,第二十四位为0,剩下的23位与组播IP地址的后23位相同,由于IP地址共32位,组播IP前四位固定为1110,那么还有32-4-23=5位是没有用到的,所以可能有2^5=32个不同的组播IP公用一个相同的组播MAC地址.
IGMP协议-互联网组管理协议(Internet Group Management Protocol)
作用于主机与最后一条路由器之间,用来管理多播组(这里的管理主要指的有成员状态的检测,成员的加入与退出),目前共有三个版本,其中V2是主流版本,涉及到的报文种类主要有四个:
- General Query 普遍组查询/常规查询
- Membership Report成员关系报告
- Leave 成员离组报文
- Group-Specific Query 定组查询
| 发送方 | 接收方 | 发送时机 | 作用 | 报文中组播组地址 | 备注 | |
|---|---|---|---|---|---|---|
| General Query | IGMP查询器 | 224.0.0.1 | 周期性 | 对网络中所有多播组进行查询 | 0.0.0.0 | 最大响应时间 |
| Membership Report | 主机 | 组播组地址 | 申请加入组播组中或对查询报文进行应答时 | 报告组员信息 | 目标组播组地址 | 抑制机制 |
| Leave | 离组主机 | 224.0.0.2 | 成员离组时 | 宣告离开组播组 | 待离开的组播组地址 | |
| Group-Specific Query | IGMP查询器 | 224.0.0.1 | 成员离组后 | 检验组内是否还有成员 | 待查询组播组 |
IGMP V3
ASM(Any-Source Multicast,任意源组播)和SSM(Source-Specific Multicast,特定组播源)
增强功能:(支持SSM指定源)
- 针对组播源的过滤模式,在加组的报文中可以指明接受或拒绝来自特定组播源的数据
- 增强查询和报告报文功能,记录过滤模式
任何设备都可以成为组播源,即向某个组播发送数据,而IGMPV3支持过滤某些特定的组播源
在IGMPV3中只有两种报文,分别是
1、成员关系查询报文(Membership Query)目的地址为224.0.0.1
IGMPv3成员关系查询报文
类型8bit 最大响应时间8bit 校验和16bit 组地址32bit 保留4bit S QRV3bit QQIC8bit 组播源个数16bit 组播源地址32bit `````` 组播源地址32bit类型(Type):在IGMPv3中,为0x11
最大响应时间(Max Response Time):作为组播接收者对成员关系查询报文的响应时间。
组地址(Group Address):在常规成员关系查询报文中,为0.0.0.0;在特定组成员关系查询报文中,为所查询的组播组IP地址;在离组报文中,为所离开的组播组IP地址;在成员关系报告报文中,为主机所加入的组播组IP地址。这一点与v2是类似的
S(Suppress Router-Side Processing,抑制路由器侧处理)标志位:该字段为1和0时代表着不同的意义。
QRV(Querier’s Robustness Variable,查询器健壮系数):该字段为变量,影响着组成员关系的超时时间,IGMPv3中发送的查询报文中设置QRV,缺省为2。
QQIC(Queruer‘s Query Unterval Code,查询器查询间隔):查询器发送常规查询报文的间隔,默认为60s。
组播源个数(Nember of Sources):在特定组成员查询报文中,该字段代表着当前组播组中组播源的个数。
2、成员关系报告报文(Membership Report)目的地址为224.0.0.22
| 类型8 | 保留8 | 检验和16 |
| 保留16 | 组记录个数16 | |
| 组记录32 | ||
| `````` | ||
| 组记录32 | ||
类型(Type): 在IGMPv3中,恒为0x22。
组记录个数(Number of Group Records): 报文中组记录的个数。
组记录(Group Record): 以下为组记录的具体格式。
| 记录类型8 | 附加数据长度8 | 组播源个数16 |
| 组播地址32 | ||
| 组播源地址32 | ||
| `````` | ||
| 组播源地址32 | ||
| 附加数据32 | ||
主机可以使用成员关系报告报文指出加入了哪个组,并通过记录类型指定接受或者拒绝某些特定组播源的数据
记录类型(Record Type): 在IGMPv3中定义了6种记录类型,具体介绍在下文。
记录类型 分类 说明 组记录类型 当前状态记录Correct-State Record 用于对成员关系查询进行回应,并宣告当前状态 MODE-IS-INCLUDE 0x1 MODE-IS-EXCLUDE 0x2 过滤模式改变记录Filter-Mode-Changed Record 用于宣告过滤模式发生变化 CHANGE-TO-INCLUDE-MODE 0x3 CHANGE-TO-EXCLUDE-MODE 0x4 源列表改变记录Soure-List--Changed Record 用于宣告源列表发生变化 ALLOW-NEW-SOURCES 0x5 BLOCK-OLD-SOURCES 0x 附加数据长度(Auxiliary Data Length): 通常为0,在IGMPv3成员关系报告种不包含附加数据。
组播源个数(Number of Sources): 报文中所含组播源的个数。
组播地址(Multicast Address)和组播源地址(Source Address):组播IP地址和作为组播源的IP地址,报文中只是指出组播源的IP地址,至于是接受还是拒绝或者增加或者删除等要结合记录类型来判断!
IGMP snooping-用来控制组播报文在数据链路层的转发,作用于二层设备
通过组播组IP地址只能将组播数据传送到在该组播数据包目的组播组成员所在的网络内,或者说只能够精确到该成员上一跳路由器,在没有使用IGMP snooping 功能时,二层设备(如交换机)还是会将数据从所有端口转发出去,为了实现更加精确的转发,二层设备需要利用IGMP snooping功能将各个端口与MAC组播地址建立映射关系,这个过程类似于交换机的端口转发表的建立过程,交换机通过对收到的IGMP报文进行分析确定不同的端口,即受到查询报文的为路由器(查询器)端口,而接收到报告报文的为成员端口
IGMP Proxy-作用于三层设备上
对上层作为主机,发送报告报文和离开报文
对下层作为查询器,向下层发送查询报文
作用是减少其上游设备收到的报告报文和离开报文的数量