网络原理IP组播基础
IP组播技术有效地解决了单播和广播在点到多点应用中的问题。组播源只发送一份数据,数据在网络节点间被复制、分发,且只发送给需要该信息的接收者。
什么是组播?
单播存在问题:重复流量过多;消耗设备和链路带宽资源;难以保证传输质量。(目前单播应用最多)。
组播是一种点到多点的通信模式,一个发送者需要同时向多个接收者发送相同的信息时。
组播可以跨网段传输,比广播更加安全。
组播的优势:无重复流量;节省设备与带宽资源;安全性高;有偿性有保障。
提高效率:控制网络流量,减轻服务器和CPU负荷。
优化性能:减少冗余流量。
分布式应用:使多点应用成为可能。
组播劣势:
组播是基于UDP的:尽力而为;没有拥塞避免机制;报文重复;报文失序。
组播组:用IP组播地址进行标识的一个集合。任何用户主机(或其他接收设备),加入一个组播组,就成为了该组成员,可以识别并接收发往该组播组的组播数据。
组播源:信息的发送者称为“组播源”,如图1中的Source。一个组播源可以同时向多个组播组发送数据,多个组播源也可以同时向一个组播组发送报文。组播源通常不需要加入组播组,由源端DR负责管理组播源的注册和SPT(Shortest Path Tree)的建立。
组播组成员:所有加入某组播组的主机便成为该组播组的成员。组播组中的成员是动态的,主机可以在任何时刻加入或离开组播组。组播组成员可以广泛地分布在网络中的任何地方。
组播路由器:支持三层组播功能的路由器或交换机。组播路由器不仅能够提供组播路由功能,也能够在与用户连接的末梢网段上提供组播组成员的管理功能。
组播IP:224.0.0.0-239.255.255.255 IPv4地址一共32位 D类地址
一个组播IP地址并不是具体的某台主机,而是一组主机的集合。
范围 | 含义 |
---|---|
224.0.0.0—224.0.0.255 | 为路由协议预留的永久组地址 |
224.0.1.0—231.255.255.255 233.0.0.0—238.255.255.255 | Any-Source临时组播组地址(任意源) |
232.0.0.0—232.255.255.255 | Source-Specific临时组播组地址(特定源) |
239.0.0.0—239.255.255.255 | 本地管理的Any-Source临时组播组地址 |
244.0.0.0 不分配 224.0.0.3不分配
Ip组播常见模型
组播服务模型的分类是针对接收者主机的,对组播源没有区别。组播源发出的组播数据中总是以组播源自己的IP地址为报文的源地址,组播组地址为目的地址。而接收者主机接收数据时可以对源进行选择,因此产生了ASM(Any-Source Multicast)和SSM(Source-Specific Multicast)两种服务模型。这两种服务模型默认使用不同的组播组地址范围。
ASM模型
ASM模型仅针对组地址提供组播分发。一个组播组地址作为一个网络服务的集合,任何源发布到该组地址的数据得到同样的服务。接收者主机加入组播组以后可以接收到任意源发送到该组的数据。
为了提高安全性,可以在路由器上配置针对组播源的过滤策略,允许或禁止来自某些组播源的报文通过。最终从接收者角度看,数据是经过筛选的。
ASM模型要求组地址必须整个组播网络中唯一。“唯一”指的是同一时刻一个ASM地址只能被一种组播应用使用。如果有两种不同的应用程序使用了同一个ASM组地址发送数据,它们的接收者会同时收到来自两个源的数据。这样一方面会导致网络流量拥塞,另一方面也会给接收者主机造成困扰。
SSM模型
SSM模型针对特定源和组的绑定数据流提供服务,接收者主机在加入组播组时,可以指定只接收哪些源的数据或指定拒绝接收来自哪些源的数据。加入组播组以后,主机只会收到指定源发送到该组的数据。
SSM模型对组地址不再要求全网唯一,只需要每个组播源保持唯一。这里的“唯一”指的是同一个源上不同的组播应用必须使用不同的SSM地址来区分。不同的源之间可以使用相同的组地址,因为SSM模型中针对每一个(源,组)信息都会生成表项。这样一方面节省了组播组地址,另一方面也不会造成网络拥塞。
IGMP是Internet Group Management Protocol,又被称为互联网组管理协议,是TCP/IP协议族中负责IPv4组播成员管理的协议。IGMP用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。IGMP通过在接收者主机和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中。
IP组播通信的特点是报文从一个源发出,被转发到一组特定的接收者。但在组播通信模型中,发送者不关注接收者的位置信息,只是将数据发送到约定的目的组播地址。要使组播报文最终能够到达接收者,需要某种机制使连接接收者网段的组播路由器能够了解到该网段存在哪些组播接收者,同时保证接收者可以加入相应的组播组中。IGMP就是用来在接收者主机和与其所在网段直接相邻的组播路由器之间建立、维护组播组成员关系的协议。
组播MAC地址
IETF认为同一个局域网中两个或多个组地址生成相同的MAC地址的几率非常低,不会造成太大的影响
组播基本架构
组播源侧、组播网络、组播接收者侧。
组播分发树
用了描述IP组播报文在网络中的路径。
**源树(SPT)**的根是组播信息流的来源,由组播源到用户间的最短路径构成。
组成:S源地址;G组地址;iff入接口;oiflist出接口列表。
占用内存较多,但路径最优,延迟最小。
共享树(RPT)以网络上某特定节点为公用根。在组播路由协议中,这个根被称为汇聚点(Rendezvous point,RP),因此,共享树也可以称为RPT。
组成:*任何源地址;G组地址;iff入接口;oiflist出接口列表。
占用内存较小,路径不是最优,引入额外延迟。
组播数据转发
组播数据转发和单播数据转发是相反的,单播数据转发关心报文要到哪里去,组播数据转发关心数据报文从哪里来。
组播数据转发引入“逆向路径转发”机制(RPF)来避免环路。
RPF(reverse path forwarding)逆向路径转发
路由收到组播数据报文后,只有确认这个数据报文从自己到组播源的出接口上到来的,才进行数据转发 ,否则丢弃报文。依据:单播路由表。
- RPF检查2.出推组播流。
RPF检查:
在单播路由表中查找到组播报文源地址的路由信息。
如果该路由信息中出接口就是组播报文的入接口,RPF成功该接口被称为RPF接口。否则失败,丢弃。
IGMP(internet group management protocol)因特网组管理协议,负责IP组播成员管理协议。
用来在组播接收者和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
三个版本:IGMPv1、IGMPv2、IGMPv3
IGMP协议运行于主机与组播路由器之间。
IGMP协议作用:
主机侧:通过IGMP协议向路由器通告组成员关系。
路由器侧:通过IGMP协议维护组成员关系。
IGMPv1工作机制
普遍组查询与响应。 响应抑制机制。
组成员离开:静默离开。路由器周期性发送普遍组查询。普遍组查询130S没有收到响应,则路由器认为该组不存在组播成员。
IGMPv2工作机制
改进:1.组成员离组,主动发送离开报文。2.查询器选举机制。IP地址最小路由器成为查询器。
IGMPv3工作机制
目前已经成为正式标准,服务于Source specific multicast(SSM)模型
IGMPv3不仅支持IGMPv1版本的普遍组查询,支持IGMPv2版本的特定组查询,而且支持IGMPv3版本的指定源/组查询。在IGMP消息中携带组播源地址和多种控制字段(如查询器的强壮性系数、查询间隔等)。对于普遍组查询,既不携带组地址,也不携带源地址;对于特定组查询,携带组地址,但是不携带源地址;对于指定源/组查询,既携带组地址,而且还携带1个或多个源地址信息。
机制 | IGMPv1 | IGMPv2 | IGMPv3 |
---|---|---|---|
查询器选举 | 依靠其他协议 | 自己选举 | 自己选举 |
成员离开方式 | 静默离开 | 主动发送离开报文 | 主动发送离开报文 |
特定组查询 | 不支持 | 支持 | 支持 |
指定源、组 | 不支持 | 不支持 | 支持 |
IGMPv1中定义了基本的组成员查询和报告过程,IGMPv2在此基础上添加了查询器选举和组成员离开的机制,IGMPv3中增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。三个版本在演进过程中对协议报文的处理是向前兼容的,因此尽管各个版本的协议报文格式不同,但是运行IGMP高版本的路由器可以识别低版本的IGMP报文。
所有IGMP版本都支持ASM(Any-Source Multicast)模型。IGMPv3可以直接应用于SSM(Source-Specific Multicast)模型,而IGMPv1和IGMPv2则需要IGMP SSM Mapping技术的支持才可以应用于SSM模型。
项目 | IGMPv1 | IGMPv2 | IGMPv3 |
---|---|---|---|
查询器选举方式 | 依靠组播路由协议PIM选举 | 同网段组播路由器之间竞争选举 | 同网段组播路由器之间竞争选举 |
普遍组查询报文 | 支持 | 支持 | 支持 |
成员报告报文 | 支持 | 支持 | 支持 |
特定组查询报文 | 不支持 | 支持 | 支持 |
成员离开报文 | 不支持 | 支持 | 没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达 |
特定源组查询报文 | 不支持 | 不支持 | 支持 |
指定组播源 | 不支持 | 不支持 | 支持 |
可识别报文协议版本 | IGMPv1 | IGMPv1、IGMPv2 | IGMPv1、IGMPv2、IGMPv3 |
ASM模型 | 支持 | 支持 | 支持 |
SSM模型 | 需要IGMP SSM Mapping技术支持 | 需要IGMP SSM Mapping技术支持 | 支持 |
IGMP snooping的工作机制
IGMP Snooping可以实现组播数据帧在数据链路层的转发和控制。
使能IGMP Snooping功能后,二层设备会侦听主机和路由器之间交互的IGMP报文。通过分析报文中携带的信息(报文类型、组播组地址、接收报文的接口等),建立和维护二层组播转发表,从而指导组播数据帧在数据链路层按需转发。
IGMP Snooping建立和维护二层组播转发表的过程:
① RTA作为查询器,周期性的发送普遍组查询,该报文被扩散到交换机的所有端口,包括与交换机CPU相连的内部接口0。交换机CPU收到查询报文后,判断1号接口为连接路由器的接口。
② Client B希望加入组播组224.1.2.3,因此以组播方式发送一个IGMP成员报告报文,报告中具有目的MAC地址0x0100.5e01.0203。最初转发表上没有这个组播MAC地址的表项,所以该报告被扩散到交换机的所有接口,包括与交换机CPU相连的内部接口0;当CPU收到Client B的IGMP报告时,CPU利用IGMP报告中的信息建立了一个转发表项,此表项包括Client B的接口号,连接路由器的接口号和连接交换机内部CPU的接口号。
③ 形成此转发表项的结果是使后面任何目的地址为0x0100.5e01.0203的组播帧都被控制在端口0、1和3,而且不向交换机其他端口扩散。
- Client C加入组224.1.2.3并主动发一个IGMP报告,交换机CPU收到此报告,它在转发表项上为MAC地址0x0100.5e01.0203增加一个端口(端口4)。
- 当监听到主机发出的IGMP离开报文时,交换机就将删除与该主机对应的组播MAC地址表中
- 通过不断地监听IGMP报文,交换机就可以在二层建立和维护组播MAC地址表 ,交换机就可以根据组播MAC地址表转发从路由器下发的组播报文 -
- 注:没有运行IGMP Snooping时,组播报文将在二层广播