一、多播地址:
多播地址不能用于源地址,只能用于目标地址,如果必须配掩码,那就选择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:代表所有host与router
224.0.0.2:代表所有的router
224.0.0.6:代表在多路访问网络中OSPF DR-other向DR发消息时使用的目标地址
224.0.0.5:代表在多路访问网络中OSPF DR向DR-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.255为SSM使用,不能分配给终端客户。SSM(指定源的多播):是PIM的高级协议。
233.0.0.0-233.255.255.255为GLOP 地址。当终端客户申请一个AS号时,ISP就送一段GLOP地址。例,用户申请65123的AS号,转成16进制为0xFE63,其中FE=254,63=99。所以ISP就赠送用户233.254.99.0/24的GLOP地址。
(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 router到Last-hop router之间,多播流量的传播路径、多播路由表的建立。中间的路由器为什么会替用户传递多播流量,都要依赖于多播协议。
IGMP(Internet Group Management Protocol)协议:是一个典型的PC与路由器沟通多播的协议,主要负责让Last-hop router得才终端有没有多播流量接收者。对于Last-hop router而言,它怎么知道终端有没有接收者、哪些才是接收者、哪些PC是否加入了组、什么时候离开了组等都由IGMP协议负责。
三、IGMP(internet group management protocol)
IGMP协议版本有v1、 v2、v3,它的协议号为2(ICMP的协议号为1)。
作用:是让Last-hop router知道多播组中有没有成员
1、IGMP v1 有两种报文,分别为:Membership Queries(查询包)与Membership Reports(回应包)
其中Queries(查询包):由路由器发送,作用是询问本组中有哪些组员,发送的目标地址为224.0.0.1。每60秒发一次,TTL为1,只在本链路上传递。
Reports(回应包):由接收者的发送。作用是回应路由器的查询,表示本终端(“我”)加入了哪个组。
说明:
ver:code version=1
Type:1表示host membership queries (路由器发送查询包);2表示host membership reports (终端发送回应包)
Group Address:32位组播地址
IGMP报文举例 (| Ethernet | IP | IGMP | FCS |)
(1)查询包,周期性发送。其中:Destination IP为224.0.0.1,Group Address为0.0.0.0
(2)回应包Report,由多播接收者回应查询时发送。其中:Destination IP与Group Address都为本接口加入的组地址。例如:224.1.1.1。
为什么呢?因为这个Report回应包需要传给本组中的所有host和router,告诉本组中其它的组员,本路由器(“我自己”)也在本组中,这样可以抑制其它组员的reports的报文。(分析:不管本组中有一个或多个接收者,对于Last-hop Router而言,它只需要知道“有”或“没有”即可。只要“有”,不管有多少个接收者,Last-hop Router都会将多播流量传递到本组中。所以对于本组中的成员而言,它们只要其中任何一个接收者响应即可,不需要所有接收者都响应并发送回应包。本例中只要有一个接收者发送了Report回应包,其它的接收者就不再发送Report回应包)接收者在10秒内回应report报文(取10秒内的一个整数值)。
另外接收者也可以主动发送Reports报文,告诉Last-hop Router自己加入了本组(这也是Report报文的第二个作用)。
离组消息:Last-hop Router每60秒发送一次查询包,如果180秒还是没有接收者回应,代表该Last-hop Router下没有接收者(没有组员)。接收者在离开本组时,不会主动发送离组消息。这样即使没有组员(接收者),Last-hop Router还是会发送多播条目。所以我们把IGMP V1称为Silently(静悄悄离开)的协议。
2、IGMP V2 在V1的基础上新增两种报文,分别是:Group-Specific Query和Leave 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 query;0x12代表Version 1 Membership Report;0x16代表Version 2 Membership Report;0x17代表Leave Group
Max.Response Time(最大响应时间):V1时它取10秒内的整数,而V2时它取10秒内的一个一位小数
Group Address:组地址
离组报文中Destination IP为224.0.0.2,Group 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 开启IGMP的Debug。
若将R3离组可以使用以下命令:no ip igmp join-group 224.1.1.1
3、IGMP V3 报文中包含了源的信息。会包含include 与 Exclude。以前的版本不可以选择“具体接收哪个数据源发来的信息”,而V3可以指定接收包含include哪个源的信息或Exclude哪个源的信息。
四、二层的组播地址:
目的:解决组播与MAC的地应关系。由于组播地址有2的28次方个。而MAC地址只申请了一个OUI地址,即2的24次方个(MAC地址),而且还将其中第24位的"1"分配给了其它研究机构,这样只剩下了2的23次方个(MAC地址)。从组播地址映射到MAC地址中间就差了5位,就造成了2的5次方个组播地址对应一个MAC地址。
为了让交换机收到组播报文后,尽可能不广播或泛洪,从而提交网络效率。可以使用两种方法解决:(1)、IGMP Snooping;(2)、CGMP(Cisco Group Management Protocol)
1、IGMP Snooping(窥视、窥探)
Snooping原理:多播接收者发送Report报文到交换机,交换机解封装时不仅拆二层帧头,而且还拆三层包头。此时交换机会产生一个本地接口与多播组地址的对应关系,并存储到映射表中。例:224.1.1.1对应SW的f0/1。随后多播源再发送多播流量时,交换机会查询映射表,并根据映射表的内容单独转发多播流量(而不是广播)。下面将以实验的形式辅助理解上述理论,实验拓扑图如下所示:
具体配置如下所示:
SW:
#sh ip igmp snooping(查看设置的Snooping功能是否开启)
(config)#ip igmp snooping(在SW上手工开启snooping功能) 或
(config)#ip igmp snooping vlan 1 (开启指定vlan的snooping功能)
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域内多播:PIM、DVMRP、MOSPF(OSPF路由协议中的6类LSA专门传递多播信息)、CBT。
EGP域间多播:MBGP/MSDP
2、多播路由表
单播路由表主要是说明数据包如何出去,到达目标地址。而多播路由表主要是说明数据包如何进来。它主要关心包是从哪个接口进来的,而且它只从其中一个接口接收多播流量,从而解决重复报文的问题。
3、RPF(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-rooted或shortest path trees):源树或最短路径树
SPT (源树):一个多播源单独一棵树。如果运行了源树,就会产生(S,G)的多播路由表,即(源,组)。
该树:有多少个源,在路由器上产生多少个条目。路由表中每个条目都会标明:从哪个接口进来的,发往哪些接口。
优点:一个多播源到达目标地址的路径一定是最短的。
缺点:一个多播源产生一个路由条目,每台路由器上都必须保存这些路由条目,占资源较大。
(2)、RPT(shared trees或Rendezvous point):共享树或约会点
RPT (共享树):人为定义RP(集合点),多播源发送多播流量时,先到达RP,再由RP向下发放多播流量到Last-hop Router。
该模式:从RP到Last-hop Router的所有路由器上只产生(*,G)的多播路由条目,这些路由器只关心目标组地址是哪个组,不需要知道多播流量是从哪个多播源地址发出的;只有RP才会关心多播源地址。
优点:从RP到Last-hop Router的每台路由器上只保存(*,G)一个条目即可,节约了Router的开销。
缺点:从多播源到Last-hop Router的路径不一定是最优的。
注意:从多播源到RP还是使用的SPT(源树),而从RP到Last-hop Router才使用了RPT(共享树)。