白话浅谈——组播那点事

一、前言

组播是计算机网络运维人员永远绕不过去的一个知识点,对于我这样的初学者,组播的概念,常常只是一知半解,掉书袋子容易,但是真想理清楚了,说清楚了,确实还存在难点。
百度组播相关的知识点,大多不那么便于理解,于是我想结合自己的理解,用自己的语言给他“直译”一遍,方便自己日后的回顾。
讲的比较笼统,一些概念没有涉及到,需要了解的请自行翻阅资料,我们的目的是,写一篇猴子都能看懂的组播介绍,不求最准确,但求最直观。

二、组播那点事

(一)组播是咋回事

1、为什么会需要组播这个东西

组播实质上传输的也是UDP报文,UDP报文常见的两种传输形式,
一种是单播
即点对点传输,就是很明确的,从一台网络设备发送到另一台网络设备,自己玩自己的
另一种是广播
即点对多,就是我给出去了,在一定范围内,谁都可以接收,这个一定范围,通常认为是不跨vlan(之所以说是通常认为,还有以路由器为界的,但其实发展到现在,路由器和交换机之间,在功能上的区别已经有些模糊了,只能说侧重点不同),意思是如果是只要不跨vlan,目之所及,广播信息都能过去。
而因此存在的问题也很明显。
单播存在的问题
就是,只能一对一,如果有很多的设备都想要这个数据,那就需要每个设备自己向这个数据发送者索要,单独给一份,因此,十个人要,发送者就要发十分,这显然非常的冗余。
广播存在的问题
广播能实现一对多的发送,反正我发了一次,数据就在局域网内部到处转悠,谁想要自己收就行了,但是这个问题也是显而易见的,数据跨不过vlan,就是数据怎么转悠都只能在这个院子里,出不了院子的大门。
因此,为了解决两者的弊端,组播应运而生,组播最重要的两个特点,就是走得远只要传一份。后面我们详细说说组播的这几个特点。

2、我关注的几个组播特点

所谓组播,他不是一个人在战斗,他不是一个人,他是一个team,各司其职,分管一部分内容,从而实现组播的数据转发。这个team里面,有几员悍将,主将自然非igmp协议和pim协议莫属。他们何许人也?莫急,后面我们在适当的时候都会介绍到他们。
下面,我先介绍一下,我认为的组播,最重要的几个特点。

(1)加入和退出机制

