一、多播地址:

多播地址不能用于源地址,只能用于目标地址,如果必须配掩码,那就选择32位,属于一个扁平化的地址。所以多播地址不能配置在某接口或网卡上。

多播地址范围:以 1111开头,即224.0.0.0 –239.255.255.255都属于多播地址。

(1) 保留地址:224.0.0.0/24 (224.0.0.0--224.0.0.255)

224.0.0.1:代表所有hostrouter

224.0.0.2:代表所有的router

224.0.0.6:代表在多路访问网络中OSPF DR-otherDR发消息时使用的目标地址

224.0.0.5:代表在多路访问网络中OSPF DRDR-other 发消息时使用的目标地址

224.0.0.9:代表RIP v2协议的目标地址

224.0.0.10:代表EIGRP建立邻居时Hello包的目标地址

224.0.0.13:代表PIM协议发Hello包建立邻居时的目标地址

(2) 公网地址:224.0.1.0-238.255.255.255.0 (在公网上为客户端用户申请,并可以路由)

其中:232.0.0.0-232.255.255.255SSM使用,不能分配给终端客户。SSM(指定源的多播):是PIM的高级协议。

233.0.0.0-233.255.255.255GLOP 地址。当终端客户申请一个AS号时,ISP就送一段GLOP地址。例,用户申请65123AS号,转成16进制为0xFE63,其中FE=25463=99。所以ISP就赠送用户233.254.99.0/24GLOP地址。

(3) 私有地址:239.0.0.0/8 (239.0.0.0-239.255.255.255)

二、多播模型:

多播源:多播流量的发送者,一般都是多播软件,例VOD

First-hop Router:多播源发出多播流量后,第一个收到多播流量的路由器。

Last-hop Router:直接连接多播流量接收者路由器,它主要负责与接收者沟通。(也称为leaf叶子路由器)

PIM(一种多播协议),决定从First-hop routerLast-hop router之间,多播流量的传播路径、多播路由表的建立。中间的路由器为什么会替用户传递多播流量,都要依赖于多播协议。

IGMP(Internet Group Management Protocol)协议:是一个典型的PC与路由器沟通多播的协议,主要负责让Last-hop router得才终端有没有多播流量接收者。对于Last-hop router而言,它怎么知道终端有没有接收者、哪些才是接收者、哪些PC是否加入了组、什么时候离开了组等都由IGMP协议负责。

三、IGMP(internet group management protocol)

IGMP协议版本有v1 v2v3,它的协议号为2(ICMP的协议号为1)

作用:是让Last-hop router知道多播组中有没有成员

1IGMP v1 有两种报文,分别为:Membership Queries(查询包)Membership Reports(回应包)

其中Queries(查询包):由路由器发送,作用是询问本组中有哪些组员,发送的目标地址为224.0.0.1。每60秒发一次,TTL1,只在本链路上传递。

Reports(回应包):由接收者的发送。作用是回应路由器的查询,表示本终端(“我”)加入了哪个组。

IGMP的报文封装:
图片

 

说明:

vercode version=1

Type1表示host membership queries (路由器发送查询包)2表示host membership reports (终端发送回应包)

Group Address32位组播地址

IGMP报文举例 (| Ethernet | IP | IGMP | FCS |)

(1)查询包,周期性发送。其中:Destination IP224.0.0.1Group Address0.0.0.0

(2)回应包Report,由多播接收者回应查询时发送。其中:Destination IPGroup Address都为本接口加入的组地址。例如:224.1.1.1

为什么呢?因为这个Report回应包需要传给本组中的所有hostrouter,告诉本组中其它的组员,本路由器(“我自己”)也在本组中,这样可以抑制其它组员的reports的报文。(分析:不管本组中有一个或多个接收者,对于Last-hop Router而言,它只需要知道“有”或“没有”即可。只要“有”,不管有多少个接收者,Last-hop Router都会将多播流量传递到本组中。所以对于本组中的成员而言,它们只要其中任何一个接收者响应即可,不需要所有接收者都响应并发送回应包。本例中只要有一个接收者发送了Report回应包,其它的接收者就不再发送Report回应包)接收者在10秒内回应report报文(10秒内的一个整数值)

另外接收者也可以主动发送Reports报文,告诉Last-hop Router自己加入了本组(这也是Report报文的第二个作用)

离组消息:Last-hop Router60秒发送一次查询包,如果180秒还是没有接收者回应,代表该Last-hop Router下没有接收者(没有组员)。接收者在离开本组时,不会主动发送离组消息。这样即使没有组员(接收者)Last-hop Router还是会发送多播条目。所以我们把IGMP V1称为Silently(静悄悄离开)的协议。

2IGMP V2 V1的基础上新增两种报文,分别是:Group-Specific QueryLeave Group Message

Group-Specific Query(指定组的查询):指定对于某个组的查询包

Leave Group Message(离组消息):当终端接收者离开本组时发送离开的消息。

