目录
一、概述
为什么需要多播呢?为什么不使用单播或广播方式从单个源端像多个目的端发送消息呢?
单播:单播要求视频应用像每个组成员都发送一份数据包拷贝,少量接收端可接受,大量接收端就会遇到带宽瓶颈,扩展性差。
广播:广播只需发送一次数据,但如果不在同一广播域路由器就要转发广播流量,实际中转发广播流量是最差的解决方案。浪费网络资源和增加网络设备处理负荷。
多播:提供可扩展可管理的解决方案。优点很多也有一些缺点,多播基于UDP因而不可靠,缺乏窗口机制和慢启动容易产生拥塞,偶尔产生重复失序数据包问题。但是可以通过一些容错或QOS弥补。
二、多播地址范围
多播组分配三层多播地址后会自动生成二层多播地址(多播MAC)
多播地址范围 | 用途 |
224.0.0.0~239.255.255.255/4 | 表示整个IPV4多播地址空间 |
224.0.0.0~224.0.0.255/24 | 属于永久多播组,本地链路组播,路由器不转发 |
224.0.1.0~224.0.1.255/24 | 属于永久多播组,整个网络转发,路由器转发 |
232.0.0.0~232.255.255.255/8 | SSM应用,指定源多播 |
233.0.0.0~233.255.255.255/8 | GLOP地址,自治系统之间多播地址分配机制,给ASN企业自动分配256个地址 |
239.0.0.0~239.255.255.255/8 | 私有多播域,管理定界的多播地址 |
多播地址空间剩余的地址 | 临时组地址,用完即释放 |
常用的周知组播地址
224.0.0.1——子网内全部多播主机
224.0.0.2——子网内全部多播路由器
224.0.0.4——DVMRP路由器
224.0.0.5——全部OSPF路由器
224.0.0.6——全部DR路由器
224.0.0.9——RIPV2路由器
224.0.0.10——EIGRP路由器
224.0.0.13——PIM路由器
224.0.0.22——IGMPV3
224.0.0.25——RGMP
224.0.1.39——cisco RP宣告
224.0.1.40——cisco RP 发现
三、IGMP 互联网组管理协议
IGMP为三层协议,是为路由器和主机提供通信机制,IGMP数据包在LAN中传播,路由器不转发。目前版本为IGMPV2和IGMPV3。cisco私有CGMP和RGMP属于二层协议。
两个主要功能:1告知本地多播路由器,主机希望接收指定多播组的多播流量 2告知本地多播路由器,主机希望离开指定多播组
IGMPV2功能特性:1主机成员关系查询2主机成员关系报告3请求主机成员关系报告4非请求主机成员关系报告5离开组消息和指定组查询6查询路由器选举7IGMP监听帮助二层交换机确定如何将多播流量分发给主机8IGMP代理允许在单向链路路由场景下不直连下游路由器的主机加入源自上游网络的多播组
在多播网络中的作用:解决多播路由器与主机之间的通信以及确定是否在子网上转发或停止转发多播流量
四、IP多播路由
在多播网络中的作用:解决多播路由器如何接收多播组流量以及多播流量如何从源端转发到所有多播用户
多播路由协议:PIM-SM属于稀疏模式多播路由协议 PIM-DM DVMRP MOSPF 属于密集模式多播路由协议 本文主要讲应用广泛的稀疏模式PIM-SM
密集模式多播路由协议行为:默认持续转发多播组流量,除非下游路由器发送消息称不再希望接收该多播组流量
稀疏模式多播路由协议行为:不将多播组流量转发给任何其他路由器,除非收到其他路由器发送的消息称希望接收发送到指定多播组的数据包拷贝
下游路由器请求多播包的原因:1该路由器从下游路由器接收到希望接收该多播包的请求 2直连子网上主机发送了该多播组的IGMP加入消息
多播定界方式:1TTL定界 2管理性定界,手工配置在接口上应用过滤器
PIM-SM操作机制
1、通过交换HELLO消息发现PIM邻居
2、单播路由表发生变化重新计算RPF接口
3、MA网络利用宣称消息选举DR并进行RP发现
4、MA网络中使用剪除覆盖机制
PIM-SM转发工作过程
1、源端将多播包发送给RP路由器
2、完成源注册进程,注册消息功能一是允许路由器告诉RP,自己拥有特定多播组的本地源端;二是允许路由器将多播包(封装在单播包内)转发给RP,直到注册进程结束
2、RP将多播包发送给所有已经注册希望接收该多播组流量的路由器或主机,过程使用RPT树,表示(*,G)
3、进行SPT(有源最短路径树)切换,加入特定的(S,G)SPT
4、通过持续发送加入消息实现稳定状态
5、PIM-SM路由器加入一个高效的SPT,因而可以要求RP停止发送该多播组流量,即发送剪除消息
动态发现RP
选择静态RP的次优方案
1、实际网络中拥有大量PIM-SM路由器并希望为不同多播组使用很多不同的RP,此时静态配置任务耗时切繁重
2、RP故障或更新RP,避免长时间宕机切换困难
RPF检查:反向路径转发,即检查多播源IP地址,如果匹配该源IP地址的路由列出的出站口与收到该多播包的接口一致,则该多播包通过RPF检查,否则不通过丢弃该多播包(不复制不转发)
Auto-RP(cisco私有)
Auto-RP处理过程:
1、每台RP都被配置为利用Auto-RP协议通过RP-Announce消息(224.0.1.39)来通告自己以及自己所支持的多播组
2、Auto-RP 映射代理(Mapping Agent 可是RP路由器也可不是)通过侦听RP-Announce消息收集所有RP的信息
3、Mapping Agent根据接收的RP-Announce消息构造Group-to-RP映射表,列出每个多播组当前最佳RP,如果多台RP都支持同一个多播组,那么选择IP地址最大的RP
4、Mapping Agent向224.0.1.40发送RP-Discovery消息来通告映射信息
5、所有路由器都侦听发送给224.0.1.40的数据包并学习映射信息找到每个多播组的正确RP
注意:auto-RP的 作用是找到RP,但是要收到RP-Announce消息和RP-Discovery消息,需要向RP发送加入消息,但此时PIM-SM路由器并不知道谁是RP。解决这个问题的一种方式是配置pim稀疏密集模式 ip pim sparse-dense-mode;另一种方式是配置PIM-SM模式并开启auto-RP侦听路由器 ip pim autorp listener 此模式可以避免稀疏密集模式不必要的泛洪。
RP冗余模式:可以配置多台RP和多台映射代理实现冗余,同一个多播组支持多台RP,映射代理会选择IP地址最大的路由器为该多播组的RP
BSR(自举路由器)
BSR路由器类似于Auto-RP的映射代理路由器,BSR路由器收集RP的映射信息然后通过Bootstrap消息通告给其他路由器。操作特点如下:
1、BSR路由器在Bootstrap消息中将所有Group-to-RP映射信息都发送给其他PIM路由器,只发信息不为每个多播组选择最佳RP
2、PIM路由器对Bootstrap消息中的映射消息进行相同的哈希算法,为每个多播组选出当前最佳RP
3、BSR通过非RPF接口将Bootstrap消息泛洪给所有PIM路由器(24.0.0.13),避免环路
4、泛洪不需要路由器知道RP或者支持密集模式
5、冗余模式与auto-rp一致
MSDP
基于MSDP的域间多播路由
不同多播域之间的转发需要配置MSDP协议来互相告知所有已知的多播源,MSDP对等体采用静态配置方式,交互SA(源有效)信息,RP必须拥有到达所有对等体以及多播源路由,通常使用MBGP来实现,不配置MBGP可能会RPF检查失败,导致SA接收失败;如不配置MBGP又要接收SA可以在接收端配置defult msdp
基于MSDP协议的任播RP(Anycast RP)
任播RP为一种部署特性,需要结合静态RP、Auto-RP、以及BSR。
任播RP与Auto-RP及BSR的区别在于冗余RP方式
1、无任播RP情况 每个多播组只能有一台路由器为有效RP,在一组RP之间实现负载共享的方式是为不同多播组设置不同的RP
2、有任播RP情况 RP冗余与负载共享的方式是让多个RP同时成为相同多播组的RP
任播RP的工作方式
1、每个RP都配置同一个IP地址
2、所有RP通过IGP宣告该IP地址
3、所有其他学习RP方式(静态/auto-rp/BSR)都将多个RP视为单个RP
4、所有发给RP的数据包都将按照IGP路由传送给最近的RP
任播RP的优点
1、多个RP同时承担单个多播组的负荷
2、任一个RP发生故障都能实现快速恢复,中断时间仅是IGP收敛以指向另一个共享相同IP地址的另一个RP所需时间
双向PIM
运行机制
1、与常规PIM-SM一样,RP构建以自己为根的共享树以转发多播包
2、多播源发送多播包不适用注册消息,而是沿着共享树从下至上朝着RP的方向转发多播包,此后将为多播源的所有多播包重复该进程
3、RP通过共享树RPT转发多播包
4、按照2 3 步转发所有多播包,RP不加入该多播源的有源树SPT,接收端路由器也不加入该SPT
5、多播路由表中只有(*,G)项,标识为B
SSM(指定源多播)
SSM组地址:232.0.0.0~232.255.255.255
多播地址重叠
每个多播流都是由单播源地址和多播组地址共同标识,因而多播地址可以重叠
拒绝服务攻击
攻击者必须知道多播源地址和多播组地址,而且到达多播源的路由要通过网络的RPF检查
部署复杂性
已经知道多播源地址,不需要RP来记录多播源的状态。可以在使用PIM-SM的网络中部署SSM,只要在最靠近主机的边缘路由器上配置SSM即可
PIM-SSM工作过程
1、接收端要接收指定多播源的信息,此时路由器接口下必须启用IGMPV3
2、路由器通过IGMPV3的报告消息告知最近的DR接收端对指定的多播源信息感兴趣,进行标记(includeS,G)或(excludeS,G),都是指定多播源
3、接收到报文消息DR判断是否属于SSM,如属于配置的SSM多播源,则构建PIM-SSM ,像特定源发送订阅报文,建立SPT树,以特定多播源为根,接收端为叶子节点
4、接收到的报文信息如果不属于SSM,则按照PIM-SM的操作机制进行
IPV6多播PIM
暂无后续添加
五、IP多播综合实验
实验一模拟基础PIM-SM网络(BSR)
拓扑:
R2配置
ip multicast-routing
ip pim bsr-candidate Loopback0 0 200
router ospf 1
router-id 2.2.2.2
interface Loopback0
ip address 2.2.2.2 255.255.255.255
ip pim sparse-mode
ip ospf 1 area 0
interface Ethernet2/0
ip address 10.1.2.2 255.255.255.0
ip pim sparse-mode
ip ospf 1 area 0
duplex full
!
interface Ethernet2/1
ip address 10.1.3.2 255.255.255.0
ip pim sparse-mode
ip ospf 1 area 0
duplex full
R3配置
ip multicast-routing
ip pim rp-candidate Loopback0
router ospf 1
router-id 3.3.3.3
interface Loopback0
ip address 3.3.3.3 255.255.255.255
ip pim sparse-mode
ip ospf 1 area 0
interface Ethernet2/0
ip address 10.1.5.3 255.255.255.0
ip pim sparse-mode
ip ospf 1 area 0
duplex full
!
interface Ethernet2/1
ip address 10.1.3.3 255.255.255.0
ip pim sparse-mode
ip ospf 1 area 0
duplex full
!
R4配置
ip multicast-routing
router ospf 1
router-id 4.4.4.4
interface Loopback0
ip address 4.4.4.4 255.255.255.255
ip pim sparse-mode
ip ospf 1 area 0
interface Ethernet2/0
ip address 10.1.6.4 255.255.255.0
ip pim sparse-mode
ip ospf 1 area 0
duplex full
!
interface Ethernet2/1
ip address 10.1.4.4 255.255.255.0
ip pim sparse-mode
ip ospf 1 area 0
duplex full
!
interface Ethernet2/2
ip address 10.1.7.4 255.255.255.0
ip pim sparse-mode
ip ospf 1 area 0
duplex full
R7配置
no ip routing
ip default-gateway 10.1.7.4
interface Ethernet2/2
ip address 10.1.7.10 255.255.255.0
no ip route-cache
ip igmp join-group 239.1.1.1
duplex full
测试:服务器上执行ping239.1.1.1 操作
R4:RPT树和SPT树
实验二模拟域间组播PIM-SM(MSDP/MBGP/任播RP)
拓扑:右边双链路是模拟有将单播与多播流量分开走的需求
R1配置:
ip multicast-routing
interface Loopback0
ip address 1.1.1.1 255.255.255.255
ip pim sparse-mode
ip ospf 1 area 0
!
interface Loopback10
ip address 10.10.10.10 255.255.255.255
ip pim sparse-mode
ip ospf 1 area 0
interface Ethernet2/0
ip address 192.168.2.1 255.255.255.252
ip pim sparse-mode
ip ospf 1 area 0
duplex full
!
interface Ethernet2/1
ip address 192.168.1.2 255.255.255.252
ip pim sparse-mode
duplex full
!
router ospf 1
router-id 1.1.1.1
!
router bgp 100
bgp router-id 1.1.1.1
bgp log-neighbor-changes
neighbor 2.2.2.2 remote-as 100
neighbor 2.2.2.2 update-source Loopback0
neighbor 192.168.1.1 remote-as 200
!
address-family ipv4
network 1.1.1.1 mask 255.255.255.255
network 10.10.10.10 mask 255.255.255.255
neighbor 2.2.2.2 activate
neighbor 2.2.2.2 next-hop-self
neighbor 192.168.1.1 activate
exit-address-family
!
address-family ipv4 multicast
network 1.1.1.1 mask 255.255.255.255
network 10.10.10.10 mask 255.255.255.255
neighbor 2.2.2.2 activate
neighbor 2.2.2.2 next-hop-self
neighbor 192.168.1.1 activate
exit-address-family
!
ip pim bsr-candidate Loopback10 0
ip pim rp-candidate Loopback10
ip msdp peer 192.168.1.1 connect-source Ethernet2/1
ip msdp peer 2.2.2.2 connect-source Loopback0
ip msdp cache-sa-state
ip msdp originator-id Loopback0
ip msdp mesh-group anycast-rp 2.2.2.2
R4配置:
ip multicast-routing
interface Loopback0
ip address 4.4.4.4 255.255.255.255
ip pim sparse-mode
ip ospf 1 area 0
!
interface Loopback30
ip address 30.30.30.30 255.255.255.255
ip pim sparse-mode
ip ospf 1 area 0
interface Ethernet2/0
ip address 192.168.4.2 255.255.255.0
ip pim sparse-mode
ip ospf 1 area 0
duplex full
!
interface Ethernet2/1
ip address 192.168.1.9 255.255.255.252
ip pim sparse-mode
ip ospf 1 area 0
duplex full
!
interface Ethernet2/2
ip address 192.168.1.5 255.255.255.252
ip pim sparse-mode
ip ospf 1 area 0
duplex full
router ospf 1
router-id 4.4.4.4
!
router bgp 300
bgp router-id 4.4.4.4
bgp log-neighbor-changes
no bgp default ipv4-unicast
neighbor 192.168.1.6 remote-as 100
neighbor 192.168.1.10 remote-as 100
!
address-family ipv4
network 4.4.4.4 mask 255.255.255.255
network 30.30.30.30 mask 255.255.255.255
network 192.168.4.0
neighbor 192.168.1.6 activate
exit-address-family
!
address-family ipv4 multicast
network 4.4.4.4 mask 255.255.255.255
network 30.30.30.30 mask 255.255.255.255
network 192.168.4.0
neighbor 192.168.1.10 activate
exit-address-family
ip pim bsr-candidate Loopback30 0
ip pim rp-candidate Loopback30
ip msdp peer 192.168.1.10 connect-source Ethernet2/1 remote-as 100
ip msdp cache-sa-state
ip msdp originator-id Loopback0
在SW服务器端执行操作ping 239.1.1.1 repeat 50
在R1上show ip mroute,可以看到源192.168.227.1的SPT
多播流量链路,用抓包软件可以看到多播包
单播流量链路,可以看到回包
在SW上直接pingPC地址 ping 192.168.4.1 repeat50,在看多播链路与单播链路
单播流量链路
多播流量链路,无数据包通过
单条链路
六、IP多播故障分析排除
后续更新