加入和退出,意思就是我要不要加入到这项活动中来,这个活动当然就是通过组播的形式,收发数据,注意,是收发数据。只要你加入了这个活动,你就是这个活动的成员,即你就是成员组的人了,我强调这个的意思是,就像玩狼人杀的游戏,无论你后面扮演的是什么身份,你首先是一个玩家。
划重点
因此,你只要参与了组播这个活动,你就是组播成员,无论你是数据发送者,还是数据接受者,换言之,你在这个活动中,你既可以是数据发送者,也可以是数据接收者,即,当你发送数据时,你就是组播源(组播源,就是发送组播数据的那台设备,更直观的说,就是那台设备的ip,注意,一定要区别开组播源不是组播组,组播组对应的是组播地址,就是你发送组播数据时的那个目的ip),当你收数据时,你就是receiver。
说清楚这一点,我们继续,那你怎么参加和退出这个活动呢?当然就得有活动的管理者,只有成员是没法玩的,这里的管理者,就是组播路由器,即参加了组播这个活动的交换路由设备,更准确说,所谓的组播路由器,其特点之一,就是运行了igmp协议,即Internet 组管理协议称为IGMP协议(Internet Group Management Protocol),认真脸,强调一下,组播路由器的一个重要特征,就是运行了igmp协议,组播路由器也可能是交换机!他的作用之一,就是通过igmp协议,负责管理大家的参与和退出活动。
这里提到的igmp协议的作用,就一个作用,负责加入和退出
igmp协议是在设备端和交换机路由器上都有的一个协议,就相当于,当大家都支持并同意管家的一纸管理协议以后,那大家就都按这个规定来,规定当然是相互的,如果只有管理者认同,成员不认同,当然是没用的,管理嘛,自然是就近管理。
他为了管好大家的进进出出,他想了很多方法,也不断的改进自己的工作方式和工作作风,因此有了igmp v1,v2,v3,三个版本,数字前面的v自然就是version,版本的意思。
但是无论是哪个版本,都有一个共同的特点,就是需要在这个活动的众多管理者中,即组播路由器中,挑选出一个最辛苦的大管家(即IGMP查询器),他需要做一个最重要的工作,即不断的去主动询问终端设备一个问题,“你参不参加这个活动”,反复确认,他会问到网络中与众多组播路由器直连的每一个设备(这个时候,需要强调一点,组播,是建立在网络通畅的前提之下进行的一个活动,网络通畅,指的是可以到达)。真是个需要负责任又操碎了心的差事。这里有几个关键词,我提醒一下,主动、不断、询问、直连设备,然后,各个终端设备会不断的回复信息给离得最近的组播路由器。除此之外的区别,我只说我觉得重要的区别。
igmp v1:当大家都认同v1版本的igmp协议时,大管家还是不断的询问,即IGMP查询报文(Query Message),然后各个终端设备不断的回复“我要参加”这就是,IGMP 成员关系报告报文(Membership Report Message),注意,只回复我要参加的信息,组播路由器收到信息后,就晓得了有人要参加这个活动了,如果在指定的时间内,组播路由器没收到这个参加信息,他就认为这个成员退出了这个活动了。
igmp v2:跟v1版本,在选拔大管家的机制上有所不同,但我不在乎,我觉得最重要的区别在于,v2版本的协议,添加了成员主动退出的报文,即不再是组播路由器通过指定时间收没收到消息来判断了,而是成员会主动说,“我要退出”的信息,即离开组(Leave Group)报文,给组播路由器。
igmp v3:跟v1,v2相比,在进出机制上,当然是有所强化,有所变化,但是我认为v3版本和前两个版本,最大的区别是,加入了组播源(前面已经强调过什么是组播源)的内容,即大家都认可v3版本的协议后,作为活动的成员,我可以指定我只要或者只不要,哪个成员,通过哪个组播地址发送给我的数据。
到此,就大致介绍完了组播的进出机制,之所以花了这么长篇幅讲这个,是因为作为组播成员的进出,是一个重难点。

(2)“走得远”和“只传一份”机制

