²
交换机的默认行为是把多播帧向除源端口之外的所有端口扩散。
Cisco
执行专有的
CGMP
和非专有的
IGMP Snooping
,来协助管理网络中的多播流量。
交换机洪泛多播流量的原因是在桥接表中没有目的地址的表项。多播地址从不作为源地址出现。
²
默认情况下路由器不转发多播流量,除非它们具有多播能力,并有一个多播路由选择协议,例如
DVMRP
(
Distance Vector Multicast Routing Protocol
)或
PIM(Protocol-Independent Multicast)
。
一个网络管理员为一个应用分配一个多播第
3
层地址。接着从第
3
层多播地址中计算出第
2
层端口地址。配置一个多播应用时,
NIC
将端口地址加入它的有效
MAC
地址列表中。通常这个列表由内置的
MAC
地址和任何用户配置的地址组成。只要工作站收到一个具有匹配的多播目的地址的帧时,接收者将帧发送给
CPU
。
Layer 3 Multicast Address
:
<1>
保留链路本地地址
(从不被
Router
转发,且必须保持在本地的
LAN
网段上,并且一直以
1
的生存时间进行发送)
224.0.0.1
本子网中的所有系统
224.0.0.2
本子网中的所有路由器
224.0.0.5 OSPF DROther
224.0.0.6 OSPF DR
224.0.0.9 RIPv2
路由器
224.0.0.10 EIGRP
路由器
224.. 0.0.12 DHCP Server/
中继代理
224.0.0.13
所有
PIM
路由器
224.0.0.22 IGMP
224.0.0.25 Router to Switch
(
Such as:RGMP-
路由器端口组管理协议)
<2>
全球范围地址
(
用于组织间和跨越
Internet
的多播数据
)
224.0.1.0 ~ 238.255.255.255
<3>
受限范围地址
(
限制到一个本地组或组织
)
239.0.0.0 ~ 239.255.255.255
<4>GLOP
地址(保留给已有一个保留
AS
号的组织)
233.0.0.0 /8
域的
AS
号嵌入在
233.0.0.8/8
范围的第
2
和第
3
个字节中。
例:
AS 62010
被写成
16
进制的
F 23A
,分开两个字节
F2
和
3A
的结果是十进制的
242
和
58
,这提供给子网
233.242.58.0,
它全球保留给
AS 62010
使用
.
Layer 2 Multicast Address
:
分配了一个第
3
层多播地址后,第
2
层多播地址会自动从这个
IP
地址中产生。
主机将
IP
地址后
23
比特复制到
MAC
地址的最后
24
位中,高比特为
0
。
MAC
多播前
3
字节(
24
比特)是
0x01-00-5E
。这是为多播保留的。
Layer3组播地址为28 bits,Layer2组播地址为23 bits,这样layer3组播地址的5个bits被忽略。至使
一个
MAC
多播对应
32
个
IP
多播。即一个第
2
层多播地址对应
32
个第
3
层多播。
将layer3组播地址转换为layer2组播地址方式:
1>取出layer3组播地址的后23位
2>前边加上layer2组播专用的 01.00.5e.
例:
224.0.0.1
1>后23位为00.0001
2>前边加上01.00.5e
3>结果为:0100.5e00.0001
Layer 2 Multicast vs. Layer 3 Multicast Address
IP to MAC:
- write down 0100.5e and ignore the first (from the left) octet of the IP address
- If the second octet of the IP is > 128, then subtract 128 from it (to compensate for the ignored 24th bit)
- convert the three octets to hex and copy into the MAC address
- write down 0100.5e and ignore the first (from the left) octet of the IP address
- If the second octet of the IP is > 128, then subtract 128 from it (to compensate for the ignored 24th bit)
- convert the three octets to hex and copy into the MAC address
MAC to IP
- Drop the 0100.5e
- Convert each pair of nybbles left into decimal
- The valid multicast groups are then {224-239}.{x1,y1}.x2.x3 where y1 = the first decimal number + 128
- Convert each pair of nybbles left into decimal
- The valid multicast groups are then {224-239}.{x1,y1}.x2.x3 where y1 = the first decimal number + 128
PC’s Multicast Protocol
:
IGMPv1,IGMPv2,IGMPv3
IGMP(
主机成员协议
)
主要由多播主机使用,它通知本地多播路由器它们想加入一个特定多播组时并开始接收组流量。
使用通过
IGMP
获得的信息,路由器基于每个接口维护一张多播组成员表。
Cisco IOS 11.3(2)T
及以后的版本默认使用
IGMPv2
,
IGMPv3
可用于
Cisco IOS 12.0(15)S
及以后的版本。
IGMPv1
:(隐式离开多播组)
IGMPv1
消息类型:
²
主机成员查询
(由路由器发起,默认为
60 s/t
)
²
主机成员报告
主机成员查询消息在第
3
层中的目的地址:
224.0.0.1
;第
2
层地址:
01-00-5E-00-00-01
;
IGMP
头组地址:
0.0.0
.0
,转换为网段上所有组的所有多播主机的查询。
IGMPv1
不能针对特定组查询
。
每个网段上只有一台路由器发布成员查询消息。
IGMPv1
中,由
DR
发出查询;
IGMPv2
中,该网段上有最低
IP
地址的多播路由器发出查询。
3
个查询后没有特定多播组的成员报告,则路由器停止转发这个组的多播分组。
每个网段上只有一台主机发送主机成员报告。
主机接收到成员查询时,如果它想继续接收这个多播组的多播帧,它等待一个
10
秒的随机定时器过期后发送一个成员报告。如果在等待期间监控到同网段上另一个主机回复了一个主机成员报告,则它取消定时器并抑制报告。这个行为避免网段和路由器遭遇主机成员报告的洪泛。
IGMPv2
:(显式离开多播组)
IGMPv2
消息类型:
²
0x11 –
成员查询
(
IGMPv2
允许对一个特定组查询)
²
0x12 –
版本
1
成员报告
²
0x16 –
版本
2
成员报告
²
0x17 –
离开组
路由器收到特定网段上的主机的离开组消息,不会立刻停止对该网段转发多播分组。
因为它保存了一张活动在子网上的惟一组成员列表,而不是成员的个别主机,所以在收到主机离开组消息后,它会发送对该网段的一个特定多播组查询,如果有其它机还想接收,它们会回复一个成员报告;否则路由器会超时这个查询分组,并停止转发多播分组到这个网段上。
IGMPv1
和
IGMPv2
互操作:
²
路由器使用
IGMPv1
,主机混合使用
IGMPv1
与
IGMPv2
,则主机必须使用
IGMPv1
。因为
IGMPv1
路由器不理解
IGMPv2
的成员离开消息。
²
路由器使用
IGMPv2
,主机混合使用
IGMPv1
与
IGMPv2
,则路由器只发送
IGMPv1
。因为
IGMPv1
主机不理解特定组的成员查询消息。如果
IGMPv2
主机发送了成员离开消息,路由器必须忽略它,因为它必须仍然发布常规的查询以防
IGMPv1
的成员仍在网段中。
²
IGMPv1
与
IGMPv2
路由器在同一网段中出现,
IGMPv2
路由器必须被配置为
IGMPv1
,且
IGMPv1
路由器不会发觉到
IGMPv2
路由器的存在。
IGMPv3
:(源过滤支持)
它允许多播主机通知路由器它想接收哪个组的多播分组,以及期望这个分组来自哪个源,进而达到保留带宽的目的。
IGMPv3
支持明确定义主机希望接收的分组源,可以使用以下
2
种模式通知作为一个多播组的成员:
²
Include Mode
:主机宣布作为一个多播组的成员,并指定它想要接收的分组源地址列表。
²
Exclude Mode
:主机宣布作为一个多播组的成员,并指定它不想接收的分组源地址列表。为了接收所有源的多播分组(
IGMPv2
默认),可以使用一个空
Exclude Mode
列表。
Switch’s Multicast Protocol
:
²
IGMP Snooping
:
LAN
交换机检查或“嗅探”主机和路由器之间的
IGMP
分组中的一些第
3
层信息。将加入的主机的端口号放到交换机的多播表项,离开的主机从表中移除。
²
CGMP
:
Cisco
专有的协议,
CGMP
基于客户
/
服务器模型。路由器被认为一个
CGMP
服务器,交换机则是客户。
IP
多播路由器查看所有
IGMP
分组,因此当特定主机加入或离开多播组时可以通知交换机。交换机于是使用这个信息来构建一个转发表。
IGMP Snooping
:
IGMP
控制消息作为多播分组发送,不能从第
2
层多播数据中区分出多播数据与多播控制消息,所以交换机必须检查每个多播分组来确定其是不是控制消息。当数据高速传输时,在低端交换机上启动
IGMP Snooping
会严重影响性能。
IGMP Snooping
默认是全局启动的,它也可以基于每个
VLAN
启动或关闭。
IGMP Snooping Configuration
:
Swtich(config)#ip igmp snooping //
全局开启
IGMP Snooping
Switch(config)#no ip igmp snooping vlan 2 //
关闭
VLAN
上的
IGMP Snooping
Switch(config)#ip igmp snooping vlan 1 mrouter serial 0/1 //
指定到多播路由器的下一跳接口
在端口上检测到
IGMPv2
的离开消息后,无需发送特定多播组查询,立即从
IP
多播组中删除该端口
Switch(config)#ip igmp snooping vlan 1 immediate-leave
Switch#show ip igmp snooping
Switch#show mac-address-table multicast [vlan vlan-id] [user | igmp-snooping] [count]
Multicast Packet Management
:
多播地址标识一个特定的传输会话,而非一个特定的物理目的。
分发树(
Distribution Tree
):指定源子网和包含多播组成员的每个子网间的一条惟一转发路径。
²
源树(
SPT
):根是多播流量的源,分支形成一棵到接收者的最短路径树。专用符号:(
S,G
)
²
共享树(
CBT
):根在网络中某个选定的汇合点(
RP
)的公共根。专用符号:(
*,G
)
多播
TTL
门限:
多播
TTL
字段控制分组的生存时间。
TTL
功能防止分组由于路由选择的错误而永远循环下去。
启用多播的路由器为每个接口分配一个
TTL
门限,默认为
0
,即转发所有的多播分组。比较分组
TTL
值和接口门限,
TTL
值大于接口门限的分组被转发,路由器在将分组从接口发送出去时将分组的
TTL
值减
1
;
TTL
值等于或小于门限的分组被丢弃。
TTL
接口门限可配置的范围:
0
~
255
反向路径转发(
Reverse Path Forwarding
):对照单播路由表检查来源是否正确
<1>
路由器在单播路由选择表中查找源地址来决定它是否在位于正确的接口上到达。
<2>
如果分组位于的接口上到达,
RPF
检查成功,转发分组。
<3>
如果
RPF
检查失败,则丢弃分组。
在多台路由器与一个
LAN
网段相连的多层交换网络中,只有一台
PIM
指定路由器将来自信源的多播数据包转发到与出站接口相连的接收方。
Router’s Multicast Protocol
:
PIM
不依赖与任何的
IP
路由选择协议,不维护独立的多播路由表,只使用已有的路由表执行
RPF
检查。
协议无关多播密集模式(
Protocol-Independent Multicast Dense-Mode
):
PIM-DM
假定多组成员密集分布在整个网络中并且带宽充足,且大多数主机都属于这个组。通过在网络中每
3
分一次的洪泛与剪枝来建立和维护分发树。
Dense-Mode
使用
SPT
以“推原则”来发送(
S
,
G
)多播分组。即不管你是否需要,先发送给你,在你不要时,进行剪枝。
协议无关多播稀疏模式(
Protocol-Independent Multicast Sparse-Mode
):
PIM-SM
被认为是更有效的多播解决方案,它是部署
Auto-RP
时推荐使用的模式。
PIM-SM
假定多播成员稀疏分布在整个网络中,并带宽不太充裕。注意:稀疏并不意味着成员少,而是它们的分布广泛。这时洪泛会严重的浪费带宽,进而可能引发其它的性能问题。
Sparse-Mode
使用
CBT
从一棵空树开始,以一种“拉原则”来发送(
*
,
G
)多播分组。即你需要时才发送给你,前提必须注册。
PIM-SM
模式下,发送者首先把数据发送到
RP
(汇合点),当一个接收者想接收数据时,到
RP
去注册。当数据流从发送者到
RP
再到接收者时,路径上的路由器会自动优化路径为
SPT
来移去不必要的跳。
PIM DR
:
如果在两台PIM路由器之间有一条直接连接,则它们是邻居。
DR
选举仅在BMA网络中,P2P链路上不需要,因为所连接的路由器是直连主机系统的有效DR。
DR
的选举过程对于PIM-DM与PIM-SM是一样的。连接到BMA网络上的每台PIM路由器发布周期的PIM路由器查询到LAN上,具有最高IP地址的PIM路由器成为LAN的DR。
在BMA 网络上,DR用来轮询LAN的主机组成员,但是所有的PIM路由器都收到来自主机的应答。
Auto-RP
:
大型网络中手式配置多个多播汇合点可能导致不一致的RP配置,并引起连接问题。Auto-RP默认关闭。
Auto-RP
是Cisco私有的协议,它在一个运行PIM-SM网络中自动发布组到RP的映射。它也允许根据组参与者的位置在不同RP之间进行负载均衡和RP分配。
RP Candidate
发送的CISCO-RP-ANNOUNCE通告消息到RP映射代理(224.0.1.39),然后RP映射代理发送CISCO-RP-DISCOVERY发现消息(包括一致的组到RP的映射关系)到所有DR(224.0.1.40)。这种方法允许所有DR自动发现使用哪一个RP连接接收者与发送者。
Multicast Routing Protocol Configuration
:
注意:正常使用多播并完成
RPF
检查,必须在每个接口启动多播。
全局启用
ip
多播路由选择:
Router(config)#ip multicast-routing
在接口上启动
PIM
:
Router(config)#interface serial 0/1
Router(config-if)#ip pim sparse-mode
Router(config-if)#ip pim dense-mode
Router(config-if)#ip pim sparse-dense-mode
更改
IGMP
版本:
Router(config-if)#ip igmp version { 3 | 2 | 1 }
定义接口
TTL
门限:
Router(config-if)#ip multicast ttl-threshold ttl
手动指定
RP
地址:
Router(config)#ip pim rp-address rp-address
启动
Auto-RP,
并做为
RP Candidate
:
Router(config)#ip pim send-rp-announce type number Scope ttl group-list access-list-number
配置为
RP
映射代理:
Router(config)#ip pim send-rp-discovery scope ttl
让路由器加入一个多播组,使其响应一个多播分组:
Router(config)#ip igmp join-group group-address
显示
PIM
邻居:
Router(config)#show ip pim neighbor