Querier(查询者):如果在同一个多路由访问(MA)网络中,同时出现多台Last-hop Router时,为了防止重复报文,需要选举出其中一台Last-hop Router面向终端发送查询包,该路由器就充当了查询者。Querier Election (查询者的选举)方法:当所有Last-hop Router发出第一个查询包时,比较它们的IP地址大小,优先选择最小IP地址的路由器作为查询者(这种动作只有IGMP v2才会有。默认所有的Last-hop Router都会去发查询包,这是没有必要的。因为其中任何一台发查询包,接收端在回应reports报文时,所有Last-hop Router都能收到。而且如果多台Last-hop Router都发送查询包,会导致接收端收到重复的查询报文。IGMP v1如何选择查询者呢?它要依赖上层的PIM协议选DR的方法选择查询者的。在路由器上可以使用“show ip igmp interface e0”命令查看查询者的信息。例:IGMP querying router is 1.1.1.1(this system)

原查询者如果120秒没有发送查询包,另外一个Last-hop router将充当新的查询者。

IGMP V2报文格式

71531

| Type |Max.Resp.Time|CheckSum|

GroupAddress(32 bit)

说明:

Type: 0x11代表常规Membership query0x12代表Version 1 Membership Report0x16代表Version 2 Membership Report0x17代表Leave Group

Max.Response Time(最大响应时间):V1时它取10秒内的整数,而V2时它取10秒内的一个一位小数

Group Address:组地址

离组报文中Destination IP224.0.0.2Group address为本接口加入的组地址,例如224.1.1.1。它表示告诉本组中的所有路由器,本路由器(“”)要离开224.1.1.1这个组。因为目标地址是224.0.0.2,表示所有的路由器。

当有组员发出离组消息后,Last-hop Router会立即发送“指定组的查询”,查询本组中还有没有组员。如果在2秒内没有收到任何组员的reports消息,路由器将会删除该组的信息。如果接收者(组员)收到了一条“指定组查询”时,不会等待10秒内的随机时间,会立即发送reports信息回应Last-hop Router

下面将以实验的形式辅助理解上述知识,实验拓扑图如下所示:

 


图片

分析:上图中

R1 R2 运行多播路由协议,R3 F1/0 加入到组224.1.1.1 中。观察组信息与接口信息。 

 

具体配置如下所示:

R1

 interface f1/0

ip address 100.1.1.1 255.255.255.0

no shu 

exit

ip multicast-routing(开启多播路由功能)

 interface f1/0

ip pim sparse-mode(开启PIM协议)

R2

 interface f1/0

ip address 100.1.1.2 255.255.255.0

no shu 

exit

ip multicast-routing(开启多播路由功能)

 interface f1/0

ip pim sparse-mode(开启PIM协议)

R3

inter f1/0

 ip address 100.1.1.3 255.255.255.0

no shut

ip igmp join-group 224.1.1.1 (将本接口加入到指定的组中)

通过上述配置,在R1中执行以下命令查看相关信息:

R1

sh ip igmp groups查看哪些组、组员与接口的对应关系

 sh ip igmp interface 查看IGMP Enable、版本、查询时间间隔、查询者的超时时间、最大查询回应时间、DR、查询者等。

debug ip igmp 开启IGMPDebug

若将R3离组可以使用以下命令:no ip igmp join-group 224.1.1.1

3IGMP V3 报文中包含了源的信息。会包含include  Exclude。以前的版本不可以选择“具体接收哪个数据源发来的信息”,而V3可以指定接收包含include哪个源的信息或Exclude哪个源的信息。

 

四、二层的组播地址:  

目的:解决组播与MAC的地应关系。由于组播地址有228次方个。而MAC地址只申请了一个OUI地址,即224次方个(MAC地址),而且还将其中第24位的"1"分配给了其它研究机构,这样只剩下了223次方个(MAC地址)。从组播地址映射到MAC地址中间就差了5位,就造成了25次方个组播地址对应一个MAC地址。

为了让交换机收到组播报文后,尽可能不广播或泛洪,从而提交网络效率。可以使用两种方法解决:(1)IGMP Snooping(2)CGMP(Cisco Group Management Protocol)

1、IGMP Snooping(窥视、窥探)

Snooping原理:多播接收者发送Report报文到交换机,交换机解封装时不仅拆二层帧头,而且还拆三层包头。此时交换机会产生一个本地接口与多播组地址的对应关系,并存储到映射表中。例:224.1.1.1对应SWf0/1。随后多播源再发送多播流量时,交换机会查询映射表,并根据映射表的内容单独转发多播流量(而不是广播)。下面将以实验的形式辅助理解上述理论,实验拓扑图如下所示:

 


图片

具体配置如下所示:

 

SW

#sh ip igmp snooping(查看设置的Snooping功能是否开启)

(config)#ip igmp snooping(SW上手工开启snooping功能

(config)#ip igmp snooping vlan 1 (开启指定vlansnooping功能)

R2

(config)#ip multicast-routing(开启路由器的多播功能)

(config)#int f0/1

(config)#ip pim sparse-mode(开启pim协议)

(config)#ip address 100.1.1.2

PC

(config)#interface f0/0

(config)#ip igmp join-group 224.1.1.1(将本接口加入224.1.1.1组中)

(config)#ip address 100.1.1.3

然后在SW上执行#sh ip igmp snooping groups 命令查看snooping映射,即组地址与接口的对应关系

由于snooping功能需要交换机拆三层的IP包,消耗CPU的资源,所以建议在含有ASIC芯片的设备上启用该功能。

2、CGMP(Cisco Group Management Protocol)

CGMP原理:当接收者发送IGMP Report报文时,交换机将该报文透传给路由器。然后路由器截获该报文的源MAC地址与目标MAC地址。并且将源MAC地址记录到USA(Unitcast Source Address)中,目标MAC地址记录到GDA(Group Destination Address)中,生成新的CGMP报文。然后Router发送CGMP报文给交换机,交换机会产生源MAC地址与目标MAC地址的对应关系,并存储到映射表中。随后,交换机再收到多播流量时,将查询该映射表,根据映射关系单独转发多播流量(而不是广播)

结合上面实验拓扑图,如果使用CGMP,具体配置如下所示:

SW

#show cgmp(查看CGMP的信息)

(config)#cgmp (启用CGMP功能)

说明:交换机与路由器都需要启用该功能。路由器在接口模式下运行CGMP,交换机在全局模式下运行CGMP

R2

(config)#ip multicast-routing

(config)#interface f1/0

(config-if)#ip pim sparse-mode

(config-if)#ip cgmp

(config-if)#ip address 100.1.1.2 255.255.255.0

(config-if)#no shu

PC

(config)#interface f1/0

(config-if)#ip address 100.1.1.3 255.255.255.0

(config-if)#no shu

(config-if)#ip igmp join-group 224.1.1.1

通过以上配置后,观察交换机上的映射关系。

五、多播路由协议的基础知识

1、多播路由协议:

IGP域内多播:PIMDVMRPMOSPF(OSPF路由协议中的6LSA专门传递多播信息)CBT

EGP域间多播:MBGP/MSDP

2、多播路由表

单播路由表主要是说明数据包如何出去,到达目标地址。而多播路由表主要是说明数据包如何进来。它主要关心包是从哪个接口进来的,而且它只从其中一个接口接收多播流量,从而解决重复报文的问题。

3RPF(Reverse Path Forwarding,反向路径转发转发机制

多播路由协议使用RPF转发机制在一台路由器上仅选举一个RPF接口转发多播流量,从而解决重复报文问题。

RPF checking:路由器收到多播流量之后,检查多播源地址,然后在单播路由表中查找该源地址的相关条目。如果同一个源地址,多播流量的入接口与单播流量的出接口相同时,RPF校验成功,该接口被选举为RPF接口。

RPF Check Fails:如果同一个源地址,多播流量进接口与单播路由表中出接口不相同,称为RPF校验失败,就不选择该路径。或者本路由器的单播路由表中根本没有该源地址的相关条目,则丢弃(即如果本路由器回包时根本不知道应该从哪个接口出去,则丢弃数据包);所以路由器收到一个多播包之后,在自己的单播路由表中一定要有返回数据源的单播条目,否则就称为RPF校验失败。

如果单播路由表中到达某个网段有负载均衡多条路径时,RPF接口的选举规则:(1)优先选择较小的AD值;(2)然后选择较小的Metric值;(3)最后选择较大的IP地址。

当然也可以手工添加多播的静态路由(多播静态路由条目的AD值默认为0)。多播静态路由不做数据转发,只是为了选举RPF接口而已。方法如下:

(config)#ip mroute 1.1.1.1 255.255.255.255 s0/0 (多播源地址为1.1.1.1的条目都从S0/0接口进来)

#show ip mroute static(查看多播静态路由)

4、树型结构

特点:无环,有根。主要研究:哪里是根(OSPF每台路由器都以自己为根,找到去往目标的最短路径)

(1)SPT(source-rootedshortest path trees):源树或最短路径树

SPT (源树):一个多播源单独一棵树。如果运行了源树,就会产生(S,G)的多播路由表,即(,)

该树:有多少个源,在路由器上产生多少个条目。路由表中每个条目都会标明:从哪个接口进来的,发往哪些接口。

优点:一个多播源到达目标地址的路径一定是最短的。

缺点:一个多播源产生一个路由条目,每台路由器上都必须保存这些路由条目,占资源较大。

(2)RPT(shared treesRendezvous point):共享树或约会点

RPT (共享树):人为定义RP(集合点),多播源发送多播流量时,先到达RP,再由RP向下发放多播流量到Last-hop Router

该模式:从RPLast-hop Router的所有路由器上只产生(*,G)的多播路由条目,这些路由器只关心目标组地址是哪个组,不需要知道多播流量是从哪个多播源地址发出的;只有RP才会关心多播源地址。

优点:从RPLast-hop Router的每台路由器上只保存(*,G)一个条目即可,节约了Router的开销。

缺点:从多播源到Last-hop Router的路径不一定是最优的。

注意:从多播源到RP还是使用的SPT(源树),而从RPLast-hop Router才使用了RPT(共享树)