上面讲完了参加和退出这个活动的运行机制,下面应该讲讲在组播中,是怎么解决刚抛出来的,单播和广播的问题的,组播是走不出去,单播走出去了但只能一份一份的传。
在(1)中,大家应该已经注意到了,在组播中,存在这组播路由器(在前面介绍过),因此问题就变成了这样两个问题:
a) 怎么在多个组播路由器中传递一份组播数据,注意,是在组播路由器和组播路由器之间传递
b) 在组播路由器中,怎么把一份变成多份数据,给想要的成员,注意,这一步是在组播路由器和与该台组播路由器之间连接的成员之间传递数据
要实现这两点,你理所应当想到,那组播路由器之间,某台组播路由器怎么知道自己需不需要往下一台组播路由器发送某个组播组的数据,组播路由器和成员之间,组播路由器需要给哪几个成员发送哪几个组播组的数据。
带着这个问题,我们就找到了这个非常非常之重要的东西,组播路由表,这个组播转发表中的每一行内容,大致是这么一个形式(S,G),这里面的内容S,就是组播源,即发送了组播数据的成员的ip,而G,就是组播组,就是组播地址。
这里特意再强调一下组播源、组播组和组播地址的概念,我们可以这么理解,在这么多组播路由器的管理范围内,有很多的终端设备,他们每个设备有区分他们的身份的ip地址,当这个设备参加某个活动并成为数据的发送者的时候,这个设备的ip就是组播源,在这么多设备中,可以同时开展很多活动,不仅仅是一个活动,而每个活动,我们给他划成一个小组,我们称之为组播组,小组和小组之间,最大的区分就是组播地址的不同,在我的理解里,组播地址其实就是一个标志符,标志了是不同的组播组。还不明白?举个例子。
就像一个幼儿园,幼儿园老师是组播路由器,管理者,在他们的管理范围内,有很多小朋友,每个小朋友都有自己的身份证,当他们参加了某个具体的活动,他们就是参加活动的成员,这么多成员需要给他分成好几个小组,这就是组播组,每个小组要有自己的名称或者标志,比如香蕉小组,苹果小组,这就是组播地址,每个小组,自己开展讨论,讨论的内容就是组播数据,当某个小朋友发言了,别人在听,这个小朋友的身份证就是组播源。当然,每个小朋友可以加入到多个小组中。
理清楚这个关系之后,就能理解组播路由表的(S,G)。当以S作为数据发送者,发送的目的组播地址是G的组播数据,在进入某台组播路由器时,会与这一台组播路由器的组播转发表进行比对,看看是否有这么一条(S,G),如果没有,则丢弃,如果有,则让这条数据进入该组播路由器,则让这条数据进入。
进入该组播路由器后,下一步往哪走?这个又要引入一个新的东西,叫组播转发表,组播转发表,是从组播发送者,到组播接受者,这一路下来,所经过的所有的组播路由器共同选择的结果,不是单独其中某一台就能决定的,因此,生成组播转发表的前提是,组播路径畅通。这个组播转发表生成的唯一标准就是路径最短。从发送者到接受者中间,是一个盘根错节的网路,四通八达,就像城市,从这个点到那个点之间,可以有很多路,但是要找出最短的一条路,所谓的最短,就是经过的组播路由器最少。
介绍完组播路由表和组播转发表,有心的同志应该已经有了几个疑惑:
组播路由表是怎么生成的呀?这个(S,G)是怎么生成的哈?不会是人去选,一个一个给他配置进去的吧?
组播转发表里,他又是怎么知道怎么走是最短路径的?
有了这些疑惑,那是时候抛出来重量级的东西了,另起一行。
PIM协议(protocal independent multicast)
这个协议的作用,就是在组播路由器中生成组播路由表和组播转发表。
首先,要求在组播数据传输过程中,可能途径的组播路由器中,都启用PIM协议。虽然很不想讲理论,但是介绍这个,还是得先理清楚几个概念。
DR,我认为,可以简单理解成,组播路由器,当然也有区别。
SPT(shortest path tree最短路径树),顾名思义,就是从组播源到数据接受者之间,或者从组播源到RP之间的,最短路径。
RP(Rendezvous point) ,即汇聚点,这个点就像个数据收发中心,也是我们在IGMP中提到的大管家的身份,在这个点上,我们配置的是组播组的组播地址,在所有的组播路由器中,有且只有一个,但可以有多个备胎,可以手动配置,也可以自动选举,自动选举的机制我就不介绍了。可以理解成,组播源往这个点发送数据,然后在这个点,将数据转发给需要的接受者。RP不是必须配置的东西,只有在PIM-SM模式(后面会解释)下,才需要,如果配置了RP,就需要寻找两段最短路径,以这个点为中间点,有两个方向,一个是往组播源的方向的最短路径,即刚刚所说的SPT,一个是往组播数据接受者的方向的最短路径,即RPT。
RPT,类似于SPT,如果在配置了RP的情况下,则涉及到这个概念,从汇聚点到组播接收者的最短路径。
在刚刚的介绍中,已经出现了PIM-SM这个字眼,这就是PIM的两种模式,主要做一个简单的区分。
PIM-DM,该模式下,会直接生成一条从组播源到组播接收者的最短路径。组播数据直接从组播源发送至接受者。适用于规模比较小,网络比较集中的情况。
PIM-SM,该模式下,则出现一个数据收发中心RP,会生成两条路径,先从组播源到RP,再从RP到接受者。该模式称之为稀疏模式,适用于规模比较大,网络拓扑较为复杂的情况,因为在网络复杂的情况下,如果直接生成一条路径,这个路径会非常的复杂,而且路径繁多,有一个RP,会清晰很多。
上面理论说了这么多,下面开始划重点
a) 在实际过程中,组播状态建立和组播数据收发是两个过程。先是组播状态的建立,然后才能进行组播数据的收发。
b) 组播状态的建立,就是组播注册的过程,这个过程中,就是刚刚讲到的IGMP的机制,需要区分往上游和往下游两个内容
对于数据发送端,他的注册信息内容就是自己将要往什么组播地址的发送数据,自己的地址,即源地址,往下游(就是往组播接收端)过去,如果有RP,就往RP过去,没有RP,就往接收端一路顺流而下。如果是PIM-DM,只有往下游的内容。
对于数据接收端,他的注册信息就是,我想要接收什么组播源发过来的,什么组播地址的组播数据,往上游(就是往RP)发送,一路过去,路过的组播路由器,都会在自己的组播路由表中加入(S,G)。如果是PIM-SM,以RP为中间点,区分上下游。划重点,这个往上游的注册信息,非常重要,在后面马上要介绍到的内容中会起到浓墨重彩的作用。
组播路由表和转发表就在这上游和下游中,形成了。

