前言:一直对组播这个概念迷迷糊糊,特别是交换机处理组播的方式,非常想搞懂但是懒癌发作。这几天终于耐心地看了下有关组播的资料,大致了解了一下同一广播域内组播的相关知识。组播占了计算机网络的一大部分,特别是组播路由这一块,知识点、名词非常多,要完全掌握并不是一件容易的事情。下面海翎光电的小编跟大家分享一下我的学习经验,如有错误请提出,谢谢。还有,此文全部组播均为IPv4环境下的组播,IPv6的组播跟IPv4完全不同,请注意区分。
一、 为什么需要组播
简单来说,就是因为在一些诸如视频点播的应用时,单播对主机的压力太大、而广播又对网络链路的压力太大。所以……
(一) 组播IP地址
-
224.0.0.0~239.255.255.255 所有组播地址
-
224.0.0.0~224.0.0.255 有特殊用途的组播地址(不能被路由)
-
224.0.0.1 同一网段所有主机
-
224.0.0.2 同一网段所有组播路由器
-
224.0.1.0~238.255.255.255 公网组播地址
-
239.0.0.0~239.255.255.255 私网组播地址
(二) 组播IP地址和MAC地址的关系
组播MAC地址的高24bit位是以01-00-5E开头,低23bit为组播IP地址的低23bit。
由于IP组播地址的高4bit是1110,标识了组播组,而低28bit中只有23bit被映像到组播MAC地址上,这样IP组播地址中就会有5bit没有使用,从而出现了32个IP组播地址映像到同一MAC地址上的结果。
(三)组播模型分类
根据接收者对组播源处理方式的不同,组播模型分为以下三类:
(1) ASM 模型:Any-Source Multicast,任意信源组播
在ASM 模型中,任意一个发送者都可以作为组播源向某组播组地址发送信息。众多接收者通过加入由该组播组地址标识的组播组以获得发往该组播组的组播信息。在ASM 模型中,接收者无法预先知道组播源的位置,但可以在任意时间加入或离开该组播组。
(2) SFM 模型:Source-Filtered Multicast,信源过滤组播
该模型继承了ASM 模型,从发送者角度来看,两者的组播组成员关系完全相同。SFM 模型在功能上对ASM 模型进行了扩展。
在SFM 模型中,上层软件对收到的组播报文的源地址进行检查,允许或禁止来自某些组播源的报文通过。
因此,接收者只能收到来自部分组播源的组播数据。从接收者的角度来看,只有部分组播源是有效的,组播源被经过了筛选。
(3) SSM 模型:Source-Specific Multicast,指定信源组播
在现实生活中,用户可能只对某些组播源发送的组播信息感兴趣,而不愿接收其它源发送的信息。该模型为用户提供了一种能够在客户端指定组播源的传输服务。
SSM 模型与ASM 模型的根本区别在于:SSM 模型中的接收者已经通过其它手段预先知道了组播源的具体位置。SSM 模型使用与ASM/SFM 模型不同的组播地址范围,直接在接收者与其指定的组播源之间建立专用的组播转发路径。
(四) 组播服务模型:针对接受者对源如何进行选择
(五)组播ip地址
(六)组播mac地址
高24bit=0x01005e,第25bit=0,第23bit=组播ip地址的第23bit
mac地址=01-00-5e(前缀)
优于ip地址的前4bit是1110,代表主笔标识,而后28bit中只有23bit被映射到mac地址表,这样ip地址中就有5bit信息丢失,直接的结果就是出现32个ip组播地址映射到同一个mac地址上。
(七) 组播的基本架构
数据发送-转发-接受
(八) 组播路由协议包括
(九)域间组播协议
对于ssm模型,没有域内和域间划分。优于接受者预先只掉组播的具体位置,因此可以借助pim sm的功能直接创建组播传输路劲
二、 IGMP简介
IGMP是Internet Group Management Protocol的简称,又被称为互联网组管理协议,是TCP/IP协议族中负责IPv4组播成员管理的协议。IGMP用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。IGMP通过在接收者主机和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中。
(一)到目前为止,IGMP 有三个版本:
IGMPv1(由RFC 1112 定义)
IGMPv2(由RFC 2236 定义)
IGMPv3(由RFC 3376 定义)
1、查询报文
该报文由组播路由器发出。可细分为通用查询报文和特定组查询报文。组播路由器定时发出通用查询报文(下图的组播路由器每125s发送一次)。通用查询报文的目标IP为224.0.0.1(所有主机),IGMP报头内的组播IP为0.0.0.0。用来查询该网段有哪些组播组的成员。特定组查询报文的目标IP则是要查询的组播组地址。
查询报文抓包
2、报告报文
该报文由主机发出。可对组播路由器发出的查询报文进行回应,同时主机在主动加入特定组的时候,也会主动发送该报文报告。报告报文的目标IP和IGMP报头内的组播IP均为主机加入的组播组地址(注意!这里虽说是回应路由器的,但是数据包的目标IP不是路由器)。
报告报文抓包
3、离开报文(仅限IGMPv2和v3)
该报文由主机发出。当主机离开组播组时发送此报文,向组播路由器报告离开了特定的组播组。离开报文的目标IP为224.0.0.2(所有组播路由器),IGMP报头内的组播IP为特定离开组的IP。
离开报文抓包
(二) igmp版本比较
三、交换机处理组播的方式
1、一切没有开启或不支持IGMP监听功能的交换机,组播数据包都以广播的形式在广播域内泛洪。
2、开启IGMP监听功能的交换机的每个VLAN会维护一个组播地址表。当收到组播数据包时,如果表中含有该数据包组播IP的条目,则按照表中的组播IP向对应的端口进行转发,否则以广播的形式在广播域内泛洪。
四、交换机的组播地址表样式
五、交换机组播地址表的学习和维护(IGMP监听过程)
(假设当前只有一个VLAN)
1、当组播路由器发出IGMP通用查询报文然后收到主机回应的IGMP报告报文时,交换机会把收到回应的端口和对应的组播地址学习到组播地址表中(其实只要是IGMP报告报文,都会学习,不管有没有事先查询)。如下图所示:
2、当主机发出IGMP离开报文时,组播路由器会发送IGMP特定组查询报文。如果该端口在一定时间内得不到回应,则删除条目对应的端口;如果得到回应则不删除。当开启端口快速离开功能时,一旦该端口收到离开报文,交换机将立即删除条目对应的端口。
3、和MAC地址表一样,自动学习到的条目都有老化时间。若在一定时间内没有收到对应组播地址某个端口上的IGMP报告报文,条目上相应的端口会自动删除。当所有端口都被删除时,条目则自动删除。
4、组播地址表的学习和维护全靠IGMP监听(不考虑CGMP)。
5、如果网络中没有组播路由器,也就没有IGMP查询报文,组播地址表的建立将会变得十分困难(思科2960可以配置定期发送IGMP查询报文)。
6、除非把交换机配置成IGMP查询器,否则交换机不会发送任何IGMP报文,只会静静地监听。