概念
组播通信是一种一对多的通信方式,组播报文(目的IP地址为组播IP地址的报文)发向一组接收者,这些接收者需要加入到相应的组播组中才会收到发往该组播组的报文。针对某个特定的组播组,即使网络中存在多个接收者,对于组播源而言,每次也只需发送一份报文,网络中的组播转发设备负责拷贝组播报文并向有需要的接口转发。一般而言,网络设备在收到组播报文后,缺省并不会对其进行转发,这些设备需要激活组播路由功能,并且维护组播路由表项,然后依据这些表项对组播报文进行合理转发
概念 | 描述 |
---|---|
组播源(Multicast Source) | 组播流量的发送源;组播源不需要激活任何组播协议 |
组播接收者(Multicast Receiver) | 期望接收特定组播组流量的终端PC或者其他类型的设备;只有加入特定组播组的接收者,才会收到发往该组的组播流量 |
组播组(Multicast Group) | 采用一个特定的组播IP地址标识的群组,例如239.1.1.1 |
组播路由器(Multicast Router) | 激活了组播路由功能的路由器(防火墙、交换机);两种角色需要额外关注:"第一跳路由器(First-hop Router)":直接面对组播源的组播路由器,它直接从组播源接收组播流浪,是组播流量进入组播网络的入口;"最后一条路由器(Last-hop Router)":直接面对组播接收者的路由器,除了负责将其从组播网络中收到的组播流量从存在接收者的接口转发出去,同时也负责维护其直连网络中的组成员关系 |
组播IP地址
D类IPV4地址范围是224.0.0.0-239.255.255.255,D类IP不能作为源IP地址使用,只能作为目的IP地址使用,并且D类IP也不能进行子网划分
地址范围 | 组播IP地址分类 |
---|---|
224.0.0.0-224.0.0.255 | IANA(Internet Assigned Numbers Authority)将这些地址分配于特殊用途。该类组播IP地址为永久组地址,其工作范围只限于链路本地,而不能用于组播转发。目的IP地址为此类地址的组播报文在IP头部中的TTL值通常为1.这类组播IP地址中,有一些已经被大家所熟知,例如:224.0.0.1------所有节点组播地址;224.0.0.2------所有路由器组播地址;224.0.0.5------所有OSPF路由器组播地址;224.0.0.6------所有OSPF DR组播地址;224.0.0.9------所有RIPv2路由器组播地址;224.0.0.13------所有PIMv2路由器组播地址;224.0.0.18------VRRP组播地址 |
224.0.1.0-231.255.255.255;233.0.0.0-238.255.255.255 | 该类IP地址为临时组地址,这种类型的组播地址全局有效 |
232.0.0.0-232.255.255.255 | SSM(Source Specific Multicast,特定源组播)组地址,该类IP地址为临时组地址,这些地址被用于特定源组播 |
239.0.0.0-239.255.255.255 | 本地管理组地址,该范围的组播地址仅在本地管理域内有效 |
组播MAC地址
第一个八位组的最低比特位标识了该MAC地址的类型,如果该比特位为0,意味着是一个单播MAC地址,如果是1则是组播MAC地址,组播MAC地址共有2^47个,占据了整个MAC地址空间的一半
组播IPv4地址相对应的组播MAC地址的高25bit是固定的(其中高24bit是0x01005e,第25个比特位为0),而剩余的23bit则从其对应的组播IPv4地址的低23bit拷贝
拓展资料,搜索"ip组播为什么只有23位是映射的"
组播IPv6地址相对应的组播MAC地址的高16bit是固定的33-33,剩余的32bit从对应的IPv6地址的低32bit拷贝而来
组播网络架构
架构 | 描述 |
---|---|
组播源与第一跳组播路由器构成了第一部分 | 组播源无需运行任何组播协议,只需将组播报文发送出去;组播报文在传输层通常采用UDP封装,在网络层采用IP封装 |
网络中的组播路由器所组成的组播网络构成了第二部分 | 为了能够正确地转发组播报文,路由器需要维护组播路由表,需要组播路由协议,常见的有PIM、MOSPF、MBGP等。 |
最后一条路由器与组播接收者构成了第三部分 | 只有当最后一跳路由器获知其直连网段中存在某个组播组成员时,它才会向该网段转发该组播流量,否则,路由器将不会把该组播组的流量转发到这个网段。确保本地网络中的组播路由器(最后一跳路由器)知晓组成员的存在,IGMP(Internet Group Management Protocol)便是用于实现此功能 |
IGMP(Internet Group Management Protocol,因特网组管理协议)
IGMP报文采用IP封装,IP头部中的协议号为2,TTL字段值通常为1,因此IGMP报文只在本地网段内传播
- IGMPv1,只定义了基本的组成员查询及组成员关系报告机制
- IGMPv2,在IGMPv1的基础上改进,定义了组成员离开机制、支持特定组播组查询以及定义了查询器选举机制
- IGMPv3,在之前的版本基础上增加了组成员对特定组播源的限制功能,,也是SSM(Source-Specific Multicast,特定源组播)的重要组件之一
IGMPv1
报文 | 描述 |
---|---|
成员关系查询(Membership Query)报文 | IGMP查询器使用该报文向直连网段进行查询,以便确认该网段中是否存在组播组成员。成员关系查询报文的目的IP地址是224.0.0.1(所有节点组播地址)。IGMP查询器指的是在一个网段中执行IGMP查询操作的最后一跳路由器,并且这些路由器都在接口上激活了IGMP,此时只有其中的一台路由器会成为该网段的IGMP查询器,并在该网段中执行查询操作 |
成员关系报告(Membership Report)报文 | 组播组成员收到路由器发送的成员关系查询报文后,会以成员关系报告报文进行回应,以便告知路由器自己所加入的组播组。当然,新加入组播组的成员无需等待路由器的成员关系查询报文,可以直接发送成员关系报文以宣告自己加组。成员关系报告报文的目的IP地址是主机期望加入的组播组的IP地址,而且报文荷载中的"组地址"字段也记录了该组播组的IP地址 |
IGMPv1报文
字段 | 比特 | 描述 |
---|---|---|
版本(Version) | 8bit | 对于IGMPv1该字段恒为1 |
类型(Type) | 4bit | 对于成员关系查询报文,该字段值为1;对于成员关系报告报文,该字段值为2 |
校验和(Checksum) | 16bit | 校验和 |
未使用 | 8bit | 未使用 |
组地址(Group Address) | 32bit | 对于IGMPv1成员关系查询报文,该字段的值被设置为0.0.0.0;对于IGMPv1成员关系报告报文,该字段的值被设置为主机所加入的组播组地址 |
IGMPv1查询及响应
- 如图,PC1、PC2和PC3以及AR1连接到同一台交换机LSW1,并且属于相同的VLAN,使用相同的IP网段。PC1及PC3属于组播组239.1.1.1的成员,PC2属于组播组239.1.1.2的成员。在AR1的G0/0/1口激活了IGMPv1后,将在G0/0/1口周期性地(缺省以60秒为周期)发送IGMPv1成员关系查询报文,该报文的目的IP地址是224.0.0.1(所有节点组播地址),并且报文中"组地址"字段的值为0.0.0.0,该查询面向所有组播组。AR1发送的IGMPv1成员关系查询报文到达LSW1后,会被LSW1进行泛洪,因此PC1、PC2和PC3都会收到该报文
- 为了使自己能够正常地收到组播流量,组成员收到IGMPv1成员关系查询报文后需要使用IGMPv1成员关系报告报文进行回应,以便刷新IGMP路由器的相关表项。然而当网段中同一个组播组存在多个成员时,如果所有的成员都是用关系报告报文回应此查询,那么将产生多余的IGMP流量。其实在一个组播组中只需要一个组成员对成员关系查询进行回应即可,毕竟IGMP路由器只需要知道直连网段中存在某个组播组的成员,而至于存在多少个组成员,它并不关心。
- 连接在LSW1的PC都会收到AR1发送的IGMPv1成员关系查询报文,所有的PC都会在本地启动一个报告延迟计时器(Report Delay Timer),计时器的值被设置为0至10秒之间的一个随机数,当该计时器超时的时候,PC便立即发送IGMPv1成员关系报告报文。假设PC1的计时器率先超时,那么它将立即发送IGMPv1成员关系报告,这个报文的目的IP地址是239.1.1.1,封装成帧发往LSW1,LSW1将这个数据帧进行泛洪,AR1及其他PC都会收到该帧
- AR1收到这个IGMP报文后,了解到其G0/0/1接口上存在组播组239.1.1.1的成员,于是AR1将维护相关IGMP组表项及IGMP路由表项,当AR1收到发往239.1.1.1组播流量后,便将这些组播流量从该接口转发出去
- 同时,当PC3收到PC1发送的IGMPv1成员关系报告报文后(此时它的报告延迟计时器并未超时),发现PC1所加入的组播组与自己相同,于是PC3将抑制自己的成员关系报告来减少网络中多余的IGMP流量
- PC2加入的组播组是239.1.1.2,与PC1不在同一个组,因此PC2的计时器超时后,将自行发送成员关系报告报文,该报文的目的IP地址是239.1.1.2。AR1收到该报文后,了解到接口G0/0/1存在239.1.1.2的成员,因此当AR1收到发往239.1.1.2组播组的流量时,从G0/0/1口转发出去
IGMPv1组成员加入
- 当网络中某个PC想要加入某个组播时,无需等待路由器的成员关系查询,可以直接发送成员关系报告。上图假设加入PC4的组播为239.1.1.4,PC4将直接发送IGMPv1成员关系报告,该报文目的IP为239.1.1.3,AR1收到报文后,了解到G0/0/1口的直连网段中出现了组239.1.1.3的成员,于是将维护相关的IGMP组表项和IGMP路由表项,当AR1收到发往239.1.1.3的组播流量时,便会将这些流量转发到该网络中
IGMPv1组成员离开
- IGMPv1并没有明确定义组成员离开组播组的机制,当组成员离开组播组时,它只是简单地不再回应成员关系查询。假设PC1离开组播组239.1.1.1后,它将对AR1的IGMPv1成员关系查询报文不再回应。然而由于组播组239.1.1.1还存在组成员PC3,而PC3会对该查询进行回应,因此PC1的离开不会对网络产生影响。而当PC3页离开组播组后,该网络中不会再有239.1.1.1的组成员回应AR1的成员关系查询,因此AR1将在一定时间(缺省130秒)后认为该网络中不再存在组239.1.1.1的成员,因此不会再想该网络转发组播组239.1.1.1的流量
IGMPv1查询器
假设再加一台AR3,AR3的G0/0/0口激活了IGMPv1,那么AR1和AR3会进行竞争,胜出的路由器(的接口)将成为该网段的IGMP查询器。假设AR1胜出,那么AR1将以60秒为周期,向该网段发送IGMPv1成员关系查询报文,而AR3则不会发送这些报文,它只是默默地在一旁侦听AR1发送的IGMPv1成员关系查询报文,当AR1发生故障时,AR3可以随时接替工作。实际上IGMPv1并没有定义查询器的选举机制,它只能求助于PIM(Protocol Independent Multicast,协议无关组播)这样的组播路由协议,此图,AR1和AR3激活了IGMPv1和PIM,那么PIM选举产生的DR(Designated Router,指定路由器)将充当IGMPv1的查询器
IGMPv2
成员关系查询(Membership Query)
报文类型 | 描述 |
---|---|
成员关系查询 | |
常规查询 | IGMP查询器使用该报文向直连网段进行查询,以确认该网段中是否存在组播组成员。由于该报文查询的是所有组播组,因此也被称为普通组查询报文。常规查询报文的目的IP地址为224.0.0.1 |
特定组查询 | 运行IGMPv2的主机在离开其所加入的组播组时,会主动发送一个IGMPv2离组报文,用于宣告自己离开组播组,当网络中的查询器收到这个离组报文后,需要确认该组播组中是否存在其他成员,此时该查询器便会发送特定组查询报文,该报文只针对特定的组播组进行查询,报文的目的IP地址为其所查询的组播组地址,而且报文荷载中的"组地址"字段也记录了这个组播组地址 |
成员关系报告(Membership Report) | 当主机加入组播组时,或者当其收到查询器发送的常规查询报文时,主机将发送成员关系报告报文,该报文的目的IP地址是主机所加入的组播组地址,而且报文荷载中的"组地址"字段也记录了该组播组地址 |
离组(Leave Group) | 当主机离开其所加入的组播组时,便会主动发送离组报文。离组报文的目的IP地址为224.0.0.2,报文荷载中的"组地址"字段记录了主机所要离开的组播组地址 |
版本1成员关系报告(Version1 Membership Report) | 该报文用于兼容IGMPv1 |
IGMPv2报文
字段 | 比特 | 描述 |
---|---|---|
类型(Type) | 4bit | 对于成员关系查询报文,该字段值为0x11;对于成员关系报告(IGMPv2)报文,该字段值为0x16;对于离组报文,该字段值为0x17;对于版本1成员关系报告报文,该字段值为0x12 |
校验和(Checksum) | 16bit | 校验和 |
最大响应时间(Max Response Time) | 8bit | 该字段指的是主机使用成员关系报告来响应该成员关系查询报文的最长等待时间。该字段只在成员关系查询报文中被设置,在其他IGMPv2报文中被设置为0 |
组地址(Group Address) | 32bit | 对于常规查询报文,该字段的值被设置为0.0.0.0;对于特定组查询报文,该字段值被设置为所查询的特定组播组的IP地址。对于离组报文,该字段的值被设置为主机离开的组播组的IP地址 |
IGMPv2查询及响应
与IGMPv1大体相同。不同的是IGMPv2定义了协议自己的查询器选举机制,不再像IGMPv1那样,需要依赖组播路由协议进行查询器的选举。同时,IGMPv2可以通过最大响应时间调节组成员响应查询的速度,查询器发送的IGMPv2常规查询报文中所携带的最大响应时间缺省为10秒(可在接口视图下,使用igmp max-response-time,命令修改该时间值),当主机收到该报文时,会读取该报文中的"最大响应时间"字段的值,并启动一个报告延迟计时器,该计时器的时间被设置为一个随机数,取值范围是-0最大响应时间。当该计时器超时的时候,主机便立即发送成员关系报告;若在超时之前,主机收到一个组播组内的其他成员的成员关系报告,则会抑制自己的报告
IGMPv2组成员离开
- 组成员离开组播组时,会主动发送IGMPv2离组报文。如图,当PC1离开组播组239.1.1.1时,PC1将发送一个IGMPv2离组报文,该报文的目的IP地址是224.0.0.2(所有路由器组播地址),报文中的"组地址"字段的值被设置为239.1.1.1
- AR1收到这个离组报文后,得知有组成员要离开组播组239.1.1.1,于是AR1立即针对该组发送IGMPv2特定组查询报文,以确认该组播组中是否还有其他成员。如果在很短的时间内没有主机回应该查询,则AR1将再次发送一个IGMPv2特定组查询报文。AR1缺省以1秒为间隔发送特定组查询报文,一共发送两次(发送时间间隔及发送次数均是可配置的)。为了让可能存在的组成员尽快响应该特定组查询报文,路由器将该报文中的最大响应时间设置成缺省1秒
- PC3收到了AR1发送的IGMPv2特定组查询报文后,发现AR1正在查询的就是自己所加入的组播组,因此PC3立即发送一个IGMPv2组成员关系报告报文用于通告自己的存在
- AR1收到了PC3发送的成员关系报告后,知道了组播组239.1.1.1还有其他成员,因此它将继续维护该组的成员关系,并继续想该网段转发239.1.1.1的组播流量
- PC2发送一个IGMPv2离组报文
- 由于组播组239.1.1.2中已经没有其他组员了,因此不会有任何PC对AR1的特定组查询报文进行回应,在一段时间后,AR1将认为该网段中组播组239.1.1.2已经不存在任何成员了,因此它将不再向该网段转发239.1.1.2的组播流量
IGMPv2查询器
IGMPv2定义了查询器的选举机制:接口IP地址最小的路由器成为该网段的IGMPv2查询器。
如图,AR1和AR3激活了IGMPv2,初始情况下,双方都认为自己是查询器,因此都向该网段发送IGMPv2常规查询报文。AR1和AR2都收到对方发送的常规查询报文,它们将报文的源IP地址与自己的接口IP地址进行比较,由于AR3的G0/0/1接口IP地址更小,因此AR3为查询器,AR3会周期性发送常规查询报文;非查询器会为当前的查询器启动一个其他查询器存活计时器(Other Querier Present Timer),该计时器的时间缺省为125秒,可在接口配置视图下使用igmp timer other-querier-present命令修改,每次收到查询器发送的查询报文时,该计时器将被重置,而如果长时间没有收到查询器发送的查询报文并导致该计时器超时,那么非查询器将认为当前的查询器已经发生故障,此时新一轮查询器的选举过程将被触发