(3)ASM和SSM模式

花了大篇幅讲完了前两部分的内容,顺水推舟,该讲到这部分内容了。其实这部分内容,是当你配置组播时,最早应该考虑的问题。
ASM模式,就是任意源模式,就是不指定组播源,即在注册信息时,数据接收端的注册信息中,是这么写的(*,G),即任意组播源,谁发的都行,我只管是哪个组播地址的数据。在这种模式下,必须配置位PIM-SM模式,配置RP。
SSM模式,就是指定源模式,指定源了,可以启用PIM-DM,也可以使用PIM-SM,但是无需配置RP,PIM-SM在不配置RP的情况与PIM-DM类似。但是这种模式下,终端设备必须指定组播源,此时数据接收端的注册信息中,是这么写的(S,G),其中的S,具体到组播源的IP。
在这里,还需要注意,ASM和SSM模式所使用的组播地址,是不同网段的。

组播地址范围 用途
224.0.1.0~231.255.255.255 可用的ASM组播地址
233.0.0.0~238.255.255.255 可用的ASM组播地址
232.0.0.0~232.255.255.255 可用的SSM组播地址

当接触一个陌生的组播组时,可以通过其组播地址所属的范围,大致判断其组播模式。

(二)二层组播咋回事

二层交换机下,组播默认是广播,可以通过igmp-snooping进行一些限制,或者说是梳理。注意,除了无论是否有igmp-snooping等配置,组播都是可以进行默认转发的,只是加了配置后多了一些限制项。

(三)组播怎么配置

1、选择组播模式并确定组播地址

根据网络状况,决定使用ASM模式或者SSM模式。并正确选择组播地址。

2、选择PIM模式

如果是ASM模式,则只能选择PIM-SM模式,如果是SSM可以选择。

3、确定组播源和组播接收者,规划大致路线

确定了以后,确定组播源地址,并确定可能会途径的交换机路由器设备。

4、配置选择的交换路由设备为组播路由器

确定可能会途径的交换机路由器设备。与设备终端连接的端口或vlan,都应该启用igmp协议,如果是SSM模式,则必须是igmp v3。在可能会途径的路由器之间,都启用PIM的具体模式。如果是ASM模式下的PIM-SM,则需要配置RP。

5、组播接受者方的配置(SSM模式下)

如果是SSM模式,组播接受者需要指定组播源,在windows或者linux系统下都能进行配置,在操作系统的一个配置项中配置。
注意!!如果在SSM模式下,必须,是必须,要使用232网段的组播,而且必须,必须配置指定源,如果没有配置指定源,在交换机中将不会生成组播路由表!

三、写在最后

组播的概念,可能写的比较业余,文章中主要是笔者的个人理解,希望对跟我一样的初学者有些帮助,最重要的是,这是我个人的学习笔记罢了,不较真。

猜你喜欢

转载自blog.csdn.net/baidu_31788709/article/details/108098211